public static void Enable()
 {
     singleton = new IncorrectInstallWindow();
     lock (Client.eventLock) {
         Client.drawEvent.Add(singleton.Draw);
     }
     singleton.display = true;
 }
 public static void Enable()
 {
     singleton = new IncorrectInstallWindow();
     lock (Client.eventLock) {
         Client.drawEvent.Add(singleton.Draw);
     }
     singleton.display = true;
 }
Exemple #3
0
        public void Awake()
        {
            Profiler.DMPReferenceTime.Start();
            GameObject.DontDestroyOnLoad(this);

            UnityEngine.Debug.Log("KSP installed at " + Assembly.AssemblyPath);
            UnityEngine.Debug.Log("DMP installed at " + Assembly.AssemblyPath);

            if (!Assembly.IsValid)
            {
                UnityEngine.Debug.LogError("DMP is installed at '" + Assembly.AssemblyPath + "', It should be installed at '" + Assembly.AssemblyValidPath + "'");
                return;
            }

            m_assembly = new KerbalAssembly();
            m_settings = new Settings();

            m_modWorker.BuildModuleList();

            // UI
            m_incorrectInstallView = null;
            m_modView          = new ModWindow();
            m_disclaimerWindow = null;

            if (Settings.DisclaimerAccepted != 1 && m_disclaimerWindow == null)
            {
                m_disableMod       = true;
                m_disclaimerWindow = new DisclaimerWindow();
                m_disclaimerWindow.Enable();
            }

            SetupDirectoriesIfNeeded();

            GameEvents.onHideUI.Add(() =>
            {
                m_showUI = false;
            });
            GameEvents.onShowUI.Add(() =>
            {
                m_showUI = true;
            });

            ResetEvent();

            HandleCommandLineArgs();

            DarkLog.Debug("DarkMultiPlayer " + Common.PROGRAM_VERSION + ", protocol " + Common.PROTOCOL_VERSION + " Initialized!");
        }
Exemple #4
0
        public void Update()
        {
            long startClock = Profiler.DMPReferenceTime.ElapsedTicks;

            DarkLog.Update();
            if (modDisabled)
            {
                return;
            }
            if (incorrectlyInstalled)
            {
                if (!displayedIncorrectMessage)
                {
                    displayedIncorrectMessage = true;
                    IncorrectInstallWindow.Enable();
                }
                return;
            }
            try
            {
                if (HighLogic.LoadedScene == GameScenes.MAINMENU)
                {
                    if (!ModWorker.fetch.dllListBuilt)
                    {
                        ModWorker.fetch.dllListBuilt = true;
                        ModWorker.fetch.BuildDllFileList();
                    }
                    if (!dmpSaveChecked)
                    {
                        dmpSaveChecked = true;
                        SetupBlankGameIfNeeded();
                    }
                }

                //Handle GUI events
                if (!PlayerStatusWindow.fetch.disconnectEventHandled)
                {
                    PlayerStatusWindow.fetch.disconnectEventHandled = true;
                    forceQuit = true;
                    NetworkWorker.fetch.SendDisconnect("Quit");
                }
                if (!ConnectionWindow.fetch.renameEventHandled)
                {
                    PlayerStatusWorker.fetch.myPlayerStatus.playerName = Settings.fetch.playerName;
                    Settings.fetch.SaveSettings();
                    ConnectionWindow.fetch.renameEventHandled = true;
                }
                if (!ConnectionWindow.fetch.addEventHandled)
                {
                    Settings.fetch.servers.Add(ConnectionWindow.fetch.addEntry);
                    ConnectionWindow.fetch.addEntry = null;
                    Settings.fetch.SaveSettings();
                    ConnectionWindow.fetch.addingServer    = false;
                    ConnectionWindow.fetch.addEventHandled = true;
                }
                if (!ConnectionWindow.fetch.editEventHandled)
                {
                    Settings.fetch.servers[ConnectionWindow.fetch.selected].name    = ConnectionWindow.fetch.editEntry.name;
                    Settings.fetch.servers[ConnectionWindow.fetch.selected].address = ConnectionWindow.fetch.editEntry.address;
                    Settings.fetch.servers[ConnectionWindow.fetch.selected].port    = ConnectionWindow.fetch.editEntry.port;
                    ConnectionWindow.fetch.editEntry = null;
                    Settings.fetch.SaveSettings();
                    ConnectionWindow.fetch.addingServer     = false;
                    ConnectionWindow.fetch.editEventHandled = true;
                }
                if (!ConnectionWindow.fetch.removeEventHandled)
                {
                    Settings.fetch.servers.RemoveAt(ConnectionWindow.fetch.selected);
                    ConnectionWindow.fetch.selected = -1;
                    Settings.fetch.SaveSettings();
                    ConnectionWindow.fetch.removeEventHandled = true;
                }
                if (!ConnectionWindow.fetch.connectEventHandled)
                {
                    ConnectionWindow.fetch.connectEventHandled = true;
                    NetworkWorker.fetch.ConnectToServer(Settings.fetch.servers[ConnectionWindow.fetch.selected].address, Settings.fetch.servers[ConnectionWindow.fetch.selected].port);
                }
                if (commandLineConnect != null && HighLogic.LoadedScene == GameScenes.MAINMENU && Time.timeSinceLevelLoad > 1f)
                {
                    NetworkWorker.fetch.ConnectToServer(commandLineConnect.address, commandLineConnect.port);
                    commandLineConnect = null;
                }

                if (!ConnectionWindow.fetch.disconnectEventHandled)
                {
                    ConnectionWindow.fetch.disconnectEventHandled = true;
                    gameRunning = false;
                    fireReset   = true;
                    if (NetworkWorker.fetch.state == ClientState.CONNECTING)
                    {
                        NetworkWorker.fetch.Disconnect("Cancelled connection to server");
                    }
                    else
                    {
                        NetworkWorker.fetch.SendDisconnect("Quit during initial sync");
                    }
                }

                foreach (Action updateAction in updateEvent)
                {
                    try
                    {
                        updateAction();
                    }
                    catch (Exception e)
                    {
                        DarkLog.Debug("Threw in UpdateEvent, exception: " + e);
                        if (NetworkWorker.fetch.state != ClientState.RUNNING)
                        {
                            if (NetworkWorker.fetch.state != ClientState.DISCONNECTED)
                            {
                                NetworkWorker.fetch.SendDisconnect("Unhandled error while syncing!");
                            }
                            else
                            {
                                NetworkWorker.fetch.Disconnect("Unhandled error while syncing!");
                            }
                        }
                    }
                }
                //Force quit
                if (forceQuit)
                {
                    forceQuit   = false;
                    gameRunning = false;
                    fireReset   = true;
                    StopGame();
                }

                if (displayDisconnectMessage)
                {
                    if (HighLogic.LoadedScene != GameScenes.MAINMENU)
                    {
                        if ((UnityEngine.Time.realtimeSinceStartup - lastDisconnectMessageCheck) > 1f)
                        {
                            lastDisconnectMessageCheck = UnityEngine.Time.realtimeSinceStartup;
                            if (disconnectMessage != null)
                            {
                                disconnectMessage.duration = 0;
                            }
                            disconnectMessage = ScreenMessages.PostScreenMessage("You have been disconnected!", 2f, ScreenMessageStyle.UPPER_CENTER);
                        }
                    }
                    else
                    {
                        displayDisconnectMessage = false;
                    }
                }

                //Normal quit
                if (gameRunning)
                {
                    if (HighLogic.LoadedScene == GameScenes.MAINMENU)
                    {
                        gameRunning = false;
                        fireReset   = true;
                        NetworkWorker.fetch.SendDisconnect("Quit to main menu");
                    }

                    if (ScreenshotWorker.fetch.uploadScreenshot)
                    {
                        ScreenshotWorker.fetch.uploadScreenshot = false;
                        StartCoroutine(UploadScreenshot());
                    }

                    if (HighLogic.CurrentGame.flagURL != Settings.fetch.selectedFlag)
                    {
                        DarkLog.Debug("Saving selected flag");
                        Settings.fetch.selectedFlag = HighLogic.CurrentGame.flagURL;
                        Settings.fetch.SaveSettings();
                        FlagSyncer.fetch.flagChangeEvent = true;
                    }

                    // save every GeeASL from each body in FlightGlobals
                    if (HighLogic.LoadedScene == GameScenes.FLIGHT && bodiesGees.Count == 0)
                    {
                        foreach (CelestialBody body in FlightGlobals.fetch.bodies)
                        {
                            bodiesGees.Add(body, body.GeeASL);
                        }
                    }

                    //handle use of cheats
                    if (!serverAllowCheats)
                    {
                        CheatOptions.InfiniteFuel    = false;
                        CheatOptions.InfiniteEVAFuel = false;
                        CheatOptions.InfiniteRCS     = false;
                        CheatOptions.NoCrashDamage   = false;

                        foreach (KeyValuePair <CelestialBody, double> gravityEntry in bodiesGees)
                        {
                            gravityEntry.Key.GeeASL = gravityEntry.Value;
                        }
                    }

                    if (HighLogic.LoadedScene == GameScenes.FLIGHT && FlightGlobals.ready)
                    {
                        HighLogic.CurrentGame.Parameters.Flight.CanLeaveToSpaceCenter = (PauseMenu.canSaveAndExit == ClearToSaveStatus.CLEAR);
                    }
                    else
                    {
                        HighLogic.CurrentGame.Parameters.Flight.CanLeaveToSpaceCenter = true;
                    }
                }

                if (fireReset)
                {
                    fireReset = false;
                    FireResetEvent();
                }

                if (startGame)
                {
                    startGame = false;
                    StartGame();
                }
            }
            catch (Exception e)
            {
                DarkLog.Debug("Threw in Update, state " + NetworkWorker.fetch.state.ToString() + ", exception" + e);
                if (NetworkWorker.fetch.state != ClientState.RUNNING)
                {
                    if (NetworkWorker.fetch.state != ClientState.DISCONNECTED)
                    {
                        NetworkWorker.fetch.SendDisconnect("Unhandled error while syncing!");
                    }
                    else
                    {
                        NetworkWorker.fetch.Disconnect("Unhandled error while syncing!");
                    }
                }
            }
            Profiler.updateData.ReportTime(startClock);
        }
Exemple #5
0
        public void Update()
        {
            if (incorrectlyInstalled)
            {
                if (!displayedIncorrectMessage)
                {
                    displayedIncorrectMessage = true;
                    IncorrectInstallWindow.Enable();
                }
                return;
            }
            try
            {
                if (HighLogic.LoadedScene == GameScenes.MAINMENU && !ModWorker.fetch.dllListBuilt)
                {
                    ModWorker.fetch.dllListBuilt = true;
                    ModWorker.fetch.BuildDllFileList();
                }

                //Handle GUI events
                if (!PlayerStatusWindow.fetch.disconnectEventHandled)
                {
                    PlayerStatusWindow.fetch.disconnectEventHandled = true;
                    forceQuit = true;
                    NetworkWorker.fetch.SendDisconnect("Quit");
                }
                if (!ConnectionWindow.fetch.renameEventHandled)
                {
                    PlayerStatusWorker.fetch.myPlayerStatus.playerName = Settings.fetch.playerName;
                    Settings.fetch.SaveSettings();
                    ConnectionWindow.fetch.renameEventHandled = true;
                }
                if (!ConnectionWindow.fetch.addEventHandled)
                {
                    Settings.fetch.servers.Add(ConnectionWindow.fetch.addEntry);
                    ConnectionWindow.fetch.addEntry = null;
                    Settings.fetch.SaveSettings();
                    ConnectionWindow.fetch.addingServer    = false;
                    ConnectionWindow.fetch.addEventHandled = true;
                }
                if (!ConnectionWindow.fetch.editEventHandled)
                {
                    Settings.fetch.servers[ConnectionWindow.fetch.selected].name    = ConnectionWindow.fetch.editEntry.name;
                    Settings.fetch.servers[ConnectionWindow.fetch.selected].address = ConnectionWindow.fetch.editEntry.address;
                    Settings.fetch.servers[ConnectionWindow.fetch.selected].port    = ConnectionWindow.fetch.editEntry.port;
                    ConnectionWindow.fetch.editEntry = null;
                    Settings.fetch.SaveSettings();
                    ConnectionWindow.fetch.addingServer     = false;
                    ConnectionWindow.fetch.editEventHandled = true;
                }
                if (!ConnectionWindow.fetch.removeEventHandled)
                {
                    Settings.fetch.servers.RemoveAt(ConnectionWindow.fetch.selected);
                    ConnectionWindow.fetch.selected = -1;
                    Settings.fetch.SaveSettings();
                    ConnectionWindow.fetch.removeEventHandled = true;
                }
                if (!ConnectionWindow.fetch.connectEventHandled)
                {
                    NetworkWorker.fetch.ConnectToServer(Settings.fetch.servers[ConnectionWindow.fetch.selected].address, Settings.fetch.servers[ConnectionWindow.fetch.selected].port);
                    ConnectionWindow.fetch.connectEventHandled = true;
                }

                if (!ConnectionWindow.fetch.disconnectEventHandled)
                {
                    ConnectionWindow.fetch.disconnectEventHandled = true;
                    gameRunning = false;
                    fireReset   = true;
                    NetworkWorker.fetch.SendDisconnect("Quit during initial sync");
                }

                foreach (Action updateAction in updateEvent)
                {
                    try
                    {
                        updateAction();
                    }
                    catch (Exception e)
                    {
                        DarkLog.Debug("Threw in UpdateEvent, exception: " + e);
                        if (NetworkWorker.fetch.state != ClientState.RUNNING)
                        {
                            if (NetworkWorker.fetch.state != ClientState.DISCONNECTED)
                            {
                                NetworkWorker.fetch.SendDisconnect("Unhandled error while syncing!");
                            }
                            else
                            {
                                NetworkWorker.fetch.Disconnect("Unhandled error while syncing!");
                            }
                        }
                    }
                }
                //Force quit
                if (forceQuit)
                {
                    forceQuit   = false;
                    gameRunning = false;
                    fireReset   = true;
                    NetworkWorker.fetch.SendDisconnect("Force quit to main menu");
                    StopGame();
                }

                if (displayDisconnectMessage)
                {
                    if (HighLogic.LoadedScene != GameScenes.MAINMENU)
                    {
                        if ((UnityEngine.Time.realtimeSinceStartup - lastDisconnectMessageCheck) > 1f)
                        {
                            lastDisconnectMessageCheck = UnityEngine.Time.realtimeSinceStartup;
                            if (disconnectMessage != null)
                            {
                                disconnectMessage.duration = 0;
                            }
                            disconnectMessage = ScreenMessages.PostScreenMessage("You have been disconnected!", 2f, ScreenMessageStyle.UPPER_CENTER);
                        }
                    }
                    else
                    {
                        displayDisconnectMessage = false;
                    }
                }

                //Normal quit
                if (gameRunning)
                {
                    if (HighLogic.LoadedScene == GameScenes.MAINMENU)
                    {
                        gameRunning = false;
                        fireReset   = true;
                        NetworkWorker.fetch.SendDisconnect("Quit to main menu");
                    }

                    if (ScreenshotWorker.fetch.uploadScreenshot)
                    {
                        ScreenshotWorker.fetch.uploadScreenshot = false;
                        StartCoroutine(UploadScreenshot());
                    }

                    if (HighLogic.CurrentGame.flagURL != Settings.fetch.selectedFlag)
                    {
                        DarkLog.Debug("Saving selected flag");
                        Settings.fetch.selectedFlag = HighLogic.CurrentGame.flagURL;
                        Settings.fetch.SaveSettings();
                        FlagSyncer.fetch.flagChangeEvent = true;
                    }

                    //handle use of cheats
                    if (!serverAllowCheats)
                    {
                        CheatOptions.InfiniteFuel    = false;
                        CheatOptions.InfiniteEVAFuel = false;
                        CheatOptions.InfiniteRCS     = false;
                        CheatOptions.NoCrashDamage   = false;
                    }
                }

                if (fireReset)
                {
                    fireReset = false;
                    FireResetEvent();
                }

                if (startGame)
                {
                    startGame = false;
                    StartGame();
                }
            }
            catch (Exception e)
            {
                DarkLog.Debug("Threw in Update, state " + NetworkWorker.fetch.state.ToString() + ", exception" + e);
                if (NetworkWorker.fetch.state != ClientState.RUNNING)
                {
                    if (NetworkWorker.fetch.state != ClientState.DISCONNECTED)
                    {
                        NetworkWorker.fetch.SendDisconnect("Unhandled error while syncing!");
                    }
                    else
                    {
                        NetworkWorker.fetch.Disconnect("Unhandled error while syncing!");
                    }
                }
            }
        }
Exemple #6
0
        public void Update()
        {
            long startClock = Profiler.DMPReferenceTime.ElapsedTicks;

            DarkLog.Update();
            if (m_disableMod)
            {
                return;
            }
            if (!Assembly.IsValid)
            {
                if (m_incorrectInstallView == null)
                {
                    m_incorrectInstallView = new IncorrectInstallWindow();
                    m_incorrectInstallView.Enable();
                }
                return;
            }
            try
            {
                if (HighLogic.LoadedScene == GameScenes.MAINMENU)
                {
//                     if (!dmpSaveChecked)
//                     {
//                         dmpSaveChecked = true;
//                         SetupBlankGameIfNeeded();
//                     }
                }

                //Handle GUI events
//                 if (!PlayerStatusWindow.Instance.disconnectEventHandled)
//                 {
//                     PlayerStatusWindow.Instance.disconnectEventHandled = true;
//                     forceQuit = true;
//                     GameClient.Instance.SendDisconnect("Quit");
//                 }
//                 if (!ConnectionWindow.Instance.renameEventHandled)
//                 {
//                     PlayerStatusWorker.Instance.myPlayerStatus.playerName = Settings.Instance.playerName;
//                     Settings.Instance.SaveSettings();
//                     ConnectionWindow.Instance.renameEventHandled = true;
//                 }
//                 if (!ConnectionWindow.Instance.addEventHandled)
//                 {
//                     Settings.Instance.servers.Add(ConnectionWindow.Instance.addEntry);
//                     ConnectionWindow.Instance.addEntry = null;
//                     Settings.Instance.SaveSettings();
//                     ConnectionWindow.Instance.addingServer = false;
//                     ConnectionWindow.Instance.addEventHandled = true;
//                 }
//                 if (!ConnectionWindow.Instance.editEventHandled)
//                 {
//                     Settings.servers[ConnectionWindow.Instance.selected].name = ConnectionWindow.Instance.editEntry.name;
//                     Settings.Instance.servers[ConnectionWindow.Instance.selected].address = ConnectionWindow.Instance.editEntry.address;
//                     Settings.Instance.servers[ConnectionWindow.Instance.selected].port = ConnectionWindow.Instance.editEntry.port;
//                     ConnectionWindow.Instance.editEntry = null;
//                     Settings.Instance.SaveSettings();
//                     ConnectionWindow.Instance.addingServer = false;
//                     ConnectionWindow.Instance.editEventHandled = true;
//                 }
//                 if (!ConnectionWindow.Instance.removeEventHandled)
//                 {
//                     Settings.Instance.servers.RemoveAt(ConnectionWindow.Instance.selected);
//                     ConnectionWindow.Instance.selected = -1;
//                     Settings.Instance.SaveSettings();
//                     ConnectionWindow.Instance.removeEventHandled = true;
//                 }
//                 if (!ConnectionWindow.Instance.connectEventHandled)
//                 {
//                     ConnectionWindow.Instance.connectEventHandled = true;
//                     GameClient.Instance.ConnectToServer(Settings.Instance.servers[ConnectionWindow.Instance.selected].address, Settings.Instance.servers[ConnectionWindow.Instance.selected].port);
//                 }
//                 if (commandLineConnect != null && HighLogic.LoadedScene == GameScenes.MAINMENU && Time.timeSinceLevelLoad > 1f)
//                 {
//                     GameClient.Instance.ConnectToServer(commandLineConnect.address, commandLineConnect.port);
//                     commandLineConnect = null;
//                 }
//
//                 if (!ConnectionWindow.Instance.disconnectEventHandled)
//                 {
//                     ConnectionWindow.Instance.disconnectEventHandled = true;
//                     gameRunning = false;
//                     fireReset = true;
//                     if (GameClient.Instance.state == ClientState.CONNECTING)
//                     {
//                         GameClient.Instance.Disconnect("Cancelled connection to server");
//                     }
//                     else
//                     {
//                         GameClient.Instance.SendDisconnect("Quit during initial sync");
//                     }
//                 }

                UpdateEvent();

                //Force quit
//                 if (forceQuit)
//                 {
//                     forceQuit = false;
//                     gameRunning = false;
//                     fireReset = true;
//                     StopGame();
//                 }

//                 if (displayDisconnectMessage)
//                 {
//                     if (HighLogic.LoadedScene != GameScenes.MAINMENU)
//                     {
//                         if ((UnityEngine.Time.realtimeSinceStartup - lastDisconnectMessageCheck) > 1f)
//                         {
//                             lastDisconnectMessageCheck = UnityEngine.Time.realtimeSinceStartup;
//                             if (disconnectMessage != null)
//                             {
//                                 disconnectMessage.duration = 0;
//                             }
//                             disconnectMessage = ScreenMessages.PostScreenMessage("You have been disconnected!", 2f, ScreenMessageStyle.UPPER_CENTER);
//                         }
//                     }
//                     else
//                     {
//                         displayDisconnectMessage = false;
//                     }
//                 }

                //Normal quit
//                 if (gameRunning)
//                 {
//                     if (HighLogic.LoadedScene == GameScenes.MAINMENU)
//                     {
//                         gameRunning = false;
//                         fireReset = true;
//                         GameClient.Instance.SendDisconnect("Quit to main menu");
//                     }
//
//                     if (ScreenshotWorker.Instance.uploadScreenshot)
//                     {
//                         ScreenshotWorker.Instance.uploadScreenshot = false;
//                         StartCoroutine(UploadScreenshot());
//                     }
//
//                     if (HighLogic.CurrentGame.flagURL != Settings.Instance.selectedFlag)
//                     {
//                         DarkLog.Debug("Saving selected flag");
//                         Settings.Instance.selectedFlag = HighLogic.CurrentGame.flagURL;
//                         Settings.Instance.SaveSettings();
//                         FlagSyncer.Instance.flagChangeEvent = true;
//                     }
//
//                     // save every GeeASL from each body in FlightGlobals
//                     if (HighLogic.LoadedScene == GameScenes.FLIGHT && bodiesGees.Count == 0)
//                     {
//                         foreach (CelestialBody body in FlightGlobals.fetch.bodies)
//                         {
//                             bodiesGees.Add(body, body.GeeASL);
//                         }
//                     }
//
//                     //handle use of cheats
//                     if (!serverAllowCheats)
//                     {
//                         CheatOptions.InfiniteFuel = false;
//                         CheatOptions.InfiniteEVAFuel = false;
//                         CheatOptions.InfiniteRCS = false;
//                         CheatOptions.NoCrashDamage = false;
//
//                         foreach (KeyValuePair<CelestialBody, double> gravityEntry in bodiesGees)
//                         {
//                             gravityEntry.Key.GeeASL = gravityEntry.Value;
//                         }
//                     }
//
//                     if (HighLogic.LoadedScene == GameScenes.FLIGHT && FlightGlobals.ready)
//                     {
//                         HighLogic.CurrentGame.Parameters.Flight.CanLeaveToSpaceCenter = (PauseMenu.canSaveAndExit == ClearToSaveStatus.CLEAR);
//                     }
//                     else
//                     {
//                         HighLogic.CurrentGame.Parameters.Flight.CanLeaveToSpaceCenter = true;
//                     }
//                 }
//
//                 if (fireReset)
//                 {
//                     fireReset = false;
//                     FireResetEvent();
//                 }
//
//                 if (startGame)
//                 {
//                     startGame = false;
//                     StartGame();
//                 }
            }
            catch (Exception e)
            {
//                 DarkLog.Debug("Threw in Update, state " + GameClient.Instance.state.ToString() + ", exception" + e);
//                 if (GameClient.Instance.state != ClientState.RUNNING)
//                 {
//                     if (GameClient.Instance.state != ClientState.DISCONNECTED)
//                     {
//                         GameClient.Instance.SendDisconnect("Unhandled error while syncing!");
//                     }
//                     else
//                     {
//                         GameClient.Instance.Disconnect("Unhandled error while syncing!");
//                     }
//                 }
            }
            Profiler.updateData.ReportTime(startClock);
        }