using Engine.Core; namespace Engine.Systems.Network; /// /// Basic network behaviour that supports both client & server behaviour. Finds both /// the and the /// in the universe in it's first active frame. Recommended to use or ///
/// Disclaimer: It implements and in virtual methods. ///
public class CommonNetworkBehaviour : Behaviour, IFirstFrameUpdate, ILastFrameUpdate { protected INetworkCommunicatorServer? server = null!; protected INetworkCommunicatorClient? client = null!; protected bool IsServer { get; private set; } = false; protected bool IsClient { get; private set; } = false; public INetworkCommunicatorServer Server => server ?? throw new Core.Exceptions.NotFoundException($"Universe does not contain a {nameof(INetworkCommunicatorServer)}"); public INetworkCommunicatorClient Client => client ?? throw new Core.Exceptions.NotFoundException($"Universe does not contain a {nameof(INetworkCommunicatorClient)}"); public virtual void FirstActiveFrame() { client = Universe.FindBehaviour(); server = Universe.FindBehaviour(); IsServer = server is not null; IsClient = client is not null; } public virtual void LastActiveFrame() { client = null!; server = null!; IsServer = false; IsClient = false; } }