public void LoadBuilding(RecipeBuildingInfo info) { gameObject.SetActive(true); _activeSlots.Clear(); foreach (var slot in Slots) { var slotInfo = info.Slots.Find(x => x.Slot == slot); if (slotInfo != null) { slot.ApplyOverrides(slotInfo); slot.Load(); _activeSlots.Add(slot); } else { slot.Unload(); } } }
void InitLevel(LevelConfig config) { CurrentLevel = config; _result = Result.Running; _gameTimerElapsed = 0; _finished = false; ActiveResourceBuildings.Clear(); foreach (var building in AllResourceBuildings) { ResourceBuildingInfo resInfo = config.ActiveResourcesBuildings.Find(x => x.Building == building); if (resInfo != null) { building.LoadBuilding(resInfo); ActiveResourceBuildings.Add(building); } else { building.Unload(); } } ActiveRecipeBuildings.Clear(); foreach (var building in AllRecipeBuildings) { RecipeBuildingInfo resInfo = config.ActiveRecipeBuildings.Find(x => x.Building == building); if (config.ActiveRecipeBuildings.Exists(x => x.Building == building)) { building.LoadBuilding(resInfo); ActiveRecipeBuildings.Add(building); } else { building.Unload(); } } _requestAllocations.Clear(); ActiveClientRequestSlots.Clear(); foreach (var slot in AllClientSlots) { slot.Clear(); if (config.ActiveSlots.Contains(slot)) { ActiveClientRequestSlots.Add(slot); } } ActiveDisposalFacilities.Clear(); foreach (var wasteland in AllDisposalFacilities) { if (config.Wastelands.Contains(wasteland)) { wasteland.Load(); ActiveDisposalFacilities.Add(wasteland); } else { wasteland.UnLoad(); } } int numClients = CurrentLevel.NumClients; _requestTimes = new float[numClients]; float avgTime = CurrentLevel.LevelTimeSeconds / CurrentLevel.NumClients; for (int i = 0; i < numClients; ++i) { _requestTimes[i] = Mathf.Clamp(i * avgTime + UnityEngine.Random.Range(-CurrentLevel.DistributionNoise, CurrentLevel.DistributionNoise), 0, CurrentLevel.LevelTimeSeconds); } _requestIdx = 0; _requestElapsed = 0; _numFailures = 0; _revenue = 0; _stalledRequests = new Queue <RequestData>(); _dragging = false; _fatigue = StartFatigue; _elapsedSinceLastDragFinished = -1.0f; GameStarted?.Invoke(LevelIdx, CurrentLevel, SecondsToGameStart); _startReady = false; StartCoroutine(DelayedReady()); }