mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-10 12:39:53 +00:00
actually generic events
This commit is contained in:
parent
b60d79cb39
commit
005ce09ac1
@ -1,61 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Runtime.Serialization.Formatters.Binary;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
public class EventMessage : PlayerMessage
|
||||
{
|
||||
public int EventType { get; set; }
|
||||
public object[] Data { get; set; }
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
EventType = reader.ReadInt32();
|
||||
var guff = reader.ReadString();
|
||||
var strings = guff.Split('|');
|
||||
var temp = new List<object>();
|
||||
foreach (var item in strings)
|
||||
{
|
||||
temp.Add(StringToObject(item));
|
||||
}
|
||||
Data = temp.ToArray();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(EventType);
|
||||
var data = "";
|
||||
foreach (var item in Data)
|
||||
{
|
||||
data += "|" + ObjectToString(item);
|
||||
}
|
||||
data = data.TrimStart('|');
|
||||
writer.Write(data);
|
||||
}
|
||||
|
||||
public string ObjectToString(object obj)
|
||||
{
|
||||
using (var ms = new MemoryStream())
|
||||
{
|
||||
new BinaryFormatter().Serialize(ms, obj);
|
||||
return Convert.ToBase64String(ms.ToArray());
|
||||
}
|
||||
}
|
||||
|
||||
public object StringToObject(string base64String)
|
||||
{
|
||||
byte[] bytes = Convert.FromBase64String(base64String);
|
||||
using (var ms = new MemoryStream(bytes, 0, bytes.Length))
|
||||
{
|
||||
ms.Write(bytes, 0, bytes.Length);
|
||||
ms.Position = 0;
|
||||
return new BinaryFormatter().Deserialize(ms);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,21 +1,17 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace QSB.Events
|
||||
namespace QSB.Events
|
||||
{
|
||||
public static class EventSender
|
||||
{
|
||||
public static List<QSBEvent> EventList = new List<QSBEvent>();
|
||||
|
||||
public static void Init()
|
||||
{
|
||||
EventList.Add(new PlayerFlashlightEvent());
|
||||
EventList.Add(new PlayerSignalscopeEvent());
|
||||
EventList.Add(new PlayerTrasnlatorEvent());
|
||||
EventList.Add(new PlayerProbeLauncherEvent());
|
||||
//EventList.Add(new PlayerProbeEvent());
|
||||
//EventList.Add(new PlayerSectorChange());
|
||||
EventList.Add(new PlayerJoinEvent());
|
||||
//EventList.Add(new PlayerLeaveEvent());
|
||||
new PlayerFlashlightEvent();
|
||||
new PlayerSignalscopeEvent();
|
||||
new PlayerTranslatorEvent();
|
||||
new PlayerProbeLauncherEvent();
|
||||
//new PlayerProbeEvent();
|
||||
//new PlayerSectorChange();
|
||||
new PlayerJoinEvent();
|
||||
//new PlayerLeaveEvent();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
using QSB.Messaging;
|
||||
using QSB.TransformSync;
|
||||
using QSB.Utility;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
@ -20,7 +21,7 @@ namespace QSB.Events
|
||||
|
||||
private void OnClientReceiveMessage(FullStateMessage message)
|
||||
{
|
||||
DebugLog.ToConsole($"Received game state id {PlayerRegistry.LocalPlayer.NetId}");
|
||||
DebugLog.ToConsole($"Received game state id for {PlayerTransformSync.LocalInstance.netId.Value}");
|
||||
PlayerRegistry.HandleFullStateMessage(message);
|
||||
}
|
||||
|
||||
|
@ -2,22 +2,22 @@
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
class PlayerFlashlightEvent : QSBEvent
|
||||
class PlayerFlashlightEvent : QSBEvent<ToggleMessage>
|
||||
{
|
||||
public override MessageType Type => MessageType.FlashlightActiveChange;
|
||||
|
||||
public override void SetupListener()
|
||||
{
|
||||
GlobalMessenger.AddListener("TurnOnFlashlight", () => SendEvent(PlayerRegistry.LocalPlayer.NetId, true));
|
||||
GlobalMessenger.AddListener("TurnOffFlashlight", () => SendEvent(PlayerRegistry.LocalPlayer.NetId, false));
|
||||
GlobalMessenger.AddListener("TurnOnFlashlight", () => SendEvent(new ToggleMessage { On = true }));
|
||||
GlobalMessenger.AddListener("TurnOffFlashlight", () => SendEvent(new ToggleMessage { On = false }));
|
||||
}
|
||||
|
||||
public override void OnReceive(uint sender, object[] data)
|
||||
public override void OnReceive(uint sender, ToggleMessage message)
|
||||
{
|
||||
var player = PlayerRegistry.GetPlayer(sender);
|
||||
var tool = player.FlashLight;
|
||||
player.UpdateState(State.Flashlight, (bool)data[0]);
|
||||
if ((bool)data[0] == true)
|
||||
player.UpdateState(State.Flashlight, message.On);
|
||||
if (message.On)
|
||||
{
|
||||
tool.TurnOn();
|
||||
}
|
||||
@ -27,10 +27,10 @@ namespace QSB.Events
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnReceiveLocal(object[] data)
|
||||
public override void OnReceiveLocal(ToggleMessage message)
|
||||
{
|
||||
var tool = PlayerRegistry.LocalPlayer.FlashLight;
|
||||
if ((bool)data[0] == true)
|
||||
if (message.On)
|
||||
{
|
||||
tool.TurnOn();
|
||||
}
|
||||
|
@ -4,27 +4,27 @@ using QSB.Utility;
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
class PlayerJoinEvent : QSBEvent
|
||||
class PlayerJoinEvent : QSBEvent<PlayerJoinMessage>
|
||||
{
|
||||
public override MessageType Type => MessageType.PlayerJoin;
|
||||
|
||||
public override void SetupListener()
|
||||
{
|
||||
GlobalMessenger<string>.AddListener("QSBPlayerJoin", var => SendEvent(PlayerTransformSync.LocalInstance.netId.Value, var));
|
||||
GlobalMessenger<string>.AddListener("QSBPlayerJoin", name => SendEvent(new PlayerJoinMessage { PlayerName = name }));
|
||||
}
|
||||
|
||||
public override void OnReceive(uint sender, object[] data)
|
||||
public override void OnReceive(uint sender, PlayerJoinMessage message)
|
||||
{
|
||||
var player = PlayerRegistry.CreatePlayer(sender);
|
||||
player.Name = (string)data[0];
|
||||
player.Name = message.PlayerName;
|
||||
player.IsReady = true;
|
||||
DebugLog.ToAll($"{player.Name} joined!");
|
||||
}
|
||||
|
||||
public override void OnReceiveLocal(object[] data)
|
||||
public override void OnReceiveLocal(PlayerJoinMessage message)
|
||||
{
|
||||
var player = PlayerRegistry.CreatePlayer(PlayerTransformSync.LocalInstance.netId.Value);
|
||||
player.Name = (string)data[0];
|
||||
player.Name = message.PlayerName;
|
||||
player.IsReady = true;
|
||||
DebugLog.ToAll($"{player.Name} joined!");
|
||||
}
|
||||
|
21
QSB/Events/PlayerJoinMessage.cs
Normal file
21
QSB/Events/PlayerJoinMessage.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
public class PlayerJoinMessage : PlayerMessage
|
||||
{
|
||||
public string PlayerName { get; set; }
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
PlayerName = reader.ReadString();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(PlayerName);
|
||||
}
|
||||
}
|
||||
}
|
@ -2,22 +2,22 @@
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
class PlayerProbeLauncherEvent : QSBEvent
|
||||
class PlayerProbeLauncherEvent : QSBEvent<ToggleMessage>
|
||||
{
|
||||
public override MessageType Type => MessageType.ProbeLauncherActiveChange;
|
||||
|
||||
public override void SetupListener()
|
||||
{
|
||||
GlobalMessenger<ProbeLauncher>.AddListener("ProbeLauncherEquipped", var => SendEvent(PlayerRegistry.LocalPlayer.NetId, true));
|
||||
GlobalMessenger<ProbeLauncher>.AddListener("ProbeLauncherUnequipped", var => SendEvent(PlayerRegistry.LocalPlayer.NetId, false));
|
||||
GlobalMessenger<ProbeLauncher>.AddListener("ProbeLauncherEquipped", var => SendEvent(new ToggleMessage { On = true }));
|
||||
GlobalMessenger<ProbeLauncher>.AddListener("ProbeLauncherUnequipped", var => SendEvent(new ToggleMessage { On = false }));
|
||||
}
|
||||
|
||||
public override void OnReceive(uint sender, object[] data)
|
||||
public override void OnReceive(uint sender, ToggleMessage message)
|
||||
{
|
||||
var player = PlayerRegistry.GetPlayer(sender);
|
||||
var tool = player.ProbeLauncher;
|
||||
player.UpdateState(State.ProbeLauncher, (bool)data[0]);
|
||||
if ((bool)data[0] == true)
|
||||
player.UpdateState(State.ProbeLauncher, message.On);
|
||||
if (message.On)
|
||||
{
|
||||
tool.EquipTool();
|
||||
}
|
||||
@ -27,10 +27,10 @@ namespace QSB.Events
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnReceiveLocal(object[] data)
|
||||
public override void OnReceiveLocal(ToggleMessage message)
|
||||
{
|
||||
var tool = PlayerRegistry.LocalPlayer.ProbeLauncher;
|
||||
if ((bool)data[0] == true)
|
||||
if (message.On)
|
||||
{
|
||||
tool.EquipTool();
|
||||
}
|
||||
|
@ -2,22 +2,22 @@
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
class PlayerSignalscopeEvent : QSBEvent
|
||||
class PlayerSignalscopeEvent : QSBEvent<ToggleMessage>
|
||||
{
|
||||
public override MessageType Type => MessageType.SignalscopeActiveChange;
|
||||
|
||||
public override void SetupListener()
|
||||
{
|
||||
GlobalMessenger<Signalscope>.AddListener("EquipSignalscope", var => SendEvent(PlayerRegistry.LocalPlayer.NetId, true));
|
||||
GlobalMessenger.AddListener("UnequipSignalscope", () => SendEvent(PlayerRegistry.LocalPlayer.NetId, false));
|
||||
GlobalMessenger<Signalscope>.AddListener("EquipSignalscope", var => SendEvent(new ToggleMessage { On = true }));
|
||||
GlobalMessenger.AddListener("UnequipSignalscope", () => SendEvent(new ToggleMessage { On = false }));
|
||||
}
|
||||
|
||||
public override void OnReceive(uint sender, object[] data)
|
||||
public override void OnReceive(uint sender, ToggleMessage message)
|
||||
{
|
||||
var player = PlayerRegistry.GetPlayer(sender);
|
||||
var tool = player.Signalscope;
|
||||
player.UpdateState(State.Signalscope, (bool)data[0]);
|
||||
if ((bool)data[0] == true)
|
||||
player.UpdateState(State.Signalscope, message.On);
|
||||
if (message.On)
|
||||
{
|
||||
tool.EquipTool();
|
||||
}
|
||||
@ -27,10 +27,10 @@ namespace QSB.Events
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnReceiveLocal(object[] data)
|
||||
public override void OnReceiveLocal(ToggleMessage message)
|
||||
{
|
||||
var tool = PlayerRegistry.LocalPlayer.Signalscope;
|
||||
if ((bool)data[0] == true)
|
||||
if (message.On)
|
||||
{
|
||||
tool.EquipTool();
|
||||
}
|
||||
|
@ -2,22 +2,22 @@
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
class PlayerTrasnlatorEvent : QSBEvent
|
||||
class PlayerTranslatorEvent : QSBEvent<ToggleMessage>
|
||||
{
|
||||
public override MessageType Type => MessageType.TranslatorActiveChange;
|
||||
|
||||
public override void SetupListener()
|
||||
{
|
||||
GlobalMessenger.AddListener("EquipTranslator", () => SendEvent(PlayerRegistry.LocalPlayer.NetId, true));
|
||||
GlobalMessenger.AddListener("UnequipTranslator", () => SendEvent(PlayerRegistry.LocalPlayer.NetId, false));
|
||||
GlobalMessenger.AddListener("EquipTranslator", () => SendEvent(new ToggleMessage { On = true }));
|
||||
GlobalMessenger.AddListener("UnequipTranslator", () => SendEvent(new ToggleMessage { On = false }));
|
||||
}
|
||||
|
||||
public override void OnReceive(uint sender, object[] data)
|
||||
public override void OnReceive(uint sender, ToggleMessage message)
|
||||
{
|
||||
var player = PlayerRegistry.GetPlayer(sender);
|
||||
var tool = player.Translator;
|
||||
player.UpdateState(State.Translator, (bool)data[0]);
|
||||
if ((bool)data[0] == true)
|
||||
player.UpdateState(State.Translator, message.On);
|
||||
if (message.On)
|
||||
{
|
||||
tool.EquipTool();
|
||||
}
|
||||
@ -27,10 +27,10 @@ namespace QSB.Events
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnReceiveLocal(object[] data)
|
||||
public override void OnReceiveLocal(ToggleMessage message)
|
||||
{
|
||||
var tool = PlayerRegistry.LocalPlayer.Translator;
|
||||
if ((bool)data[0] == true)
|
||||
if (message.On)
|
||||
{
|
||||
tool.EquipTool();
|
||||
}
|
||||
|
@ -4,56 +4,53 @@ using QSB.Utility;
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
public abstract class QSBEvent
|
||||
public abstract class QSBEvent<T> where T : PlayerMessage, new()
|
||||
|
||||
{
|
||||
public abstract MessageType Type { get; }
|
||||
|
||||
public abstract void SetupListener();
|
||||
public abstract void OnReceive(uint sender, object[] data);
|
||||
public virtual void OnReceiveLocal(object[] data) { }
|
||||
public abstract void OnReceive(uint sender, T message);
|
||||
|
||||
public void SendEvent(uint sender, params object[] data)
|
||||
public virtual void OnReceiveLocal(T message)
|
||||
{
|
||||
var message = new EventMessage
|
||||
{
|
||||
SenderId = sender,
|
||||
EventType = (int)Type,
|
||||
Data = data
|
||||
};
|
||||
Send(message);
|
||||
}
|
||||
|
||||
private readonly MessageHandler<EventMessage> _eventHandler;
|
||||
public void SendEvent(T message)
|
||||
{
|
||||
UnityHelper.Instance.RunWhen(() => PlayerTransformSync.LocalInstance != null, () => Send(message));
|
||||
}
|
||||
|
||||
private readonly MessageHandler<T> _eventHandler;
|
||||
|
||||
protected QSBEvent()
|
||||
{
|
||||
_eventHandler = new MessageHandler<EventMessage>(Type);
|
||||
_eventHandler = new MessageHandler<T>(Type);
|
||||
_eventHandler.OnClientReceiveMessage += OnClientReceiveMessage;
|
||||
_eventHandler.OnServerReceiveMessage += OnServerReceiveMessage;
|
||||
|
||||
SetupListener();
|
||||
}
|
||||
|
||||
public void Send(EventMessage message)
|
||||
private void Send(T message)
|
||||
{
|
||||
UnityHelper.Instance.RunWhen(() => PlayerTransformSync.LocalInstance != null, () =>
|
||||
{
|
||||
_eventHandler.SendToServer(message);
|
||||
});
|
||||
message.SenderId = PlayerTransformSync.LocalInstance.netId.Value;
|
||||
_eventHandler.SendToServer(message);
|
||||
}
|
||||
|
||||
private void OnServerReceiveMessage(EventMessage message)
|
||||
private void OnServerReceiveMessage(T message)
|
||||
{
|
||||
_eventHandler.SendToAll(message);
|
||||
}
|
||||
|
||||
private void OnClientReceiveMessage(EventMessage message)
|
||||
private void OnClientReceiveMessage(T message)
|
||||
{
|
||||
if (message.SenderId == PlayerRegistry.LocalPlayer?.NetId)
|
||||
{
|
||||
return;
|
||||
}
|
||||
OnReceive(message.SenderId, message.Data);
|
||||
|
||||
OnReceive(message.SenderId, message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
21
QSB/Events/ToggleMessage.cs
Normal file
21
QSB/Events/ToggleMessage.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
public class ToggleMessage : PlayerMessage
|
||||
{
|
||||
public bool On { get; set; }
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
On = reader.ReadBoolean();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(On);
|
||||
}
|
||||
}
|
||||
}
|
@ -119,6 +119,8 @@
|
||||
<Compile Include="Events\PlayerSignalscopeEvent.cs" />
|
||||
<Compile Include="Events\PlayerTranslatorEvent.cs" />
|
||||
<Compile Include="Events\QSBEvent.cs" />
|
||||
<Compile Include="Events\PlayerJoinMessage.cs" />
|
||||
<Compile Include="Events\ToggleMessage.cs" />
|
||||
<Compile Include="Tools\QSBFlashlight.cs" />
|
||||
<Compile Include="Tools\QSBProbe.cs" />
|
||||
<Compile Include="Tools\QSBTool.cs" />
|
||||
@ -129,7 +131,6 @@
|
||||
<Compile Include="Events\FullStateMessage.cs" />
|
||||
<Compile Include="Events\FullStateRequest.cs" />
|
||||
<Compile Include="Events\GameState.cs" />
|
||||
<Compile Include="Events\EventMessage.cs" />
|
||||
<Compile Include="Events\Necronomicon.cs" />
|
||||
<Compile Include="Events\LeaveMessage.cs" />
|
||||
<Compile Include="Events\PlayerLeave.cs" />
|
||||
|
Loading…
x
Reference in New Issue
Block a user