コード例 #1
0
        /// <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;
            }
        }
コード例 #2
0
        /// <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);
            }
        }