Files

24 lines
715 B
C#

using System;
using Unity.Netcode;
using UnityEngine;
public interface IPlayerSystem { void Initialize(PlayerFacade facade); }
[RequireComponent(typeof(NetworkObject))]
public sealed class PlayerFacade : NetworkBehaviour
{
[SerializeField] private MonoBehaviour[] initializationOrder;
public event Action<PlayerFacade> Initialized;
public override void OnNetworkSpawn()
{
MonoBehaviour[] systems = initializationOrder.Length > 0
? initializationOrder
: GetComponents<MonoBehaviour>();
foreach (MonoBehaviour system in systems)
if (system is IPlayerSystem playerSystem) playerSystem.Initialize(this);
Initialized?.Invoke(this);
}
}