/// <summary>Retorna o custo de um recurso num outro recurso</summary> private bool getResourceCost(ResourceInfo resources, string originalRes, string costResCategory, string costRes, out int amount) { ResourceFactory factory = resources.getAvailableFactory(originalRes); amount = 0; if (factory.CostActions == null) { return(true); } foreach (Action action in factory.CostActions) { if (action is ResourceNeeded) { ResourceNeeded needed = (ResourceNeeded)action; //Chronos.Utils.Log.log("needed.Value=" + needed.Value + " needed.Key=" + needed.Key + " res=" + costRes); if (needed.Key == costRes) { amount = needed.Quantity; return(needed.Quantity <= Manager.getResourceCount(costResCategory, costRes)); } } else { if (action is ResourceAvailable) { ResourceAvailable avail = (ResourceAvailable)action; if (avail.Value == costRes) { amount = avail.Quantity; return(avail.Quantity <= Manager.getResourceCount(costResCategory, costRes)); } } } } return(true); }
private int GetBuildQuantity(ResourceInfo resources, string res) { int mpNeeded = 1; int goldNeeded = 1; int energyNeeded = 1; getResourceCost(resources, res, "Intrinsic", "mp", out mpNeeded); getResourceCost(resources, res, "Intrinsic", "gold", out goldNeeded); getResourceCost(resources, res, "Intrinsic", "energy", out energyNeeded); if (mpNeeded == 0) { mpNeeded = 1; } if (goldNeeded == 0) { goldNeeded = 1; } if (energyNeeded == 0) { energyNeeded = 1; } int mpAvailable = Manager.getResourceCount("Intrinsic", "mp"); int goldAvailable = Manager.getResourceCount("Intrinsic", "gold"); int energyAvailable = Manager.getResourceCount("Intrinsic", "energy"); int quantity1 = mpAvailable / mpNeeded; int quantity2 = goldAvailable / goldNeeded; int quantity3 = energyAvailable / energyNeeded; int quantity = quantity1 < quantity2 ? quantity1 : quantity2; quantity = quantity < quantity3 ? quantity : quantity3; if (res == "marine" || res == "spy") { int labor = Manager.getResourceCount("Intrinsic", "labor") / 2; if (labor < quantity) { quantity = labor; } } if (quantity < 0) { quantity = 0; } if (ShowRareResourceCost) { int rarequantity = -1; foreach (Action action in Universe.getFactory("planet", Category, res).CostActions) { if (action is ResourceNeeded) { ResourceNeeded resn = (ResourceNeeded)action; if (Resource.IsRare(resn.Key)) { rarequantity = Manager.getResourceCount("Rare", resn.Key); break; } } } if (rarequantity >= 0 && rarequantity < quantity) { quantity = rarequantity; } } return(quantity); }