Files
Ultimate-Fishing-Simulator-…/Assets/Scripts/Assembly-CSharp/MultiplayerBoatControllerSpawner.cs
2026-03-04 09:37:33 +08:00

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