Example #1
0
        }       // Singleton pattern

        Metal() // protected constructor to force Singleton instantiation
        {
            csai           = CSAI.GetInstance();
            aicallback     = csai.aicallback;
            logfile        = LogFile.GetInstance();
            unitcontroller = UnitController.GetInstance();

            unitdefhelp = new UnitDefHelp(aicallback);

            ExtractorRadius = aicallback.GetExtractorRadius();

            unitcontroller.UnitAddedEvent   += new UnitController.UnitAddedHandler(UnitAdded);
            unitcontroller.UnitRemovedEvent += new UnitController.UnitRemovedHandler(UnitRemoved);

            csai.RegisterVoiceCommand("showmetalspots", new CSAI.VoiceCommandHandler(this.DrawMetalSpotsCommand));
        }
Example #2
0
        // can pass in pointer to a hashtable in another class if we want
        // ie other class can directly modify our hashtable
        public SpreadSearchPackCoordinatorWithSearchGrid(Hashtable UnitDefListByDeployedId)
        {
            this.UnitDefListByDeployedId = UnitDefListByDeployedId;

            csai       = CSAI.GetInstance();
            aicallback = csai.aicallback;
            logfile    = LogFile.GetInstance();

            mapwidth  = aicallback.GetMapWidth();
            mapheight = aicallback.GetMapHeight();

            debugon = csai.DebugOn;

            csai.TickEvent     += new CSAI.TickHandler(this.Tick);
            csai.UnitIdleEvent += new CSAI.UnitIdleHandler(UnitIdle);
        }
Example #3
0
        public static int DrawRectangle(Float3 pos, int width, int height, int groupnumber)
        {
            IAICallback aicallback = CSAI.GetInstance().aicallback;
            double      elevation  = aicallback.GetElevation(pos.x, pos.z) + 10;

            groupnumber = aicallback.CreateLineFigure(pos + new Float3(0, elevation, 0),
                                                      pos + new Float3(width, elevation, 0), 10, false, 200, groupnumber);
            groupnumber = aicallback.CreateLineFigure(pos + new Float3(width, elevation, 0),
                                                      pos + new Float3(width, elevation, height), 10, false, 200, groupnumber);
            groupnumber = aicallback.CreateLineFigure(pos + new Float3(width, elevation, height),
                                                      pos + new Float3(0, elevation, height), 10, false, 200, groupnumber);
            groupnumber = aicallback.CreateLineFigure(pos + new Float3(0, elevation, height),
                                                      pos + new Float3(0, elevation, 0), 10, false, 200, groupnumber);

            return(groupnumber);
        }
Example #4
0
        // int terrainwidth;
        // int terrainheight;

        public ScoutControllerRaider()
        {
            csai       = CSAI.GetInstance();
            aicallback = csai.aicallback;
            logfile    = LogFile.GetInstance();

            random = new Random();

            unitcontroller = UnitController.GetInstance();
            // buildtable = BuildTable.GetInstance();
            enemycontroller = EnemyController.GetInstance();

            searchcoordinator = new SpreadSearchPackCoordinatorWithSearchGrid(ScoutUnitDefsById);

            logfile.WriteLine("*ScoutControllerRaider initialized*");
        }
Example #5
0
        BuildMap()
        {
            csai       = CSAI.GetInstance();
            aicallback = csai.aicallback;
            logfile    = LogFile.GetInstance();

            unitdefhelp    = new UnitDefHelp(aicallback);
            unitcontroller = UnitController.GetInstance();

            csai.UnitCreatedEvent   += new CSAI.UnitCreatedHandler(UnitCreated);
            csai.UnitDestroyedEvent += new CSAI.UnitDestroyedHandler(UnitDestroyed);

            unitcontroller.UnitAddedEvent += new UnitController.UnitAddedHandler(UnitCreated);

            Init();
        }
        public ScoutControllerRandomSearch(IPlayStyle playstyle)
        {
            random = new Random();

            this.playstyle = playstyle;

            csai       = CSAI.GetInstance();
            aicallback = csai.aicallback;
            logfile    = LogFile.GetInstance();

            unitcontroller = UnitController.GetInstance();
            buildtable     = BuildTable.GetInstance();

            searchcoordinator = new SpreadSearchPackCoordinatorWithSearchGrid(ScoutUnitDefsById);

            logfile.WriteLine("*ScoutController initialized*");
        }
Example #7
0
        FriendlyUnitPositionObserver()
        {
            csai       = CSAI.GetInstance();
            aicallback = csai.aicallback;
            logfile    = LogFile.GetInstance();

            //csai.UnitFinishedEvent += new CSAI.UnitFinishedHandler( this.NewUnitFinished );
            //csai.UnitDestroyedEvent += new CSAI.UnitDestroyedHandler( this.UnitDestroyed );

            csai.TickEvent += new CSAI.TickHandler(Tick);

            unitcontroller = UnitController.GetInstance();
            unitcontroller.UnitAddedEvent   += new UnitController.UnitAddedHandler(UnitAdded);
            unitcontroller.UnitRemovedEvent += new UnitController.UnitRemovedHandler(UnitRemoved);

            unitdefhelp = new UnitDefHelp(aicallback);
        }
Example #8
0
        public Hashtable FactoriesByTypeName        = new Hashtable(); // deployedid of factories hashed by typename (eg "armvp")

        public FactoryController(IPlayStyle playstyle)
        {
            this.playstyle = playstyle;

            csai           = CSAI.GetInstance();
            aicallback     = csai.aicallback;
            logfile        = LogFile.GetInstance();
            buildtable     = BuildTable.GetInstance();
            unitcontroller = UnitController.GetInstance();

            unitdefhelp = new UnitDefHelp(aicallback);

            csai.UnitFinishedEvent  += new CSAI.UnitFinishedHandler(csai_UnitFinishedEvent);
            csai.UnitDestroyedEvent += new CSAI.UnitDestroyedHandler(csai_UnitDestroyedEvent);

            csai.RegisterVoiceCommand("dumpfactories", new CSAI.VoiceCommandHandler(DumpFactories));
        }
Example #9
0
        public double[,] GetHeightMap()
        {
            LogFile.GetInstance().WriteLine("Getting heightmap, this could take a while... ");
            IAICallback aicallback = CSAI.GetInstance().aicallback;
            int         mapwidth   = aicallback.GetMapWidth();
            int         mapheight  = aicallback.GetMapHeight();

            double[,] HeightMap = new double[mapwidth + 1, mapheight + 1];
            for (int x = 0; x < mapwidth + 1; x++)
            {
                for (int y = 0; y < mapheight + 1; y++)
                {
                    HeightMap[x, y] = aicallback.GetElevation(x * MovementMaps.SQUARE_SIZE, y * MovementMaps.SQUARE_SIZE);
                }
            }
            return(HeightMap);
        }
Example #10
0
        public static void DrawCircle(Float3 pos, double radius)
        {
            IAICallback aicallback = CSAI.GetInstance().aicallback;
            Float3      lastpos    = null;

            for (int angle = 0; angle <= 360; angle += 10)
            {
                int    x       = (int)((double)radius * Math.Cos((double)angle * Math.PI / 180));
                int    y       = (int)((double)radius * Math.Sin((double)angle * Math.PI / 180));
                Float3 thispos = new Float3(x, 0, y) + pos;
                if (lastpos != null)
                {
                    aicallback.CreateLineFigure(thispos, lastpos, 10, false, 200, 0);
                }
                lastpos = thispos;
            }
        }
Example #11
0
        public ConstructorController(IPlayStyle playstyle)
        {
            this.playstyle = playstyle;

            csai       = CSAI.GetInstance();
            aicallback = csai.aicallback;
            logfile    = LogFile.GetInstance();

            ShowNextBuildSite = csai.DebugOn;

            unitcontroller = UnitController.GetInstance();
            // factorycontroller = FactoryController.GetInstance();
            buildtable = BuildTable.GetInstance();
            metal      = Metal.GetInstance();

            ShowNextBuildSite = csai.DebugOn;
            logfile.WriteLine("ConstructorController::ConstructorController() finished");
        }
        public EnemySelector(double maxenemyspeed, IUnitDef typicalunitdef)
        {
            csai       = CSAI.GetInstance();
            aicallback = csai.aicallback;
            logfile    = LogFile.GetInstance();

            // csai.EnemyEntersLOSEvent += new CSAI.EnemyEntersLOSHandler( EnemyEntersLOS );

            enemycontroller = EnemyController.GetInstance();
            unitdefhelp     = new UnitDefHelp(aicallback);

            this.maxenemyspeed = maxenemyspeed;
            this.WaterOk       = WaterOk;
            this.BadTerrainOk  = BadTerrainOk;

            this.typicalunitdef = typicalunitdef;
            //    startarea = MovementMaps.GetInstance().GetArea(typicalunitdef, startpos);
        }
Example #13
0
        BuildTable() // protected constructor to force Singleton instantiation
        {
            CSAI       = CSAI.GetInstance();
            aicallback = CSAI.aicallback;
            logfile    = LogFile.GetInstance();

            modname = aicallback.GetModName();

            logfile.WriteLine("calling GetUnitDefList... ");
            availableunittypes = aicallback.GetUnitDefList();
            logfile.WriteLine("... done");

            if (!LoadCache(modname))
            {
                aicallback.SendTextMsg("Creating new cachefile for mod " + modname, 0);
                GenerateBuildTable(modname);
                SaveCache(modname);
            }
        }
Example #14
0
        EnemyMap()
        {
            csai       = CSAI.GetInstance();
            aicallback = csai.aicallback;
            logfile    = LogFile.GetInstance();

            enemymap = new int[mapwidth / 2, mapheight / 2];

            unitdefhelp = new UnitDefHelp(aicallback);
            //unitcontroller = UnitController.GetInstance();
            enemycontroller = EnemyController.GetInstance();

            //csai.UnitCreatedEvent += new CSAI.UnitCreatedHandler( UnitCreated );
            //csai.UnitDestroyedEvent += new CSAI.UnitDestroyedHandler( UnitDestroyed );

            enemycontroller.NewStaticEnemyAddedEvent += new EnemyController.NewStaticEnemyAddedHandler(StaticEnemyAdded);
            enemycontroller.EnemyRemovedEvent        += new EnemyController.EnemyRemovedHandler(EnemyRemoved);

            Init();
        }
Example #15
0
        BuildMap()
        {
            csai       = CSAI.GetInstance();
            aicallback = csai.aicallback;
            logfile    = LogFile.GetInstance();

            unitdefhelp    = new UnitDefHelp(aicallback);
            unitcontroller = UnitController.GetInstance();

            csai.UnitCreatedEvent   += new CSAI.UnitCreatedHandler(UnitCreated);
            csai.UnitDestroyedEvent += new CSAI.UnitDestroyedHandler(UnitDestroyed);

            unitcontroller.UnitAddedEvent += new UnitController.UnitAddedHandler(UnitCreated);

            if (csai.DebugOn)
            {
                csai.RegisterVoiceCommand("dumpbuildmap", new CSAI.VoiceCommandHandler(DumpBuildMap));
            }

            Init();
        }
Example #16
0
        EnemyController()
        {
            csai       = CSAI.GetInstance();
            aicallback = csai.aicallback;
            logfile    = LogFile.GetInstance();

            autoshowenemies = csai.DebugOn;

            unitcontroller = UnitController.GetInstance();

            csai.TickEvent            += new CSAI.TickHandler(Tick);
            csai.EnemyEnterRadarEvent += new CSAI.EnemyEnterRadarHandler(this.EnemyEnterRadar);
            csai.EnemyEnterLOSEvent   += new CSAI.EnemyEnterLOSHandler(this.EnemyEnterLOS);
            csai.EnemyLeaveRadarEvent += new CSAI.EnemyLeaveRadarHandler(this.EnemyLeaveRadar);
            csai.EnemyDestroyedEvent  += new CSAI.EnemyDestroyedHandler(this.EnemyDestroyed);

            csai.RegisterVoiceCommand("enemiescount", new CSAI.VoiceCommandHandler(VoiceCommandCountEnemies));
            csai.RegisterVoiceCommand("showenemies", new CSAI.VoiceCommandHandler(VoiceCommandShowEnemies));
            csai.RegisterVoiceCommand("autoshowenemieson", new CSAI.VoiceCommandHandler(VoiceCommandAutoShowEnemiesOn));
            csai.RegisterVoiceCommand("autoshowenemiesoff", new CSAI.VoiceCommandHandler(VoiceCommandAutoShowEnemiesOff));

            unitdefhelp = new UnitDefHelp(aicallback);
        }
Example #17
0
        // int terrainwidth;
        // int terrainheight;

        public ScoutControllerRaider(IPlayStyle playstyle)
        {
            this.playstyle = playstyle;

            csai       = CSAI.GetInstance();
            aicallback = csai.aicallback;
            logfile    = LogFile.GetInstance();

            random = new Random();

            //terrainwidth = aicallback.GetMapWidth() * MovementMaps.SQUARE_SIZE;
            // terrainheight = aicallback.GetMapHeight() * MovementMaps.SQUARE_SIZE;

            //int[,] sectorlastcheckedtickcount = new int[ terrainwidth, terrainheight ];
            // bool[,] sectorispriority = new bool[ terrainwidth, terrainheight ];;

            unitcontroller  = UnitController.GetInstance();
            buildtable      = BuildTable.GetInstance();
            enemycontroller = EnemyController.GetInstance();

            searchcoordinator = new SpreadSearchPackCoordinatorWithSearchGrid(ScoutUnitDefsById);

            logfile.WriteLine("*ScoutControllerRaider initialized*");
        }
Example #18
0
        public static Float3 GetNearestReclaim(Float3 mypos, int constructorid)
        {
            if (CSAI.GetInstance().aicallback.GetCurrentFrame() == 0) // check ticks first, beacuse metal shows as zero at start
            {
                return(null);
            }
            LogFile     logfile    = LogFile.GetInstance();
            IAICallback aicallback = CSAI.GetInstance().aicallback;
            IUnitDef    unitdef    = UnitController.GetInstance().UnitDefByDeployedId[constructorid];

            if (!new UnitDefHelp(aicallback).IsMobile(unitdef))
            {
                return(null);
            }
            //Float3 mypos = aicallback.GetUnitPos( constructorid );
            MovementMaps movementmaps = MovementMaps.GetInstance();
            int          currentarea  = movementmaps.GetArea(unitdef, mypos);
            //double nearestreclaimdistancesquared = 1000000;
            //Float3 nearestreclaimpos = null;
            double bestmetaldistanceratio = 0;
            int    bestreclaimid          = 0;
            int    metalspace             = (int)(aicallback.GetMetalStorage() - aicallback.GetMetal());

            logfile.WriteLine("available space in metal storage: " + metalspace);
            int[] nearbyfeatures = aicallback.GetFeatures(mypos, maxreclaimradius);
            bool  reclaimfound   = false;

            foreach (int feature in nearbyfeatures)
            {
                IFeatureDef featuredef = aicallback.GetFeatureDef(feature);
                if (featuredef.metal > 0 && featuredef.metal <= metalspace)
                {
                    Float3 thisfeaturepos         = aicallback.GetFeaturePos(feature);
                    double thisdistance           = Math.Sqrt(Float3Helper.GetSquaredDistance(thisfeaturepos, mypos));
                    double thismetaldistanceratio = featuredef.metal / thisdistance;
                    if (thismetaldistanceratio > bestmetaldistanceratio && movementmaps.GetArea(unitdef, thisfeaturepos) == currentarea)
                    {
                        logfile.WriteLine("Potential reclaim, distance = " + thisdistance + " metal = " + featuredef.metal + " ratio = " + thismetaldistanceratio);
                        bestmetaldistanceratio = thismetaldistanceratio;
                        bestreclaimid          = feature;
                        //         nearestreclaimpo
                        reclaimfound = true;
                    }
                }
            }
            if (reclaimfound && (bestmetaldistanceratio > (1.0 / (100 * reclaimradiusperonehundredmetal))))
            {
                Float3 reclaimpos = aicallback.GetFeaturePos(bestreclaimid);
                logfile.WriteLine("Reclaim found, pos " + reclaimpos.ToString());
                if (CSAI.GetInstance().DebugOn)
                {
                    aicallback.DrawUnit("ARMMEX", reclaimpos, 0.0f, 200, aicallback.GetMyAllyTeam(), true, true);
                }
                return(reclaimpos);
                //aicallback.GiveOrder( constructorid, new Command( Command.CMD_RECLAIM,
                //    new double[]{ reclaimpos.x, reclaimpos.y, reclaimpos.z, 10 } ) );
            }
            else
            {
                //logfile.WriteLine( "No reclaim within parameters" );
                return(null);
            }
        }
Example #19
0
 MetalController()
 {
     csai       = CSAI.GetInstance();
     aicallback = csai.aicallback;
     logfile    = LogFile.GetInstance();
 }
 UnitCommandCache()
 {
     csai       = CSAI.GetInstance();
     aicallback = csai.aicallback;
     logfile    = LogFile.GetInstance();
 }
Example #21
0
 StrategyController()
 {
     csai            = CSAI.GetInstance();
     logfile         = LogFile.GetInstance();
     csai.TickEvent += new CSAI.TickHandler(Tick);
 }
Example #22
0
 StartPosition()
 {
     CSAI.GetInstance().UnitCreatedEvent += new CSAI.UnitCreatedHandler(UnitCreatedEvent);
 }
 public static TimeSpan GetGameTime()
 {
     IAICallback aicallback = CSAI.GetInstance().aicallback;
     int frames = aicallback.GetCurrentFrame();
     return TimeSpan.FromSeconds((double)frames / 30);
 }
Example #24
0
 public SlopeMap()
 {
     csai       = CSAI.GetInstance();
     aicallback = csai.aicallback;
     logfile    = LogFile.GetInstance();
 }
Example #25
0
 BuildTree()
 {
     csai       = CSAI.GetInstance();
     aicallback = csai.aicallback;
     logfile    = LogFile.GetInstance();
 }
Example #26
0
        // note: need to check compatible area
        public Float3 GetNearestUnseen(Float3 currentpos, IUnitDef unitdef, int unseensmeansthismanyframes)
        {
            LosMap      losmap     = LosMap.GetInstance();
            IAICallback aicallback = CSAI.GetInstance().aicallback;
            int         mapwidth   = aicallback.GetMapWidth();
            int         mapheight  = aicallback.GetMapHeight();

            int currentunitarea = MovementMaps.GetInstance().GetArea(unitdef, currentpos);
            int losmapwidth     = losmap.LastSeenFrameCount.GetUpperBound(0) + 1;
            int losmapheight    = losmap.LastSeenFrameCount.GetUpperBound(0) + 1;
            int maxradius       = (int)Math.Sqrt(losmapheight * losmapheight + losmapwidth * losmapwidth);
            int unitlosradius   = (int)unitdef.losRadius; // this is in map / 2 units, so it's ok

            Int2[] circlepoints   = CreateCirclePoints(unitlosradius);
            int    bestradius     = 10000000;
            int    bestarea       = 0;
            Float3 bestpos        = null;
            int    unitmapx       = (int)(currentpos.x / 16);
            int    unitmapy       = (int)(currentpos.y / 16);
            int    thisframecount = aicallback.GetCurrentFrame();

            // step around in unitlosradius steps
            for (int radiuslosunits = unitlosradius * 2; radiuslosunits <= maxradius; radiuslosunits += unitlosradius)
            {
                // calculate angle for a unitlosradius / 2 step at this radius.
                // DrawingUtils.DrawCircle(currentpos, radiuslosunits * 16);

                double anglestepradians = 2 * Math.Asin((double)unitlosradius / 2 / (double)radiuslosunits);
                //csai.DebugSay("anglestepradians: " + anglestepradians);
                //return null;
                for (double angleradians = 0; angleradians <= Math.PI * 2; angleradians += anglestepradians)
                {
                    int unseenarea = 0;
                    int searchmapx = unitmapx + (int)((double)radiuslosunits * Math.Cos(angleradians));
                    int searchmapy = unitmapy + (int)((double)radiuslosunits * Math.Sin(angleradians));
                    if (searchmapx >= 0 && searchmapy >= 0 && searchmapx < (mapwidth / 2) && searchmapy < (mapheight / 2))
                    {
                        // if (csai.DebugOn)
                        //  {
                        //      int groupnumber = DrawingUtils.DrawCircle(new Float3(searchmapx * 16, 50 + aicallback.GetElevation( searchmapx * 16, searchmapy * 16 ), searchmapy * 16), unitlosradius * 16);
                        //     aicallback.SetFigureColor(groupnumber, 1, 1, 0, 0.5);
                        // }

                        int thisareanumber = MovementMaps.GetInstance().GetArea(unitdef, new Float3(searchmapx * 16, 0, searchmapy * 16));
                        if (thisareanumber == currentunitarea)
                        {//
                            //if (csai.DebugOn)
                            // {
                            //     int groupnumber = DrawingUtils.DrawCircle(new Float3(searchmapx * 16, 100, searchmapy * 16), unitlosradius * 16);
                            //     aicallback.SetFigureColor(groupnumber, 1, 1, 0, 0.5);
                            // }
                            foreach (Int2 point in circlepoints)
                            {
                                int thismapx = searchmapx + point.x;
                                int thismapy = searchmapy + point.y;
                                if (thismapx >= 0 && thismapy >= 0 && thismapx < mapwidth / 2 && thismapy < mapheight / 2)
                                {
                                    if (thisframecount - losmap.LastSeenFrameCount[thismapx, thismapy] > unseensmeansthismanyframes)
                                    {
                                        unseenarea++;
                                    }
                                }
                            }
                            if (unseenarea >= (circlepoints.GetUpperBound(0) + 1) * 8 / 10)
                            {
                                int groupnumber = DrawingUtils.DrawCircle(new Float3(searchmapx * 16, 100 * aicallback.GetElevation(searchmapx * 16, searchmapy * 16), searchmapy * 16), unitlosradius * 16);
                                aicallback.SetFigureColor(groupnumber, 1, 0, 1, 0.5);
                                return(new Float3(searchmapx * 16, 0, searchmapy * 16));
                            }
                            // return new Float3(searchmapx * 16, 0, searchmapy * 16); // for debugging, remove later
                        }
                    }
                }
            }
            return(null);
        }