24 lines
715 B
C#
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);
|
|
}
|
|
}
|