diff --git a/BoneSync/BoneSync.csproj b/BoneSync/BoneSync.csproj index fff63b7..e21ad40 100644 --- a/BoneSync/BoneSync.csproj +++ b/BoneSync/BoneSync.csproj @@ -86,6 +86,22 @@ False ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\BONEWORKS\BONEWORKS\MelonLoader\Managed\UnityEngine.PhysicsModule.dll + + False + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\BONEWORKS\BONEWORKS\MelonLoader\Managed\UnityEngine.TextRenderingModule.dll + + + False + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\BONEWORKS\BONEWORKS\MelonLoader\Managed\UnityEngine.UI.dll + + + False + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\BONEWORKS\BONEWORKS\MelonLoader\Managed\UnityEngine.UIElementsModule.dll + + + False + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\BONEWORKS\BONEWORKS\MelonLoader\Managed\UnityEngine.UIModule.dll + diff --git a/BoneSync/Data/Debugger.cs b/BoneSync/Data/Debugger.cs index 76c4534..c29d997 100644 --- a/BoneSync/Data/Debugger.cs +++ b/BoneSync/Data/Debugger.cs @@ -5,6 +5,8 @@ using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; +using UnityEngine; +using UnityEngine.UI; namespace BoneSync.Data { @@ -36,4 +38,60 @@ namespace BoneSync.Data #endif } } + + internal static class SyncDebugUI + { + public static Dictionary keyValuePairs = new Dictionary(); + public static Text debugText; + public static void CreateUI() + { + if (debugText != null) + return; + GameObject canvas = new GameObject("BoneSyncDebugCanvas"); + canvas.AddComponent(); + canvas.AddComponent(); + canvas.AddComponent(); + canvas.GetComponent().renderMode = RenderMode.ScreenSpaceOverlay; + + GameObject panel = new GameObject("BoneSyncDebugPanel"); + panel.transform.SetParent(canvas.transform); + panel.AddComponent(); + panel.AddComponent(); + panel.GetComponent().color = new Color(0, 0, 0, 0.5f); + panel.GetComponent().anchorMin = new Vector2(0, 0); + panel.GetComponent().anchorMax = new Vector2(1, 1); + panel.GetComponent().offsetMin = new Vector2(0, 0); + panel.GetComponent().offsetMax = new Vector2(0, 0); + + GameObject text = new GameObject("BoneSyncDebugText"); + text.transform.SetParent(panel.transform); + text.AddComponent(); + text.AddComponent(); + text.GetComponent().font = Font.CreateDynamicFontFromOSFont("Arial", 12); + text.GetComponent().color = Color.white; + text.GetComponent().alignment = TextAnchor.UpperLeft; + text.GetComponent().resizeTextForBestFit = true; + text.GetComponent().resizeTextMaxSize = 12; + text.GetComponent().resizeTextMinSize = 8; + text.GetComponent().text = "BoneSync Debug"; + text.GetComponent().anchorMin = new Vector2(0, 0); + text.GetComponent().anchorMax = new Vector2(1, 1); + text.GetComponent().offsetMin = new Vector2(0, 0); + text.GetComponent().offsetMax = new Vector2(0, 0); + + debugText = text.GetComponent(); + } + + public static void UpdateUI() + { + CreateUI(); + + StringBuilder sb = new StringBuilder(); + foreach (var kvp in keyValuePairs) + { + sb.AppendLine($"{kvp.Key}: {kvp.Value}"); + } + debugText.text = sb.ToString(); + } + } } diff --git a/BoneSync/MelonLoaderMod.cs b/BoneSync/MelonLoaderMod.cs index 855014b..29ed8c6 100644 --- a/BoneSync/MelonLoaderMod.cs +++ b/BoneSync/MelonLoaderMod.cs @@ -79,6 +79,8 @@ namespace BoneSync PlayerRig.LocalSyncTick(); transport.Tick(); + //SyncDebugUI.UpdateUI(); + //PlayerRig.Tick(); if (Input.GetKeyDown(KeyCode.P)) diff --git a/BoneSync/Networking/Messages/SimpleSyncableEventMessage.cs b/BoneSync/Networking/Messages/SimpleSyncableEventMessage.cs index ef5a2c1..474960b 100644 --- a/BoneSync/Networking/Messages/SimpleSyncableEventMessage.cs +++ b/BoneSync/Networking/Messages/SimpleSyncableEventMessage.cs @@ -15,6 +15,7 @@ namespace BoneSync.Networking.Messages OnDeviceRelease = 2, OnButtonPress = 3, OnButtonRelease = 4, + OnButtonOneShot = 5, } public struct SimpleSyncableEvent { diff --git a/BoneSync/Networking/Transport/SteamTransport.cs b/BoneSync/Networking/Transport/SteamTransport.cs index 00a4946..acad202 100644 --- a/BoneSync/Networking/Transport/SteamTransport.cs +++ b/BoneSync/Networking/Transport/SteamTransport.cs @@ -61,9 +61,9 @@ namespace BoneSync.Networking.Transport } } - public override bool Tick() + public override int Tick() { - if (!SteamClient.IsValid) return false; + if (!SteamClient.IsValid) return 0; int processed = 0; while (SteamNetworking.IsP2PPacketAvailable()) { @@ -72,7 +72,7 @@ namespace BoneSync.Networking.Transport ProcessPacket(packet.Value); processed++; } - return processed > 0; + return processed; } public P2PSend GetSteamSendType(PacketReliability packetReliability) diff --git a/BoneSync/Networking/Transport/TransportBase.cs b/BoneSync/Networking/Transport/TransportBase.cs index af0517b..02f6217 100644 --- a/BoneSync/Networking/Transport/TransportBase.cs +++ b/BoneSync/Networking/Transport/TransportBase.cs @@ -10,7 +10,7 @@ namespace BoneSync.Networking.Transport { public const int BORADCAST_ID = 0; public abstract void Send(Packet packet); - public abstract bool Tick(); + public abstract int Tick(); public abstract void CleanUp(); } } diff --git a/BoneSync/Sync/Components/SyncablePhysics.cs b/BoneSync/Sync/Components/SyncablePhysics.cs index 88ef881..e7e6ade 100644 --- a/BoneSync/Sync/Components/SyncablePhysics.cs +++ b/BoneSync/Sync/Components/SyncablePhysics.cs @@ -19,25 +19,28 @@ namespace BoneSync.Sync.Components private HashSet patchedButtonToggles = new HashSet(); private bool pullDevicePatched = false; - bool ButtonOnPress(ButtonToggle toggle) + bool OnButtonEvent(ButtonToggle toggle, SimpleEventType eventType) { - SyncLogger.Msg("ButtonToggle:OnPress " + toggle.transform.GetPath()); + SyncLogger.Msg("ButtonToggle:" + eventType + " " + toggle.transform.GetPath()); byte index = (byte)Array.IndexOf(buttonToggles, toggle); RegisterSyncable(); if (!Registered) return false; if (!isOwner) return false; - _SendSimpleEvent(SimpleEventType.OnButtonPress, index); + _SendSimpleEvent(eventType, index); return true; } + bool ButtonOnPress(ButtonToggle toggle) + { + return OnButtonEvent(toggle, SimpleEventType.OnButtonPress); + } bool ButtonOnRelease(ButtonToggle toggle) { - SyncLogger.Msg("ButtonToggle:OnRelease " + toggle.transform.GetPath()); - byte index = (byte)Array.IndexOf(buttonToggles, toggle); - RegisterSyncable(); - if (!Registered) return false; - if (!isOwner) return false; - _SendSimpleEvent(SimpleEventType.OnButtonRelease, index); - return true; + return OnButtonEvent(toggle, SimpleEventType.OnButtonRelease); + } + + bool ButtonOnOneShot(ButtonToggle toggle) + { + return OnButtonEvent(toggle, SimpleEventType.OnButtonOneShot); } void DeviceOnPull() @@ -84,6 +87,7 @@ namespace BoneSync.Sync.Components //buttonToggle.onDepress.AddListenerWithArgs((btn, args) => ButtonOnRelease(btn), buttonToggle); UnityEventPatch.Patch(buttonToggle, buttonToggle.onPress, ButtonOnPress); UnityEventPatch.Patch(buttonToggle, buttonToggle.onDepress, ButtonOnRelease); + UnityEventPatch.Patch(buttonToggle, buttonToggle.onPressOneShot, ButtonOnOneShot); patchedButtonToggles.Add(buttonToggle.GetHashCode()); } @@ -231,8 +235,15 @@ namespace BoneSync.Sync.Components buttonToggles[index]?.onDepress.BypassPatchInvoke(); } break; - - + case SimpleEventType.OnButtonOneShot: + if (len != eventData.length) { + SyncLogger.Warning("ButtonPress length mismatch: " + len + " != " + eventData.length); + } + if (index < buttonToggles.Length) + { + buttonToggles[index]?.onPressOneShot.BypassPatchInvoke(); + } + break; } } // on collision