Concept: The Mode Stack & Blending

UCrimsonCameraComponent owns a UCrimsonCameraModeStack. Each frame the component decides which mode should be on top, the stack ensures that mode is present, and then it blends every active mode's output (FCrimsonCameraModeView - location, rotation, control rotation, FOV) by weight into the final view.

How a mode produces a view

A mode fills its View in Update View (a BlueprintNativeEvent). The default third-person implementation reads the pivot (Get Pivot Location / Get Pivot Rotation), applies the pitch-driven offset curves, then runs penetration avoidance. Subclasses override Update View (or just the pivot getters) to change behavior.

Blending

PropertyEffect
BlendTimeSeconds for a newly-pushed mode to reach full weight.
BlendFunctionLinear / EaseIn / EaseOut / EaseInOut - the curve shape of the transition.
BlendExponentSharpness of the Ease functions.

When weight reaches the top mode, lower modes are fully blended out and dropped. This is why pushing a new mode looks like a smooth transition rather than a cut.

One instance per class
The stack caches a single instance per mode class and reuses it. That's why per-mode state (lag, recenter, crouch offset) persists across activations - and why Get Camera Mode Instance can hand you the live instance to drive. Shoulder and zoom are not per-mode; they're shared on the component (see Concept: Shared Camera State).