mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-10 12:39:53 +00:00
Refactor
This commit is contained in:
parent
385b03d814
commit
9b98a2fff5
@ -1,6 +1,6 @@
|
||||
namespace QSB.Events
|
||||
{
|
||||
public static class EventSender
|
||||
public static class EventList
|
||||
{
|
||||
public static void Init()
|
||||
{
|
13
QSB/Events/PlayerDeathEvent.cs
Normal file
13
QSB/Events/PlayerDeathEvent.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using QSB.Messaging;
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
class PlayerDeathEvent : QSBEvent<PlayerDeathMessage>
|
||||
{
|
||||
public override MessageType Type => MessageType.PlayerDeath;
|
||||
}
|
||||
}
|
@ -8,13 +8,13 @@ namespace QSB.Events
|
||||
|
||||
public override void SetupListener()
|
||||
{
|
||||
GlobalMessenger.AddListener("TurnOnFlashlight", () => SendEvent(new ToggleMessage { On = true }));
|
||||
GlobalMessenger.AddListener("TurnOffFlashlight", () => SendEvent(new ToggleMessage { On = false }));
|
||||
GlobalMessenger.AddListener("TurnOnFlashlight", () => SendEvent(new ToggleMessage { SenderId = PlayerRegistry.LocalPlayer.NetId, On = true }));
|
||||
GlobalMessenger.AddListener("TurnOffFlashlight", () => SendEvent(new ToggleMessage { SenderId = PlayerRegistry.LocalPlayer.NetId, On = false }));
|
||||
}
|
||||
|
||||
public override void OnReceive(uint sender, ToggleMessage message)
|
||||
public override void OnReceive(ToggleMessage message)
|
||||
{
|
||||
var player = PlayerRegistry.GetPlayer(sender);
|
||||
var player = PlayerRegistry.GetPlayer(message.SenderId);
|
||||
var tool = player.FlashLight;
|
||||
player.UpdateState(State.Flashlight, message.On);
|
||||
if (message.On)
|
||||
|
@ -10,12 +10,12 @@ namespace QSB.Events
|
||||
|
||||
public override void SetupListener()
|
||||
{
|
||||
GlobalMessenger<string>.AddListener("QSBPlayerJoin", name => SendEvent(new PlayerJoinMessage { PlayerName = name }));
|
||||
GlobalMessenger<string>.AddListener("QSBPlayerJoin", name => SendEvent(new PlayerJoinMessage { SenderId = PlayerTransformSync.LocalInstance.netId.Value, PlayerName = name }));
|
||||
}
|
||||
|
||||
public override void OnReceive(uint sender, PlayerJoinMessage message)
|
||||
public override void OnReceive(PlayerJoinMessage message)
|
||||
{
|
||||
var player = PlayerRegistry.CreatePlayer(sender);
|
||||
var player = PlayerRegistry.CreatePlayer(message.SenderId);
|
||||
player.Name = message.PlayerName;
|
||||
player.IsReady = true;
|
||||
DebugLog.ToAll($"{player.Name} joined!");
|
||||
@ -26,7 +26,7 @@ namespace QSB.Events
|
||||
var player = PlayerRegistry.CreatePlayer(PlayerTransformSync.LocalInstance.netId.Value);
|
||||
player.Name = message.PlayerName;
|
||||
player.IsReady = true;
|
||||
DebugLog.ToAll($"{player.Name} joined!");
|
||||
DebugLog.ToAll($"Connected to server as {player.Name}.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,59 +0,0 @@
|
||||
using System.Linq;
|
||||
using QSB.Messaging;
|
||||
using QSB.Utility;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
/// <summary>
|
||||
/// Client-only-side component for managing player leaves.
|
||||
/// </summary>
|
||||
public class PlayerLeave : NetworkBehaviour
|
||||
{
|
||||
private MessageHandler<LeaveMessage> _leaveHandler;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
_leaveHandler = new MessageHandler<LeaveMessage>(MessageType.Leave);
|
||||
_leaveHandler.OnClientReceiveMessage += OnClientReceiveMessage;
|
||||
}
|
||||
|
||||
public void Leave(uint playerId, uint[] objectIds)
|
||||
{
|
||||
var message = new LeaveMessage
|
||||
{
|
||||
SenderId = playerId,
|
||||
ObjectIds = objectIds
|
||||
};
|
||||
_leaveHandler.SendToAll(message);
|
||||
}
|
||||
|
||||
private void OnClientReceiveMessage(LeaveMessage message)
|
||||
{
|
||||
var playerName = PlayerRegistry.GetPlayer(message.SenderId).Name;
|
||||
DebugLog.ToAll(playerName, "disconnected.");
|
||||
PlayerRegistry.RemovePlayer(message.SenderId);
|
||||
foreach (var objectId in message.ObjectIds)
|
||||
{
|
||||
DestroyObject(objectId);
|
||||
}
|
||||
}
|
||||
|
||||
private void DestroyObject(uint objectId)
|
||||
{
|
||||
var component = FindObjectsOfType<NetworkBehaviour>()
|
||||
.FirstOrDefault(x => x.netId.Value == objectId);
|
||||
if (component == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var transformSync = component.GetComponent<TransformSync.TransformSync>();
|
||||
if (transformSync != null)
|
||||
{
|
||||
Destroy(transformSync.SyncedTransform.gameObject);
|
||||
}
|
||||
Destroy(component.gameObject);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
51
QSB/Events/PlayerLeaveEvent.cs
Normal file
51
QSB/Events/PlayerLeaveEvent.cs
Normal file
@ -0,0 +1,51 @@
|
||||
using QSB.Messaging;
|
||||
using QSB.TransformSync;
|
||||
using QSB.Utility;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
class PlayerLeaveEvent : QSBEvent<PlayerLeaveMessage>
|
||||
{
|
||||
public override MessageType Type => MessageType.PlayerLeave;
|
||||
|
||||
public override void SetupListener()
|
||||
{
|
||||
GlobalMessenger<uint, uint[]>.AddListener("QSBPlayerLeave", (id, objects) => SendEvent(new PlayerLeaveMessage { SenderId = id, ObjectIds = objects }));
|
||||
}
|
||||
|
||||
public override void OnReceive(PlayerLeaveMessage message)
|
||||
{
|
||||
var playerName = PlayerRegistry.GetPlayer(message.SenderId).Name;
|
||||
DebugLog.ToAll(playerName, "disconnected.");
|
||||
PlayerRegistry.RemovePlayer(message.SenderId);
|
||||
foreach (var objectId in message.ObjectIds)
|
||||
{
|
||||
DestroyObject(objectId);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnReceiveLocal(PlayerLeaveMessage message)
|
||||
{
|
||||
OnReceive(message);
|
||||
}
|
||||
|
||||
private void DestroyObject(uint objectId)
|
||||
{
|
||||
var component = Object.FindObjectsOfType<NetworkBehaviour>()
|
||||
.FirstOrDefault(x => x.netId.Value == objectId);
|
||||
if (component == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var transformSync = component.GetComponent<TransformSync.TransformSync>();
|
||||
if (transformSync != null)
|
||||
{
|
||||
Object.Destroy(transformSync.SyncedTransform.gameObject);
|
||||
}
|
||||
Object.Destroy(component.gameObject);
|
||||
}
|
||||
}
|
||||
}
|
@ -8,13 +8,13 @@ namespace QSB.Events
|
||||
|
||||
public override void SetupListener()
|
||||
{
|
||||
GlobalMessenger<ProbeLauncher>.AddListener("ProbeLauncherEquipped", var => SendEvent(new ToggleMessage { On = true }));
|
||||
GlobalMessenger<ProbeLauncher>.AddListener("ProbeLauncherUnequipped", var => SendEvent(new ToggleMessage { On = false }));
|
||||
GlobalMessenger<ProbeLauncher>.AddListener("ProbeLauncherEquipped", var => SendEvent(new ToggleMessage { SenderId = PlayerRegistry.LocalPlayer.NetId, On = true }));
|
||||
GlobalMessenger<ProbeLauncher>.AddListener("ProbeLauncherUnequipped", var => SendEvent(new ToggleMessage { SenderId = PlayerRegistry.LocalPlayer.NetId, On = false }));
|
||||
}
|
||||
|
||||
public override void OnReceive(uint sender, ToggleMessage message)
|
||||
public override void OnReceive(ToggleMessage message)
|
||||
{
|
||||
var player = PlayerRegistry.GetPlayer(sender);
|
||||
var player = PlayerRegistry.GetPlayer(message.SenderId);
|
||||
var tool = player.ProbeLauncher;
|
||||
player.UpdateState(State.ProbeLauncher, message.On);
|
||||
if (message.On)
|
||||
|
@ -8,13 +8,13 @@ namespace QSB.Events
|
||||
|
||||
public override void SetupListener()
|
||||
{
|
||||
GlobalMessenger<Signalscope>.AddListener("EquipSignalscope", var => SendEvent(new ToggleMessage { On = true }));
|
||||
GlobalMessenger.AddListener("UnequipSignalscope", () => SendEvent(new ToggleMessage { On = false }));
|
||||
GlobalMessenger<Signalscope>.AddListener("EquipSignalscope", var => SendEvent(new ToggleMessage { SenderId = PlayerRegistry.LocalPlayer.NetId, On = true }));
|
||||
GlobalMessenger.AddListener("UnequipSignalscope", () => SendEvent(new ToggleMessage { SenderId = PlayerRegistry.LocalPlayer.NetId, On = false }));
|
||||
}
|
||||
|
||||
public override void OnReceive(uint sender, ToggleMessage message)
|
||||
public override void OnReceive(ToggleMessage message)
|
||||
{
|
||||
var player = PlayerRegistry.GetPlayer(sender);
|
||||
var player = PlayerRegistry.GetPlayer(message.SenderId);
|
||||
var tool = player.Signalscope;
|
||||
player.UpdateState(State.Signalscope, message.On);
|
||||
if (message.On)
|
||||
|
@ -8,13 +8,13 @@ namespace QSB.Events
|
||||
|
||||
public override void SetupListener()
|
||||
{
|
||||
GlobalMessenger.AddListener("EquipTranslator", () => SendEvent(new ToggleMessage { On = true }));
|
||||
GlobalMessenger.AddListener("UnequipTranslator", () => SendEvent(new ToggleMessage { On = false }));
|
||||
GlobalMessenger.AddListener("EquipTranslator", () => SendEvent(new ToggleMessage { SenderId = PlayerRegistry.LocalPlayer.NetId, On = true }));
|
||||
GlobalMessenger.AddListener("UnequipTranslator", () => SendEvent(new ToggleMessage { SenderId = PlayerRegistry.LocalPlayer.NetId, On = false }));
|
||||
}
|
||||
|
||||
public override void OnReceive(uint sender, ToggleMessage message)
|
||||
public override void OnReceive(ToggleMessage message)
|
||||
{
|
||||
var player = PlayerRegistry.GetPlayer(sender);
|
||||
var player = PlayerRegistry.GetPlayer(message.SenderId);
|
||||
var tool = player.Translator;
|
||||
player.UpdateState(State.Translator, message.On);
|
||||
if (message.On)
|
||||
|
@ -10,7 +10,7 @@ namespace QSB.Events
|
||||
public abstract MessageType Type { get; }
|
||||
|
||||
public abstract void SetupListener();
|
||||
public abstract void OnReceive(uint sender, T message);
|
||||
public abstract void OnReceive(T message);
|
||||
|
||||
public virtual void OnReceiveLocal(T message)
|
||||
{
|
||||
@ -34,7 +34,6 @@ namespace QSB.Events
|
||||
|
||||
private void Send(T message)
|
||||
{
|
||||
message.SenderId = PlayerTransformSync.LocalInstance.netId.Value;
|
||||
_eventHandler.SendToServer(message);
|
||||
}
|
||||
|
||||
@ -47,10 +46,11 @@ namespace QSB.Events
|
||||
{
|
||||
if (message.SenderId == PlayerRegistry.LocalPlayer?.NetId)
|
||||
{
|
||||
OnReceiveLocal(message);
|
||||
return;
|
||||
}
|
||||
|
||||
OnReceive(message.SenderId, message);
|
||||
OnReceive(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ namespace QSB.Messaging
|
||||
|
||||
public MessageHandler(MessageType messageType)
|
||||
{
|
||||
_messageType = messageType;
|
||||
_messageType = messageType + 1 + MsgType.Highest;
|
||||
if (QSBNetworkManager.IsReady)
|
||||
{
|
||||
Init();
|
||||
|
@ -4,21 +4,18 @@ namespace QSB.Messaging
|
||||
{
|
||||
public enum MessageType
|
||||
{
|
||||
Sector = MsgType.Highest + 1,
|
||||
WakeUp = MsgType.Highest + 2,
|
||||
AnimTrigger = MsgType.Highest + 3,
|
||||
Join = MsgType.Highest + 4,
|
||||
Death = MsgType.Highest + 5,
|
||||
Leave = MsgType.Highest + 6,
|
||||
FullState = MsgType.Highest + 7,
|
||||
FullStateRequest = MsgType.Highest + 8,
|
||||
FlashlightActiveChange = MsgType.Highest + 9,
|
||||
SignalscopeActiveChange = MsgType.Highest + 10,
|
||||
TranslatorActiveChange = MsgType.Highest + 11,
|
||||
ProbeLauncherActiveChange = MsgType.Highest + 12,
|
||||
PlayerJoin = MsgType.Highest + 13,
|
||||
PlayerLeave = MsgType.Highest + 14,
|
||||
PlayerSectorChange = MsgType.Highest + 15
|
||||
// Add other message types here, incrementing the value.
|
||||
Sector,
|
||||
WakeUp,
|
||||
AnimTrigger,
|
||||
FullState,
|
||||
FullStateRequest,
|
||||
FlashlightActiveChange,
|
||||
SignalscopeActiveChange,
|
||||
TranslatorActiveChange,
|
||||
ProbeLauncherActiveChange,
|
||||
PlayerJoin,
|
||||
PlayerLeave,
|
||||
PlayerDeath,
|
||||
PlayerSectorChange
|
||||
}
|
||||
}
|
||||
|
21
QSB/Messaging/PlayerDeathMessage.cs
Normal file
21
QSB/Messaging/PlayerDeathMessage.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
public class PlayerDeathMessage : PlayerMessage
|
||||
{
|
||||
public DeathType DeathType { get; set; }
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
DeathType = (DeathType)reader.ReadInt16();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((short)DeathType);
|
||||
}
|
||||
}
|
||||
}
|
@ -4,7 +4,7 @@ using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
public class LeaveMessage : PlayerMessage
|
||||
public class PlayerLeaveMessage : PlayerMessage
|
||||
{
|
||||
public uint[] ObjectIds { get; set; }
|
||||
|
||||
@ -20,4 +20,4 @@ namespace QSB.Events
|
||||
writer.Write(string.Join(",", ObjectIds.Select(x => x.ToString()).ToArray()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -29,7 +29,7 @@ namespace QSB
|
||||
gameObject.AddComponent<FullStateRequest>();
|
||||
gameObject.AddComponent<UnityHelper>();
|
||||
|
||||
EventSender.Init();
|
||||
EventList.Init();
|
||||
}
|
||||
|
||||
public override void Configure(IModConfig config)
|
||||
|
@ -115,28 +115,28 @@
|
||||
<Compile Include="Animation\AnimTrigger.cs" />
|
||||
<Compile Include="Events\PlayerFlashlightEvent.cs" />
|
||||
<Compile Include="Events\PlayerJoinEvent.cs" />
|
||||
<Compile Include="Events\PlayerLeaveEvent.cs" />
|
||||
<Compile Include="Messaging\PlayerLeaveMessage.cs" />
|
||||
<Compile Include="Events\PlayerProbeLauncherEvent.cs" />
|
||||
<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="Messaging\PlayerJoinMessage.cs" />
|
||||
<Compile Include="Messaging\ToggleMessage.cs" />
|
||||
<Compile Include="Tools\QSBFlashlight.cs" />
|
||||
<Compile Include="Tools\QSBProbe.cs" />
|
||||
<Compile Include="Tools\QSBTool.cs" />
|
||||
<Compile Include="Tools\ToolType.cs" />
|
||||
<Compile Include="TransformSync\PlayerProbeSync.cs" />
|
||||
<Compile Include="Utility\DebugActions.cs" />
|
||||
<Compile Include="Events\EventSender.cs" />
|
||||
<Compile Include="Events\EventList.cs" />
|
||||
<Compile Include="Events\FullStateMessage.cs" />
|
||||
<Compile Include="Events\FullStateRequest.cs" />
|
||||
<Compile Include="Events\GameState.cs" />
|
||||
<Compile Include="Events\Necronomicon.cs" />
|
||||
<Compile Include="Events\LeaveMessage.cs" />
|
||||
<Compile Include="Events\PlayerLeave.cs" />
|
||||
<Compile Include="Utility\DebugLog.cs" />
|
||||
<Compile Include="Events\DeathMessage.cs" />
|
||||
<Compile Include="Events\PlayerMessage.cs" />
|
||||
<Compile Include="Messaging\PlayerMessage.cs" />
|
||||
<Compile Include="Events\StateRequestMessage.cs" />
|
||||
<Compile Include="Messaging\MessageHandler.cs" />
|
||||
<Compile Include="Messaging\MessageType.cs" />
|
||||
|
@ -119,7 +119,6 @@ namespace QSB
|
||||
base.OnClientConnect(connection);
|
||||
|
||||
gameObject.AddComponent<SectorSync>();
|
||||
gameObject.AddComponent<PlayerLeave>();
|
||||
gameObject.AddComponent<RespawnOnDeath>();
|
||||
gameObject.AddComponent<PreventShipDestruction>();
|
||||
|
||||
@ -140,7 +139,6 @@ namespace QSB
|
||||
{
|
||||
DebugLog.ToScreen("OnStopClient");
|
||||
Destroy(GetComponent<SectorSync>());
|
||||
Destroy(GetComponent<PlayerLeave>());
|
||||
Destroy(GetComponent<RespawnOnDeath>());
|
||||
Destroy(GetComponent<PreventShipDestruction>());
|
||||
if (IsClientConnected())
|
||||
@ -156,7 +154,7 @@ namespace QSB
|
||||
|
||||
var playerId = connection.playerControllers[0].gameObject.GetComponent<PlayerTransformSync>().netId.Value;
|
||||
var objectIds = connection.clientOwnedObjects.Select(x => x.Value).ToArray();
|
||||
GetComponent<PlayerLeave>().Leave(playerId, objectIds);
|
||||
GlobalMessenger<uint, uint[]>.FireEvent("QSBPlayerLeave", playerId, objectIds);
|
||||
|
||||
base.OnServerDisconnect(connection);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user