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