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(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)); } } }