namespace IdleSpectator; /// /// While Idle Spectator focuses a unit, reuse vanilla destination / lover / attack /// cursor arrows by pinning . /// Arrow visibility follows the player's existing PlayerConfig toggles /// (cursor_arrow_destination, cursor_arrow_lover, /// cursor_arrow_attack_target) - idle does not force them on or off. /// internal static class FocusRelationshipArrows { public static void OnSpectatorEnabled() { PinFocusActor(); } public static void OnSpectatorDisabled() { UnitSelectionEffect.setLastActor(null); } /// /// Keep the focused unit as the vanilla "hovered" actor so relationship arrows draw /// when the matching cursor-arrow options are already enabled. /// Safe to call every frame; no-op when idle is off or there is no focus. /// public static void PinFocusActor() { if (!SpectatorMode.Active || !MoveCamera.hasFocusUnit()) { return; } Actor focus = MoveCamera._focus_unit; if (focus == null || !focus.isAlive()) { return; } UnitSelectionEffect.setLastActor(focus); } public static bool IsPinnedToFocus() { if (!SpectatorMode.Active || !MoveCamera.hasFocusUnit()) { return false; } Actor focus = MoveCamera._focus_unit; return focus != null && focus.isAlive() && UnitSelectionEffect.last_actor == focus; } }