Exemple #1
0
        // 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());
                    }
                }
            }
            //}
        }
Exemple #2
0
        bool DoReclaim(int constructorid)
        {
            if (totalticks == 0) // check ticks first, beacuse metal shows as zero at start
            {
                return(false);
            }
            IUnitDef     unitdef      = UnitDefByUnitId[constructorid] as IUnitDef;
            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.DebugOn)
                {
                    aicallback.DrawUnit("ARMMEX", reclaimpos, 0.0f, 200, aicallback.GetMyAllyTeam(), true, true);
                }
                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(reclaimfound);
        }
Exemple #3
0
        public void UnitCreated(int unit)
        {
            aicallback.SendTextMsg("Unit created: " + unit, 0);

            IUnitDef unitdef = aicallback.GetUnitDef(unit);

            aicallback.SendTextMsg("Unit created: " + unitdef.name, 0);

            IMoveData movedata = unitdef.movedata;

            if (movedata != null)
            {
                aicallback.SendTextMsg("Max Slope: " + movedata.maxSlope, 0);
            }

            if (unitdef.isCommander)
            {
                int    numbuildoptions    = unitdef.GetNumBuildOptions();
                string buildoptionsstring = "Build options: ";
                for (int i = 0; i < numbuildoptions; i++)
                {
                    buildoptionsstring += unitdef.GetBuildOption(i);
                }
                aicallback.SendTextMsg(buildoptionsstring, 0);

                Float3 commanderpos = aicallback.GetUnitPos(unit);
                aicallback.SendTextMsg("Commanderpos: " + commanderpos.ToString(), 0);

                int numunitdefs = aicallback.GetNumUnitDefs();
                aicallback.SendTextMsg("Num unit defs: " + numunitdefs, 0);

                for (int i = 1; i <= numunitdefs; i++)
                {
                    IUnitDef thisunitdef = aicallback.GetUnitDefByTypeId(i);
                    if (thisunitdef.name == "ARMSOLAR")
                    {
                        aicallback.SendTextMsg("Found solar collector def: " + thisunitdef.id, 0);

                        Float3 nearestbuildpos = aicallback.ClosestBuildSite(thisunitdef, commanderpos, 1400, 2);
                        aicallback.SendTextMsg("Closest build site: " + nearestbuildpos.ToString(), 0);

                        aicallback.DrawUnit("ARMSOLAR", nearestbuildpos, 0,
                                            200, aicallback.GetMyAllyTeam(), true, true);

                        aicallback.GiveOrder(unit, new Command(-thisunitdef.id, nearestbuildpos.ToDoubleArray()));
                    }
                }
            }
        }
Exemple #4
0
        void ExploreWith(int unitid)
        {
            Float3 destination = new Float3();

            if (PriorityTargets.Count > 0)
            {
                destination = PriorityTargets.Dequeue() as Float3;
                logfile.WriteLine("dequeued next destination: " + destination.ToString());
            }
            else
            {
                destination.x = random.Next(0, aicallback.GetMapWidth() * MovementMaps.SQUARE_SIZE);
                destination.z = random.Next(0, aicallback.GetMapHeight() * MovementMaps.SQUARE_SIZE);
                destination.y = aicallback.GetElevation(destination.x, destination.y);
                logfile.WriteLine("mapwidth: " + aicallback.GetMapWidth() + " squaresize: " + MovementMaps.SQUARE_SIZE);
                logfile.WriteLine("ScoutController sending scout " + unitid + " to " + destination.ToString());
            }
            aicallback.GiveOrder(unitid, new Command(Command.CMD_MOVE, destination.ToDoubleArray()));
        }
Exemple #5
0
 public void UnitAdded(int deployedid, IUnitDef unitdef)
 {
     if (!isMetalMap)
     {
         if (!Extractors.Contains(deployedid) && unitdefhelp.IsMex(unitdef))
         {
             Float3 mexpos = aicallback.GetUnitPos(deployedid);
             logfile.WriteLine("Metal.UnitAdded, pos " + mexpos.ToString());
             Extractors.Add(deployedid, mexpos);
             double squareextractorradius = ExtractorRadius * ExtractorRadius;
             foreach (MetalSpot metalspot in MetalSpots)
             {
                 double thisdistancesquared = Float3Helper.GetSquaredDistance(metalspot.Pos, mexpos);
                 //   logfile.WriteLine( "squareextractorradius: " + squareextractorradius + " thisdistancesquared: " + thisdistancesquared );
                 if (thisdistancesquared <= squareextractorradius)
                 {
                     MetalSpotsUsed.Add(metalspot);
                     logfile.WriteLine("Marking metal spot used: " + metalspot.Pos.ToString());
                 }
             }
         }
     }
 }
Exemple #6
0
 public void UnitRemoved(int deployedid)
 {
     if (!isMetalMap)
     {
         if (Extractors.Contains(deployedid))
         {
             Float3 mexpos = Extractors[deployedid] as Float3;
             logfile.WriteLine("Metal.UnitRemoved, pos " + mexpos.ToString());
             double squareextractorradius = ExtractorRadius * ExtractorRadius;
             foreach (MetalSpot metalspot in MetalSpots)
             {
                 if (Float3Helper.GetSquaredDistance(metalspot.Pos, mexpos) < squareextractorradius)
                 {
                     if (MetalSpotsUsed.Contains(metalspot))
                     {
                         logfile.WriteLine("Marking metal spot free: " + metalspot.Pos.ToString());
                         MetalSpotsUsed.Remove(metalspot);
                     }
                 }
             }
             Extractors.Remove(deployedid);
         }
     }
 }
Exemple #7
0
        Float3 BuildUnit(int constructorid, string targetunitname)
        {
            csai.DebugSay("workflow, building " + targetunitname);
            IUnitDef targetunitdef  = BuildTable.GetInstance().UnitDefByName[targetunitname];
            IUnitDef constructordef = UnitController.GetInstance().UnitDefByDeployedId[constructorid];

            if (new UnitDefHelp(aicallback).IsMobile(constructordef))
            {
                logfile.WriteLine("constructor is mobile");
                Float3 constructorpos = aicallback.GetUnitPos(constructorid);
                Float3 buildsite      = BuildPlanner.GetInstance().ClosestBuildSite(targetunitdef,
                                                                                    constructorpos,
                                                                                    3000, 2);
                buildsite = aicallback.ClosestBuildSite(targetunitdef, buildsite, 1400, 0);
                logfile.WriteLine("constructor location: " + constructorpos.ToString() + " Buildsite: " + buildsite.ToString() + " target item: " + targetunitdef.humanName);
                if (!ActiveConstructors.Contains(constructorid))
                {
                    ActiveConstructors.Add(constructorid);
                }
                aicallback.DrawUnit(targetunitname.ToUpper(), buildsite, 0.0, 200, aicallback.GetMyAllyTeam(), true, true);
                GiveOrderWrapper.GetInstance().BuildUnit(constructorid, targetunitname, buildsite);
                return(buildsite);
            }
            else
            {
                Float3 factorypos = aicallback.GetUnitPos(constructorid);
                logfile.WriteLine("factory location: " + factorypos.ToString() + " target item: " + targetunitdef.humanName);
                if (!ActiveConstructors.Contains(constructorid))
                {
                    ActiveConstructors.Add(constructorid);
                }
                aicallback.DrawUnit(targetunitdef.name.ToUpper(), factorypos, 0.0, 200, aicallback.GetMyAllyTeam(), true, true);
                GiveOrderWrapper.GetInstance().BuildUnit(constructorid, targetunitname);
                return(factorypos);
            }
        }
Exemple #8
0
        void BuildAt(int constructorid, IUnitDef unitdef, Float3 buildsite)
        {
            IUnitDef placeholder;

            /*
             * if( unitdef.name.ToLower() == "armmex" ) // use smaller placeholder for mexes so fit closer to intended metalspot
             * {
             *  placeholder = buildtable.UnitDefByName[ "ARMMOHO".ToLower() ] as IUnitDef;
             * }
             * else
             * {
             *  placeholder = buildtable.UnitDefByName[ "CORGANT".ToLower() ] as IUnitDef;
             * }
             * buildsite = aicallback.ClosestBuildSite( placeholder, buildsite, 1400.0, 2 );
             * buildsite = aicallback.ClosestBuildSite( unitdef, buildsite, 1400.0, 2 );
             */
            if (unitdef.name == "ARMMEX")
            {
                placeholder = buildtable.UnitDefByName["ARMMOHO".ToLower()] as IUnitDef;
                buildsite   = aicallback.ClosestBuildSite(placeholder, buildsite, 1400.0, 2);
                buildsite   = aicallback.ClosestBuildSite(unitdef, buildsite, 1400.0, 2);
            }
            else
            {
                buildsite   = BuildPlanner.GetInstance().ClosestBuildSite(unitdef, buildsite, 3000);
                buildsite.y = aicallback.GetElevation(buildsite.x, buildsite.z);
                buildsite   = aicallback.ClosestBuildSite(unitdef, buildsite, 1400, 2);
            }

            logfile.WriteLine("building " + unitdef.name + " at " + buildsite.ToString());
            if (ShowNextBuildSite)
            {
                aicallback.DrawUnit(unitdef.name, buildsite, 0.0f, 500, aicallback.GetMyAllyTeam(), true, true);
            }
            aicallback.GiveOrder(constructorid, new Command(-unitdef.id, buildsite.ToDoubleArray()));
        }
 void CommanderBuildAt(IUnitDef unitdef, Float3 buildsite)
 {
     logfile.WriteLine("Commander building " + unitdef.name + " at " + buildsite.ToString());
     aicallback.DrawUnit(unitdef.name, buildsite, 0.0f, 500, aicallback.GetMyAllyTeam(), true, true);
     aicallback.GiveOrder(commanderid, new Command(-unitdef.id, buildsite.ToDoubleArray()));
 }
        /*
         * void DoSomething()
         * {
         *  logfile.WriteLine( "CommanderController.DoSomething()" );
         *  IUnitDef factorydef = buildtable.UnitDefByName[ "armvp" ] as IUnitDef;
         *  IUnitDef radardef = buildtable.UnitDefByName[ "armrad" ] as IUnitDef;
         *
         *  if( aicallback.GetEnergy() * 100 / aicallback.GetEnergyStorage() < 10 )
         *  {
         *      CommanderBuildPower();
         *  }
         *  else if( aicallback.GetMetal() * 100 / aicallback.GetMetalStorage() < 50 )
         *  {
         *      CommanderBuildExtractor();
         *  }
         *  else if( FactoryController.GetInstance().FactoryUnitDefByDeployedId.Count > 0 &&
         *      PowerController.GetInstance().CanBuild( radardef ) &&
         *      RadarController.GetInstance().NeedRadarAt( aicallback.GetUnitPos( commanderid ) ) )
         *  {
         *      CommanderBuildRadar();
         *  }
         *  else
         *  {
         *      if( MetalController.GetInstance().CanBuild( factorydef ) )
         *      {
         *          if( PowerController.GetInstance().CanBuild( factorydef ) )
         *          {
         *              CommanderBuildFactory();
         *          }
         *          else
         *          {
         *              CommanderBuildPower();
         *          }
         *      }
         *      else
         *      {
         *          CommanderBuildExtractor();
         *      }
         *  }
         * }
         */
        public void  VoiceCommandCommanderBuildAt(string chatstring, string[] splitchatstring, int player)
        {
            string   unitname = splitchatstring[2];
            IUnitDef unitdef  = buildtable.UnitDefByName[unitname.ToLower()] as IUnitDef;

            if (unitdef == null)
            {
                aicallback.SendTextMsg("Unit " + unitname + " not found.", 0);
                return;
            }

            Float3 pos = new Float3();

            pos.x = Convert.ToDouble(splitchatstring[3]);
            pos.z = Convert.ToDouble(splitchatstring[4]);
            pos.y = aicallback.GetElevation(pos.x, pos.z);

            aicallback.SendTextMsg("giving build order, id " + unitdef.humanName + " at " + pos.ToString(), 0);

            CommanderBuildAt(unitdef, pos);
        }
Exemple #11
0
 void CommanderBuildAt( IUnitDef unitdef, Float3 buildsite )
 {
     logfile.WriteLine( "Commander building " + unitdef.name + " at " + buildsite.ToString() );
     aicallback.DrawUnit(unitdef.name, buildsite, 0.0f, 500, aicallback.GetMyAllyTeam(), true, true);
     aicallback.GiveOrder( commanderid, new Command( - unitdef.id, buildsite.ToDoubleArray() ) );
 }
Exemple #12
0
        /*
        void DoSomething()
        {
            logfile.WriteLine( "CommanderController.DoSomething()" );
            IUnitDef factorydef = buildtable.UnitDefByName[ "armvp" ] as IUnitDef;
            IUnitDef radardef = buildtable.UnitDefByName[ "armrad" ] as IUnitDef;

            if( aicallback.GetEnergy() * 100 / aicallback.GetEnergyStorage() < 10 )
            {
                CommanderBuildPower();
            }
            else if( aicallback.GetMetal() * 100 / aicallback.GetMetalStorage() < 50 )
            {
                CommanderBuildExtractor();
            }
            else if( FactoryController.GetInstance().FactoryUnitDefByDeployedId.Count > 0 &&
                PowerController.GetInstance().CanBuild( radardef ) &&
                RadarController.GetInstance().NeedRadarAt( aicallback.GetUnitPos( commanderid ) ) )
            {
                CommanderBuildRadar();
            }
            else
            {
                if( MetalController.GetInstance().CanBuild( factorydef ) )
                {
                    if( PowerController.GetInstance().CanBuild( factorydef ) )
                    {
                        CommanderBuildFactory();
                    }
                    else
                    {
                        CommanderBuildPower();
                    }
                }
                else
                {
                    CommanderBuildExtractor();
                }
            }
        }
        */
        public void VoiceCommandCommanderBuildAt( string chatstring, string[] splitchatstring, int player )
        {
            string unitname = splitchatstring[2];
            IUnitDef unitdef = buildtable.UnitDefByName[ unitname.ToLower() ] as IUnitDef;
            if( unitdef == null )
            {
                aicallback.SendTextMsg( "Unit " + unitname + " not found.", 0 );
                return;
            }

            Float3 pos = new Float3();
            pos.x = Convert.ToDouble( splitchatstring[3] );
            pos.z = Convert.ToDouble( splitchatstring[4] );
            pos.y =  aicallback.GetElevation( pos.x, pos.z );

            aicallback.SendTextMsg( "giving build order, id " + unitdef.humanName + " at " + pos.ToString(), 0 );

            CommanderBuildAt( unitdef, pos );
        }
        void BuildAt( int constructorid, IUnitDef unitdef, Float3 buildsite )
        {
            IUnitDef placeholder;
            /*
            if( unitdef.name.ToLower() == "armmex" ) // use smaller placeholder for mexes so fit closer to intended metalspot
            {
                placeholder = buildtable.UnitDefByName[ "ARMMOHO".ToLower() ] as IUnitDef;
            }
            else
            {
                placeholder = buildtable.UnitDefByName[ "CORGANT".ToLower() ] as IUnitDef;
            }
            buildsite = aicallback.ClosestBuildSite( placeholder, buildsite, 1400.0, 2 );
            buildsite = aicallback.ClosestBuildSite( unitdef, buildsite, 1400.0, 2 );
            */
            if( unitdef.name == "ARMMEX" )
            {
                placeholder = buildtable.UnitDefByName[ "ARMMOHO".ToLower() ] as IUnitDef;
                buildsite = aicallback.ClosestBuildSite( placeholder, buildsite, 1400.0, 2 );
                buildsite = aicallback.ClosestBuildSite( unitdef, buildsite, 1400.0, 2 );
            }
            else
            {
                buildsite = BuildPlanner.GetInstance().ClosestBuildSite( unitdef, buildsite, 3000 );
                buildsite.y = aicallback.GetElevation( buildsite.x, buildsite.z );
                buildsite = aicallback.ClosestBuildSite( unitdef, buildsite, 1400, 2 );
            }

            logfile.WriteLine( "building " + unitdef.name + " at " + buildsite.ToString() );
            if( ShowNextBuildSite )
            {
                aicallback.DrawUnit(unitdef.name, buildsite, 0.0f, 500, aicallback.GetMyAllyTeam(), true, true);
            }
            aicallback.GiveOrder( constructorid, new Command( - unitdef.id, buildsite.ToDoubleArray() ) );
        }
 public override string ToString()
 {
     if (pos != null)
     {
         return("BuildCommand " + UnitToReceiveOrder + " building " + BuildTable.GetInstance().UnitDefById[idtobuild].humanName + " at " + pos.ToString());
     }
     else
     {
         return("BuildCommand " + UnitToReceiveOrder + " building " + BuildTable.GetInstance().UnitDefById[idtobuild].humanName);
     }
 }
        // 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());
                    }
                }
            }
            //}
        }
 public override string ToString()
 {
     return("MoveToCommand " + UnitToReceiveOrder + " moving to " + targetpos.ToString());
 }
 public override string ToString()
 {
     return("PositionTarget: " + targetpos.ToString());
 }
 void ExploreWith( int unitid )
 {
     Float3 destination = new Float3();
    // if( PriorityTargets.Count > 0 )
    // {            
   //      destination = PriorityTargets.Dequeue() as Float3;
   //      logfile.WriteLine( "dequeued next destination: " + destination.ToString() );
   //  }
   //  else
   //  {
         destination.x = random.Next(0, aicallback.GetMapWidth() * MovementMaps.SQUARE_SIZE );
         destination.z = random.Next( 0, aicallback.GetMapHeight() * MovementMaps.SQUARE_SIZE );
         destination.y = aicallback.GetElevation( destination.x, destination.y );
         logfile.WriteLine( "mapwidth: " + aicallback.GetMapWidth() + " squaresize: " + MovementMaps.SQUARE_SIZE );
         logfile.WriteLine( "ScoutController sending scout " + unitid + " to " + destination.ToString() );
   //  }
     //aicallback.GiveOrder( unitid, new Command( Command.CMD_MOVE, destination.ToDoubleArray() ) );
     GiveOrderWrapper.GetInstance().MoveTo(unitid, destination);
 }
Exemple #19
0
 public override string ToString()
 {
     return("MetalSpot( Pos=" + Pos.ToString() + ", Amount=" + Amount + ", IsOccupied=" + IsOccupied);
 }
Exemple #20
0
        void UpdateLosForUnit(int unitid, IUnitDef unitdef)
        {
            int    thisframecount = aicallback.GetCurrentFrame();
            Float3 pos            = friendlyunitpositionobserver.PosById[unitid] as Float3;
            int    seenmapx       = (int)(pos.x / 16);
            int    seenmapy       = (int)(pos.z / 16);
            // int radius = (int)( unitdef.losRadius / 8 / 2 );
            int radius = (int)unitdef.losRadius;

            if (csai.DebugOn)
            {
                //aicallback.SendTextMsg( "Updating los for " + unitid + " " + unitdef.humanName + " los radius " + radius, 0 );
                DrawingUtils.DrawCircle(pos, radius * 16);
            }
            logfile.WriteLine("Updating los for " + unitid + " " + unitdef.humanName + " los radius " + radius + " pos " + pos.ToString());
            // go line by line, determine positive and negative extent of line, mark lostime
            for (int deltay = -radius; deltay <= radius; deltay++)
            {
                int xextent = (int)Math.Sqrt(radius * radius - deltay * deltay);
                for (int deltax = -xextent; deltax <= xextent; deltax++)
                {
                    int thisx = seenmapx + deltax;
                    int thisy = seenmapy + deltay;
                    if (thisx >= 0 && thisx < mapwidth / 2 && thisy >= 0 && thisy < mapheight / 2)
                    {
                        LastSeenFrameCount[thisx, thisy] = thisframecount;
                    }
                }
                // in progress
            }
            LastLosRefreshFrameCountByUnitId[unitid] = thisframecount;
            PosAtLastRefreshByUnitId[unitid]         = pos;
            logfile.WriteLine("...done");
        }
Exemple #21
0
 public override string ToString()
 {
     return("OwnershipOrder orderedunit: " + orderedunit.humanName + " pos " + pos.ToString() + " deployedid " + unitdeployedid);
 }