private static void ApplyCEOLoyalty(GameEntity company, TeamInfo team, GameContext gameContext, ref Bonus <int> bonus, GameEntity worker, WorkerRole role) { bool hasCeo = HasMainManagerInTeam(company.team.Teams[0]); bonus.AppendAndHideIfZero("No CEO", hasCeo ? 0 : -4); var manager = GetMainManagerRole(team); var lead = GetWorkerByRole(manager, team, gameContext); if (lead == null) { bonus.Append($"No {Humans.GetFormattedRole(manager)} in team", -4); } else { var CEORating = Humans.GetRating(lead); var workerRating = Humans.GetRating(worker); if (CEORating < workerRating) { bonus.Append($"Incompetent leader (leader rating less than {workerRating})", -1); } } }
public static Bonus <int> GetManagerGrowthBonus(GameEntity worker, TeamInfo teamInfo, bool hasTeacherInTeam, GameContext gameContext) { var rating = Humans.GetRating(worker); bool isCurious = worker.humanSkills.Traits.Contains(Trait.Curious); var bonus = new Bonus <int>("Growth"); bonus //.Append("Base", 25) .Append("Rating", (int)Mathf.Pow(100 - rating, 0.95f)) .AppendAndHideIfZero("Curious", isCurious ? 15 : 0) .AppendAndHideIfZero("Works with Teacher", hasTeacherInTeam ? 7 : 0) ; // market complexity // worker current rating (noob - fast growth, senior - slow) // trait: curious // consultant // loyalty change bonus.Cap(0, (rating < 100) ? 100 : 0); return(bonus); }
public static Bonus <float> GetDirectManagementCostOfTeam(TeamInfo team, GameEntity company, GameContext gameContext) { var bonus = new Bonus <float>("Cost of " + team.Name); var managers = GetPeople(team, gameContext); var mainRole = GetMainManagerRole(team); // 50...90 foreach (var m in managers) { var rating = Humans.GetRating(m); // Lead gain if (Humans.GetRole(m) == mainRole) { bonus.Append($"{mainRole} <b>{rating}lvl</b>", rating / 10f); continue; } bonus.Append($"{m.HumanComponent.Name} {m.HumanComponent.Surname} <b>{rating}lvl</b>", (rating - 150) / 100f); } var processes = GetPolicyValueModified(company, CorporatePolicy.PeopleOrProcesses, 1f, 0.5f, 0.25f); bonus.MultiplyAndHideIfOne("From corporate policies", processes); team.isManagedBadly = bonus.Sum() < 0; return(bonus); }
public static long GetFounderExitDesire(GameEntity startup, int shareholderId, GameContext gameContext) { var founder = Investments.GetInvestor(gameContext, shareholderId); var ambition = Humans.GetFounderAmbition(founder.humanSkills.Traits, Humans.GetRating(founder)); if (ambition == Ambition.EarnMoney) { return(C.COMPANY_DESIRE_TO_SELL_YES); } return(C.COMPANY_DESIRE_TO_SELL_NO); }
public static Bonus <int> GetLoyaltyChangeBonus(HumanFF worker, TeamInfo team, Dictionary <CorporatePolicy, int> culture, GameEntity company) { var bonus = new Bonus <int>("Loyalty"); bonus.Append("Base value", 1); var loyaltyBuff = team.ManagerTasks.Count(t => t == ManagerTask.ImproveAtmosphere); bonus.AppendAndHideIfZero("Manager focus on atmosphere", loyaltyBuff); var role = worker.WorkerComponent.WorkerRole; // TODO: if is CEO in own project, morale loss is zero or very low bonus.AppendAndHideIfZero("IS FOUNDER", worker.WorkerComponent.WorkerRole == WorkerRole.CEO ? 5 : 0); // same role workers //ApplyDuplicateWorkersLoyalty(company, team, gameContext, ref bonus, worker, role); // salary ApplyLowSalaryLoyalty(company, ref bonus, worker); // incompetent leader //ApplyCEOLoyalty(company, team, gameContext, ref bonus, worker, role); // no possibilities to grow var rating = Humans.GetRating(worker); var max = 70; if (role != WorkerRole.CEO) { bonus.AppendAndHideIfZero($"Outgrown company (skill >= {max})", rating >= max ? -3 : 0); } bonus.AppendAndHideIfZero("Too many leaders", Humans.HasTrait(worker, Trait.Leader) && team.TooManyLeaders ? -2 : 0); if (team.isManagedBadly) { bonus.Append("Terrible management", -3); } // bonus.AppendAndHideIfZero(hu) return(bonus); }
public static int GetTeamAverageStrength(GameEntity company, GameContext gameContext) { int rating = 0; var counter = 0; foreach (var t in company.team.Teams) { foreach (var m in t.Managers) { rating += Humans.GetRating(m); counter++; } } if (counter == 0) { return(0); } return(rating / counter); }
public static Bonus <float> GetFeatureRatingCap(GameEntity product, TeamInfo team, GameContext gameContext) { var productManager = Teams.GetWorkerInRole(team, WorkerRole.ProductManager, gameContext); var bonus = new Bonus <float>("Max feature lvl"); bonus.Append("Base", 3f); bonus.AppendAndHideIfZero("Development Team", team.TeamType == TeamType.DevelopmentTeam ? 1f : 0); if (productManager != null) { // ... 5f var addedCap = 6 * Humans.GetRating(productManager) / 100f; bonus.AppendAndHideIfZero("Product Manager", addedCap); } // var culture = Companies.GetOwnCulture(Companies.GetManagingCompanyOf(product, gameContext)); // // var cultureBonus = (10 - culture[CorporatePolicy.DoOrDelegate]) * 0.2f; // var cultureBonus2 = (culture[CorporatePolicy.DecisionsManagerOrTeam]) * 0.4f; // // bonus.Append("Corporate culture Do or Delegate", cultureBonus); // bonus.Append("Corporate culture Structure", cultureBonus2); //bool hasMainManager = Teams.HasMainManagerInTeam(team, gameContext, product); //if (hasMainManager) //{ // var focus = team.ManagerTasks.Count(t => t == ManagerTask.Polishing); // cap += focus * 0.4f; //} bonus.Cap(0, 10); return(bonus); //return Mathf.Clamp(cap, 0, 10); }
public static long GetSalaryPerRating(HumanFF human) => GetSalaryPerRating(human, Humans.GetRating(human));