public static GameEntity GenerateAngel(GameContext gameContext) { var human = Humans.GenerateHuman(gameContext); var investorId = GenerateInvestorId(gameContext); BecomeInvestor(gameContext, human, 1000000); TurnToAngel(gameContext, investorId); return(human); }
private static GameEntity CreateCompany(GameContext context, string name, CompanyType companyType) { var CEO = Humans.GenerateHuman(context); var level = UnityEngine.Random.Range(70, 90); Humans.SetTrait(CEO, Trait.Ambitious); Humans.SetSkills(CEO, WorkerRole.CEO); return(CreateCompany(context, name, companyType, new Dictionary <int, BlockOfShares>(), CEO)); }
public static void FireManager(GameEntity company, GameEntity worker) { foreach (var team in company.team.Teams) { //team.Managers.Remove(worker.human.Id); //team.Roles.Remove(worker.human.Id); DetachHumanFromTeam(team, worker.human.Id); } Humans.LeaveCompany(worker); }
public static void FireManager(GameEntity company, GameEntity worker) { Debug.Log("Fire worker from " + company.company.Name + " " + worker.worker.WorkerRole); // + " " + worker.human.Name Humans.LeaveCompany(worker); var team = company.team; team.Managers.Remove(worker.human.Id); ReplaceTeam(company, team); }
// TODO duplicates? This seems more effective public static GameEntity GetWorkerByRole(WorkerRole role, TeamInfo teamInfo, GameContext gameContext) { foreach (var pair in teamInfo.Roles) { if (pair.Value == role) { return(Humans.Get(gameContext, pair.Key)); } } return(null); }
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 void AttachToTeam(GameEntity company, GameEntity worker, WorkerRole role) { // add humanId to team var team = company.team; var humanId = worker.human.Id; team.Managers[humanId] = role; ReplaceTeam(company, team); // add companyId to human Humans.AttachToCompany(worker, company.company.Id, role); }
public static long GetFounderExitDesire(GameEntity startup, int shareholderId, GameContext gameContext) { var founder = Investments.GetInvestorById(gameContext, shareholderId); var ambitions = founder.humanSkills.Traits[TraitType.Ambitions]; var ambition = Humans.GetFounderAmbition(ambitions); if (ambition == Ambition.EarnMoney) { return(Balance.COMPANY_DESIRE_TO_SELL_YES); } return(Balance.COMPANY_DESIRE_TO_SELL_NO); }
// TODO remove public static void SetFounderAmbitionDueToMarketSize(GameEntity company, GameContext gameContext) { var niche = Markets.GetNiche(gameContext, company.product.Niche); var rating = Markets.GetMarketPotentialRating(niche); var rand = UnityEngine.Random.Range(1f, 2f) * 5; // 5...25 var ambition = 65 + Mathf.Clamp(rating * rand, 0, 30); var CeoId = GetCEOId(company); var ceo = Humans.GetHuman(gameContext, CeoId); Humans.SetTrait(ceo, TraitType.Ambitions, (int)ambition); }
// team cost public static Bonus <long> GetSalaries(GameEntity e, GameContext gameContext) { Bonus <long> salaries = new Bonus <long>("Manager salaries"); foreach (var t in e.team.Teams) { foreach (var human in t.Managers) { var salary = Humans.GetSalary(human); salaries.Append(Humans.GetFullName(human), salary); } } return(salaries); }
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 float GetPersonalSalaryModifier(HumanFF human) { float modifier = 0; bool isShy = Humans.HasTrait(human, Trait.Shy); bool isGreedy = Humans.HasTrait(human, Trait.Greedy); if (isShy) { modifier -= 0.3f; } if (isGreedy) { modifier += 0.3f; } return(modifier); }
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 void AutoFillShareholders(GameContext gameContext, GameEntity c, bool founderOnly) { var founder = c.cEO.HumanId; var shareholder = Humans.Get(gameContext, founder); Investments.BecomeInvestor(gameContext, shareholder, 100000); AddShares(c, shareholder, 500); if (founderOnly) { return; } for (var i = 0; i < UnityEngine.Random.Range(1, 5); i++) { var investor = Investments.GetRandomInvestmentFund(gameContext); AddShares(c, investor, 100); } }
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); }
// managers public static void HireManager(GameEntity company, GameContext gameContext, WorkerRole workerRole) => HireManager(company, Humans.GenerateHuman(gameContext, workerRole));
public static GameEntity GetSelectedHuman(GameContext gameContext) { var humanId = (int)GetScreenData(gameContext)[Balance.MENU_SELECTED_HUMAN]; return(Humans.GetHuman(gameContext, humanId)); }
public static HumanFF HireManager(GameEntity company, GameContext gameContext, WorkerRole workerRole, int teamId) => HireManager(company, gameContext, Humans.GenerateHuman(gameContext, workerRole), teamId);
public static long GetSalaryPerRating(HumanFF human) => GetSalaryPerRating(human, Humans.GetRating(human));
public static Bonus <float> GetOpinionAboutOffer(HumanFF worker, ExpiringJobOffer newOffer) { bool willNeedToLeaveCompany = worker.WorkerComponent.companyId != newOffer.CompanyId; var bonus = new Bonus <float>("Opinion about offer"); // scenarios // 1 - unemployed // 2 - employed, same company // 3 - employed, recruiting // 4 - !founder if (!Humans.IsEmployed(worker)) { return(bonus.Append("Salary", newOffer.JobOffer.Salary > GetSalaryPerRating(worker) ? 1 : -1)); } int loyaltyBonus = (worker.HumanCompanyRelationshipComponent.Morale - 50) / 10; int desireToLeaveCompany = 0; if (willNeedToLeaveCompany) { // it's not easy to recruit worker from other company desireToLeaveCompany -= 5; // and if your worker loves stability... if (Humans.HasTrait(worker, Trait.Loyal)) { desireToLeaveCompany -= 5; } // but if your worker loves new challenges... if (Humans.HasTrait(worker, Trait.NewChallenges)) { desireToLeaveCompany += 10; } if (desireToLeaveCompany > 0) { bonus.AppendAndHideIfZero("Wants to leave company", desireToLeaveCompany); } else { bonus.AppendAndHideIfZero("Wants to stay in company", desireToLeaveCompany); } bonus.Append("Loyalty to company", -loyaltyBonus); } else { // prolongation of contract bonus.Append("Loyalty to company", loyaltyBonus); } long newSalary = newOffer.JobOffer.Salary; long salary; salary = (long)Mathf.Max(Humans.GetCurrentOffer(worker).JobOffer.Salary, 1); float salaryRatio; salaryRatio = (newSalary - salary) * 1f / salary; salaryRatio = Mathf.Clamp(salaryRatio, -5, 5); bonus.Append("Salary", salaryRatio); return(bonus); }
public static Ambition GetFounderAmbition(GameEntity company, GameContext gameContext) { var CEOId = company.cEO.HumanId; return(Humans.GetFounderAmbition(gameContext, CEOId)); }
public static void HuntManager(HumanFF worker, GameEntity newCompany, GameContext gameContext, int teamId) { FireManager(gameContext, worker); AttachToCompany(newCompany, gameContext, worker, Humans.GetRole(worker), teamId); }
public static void FireManager(GameEntity company, GameContext gameContext, int humanId) => FireManager(company, Humans.GetHuman(gameContext, humanId));