Пример #1
0
 public override void OnStart(Tyr tyr)
 {
     /*
      * FileUtil.Debug("Zealot: \n" + UnitTypes.LookUp[UnitTypes.ZEALOT]);
      * FileUtil.Debug("Stalker: \n" + UnitTypes.LookUp[UnitTypes.STALKER]);
      * FileUtil.Debug("Adept: \n" + UnitTypes.LookUp[UnitTypes.ADEPT]);
      * FileUtil.Debug("Marine: \n" + UnitTypes.LookUp[UnitTypes.MARINE]);
      * FileUtil.Debug("Marauder: \n" + UnitTypes.LookUp[UnitTypes.MARAUDER]);
      * FileUtil.Debug("Thor: \n" + UnitTypes.LookUp[UnitTypes.THOR]);
      */
     TestCombatSim.Test();
 }
Пример #2
0
        public void OnFrame(Tyr tyr)
        {
            List <Unit> simulatedUnits = new List <Unit>();

            foreach (Task task in tyr.TaskManager.Tasks)
            {
                task.AddCombatSimulationUnits(simulatedUnits);
            }

            foreach (Unit unit in tyr.EnemyManager.LastSeen.Values)
            {
                if (unit.UnitType == UnitTypes.SIEGE_TANK_SIEGED || unit.UnitType == UnitTypes.WIDOW_MINE_BURROWED)
                {
                    continue;
                }
                if (tyr.EnemyManager.LastSeen.ContainsKey(unit.Tag) && tyr.Frame - tyr.EnemyManager.LastSeenFrame[unit.Tag] > 112)
                {
                    continue;
                }
                if (UnitTypes.CombatUnitTypes.Contains(unit.UnitType))
                {
                    simulatedUnits.Add(unit);
                }
            }
            foreach (UnitLocation unit in tyr.EnemyMineManager.Mines)
            {
                if (tyr.EnemyManager.LastSeen.ContainsKey(unit.Tag))
                {
                    simulatedUnits.Add(tyr.EnemyManager.LastSeen[unit.Tag]);
                }
            }
            foreach (UnitLocation unit in tyr.EnemyTankManager.Tanks)
            {
                if (tyr.EnemyManager.LastSeen.ContainsKey(unit.Tag))
                {
                    simulatedUnits.Add(tyr.EnemyManager.LastSeen[unit.Tag]);
                }
            }

            List <List <Unit> > simulationGroups = GroupUnits(simulatedUnits);

            HashSet <uint> myUpgrades = new HashSet <uint>();

            if (tyr.Observation.Observation.RawData.Player.UpgradeIds != null)
            {
                foreach (uint upgrade in tyr.Observation.Observation.RawData.Player.UpgradeIds)
                {
                    myUpgrades.Add(upgrade);
                }
            }
            HashSet <uint> enemyUpgrades = new HashSet <uint>();

            bool logSimulation = tyr.Frame % 22 == 0 && simulationGroups.Count > 0 && Debug;

            tyr.DrawText("Simulations: " + simulationGroups.Count);
            if (logSimulation)
            {
                FileUtil.Debug("Simulations: " + simulationGroups.Count);
            }


            bool printState = false;

            if (Tyr.Debug && tyr.Observation.Chat != null && tyr.Observation.Chat.Count > 0)
            {
                foreach (ChatReceived message in tyr.Observation.Chat)
                {
                    if (message.Message == "s")
                    {
                        printState = true;
                        break;
                    }
                }
            }

            int i = 0;

            foreach (List <Unit> simulationGroup in simulationGroups)
            {
                SimulationState state = GetState(tyr, simulationGroup, myUpgrades, enemyUpgrades, false);
                if (printState)
                {
                    state.SafeToFile("SimulationState-" + tyr.Frame + "-" + i + ".txt");
                }
                float myResources    = GetResources(state, true);
                float enemyResources = GetResources(state, false);
                if (printState)
                {
                    TestCombatSim.TestCombat(state, SimulationLength);
                }
                else
                {
                    state.Simulate(SimulationLength);
                }

                float myNewResources    = GetResources(state, true);
                float enemyNewResources = GetResources(state, false);
                tyr.DrawText("SimulationResult me: " + myResources + " -> " + myNewResources + " his: " + enemyResources + " -> " + enemyNewResources);
                if (logSimulation)
                {
                    FileUtil.Debug("SimulationResult me: " + myResources + " -> " + myNewResources + " his: " + enemyResources + " -> " + enemyNewResources);
                }

                MakeDecision(simulationGroup, state, myResources, myNewResources, enemyResources, enemyNewResources, myUpgrades, enemyUpgrades);
                i++;
            }

            if (logSimulation)
            {
                FileUtil.Debug("");
            }
        }