Merge pull request #372 from misternebula/zero-g-sync

Zero g sync + remove eventtype
This commit is contained in:
_nebula 2021-11-30 16:28:13 +00:00 committed by GitHub
commit 20817a8aec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
89 changed files with 237 additions and 328 deletions

View File

@ -3,14 +3,11 @@ using QSB.Events;
using QSB.Player;
using QSB.WorldSync;
using UnityEngine;
using EventType = QSB.Events.EventType;
namespace QSB.Anglerfish.Events
{
public class AnglerChangeStateEvent : QSBEvent<AnglerChangeStateMessage>
{
public override EventType Type => EventType.AnglerChangeState;
public override void SetupListener()
=> GlobalMessenger<QSBAngler>.AddListener(EventNames.QSBAnglerChangeState, Handler);

View File

@ -6,8 +6,6 @@ namespace QSB.Animation.NPC.Events
{
internal class NpcAnimationEvent : QSBEvent<NpcAnimationMessage>
{
public override EventType Type => EventType.NpcAnimEvent;
public override void SetupListener() => GlobalMessenger<AnimationEvent, int>.AddListener(EventNames.QSBNpcAnimEvent, Handler);
public override void CloseListener() => GlobalMessenger<AnimationEvent, int>.RemoveListener(EventNames.QSBNpcAnimEvent, Handler);

View File

@ -5,8 +5,6 @@ namespace QSB.Animation.Player.Events
{
internal class AnimationTriggerEvent : QSBEvent<AnimationTriggerMessage>
{
public override EventType Type => EventType.AnimTrigger;
public override void SetupListener() => GlobalMessenger<uint, string>.AddListener(EventNames.QSBAnimTrigger, Handler);
public override void CloseListener() => GlobalMessenger<uint, string>.RemoveListener(EventNames.QSBAnimTrigger, Handler);

View File

@ -7,8 +7,6 @@ namespace QSB.Animation.Player.Events
{
public class ChangeAnimTypeEvent : QSBEvent<EnumMessage<AnimationType>>
{
public override EventType Type => EventType.PlayInstrument;
public override void SetupListener() => GlobalMessenger<uint, AnimationType>.AddListener(EventNames.QSBChangeAnimType, Handler);
public override void CloseListener() => GlobalMessenger<uint, AnimationType>.RemoveListener(EventNames.QSBChangeAnimType, Handler);

View File

@ -6,8 +6,6 @@ namespace QSB.Animation.Player.Events
{
public class PlayerSuitEvent : QSBEvent<ToggleMessage>
{
public override EventType Type => EventType.SuitActiveChange;
public override void SetupListener()
{
GlobalMessenger.AddListener(EventNames.SuitUp, HandleSuitUp);

View File

@ -7,8 +7,6 @@ namespace QSB.CampfireSync.Events
{
internal class CampfireStateEvent : QSBEvent<EnumWorldObjectMessage<Campfire.State>>
{
public override EventType Type => EventType.CampfireState;
public override void SetupListener() => GlobalMessenger<int, Campfire.State>.AddListener(EventNames.QSBCampfireState, Handler);
public override void CloseListener() => GlobalMessenger<int, Campfire.State>.RemoveListener(EventNames.QSBCampfireState, Handler);

View File

@ -7,8 +7,6 @@ namespace QSB.ClientServerStateSync.Events
{
internal class ClientStateEvent : QSBEvent<EnumMessage<ClientState>>
{
public override EventType Type => EventType.ClientState;
public override void SetupListener()
=> GlobalMessenger<ClientState>.AddListener(EventNames.QSBClientState, Handler);

View File

@ -5,8 +5,6 @@ namespace QSB.ClientServerStateSync.Events
{
internal class ServerStateEvent : QSBEvent<EnumMessage<ServerState>>
{
public override EventType Type => EventType.ServerState;
public override void SetupListener()
=> GlobalMessenger<ServerState>.AddListener(EventNames.QSBServerState, Handler);

View File

@ -7,8 +7,6 @@ namespace QSB.ConversationSync.Events
{
public class ConversationEvent : QSBEvent<ConversationMessage>
{
public override EventType Type => EventType.Conversation;
public override void SetupListener() => GlobalMessenger<uint, string, ConversationType>.AddListener(EventNames.QSBConversation, Handler);
public override void CloseListener() => GlobalMessenger<uint, string, ConversationType>.RemoveListener(EventNames.QSBConversation, Handler);

View File

@ -8,8 +8,6 @@ namespace QSB.ConversationSync.Events
{
public class ConversationStartEndEvent : QSBEvent<ConversationStartEndMessage>
{
public override QSB.Events.EventType Type => QSB.Events.EventType.ConversationStartEnd;
public override void SetupListener() => GlobalMessenger<int, uint, bool>.AddListener(EventNames.QSBConversationStartEnd, Handler);
public override void CloseListener() => GlobalMessenger<int, uint, bool>.RemoveListener(EventNames.QSBConversationStartEnd, Handler);

View File

@ -5,8 +5,6 @@ namespace QSB.ConversationSync.Events
{
public class DialogueConditionEvent : QSBEvent<DialogueConditionMessage>
{
public override EventType Type => EventType.DialogueCondition;
public override void SetupListener() => GlobalMessenger<string, bool>.AddListener(EventNames.DialogueCondition, Handler);
public override void CloseListener() => GlobalMessenger<string, bool>.RemoveListener(EventNames.DialogueCondition, Handler);

View File

@ -8,8 +8,6 @@ namespace QSB.DeathSync.Events
{
internal class EndLoopEvent : QSBEvent<EnumMessage<EndLoopReason>>
{
public override EventType Type => EventType.EndLoop;
public override void SetupListener() => GlobalMessenger<EndLoopReason>.AddListener(EventNames.QSBEndLoop, Handler);
public override void CloseListener() => GlobalMessenger<EndLoopReason>.RemoveListener(EventNames.QSBEndLoop, Handler);

View File

@ -8,8 +8,6 @@ namespace QSB.DeathSync.Events
{
public class PlayerDeathEvent : QSBEvent<PlayerDeathMessage>
{
public override EventType Type => EventType.PlayerDeath;
public override void SetupListener() => GlobalMessenger<DeathType>.AddListener(EventNames.QSBPlayerDeath, Handler);
public override void CloseListener() => GlobalMessenger<DeathType>.RemoveListener(EventNames.QSBPlayerDeath, Handler);

View File

@ -7,8 +7,6 @@ namespace QSB.DeathSync.Events
{
internal class StartLoopEvent : QSBEvent<PlayerMessage>
{
public override EventType Type => EventType.StartLoop;
public override void SetupListener() => GlobalMessenger.AddListener(EventNames.QSBStartLoop, Handler);
public override void CloseListener() => GlobalMessenger.RemoveListener(EventNames.QSBStartLoop, Handler);

View File

@ -7,8 +7,6 @@ namespace QSB.ElevatorSync.Events
{
public class ElevatorEvent : QSBEvent<BoolWorldObjectMessage>
{
public override EventType Type => EventType.Elevator;
public override void SetupListener() => GlobalMessenger<int, bool>.AddListener(EventNames.QSBStartLift, Handler);
public override void CloseListener() => GlobalMessenger<int, bool>.RemoveListener(EventNames.QSBStartLift, Handler);

View File

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace QSB.Events
{
public abstract class BaseQSBEvent : IQSBEvent
{
protected static int _msgType = 0;
public abstract void SetupListener();
public abstract void CloseListener();
}
}

View File

@ -99,5 +99,7 @@
public static string QSBFragmentDamage = "QSBFragmentDamage";
public static string QSBFragmentResync = "QSBFragmentResync";
public static string QSBLearnLaunchCodes = "QSBLearnLaunchCodes";
public static string QSBSatelliteRepairTick = "QSBSatelliteRepairTick";
public static string QSBSatelliteRepaired = "QSBSatelliteRepairTick";
}
}

View File

@ -1,148 +0,0 @@
namespace QSB.Events
{
public enum EventType
{
/*
* MISC.
*/
DebugEvent,
SatelliteProjector,
SatelliteProjectorSnapshot,
LaunchCodes,
VariableSync,
/*
* SERVER EVENTS
*/
ServerTime,
StartStatue,
EndLoop,
StartLoop,
ServerState,
ClientState,
/*
* PLAYER EVENTS
*/
PlayerInformation,
RequestStateResync,
PlayerJoin,
PlayerDeath,
PlayerReady,
PlayerKick,
PlayerRespawn,
EnterLeave,
/*
* DIALOGUE
*/
Conversation,
ConversationStartEnd,
DialogueCondition,
RevealFact,
/*
* ANIMATION
*/
PlayInstrument,
AnimTrigger,
NpcAnimEvent,
SuitActiveChange,
/*
* ORBS
*/
OrbSlot,
OrbUser,
/*
* CAMPFIRES
*/
CampfireState,
Roasting,
MarshmallowEvent,
/*
* WORLD OBJECTS
*/
Geyser,
Elevator,
/*
* ITEMS
*/
DropItem,
SocketItem,
MoveToCarry,
/*
* QUANTUM OBJECTS
*/
SocketStateChange,
MultiStateChange,
QuantumShuffle,
QuantumAuthority,
MoonStateChange,
PlayerEntangle,
/*
* SHIP
*/
ComponentDamaged,
ComponentRepaired,
ComponentRepairTick,
HullImpact,
HullDamaged,
HullChangeIntegrity,
HullRepaired,
HullRepairTick,
FlyShip,
OpenHatch,
EnableFunnel,
/*
* TOOLS
*/
// Flashlight
FlashlightActiveChange,
// Translator
TranslatorActiveChange,
TextTranslated,
// Signalscope
SignalscopeActiveChange,
IdentifyFrequency,
IdentifySignal,
// Probe
ProbeStartRetrieve,
ProbeEvent,
// Probe Launcher
ProbeLauncherActiveChange,
RetrieveProbe,
PlayerRetrieveProbe,
LaunchProbe,
PlayerLaunchProbe,
AnglerChangeState,
MeteorPreLaunch,
MeteorLaunch,
MeteorSpecialImpact,
FragmentDamage,
FragmentResync
}
}

View File

@ -2,8 +2,6 @@
{
public interface IQSBEvent
{
EventType Type { get; }
void SetupListener();
void CloseListener();
}

View File

@ -7,12 +7,12 @@ using QSB.Player.TransformSync;
using QSB.Utility;
using QuantumUNET.Components;
using System;
using UnityEngine;
namespace QSB.Events
{
public abstract class QSBEvent<T> : IQSBEvent where T : PlayerMessage, new()
public abstract class QSBEvent<T> : BaseQSBEvent where T : PlayerMessage, new()
{
public abstract EventType Type { get; }
public uint LocalPlayerId => QSBPlayerManager.LocalPlayerId;
private readonly MessageHandler<T> _eventHandler;
@ -24,13 +24,15 @@ namespace QSB.Events
return;
}
_eventHandler = new MessageHandler<T>(Type);
_eventHandler = new MessageHandler<T>(_msgType++);
_eventHandler.OnClientReceiveMessage += message => OnReceive(false, message);
_eventHandler.OnServerReceiveMessage += message => OnReceive(true, message);
}
public abstract void SetupListener();
public abstract void CloseListener();
~QSBEvent()
{
_msgType--;
}
public virtual void OnReceiveRemote(bool isHost, T message) { }
public virtual void OnReceiveLocal(bool isHost, T message) { }

View File

@ -31,6 +31,7 @@ using QSB.Tools.TranslatorTool.Events;
using QSB.Tools.TranslatorTool.TranslationSync.Events;
using QSB.Utility;
using QSB.Utility.Events;
using QSB.ZeroGCaveSync.Events;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@ -122,7 +123,9 @@ namespace QSB.Events
new HullRepairTickEvent(),
new ComponentDamagedEvent(),
new ComponentRepairedEvent(),
new ComponentRepairTickEvent()
new ComponentRepairTickEvent(),
new SatelliteNodeRepairTick(),
new SatelliteNodeRepaired()
};
if (UnitTestDetector.IsInUnitTest)
@ -132,26 +135,6 @@ namespace QSB.Events
_eventList.ForEach(ev => ev.SetupListener());
var duplicates = _eventList
.GroupBy(qsbEvent => qsbEvent.Type)
.Where(group => group.Count() > 1);
if (duplicates.Count() != 0)
{
var totalSb = new StringBuilder();
foreach (var group in duplicates)
{
totalSb.Append($"{group.Key}\r\n");
foreach (var qsbEvent in group)
{
totalSb.Append($"- {qsbEvent.GetType().Name}\r\n");
}
}
DebugLog.ToConsole($"Error - These QSBEvents handle the same EventType!\r\n{totalSb}", MessageType.Error);
return;
}
Ready = true;
DebugLog.DebugWrite("Event Manager ready.", MessageType.Success);

View File

@ -7,8 +7,6 @@ namespace QSB.GeyserSync.Events
{
public class GeyserEvent : QSBEvent<BoolWorldObjectMessage>
{
public override EventType Type => EventType.Geyser;
public override void SetupListener() => GlobalMessenger<int, bool>.AddListener(EventNames.QSBGeyserState, Handler);
public override void CloseListener() => GlobalMessenger<int, bool>.RemoveListener(EventNames.QSBGeyserState, Handler);

View File

@ -9,8 +9,6 @@ namespace QSB.ItemSync.Events
{
internal class DropItemEvent : QSBEvent<DropItemMessage>
{
public override QSB.Events.EventType Type => QSB.Events.EventType.DropItem;
public override void SetupListener()
=> GlobalMessenger<int, Vector3, Vector3, Sector>.AddListener(EventNames.QSBDropItem, Handler);

View File

@ -8,8 +8,6 @@ namespace QSB.ItemSync.Events
{
internal class MoveToCarryEvent : QSBEvent<WorldObjectMessage>
{
public override QSB.Events.EventType Type => QSB.Events.EventType.MoveToCarry;
public override void SetupListener()
=> GlobalMessenger<int>.AddListener(EventNames.QSBMoveToCarry, Handler);

View File

@ -9,8 +9,6 @@ namespace QSB.ItemSync.Events
{
internal class SocketItemEvent : QSBEvent<SocketItemMessage>
{
public override EventType Type => EventType.SocketItem;
public override void SetupListener()
=> GlobalMessenger<int, int, SocketEventType>.AddListener(EventNames.QSBSocketItem, Handler);

View File

@ -5,8 +5,6 @@ namespace QSB.LogSync.Events
{
public class RevealFactEvent : QSBEvent<RevealFactMessage>
{
public override EventType Type => EventType.RevealFact;
public override void SetupListener() => GlobalMessenger<string, bool, bool>.AddListener(EventNames.QSBRevealFact, Handler);
public override void CloseListener() => GlobalMessenger<string, bool, bool>.RemoveListener(EventNames.QSBRevealFact, Handler);

View File

@ -15,9 +15,17 @@ namespace QSB.Messaging
private readonly short _eventType;
public MessageHandler(EventType eventType)
public MessageHandler(int msgType)
{
_eventType = (short)(eventType + QMsgType.Highest + 1);
_eventType = (short)(msgType + QMsgType.Highest + 1);
if (_eventType >= short.MaxValue)
{
DebugLog.ToConsole($"Hey, uh, maybe don't create 32,767 events? You really should never be seeing this." +
$"If you are, something has either gone terrible wrong or QSB somehow needs more events that classes in Outer Wilds." +
$"In either case, I guess something has gone terribly wrong...", OWML.Common.MessageType.Error);
}
if (QSBNetworkManager.Instance.IsReady)
{
Init();

View File

@ -6,8 +6,6 @@ namespace QSB.MeteorSync.Events
{
public class FragmentDamageEvent : QSBEvent<FragmentDamageMessage>
{
public override EventType Type => EventType.FragmentDamage;
public override void SetupListener()
=> GlobalMessenger<QSBFragment, float>.AddListener(EventNames.QSBFragmentDamage, Handler);

View File

@ -11,8 +11,6 @@ namespace QSB.MeteorSync.Events
/// pain
public class FragmentResyncEvent : QSBEvent<FragmentResyncMessage>
{
public override EventType Type => EventType.FragmentResync;
public override void SetupListener()
=> GlobalMessenger<QSBFragment>.AddListener(EventNames.QSBFragmentResync, Handler);

View File

@ -6,8 +6,6 @@ namespace QSB.MeteorSync.Events
{
public class MeteorLaunchEvent : QSBEvent<MeteorLaunchMessage>
{
public override EventType Type => EventType.MeteorLaunch;
public override void SetupListener()
=> GlobalMessenger<QSBMeteorLauncher>.AddListener(EventNames.QSBMeteorLaunch, Handler);

View File

@ -7,8 +7,6 @@ namespace QSB.MeteorSync.Events
{
public class MeteorPreLaunchEvent : QSBEvent<WorldObjectMessage>
{
public override EventType Type => EventType.MeteorPreLaunch;
public override void SetupListener()
=> GlobalMessenger<QSBMeteorLauncher>.AddListener(EventNames.QSBMeteorPreLaunch, Handler);

View File

@ -7,8 +7,6 @@ namespace QSB.MeteorSync.Events
{
public class MeteorSpecialImpactEvent : QSBEvent<WorldObjectMessage>
{
public override EventType Type => EventType.MeteorSpecialImpact;
public override void SetupListener()
=> GlobalMessenger<QSBMeteor>.AddListener(EventNames.QSBMeteorSpecialImpact, Handler);

View File

@ -6,8 +6,6 @@ namespace QSB.OrbSync.Events
{
public class OrbSlotEvent : QSBEvent<OrbSlotMessage>
{
public override EventType Type => EventType.OrbSlot;
public override void SetupListener() => GlobalMessenger<int, int, bool>.AddListener(EventNames.QSBOrbSlot, Handler);
public override void CloseListener() => GlobalMessenger<int, int, bool>.RemoveListener(EventNames.QSBOrbSlot, Handler);

View File

@ -12,8 +12,6 @@ namespace QSB.OrbSync.Events
{
public class OrbUserEvent : QSBEvent<WorldObjectMessage>
{
public override EventType Type => EventType.OrbUser;
public override void SetupListener() => GlobalMessenger<int>.AddListener(EventNames.QSBOrbUser, Handler);
public override void CloseListener() => GlobalMessenger<int>.RemoveListener(EventNames.QSBOrbUser, Handler);

View File

@ -26,6 +26,7 @@ using QSB.Tools.ProbeLauncherTool.Patches;
using QSB.Tools.SignalscopeTool.FrequencySync.Patches;
using QSB.Tools.TranslatorTool.TranslationSync.Patches;
using QSB.Utility;
using QSB.ZeroGCaveSync.Patches;
using System;
using System.Collections.Generic;
using System.Linq;
@ -77,7 +78,8 @@ namespace QSB.Patches
new AnglerPatches(),
new MeteorClientPatches(),
new MeteorServerPatches(),
new TravelerControllerPatches()
new TravelerControllerPatches(),
new ZeroGCavePatches()
};
TypeToInstance = new Dictionary<QSBPatchTypes, Harmony>

View File

@ -10,8 +10,6 @@ namespace QSB.Player.Events
{
internal class EnterLeaveEvent : QSBEvent<EnumWorldObjectMessage<EnterLeaveType>>
{
public override EventType Type => EventType.EnterLeave;
public override void SetupListener()
{
GlobalMessenger.AddListener(EventNames.EnterQuantumMoon, () => Handler(EnterLeaveType.EnterMoon));

View File

@ -5,8 +5,6 @@ namespace QSB.Player.Events
{
internal class LaunchCodesEvent : QSBEvent<PlayerMessage>
{
public override EventType Type => EventType.LaunchCodes;
public override void SetupListener() => GlobalMessenger.AddListener(EventNames.QSBLearnLaunchCodes, Handler);
public override void CloseListener() => GlobalMessenger.RemoveListener(EventNames.QSBLearnLaunchCodes, Handler);

View File

@ -7,8 +7,6 @@ namespace QSB.Player.Events
{
internal class PlayerEntangledEvent : QSBEvent<WorldObjectMessage>
{
public override EventType Type => EventType.PlayerEntangle;
public override void SetupListener() => GlobalMessenger<int>.AddListener(EventNames.QSBPlayerEntangle, Handler);
public override void CloseListener() => GlobalMessenger<int>.RemoveListener(EventNames.QSBPlayerEntangle, Handler);

View File

@ -6,8 +6,6 @@ namespace QSB.Player.Events
{
public class PlayerInformationEvent : QSBEvent<PlayerInformationMessage>
{
public override EventType Type => EventType.PlayerInformation;
public override void SetupListener() => GlobalMessenger.AddListener(EventNames.QSBPlayerInformation, Handler);
public override void CloseListener() => GlobalMessenger.RemoveListener(EventNames.QSBPlayerInformation, Handler);

View File

@ -6,8 +6,6 @@ namespace QSB.Player.Events
{
public class PlayerJoinEvent : QSBEvent<PlayerJoinMessage>
{
public override EventType Type => EventType.PlayerJoin;
public override void SetupListener() => GlobalMessenger<string>.AddListener(EventNames.QSBPlayerJoin, Handler);
public override void CloseListener() => GlobalMessenger<string>.RemoveListener(EventNames.QSBPlayerJoin, Handler);

View File

@ -9,8 +9,6 @@ namespace QSB.Player.Events
{
internal class PlayerKickEvent : QSBEvent<EnumMessage<KickReason>>
{
public override EventType Type => EventType.PlayerKick;
public override void SetupListener() => GlobalMessenger<uint, KickReason>.AddListener(EventNames.QSBPlayerKick, Handler);
public override void CloseListener() => GlobalMessenger<uint, KickReason>.RemoveListener(EventNames.QSBPlayerKick, Handler);

View File

@ -7,8 +7,6 @@ namespace QSB.Player.Events
{
public class PlayerReadyEvent : QSBEvent<ToggleMessage>
{
public override EventType Type => EventType.PlayerReady;
public override void SetupListener() => GlobalMessenger<bool>.AddListener(EventNames.QSBPlayerReady, Handler);
public override void CloseListener() => GlobalMessenger<bool>.RemoveListener(EventNames.QSBPlayerReady, Handler);

View File

@ -16,8 +16,6 @@ namespace QSB.Player.Events
// Can be sent by any client (including host) to signal they want latest worldobject, player, and server infomation
public class RequestStateResyncEvent : QSBEvent<PlayerMessage>
{
public override EventType Type => EventType.RequestStateResync;
public override void SetupListener() => GlobalMessenger.AddListener(EventNames.QSBRequestStateResync, Handler);
public override void CloseListener() => GlobalMessenger.RemoveListener(EventNames.QSBRequestStateResync, Handler);

View File

@ -29,6 +29,7 @@ using QSB.Tools.ProbeLauncherTool;
using QSB.Tools.TranslatorTool.TranslationSync;
using QSB.Utility;
using QSB.WorldSync;
using QSB.ZeroGCaveSync;
using QuantumUNET;
using QuantumUNET.Components;
using System.Linq;
@ -140,6 +141,7 @@ namespace QSB
gameObject.AddComponent<AirlockManager>();
gameObject.AddComponent<AnglerManager>();
gameObject.AddComponent<MeteorManager>();
gameObject.AddComponent<ZeroGCaveManager>();
DebugBoxManager.Init();

View File

@ -8,8 +8,6 @@ namespace QSB.QuantumSync.Events
{
public class MoonStateChangeEvent : QSBEvent<MoonStateChangeMessage>
{
public override QSB.Events.EventType Type => QSB.Events.EventType.MoonStateChange;
public override void SetupListener() => GlobalMessenger<int, Vector3, int>.AddListener(EventNames.QSBMoonStateChange, Handler);
public override void CloseListener() => GlobalMessenger<int, Vector3, int>.RemoveListener(EventNames.QSBMoonStateChange, Handler);

View File

@ -8,8 +8,6 @@ namespace QSB.QuantumSync.Events
{
public class MultiStateChangeEvent : QSBEvent<MultiStateChangeMessage>
{
public override EventType Type => EventType.MultiStateChange;
public override void SetupListener() => GlobalMessenger<int, int>.AddListener(EventNames.QSBMultiStateChange, Handler);
public override void CloseListener() => GlobalMessenger<int, int>.RemoveListener(EventNames.QSBMultiStateChange, Handler);

View File

@ -6,8 +6,6 @@ namespace QSB.QuantumSync.Events
{
internal class QuantumAuthorityEvent : QSBEvent<QuantumAuthorityMessage>
{
public override EventType Type => EventType.QuantumAuthority;
public override void SetupListener() => GlobalMessenger<int, uint>.AddListener(EventNames.QSBQuantumAuthority, Handler);
public override void CloseListener() => GlobalMessenger<int, uint>.RemoveListener(EventNames.QSBQuantumAuthority, Handler);

View File

@ -6,8 +6,6 @@ namespace QSB.QuantumSync.Events
{
public class QuantumShuffleEvent : QSBEvent<QuantumShuffleMessage>
{
public override QSB.Events.EventType Type => QSB.Events.EventType.QuantumShuffle;
public override void SetupListener() => GlobalMessenger<int, int[]>.AddListener(EventNames.QSBQuantumShuffle, Handler);
public override void CloseListener() => GlobalMessenger<int, int[]>.RemoveListener(EventNames.QSBQuantumShuffle, Handler);

View File

@ -9,8 +9,6 @@ namespace QSB.QuantumSync.Events
{
public class SocketStateChangeEvent : QSBEvent<SocketStateChangeMessage>
{
public override QSB.Events.EventType Type => QSB.Events.EventType.SocketStateChange;
public override void SetupListener() => GlobalMessenger<int, int, Quaternion>.AddListener(EventNames.QSBSocketStateChange, Handler);
public override void CloseListener() => GlobalMessenger<int, int, Quaternion>.RemoveListener(EventNames.QSBSocketStateChange, Handler);

View File

@ -7,8 +7,6 @@ namespace QSB.RespawnSync.Events
{
internal class PlayerRespawnEvent : QSBEvent<PlayerMessage>
{
public override EventType Type => EventType.PlayerRespawn;
public override void SetupListener()
=> GlobalMessenger<uint>.AddListener(EventNames.QSBPlayerRespawn, Handler);

View File

@ -9,8 +9,6 @@ namespace QSB.RoastingSync.Events
{
internal class EnterExitRoastingEvent : QSBEvent<BoolWorldObjectMessage>
{
public override EventType Type => EventType.Roasting;
public override void SetupListener()
{
GlobalMessenger<Campfire>.AddListener(EventNames.EnterRoastingMode, (Campfire fire) => Handler(fire, true));

View File

@ -11,8 +11,6 @@ namespace QSB.RoastingSync.Events
{
internal class MarshmallowEventEvent : QSBEvent<EnumMessage<MarshmallowEventType>>
{
public override QSB.Events.EventType Type => QSB.Events.EventType.MarshmallowEvent;
public override void SetupListener() => GlobalMessenger<MarshmallowEventType>.AddListener(EventNames.QSBMarshmallowEvent, Handler);
public override void CloseListener() => GlobalMessenger<MarshmallowEventType>.RemoveListener(EventNames.QSBMarshmallowEvent, Handler);

View File

@ -5,8 +5,6 @@ namespace QSB.SatelliteSync.Events
{
internal class SatelliteProjectorEvent : QSBEvent<BoolMessage>
{
public override EventType Type => EventType.SatelliteProjector;
public override void SetupListener()
{
GlobalMessenger.AddListener(EventNames.QSBEnterSatelliteCamera, () => Handler(true));

View File

@ -5,8 +5,6 @@ namespace QSB.SatelliteSync.Events
{
internal class SatelliteProjectorSnapshotEvent : QSBEvent<BoolMessage>
{
public override EventType Type => EventType.SatelliteProjectorSnapshot;
public override void SetupListener() => GlobalMessenger<bool>.AddListener(EventNames.QSBSatelliteSnapshot, (bool forward) => Handler(forward));
public override void CloseListener() => GlobalMessenger<bool>.RemoveListener(EventNames.QSBSatelliteSnapshot, (bool forward) => Handler(forward));

View File

@ -7,8 +7,6 @@ namespace QSB.ShipSync.Events.Component
{
internal class ComponentDamagedEvent : QSBEvent<WorldObjectMessage>
{
public override EventType Type => EventType.ComponentDamaged;
public override void SetupListener() => GlobalMessenger<ShipComponent>.AddListener(EventNames.QSBComponentDamaged, Handler);
public override void CloseListener() => GlobalMessenger<ShipComponent>.RemoveListener(EventNames.QSBComponentDamaged, Handler);

View File

@ -6,8 +6,6 @@ namespace QSB.ShipSync.Events.Component
{
internal class ComponentRepairTickEvent : QSBEvent<RepairTickMessage>
{
public override EventType Type => EventType.ComponentRepairTick;
public override void SetupListener() => GlobalMessenger<ShipComponent, float>.AddListener(EventNames.QSBComponentRepairTick, Handler);
public override void CloseListener() => GlobalMessenger<ShipComponent, float>.RemoveListener(EventNames.QSBComponentRepairTick, Handler);

View File

@ -7,8 +7,6 @@ namespace QSB.ShipSync.Events.Component
{
internal class ComponentRepairedEvent : QSBEvent<WorldObjectMessage>
{
public override EventType Type => EventType.ComponentRepaired;
public override void SetupListener() => GlobalMessenger<ShipComponent>.AddListener(EventNames.QSBComponentRepaired, Handler);
public override void CloseListener() => GlobalMessenger<ShipComponent>.RemoveListener(EventNames.QSBComponentRepaired, Handler);

View File

@ -12,8 +12,6 @@ namespace QSB.ShipSync.Events
{
internal class FlyShipEvent : QSBEvent<BoolMessage>
{
public override QSB.Events.EventType Type => QSB.Events.EventType.FlyShip;
public override void SetupListener()
{
GlobalMessenger<OWRigidbody>.AddListener(EventNames.EnterFlightConsole, (OWRigidbody rigidbody) => Handler(true));

View File

@ -5,8 +5,6 @@ namespace QSB.ShipSync.Events
{
internal class FunnelEnableEvent : QSBEvent<PlayerMessage>
{
public override EventType Type => EventType.EnableFunnel;
public override void SetupListener()
=> GlobalMessenger.AddListener(EventNames.QSBEnableFunnel, Handler);

View File

@ -6,8 +6,6 @@ namespace QSB.ShipSync.Events
{
internal class HatchEvent : QSBEvent<BoolMessage>
{
public override QSB.Events.EventType Type => QSB.Events.EventType.OpenHatch;
public override void SetupListener()
=> GlobalMessenger<bool>.AddListener(EventNames.QSBHatchState, Handler);

View File

@ -6,8 +6,6 @@ namespace QSB.ShipSync.Events.Hull
{
internal class HullChangeIntegrityEvent : QSBEvent<HullChangeIntegrityMessage>
{
public override EventType Type => EventType.HullChangeIntegrity;
public override void SetupListener() => GlobalMessenger<ShipHull, float>.AddListener(EventNames.QSBHullChangeIntegrity, Handler);
public override void CloseListener() => GlobalMessenger<ShipHull, float>.RemoveListener(EventNames.QSBHullChangeIntegrity, Handler);

View File

@ -7,8 +7,6 @@ namespace QSB.ShipSync.Events.Hull
{
internal class HullDamagedEvent : QSBEvent<WorldObjectMessage>
{
public override EventType Type => EventType.HullDamaged;
public override void SetupListener() => GlobalMessenger<ShipHull>.AddListener(EventNames.QSBHullDamaged, Handler);
public override void CloseListener() => GlobalMessenger<ShipHull>.RemoveListener(EventNames.QSBHullDamaged, Handler);

View File

@ -6,8 +6,6 @@ namespace QSB.ShipSync.Events.Hull
{
internal class HullImpactEvent : QSBEvent<HullImpactMessage>
{
public override EventType Type => EventType.HullImpact;
public override void SetupListener() => GlobalMessenger<ShipHull, ImpactData, float>.AddListener(EventNames.QSBHullImpact, Handler);
public override void CloseListener() => GlobalMessenger<ShipHull, ImpactData, float>.RemoveListener(EventNames.QSBHullImpact, Handler);

View File

@ -6,8 +6,6 @@ namespace QSB.ShipSync.Events.Hull
{
internal class HullRepairTickEvent : QSBEvent<RepairTickMessage>
{
public override EventType Type => EventType.HullRepairTick;
public override void SetupListener() => GlobalMessenger<ShipHull, float>.AddListener(EventNames.QSBHullRepairTick, Handler);
public override void CloseListener() => GlobalMessenger<ShipHull, float>.RemoveListener(EventNames.QSBHullRepairTick, Handler);

View File

@ -7,8 +7,6 @@ namespace QSB.ShipSync.Events.Hull
{
internal class HullRepairedEvent : QSBEvent<WorldObjectMessage>
{
public override EventType Type => EventType.HullRepaired;
public override void SetupListener() => GlobalMessenger<ShipHull>.AddListener(EventNames.QSBHullRepaired, Handler);
public override void CloseListener() => GlobalMessenger<ShipHull>.RemoveListener(EventNames.QSBHullRepaired, Handler);

View File

@ -7,8 +7,6 @@ namespace QSB.StatueSync.Events
{
internal class StartStatueEvent : QSBEvent<StartStatueMessage>
{
public override QSB.Events.EventType Type => QSB.Events.EventType.StartStatue;
public override void SetupListener()
=> GlobalMessenger<Vector3, Quaternion, float>.AddListener(EventNames.QSBStartStatue, Handler);

View File

@ -4,8 +4,6 @@ namespace QSB.TimeSync.Events
{
public class ServerTimeEvent : QSBEvent<ServerTimeMessage>
{
public override EventType Type => EventType.ServerTime;
public override void SetupListener() => GlobalMessenger<float, int>.AddListener(EventNames.QSBServerTime, Handler);
public override void CloseListener() => GlobalMessenger<float, int>.RemoveListener(EventNames.QSBServerTime, Handler);

View File

@ -6,8 +6,6 @@ namespace QSB.Tools.FlashlightTool.Events
{
public class PlayerFlashlightEvent : QSBEvent<ToggleMessage>
{
public override EventType Type => EventType.FlashlightActiveChange;
public override void SetupListener()
{
GlobalMessenger.AddListener(EventNames.TurnOnFlashlight, HandleTurnOn);

View File

@ -9,8 +9,6 @@ namespace QSB.Tools.ProbeLauncherTool.Events
{
private bool _nonPlayerLauncherEquipped;
public override EventType Type => EventType.ProbeLauncherActiveChange;
public override void SetupListener()
{
GlobalMessenger<ProbeLauncher>.AddListener(EventNames.ProbeLauncherEquipped, HandleEquip);

View File

@ -7,8 +7,6 @@ namespace QSB.Tools.ProbeLauncherTool.Events
{
internal class LaunchProbeEvent : QSBEvent<WorldObjectMessage>
{
public override EventType Type => EventType.LaunchProbe;
public override void SetupListener()
=> GlobalMessenger<QSBProbeLauncher>.AddListener(EventNames.QSBLaunchProbe, Handler);

View File

@ -6,8 +6,6 @@ namespace QSB.Tools.ProbeLauncherTool.Events
{
internal class PlayerLaunchProbeEvent : QSBEvent<PlayerMessage>
{
public override EventType Type => EventType.PlayerLaunchProbe;
public override void SetupListener()
=> GlobalMessenger.AddListener(EventNames.QSBPlayerLaunchProbe, Handler);

View File

@ -6,8 +6,6 @@ namespace QSB.Tools.ProbeLauncherTool.Events
{
internal class PlayerRetrieveProbeEvent : QSBEvent<BoolMessage>
{
public override EventType Type => EventType.PlayerRetrieveProbe;
public override void SetupListener()
=> GlobalMessenger<bool>.AddListener(EventNames.QSBPlayerRetrieveProbe, Handler);

View File

@ -7,8 +7,6 @@ namespace QSB.Tools.ProbeLauncherTool.Events
{
internal class RetrieveProbeEvent : QSBEvent<BoolWorldObjectMessage>
{
public override EventType Type => EventType.RetrieveProbe;
public override void SetupListener()
=> GlobalMessenger<QSBProbeLauncher, bool>.AddListener(EventNames.QSBRetrieveProbe, Handler);

View File

@ -6,8 +6,6 @@ namespace QSB.Tools.ProbeTool.Events
{
internal class PlayerProbeEvent : QSBEvent<EnumMessage<ProbeEvent>>
{
public override EventType Type => EventType.ProbeEvent;
public override void SetupListener()
=> GlobalMessenger<ProbeEvent>.AddListener(EventNames.QSBProbeEvent, Handler);

View File

@ -6,8 +6,6 @@ namespace QSB.Tools.ProbeTool.Events
{
internal class ProbeStartRetrieveEvent : QSBEvent<FloatMessage>
{
public override EventType Type => EventType.ProbeStartRetrieve;
public override void SetupListener()
=> GlobalMessenger<float>.AddListener(EventNames.QSBProbeStartRetrieve, Handler);

View File

@ -6,8 +6,6 @@ namespace QSB.Tools.SignalscopeTool.Events
{
public class PlayerSignalscopeEvent : QSBEvent<ToggleMessage>
{
public override EventType Type => EventType.SignalscopeActiveChange;
public override void SetupListener()
{
GlobalMessenger<Signalscope>.AddListener(EventNames.EquipSignalscope, HandleEquip);

View File

@ -6,8 +6,6 @@ namespace QSB.Tools.SignalscopeTool.FrequencySync.Events
{
public class IdentifyFrequencyEvent : QSBEvent<EnumMessage<SignalFrequency>>
{
public override EventType Type => EventType.IdentifyFrequency;
public override void SetupListener() => GlobalMessenger<SignalFrequency>.AddListener(EventNames.QSBIdentifyFrequency, Handler);
public override void CloseListener() => GlobalMessenger<SignalFrequency>.RemoveListener(EventNames.QSBIdentifyFrequency, Handler);

View File

@ -6,8 +6,6 @@ namespace QSB.Tools.SignalscopeTool.FrequencySync.Events
{
public class IdentifySignalEvent : QSBEvent<EnumMessage<SignalName>>
{
public override EventType Type => EventType.IdentifySignal;
public override void SetupListener() => GlobalMessenger<SignalName>.AddListener(EventNames.QSBIdentifySignal, Handler);
public override void CloseListener() => GlobalMessenger<SignalName>.RemoveListener(EventNames.QSBIdentifySignal, Handler);

View File

@ -6,8 +6,6 @@ namespace QSB.Tools.TranslatorTool.Events
{
public class PlayerTranslatorEvent : QSBEvent<ToggleMessage>
{
public override EventType Type => EventType.TranslatorActiveChange;
public override void SetupListener()
{
GlobalMessenger.AddListener(EventNames.EquipTranslator, HandleEquip);

View File

@ -6,8 +6,6 @@ namespace QSB.Tools.TranslatorTool.TranslationSync.Events
{
public class SetAsTranslatedEvent : QSBEvent<SetAsTranslatedMessage>
{
public override EventType Type => EventType.TextTranslated;
public override void SetupListener() => GlobalMessenger<NomaiTextType, int, int>.AddListener(EventNames.QSBTextTranslated, Handler);
public override void CloseListener() => GlobalMessenger<NomaiTextType, int, int>.RemoveListener(EventNames.QSBTextTranslated, Handler);

View File

@ -5,8 +5,6 @@ namespace QSB.Utility.Events
{
public class DebugEvent : QSBEvent<EnumMessage<DebugEventEnum>>
{
public override EventType Type => EventType.DebugEvent;
public override void SetupListener() => GlobalMessenger<DebugEventEnum>.AddListener(EventNames.QSBDebugEvent, Handler);
public override void CloseListener() => GlobalMessenger<DebugEventEnum>.RemoveListener(EventNames.QSBDebugEvent, Handler);

View File

@ -19,7 +19,7 @@ namespace QSB.Utility.VariableSync
public virtual void Awake()
{
QNetworkServer.instance.m_SimpleServerSimple.RegisterHandlerSafe((short)QSB.Events.EventType.VariableSync, HandleVariable);
QNetworkServer.instance.m_SimpleServerSimple.RegisterHandlerSafe(short.MaxValue, HandleVariable);
if (LocalPlayerAuthority)
{
@ -93,7 +93,7 @@ namespace QSB.Utility.VariableSync
// TODO - this sends a message, even when the value hasnt changed! this is really bad!
if (QClientScene.readyConnection != null)
{
_writer.StartMessage((short)QSB.Events.EventType.VariableSync);
_writer.StartMessage(short.MaxValue);
_writer.Write(NetId);
_writer.Write(_index);
WriteData(_writer);

View File

@ -0,0 +1,32 @@
using QSB.Events;
using QSB.ShipSync.Events;
using QSB.WorldSync;
using QSB.ZeroGCaveSync.WorldObjects;
namespace QSB.ZeroGCaveSync.Events
{
internal class SatelliteNodeRepairTick : QSBEvent<RepairTickMessage>
{
public override void SetupListener() => GlobalMessenger<SatelliteNode, float>.AddListener(EventNames.QSBSatelliteRepairTick, Handler);
public override void CloseListener() => GlobalMessenger<SatelliteNode, float>.RemoveListener(EventNames.QSBSatelliteRepairTick, Handler);
private void Handler(SatelliteNode node, float repairFraction) => SendEvent(CreateMessage(node, repairFraction));
private RepairTickMessage CreateMessage(SatelliteNode node, float repairFraction)
{
var worldObject = QSBWorldSync.GetWorldFromUnity<QSBSatelliteNode>(node);
return new RepairTickMessage
{
AboutId = LocalPlayerId,
ObjectId = worldObject.ObjectId,
RepairNumber = repairFraction
};
}
public override void OnReceiveRemote(bool server, RepairTickMessage message)
{
var worldObject = QSBWorldSync.GetWorldFromId<QSBSatelliteNode>(message.ObjectId);
worldObject.RepairTick(message.RepairNumber);
}
}
}

View File

@ -0,0 +1,31 @@
using QSB.Events;
using QSB.WorldSync;
using QSB.WorldSync.Events;
using QSB.ZeroGCaveSync.WorldObjects;
namespace QSB.ZeroGCaveSync.Events
{
internal class SatelliteNodeRepaired : QSBEvent<WorldObjectMessage>
{
public override void SetupListener() => GlobalMessenger<SatelliteNode>.AddListener(EventNames.QSBSatelliteRepaired, Handler);
public override void CloseListener() => GlobalMessenger<SatelliteNode>.RemoveListener(EventNames.QSBSatelliteRepaired, Handler);
private void Handler(SatelliteNode node) => SendEvent(CreateMessage(node));
private WorldObjectMessage CreateMessage(SatelliteNode node)
{
var worldObject = QSBWorldSync.GetWorldFromUnity<QSBSatelliteNode>(node);
return new WorldObjectMessage
{
AboutId = LocalPlayerId,
ObjectId = worldObject.ObjectId
};
}
public override void OnReceiveRemote(bool server, WorldObjectMessage message)
{
var worldObject = QSBWorldSync.GetWorldFromId<QSBSatelliteNode>(message.ObjectId);
worldObject.SetRepaired();
}
}
}

View File

@ -0,0 +1,63 @@
using HarmonyLib;
using QSB.Events;
using QSB.Patches;
using QSB.Utility;
using UnityEngine;
namespace QSB.ZeroGCaveSync.Patches
{
[HarmonyPatch]
internal class ZeroGCavePatches : QSBPatch
{
public override QSBPatchTypes Type => QSBPatchTypes.OnClientConnect;
[HarmonyPrefix]
[HarmonyPatch(typeof(SatelliteNode), nameof(SatelliteNode.RepairTick))]
public static bool SatelliteNode_RepairTick(SatelliteNode __instance)
{
if (!__instance._damaged)
{
return false;
}
__instance._repairFraction = Mathf.Clamp01(__instance._repairFraction + (Time.deltaTime / __instance._repairTime));
if (__instance._repairFraction >= 1f)
{
QSBEventManager.FireEvent(EventNames.QSBSatelliteRepaired, __instance);
__instance._damaged = false;
var component = Locator.GetPlayerTransform().GetComponent<ReferenceFrameTracker>();
if (component.GetReferenceFrame(true) == __instance._rfVolume.GetReferenceFrame())
{
component.UntargetReferenceFrame();
}
if (__instance._rfVolume != null)
{
__instance._rfVolume.gameObject.SetActive(false);
}
if (__instance._lanternLight != null)
{
__instance._lanternLight.color = __instance._lightRepairedColor;
}
if (__instance._lanternEmissiveRenderer != null)
{
__instance._lanternEmissiveRenderer.sharedMaterials.CopyTo(__instance._lanternMaterials, 0);
__instance._lanternMaterials[__instance._lanternMaterialIndex] = __instance._lanternRepairedMaterial;
__instance._lanternEmissiveRenderer.sharedMaterials = __instance._lanternMaterials;
}
__instance.RaiseEvent("OnRepaired", __instance);
}
if (__instance._damageEffect != null)
{
__instance._damageEffect.SetEffectBlend(1f - __instance._repairFraction);
}
QSBEventManager.FireEvent(EventNames.QSBSatelliteRepairTick, __instance, __instance._repairFraction);
return false;
}
}
}

View File

@ -0,0 +1,52 @@
using QSB.Utility;
using QSB.WorldSync;
namespace QSB.ZeroGCaveSync.WorldObjects
{
internal class QSBSatelliteNode : WorldObject<SatelliteNode>
{
public override void Init(SatelliteNode component, int id)
{
ObjectId = id;
AttachedObject = component;
}
public void SetRepaired()
{
DebugLog.DebugWrite($"[SATELLITE NODE] {AttachedObject} Set repaired.");
AttachedObject._damaged = false;
var component = Locator.GetPlayerTransform().GetComponent<ReferenceFrameTracker>();
if (component.GetReferenceFrame(true) == AttachedObject._rfVolume.GetReferenceFrame())
{
component.UntargetReferenceFrame();
}
if (AttachedObject._rfVolume != null)
{
AttachedObject._rfVolume.gameObject.SetActive(false);
}
if (AttachedObject._lanternLight != null)
{
AttachedObject._lanternLight.color = AttachedObject._lightRepairedColor;
}
if (AttachedObject._lanternEmissiveRenderer != null)
{
AttachedObject._lanternEmissiveRenderer.sharedMaterials.CopyTo(AttachedObject._lanternMaterials, 0);
AttachedObject._lanternMaterials[AttachedObject._lanternMaterialIndex] = AttachedObject._lanternRepairedMaterial;
AttachedObject._lanternEmissiveRenderer.sharedMaterials = AttachedObject._lanternMaterials;
}
AttachedObject.RaiseEvent("OnRepaired", AttachedObject);
}
public void RepairTick(float repairFraction)
{
DebugLog.DebugWrite($"[SATELLITE NODE] {AttachedObject} repair tick {repairFraction}");
AttachedObject._repairFraction = repairFraction;
var damageEffect = AttachedObject._damageEffect;
damageEffect.SetEffectBlend(1f - repairFraction);
}
}
}

View File

@ -0,0 +1,11 @@
using QSB.WorldSync;
using QSB.ZeroGCaveSync.WorldObjects;
namespace QSB.ZeroGCaveSync
{
internal class ZeroGCaveManager : WorldObjectManager
{
protected override void RebuildWorldObjects(OWScene scene)
=> QSBWorldSync.Init<QSBSatelliteNode, SatelliteNode>();
}
}

View File

@ -3,6 +3,6 @@
"drawLines": true,
"showQuantumVisibilityObjects": false,
"showQuantumDebugBoxes": false,
"avoidTimeSync": true,
"avoidTimeSync": false,
"skipTitleScreen": true
}

View File

@ -7,7 +7,7 @@
"body": "- Disable *all* other mods. (Can heavily affect performance)\n- Make sure you are not running any other network-intensive applications.\n- Make sure you have forwarded/opened the correct ports. (See the GitHub readme.)"
},
"uniqueName": "Raicuparta.QuantumSpaceBuddies",
"version": "0.13.0",
"version": "0.14.0",
"owmlVersion": "2.1.0",
"dependencies": [ "_nebula.MenuFramework" ]
}