using System; using Cysharp.Threading.Tasks; using RebootKit.Engine.Services.Simulation; using Unity.Collections; using Unity.Netcode; using UnityEngine; using Logger = RebootKit.Engine.Foundation.Logger; namespace RebootKit.Engine.Main { public abstract class Game : NetworkBehaviour { static readonly Logger s_GameLogger = new Logger(nameof(Game)); // Server only callbacks protected virtual void OnPlayerBecameReady(ulong clientID) { } // Event callbacks protected virtual void OnChatMessage(string message) { s_GameLogger.Info($"Chat: {message}"); } // NGO callbacks public override void OnNetworkSpawn() { base.OnNetworkSpawn(); RR.GameInstance = this; } public override void OnNetworkDespawn() { base.OnNetworkDespawn(); RR.GameInstance = null; } // Chat [Rpc(SendTo.Server)] public void SendChatMessageRpc(string message) { PrintChatMessageClientRpc(message); } [ClientRpc(Delivery = RpcDelivery.Reliable)] void PrintChatMessageClientRpc(string message) { OnChatMessage(message); } internal void PlayerBecameReady(ulong clientID) { if (!IsServer) { s_GameLogger.Error("PlayerBecameReady called on client, but this should only be called on the server."); return; } OnPlayerBecameReady(clientID); } } }