コード例 #1
0
ファイル: Resources.cs プロジェクト: zi-yu/orionsbelt
        /// <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);
        }
コード例 #2
0
ファイル: Resources.cs プロジェクト: zi-yu/orionsbelt
        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);
        }