52 lines
1.5 KiB
C#
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);
|
|
}
|
|
}
|
|
} |