public override void handleTypedMessage(GameState.ShouldChange m) { // handle setup between the states switch (m.state) { case GameState.State.EarlyGame1: { gm.resources = new Resources(faculty: 2, alumni: 0, students: 1, wealth: 10); //IMPORANT: ALUNI is 0 FOR A REASON DONT CHANGE IT DUMMY gm.state = GameState.State.EarlyGame1; //Set early game state, now disable all features not available in the early game //Initial upgrades that are available gm.upgradeList = new List <UpgradeBase>(); UpgradeHireFaculty upgradeFaculty = new UpgradeHireFaculty(0); gm.AddUpgradable(upgradeFaculty); //Add Hire Administrators upgrade //Initial List of special students gm.specialStudentList = new List <SpecialStudent>(); gm.specialStudentRNG = new RNGSpecialStudent(); //initial purchasable agreements gm.agreements = new HighSchoolAgreement[3]; gm.BuyHSA1.gameObject.SetActive(false); gm.BuyHSA2.gameObject.SetActive(false); gm.BuyHSA3.gameObject.SetActive(false); //Start timer thresholds gm.eventThreshold = Random.Range(2, 10); gm.agreementThreshold = Random.Range(15, 30); //starting dialogue gm.eventController.DoEvent(new Event("'YoU cOuLd ToTaLlY mAkE a BeTtEr UnIvErSiTy ThE sYsTeM iS bRoKeN', maybe you shouldn't have listened to that guy", Event.Type.Narrative)); } break; case GameState.State.EarlyGame2: { gm.eventController.DoEvent(new Event("You've heard a rumor that some High Schools will take a bribe to push students to your school...", Event.Type.Narrative)); gm.playing = !gm.playing; //Add the first agreement gm.resources.agreements.Add(new HighSchoolAgreement("Init HS", 15, 4, 0)); //run generation function for HSA string[] name = RandomAgreements.instance.ChooseName(3); for (int i = 0; i < 3; i++) { gm.agreements[i] = RandomAgreements.instance.generateAgreement(name[i]); } gm.agreementThreshold = Random.Range(4, 18); //use this to change time between new agreements gm.agreementTicker = 0; //enable every window if they were purchased before gm.BuyHSA1.gameObject.SetActive(true); gm.BuyHSA2.gameObject.SetActive(true); gm.BuyHSA3.gameObject.SetActive(true); } break; case GameState.State.EarlyGame3: break; // no-op case GameState.State.EarlyGame4: { //Add the Buy Campus and Buy License Upgrades UpgradeCampus campusUpgrade = new UpgradeCampus(); gm.AddUpgradable(campusUpgrade); UpgradeLicense licenseUpgrade = new UpgradeLicense(); gm.AddUpgradable(licenseUpgrade); gm.eventController.DoEvent(new Event("Students care about happiness and renown. Who knew? Maybe we need to start changing our policies to keep growing", Event.Type.Narrative)); gm.playing = !gm.playing; UpgradeAdministrator upgradeAdmin = new UpgradeAdministrator(); gm.AddUpgradable(upgradeAdmin); //Add Hire Administrators upgrade } break; case GameState.State.MidGame: { gm.eventController.DoEvent(new Event("A University is a business, and business is good...", Event.Type.Narrative)); //disable early game features //buyMenu.options.RemoveAt(0); //remove HSA Buy Option //Create sliders and attach them to their content panel GameObject sliderCreation = Instantiate(gm.salarySliderPrefab, gm.sliderContentPanel); gm.salarySlider = sliderCreation.GetComponent <Slider>(); GameObject sliderCreation2 = Instantiate(gm.facultyRatioSliderPrefab, gm.sliderContentPanel); gm.facultyRatioSlider = sliderCreation2.GetComponent <Slider>(); gm.eventController.DoEvent(new Event("NEW POLICIES: Student-Faculty decides how many students a faculty can handle. Faculty Salary determines how much you pay faculty.", Event.Type.Feature)); gm.facultyRatioSlider.minValue = gm.resources.minFaculty; //Make sure faculty to student ratio can be accomodated for gm.facultyRatioSlider.maxValue = gm.resources.maxFaculty; //Convert resources to MidGame Resources class gm.resources = new ResourcesMidGame(gm.resources); MessageBus.main.emit(new GameState.DidChange(from: GameState.State.EarlyGame4, to: GameState.State.MidGame)); } break; case GameState.State.EndGame: throw new System.Exception("Not yet implemented"); } // change the state GameState.State old = gm.state; gm.state = m.state; // Emit a change message so other things can handle it MessageBus.main.emit(new GameState.DidChange(from: old, to: gm.state)); }