/// <summary> /// This method initializes mod's first time loading. /// If <see cref="NetTool" /> is detected we initialize all the support structures, load the available networks and /// finally create the UI. /// </summary> public void Start() { try { // Find NetTool and deploy if (ToolsModifierControl.GetTool <NetTool>() == null) { Log.Warning($"[{nameof(ParallelRoadTool)}.{nameof(Start)}] Net Tool not found, can't deploy!"); enabled = false; return; } Log.Info($"[{nameof(ParallelRoadTool)}.{nameof(Start)}] Loading version: {ModInfo.ModName} ({nameof(IsInGameMode)} is {IsInGameMode})"); // Init support data SelectedRoadTypes = new List <NetTypeItem>(); IsSnappingEnabled = false; IsLeftHandTraffic = Singleton <SimulationManager> .instance.m_metaData.m_invertTraffic == SimulationMetaData.MetaBool.True; _isToolActive = _isToolEnabled = false; LoadNetworks(); // Subscribe to milestones updated, but only if we're not in map editor if (IsInGameMode) { Singleton <UnlockManager> .instance.m_milestonesUpdated += OnMilestoneUpdate; } Log._Debug($"[{nameof(ParallelRoadTool)}.{nameof(Start)}] Adding UI components"); // Main UI init var view = UIView.GetAView(); _mainWindow ??= view.FindUIComponent <UIMainWindow>($"{Configuration.ResourcePrefix}MainWindow"); if (_mainWindow != null) { DestroyImmediate(_mainWindow); } _mainWindow = view.AddUIComponent(typeof(UIMainWindow)) as UIMainWindow; SubscribeToUIEvents(); _mainWindow.OnToolChanged += ToolBaseDetour_OnToolChanged; Log.Info($"[{nameof(ParallelRoadTool)}.{nameof(Start)}] Loaded"); } catch (Exception e) { Log._DebugOnlyError($"[{nameof(ParallelRoadTool)}.{nameof(Start)}] Loading failed"); Log.Exception(e); enabled = false; } }
/// <summary> /// This destroys all the used resourced, so that we can start fresh if the user wants to load a new game. /// Before destroying everything, we store an auto-save file containing the current configuration. /// </summary> public void OnDestroy() { try { Log.Info($"[{nameof(ParallelRoadTool)}.{nameof(OnDestroy)}] Destroying..."); // Remove existing auto-save if (File.Exists(Configuration.AutoSaveFilePath)) { File.Delete(Configuration.AutoSaveFilePath); } Log.Info($"[{nameof(ParallelRoadTool)}.{nameof(OnDestroy)}] Saving networks..."); // Save current networks PresetsUtils.Export(Configuration.AutoSaveFileName); ToggleDetours(false); UnsubscribeFromUIEvents(); // Reset data structures AvailableRoadTypes.Clear(); SelectedRoadTypes.Clear(); AvailableRoadNames = null; IsSnappingEnabled = false; IsLeftHandTraffic = false; _isToolActive = _isToolEnabled = false; _mainWindow.OnToolChanged -= ToolBaseDetour_OnToolChanged; // Unsubscribe to milestones updated Singleton <UnlockManager> .instance.m_milestonesUpdated -= OnMilestoneUpdate; // Destroy UI Destroy(_mainWindow); _mainWindow = null; Log.Info($"[{nameof(ParallelRoadTool)}.{nameof(OnDestroy)}] Destroyed"); } catch (Exception e) { // HACK - [ISSUE 31] Log._DebugOnlyError($"[{nameof(ParallelRoadTool)}.{nameof(OnDestroy)}] Destroy failed"); Log.Exception(e); } }