Files
RebootKit/Runtime/Engine/Code/Main/Game.cs
2025-07-11 14:40:42 +02:00

52 lines
1.5 KiB
C#

using System;
using Cysharp.Threading.Tasks;
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);
}
}
}