From 982067218c63f91bae8510807e621f64cac79566 Mon Sep 17 00:00:00 2001 From: Kex Date: Wed, 17 Jan 2024 21:50:55 +0100 Subject: [PATCH] Enable save/load in MP for any PC client (#34) --- .../SCR_LoadSessionToolbarAction.c | 24 +++++++++++++++++++ .../SCR_SaveSessionToolbarAction.c | 16 +++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 Scripts/Game/ODIN/Editor/Containers/Actions/ToolbarActions/SCR_LoadSessionToolbarAction.c create mode 100644 Scripts/Game/ODIN/Editor/Containers/Actions/ToolbarActions/SCR_SaveSessionToolbarAction.c diff --git a/Scripts/Game/ODIN/Editor/Containers/Actions/ToolbarActions/SCR_LoadSessionToolbarAction.c b/Scripts/Game/ODIN/Editor/Containers/Actions/ToolbarActions/SCR_LoadSessionToolbarAction.c new file mode 100644 index 0000000..e122050 --- /dev/null +++ b/Scripts/Game/ODIN/Editor/Containers/Actions/ToolbarActions/SCR_LoadSessionToolbarAction.c @@ -0,0 +1,24 @@ +[BaseContainerProps(), SCR_BaseContainerCustomTitleUIInfo("m_Info")] +modded class SCR_LoadSessionToolbarAction : SCR_EditorToolbarAction +{ + //--------------------------------------------------------------------------------------------- + //! Enable loading for clients on PC (disabled on Xbox, since broken) + override bool CanBeShown(SCR_EditableEntityComponent hoveredEntity, notnull set selectedEntities, vector cursorWorldPosition, int flags) + { + //--- Disallow if editor save struct is not configured + SCR_SaveLoadComponent saveLoadComponent = SCR_SaveLoadComponent.GetInstance(); + if (!saveLoadComponent || !saveLoadComponent.ContainsStruct(SCR_EditorStruct)) + return false; + + if (Replication.IsServer()) + { + //--- Loading is always available for the host and in singleplayer + return true; + } + else + { + //--- Loading is only available on PC in MP + return (System.GetPlatform() == EPlatform.WINDOWS); + } + } +} \ No newline at end of file diff --git a/Scripts/Game/ODIN/Editor/Containers/Actions/ToolbarActions/SCR_SaveSessionToolbarAction.c b/Scripts/Game/ODIN/Editor/Containers/Actions/ToolbarActions/SCR_SaveSessionToolbarAction.c new file mode 100644 index 0000000..e91cbd5 --- /dev/null +++ b/Scripts/Game/ODIN/Editor/Containers/Actions/ToolbarActions/SCR_SaveSessionToolbarAction.c @@ -0,0 +1,16 @@ +[BaseContainerProps(), SCR_BaseContainerCustomTitleUIInfo("m_Info")] +modded class SCR_SaveSessionToolbarAction : SCR_EditorToolbarAction +{ + //--------------------------------------------------------------------------------------------- + //! Enable saving for clients on PC (disabled on Xbox, since broken) + override bool CanBeShown(SCR_EditableEntityComponent hoveredEntity, notnull set selectedEntities, vector cursorWorldPosition, int flags) + { + //--- Disallow on client if not PC, or in MP for "Save" version ("Save As" is allowed in MP) + if ((!Replication.IsServer() && System.GetPlatform() != EPlatform.WINDOWS) || (!m_bSaveAs && Replication.IsRunning())) + return false; + + //--- Disallow if editor save struct is not configured + SCR_SaveLoadComponent saveLoadComponent = SCR_SaveLoadComponent.GetInstance(); + return saveLoadComponent && saveLoadComponent.ContainsStruct(SCR_EditorStruct); + } +}; \ No newline at end of file