Reimplement solo and mp rig switching

This commit is contained in:
2024-09-12 16:55:54 +02:00
parent e428d3a9f9
commit f8822831aa
9 changed files with 119 additions and 198 deletions

View File

@@ -10,15 +10,13 @@ using System.Collections.Generic;
public class GameManager : NetworkBehaviour
{
[SerializeField]
[ReadOnly]
[Inject]
private PlayerComponent soloRig;
private GameObject rigPrefab;
[SerializeField]
[ReadOnly]
private PlayerComponent multiplayerRig;
private PlayerComponent player;
public PlayerComponent LocalPlayer => multiplayerRig ?? soloRig;
public PlayerComponent LocalPlayer => player;
[SerializeField]
[ReadOnly]
@@ -43,6 +41,8 @@ public class GameManager : NetworkBehaviour
networkManager.OnClientConnectedCallback += OnClientConnectedCallback;
networkManager.OnClientDisconnectCallback += OnClientDisconnectCallback;
player = SpawnSoloRig();
if (autoConnectOrHost)
{
if (ClonesManager.IsClone())
@@ -56,6 +56,11 @@ public class GameManager : NetworkBehaviour
}
}
private PlayerComponent SpawnSoloRig()
{
return Instantiate(rigPrefab).GetComponent<PlayerComponent>();
}
public void JoinGame(string code)
{
networkManager.StartClient();
@@ -107,23 +112,25 @@ public class GameManager : NetworkBehaviour
{
yield return new WaitForEndOfFrame();
var position = player.Position;
var rotation = player.Rotation;
player.DestroyDependencies();
if (toSolo)
{
soloRig.Toggle(toSolo);
soloRig.Teleport(multiplayerRig.Position, multiplayerRig.Rotation);
multiplayerRig.DestroyDependencies();
multiplayerRig = null;
yield return new WaitForEndOfFrame();
player = SpawnSoloRig();
}
else
{
soloRig.Toggle(toSolo);
Destroy(player.gameObject);
yield return new WaitForEndOfFrame();
var playerObject = networkManager.LocalClient.PlayerObject;
multiplayerRig = playerObject.GetComponent<PlayerComponent>();
multiplayerRig.Teleport(soloRig.Position, soloRig.Rotation);
multiplayerRig.ToggleAudioListener(true);
player = playerObject.GetComponent<PlayerComponent>();
}
player.Teleport(position, rotation);
}
private void OnClientDisconnectCallback(ulong clientId)