Skip to content

ChicanePusherLab v1.0.50

Choose a tag to compare

@Rendresen Rendresen released this 21 May 15:42
234258e

ChicanePusherLab v1.0.50

Five fixes (all behavior-neutral)
_lastCricketPowerStats string.Format in ComputeCricketStyleBladeThrustN was running unconditionally every FixedUpdate for a string only the F8 dump ever consumes. ~5–7 KB/s GC × #aircraft for nothing in release builds. Now gated by EnableDiagnostics, matching the sibling perBladeDiag already in the same loop.
_lastPowerBudgetSource ToString concatenations in ComputePusherForceN — ~12 unconditional ToString-then-concat per tick (~5–10 KB/s GC × #aircraft) for another F8-only field. Same EnableDiagnostics gate. Same pattern as the v1.0.3 lateral-trim "BLOCKED(...)" gate.
TransmissionFixedUpdatePrefix per-tick allocations removed:
new int[n] (outTier) → reused static _outTierBuffer (grown on demand).
new StringBuilder() (clsLog) gated by EnableDiagnostics; _trxLastClassification reads "" when gated off.

TryReadAircraftAirDensity had two compounding bugs: it re-resolved aircraft.GetType().GetField("airDensity", ...) on every call (ignoring the cached _aircraftAirDensityField populated in BuildAircraftInputAccessors), and it was never per-tick memoized like its v1.0.3 siblings TryReadAircraftThrottle / ReadAircraftSpeedMetersPerSecond. Called 2–4× per tick from the disc-drag block, the cricket aero, and the IbisDuctedFan thrust inverse. Now uses the cached FieldInfo + a _dnsCacheT/_dnsCacheV/_dnsCacheOk per-tick memo.
FindDeep(_pusherRoot, "VisualPropAxis") ran twice per FixedUpdate (cricket aero loop + GetForcePointWorld) plus once in the F8 dump. Now cached as _propAxisCached, populated in Configure alongside the _pusherRoot assignment, with a Unity-null-safe lazy fallback at each call site so a rebuilt subtree still resolves.
Diagnostic behavior with the gate off
With EnableDiagnostics = false (the release default):

F8 dump still works.
The gated fields stay frozen at their last-emitted value: cricketExact line + lastPowerBudgetSource. lastClassification reads .
This is the intended gating, not a regression. Flip EnableDiagnostics = true in the cfg and the live values come back.