Exemple #1
0
    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);
        }
    }
Exemple #2
0
    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--;
                    }
                }
            }
        }
    }
Exemple #3
0
    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());
                    }
                }
            }
        }
    }