From e922e06f9936f909cf5a1f2e3087c9125f004305 Mon Sep 17 00:00:00 2001 From: Nico de Poel Date: Fri, 30 Jul 2021 16:08:30 +0200 Subject: [PATCH] Assign a player number to each UniQuake instance in split-screen as opposed to providing a library override. The UniQuake class can decide for itself how this maps to an alternate library filename. This player number is also provided to FMOD which allows its localized audio for split-screen feature to work properly. --- Assets/Scenes/SplitScreenTest.unity | 8 ++++---- Assets/Scripts/SplitScreenTest.cs | 4 ++-- Assets/Scripts/UniQuake.Interop.cs | 5 +++-- Assets/Scripts/UniQuake.cs | 4 ++-- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Assets/Scenes/SplitScreenTest.unity b/Assets/Scenes/SplitScreenTest.unity index 5907baa..2ac40b5 100644 --- a/Assets/Scenes/SplitScreenTest.unity +++ b/Assets/Scenes/SplitScreenTest.unity @@ -158,22 +158,22 @@ MonoBehaviour: baseGame: 0 modPath: arguments: - libraryName: + playerNumber: 1 - mainCamera: {fileID: 821010101} baseGame: 1 modPath: arguments: - libraryName: uniquake2 + playerNumber: 2 - mainCamera: {fileID: 1512894441} baseGame: 2 modPath: arguments: - libraryName: uniquake3 + playerNumber: 3 - mainCamera: {fileID: 506815091} baseGame: 0 modPath: dopa arguments: - libraryName: uniquake4 + playerNumber: 4 visualStyles: - {fileID: 11400000, guid: d187fe54fb9a3e047bf4cec083877e72, type: 2} --- !u!4 &157597865 diff --git a/Assets/Scripts/SplitScreenTest.cs b/Assets/Scripts/SplitScreenTest.cs index 90a2fae..459cc76 100644 --- a/Assets/Scripts/SplitScreenTest.cs +++ b/Assets/Scripts/SplitScreenTest.cs @@ -31,7 +31,7 @@ public class SplitScreenTest : MonoBehaviour uq.Camera = gameInstance.mainCamera; uq.GameLayer = gameLayer; uq.ViewModelLayer = viewLayer; - uq.LibraryOverride = gameInstance.libraryName; + uq.PlayerNumber = gameInstance.playerNumber; uq.SetVisualStyle(visualStyles[0]); gameLayer += layerStride; @@ -58,6 +58,6 @@ public class SplitScreenTest : MonoBehaviour public string arguments; - public string libraryName; + public int playerNumber; } } diff --git a/Assets/Scripts/UniQuake.Interop.cs b/Assets/Scripts/UniQuake.Interop.cs index 5dc79da..578ac1e 100644 --- a/Assets/Scripts/UniQuake.Interop.cs +++ b/Assets/Scripts/UniQuake.Interop.cs @@ -44,11 +44,12 @@ public partial class UniQuake string dllFile = Path.Combine(Application.dataPath, DllPath); // Experimental code to allow running multiple instances of Quake next to each other - if (!string.IsNullOrEmpty(LibraryOverride)) + if (PlayerNumber > 1) { string directory = Path.GetDirectoryName(dllFile); + string filename = Path.GetFileNameWithoutExtension(dllFile); string extension = Path.GetExtension(dllFile); - dllFile = Path.Combine(directory, LibraryOverride + extension); + dllFile = Path.Combine(directory, filename + PlayerNumber + extension); } libraryHandle = SystemLibrary.LoadLibrary(dllFile); diff --git a/Assets/Scripts/UniQuake.cs b/Assets/Scripts/UniQuake.cs index bdf2f81..7c513ec 100644 --- a/Assets/Scripts/UniQuake.cs +++ b/Assets/Scripts/UniQuake.cs @@ -28,7 +28,7 @@ public partial class UniQuake: MonoBehaviour public string ModDirectory { get; set; } public string[] AdditionalArguments { get; set; } - public string LibraryOverride { get; set; } + public int PlayerNumber { get; set; } /// /// Time since startup for this particular instance of Quake @@ -101,7 +101,7 @@ public partial class UniQuake: MonoBehaviour try { - UniQuake_SetFmodSystem(AudioManager.Instance.FmodSystem.handle); + UniQuake_SetFmodSystem(AudioManager.Instance.FmodSystem.handle, PlayerNumber); UniQuake_SetSysCallbacks(systemModule.ContextPtr, systemModule.CallbacksPtr); UniQuake_SetRenderCallbacks(renderModule.ContextPtr, renderModule.CallbacksPtr); UniQuake_SetGameCallbacks(gameModule.ContextPtr, gameModule.CallbacksPtr);