PlugSync stuff
This commit is contained in:
@@ -3,11 +3,13 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using BoneSync.Networking.Messages;
|
||||
using BoneSync.Sync;
|
||||
using BoneSync.Sync.Components;
|
||||
using HarmonyLib;
|
||||
using MelonLoader;
|
||||
using StressLevelZero.Interaction;
|
||||
using static MelonLoader.MelonLogger;
|
||||
|
||||
namespace BoneSync.Patching
|
||||
{
|
||||
@@ -70,16 +72,66 @@ namespace BoneSync.Patching
|
||||
[HarmonyPatch(typeof(AlignPlug))]
|
||||
public static class AlignPlugPatches
|
||||
{
|
||||
public static void OnPlugSocketChange(AlignPlug plug, Socket socket)
|
||||
{
|
||||
|
||||
Syncable plugSyncable = plug.GetComponentInParent<Syncable>();
|
||||
Syncable socketSyncable = socket.GetComponentInParent<Syncable>();
|
||||
|
||||
if (!plugSyncable)
|
||||
{
|
||||
MelonLogger.Warning("PlugSyncable not found");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!plugSyncable.Registered)
|
||||
{
|
||||
MelonLogger.Warning("PlugSyncable not registered");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!socketSyncable)
|
||||
{
|
||||
MelonLogger.Warning("SocketSyncable not found");
|
||||
}
|
||||
|
||||
if (socketSyncable && socketSyncable.isOwner && !plugSyncable.isOwner)
|
||||
{
|
||||
plugSyncable.TryBecomeOwner(true); // forcefully take ownership of the plug
|
||||
}
|
||||
|
||||
byte plugId = plugSyncable.GetPlugId(plug);
|
||||
byte socketId = socketSyncable ? socketSyncable.GetSocketId(socket) : byte.MaxValue;
|
||||
|
||||
MelonLogger.Msg("AlignPlug state: " + plug.transform.GetPath() + " Socket: " + socket.transform.GetPath() + " Plug ID: " + plugId + " Socket ID: " + socketId);
|
||||
|
||||
if (!plugSyncable.isOwner) return;
|
||||
|
||||
PlugSyncMessageData messageData = new PlugSyncMessageData
|
||||
{
|
||||
plugSyncId = plugSyncable.GetSyncId(),
|
||||
plugIndex = plugId,
|
||||
socketSyncId = socketSyncable ? socketSyncable.GetSyncId() : ushort.MinValue,
|
||||
socketIndex = socketId
|
||||
};
|
||||
|
||||
PlugSyncMessage plugSyncMessage = new PlugSyncMessage(messageData);
|
||||
plugSyncMessage.Broadcast();
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(AlignPlug.InsertPlug)), HarmonyPostfix]
|
||||
public static void AlignPlugInsertPatch(AlignPlug __instance, Socket socket)
|
||||
{
|
||||
MelonLogger.Msg("AlignPlug inserted: " + __instance.transform.GetPath() + " Socket: " + socket.transform.GetPath());
|
||||
MelonLogger.Msg("AlignPlug inserted: " + __instance.transform.GetPath() + " Socket: " + socket.transform.GetPath());
|
||||
OnPlugSocketChange(__instance, socket);
|
||||
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(AlignPlug.EjectPlug)), HarmonyPostfix]
|
||||
public static void AlignPlugEjectPatch(AlignPlug __instance)
|
||||
{
|
||||
MelonLogger.Msg("AlignPlug ejected: " + __instance.transform.GetPath());
|
||||
OnPlugSocketChange(__instance, null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user