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)}"); }
// 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); }
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); }
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)) ); }
public static bool IsMeetsIPOProfitRequirement(GameContext gameContext, int companyId) { return(Economy.GetProfit(gameContext, companyId) > Balance.IPO_REQUIREMENTS_COMPANY_PROFIT); }