public void Start(Game.GameVersion version, int numCitizenThreads) { loadBuildings(version); initializeCitizens(version); day = 1; CreateCitizenThreads(numCitizenThreads); // Need to add multithreading for buildings townReady = true; timer.Start(); }
private void loadBuildings(Game.GameVersion version) { switch (version) { case Game.GameVersion.ReleaseLoad: HashSet <Building> buildings = FileManagerSystem.LoadBuildings(this); for (int i = 0; i < buildings.Count; i++) { if (buildings.ElementAt(i).ID.Contains("recreational")) { recreational.Add(buildings.ElementAt(i)); // Have to pass the reference to the object } else if (buildings.ElementAt(i).ID.Contains("residential")) { residential.Add(buildings.ElementAt(i)); } } break; case Game.GameVersion.ReleaseNew: int numRecreational = 8; int numShops = 17; int numHospitals = 4; int numResidentials = 9; string id; for (int i = 0; i < numRecreational; i++) { id = "recreational" + i; Building b = new Building(id, Game.BASE_BUILDING_EXPOSURE_FACTOR + 5, 5000, 0, 0); recreational.Add(b); } for (int i = 0; i < numShops; i++) { id = "shop" + i; Supermarket s = new Supermarket(id, Game.BASE_BUILDING_EXPOSURE_FACTOR, 100, 0, 20); essentials.Add(s); } for (int i = 0; i < numHospitals; i++) { id = "hospital" + i; Hospital h = new Hospital(id, Game.BASE_BUILDING_EXPOSURE_FACTOR - 10, 5000, 0, 20, false); emergency.Add(h); } for (int i = 0; i < numResidentials; i++) { id = "residential" + i; Building b = new Building(id, 0, 5000, 0, 3); residential.Add(b); } break; case Game.GameVersion.Debug: Random r = new Random(); Building b1 = new Building("firstRes", 0, 35, 5000, 3); Hospital h1 = new Hospital("firstHos", 35, 5000, 0, 30, false); Supermarket s1 = new Supermarket("firstSupwe", 35, 5000, 0, 20); Building b2 = new Building("firstRec", 35, 35, 5000, 0); residential.Add(b1); emergency.Add(h1); essentials.Add(s1); recreational.Add(b2); for (int i = 0; i < 10; i++) { int buildingGenerator = r.Next(0, 3); string buildingID = "building" + 0; if (buildingGenerator == 0) { Building b = new Building(buildingID, 35, 5000, 0, 0); recreational.Add(b); } else if (buildingGenerator == 1) { Supermarket s = new Supermarket(buildingID, 35, 5000, 0, 20); essentials.Add(s); } else if (buildingGenerator == 2) { Hospital h = new Hospital(buildingID, 35, 5000, 0, 30, false); emergency.Add(h); } else if (buildingGenerator == 3) { Building b = new Building(buildingID, 0, 200, 0, 3); residential.Add(b); } } break; } }
private void initializeCitizens(Game.GameVersion version) { switch (version) { case Game.GameVersion.Debug: // Method that generates test citizens Random r = new Random(); Stopwatch s = Stopwatch.StartNew(); for (int i = 0; i < CITIZEN_START_COUNT_DEBUG; i++) // Test citizens added to CitizenWorkerThread class { int buildingType = r.Next(3); CitizenWorkerThread.citizens.Add(new Citizen()); switch (buildingType) { case 0: int recNum = r.Next(recreational.Count - 1); CitizenWorkerThread.citizens[i].loadPreviousTask(1, 6, 13, 1, 1, 0, recreational[recNum]); break; case 1: int essNum = r.Next(essentials.Count - 1); CitizenWorkerThread.citizens[i].loadPreviousTask(1, 6, 13, 1, 1, 0, essentials[essNum]); break; case 2: int emerNum = r.Next(emergency.Count - 1); CitizenWorkerThread.citizens[i].loadPreviousTask(1, 6, 13, 1, 1, 0, emergency[emerNum]); break; case 3: int resNum = r.Next(residential.Count - 1); CitizenWorkerThread.citizens[i].loadPreviousTask(1, 6, 13, 1, 1, 0, residential[resNum]); break; } } int infected = r.Next(CITIZEN_START_COUNT - 1); CitizenWorkerThread.citizens[infected].rollHealthEvent(100); for (int i = 0; i < CITIZEN_START_COUNT_DEBUG; i++) { CitizenWorkerThread.citizens[i].initiateTask(); } s.Stop(); break; // Case where we're loading an old save case Game.GameVersion.ReleaseLoad: Collection <Citizen> citizens = FileManagerSystem.LoadCitizens(this); if (citizens == null) { Debug.Log("This game is trash. A town manager without any civilians? HAH! Get me out"); Application.Quit(); return; } CitizenWorkerThread.citizens = citizens; for (int i = 0; i < CITIZEN_START_COUNT; i++) { CitizenWorkerThread.citizens[i].initiateTask(); } break; // Case where we're creating a new save case Game.GameVersion.ReleaseNew: for (int i = 0; i < CITIZEN_START_COUNT; i++) { CitizenWorkerThread.citizens.Add(new Citizen()); // Citizen is generated here. Need to figure out how to generate the citizen's tasks though } Random random = new Random(); for (int i = 0; i < 25; i++) { int infectedNew = random.Next(CitizenCount - 1); CitizenWorkerThread.citizens[infectedNew].rollHealthEvent(100); } for (int i = 0; i < CITIZEN_START_COUNT; i++) { CitizenWorkerThread.citizens[i].initiateTask(); } break; } }