cb-98e.3: Firing system + animation harness (laser reference) #6

Closed
forgejo-admin wants to merge 0 commits from crew/peba/cb-98e.3 into main

Epic cb-98e, child .3. Firing system + animation harness.

  • fireWeapon(type,{origin,angle,size,palette}) dispatch — ONE FILE PER WEAPON (src/ship/effects/.ts), laser as reference. .4/.5 each add a file + one line in effects/index.ts — zero shared-body edits, conflict-free by design.
  • Pixi-free muzzle geometry (effects/muzzles.ts) mirroring drawWeapons incl. port/starboard splay, with self-check.
  • FiringSystem (ticker-driven spawn/update/retire, no leaks) wired into Canvas. Fire controls: per-hardpoint 🔥 (panel), 🔥 Fire All (toolbar), spacebar.

Verified (peba): typecheck + muzzles.check + randomizer.check + build green; laser fires from correct muzzle along aim and retires (headless screenshot); app loads clean.

Unblocks cb-98e.4 (missile/chaff) and cb-98e.5 (raybeam/grapple). Auto-merged per standing policy.

🤖 Generated with Claude Code

Epic cb-98e, child .3. Firing system + animation harness. - fireWeapon(type,{origin,angle,size,palette}) dispatch — ONE FILE PER WEAPON (src/ship/effects/<weapon>.ts), laser as reference. .4/.5 each add a file + one line in effects/index.ts — zero shared-body edits, conflict-free by design. - Pixi-free muzzle geometry (effects/muzzles.ts) mirroring drawWeapons incl. port/starboard splay, with self-check. - FiringSystem (ticker-driven spawn/update/retire, no leaks) wired into Canvas. Fire controls: per-hardpoint 🔥 (panel), 🔥 Fire All (toolbar), spacebar. Verified (peba): typecheck + muzzles.check + randomizer.check + build green; laser fires from correct muzzle along aim and retires (headless screenshot); app loads clean. Unblocks cb-98e.4 (missile/chaff) and cb-98e.5 (raybeam/grapple). Auto-merged per standing policy. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Adds the mechanism to FIRE weapons and the ticker-driven animation harness that
per-weapon effects plug into.

- src/ship/effects/muzzles.ts: pixi-free firingOrigins(spec) — muzzle position +
  aim per hardpoint copy, mirroring drawWeapons() exactly (mirror splay: -y copy
  uses -angle).
- src/ship/effects/{types,laser,index}.ts: Effect/FireParams contract, the laser
  reference effect (bolt launches along aim, travels, fades), and a fireWeapon()
  dispatch table — ONE FILE PER WEAPON so cb-98e.4/.5 add a file + one line each.
- src/ship/firing.ts: FiringSystem spawns/updates/retires effects; no leaks.
- Canvas: owns the FiringSystem, adds its layer, keeps it glued to the ship
  transform each frame, drives it from app.ticker, exposes fire() on the handle;
  torn down with the app on unmount.
- Fire controls: per-hardpoint fire (ControlsPanel), Fire All (Toolbar), spacebar.
- Self-check: src/ship/effects/muzzles.check.ts (mirror splay, radial, forward aim).

Verified: typecheck + muzzles.check + randomizer.check + build all green; laser
fires from the correct muzzle along its aim and retires (headless-screenshot
confirmed); real app loads with no runtime errors.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
forgejo-admin closed this pull request 2026-07-04 03:06:48 +00:00

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
celilo/celilo-blast!6
No description provided.