コード例 #1
0
        public static void LogFinancialStatus(GameEntity company, GameContext gameContext)
        {
            var balance = Economy.BalanceOf(company);
            var profit  = Economy.GetProfit(gameContext, company);

            Log(company, $"Financial report: balance={Format.Money(balance)}, profit={Format.Money(profit)}");
        }
コード例 #2
0
        // Leaders
        public static GameEntity GetMostProfitableCompanyOnMarket(GameContext context, GameEntity niche)
        {
            var players = GetProductsOnMarket(context, niche.niche.NicheType);

            var productCompany = players
                                 .OrderByDescending(p => Economy.GetProfit(context, p))
                                 .FirstOrDefault();

            return(productCompany);
        }
コード例 #3
0
        public static long GetMarketROI(GameContext gameContext, GameEntity niche)
        {
            var profitLeader = GetMostProfitableCompanyOnMarket(gameContext, niche);

            var profit             = profitLeader == null ? 0 : Economy.GetProfit(gameContext, profitLeader);
            var biggestMaintenance = profitLeader == null ? 0 : Economy.GetCompanyMaintenance(gameContext, profitLeader);

            var ROI = profitLeader == null ? 0 : (profit * 100 / biggestMaintenance);

            return(ROI);
        }
コード例 #4
0
        public static IEnumerable <ChannelInfo> GetMaintainableMarketingChannels(GameEntity product, GameContext gameContext)
        {
            var payer   = product.isFlagship ? Companies.GetPlayerCompany(gameContext) : product;
            int periods = product.isFlagship ? 10 * 4 : 1;

            var profit      = Economy.GetProfit(gameContext, payer);
            var spareBudget = profit;

            var channels = new List <ChannelInfo>();

            var allChannels  = GetAllMarketingChannels(product).OrderBy(c => Marketing.GetChannelCost(product, c.ID)).ToList();
            var spareBudget2 = Economy.BalanceOf(payer); // spareBudget +

            if (profit < 0)
            {
                spareBudget2 += profit;
            }

            for (var i = 0; i < allChannels.Count(); i++)
            {
                var c      = allChannels[i];
                var adCost = Marketing.GetChannelCost(product, c.ID);

                if (Marketing.IsActiveInChannel(product, c.ID) || adCost == 0)
                {
                    channels.Add(c);
                    continue;
                }

                // 5, cause some channels take too much time to recover
                if (adCost > spareBudget2)
                {
                    if (product.isFlagship)
                    {
                        //Debug.Log("not enough money for " + c.ID + " " + Format.Money(adCost * 3) + " spare=" + Format.Money(spareBudget2));
                    }
                    break;
                }

                channels.Add(c);
                spareBudget2 -= adCost;
            }

            return(channels);

            return(allChannels
                   .Where(IsCanMaintainChannel(product, spareBudget))
                   );
        }
コード例 #5
0
 public static bool IsMeetsIPOProfitRequirement(GameContext gameContext, int companyId)
 {
     return(Economy.GetProfit(gameContext, companyId) > Balance.IPO_REQUIREMENTS_COMPANY_PROFIT);
 }