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(); }
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(""); } }