tosijs-3d 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/dist/asset-url.d.ts +10 -0
  2. package/dist/asset-url.d.ts.map +1 -0
  3. package/dist/asset-url.js +37 -0
  4. package/dist/asset-url.js.map +1 -0
  5. package/dist/b3d-aircraft.d.ts +67 -0
  6. package/dist/b3d-aircraft.d.ts.map +1 -1
  7. package/dist/b3d-aircraft.js +476 -2
  8. package/dist/b3d-aircraft.js.map +1 -1
  9. package/dist/b3d-biped.d.ts +16 -0
  10. package/dist/b3d-biped.d.ts.map +1 -1
  11. package/dist/b3d-biped.js +80 -1
  12. package/dist/b3d-biped.js.map +1 -1
  13. package/dist/b3d-controllable.d.ts.map +1 -1
  14. package/dist/b3d-controllable.js +6 -1
  15. package/dist/b3d-controllable.js.map +1 -1
  16. package/dist/b3d-controller.d.ts +38 -0
  17. package/dist/b3d-controller.d.ts.map +1 -0
  18. package/dist/b3d-controller.js +64 -0
  19. package/dist/b3d-controller.js.map +1 -0
  20. package/dist/b3d-destroyable.d.ts +39 -7
  21. package/dist/b3d-destroyable.d.ts.map +1 -1
  22. package/dist/b3d-destroyable.js +187 -50
  23. package/dist/b3d-destroyable.js.map +1 -1
  24. package/dist/b3d-hud.d.ts +127 -0
  25. package/dist/b3d-hud.d.ts.map +1 -0
  26. package/dist/b3d-hud.js +368 -0
  27. package/dist/b3d-hud.js.map +1 -0
  28. package/dist/b3d-launcher.d.ts +188 -0
  29. package/dist/b3d-launcher.d.ts.map +1 -0
  30. package/dist/b3d-launcher.js +521 -0
  31. package/dist/b3d-launcher.js.map +1 -0
  32. package/dist/b3d-loader.d.ts +28 -0
  33. package/dist/b3d-loader.d.ts.map +1 -1
  34. package/dist/b3d-loader.js +86 -1
  35. package/dist/b3d-loader.js.map +1 -1
  36. package/dist/b3d-radar-blip.d.ts +37 -0
  37. package/dist/b3d-radar-blip.d.ts.map +1 -0
  38. package/dist/b3d-radar-blip.js +120 -0
  39. package/dist/b3d-radar-blip.js.map +1 -0
  40. package/dist/b3d-radar.d.ts +42 -0
  41. package/dist/b3d-radar.d.ts.map +1 -0
  42. package/dist/b3d-radar.js +133 -0
  43. package/dist/b3d-radar.js.map +1 -0
  44. package/dist/b3d-star-system.d.ts.map +1 -1
  45. package/dist/b3d-star-system.js +3 -1
  46. package/dist/b3d-star-system.js.map +1 -1
  47. package/dist/b3d-turret.d.ts +73 -0
  48. package/dist/b3d-turret.d.ts.map +1 -0
  49. package/dist/b3d-turret.js +296 -0
  50. package/dist/b3d-turret.js.map +1 -0
  51. package/dist/b3d-utils.d.ts +8 -0
  52. package/dist/b3d-utils.d.ts.map +1 -1
  53. package/dist/b3d-utils.js +14 -0
  54. package/dist/b3d-utils.js.map +1 -1
  55. package/dist/b3d-warhead.d.ts +39 -0
  56. package/dist/b3d-warhead.d.ts.map +1 -0
  57. package/dist/b3d-warhead.js +231 -0
  58. package/dist/b3d-warhead.js.map +1 -0
  59. package/dist/ballistics.d.ts +11 -0
  60. package/dist/ballistics.d.ts.map +1 -1
  61. package/dist/ballistics.js +35 -0
  62. package/dist/ballistics.js.map +1 -1
  63. package/dist/destroyable-behavior.d.ts +66 -0
  64. package/dist/destroyable-behavior.d.ts.map +1 -0
  65. package/dist/destroyable-behavior.js +174 -0
  66. package/dist/destroyable-behavior.js.map +1 -0
  67. package/dist/game-controller.d.ts +3 -0
  68. package/dist/game-controller.d.ts.map +1 -1
  69. package/dist/game-controller.js +36 -2
  70. package/dist/game-controller.js.map +1 -1
  71. package/dist/guidance.d.ts +65 -0
  72. package/dist/guidance.d.ts.map +1 -0
  73. package/dist/guidance.js +150 -0
  74. package/dist/guidance.js.map +1 -0
  75. package/dist/hud-math.d.ts +88 -0
  76. package/dist/hud-math.d.ts.map +1 -0
  77. package/dist/hud-math.js +148 -0
  78. package/dist/hud-math.js.map +1 -0
  79. package/dist/hud.d.ts +72 -0
  80. package/dist/hud.d.ts.map +1 -0
  81. package/dist/hud.js +309 -0
  82. package/dist/hud.js.map +1 -0
  83. package/dist/iife.js +1745 -1773
  84. package/dist/iife.js.map +36 -46
  85. package/dist/index.d.ts +20 -2
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +18 -2
  88. package/dist/index.js.map +1 -1
  89. package/dist/radar.d.ts +75 -0
  90. package/dist/radar.d.ts.map +1 -0
  91. package/dist/radar.js +129 -0
  92. package/dist/radar.js.map +1 -0
  93. package/dist/tosi-b3d.d.ts +57 -0
  94. package/dist/tosi-b3d.d.ts.map +1 -1
  95. package/dist/tosi-b3d.js +205 -14
  96. package/dist/tosi-b3d.js.map +1 -1
  97. package/dist/virtual-gamepad.d.ts.map +1 -1
  98. package/dist/virtual-gamepad.js +11 -0
  99. package/dist/virtual-gamepad.js.map +1 -1
  100. package/package.json +3 -2
@@ -13,7 +13,7 @@ The full flight model is explained below the demo.
13
13
  ## Demo
14
14
 
15
15
  ```js
16
- import { b3d, b3dAircraft, b3dLibrary, b3dLight, b3dSun, b3dSkybox, b3dGround, gameController, inputFocus } from 'tosijs-3d'
16
+ import { b3d, b3dAircraft, b3dHud, b3dLibrary, b3dLight, b3dSun, b3dSkybox, b3dGround, gameController, inputFocus } from 'tosijs-3d'
17
17
  import { elements } from 'tosijs'
18
18
  const { div, span } = elements
19
19
 
@@ -85,6 +85,9 @@ const scene = addMarkers(b3d(
85
85
  // aircraft's shadow would shrink to sub-pixel (i.e. invisible).
86
86
  b3dGround({ meshName: 'ground_nocast', width: 500, height: 500, color: '#7d9b6e' }),
87
87
  b3dLibrary({ url: '/test-2.glb', type: 'vehicles' }),
88
+ // Drop in the gauge HUD — the player aircraft drives it automatically (speed,
89
+ // altitude vs `ceiling`, and the pitch/roll horizon).
90
+ b3dHud({}),
88
91
  inputFocus(
89
92
  gameController(),
90
93
  aircraft,
@@ -140,6 +143,114 @@ tosi-b3d { width: 100%; height: 100%; }
140
143
  }
141
144
  ```
142
145
 
146
+ ## Combat — radar, locks, guns & missiles
147
+
148
+ The aircraft carries a [radar](?b3d-radar.ts) (a `<tosi-b3d-radar>` child) that paints
149
+ every [radar-blip](?b3d-radar-blip.ts) in range on the HUD — **red = hostile, tan =
150
+ neutral**, a diamond ahead is a **waypoint** — and builds a **lock** on the nearest
151
+ *hostile* in front of you (up to two). Fly a target into the **gun reticle** (the ring
152
+ ahead of the nose) and hold fire for the straight-ahead cannon; tap **missile** to send a
153
+ guided round at your nearest lock (no lock ⇒ it flies ballistic). Neutrals show on radar
154
+ but never lock. Your own missile shows as a faint friendly blip. Targets glow redder as
155
+ they take damage, then explode.
156
+
157
+ **Controls:** on the glass pad, **A = guns** (hold), **B = missile**, **right bumper =
158
+ bomb**. On the keyboard: `Space` = guns, `F` = missile, `RShift` = bomb. (Fly with W/S
159
+ pitch, A/D bank, R/Q throttle.)
160
+
161
+ ```js
162
+ import { b3d, b3dAircraft, b3dRadar, b3dRadarBlip, b3dHud, b3dLibrary, b3dDestroyable, b3dLight, b3dSun, b3dSkybox, b3dGround, gameController, inputFocus } from 'tosijs-3d'
163
+ import { elements } from 'tosijs'
164
+ const { div } = elements
165
+
166
+ // The aircraft with an attached radar: 250m nominal range, front hemisphere, ~1.2s to
167
+ // lock, up to 2 locks. Its state is surfaced on the HUD (the radar itself has no UI).
168
+ const RADAR_RANGE = 250 // nominal radar range (m); a profile-1 blip detects within it
169
+ const MAX_ALT = 300 // the aircraft's max altitude (its `ceiling`, default 300)
170
+
171
+ const aircraft = b3dAircraft({
172
+ library: 'vehicles', meshName: 'scout',
173
+ player: true, y: 0, vtolSpeed: 6, maxSpeed: 55,
174
+ hudChase: true, // show the HUD (and its radar) in the chase view, not just cockpit
175
+ }, b3dRadar({ range: RADAR_RANGE, coneDeg: 90, lockTime: 1.2, maxLocks: 2 }))
176
+
177
+ // A target = a destroyable cube that's ALSO a radar-blip (nested, so the blip follows
178
+ // the cube). Faction picks the colour + whether the radar will lock it: HOSTILE locks,
179
+ // NEUTRAL only shows. capacity 6 ≈ one cannon burst or one missile.
180
+ function target({ faction, ...pos }) {
181
+ const color = faction === 'hostile' ? '#d05050' : '#c7ad55'
182
+ return b3dDestroyable(
183
+ { meshName: 'drone', size: 2.4, color, capacity: 6, ...pos,
184
+ explode: 'on', explodeForce: 8,
185
+ deathBlast: 'on', blastDamage: 10, blastFullRadius: 2, blastRadius: 6 },
186
+ b3dRadarBlip({ faction, profile: 1 }),
187
+ )
188
+ }
189
+
190
+ // Scatter targets across a wide forward arc, 0.5×–1.5× radar range out — so some sit
191
+ // BEYOND radar range and only appear as you close on them. AERIAL targets span 0.1×–
192
+ // 1.25× the aircraft's max altitude (a few above its ceiling → radar contacts you can
193
+ // only reach with a missile); GROUND targets sit on the deck.
194
+ function scatter(aerial) {
195
+ const d = RADAR_RANGE * (0.5 + Math.random()) // 0.5×..1.5× range
196
+ const az = (Math.random() - 0.5) * (170 * Math.PI / 180) // ±85° around the nose (+Z)
197
+ return target({
198
+ faction: Math.random() < 0.65 ? 'hostile' : 'neutral',
199
+ x: Math.sin(az) * d,
200
+ z: Math.cos(az) * d,
201
+ y: aerial ? MAX_ALT * (0.1 + Math.random() * 1.15) : 1.0 + Math.random() * 1.2,
202
+ })
203
+ }
204
+ const air = Array.from({ length: 12 }, () => scatter(true))
205
+ const ground = Array.from({ length: 8 }, () => scatter(false))
206
+ const targets = [...air, ...ground]
207
+
208
+ const kills = div({ class: 'kills' }, `Targets down: 0 / ${targets.length}`)
209
+ let down = 0
210
+
211
+ const scene = b3d(
212
+ {
213
+ gamepad: true,
214
+ sceneCreated(el) {
215
+ el.addEventListener('destroyed', () => {
216
+ down += 1
217
+ kills.textContent = `Targets down: ${down} / ${targets.length}`
218
+ })
219
+ // Gently drift the AIR targets so they move on radar but stay hittable.
220
+ let t = 0
221
+ el.scene.onBeforeRenderObservable.add(() => {
222
+ t += el.scene.getEngine().getDeltaTime() / 1000
223
+ air.forEach((d, i) => {
224
+ if (d.dead) return
225
+ d.x += Math.sin(t * 0.3 + i) * 0.02
226
+ d.y += Math.sin(t * 0.6 + i * 2) * 0.01
227
+ })
228
+ })
229
+ },
230
+ },
231
+ b3dLight({ y: 1, intensity: 0.5 }),
232
+ b3dSun({ x: -0.6, y: -1, z: -0.4, intensity: 0.9, shadowTextureSize: 2048, shadowMaxZ: 300 }),
233
+ b3dSkybox({ timeOfDay: 10 }),
234
+ b3dGround({ meshName: 'ground_nocast', width: 900, height: 900, color: '#7d9b6e' }),
235
+ b3dLibrary({ url: '/test-2.glb', type: 'vehicles' }),
236
+ b3dHud({}),
237
+ // A NAV WAYPOINT: a positional blip (no mesh), always detectable (profile -1),
238
+ // shown far ahead on the HUD as a waypoint diamond.
239
+ b3dRadarBlip({ faction: 'waypoint', profile: -1, x: 0, y: 25, z: 300 }),
240
+ ...targets,
241
+ inputFocus(gameController(), aircraft),
242
+ )
243
+ preview.append(scene, kills)
244
+ ```
245
+ ```css
246
+ tosi-b3d { width: 100%; height: 100%; }
247
+ .kills {
248
+ position: absolute; top: 10px; right: 10px; z-index: 10;
249
+ padding: 6px 12px; border-radius: 4px;
250
+ background: rgba(0, 0, 0, 0.55); color: #ffcf6a; font: 14px monospace;
251
+ }
252
+ ```
253
+
143
254
  ## Flight model
144
255
 
145
256
  You're in PLANE mode (trigger = forward thrust) if you're fast enough (`vtolSpeed`)
@@ -178,6 +289,35 @@ lift/throttle (the dual-purpose axis above), right stick Y = camera zoom.
178
289
  | `hoverCeiling` | `50` | Height above ground above which the trigger is forward thrust regardless of speed (take off vertically, then fly) and the brake can't stall you below `vtolSpeed`. Below it, slowing to a hover gives the vertical trigger back for a vertical landing. 0 = off. |
179
290
  | `groundY` | `0` | Assumed ground-plane height (a floor in addition to any terrain colliders) |
180
291
  | `crashSpeed` | `8` | Vertical impact speed (m/s) above which a ground contact is a crash |
292
+ | `hudChase` | `false` | Show the flat DOM HUD overlay in chase view (cockpit uses the in-scene HUD) |
293
+ | `hudSize` | `0.7` | In-cockpit HUD plane size (metres) |
294
+ | `hudForward` | `1.6` | How far ahead of the pilot's eye the HUD floats (metres) |
295
+ | `weapons` | `'on'` | `'off'` disarms all weapons |
296
+ | `gunRate` | `9` | Cannon shots/sec while `shoot` is held |
297
+ | `gunSpeed` | `130` | Cannon muzzle speed (added to airspeed) |
298
+ | `gunDamage` | `8` | Per-shell warhead full damage |
299
+ | `missileSpeed` | `55` | Guided-missile cruise speed |
300
+ | `missileTurnRate` | `3` | Guided-missile agility (rad/sec) |
301
+ | `missileDamage` | `30` | Missile warhead full damage |
302
+ | `bombDamage` | `45` | Bomb warhead full damage |
303
+ | `lockRange` | `140` | Max range to acquire a missile target |
304
+ | `lockConeDeg` | `35` | Half-angle of the forward cone missiles lock within |
305
+
306
+ ## Weapons (the combat slice)
307
+
308
+ Built on the pure combat toolkit ([destroyable](?b3d-destroyable.ts) /
309
+ [warhead](?b3d-warhead.ts) / [launcher](?b3d-launcher.ts) / [guidance](?guidance.ts)).
310
+ Shells inherit the airframe's velocity, so your own motion leads the shot. Any
311
+ [b3d-destroyable](?b3d-destroyable.ts) in the scene takes the damage.
312
+
313
+ | Control (default map) | Weapon |
314
+ | --- | --- |
315
+ | **Guns** — A (held) | Cannon: fast ballistic shells, small blast |
316
+ | **Missile** — B (tap) | Homes on your nearest radar lock (else fires straight as a dumb rocket) |
317
+ | **Bomb** — right bumper (tap) | Falls under gravity with your forward momentum; big blast |
318
+
319
+ `fireGuns()`, `dropBomb()`, and `fireMissile()` are also callable directly (e.g. for
320
+ an AI pilot). Set `weapons="off"` to disarm.
181
321
 
182
322
  ## API (read-only properties for HUD binding)
183
323
 
@@ -197,7 +337,8 @@ import * as BABYLON from '@babylonjs/core';
197
337
  import { B3dControllable } from './b3d-controllable';
198
338
  import { aircraftMapping } from './virtual-gamepad';
199
339
  import { flyByWireStep, targetVelocity, chaseVelocity, } from './fly-by-wire';
200
- import { placeOnSurface, boundingBottomOffset } from './b3d-utils';
340
+ import { placeOnSurface, boundingBottomOffset, isOff } from './b3d-utils';
341
+ import { spawnProjectile, spawnMissile } from './b3d-launcher';
201
342
  // Small gap kept between the model's belly and the ground.
202
343
  const GROUND_SEPARATION = 0.05;
203
344
  const DEG2RAD = Math.PI / 180;
@@ -236,6 +377,15 @@ export class B3dAircraft extends B3dControllable {
236
377
  meshName: '',
237
378
  player: false,
238
379
  enterable: false,
380
+ // Service ceiling (m): the aircraft can't climb past it, and it reads full on
381
+ // a linked HUD's altitude gauge.
382
+ ceiling: 300,
383
+ // Show the HUD in the chase view too (default: cockpit view only).
384
+ hudChase: false,
385
+ // In-cockpit HUD plane placement (see b3d-hud attachInScene): its size in metres
386
+ // and how far ahead of the pilot's eye it floats. Tune to taste per airframe.
387
+ hudSize: 0.7,
388
+ hudForward: 1.6,
239
389
  maxSpeed: 50,
240
390
  // Hard speed ceiling while the throttle is held past maxSpeed (afterburner).
241
391
  // Release and it bleeds back to maxSpeed. ≤ maxSpeed disables afterburner.
@@ -256,6 +406,23 @@ export class B3dAircraft extends B3dControllable {
256
406
  // Vertical impact speed (m/s) above which a ground contact is a crash, not
257
407
  // a landing.
258
408
  crashSpeed: 8,
409
+ // --- Weapons (the combat slice; see COMBAT-DESIGN.md). 'off' to disarm. ---
410
+ weapons: 'on',
411
+ gunRate: 9, // cannon shots per second (held `shoot`)
412
+ gunSpeed: 130, // muzzle speed of cannon shells (added to airspeed)
413
+ gunDamage: 8, // per-shell warhead full damage
414
+ missileSpeed: 90, // guided-missile cruise speed (faster than the airframe so it pulls ahead)
415
+ missileAccel: 120, // thrust accel (units/s²) ramping launch → cruise (inherits your velocity)
416
+ missileBoost: 0.45, // boost: forced forward accel; seeker authority ramps in across it
417
+ missileTurnRate: 3, // guided-missile agility (rad/sec)
418
+ missileDamage: 30,
419
+ bombDamage: 45,
420
+ lockRange: 140, // max range to acquire a missile target (fallback when no radar)
421
+ lockConeDeg: 35, // half-angle of the forward cone missiles can lock within
422
+ // Gun-aiming reticle: a bore-line ring parented to the airframe you look THROUGH
423
+ // to aim the (straight-ahead, ballistic) cannon. 'on' (default) / 'off'.
424
+ reticle: 'on',
425
+ reticleRange: 120, // metres ahead the reticle ring sits on the gun bore line
259
426
  };
260
427
  // Read-only flight state
261
428
  airspeed = 0;
@@ -281,10 +448,23 @@ export class B3dAircraft extends B3dControllable {
281
448
  chaseDistance = 4.8; // chase distance behind
282
449
  velocity = new BABYLON.Vector3(0, 0, 0);
283
450
  _fwd = new BABYLON.Vector3(); // scratch: world nose direction (unit)
451
+ // Weapon cooldowns (seconds until ready) + edge-detect for the one-shot weapons.
452
+ _gunCd = 0;
453
+ _bombCd = 0;
454
+ _missileCd = 0;
455
+ _bombWas = false;
456
+ _missileWas = false;
284
457
  // Fly-by-wire flight state (heading/pitch/bank/speed). Seeded from the spawned
285
458
  // orientation on the first frame, then this controller owns the quaternion.
286
459
  fbw = { heading: 0, pitch: 0, bank: 0, speed: 0 };
287
460
  fbwSeeded = false;
461
+ // undefined = not yet resolved; null = no HUD / not the player.
462
+ _hud = undefined;
463
+ _hudMounted = false;
464
+ // The attached <tosi-b3d-radar> child (found once). undefined = unresolved,
465
+ // null = none. Drives the HUD radar traces and the missile's lock target.
466
+ _radar = undefined;
467
+ _reticleMesh = null;
288
468
  meshNode = null;
289
469
  meshesToDispose = [];
290
470
  // Ground sampling is ONE raycast per frame, taken after the move and cached: the
@@ -387,8 +567,60 @@ export class B3dAircraft extends B3dControllable {
387
567
  // ceiling you can be stalled but the thrust still goes forward.
388
568
  this.vtolActive = attrs.vtolSpeed > 0 && fwdSpeed < attrs.vtolSpeed;
389
569
  this.stalling = false;
570
+ // Drive a linked HUD (a <tosi-b3d-hud> sibling) when this is the player. Found
571
+ // once and cached; loosely typed so the aircraft doesn't depend on b3d-hud.
572
+ if (this._hud === undefined) {
573
+ this._hud =
574
+ attrs.player && this.owner
575
+ ? this.owner.querySelector('tosi-b3d-hud')
576
+ : null;
577
+ }
578
+ if (this._hud != null) {
579
+ // Mount the HUD onto the canopy (in-scene) once, so it shows in a 3D cockpit
580
+ // and in VR — parented to the airframe just ahead of the pilot's eye, banking
581
+ // with the plane (not head-locked).
582
+ if (!this._hudMounted && this._hud.attachInScene != null) {
583
+ this._hudMounted = true;
584
+ this._hud.attachInScene(node, {
585
+ size: attrs.hudSize,
586
+ position: new BABYLON.Vector3(0, this.eyeHeight, this.cockpitForward + attrs.hudForward),
587
+ });
588
+ }
589
+ // In cockpit view the 3D canopy HUD is the HUD; the flat DOM overlay is for the
590
+ // chase view only when `hud-chase` opts in.
591
+ const inCockpit = this.cameraView === 'cockpit';
592
+ this._hud.setInSceneVisible?.(inCockpit);
593
+ const showHud = inCockpit || attrs.hudChase;
594
+ this._hud.setVisible(!inCockpit && attrs.hudChase);
595
+ if (showHud) {
596
+ const RAD = 180 / Math.PI;
597
+ this._hud.setMeter('speed', attrs.maxSpeed > 0 ? this.fbw.speed / attrs.maxSpeed : 0);
598
+ this._hud.setMeter('altitude', this.altitude / attrs.ceiling);
599
+ // Nose-up should slide the horizon down — flip here if it reads inverted.
600
+ this._hud.setHorizon(this.fbw.pitch * RAD, this.fbw.bank * RAD);
601
+ // Warnings on the graphical HUD: PULL UP flashes the bottom arc (ground
602
+ // below); STALL is text only (not directional).
603
+ const warnings = [];
604
+ if (this.pullUp)
605
+ warnings.push({ text: 'PULL UP', side: 'bottom' });
606
+ if (this.stalling)
607
+ warnings.push({ text: 'STALL' });
608
+ this._hud.setWarnings(warnings);
609
+ // health/energy: wired once the combat resource models drive the aircraft.
610
+ // Radar traces: surface the attached <tosi-b3d-radar>'s detected contacts on
611
+ // the HUD (the radar itself is UI-less). Faction → trace colour; the aircraft
612
+ // pose is the projection viewer.
613
+ this._pushRadarToHud(node);
614
+ }
615
+ }
390
616
  // === Apply velocity to position ===
391
617
  node.position.addInPlaceFromFloats(vel.x * dt, vel.y * dt, vel.z * dt);
618
+ // Service ceiling: can't climb past it. Cap altitude and bleed the climb.
619
+ if (node.position.y > attrs.ceiling) {
620
+ node.position.y = attrs.ceiling;
621
+ if (vel.y > 0)
622
+ vel.y = 0;
623
+ }
392
624
  // Ground contact. Clamp out of the terrain; once settled, behave like
393
625
  // wheels — kill the downward bounce and apply rolling resistance so you can
394
626
  // land, roll to a stop, and accelerate to take off again. (First cut — tune
@@ -416,6 +648,211 @@ export class B3dAircraft extends B3dControllable {
416
648
  // fly-by-wire block above. Just refresh the ground-proximity pull-up warning.
417
649
  this.altitude = node.position.y;
418
650
  this.updatePullUp(node, groundDist);
651
+ // Weapons last, so shells spawn from this frame's muzzle position.
652
+ this.updateWeapons(input, dt);
653
+ }
654
+ // --- Weapons ---------------------------------------------------------------
655
+ // Cannon on held `shoot` (cadence-gated), bomb on `jump` (edge), missile on
656
+ // `aim` (edge) — all built on the pure combat toolkit (spawnProjectile /
657
+ // spawnMissile / warhead). Shells inherit the airframe's velocity so they lead
658
+ // naturally with your own motion.
659
+ updateWeapons(input, dt) {
660
+ if (isOff(this.weapons) || this.crashed || !this.meshNode)
661
+ return;
662
+ if (this.owner == null)
663
+ return;
664
+ this._gunCd -= dt;
665
+ this._bombCd -= dt;
666
+ this._missileCd -= dt;
667
+ if (input.shoot > 0.5 && this._gunCd <= 0)
668
+ this.fireGuns();
669
+ const bomb = input.jump > 0.5;
670
+ if (bomb && !this._bombWas && this._bombCd <= 0)
671
+ this.dropBomb();
672
+ this._bombWas = bomb;
673
+ const missile = input.aim > 0.5;
674
+ if (missile && !this._missileWas && this._missileCd <= 0)
675
+ this.fireMissile();
676
+ this._missileWas = missile;
677
+ }
678
+ // Scratch for the active camera's world-rotation (radar-trace projection viewer).
679
+ _camQuat = new BABYLON.Quaternion();
680
+ /** Push the attached radar's detected contacts onto the HUD as radar traces. */
681
+ _pushRadarToHud(_node) {
682
+ const radar = this.radar;
683
+ const hud = this._hud;
684
+ if (radar == null || hud?.setTraces == null)
685
+ return;
686
+ const cam = this.owner?.scene.activeCamera;
687
+ if (cam == null)
688
+ return;
689
+ const traces = [];
690
+ for (const t of radar.tracks) {
691
+ if (!t.detected)
692
+ continue;
693
+ traces.push({ pos: t.pos, kind: t.id.faction, locked: t.locked });
694
+ }
695
+ // The HUD projects these itself, onto its own quad (the cockpit combiner), by
696
+ // intersecting the eye→target ray with the glass — so blips land on the targets you
697
+ // actually see. We just hand it world positions + the eye.
698
+ hud.setTraces(traces, cam);
699
+ }
700
+ /** The attached `<tosi-b3d-radar>` child (found once), or null. */
701
+ get radar() {
702
+ if (this._radar === undefined) {
703
+ this._radar =
704
+ this.querySelector('tosi-b3d-radar') ?? null;
705
+ }
706
+ return this._radar;
707
+ }
708
+ /** The airframe's own meshes — the collision ray must skip these so a shell/bomb
709
+ * spawned at the belly (or the nose in a climb) never detonates on us. */
710
+ ownMeshes() {
711
+ if (this._ownMeshes == null && this.meshNode != null) {
712
+ const own = new Set();
713
+ if (this.meshNode instanceof BABYLON.AbstractMesh)
714
+ own.add(this.meshNode);
715
+ for (const child of this.meshNode.getChildMeshes())
716
+ own.add(child);
717
+ this._ownMeshes = own;
718
+ }
719
+ return this._ownMeshes ?? new Set();
720
+ }
721
+ /** World nose direction (unit) and a muzzle point `ahead` metres in front. */
722
+ muzzle(ahead, drop = 0) {
723
+ const node = this.meshNode;
724
+ node.getDirectionToRef(LOCAL_Z, this._fwd);
725
+ return new BABYLON.Vector3(node.position.x + this._fwd.x * ahead, node.position.y + this._fwd.y * ahead - drop, node.position.z + this._fwd.z * ahead);
726
+ }
727
+ /** Fire one cannon shell forward, inheriting the airframe's velocity. */
728
+ fireGuns() {
729
+ if (this.owner == null || !this.meshNode)
730
+ return;
731
+ const attrs = this;
732
+ this._gunCd = attrs.gunRate > 0 ? 1 / attrs.gunRate : 0;
733
+ const origin = this.muzzle(2.2); // sets this._fwd to the world nose direction
734
+ const dir = this._fwd.clone().normalize();
735
+ const ignore = (m) => this.ownMeshes().has(m);
736
+ spawnProjectile(this.owner, {
737
+ origin,
738
+ velocity: this.velocity.add(dir.scale(attrs.gunSpeed)),
739
+ warhead: this.gunWarhead,
740
+ params: { gravity: { x: 0, y: -9.81, z: 0 }, dragCoeff: 0.001, mass: 2 },
741
+ radius: 0.08,
742
+ color: '#fff2a0',
743
+ maxLifetime: 3,
744
+ ignore,
745
+ });
746
+ }
747
+ /** Drop a bomb — it inherits the airframe's velocity and falls under gravity.
748
+ * Released a little below the belly and set to ignore our own geometry, so a bank
749
+ * doesn't detonate it on the wing. */
750
+ dropBomb() {
751
+ if (this.owner == null || !this.meshNode)
752
+ return;
753
+ const attrs = this;
754
+ this._bombCd = 0.6;
755
+ spawnProjectile(this.owner, {
756
+ origin: this.muzzle(0, 1.2), // clear of the belly
757
+ velocity: this.velocity.clone(),
758
+ warhead: { damage: attrs.bombDamage, fullRadius: 2, blastRadius: 6 },
759
+ params: { gravity: { x: 0, y: -9.81, z: 0 }, dragCoeff: 0.002, mass: 4 },
760
+ radius: 0.25,
761
+ color: '#404040',
762
+ maxLifetime: 12,
763
+ ignore: (m) => this.ownMeshes().has(m),
764
+ });
765
+ }
766
+ /**
767
+ * Fire a guided missile at your **nearest radar lock** (no lock ⇒ it goes ballistic
768
+ * straight ahead). With a `<tosi-b3d-radar>` attached the lock comes from the radar;
769
+ * without one it falls back to the legacy forward-cone acquire. The missile carries a
770
+ * small radar signature (profile 0.25, friendly) so it shows on the HUD.
771
+ */
772
+ fireMissile() {
773
+ if (this.owner == null || !this.meshNode)
774
+ return;
775
+ const attrs = this;
776
+ this._missileCd = 0.8;
777
+ const origin = this.muzzle(1.6);
778
+ const dir = this._fwd.clone().normalize();
779
+ const spec = {
780
+ damage: attrs.missileDamage,
781
+ fullRadius: 1.5,
782
+ blastRadius: 4,
783
+ };
784
+ const ignore = (m) => this.ownMeshes().has(m);
785
+ // Prefer the radar's nearest lock; else fall back to the cone acquire (no radar).
786
+ const target = this.radar != null
787
+ ? this.radar.nearestLockMesh()
788
+ : this.acquireTarget(origin, dir, attrs.lockRange, attrs.lockConeDeg);
789
+ const radarSig = { profile: 0.25, faction: 'friendly' };
790
+ if (target != null) {
791
+ spawnMissile(this.owner, {
792
+ origin,
793
+ target,
794
+ speed: attrs.missileSpeed,
795
+ turnRate: attrs.missileTurnRate,
796
+ warhead: spec,
797
+ direction: dir,
798
+ radius: 0.18,
799
+ ignore,
800
+ radar: radarSig,
801
+ // Inherit the airframe's world velocity so the missile doesn't drop behind,
802
+ // then thrust up to cruise.
803
+ inheritVelocity: {
804
+ x: this.velocity.x,
805
+ y: this.velocity.y,
806
+ z: this.velocity.z,
807
+ },
808
+ accel: attrs.missileAccel,
809
+ boostTime: attrs.missileBoost,
810
+ });
811
+ }
812
+ else {
813
+ // No lock — fire it straight ahead as an unguided rocket.
814
+ spawnProjectile(this.owner, {
815
+ origin,
816
+ velocity: this.velocity.add(dir.scale(attrs.missileSpeed)),
817
+ warhead: spec,
818
+ params: { gravity: { x: 0, y: 0, z: 0 }, dragCoeff: 0, mass: 1 },
819
+ radius: 0.18,
820
+ color: '#ff6644',
821
+ maxLifetime: 8,
822
+ ignore,
823
+ radar: radarSig,
824
+ });
825
+ }
826
+ }
827
+ get gunWarhead() {
828
+ return {
829
+ damage: this.gunDamage,
830
+ fullRadius: 0.5,
831
+ blastRadius: 1.5,
832
+ };
833
+ }
834
+ /** Nearest destroyable within `range` and inside the forward cone (or null). */
835
+ acquireTarget(origin, fwd, range, coneDeg) {
836
+ const minCos = Math.cos((coneDeg * Math.PI) / 180);
837
+ let best = null;
838
+ let bestDist = Infinity;
839
+ const els = this.owner.querySelectorAll('tosi-b3d-destroyable');
840
+ for (const el of Array.from(els)) {
841
+ const mesh = el.mesh;
842
+ if (mesh == null || mesh.isDisposed())
843
+ continue;
844
+ const to = mesh.absolutePosition.subtract(origin);
845
+ const dist = to.length();
846
+ if (dist > range || dist < 1e-3)
847
+ continue;
848
+ if (BABYLON.Vector3.Dot(to.scale(1 / dist), fwd) < minCos)
849
+ continue;
850
+ if (dist < bestDist) {
851
+ bestDist = dist;
852
+ best = mesh;
853
+ }
854
+ }
855
+ return best;
419
856
  }
420
857
  /** Distance from the aircraft origin down to the nearest ground: the lower of
421
858
  * any terrain collider the raycast hits and the configured ground plane. */
@@ -546,6 +983,37 @@ export class B3dAircraft extends B3dControllable {
546
983
  }
547
984
  this.lastUpdate = Date.now();
548
985
  owner.scene.registerBeforeRender(this._update);
986
+ this._createReticle(owner);
987
+ }
988
+ /**
989
+ * Build the gun-aiming reticle: a ring parented to the airframe, sitting
990
+ * `reticleRange` metres ahead on the cannon's bore line with its hole facing
991
+ * forward — you fly the target INTO the ring to aim the straight-ahead guns. It
992
+ * rides the airframe (and so the XR rig) automatically. Player + `reticle:'on'`
993
+ * + armed only.
994
+ */
995
+ _createReticle(owner) {
996
+ const attrs = this;
997
+ if (this.meshNode == null ||
998
+ !attrs.player ||
999
+ isOff(attrs.reticle) ||
1000
+ isOff(attrs.weapons)) {
1001
+ return;
1002
+ }
1003
+ const range = attrs.reticleRange;
1004
+ const ring = BABYLON.MeshBuilder.CreateTorus('gun-reticle', { diameter: range * 0.05, thickness: range * 0.006, tessellation: 24 }, owner.scene);
1005
+ // Default torus hole faces +Y; tip it so the hole faces +Z (the bore/nose).
1006
+ ring.rotation.x = Math.PI / 2;
1007
+ ring.position.set(0, 0, range);
1008
+ ring.parent = this.meshNode;
1009
+ ring.isPickable = false;
1010
+ ring.receiveShadows = false;
1011
+ ring.__isReticle = true;
1012
+ const mat = new BABYLON.StandardMaterial('gun-reticle-mat', owner.scene);
1013
+ mat.emissiveColor = BABYLON.Color3.FromHexString('#ff5030');
1014
+ mat.disableLighting = true;
1015
+ ring.material = mat;
1016
+ this._reticleMesh = ring;
549
1017
  }
550
1018
  chaseCamera = null;
551
1019
  cockpitCamera = null;
@@ -616,7 +1084,13 @@ export class B3dAircraft extends B3dControllable {
616
1084
  this.libraryNode.dispose();
617
1085
  this.libraryNode = null;
618
1086
  }
1087
+ if (this._reticleMesh) {
1088
+ this._reticleMesh.material?.dispose();
1089
+ this._reticleMesh.dispose();
1090
+ this._reticleMesh = null;
1091
+ }
619
1092
  this.meshNode = null;
1093
+ this._radar = undefined;
620
1094
  this.inputProvider = null;
621
1095
  super.sceneDispose();
622
1096
  }
@@ -1 +1 @@
1
- {"version":3,"file":"b3d-aircraft.js","sourceRoot":"","sources":["../src/b3d-aircraft.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"b3d-aircraft.js","sourceRoot":"","sources":["../src/b3d-aircraft.ts"],"names":[],"mappings":"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"}