mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-03-12 22:14:37 +00:00
Merge pull request #141 from Raicuparta/alek/merged-messagetype-and-eventtype
one step closer to generic
This commit is contained in:
commit
207018b97c
@ -1,9 +1,4 @@
|
||||
using QSB.Utility;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
@ -21,23 +16,6 @@ namespace QSB.Events
|
||||
//EventList.Add(new PlayerSectorChange());
|
||||
EventList.Add(new PlayerJoinEvent());
|
||||
//EventList.Add(new PlayerLeaveEvent());
|
||||
|
||||
foreach (var item in EventList)
|
||||
{
|
||||
DebugLog.ToConsole($"Adding listener(s) for {item.Type}");
|
||||
item.SetupListener();
|
||||
}
|
||||
}
|
||||
|
||||
public static void SendEvent(QSBEvent _event, uint sender, params object[] data)
|
||||
{
|
||||
var message = new EventMessage
|
||||
{
|
||||
SenderId = sender,
|
||||
EventType = (int)_event.Type,
|
||||
Data = data
|
||||
};
|
||||
EventHandler.LocalInstance.Send(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +0,0 @@
|
||||
namespace QSB.Events
|
||||
{
|
||||
public enum EventType
|
||||
{
|
||||
FlashlightActiveChange,
|
||||
SignalscopeActiveChange,
|
||||
TranslatorActiveChange,
|
||||
ProbeLauncherActiveChange,
|
||||
PlayerJoin,
|
||||
PlayerLeave,
|
||||
PlayerSectorChange
|
||||
}
|
||||
}
|
@ -1,13 +1,15 @@
|
||||
namespace QSB.Events
|
||||
using QSB.Messaging;
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
class PlayerFlashlightEvent : QSBEvent
|
||||
{
|
||||
public override EventType Type => EventType.FlashlightActiveChange;
|
||||
public override MessageType Type => MessageType.FlashlightActiveChange;
|
||||
|
||||
public override void SetupListener()
|
||||
{
|
||||
GlobalMessenger.AddListener("TurnOnFlashlight", () => EventSender.SendEvent(this, PlayerRegistry.LocalPlayer.NetId, true));
|
||||
GlobalMessenger.AddListener("TurnOffFlashlight", () => EventSender.SendEvent(this, PlayerRegistry.LocalPlayer.NetId, false));
|
||||
GlobalMessenger.AddListener("TurnOnFlashlight", () => SendEvent(PlayerRegistry.LocalPlayer.NetId, true));
|
||||
GlobalMessenger.AddListener("TurnOffFlashlight", () => SendEvent(PlayerRegistry.LocalPlayer.NetId, false));
|
||||
}
|
||||
|
||||
public override void OnReceive(uint sender, object[] data)
|
||||
|
@ -1,15 +1,16 @@
|
||||
using QSB.TransformSync;
|
||||
using QSB.Messaging;
|
||||
using QSB.TransformSync;
|
||||
using QSB.Utility;
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
class PlayerJoinEvent : QSBEvent
|
||||
{
|
||||
public override EventType Type => EventType.PlayerJoin;
|
||||
public override MessageType Type => MessageType.PlayerJoin;
|
||||
|
||||
public override void SetupListener()
|
||||
{
|
||||
GlobalMessenger<string>.AddListener("QSBPlayerJoin", var => EventSender.SendEvent(this, PlayerTransformSync.LocalInstance.netId.Value, var));
|
||||
GlobalMessenger<string>.AddListener("QSBPlayerJoin", var => SendEvent(PlayerTransformSync.LocalInstance.netId.Value, var));
|
||||
}
|
||||
|
||||
public override void OnReceive(uint sender, object[] data)
|
||||
|
@ -1,18 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using QSB.Messaging;
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
class PlayerProbeLauncherEvent : QSBEvent
|
||||
{
|
||||
public override EventType Type => EventType.ProbeLauncherActiveChange;
|
||||
public override MessageType Type => MessageType.ProbeLauncherActiveChange;
|
||||
|
||||
public override void SetupListener()
|
||||
{
|
||||
GlobalMessenger<ProbeLauncher>.AddListener("ProbeLauncherEquipped", var => EventSender.SendEvent(this, PlayerRegistry.LocalPlayer.NetId, true));
|
||||
GlobalMessenger<ProbeLauncher>.AddListener("ProbeLauncherUnequipped", var => EventSender.SendEvent(this, PlayerRegistry.LocalPlayer.NetId, false));
|
||||
GlobalMessenger<ProbeLauncher>.AddListener("ProbeLauncherEquipped", var => SendEvent(PlayerRegistry.LocalPlayer.NetId, true));
|
||||
GlobalMessenger<ProbeLauncher>.AddListener("ProbeLauncherUnequipped", var => SendEvent(PlayerRegistry.LocalPlayer.NetId, false));
|
||||
}
|
||||
|
||||
public override void OnReceive(uint sender, object[] data)
|
||||
|
@ -1,13 +1,15 @@
|
||||
namespace QSB.Events
|
||||
using QSB.Messaging;
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
class PlayerSignalscopeEvent : QSBEvent
|
||||
{
|
||||
public override EventType Type => EventType.SignalscopeActiveChange;
|
||||
public override MessageType Type => MessageType.SignalscopeActiveChange;
|
||||
|
||||
public override void SetupListener()
|
||||
{
|
||||
GlobalMessenger<Signalscope>.AddListener("EquipSignalscope", var => EventSender.SendEvent(this, PlayerRegistry.LocalPlayer.NetId, true));
|
||||
GlobalMessenger.AddListener("UnequipSignalscope", () => EventSender.SendEvent(this, PlayerRegistry.LocalPlayer.NetId, false));
|
||||
GlobalMessenger<Signalscope>.AddListener("EquipSignalscope", var => SendEvent(PlayerRegistry.LocalPlayer.NetId, true));
|
||||
GlobalMessenger.AddListener("UnequipSignalscope", () => SendEvent(PlayerRegistry.LocalPlayer.NetId, false));
|
||||
}
|
||||
|
||||
public override void OnReceive(uint sender, object[] data)
|
||||
|
@ -1,13 +1,15 @@
|
||||
namespace QSB.Events
|
||||
using QSB.Messaging;
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
class PlayerTrasnlatorEvent : QSBEvent
|
||||
{
|
||||
public override EventType Type => EventType.TranslatorActiveChange;
|
||||
public override MessageType Type => MessageType.TranslatorActiveChange;
|
||||
|
||||
public override void SetupListener()
|
||||
{
|
||||
GlobalMessenger.AddListener("EquipTranslator", () => EventSender.SendEvent(this, PlayerRegistry.LocalPlayer.NetId, true));
|
||||
GlobalMessenger.AddListener("UnequipTranslator", () => EventSender.SendEvent(this, PlayerRegistry.LocalPlayer.NetId, false));
|
||||
GlobalMessenger.AddListener("EquipTranslator", () => SendEvent(PlayerRegistry.LocalPlayer.NetId, true));
|
||||
GlobalMessenger.AddListener("UnequipTranslator", () => SendEvent(PlayerRegistry.LocalPlayer.NetId, false));
|
||||
}
|
||||
|
||||
public override void OnReceive(uint sender, object[] data)
|
||||
|
@ -1,13 +1,59 @@
|
||||
using QSB.Messaging;
|
||||
using QSB.TransformSync;
|
||||
using QSB.Utility;
|
||||
|
||||
namespace QSB.Events
|
||||
{
|
||||
public abstract class QSBEvent
|
||||
{
|
||||
public abstract EventType Type { get; }
|
||||
public abstract MessageType Type { get; }
|
||||
|
||||
public abstract void SetupListener();
|
||||
public abstract void OnReceive(uint sender, object[] data);
|
||||
public virtual void OnReceiveLocal(object[] data) { }
|
||||
|
||||
public void SendEvent(uint sender, params object[] data)
|
||||
{
|
||||
var message = new EventMessage
|
||||
{
|
||||
SenderId = sender,
|
||||
EventType = (int)Type,
|
||||
Data = data
|
||||
};
|
||||
Send(message);
|
||||
}
|
||||
|
||||
private readonly MessageHandler<EventMessage> _eventHandler;
|
||||
|
||||
protected QSBEvent()
|
||||
{
|
||||
_eventHandler = new MessageHandler<EventMessage>(Type);
|
||||
_eventHandler.OnClientReceiveMessage += OnClientReceiveMessage;
|
||||
_eventHandler.OnServerReceiveMessage += OnServerReceiveMessage;
|
||||
|
||||
SetupListener();
|
||||
}
|
||||
|
||||
public void Send(EventMessage message)
|
||||
{
|
||||
UnityHelper.Instance.RunWhen(() => PlayerTransformSync.LocalInstance != null, () =>
|
||||
{
|
||||
_eventHandler.SendToServer(message);
|
||||
});
|
||||
}
|
||||
|
||||
private void OnServerReceiveMessage(EventMessage message)
|
||||
{
|
||||
_eventHandler.SendToAll(message);
|
||||
}
|
||||
|
||||
private void OnClientReceiveMessage(EventMessage message)
|
||||
{
|
||||
if (message.SenderId == PlayerRegistry.LocalPlayer?.NetId)
|
||||
{
|
||||
return;
|
||||
}
|
||||
OnReceive(message.SenderId, message.Data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -12,7 +12,13 @@ namespace QSB.Messaging
|
||||
Leave = MsgType.Highest + 6,
|
||||
FullState = MsgType.Highest + 7,
|
||||
FullStateRequest = MsgType.Highest + 8,
|
||||
Event = MsgType.Highest + 9
|
||||
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.
|
||||
}
|
||||
}
|
||||
|
@ -27,6 +27,7 @@ namespace QSB
|
||||
gameObject.AddComponent<NetworkManagerHUD>();
|
||||
gameObject.AddComponent<DebugActions>();
|
||||
gameObject.AddComponent<FullStateRequest>();
|
||||
gameObject.AddComponent<UnityHelper>();
|
||||
|
||||
EventSender.Init();
|
||||
}
|
||||
|
@ -126,11 +126,9 @@
|
||||
<Compile Include="TransformSync\PlayerProbeSync.cs" />
|
||||
<Compile Include="Utility\DebugActions.cs" />
|
||||
<Compile Include="Events\EventSender.cs" />
|
||||
<Compile Include="Events\EventType.cs" />
|
||||
<Compile Include="Events\FullStateMessage.cs" />
|
||||
<Compile Include="Events\FullStateRequest.cs" />
|
||||
<Compile Include="Events\GameState.cs" />
|
||||
<Compile Include="Events\EventHandler.cs" />
|
||||
<Compile Include="Events\EventMessage.cs" />
|
||||
<Compile Include="Events\Necronomicon.cs" />
|
||||
<Compile Include="Events\LeaveMessage.cs" />
|
||||
@ -164,6 +162,7 @@
|
||||
<Compile Include="QSB.cs" />
|
||||
<Compile Include="TransformSync\PlayerTransformSync.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Utility\UnityHelper.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="default-config.json" />
|
||||
|
@ -1,7 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<GameDir>D:/EpicGames/OuterWilds</GameDir>
|
||||
<OwmlDir>C:\Users\Henry\Downloads\OWModManager\OWML</OwmlDir>
|
||||
<GameDir>C:\Program Files\Epic Games\OuterWilds</GameDir>
|
||||
<OwmlDir>C:\Users\Alek\Documents\Source\OWML\Release</OwmlDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
|
||||
<StartWorkingDirectory>C:\Program Files\Epic Games\OuterWilds\OuterWilds_Data\Managed\</StartWorkingDirectory>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
@ -110,7 +110,7 @@ namespace QSB
|
||||
NetworkServer.SpawnWithClientAuthority(Instantiate(_cameraPrefab), connection);
|
||||
NetworkServer.SpawnWithClientAuthority(Instantiate(_probePrefab), connection);
|
||||
|
||||
var gameState = gameObject.AddComponent<Events.GameState>();
|
||||
var gameState = gameObject.AddComponent<GameState>();
|
||||
gameState.Send();
|
||||
}
|
||||
|
||||
@ -122,11 +122,10 @@ namespace QSB
|
||||
gameObject.AddComponent<PlayerLeave>();
|
||||
gameObject.AddComponent<RespawnOnDeath>();
|
||||
gameObject.AddComponent<PreventShipDestruction>();
|
||||
gameObject.AddComponent<Events.EventHandler>();
|
||||
|
||||
if (!Network.isServer)
|
||||
{
|
||||
gameObject.AddComponent<Events.GameState>();
|
||||
gameObject.AddComponent<GameState>();
|
||||
}
|
||||
|
||||
_canEditName = false;
|
||||
@ -144,7 +143,6 @@ namespace QSB
|
||||
Destroy(GetComponent<PlayerLeave>());
|
||||
Destroy(GetComponent<RespawnOnDeath>());
|
||||
Destroy(GetComponent<PreventShipDestruction>());
|
||||
Destroy(GetComponent<Events.EventHandler>());
|
||||
if (IsClientConnected())
|
||||
{
|
||||
PlayerTransformSync.LocalInstance.gameObject.GetComponent<AnimationSync>().Reset();
|
||||
|
28
QSB/Utility/UnityHelper.cs
Normal file
28
QSB/Utility/UnityHelper.cs
Normal file
@ -0,0 +1,28 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.Utility
|
||||
{
|
||||
public class UnityHelper : MonoBehaviour
|
||||
{
|
||||
public static UnityHelper Instance { get; private set; }
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
Instance = this;
|
||||
}
|
||||
|
||||
public void RunWhen(Func<bool> when, Action what)
|
||||
{
|
||||
StartCoroutine(WaitUntil(when, what));
|
||||
}
|
||||
|
||||
private IEnumerator WaitUntil(Func<bool> when, Action what)
|
||||
{
|
||||
yield return new WaitUntil(when);
|
||||
what();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user