private void RegisterCustomManagers() { // TODO represent data dependencies differently RegisteredManagers.Add(ExtNodeManager.Instance); RegisteredManagers.Add(ExtSegmentManager.Instance); RegisteredManagers.Add(ExtSegmentEndManager.Instance); RegisteredManagers.Add(GeometryManager.Instance); RegisteredManagers.Add(AdvancedParkingManager.Instance); RegisteredManagers.Add(CustomSegmentLightsManager.Instance); RegisteredManagers.Add(ExtBuildingManager.Instance); RegisteredManagers.Add(ExtCitizenInstanceManager.Instance); RegisteredManagers.Add(ExtCitizenManager.Instance); RegisteredManagers.Add(ExtPathManager.Instance); RegisteredManagers.Add(TurnOnRedManager.Instance); RegisteredManagers.Add(LaneArrowManager.Instance); RegisteredManagers.Add(LaneConnectionManager.Instance); RegisteredManagers.Add(OptionsManager.Instance); RegisteredManagers.Add(ParkingRestrictionsManager.Instance); RegisteredManagers.Add(RoutingManager.Instance); RegisteredManagers.Add(SpeedLimitManager.Instance); RegisteredManagers.Add(TrafficLightManager.Instance); RegisteredManagers.Add(TrafficLightSimulationManager.Instance); RegisteredManagers.Add(TrafficMeasurementManager.Instance); RegisteredManagers.Add(TrafficPriorityManager.Instance); RegisteredManagers.Add(UtilityManager.Instance); RegisteredManagers.Add(VehicleRestrictionsManager.Instance); RegisteredManagers.Add(ExtVehicleManager.Instance); RegisteredManagers.Add(JunctionRestrictionsManager.Instance); // depends on TurnOnRedManager, TrafficLightManager, TrafficLightSimulationManager }
internal void Unload() { try { GeometryNotifierDisposable?.Dispose(); GeometryNotifierDisposable = null; CustomPathManager._instance?.OnLevelUnloading(); foreach (ICustomManager manager in RegisteredManagers.AsEnumerable().Reverse()) { try { Log.Info($"OnLevelUnloading: {manager.GetType().Name}"); manager.OnLevelUnloading(); } catch (Exception ex) { ex.LogException(true); } } try { Flags.OnLevelUnloading(); } catch (Exception ex) { ex.LogException(true); } GlobalConfig.OnLevelUnloading(); // destroy immidately to prevent duplicates after hot-reload. var uiviewGO = UIView.GetAView().gameObject; DestroyImmediate(uiviewGO.GetComponent <RoadSelectionPanels>()); DestroyImmediate(uiviewGO.GetComponent <RemoveVehicleButtonExtender>()); DestroyImmediate(uiviewGO.GetComponent <RemoveCitizenInstanceButtonExtender>()); DestroyImmediate(uiviewGO.GetComponent <RemoveCitizenInstanceButtonExtender>()); DestroyImmediate(uiviewGO.GetComponent <UITransportDemand>()); Log.Info("Removing Controls from UI."); if (ModUI.Instance) { ModUI.Instance.CloseMainMenu(); // Hide the UI ASAP ModUI.Instance.Destroy(); Log._Debug("removed UIBase instance."); } } catch (Exception ex) { ex.LogException(true); } Patcher.Uninstall(); IsGameLoaded = false; InGameHotReload = false; }