Example #1
0
        void BuildSomething(int factoryid)
        {
            double         highestpriority    = 0;
            IUnitRequester requestertosatisfy = null;
            IUnitDef       factorydef         = FactoryUnitDefByDeployedId[factoryid] as IUnitDef;

            foreach (object requesterobject in Requesters)
            {
                IUnitRequester requester             = requesterobject as IUnitRequester;
                double         thisrequesterpriority = requester.DoYouNeedSomeUnits(new Factory(factoryid, factorydef));
                if (thisrequesterpriority > 0 && thisrequesterpriority > highestpriority)
                {
                    requestertosatisfy = requester;
                    highestpriority    = thisrequesterpriority;
                    logfile.WriteLine("Potential requester to use " + requestertosatisfy.ToString() + " priority: " + highestpriority);
                }
            }

            if (requestertosatisfy != null)
            {
                IUnitDef unitdef = requestertosatisfy.WhatUnitDoYouNeed(new Factory(factoryid, factorydef));
                logfile.WriteLine("factorycontroller factory " + factoryid + " going with request from " + requestertosatisfy.ToString() + " for " + unitdef.humanName);
                requestertosatisfy.WeAreBuildingYouA(unitdef);
                Ownership.GetInstance().RegisterBuildingOrder(this, unitdef, aicallback.GetUnitPos(factoryid));
                aicallback.GiveOrder(factoryid, new Command(-unitdef.id));
            }
        }
Example #2
0
        }                                                     // assign continuous metal flow to this controller; negative for reverse flow

        public void RegisterRequester(IUnitRequester requester)
        {
            if (!Requesters.Contains(requester))
            {
                logfile.WriteLine("FactoryController: adding requester: " + requester.ToString());
                Requesters.Add(requester);
            }
        }
 public void RegisterRequester( IUnitRequester requester )
 {
     if( !Requesters.Contains( requester ) )
     {
         logfile.WriteLine( "FactoryController: adding requester: " + requester.ToString() );
         Requesters.Add( requester );
     }
 }
 public UnitInCreation(IUnitRequester requester, IUnitDef unitdef, Float3 pos)
 {
     this.unitrequester = requester;
     this.unitdef = unitdef;
     this.pos = pos;
 }
Example #5
0
 public UnitInCreation(IUnitRequester requester, IUnitDef unitdef, Float3 pos)
 {
     this.unitrequester = requester;
     this.unitdef       = unitdef;
     this.pos           = pos;
 }
Example #6
0
        // note to self: all this should be added to some sort of requester architecture, cf FactoryController
        // question to self: factorycontroller will be a requester in this architecture???
        // question to self: use same architecture as for factorycontroller or create separate architecture?
        void BuildSomething(int constructorid)
        {
            logfile.WriteLine("ConstructorController.BuildSomething()");
            IUnitDef radardef = buildtable.UnitDefByName["armrad"] as IUnitDef;

            if (aicallback.GetEnergy() * 100 / aicallback.GetEnergyStorage() < 10)
            {
                logfile.WriteLine("constructor building energy");
                BuildPower(constructorid);
            }
            else if (aicallback.GetMetal() * 100 / aicallback.GetMetalStorage() < 50)
            {
                logfile.WriteLine("constructor building metal");
                if (!DoReclaim(constructorid))
                {
                    logfile.WriteLine("constructor building extractor");
                    BuildExtractor(constructorid);
                }
            }
            // only build radar if we have at least one factory already
            //else if( factorycontroller.FactoryUnitDefByDeployedId.Count > 0 &&
            //    EnergyController.GetInstance().CanBuild( radardef ) &&
            //    radarcontroller.NeedRadarAt( aicallback.GetUnitPos( constructorid ) ) )
            // {
            //    BuildRadar( constructorid );
            //}
            else
            {
                double         highestpriority    = 0;
                IUnitRequester requestertosatisfy = null;
                IUnitDef       constructordef     = UnitDefByUnitId[constructorid] as IUnitDef;
                logfile.WriteLine("ConstructorController asking requesters");
                foreach (object requesterobject in Requesters)
                {
                    IUnitRequester requester = requesterobject as IUnitRequester;
                    logfile.WriteLine("ConstructorController asking " + requester.ToString());
                    double thisrequesterpriority = requester.DoYouNeedSomeUnits(new Factory(constructorid, constructordef));
                    if (thisrequesterpriority > 0 && thisrequesterpriority > highestpriority)
                    {
                        requestertosatisfy = requester;
                        highestpriority    = thisrequesterpriority;
                        logfile.WriteLine("ConstructorController: Potential requester to use " + requestertosatisfy.ToString() + " priority: " + highestpriority);
                    }
                }

                if (requestertosatisfy != null)
                {
                    IUnitDef unitdef = requestertosatisfy.WhatUnitDoYouNeed(new Factory(constructorid, constructordef));
                    logfile.WriteLine("constructorcontroller constructor " + constructorid + " going with request from " + requestertosatisfy.ToString() + " for " + unitdef.humanName);
                    requestertosatisfy.WeAreBuildingYouA(unitdef);
                    if (MetalController.GetInstance().CanBuild(unitdef))
                    {
                        if (EnergyController.GetInstance().CanBuild(unitdef))
                        {
                            Build(constructorid, unitdef);
                        }
                        else
                        {
                            BuildPower(constructorid);
                        }
                    }
                    else
                    {
                        if (!DoReclaim(constructorid))
                        {
                            BuildExtractor(constructorid);
                        }
                    }
                }
            }
        }