add oneshot event patch

This commit is contained in:
2025-03-14 14:21:12 +02:00
parent f1f8f1cbcf
commit 95cd554eb0
7 changed files with 104 additions and 16 deletions

View File

@@ -86,6 +86,22 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\BONEWORKS\BONEWORKS\MelonLoader\Managed\UnityEngine.PhysicsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TextRenderingModule, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\BONEWORKS\BONEWORKS\MelonLoader\Managed\UnityEngine.TextRenderingModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UI, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\BONEWORKS\BONEWORKS\MelonLoader\Managed\UnityEngine.UI.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UIElementsModule, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\BONEWORKS\BONEWORKS\MelonLoader\Managed\UnityEngine.UIElementsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UIModule, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\BONEWORKS\BONEWORKS\MelonLoader\Managed\UnityEngine.UIModule.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Data\ByteEncoder.cs" />

View File

@@ -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<string, string> keyValuePairs = new Dictionary<string, string>();
public static Text debugText;
public static void CreateUI()
{
if (debugText != null)
return;
GameObject canvas = new GameObject("BoneSyncDebugCanvas");
canvas.AddComponent<Canvas>();
canvas.AddComponent<CanvasScaler>();
canvas.AddComponent<GraphicRaycaster>();
canvas.GetComponent<Canvas>().renderMode = RenderMode.ScreenSpaceOverlay;
GameObject panel = new GameObject("BoneSyncDebugPanel");
panel.transform.SetParent(canvas.transform);
panel.AddComponent<CanvasRenderer>();
panel.AddComponent<Image>();
panel.GetComponent<Image>().color = new Color(0, 0, 0, 0.5f);
panel.GetComponent<RectTransform>().anchorMin = new Vector2(0, 0);
panel.GetComponent<RectTransform>().anchorMax = new Vector2(1, 1);
panel.GetComponent<RectTransform>().offsetMin = new Vector2(0, 0);
panel.GetComponent<RectTransform>().offsetMax = new Vector2(0, 0);
GameObject text = new GameObject("BoneSyncDebugText");
text.transform.SetParent(panel.transform);
text.AddComponent<RectTransform>();
text.AddComponent<Text>();
text.GetComponent<Text>().font = Font.CreateDynamicFontFromOSFont("Arial", 12);
text.GetComponent<Text>().color = Color.white;
text.GetComponent<Text>().alignment = TextAnchor.UpperLeft;
text.GetComponent<Text>().resizeTextForBestFit = true;
text.GetComponent<Text>().resizeTextMaxSize = 12;
text.GetComponent<Text>().resizeTextMinSize = 8;
text.GetComponent<Text>().text = "BoneSync Debug";
text.GetComponent<RectTransform>().anchorMin = new Vector2(0, 0);
text.GetComponent<RectTransform>().anchorMax = new Vector2(1, 1);
text.GetComponent<RectTransform>().offsetMin = new Vector2(0, 0);
text.GetComponent<RectTransform>().offsetMax = new Vector2(0, 0);
debugText = text.GetComponent<Text>();
}
public static void UpdateUI()
{
CreateUI();
StringBuilder sb = new StringBuilder();
foreach (var kvp in keyValuePairs)
{
sb.AppendLine($"{kvp.Key}: {kvp.Value}");
}
debugText.text = sb.ToString();
}
}
}

View File

@@ -79,6 +79,8 @@ namespace BoneSync
PlayerRig.LocalSyncTick();
transport.Tick();
//SyncDebugUI.UpdateUI();
//PlayerRig.Tick();
if (Input.GetKeyDown(KeyCode.P))

View File

@@ -15,6 +15,7 @@ namespace BoneSync.Networking.Messages
OnDeviceRelease = 2,
OnButtonPress = 3,
OnButtonRelease = 4,
OnButtonOneShot = 5,
}
public struct SimpleSyncableEvent
{

View File

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

View File

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

View File

@@ -19,25 +19,28 @@ namespace BoneSync.Sync.Components
private HashSet<int> patchedButtonToggles = new HashSet<int>();
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<ButtonToggle>((btn, args) => ButtonOnRelease(btn), buttonToggle);
UnityEventPatch<ButtonToggle>.Patch(buttonToggle, buttonToggle.onPress, ButtonOnPress);
UnityEventPatch<ButtonToggle>.Patch(buttonToggle, buttonToggle.onDepress, ButtonOnRelease);
UnityEventPatch<ButtonToggle>.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