コード例 #1
0
        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();
                }
            }
        }
コード例 #2
0
 public static void Clear(this UnitCombatState.Cooldowns cooldown)
 {
     cooldown.Initiative          = 0f;
     cooldown.StandardAction      = 0f;
     cooldown.MoveAction          = 0f;
     cooldown.SwiftAction         = 0f;
     cooldown.AttackOfOpportunity = 0f;
 }
コード例 #3
0
 public static void Reset(UnitCombatState.Cooldowns cooldowns)
 {
     cooldowns.Initiative          = 0f;
     cooldowns.StandardAction      = 0f;
     cooldowns.MoveAction          = 0f;
     cooldowns.SwiftAction         = 0f;
     cooldowns.AttackOfOpportunity = 0f;
 }
コード例 #4
0
            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);
            }
コード例 #5
0
ファイル: Tweaks.cs プロジェクト: ThyWoof/ToyBox
            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();
                    }
                }
            }
コード例 #6
0
 public static float GetTimeToNextTurn(this UnitEntityData unit)
 {
     UnitCombatState.Cooldowns cooldown = unit.CombatState.Cooldown;
     return(cooldown.Initiative + Math.Max(cooldown.StandardAction, cooldown.MoveAction));
 }