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);
                }
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
 public static long GetSalaryPerRating(HumanFF human) => GetSalaryPerRating(human, Humans.GetRating(human));