Exemplo n.º 1
0
    public SimplePriorityQueue <StorageBuilding> FindStorageBuildingToAccept(ItemOrder io)
    {
        int      num  = io.amount;
        int      item = io.item;
        ItemType type = io.type;

        GameObject[] objs = GameObject.FindGameObjectsWithTag("StorageBuilding");
        SimplePriorityQueue <StorageBuilding> queue = new SimplePriorityQueue <StorageBuilding>();

        if (objs.Length == 0)
        {
            return(queue);
        }


        foreach (GameObject go in objs)
        {
            StorageBuilding strg = go.GetComponent <StorageBuilding>();

            //if null, continue
            if (strg == null)
            {
                continue;
            }

            //only add to list if it stores this type
            if (strg.typeStored != type)
            {
                continue;
            }

            if (!strg.Operational)
            {
                continue;
            }

            //only add to list if it has an entrance
            List <Node> entrancesHere  = GetAdjRoadTiles();
            List <Node> entrancesThere = strg.GetAdjRoadTiles();
            if (entrancesHere.Count == 0 || entrancesThere.Count == 0)
            {
                continue;
            }

            //only add to list if it can accept amount
            if (!strg.CanAcceptAmount(num, item))
            {
                continue;
            }

            float distance = entrancesHere[0].DistanceTo(entrancesThere[0]);

            queue.Enqueue(strg, distance);
        }

        return(queue);
    }
Exemplo n.º 2
0
    public SimplePriorityQueue <StorageBuilding> FindStorageBuildingThatHas(ItemOrder io)
    {
        int      num  = io.amount;
        int      item = io.item;
        ItemType type = io.type;

        GameObject[] objs = GameObject.FindGameObjectsWithTag("StorageBuilding");
        SimplePriorityQueue <StorageBuilding> queue = new SimplePriorityQueue <StorageBuilding>();

        if (objs.Length == 0)
        {
            return(queue);
        }


        int smallestAmountOfItem = 0;

        foreach (GameObject go in objs)
        {
            StorageBuilding strg = go.GetComponent <StorageBuilding>();
            if (this is StorageBuilding)
            {
                if (strg == (StorageBuilding)this)
                {
                    continue;
                }
            }

            //if storage building does not store that type of item, continue
            if (strg.typeStored != type)
            {
                continue;
            }

            if (!strg.Operational)
            {
                continue;
            }

            //if storage building or this structure have no entrances, continue
            List <Node> entrancesHere  = GetAdjRoadTiles();
            List <Node> entrancesThere = strg.GetAdjRoadTiles();
            if (entrancesHere.Count == 0 || entrancesThere.Count == 0)
            {
                continue;
            }

            if (strg.Inventory[item] == 0)
            {
                continue;
            }

            //if has less than the needed amount of Item and less than other discovered inventories, continue
            if (strg.Inventory[item] < num && strg.Inventory[item] < smallestAmountOfItem)
            {
                continue;
            }

            smallestAmountOfItem = strg.Inventory[item];
            float distance = entrancesHere[0].DistanceTo(entrancesThere[0]);

            queue.Enqueue(strg, distance);
        }

        return(queue);
    }