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)); } }
} // 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 ); } }
// 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); } } } } }