LosMap() { csai = CSAI.GetInstance(); aicallback = csai.aicallback; logfile = LogFile.GetInstance(); unitcontroller = UnitController.GetInstance(); unitcontroller.UnitAddedEvent += new UnitController.UnitAddedHandler(UnitAdded); unitcontroller.UnitRemovedEvent += new UnitController.UnitRemovedHandler(UnitRemoved); friendlyunitpositionobserver = FriendlyUnitPositionObserver.GetInstance(); csai.TickEvent += new CSAI.TickHandler(Tick); mapwidth = aicallback.GetMapWidth(); mapheight = aicallback.GetMapHeight(); logfile.WriteLine("LosMap, create losarray"); LastSeenFrameCount = new int[mapwidth / 2, mapheight / 2]; logfile.WriteLine("losarray created, initializing..."); for (int y = 0; y < mapheight / 2; y++) { for (int x = 0; x < mapwidth / 2; x++) { LastSeenFrameCount[x, y] = -1000000; } } logfile.WriteLine("losarray initialized"); if (csai.DebugOn) { csai.RegisterVoiceCommand("dumplosmap", new CSAI.VoiceCommandHandler(DumpLosMap)); } }
public void Activate() { UnitController.GetInstance(); EnemyController.GetInstance(); FriendlyUnitPositionObserver.GetInstance(); MovementMaps.GetInstance(); BuildMap.GetInstance(); Metal.GetInstance().Init(); LosMap.GetInstance(); BuildPlanner.GetInstance(); BuildTable.GetInstance(); CommanderList.GetInstance(); Level1ConstructorList.GetInstance(); Level1FactoryList.GetInstance(); tankcontroller = new TankController(TankList.GetInstance().defbyid, BuildTable.GetInstance().UnitDefByName["armstump"]); tankcontroller.Activate(); helicoptercontroller = new TankController(HelicopterList.GetInstance().defbyid, BuildTable.GetInstance().UnitDefByName["armbrawl"]); helicoptercontroller.Activate(); new ScoutControllerRaider().Activate(); UnitController.GetInstance().LoadExistingUnits(); EnemyController.GetInstance().LoadExistingUnits(); CheckIdleUnits(); //BuildSolarCell(CommanderList.GetInstance().defbyid.Keys.GetEnumerator().Current); csai.UnitIdleEvent += new CSAI.UnitIdleHandler(csai_UnitIdleEvent); csai.TickEvent += new CSAI.TickHandler(csai_TickEvent); }
// cheap hack to respond to enemy shooting us void csai_UnitDamagedEvent(int damaged, int attacker, float damage, Float3 dir) { /* * if (!EnemyUnitDefByDeployedId.ContainsKey(attacker)) * { * EnemyUnitDefByDeployedId.Add(attacker, aicallback.GetUnitDef(attacker)); * } */ //if (!EnemyStaticPosByDeployedId.ContainsKey(attacker)) //{ Float3 enemypos = aicallback.GetUnitPos(attacker); if (enemypos != null && Float3Helper.GetSquaredDistance(enemypos, new Float3(0, 0, 0)) > 10 * 10) { logfile.WriteLine("unitdamaged, attacker " + attacker + " pos " + enemypos); if (!EnemyStaticPosByDeployedId.ContainsKey(attacker)) { EnemyStaticPosByDeployedId.Add(attacker, enemypos); } else { EnemyStaticPosByDeployedId[attacker] = enemypos; } if (NewStaticEnemyAddedEvent != null) { NewStaticEnemyAddedEvent(attacker, enemypos, null); } } else // else we guess... { if (FriendlyUnitPositionObserver.GetInstance().PosById.ContainsKey(damaged)) { Float3 ourunitpos = FriendlyUnitPositionObserver.GetInstance().PosById[damaged]; if (ourunitpos != null) { Float3 guessvectortotarget = dir * 300.0; logfile.WriteLine("vectortotarget guess: " + guessvectortotarget.ToString()); Float3 possiblepos = ourunitpos + guessvectortotarget; if (!EnemyStaticPosByDeployedId.ContainsKey(attacker)) { EnemyStaticPosByDeployedId.Add(attacker, possiblepos); } else { EnemyStaticPosByDeployedId[attacker] = possiblepos; } if (NewStaticEnemyAddedEvent != null) { NewStaticEnemyAddedEvent(attacker, possiblepos, null); } logfile.WriteLine("unitdamaged, attacker " + attacker + " our unit pos " + ourunitpos + " dir " + dir.ToString() + " guess: " + possiblepos.ToString()); } } } //} }
LosMap() { csai = CSAI.GetInstance(); aicallback = csai.aicallback; logfile = LogFile.GetInstance(); unitcontroller = UnitController.GetInstance(); unitcontroller.UnitAddedEvent += new UnitController.UnitAddedHandler( UnitAdded ); unitcontroller.UnitRemovedEvent += new UnitController.UnitRemovedHandler( UnitRemoved ); friendlyunitpositionobserver = FriendlyUnitPositionObserver.GetInstance(); csai.TickEvent += new CSAI.TickHandler( Tick ); mapwidth = aicallback.GetMapWidth(); mapheight = aicallback.GetMapHeight(); logfile.WriteLine( "LosMap, create losarray" ); LastSeenFrameCount = new int[ mapwidth / 2, mapheight / 2 ]; logfile.WriteLine( "losarray created, initializing..." ); for( int y = 0; y < mapheight / 2; y++ ) { for( int x = 0; x < mapwidth / 2; x++ ) { LastSeenFrameCount[ x, y ] = -1000000; } } logfile.WriteLine( "losarray initialized" ); if (csai.DebugOn) { csai.RegisterVoiceCommand("dumplosmap", new CSAI.VoiceCommandHandler(DumpLosMap)); } }
//int numOfUnits = 0; //IUnitDef[] unitList; //IUnitDef solarcollectordef; public void InitAI(IAICallback aicallback, int team) { Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB"); this.aicallback = aicallback; try{ this.Team = team; logfile = LogFile.GetInstance().Init(team); logfile.WriteLine("C# AI started v" + AIVersion + ", team " + team + " ref " + reference + " map " + aicallback.GetMapName() + " mod " + aicallback.GetModName()); csaiuserinteraction = CSAIUserInteraction.GetInstance(); if (File.Exists("AI/CSAI/debug.flg")) // if this file exists, activate debug mode; saves manually changing this for releases { logfile.WriteLine("Toggling debug on"); DebugOn = true; } if (DebugOn) { new Testing.RunTests().Go(); } InitCache(); PlayStyleManager.GetInstance(); LoadPlayStyles.Go(); metal = Metal.GetInstance(); CommanderController.GetInstance(); BuildTable.GetInstance(); UnitController.GetInstance(); EnemyController.GetInstance(); FriendlyUnitPositionObserver.GetInstance(); EnergyController.GetInstance(); MovementMaps.GetInstance(); BuildMap.GetInstance(); LosMap.GetInstance(); //FactoryController.GetInstance(); //RadarController.GetInstance(); //TankController.GetInstance(); //ScoutController.GetInstance(); //ConstructorController.GetInstance(); metal.Init(); BuildPlanner.GetInstance(); UnitController.GetInstance().LoadExistingUnits(); // need this if we're being reloaded in middle of a game, to get already existing units EnemyController.GetInstance().LoadExistingUnits(); StrategyController.GetInstance(); LoadStrategies.Go(); PlayStyleManager.GetInstance().ChoosePlayStyle("tankrush"); if (aicallback.GetModName().ToLower().IndexOf("aass") == 0 || aicallback.GetModName().ToLower().IndexOf("xtape") == 0) { SendTextMsg("C# AI initialized v" + AIVersion + ", team " + team); SendTextMsg("Please say '.csai help' for available commands"); PlayStyleManager.GetInstance().ListPlayStyles(); //CommanderController.GetInstance().CommanderBuildPower(); } else { SendTextMsg("Warning: CSAI needs AA2.23 or XTA7 to run correctly at this time"); logfile.WriteLine("*********************************************************"); logfile.WriteLine("*********************************************************"); logfile.WriteLine("**** ****"); logfile.WriteLine("**** Warning: CSAI needs AA2.23 or XTA7 to run correctly at this time ****"); logfile.WriteLine("**** ****"); logfile.WriteLine("*********************************************************"); logfile.WriteLine("*********************************************************"); } } catch (Exception e) { logfile.WriteLine("Exception: " + e.ToString()); SendTextMsg("Exception: " + e.ToString()); } }