void Develop(Node n) { Building b = BuildingAvailable(n.buildingName); if (b) { if (!aihandler.HasResources(n, ResourceType.Money)) { airesource.AllocateMoney(n.GetCost(ResourceType.Money)); if (!aihandler.HasLimitResources(n, ResourceType.Money)) { aibuilding.BuildHut(); } } if (!aihandler.HasResources(n, ResourceType.Water)) { airesource.AllocateWater(n.GetCost(ResourceType.Water)); if (!aihandler.HasLimitResources(n, ResourceType.Water)) { aibuilding.BuildHut(); } } else if (aihandler.HasResources(n, ResourceType.Money)) { b.StartNode(n); } } else { BuildRequiredBuilding(n.buildingName); } }
void ChooseTraining() { fields.Clear(); fields.AddRange(aihandler.playerList.fields); if (fields.Count == 0) { aibuilding.BuildTrainingField(); } else { if (fields.Count < 4) { aibuilding.BuildTrainingField(); } HashSet <BaseUnit> units = aihandler.playerList.baseUnits; int keep = aihandler.playerList.harvesters.Count; foreach (Unit u in units) { if (u.value > 6 || (u.state == WOState.Attacking && u.hitPoints >= u.maxHitPoints * 0.4f)) { continue; } if (u is Harvester) { if (u.state == WOState.Waiting) { keep--; } if (aihandler.GetMinHarvesters() >= keep) { continue; } } int range = -1; if (bpa) { if (u.value >= unitToTrain) { continue; } int canBeTrained = unitToTrain - u.value; if ((canBeTrained & u.value) == 0) { for (int i = 0; i < fields.Count; i++) { if ((1 << fields [i].value & canBeTrained) != 0) { range = i; break; } } if (range == -1) { aibuilding.AskForTrainingFields(canBeTrained); } } } if (range == -1) { range = Random.Range(0, fields.Count); } TrainingField field = fields [range]; WorldObject wo; if (field.value == 5) { if (u.value == 0 || u.specialActivated) { continue; } wo = u; } else { if ((u.value & (1 << field.value)) != 0) { continue; } GameObject gwo = field.getOwner().GetUnit(field.value + (1 << u.value)); if (!gwo) { continue; } wo = gwo.GetComponent <WorldObject> (); } if (!aihandler.HasResources(wo, ResourceType.Money)) { airesource.AllocateMoney(wo.moneyCost); } if (!aihandler.HasResources(wo, ResourceType.Water)) { airesource.AllocateWater(wo.waterCost); } else if (aihandler.HasResources(wo, ResourceType.Money)) { u.MouseClick(field.gameObject, field.transform.position, aihandler.playerId, true); if (u.value == 0) { keep--; } } } } }
void ChooseBuilding() { if (aihandler.playerList.workers.Count == 0) { return; } foreach (Worker w in aihandler.playerList.workers) { if (queue.Count == 0) { break; } if (w.state == WOState.Nothing) { WorldObject wo = aihandler.player.GetBuilding(queue.Peek()).GetComponent <WorldObject> (); if (!aihandler.HasResources(wo, ResourceType.Money)) { airesource.AllocateMoney(wo.moneyCost); if (!aihandler.HasLimitResources(wo, ResourceType.Money)) { BuildHut(); } } if (!aihandler.HasResources(wo, ResourceType.Water)) { airesource.AllocateWater(wo.waterCost); if (!aihandler.HasLimitResources(wo, ResourceType.Water)) { BuildHut(); } } else if (aihandler.HasResources(wo, ResourceType.Money)) { w.getOwner().CreateBuilding(queue.Peek(), Vector3.zero, w); Vector3 playerPos = Vector3.zero; int tries = 1; Vector3 place; if (queue.Peek() == "Hut") { place = airesource.GetNeededResourcePosition(); } else { place = transform.position; } do { playerPos = aihandler.player.FindRandomPlace(tries, place); tries++; } while(!w.getOwner().CanPlaceBuilding() && tries < 10); w.getOwner().CancelBuilding(); if (tries < 10) { w.getOwner().Construction(queue.Dequeue(), playerPos, w.gameObject); buildingTypes.Add(wo.value); } else { queue.Enqueue(queue.Dequeue()); } } } } }