miaoda-game-beam-phaser
v0.3.3
Published
Phaser Graphics beam renderer for miaoda-game-beam-core.
Downloads
103
Readme
miaoda-game-beam-phaser
Use this Phaser 4 adapter to render and update miaoda-game-beam-core lasers with pooled Phaser Graphics objects. It handles Scene update/shutdown ownership, telegraph/fire/fade styling, and active-beam hit queries.
Install
pnpm add miaoda-game-beam-core miaoda-game-beam-phaserCreate a Scene-owned layer
Register BeamPlugin as a Scene Plugin and create a layer for each independent visual group:
const layer = this.beams.create({
telegraphColor: 0xff5a5a,
fireColor: 0x78d2ff,
telegraphWidth: 3,
});
const beam = layer.spawn({
origin: bossPosition,
angleDeg: -60,
length: 900,
width: 40,
telegraph: 1,
fire: 2,
fade: 0.4,
});
beam.aim(bossPosition, currentAngle);
if (layer.beamsHitting(playerPosition, playerRadius).length) {
damagePlayer();
}Beam durations are in seconds. Scene update events are converted from Phaser milliseconds automatically. 0 degrees points along +X.
For strict fixed-step gameplay, select manual ownership and separate authoritative phase advancement from host-frame drawing:
const layer = this.beams.create({ tickSource: 'manual' });
fixedStepper.advance(frameDeltaSeconds, (dtSeconds) => {
layer.stepSimulation(dtSeconds);
// beamsHitting() now reads this committed gameplay tick.
});
// Once per Phaser render frame, after all catch-up ticks:
layer.syncPresentation();This matters when one slow render frame produces several gameplay ticks: telegraph/fire/fade and hit queries advance for every tick, while Graphics are redrawn only once from the latest committed state. Removed beams are retained until that presentation sync so their pooled Graphics can be recycled safely.
Calling stepSimulation in host mode, after destruction, or with malformed seconds fails before beam phases change. setTicking(false) is an independent local pause. Legacy { autoUpdate: false } plus update(deltaMs) remains supported, and update still expects Phaser milliseconds; new coordinators should prefer the explicit seconds API.
Lifecycle and ownership
The plugin destroys its owned layers during Scene shutdown. A manually created new BeamLayer(scene, style) must be destroyed by your code. destroy() releases live and pooled Graphics and is terminal; later spawn() calls throw.
The adapter decides how a beam is drawn. Your game remains responsible for aiming, damage, invulnerability frames, and deciding whether the same target can be hit again on later updates. beamsHitting excludes telegraph and fade phases automatically.
