瀏覽代碼

Merge pull request #1446 from Areloch/disconnectCallFix

Fix disconnect function call behavior
Brian Roberts 5 月之前
父節點
當前提交
0eafadb1a0

+ 5 - 1
Templates/BaseGame/game/core/clientServer/scripts/client/connectionToServer.tscript

@@ -111,8 +111,12 @@ function handleConnectionErrorMessage(%msgType, %msgString, %msgError)
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 // Disconnect
 // Disconnect
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
-
 function disconnect()
 function disconnect()
+{
+	callOnModules("disconnect");
+}
+
+function Core_ClientServer::disconnect(%this)
 {
 {
    // We need to stop the client side simulation
    // We need to stop the client side simulation
    // else physics resources will not cleanup properly.
    // else physics resources will not cleanup properly.

+ 9 - 0
Templates/BaseGame/game/tools/tools.tscript

@@ -23,4 +23,13 @@ function ToolsModule::onCreate(%this)
 function ToolsModule::onDestroy(%this)
 function ToolsModule::onDestroy(%this)
 {
 {
 
 
+}
+
+function ToolsModule::disconnect(%this)
+{
+   if ( isObject( Editor ) && Editor.isEditorEnabled() )
+   {
+      EditorGui.saveAs = false; //whatever edits we were doing are irrelevent now
+      Editor.close(MainMenuGui);
+   }
 }
 }

+ 0 - 37
Templates/BaseGame/game/tools/worldEditor/scripts/editor.ed.tscript

@@ -164,40 +164,3 @@ function toggleEditor(%make)
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 //  The editor action maps are defined in editor.bind.tscript
 //  The editor action maps are defined in editor.bind.tscript
 GlobalActionMap.bind(keyboard, "f11", fastLoadWorldEdit);
 GlobalActionMap.bind(keyboard, "f11", fastLoadWorldEdit);
-
-
-// The scenario:
-// The editor is open and the user closes the level by any way other than
-// the file menu ( exit level ), eg. typing disconnect() in the console.
-//
-// The problem:
-// Editor::close() is not called in this scenario which means onEditorDisable
-// is not called on objects which hook into it and also gEditingMission will no
-// longer be valid.
-//
-// The solution:
-// Override the stock disconnect() function which is in game scripts from here
-// in tools so we avoid putting our code in there.
-//
-// Disclaimer:
-// If you think of a better way to do this feel free. The thing which could
-// be dangerous about this is that no one will ever realize this code overriding
-// a fairly standard and core game script from a somewhat random location.
-// If it 'did' have unforscene sideeffects who would ever find it?
-
-package EditorDisconnectOverride
-{
-   function disconnect()
-   {
-      if ( isObject( Editor ) && Editor.isEditorEnabled() )
-      {
-         EditorGui.saveAs = false; //whatever edits we were doing are irrelevent now
-         %mainMenuGUI = ProjectSettings.value("UI/mainMenuName");
-         if (isObject( %mainMenuGUI ))
-            Editor.close( %mainMenuGUI );
-      }
-      
-      Parent::disconnect();  
-   }
-};
-activatePackage( EditorDisconnectOverride );