Merge pull request #1446 from Areloch/disconnectCallFix

Fix disconnect function call behavior
This commit is contained in:
Brian Roberts 2025-04-22 18:23:30 -05:00 committed by GitHub
commit 0eafadb1a0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 14 additions and 38 deletions

View file

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

View file

@ -23,4 +23,13 @@ function ToolsModule::onCreate(%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);
}
}

View file

@ -164,40 +164,3 @@ function toggleEditor(%make)
//------------------------------------------------------------------------------
// The editor action maps are defined in editor.bind.tscript
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 );