Пример #1
0
        public static GameEntity GenerateAngel(GameContext gameContext)
        {
            var human = Humans.GenerateHuman(gameContext);

            var investorId = GenerateInvestorId(gameContext);

            BecomeInvestor(gameContext, human, 1000000);

            TurnToAngel(gameContext, investorId);

            return(human);
        }
Пример #2
0
        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));
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        // 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);
        }
Пример #6
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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
        }
Пример #9
0
        // 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);
        }
Пример #12
0
        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);
        }
Пример #13
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);
        }
Пример #14
0
        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);
            }
        }
Пример #15
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);
        }
Пример #16
0
 // managers
 public static void HireManager(GameEntity company, GameContext gameContext, WorkerRole workerRole) => HireManager(company, Humans.GenerateHuman(gameContext, workerRole));
Пример #17
0
        public static GameEntity GetSelectedHuman(GameContext gameContext)
        {
            var humanId = (int)GetScreenData(gameContext)[Balance.MENU_SELECTED_HUMAN];

            return(Humans.GetHuman(gameContext, humanId));
        }
Пример #18
0
 public static HumanFF HireManager(GameEntity company, GameContext gameContext, WorkerRole workerRole, int teamId) => HireManager(company, gameContext, Humans.GenerateHuman(gameContext, workerRole), teamId);
Пример #19
0
 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);
        }
Пример #21
0
        public static Ambition GetFounderAmbition(GameEntity company, GameContext gameContext)
        {
            var CEOId = company.cEO.HumanId;

            return(Humans.GetFounderAmbition(gameContext, CEOId));
        }
Пример #22
0
        public static void HuntManager(HumanFF worker, GameEntity newCompany, GameContext gameContext, int teamId)
        {
            FireManager(gameContext, worker);

            AttachToCompany(newCompany, gameContext, worker, Humans.GetRole(worker), teamId);
        }
Пример #23
0
 public static void FireManager(GameEntity company, GameContext gameContext, int humanId) => FireManager(company, Humans.GetHuman(gameContext, humanId));