Repository navigation
v0.10.0 - Recoil
v0.10.0 - Recoil
⚠️ Breaking Changes
ImpulseManagerrenamed toImpulseField- same registry of world-space impulse events, new name.Noise.ImpulseListeneris now justImpulseListener, imported directly - it's still mechanically a Noise-slot filler, but no longer presented as a Noise variant, since it's its own concept.attackTime/sustainTime/decayTimereplaced byshape+duration-generate()now takes ashape: ImpulseShape((t) => number) instead of three separate linear-ramp times. Named presets live onImpulseShapes.recoil/bump/explosion/rumble, or pass your own function.ImpulseField.sampleAt()takesgainas a parameter and returns the felt strength, not aVector3
✨ New Features
ImpulseListenergainsshake- an optional secondary rattle, position and rotation, composing aBasicMultiChannelPerlinNoisewhoseamplitudeGainautomatically follows the impulse's current strength every frame. The kick itself stays position-only;shakeis how an explosion or rumble also pitches the camera.ImpulseListenergainscameraSpace- rotates the sampled kick by the camera's current orientation, so the samedirectionalways kicks the same way relative to where the camera is looking (weapon recoil, a landing thump), instead of a fixed world-space vector.
🔧 Internal Changes
- New performance benchmarks for
ImpulseField.sampleAt(1/10/50 concurrent events) andImpulseListenerNoise.update(kick alone vs. withshake/cameraSpace, isolated). docs/impulse/is now its own top-level docs category instead of nested underdocs/noise/.
What's Changed
- feat: add PositionComposer example scenes by @kvvasuu in #41
- feat: add RotationComposer example scenes by @kvvasuu in #42
- Feat/impulse by @kvvasuu in #43
Full Changelog: v0.9.0...v0.10.0