85 lines
2.2 KiB
C#
85 lines
2.2 KiB
C#
using UnityEngine;
|
|
|
|
public class MultiplayerBoatControllerSpawner : MonoBehaviour
|
|
{
|
|
[SerializeField]
|
|
private ScriptableEventNetworkObjectSpawn OnNetworkObjectSpawn;
|
|
|
|
private BoatController boatController;
|
|
|
|
private bool boatControllerPreviousActive;
|
|
|
|
private MultiplayerBoatController networkedBoatController;
|
|
|
|
private void MultiplayerManager_OnInSession()
|
|
{
|
|
boatController = Object.FindFirstObjectByType<BoatController>(FindObjectsInactive.Include);
|
|
boatControllerPreviousActive = boatController != null && boatController.gameObject.activeSelf;
|
|
SpawnNetworkedBoatController();
|
|
}
|
|
|
|
private void MultiplayerBoatController_OnStartLocal(MultiplayerBoatController multiplayerBoatController)
|
|
{
|
|
DespawnNetworkedBoatController();
|
|
networkedBoatController = multiplayerBoatController;
|
|
if (boatController != null && boatController.gameObject.activeSelf)
|
|
{
|
|
networkedBoatController.Init(boatController);
|
|
}
|
|
else
|
|
{
|
|
DespawnNetworkedBoatController();
|
|
}
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
MultiplayerManager.OnInSession += MultiplayerManager_OnInSession;
|
|
MultiplayerBoatController.OnStartLocal += MultiplayerBoatController_OnStartLocal;
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
MultiplayerManager.OnInSession -= MultiplayerManager_OnInSession;
|
|
MultiplayerBoatController.OnStartLocal -= MultiplayerBoatController_OnStartLocal;
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (boatController == null)
|
|
{
|
|
return;
|
|
}
|
|
if (boatControllerPreviousActive)
|
|
{
|
|
if (!boatController.gameObject.activeSelf)
|
|
{
|
|
DespawnNetworkedBoatController();
|
|
}
|
|
}
|
|
else if (boatController.gameObject.activeSelf)
|
|
{
|
|
SpawnNetworkedBoatController();
|
|
}
|
|
boatControllerPreviousActive = boatController.gameObject.activeSelf;
|
|
}
|
|
|
|
private void DespawnNetworkedBoatController()
|
|
{
|
|
if ((bool)networkedBoatController)
|
|
{
|
|
networkedBoatController.Deinit();
|
|
networkedBoatController = null;
|
|
}
|
|
}
|
|
|
|
private void SpawnNetworkedBoatController()
|
|
{
|
|
DespawnNetworkedBoatController();
|
|
if (boatController != null && boatController.gameObject.activeSelf)
|
|
{
|
|
OnNetworkObjectSpawn.Raise(new NetworkObjectSpawn("MultiplayerBoatController", boatController.transform.position, boatController.transform.rotation));
|
|
}
|
|
}
|
|
}
|