public static void UpdateCooldowns(this UnitEntityData unit, UnitCommand command) { if (!command.IsIgnoreCooldown) { UnitCombatState.Cooldowns cooldown = unit.CombatState.Cooldown; switch (command.Type) { case UnitCommand.CommandType.Free: break; case UnitCommand.CommandType.Move: cooldown.MoveAction += TIME_MOVE_ACTION; break; case UnitCommand.CommandType.Standard: cooldown.StandardAction += TIME_STANDARD_ACTION; if (command.IsFullRoundAction()) { cooldown.MoveAction += TIME_MOVE_ACTION; } break; case UnitCommand.CommandType.Swift: cooldown.SwiftAction += TIME_SWIFT_ACTION; break; default: throw new ArgumentOutOfRangeException(); } } }
public static void Clear(this UnitCombatState.Cooldowns cooldown) { cooldown.Initiative = 0f; cooldown.StandardAction = 0f; cooldown.MoveAction = 0f; cooldown.SwiftAction = 0f; cooldown.AttackOfOpportunity = 0f; }
public static void Reset(UnitCombatState.Cooldowns cooldowns) { cooldowns.Initiative = 0f; cooldowns.StandardAction = 0f; cooldowns.MoveAction = 0f; cooldowns.SwiftAction = 0f; cooldowns.AttackOfOpportunity = 0f; }
static bool Prefix(UnitEntityData unit) { if (IsInCombat()) { if (unit.IsInCombat) { if (IsPassing()) { UnitCombatState combatState = unit.CombatState; UnitCombatState.Cooldowns cooldown = combatState.Cooldown; float gameDeltaTime = Game.Instance.TimeController.GameDeltaTime; if (cooldown.Initiative > 0f) { if (gameDeltaTime >= cooldown.Initiative) { gameDeltaTime -= cooldown.Initiative; cooldown.Initiative = 0f; } else { cooldown.Initiative -= gameDeltaTime; gameDeltaTime = 0f; } } if (gameDeltaTime > 0f) { cooldown.StandardAction = Math.Max(0f, cooldown.StandardAction - gameDeltaTime); cooldown.MoveAction = Math.Max(0f, cooldown.MoveAction - gameDeltaTime); cooldown.SwiftAction = Math.Max(0f, cooldown.SwiftAction - gameDeltaTime); cooldown.AttackOfOpportunity = Math.Max(0f, cooldown.AttackOfOpportunity - gameDeltaTime); } } return(false); } else { return(IsPassing()); } } return(true); }
public static void Postfix(UnitCommand.CommandType type, bool isFullRound, float timeSinceCommandStart, UnitEntityData __instance) { if (!__instance.IsInCombat) { return; } UnitCombatState.Cooldowns cooldown = __instance.CombatState.Cooldown; if (CombatController.IsInTurnBasedCombat()) { if (settings.toggleUnlimitedActionsPerTurn) { return; } switch (type) { case UnitCommand.CommandType.Free: break; case UnitCommand.CommandType.Standard: cooldown.StandardAction += 6f; if (!isFullRound) { break; } cooldown.MoveAction += 3f; break; case UnitCommand.CommandType.Swift: cooldown.SwiftAction += 6f; break; case UnitCommand.CommandType.Move: cooldown.MoveAction += 3f; break; default: throw new ArgumentOutOfRangeException(); } } else { if (settings.toggleInstantCooldown) { return; } switch (type) { case UnitCommand.CommandType.Free: case UnitCommand.CommandType.Move: cooldown.MoveAction = 3f - timeSinceCommandStart; break; case UnitCommand.CommandType.Standard: cooldown.StandardAction = 6f - timeSinceCommandStart; break; case UnitCommand.CommandType.Swift: cooldown.SwiftAction = 6f - timeSinceCommandStart; break; default: throw new ArgumentOutOfRangeException(); } } }
public static float GetTimeToNextTurn(this UnitEntityData unit) { UnitCombatState.Cooldowns cooldown = unit.CombatState.Cooldown; return(cooldown.Initiative + Math.Max(cooldown.StandardAction, cooldown.MoveAction)); }