コード例 #1
0
ファイル: AITeam.cs プロジェクト: wmtorode/AIToolkit
        public static bool Prefix(AITeam __instance, ref AbstractActor __result)
        {
            var teamAIOverride = Main.TryOverrideTeamAI(__instance);

            if (teamAIOverride == null)
            {
                return(true);
            }

            var nextUnit = TurnOrderOverride.TryOverrideCurrentUnit(__instance.GetUnusedUnitsForCurrentPhase(), teamAIOverride);

            if (nextUnit == null)
            {
                return(true);
            }

            __result = nextUnit;
            Main.TryOverrideUnitAI(__result);
            return(false);
        }
コード例 #2
0
        public static void DoHotReload(GameInstance game)
        {
            Main.HBSLog?.Log("HotReload!");

            Main.ReloadResources();

            // reload behavior variables by forcing a new scope manager
            // TODO: THIS CAUSES A GAME FREEZE IF HOT RELOAD DURING AI PAUSE
            // this is because of scope manager taking a little bit to get info
            // from dataManager, temp solution is to skip if paused
            if (!AIPause.IsPaused)
            {
                Traverse.Create(game).Property("BehaviorVariableScopeManager")
                .SetValue(new BehaviorVariableScopeManager(game));
            }

            var aiActors = game.Combat.AllActors.Where(unit => unit.team is AITeam);

            foreach (var unit in aiActors)
            {
                Main.ResetUnitAI(unit);
                Main.TryOverrideUnitAI(unit);
            }

            var aiTeams = game.Combat.Teams.Where(team => team is AITeam).Cast <AITeam>();

            foreach (var team in aiTeams)
            {
                Main.ResetTeamAI(team);
                Main.TryOverrideTeamAI(team);
            }

            if (AIPause.IsPaused)
            {
                AIPause.Reset();
                TurnOrderOverride.TryRecalculateCurrentUnit(AIPause.CurrentAITeam);
            }
        }