b3d-destroyable
A thing that can take damage and be destroyed — the scene-side bridge to the pure
CombatWorld (see destroyable.ts / COMBAT-DESIGN.md). Drop it into a <tosi-b3d>
and it registers a Destroyable in the scene's combat world, drives a placeholder
cube mesh (real meshes/GLB later), and runs its death outcome when killed — whether
by a direct hit or a chain reaction resolved in the combat tick.
It participates in the floating origin: because AbstractMesh treats the
x/y/z attributes as the source of truth for the mesh position, this uses
onOriginShift to shift BOTH the mesh node and its x/z attributes on a rebase
(NOT registerWorldRoot, which would leave the attributes stale so a later render
would un-shift the mesh).
Attributes: capacity, armor, regenRate, regenDelay, protectedBy,
protection, plus size/color for the placeholder cube and the usual
x/y/z/meshName. Set .chain (a ChainLink[]) in code for chain reactions.
Call .damage(n) to hurt it (a warhead will do this on contact).