Пример #1
0
        public override IEnumerable <SC2APIProtocol.Action> OnFrame(ResponseObservation observation)
        {
            var actions = new List <Action>();

            MacroData.FoodUsed   = (int)observation.Observation.PlayerCommon.FoodUsed;
            MacroData.FoodLeft   = (int)observation.Observation.PlayerCommon.FoodCap - MacroData.FoodUsed;
            MacroData.FoodArmy   = (int)observation.Observation.PlayerCommon.FoodArmy;
            MacroData.Minerals   = (int)observation.Observation.PlayerCommon.Minerals;
            MacroData.VespeneGas = (int)observation.Observation.PlayerCommon.Vespene;
            MacroData.Frame      = (int)observation.Observation.GameLoop;

            if (LastRunFrame + RunFrequency > observation.Observation.GameLoop)
            {
                return(actions);
            }
            LastRunFrame = (int)observation.Observation.GameLoop;

            actions.AddRange(BuildProxyService.BuildPylons());
            actions.AddRange(BuildProxyService.MorphBuildings());
            actions.AddRange(BuildProxyService.BuildAddOns());
            actions.AddRange(BuildProxyService.BuildDefensiveBuildings());
            actions.AddRange(BuildProxyService.BuildProductionBuildings());
            actions.AddRange(BuildProxyService.BuildTechBuildings());

            actions.AddRange(BuildPylonService.BuildPylonsAtEveryMineralLine());
            actions.AddRange(BuildPylonService.BuildPylonsAtDefensivePoint());
            actions.AddRange(BuildPylonService.BuildPylonsAtEveryBase());
            actions.AddRange(BuildPylonService.BuildPylonsAtNextBase());
            actions.AddRange(BuildSupply());

            actions.AddRange(BuildDefenseService.BuildDefensiveBuildingsAtEveryMineralLine());
            actions.AddRange(BuildDefenseService.BuildDefensiveBuildingsAtDefensivePoint());
            actions.AddRange(BuildDefenseService.BuildDefensiveBuildingsAtEveryBase());
            actions.AddRange(BuildDefenseService.BuildDefensiveBuildings());

            actions.AddRange(BuildVespeneGas());

            actions.AddRange(MorphBuildings());
            actions.AddRange(BuildAddOns());
            actions.AddRange(BuildProductionBuildings());
            actions.AddRange(BuildTechBuildings());

            actions.AddRange(ResearchUpgrades());
            actions.AddRange(ProduceUnits());

            actions.AddRange(BuildingCancelService.CancelBuildings());

            return(actions);
        }