Format
This changelog follows the Keep a Changelog format. Dates are in YYYY-MM-DD.
[1.1.0] - 2026-03-16
Added
- Override blend mode (
AnimEntryBlendMode.Override) — animation entries can now temporarily suppress all Additive entries for the same property with smooth ramp-in crossfade and ramp-out release. Useful for reactive animations (e.g., weapon-fire wobble) that take over from a continuous base animation and then return control.
- Await Trigger system (
ShapeAnimationEntry.awaitTrigger) — animation entries can stay dormant until explicitly triggered via code or the editor. Triggered entries reset their timer, play once, and automatically re-arm. Works with both Additive and Override blend modes.
- TriggerLayer / TriggerLayerByName on
IGlobalFXService — fire all awaitTrigger entries on a Global layer with a single call. Auto-starts the layer if it has autoPlay enabled.
- TriggerAnimation / TriggerAllAnimations on
ShapePropertyAnimator — direct SPA-level trigger API for both individual entries and bulk layer triggers.
- OnGlobalFXStateChanged event on
IGlobalFXService — fires whenever any Global layer's visibility or play state changes.
- OnLayerStopped event on
IGlobalFXService — fires when a layer is stopped, allowing subscribers to reset animation timers.
- VisibleLayerIds / PlayingLayerIds read-only properties on
IGlobalFXService for inspecting current Global layer state.
- Blend Mode dropdown in the Animations Panel (Additive / Override).
- Await Trigger toggle with inline Trigger button per-entry in the Animations Panel.
- Trigger All button in the Animations Panel toolbar — fires all awaitTrigger entries on the selected layer (auto-enables Preview if needed).
- TracerManager.TracersEnabled master toggle for the entire tracer system, persisted in PlayerPrefs. Editor toolbar dims to 35% opacity when disabled.
- ILoadoutManager.SetRTExcludedLayerIds — exclude specific layers from the main shape compilation (for RenderTexture outputs).
- ILoadoutManager.GetShapesForCategory / GetShapesForLayer — subset shape compilation APIs for the RenderTexture pipeline.
- ShapePropertyAnimator.ConfigureForRT — configure an SPA for the RenderTexture pipeline (always animates, no transitions).
- ReticleRenderer RenderTexture overloads —
RenderToCommandBuffer(cmd, width, height, viewZoom, viewPan) and SetupRTMaterial() for rendering shapes into RenderTexture outputs with custom viewports and One/Zero blend mode.
- RCERenderTextureManager integration into both URP (
RCERendererFeature) and HDRP (RCEHDRPCustomPass) render pipelines.
- Copy Layer ID button in the editor properties panel — copies the layer's internal GUID to clipboard.
- RT Budget display in the Settings modal — shows pixel usage, active RT count, and a color-coded progress bar.
Changed
- Spin mode uses envelope-weighted accumulation — ramp in/out now modulates rotation rate (angular velocity) instead of scaling the accumulated angle. This eliminates the visual "unwinding" artifact where shapes would briefly reverse direction during ramp-out.
- Override Spin release snaps to 360° boundary — during the late release phase, the accumulator automatically lands on the nearest revolution boundary for an imperceptible handoff to Additive entries.
- Override Tween + rampIn holds at starting value — prevents a non-monotonic peak where a decreasing tween delta would fight an increasing blend weight.
- NativeArray removed from LoadoutRendererBridge and GlobalFXBridge — shape data is now passed directly as managed arrays, simplifying lifecycle management and removing
Unity.Collections dependency from these classes.
- ReticleRenderer.SetShapes now accepts managed arrays in addition to NativeArray, enabling simpler integration paths.
- Editor SPA resolution improved —
FindActiveSPA() now checks both the main pipeline SPA and the RT pipeline SPA, with lazy re-resolution when the cached SPA has no base shapes.
- Edit mode state sync —
SetEditMode now re-syncs the Global/category editing state to ensure correct shape compilation after toggling the editor.
- Passthrough sequence advancement uses O(1) HashSet lookup instead of O(n) linear scan for layer ID matching.
- Cached layer ID map in SPA eliminates repeated lookups during
ApplyAnimationsAndEmit().
- GlobalFXAPITestWindow moved from
ADS.Editor to RCE.Editor assembly and simplified.
Fixed
- Spin ramp-out no longer causes visual angle reversal (envelope-weighted accumulator replaces position-based scaling)
- Override entries correctly absorb their accumulated Spin angle into Additive entries at release, preventing position discontinuity
- Sequence entry transitions correctly reset override blend state (release elapsed, fully-released flag)
- Entry state
spinEnvelopeAccum now correctly resets on timer reset and is preserved in scratch-state evaluation
[1.0.0] - 2026-03-01
Added
- SDF-based reticle rendering with single draw call architecture
- 8 built-in shape types: Circle, Ring, Polygon, LineBurst, Chevron, Stadia, ChamferBox, Custom
- 4-category reactive combat system (HUD, SA, HF, ADS) + Global category
- 10 CPU-side category transition types with per-pair configuration
- Smart shape matching for Morph transitions
- 7 shape property animation modes with sequencing system
- Custom shape drawing with cubic Bézier paths and exact SDF compute shader
- Boolean shape groups (union/subtraction) with true SDF boundary glow
- GlobalFX API for runtime hit markers and transient effects
- Full visual editor with 5 themes, undo/redo, color picker, palettes
- Tracer/bolt rendering system with presets
- URP and HDRP support from single package
- JSON loadout serialization (schema v8) with automatic version migration
- IDataPathProvider interface for custom storage paths
- Color palette system with preset generation and persistence
- Layer connector lines in editor
- Gap modes: Radial, Grid, Lines, CenterCutout with Reveal Mask and Gap-as-Geometry
- True outline rendering with independent color and width