Merge pull request #141 from Raicuparta/alek/merged-messagetype-and-eventtype

one step closer to generic
This commit is contained in:
Mister_Nebula 2020-08-09 10:28:29 +01:00 committed by GitHub
commit 207018b97c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 118 additions and 68 deletions

View File

@ -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);
}
}
}

View File

@ -1,13 +0,0 @@
namespace QSB.Events
{
public enum EventType
{
FlashlightActiveChange,
SignalscopeActiveChange,
TranslatorActiveChange,
ProbeLauncherActiveChange,
PlayerJoin,
PlayerLeave,
PlayerSectorChange
}
}

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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);
}
}
}

View File

@ -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.
}
}

View File

@ -27,6 +27,7 @@ namespace QSB
gameObject.AddComponent<NetworkManagerHUD>();
gameObject.AddComponent<DebugActions>();
gameObject.AddComponent<FullStateRequest>();
gameObject.AddComponent<UnityHelper>();
EventSender.Init();
}

View File

@ -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" />

View File

@ -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>

View File

@ -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();

View 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();
}
}
}