Browse Source

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.

readme
Nico de Poel 5 years ago
parent
commit
e922e06f99
  1. 8
      Assets/Scenes/SplitScreenTest.unity
  2. 4
      Assets/Scripts/SplitScreenTest.cs
  3. 5
      Assets/Scripts/UniQuake.Interop.cs
  4. 4
      Assets/Scripts/UniQuake.cs

8
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

4
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;
}
}

5
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);

4
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; }
/// <summary>
/// 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);

Loading…
Cancel
Save