add oneshot event patch
This commit is contained in:
@@ -86,6 +86,22 @@
|
|||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\BONEWORKS\BONEWORKS\MelonLoader\Managed\UnityEngine.PhysicsModule.dll</HintPath>
|
<HintPath>..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\BONEWORKS\BONEWORKS\MelonLoader\Managed\UnityEngine.PhysicsModule.dll</HintPath>
|
||||||
</Reference>
|
</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>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Data\ByteEncoder.cs" />
|
<Compile Include="Data\ByteEncoder.cs" />
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ using System.Diagnostics;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
|
||||||
namespace BoneSync.Data
|
namespace BoneSync.Data
|
||||||
{
|
{
|
||||||
@@ -36,4 +38,60 @@ namespace BoneSync.Data
|
|||||||
#endif
|
#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();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,6 +79,8 @@ namespace BoneSync
|
|||||||
PlayerRig.LocalSyncTick();
|
PlayerRig.LocalSyncTick();
|
||||||
transport.Tick();
|
transport.Tick();
|
||||||
|
|
||||||
|
//SyncDebugUI.UpdateUI();
|
||||||
|
|
||||||
//PlayerRig.Tick();
|
//PlayerRig.Tick();
|
||||||
|
|
||||||
if (Input.GetKeyDown(KeyCode.P))
|
if (Input.GetKeyDown(KeyCode.P))
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ namespace BoneSync.Networking.Messages
|
|||||||
OnDeviceRelease = 2,
|
OnDeviceRelease = 2,
|
||||||
OnButtonPress = 3,
|
OnButtonPress = 3,
|
||||||
OnButtonRelease = 4,
|
OnButtonRelease = 4,
|
||||||
|
OnButtonOneShot = 5,
|
||||||
}
|
}
|
||||||
public struct SimpleSyncableEvent
|
public struct SimpleSyncableEvent
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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;
|
int processed = 0;
|
||||||
while (SteamNetworking.IsP2PPacketAvailable())
|
while (SteamNetworking.IsP2PPacketAvailable())
|
||||||
{
|
{
|
||||||
@@ -72,7 +72,7 @@ namespace BoneSync.Networking.Transport
|
|||||||
ProcessPacket(packet.Value);
|
ProcessPacket(packet.Value);
|
||||||
processed++;
|
processed++;
|
||||||
}
|
}
|
||||||
return processed > 0;
|
return processed;
|
||||||
}
|
}
|
||||||
|
|
||||||
public P2PSend GetSteamSendType(PacketReliability packetReliability)
|
public P2PSend GetSteamSendType(PacketReliability packetReliability)
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ namespace BoneSync.Networking.Transport
|
|||||||
{
|
{
|
||||||
public const int BORADCAST_ID = 0;
|
public const int BORADCAST_ID = 0;
|
||||||
public abstract void Send(Packet packet);
|
public abstract void Send(Packet packet);
|
||||||
public abstract bool Tick();
|
public abstract int Tick();
|
||||||
public abstract void CleanUp();
|
public abstract void CleanUp();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,25 +19,28 @@ namespace BoneSync.Sync.Components
|
|||||||
private HashSet<int> patchedButtonToggles = new HashSet<int>();
|
private HashSet<int> patchedButtonToggles = new HashSet<int>();
|
||||||
private bool pullDevicePatched = false;
|
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);
|
byte index = (byte)Array.IndexOf(buttonToggles, toggle);
|
||||||
RegisterSyncable();
|
RegisterSyncable();
|
||||||
if (!Registered) return false;
|
if (!Registered) return false;
|
||||||
if (!isOwner) return false;
|
if (!isOwner) return false;
|
||||||
_SendSimpleEvent(SimpleEventType.OnButtonPress, index);
|
_SendSimpleEvent(eventType, index);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
bool ButtonOnPress(ButtonToggle toggle)
|
||||||
|
{
|
||||||
|
return OnButtonEvent(toggle, SimpleEventType.OnButtonPress);
|
||||||
|
}
|
||||||
bool ButtonOnRelease(ButtonToggle toggle)
|
bool ButtonOnRelease(ButtonToggle toggle)
|
||||||
{
|
{
|
||||||
SyncLogger.Msg("ButtonToggle:OnRelease " + toggle.transform.GetPath());
|
return OnButtonEvent(toggle, SimpleEventType.OnButtonRelease);
|
||||||
byte index = (byte)Array.IndexOf(buttonToggles, toggle);
|
}
|
||||||
RegisterSyncable();
|
|
||||||
if (!Registered) return false;
|
bool ButtonOnOneShot(ButtonToggle toggle)
|
||||||
if (!isOwner) return false;
|
{
|
||||||
_SendSimpleEvent(SimpleEventType.OnButtonRelease, index);
|
return OnButtonEvent(toggle, SimpleEventType.OnButtonOneShot);
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeviceOnPull()
|
void DeviceOnPull()
|
||||||
@@ -84,6 +87,7 @@ namespace BoneSync.Sync.Components
|
|||||||
//buttonToggle.onDepress.AddListenerWithArgs<ButtonToggle>((btn, args) => ButtonOnRelease(btn), buttonToggle);
|
//buttonToggle.onDepress.AddListenerWithArgs<ButtonToggle>((btn, args) => ButtonOnRelease(btn), buttonToggle);
|
||||||
UnityEventPatch<ButtonToggle>.Patch(buttonToggle, buttonToggle.onPress, ButtonOnPress);
|
UnityEventPatch<ButtonToggle>.Patch(buttonToggle, buttonToggle.onPress, ButtonOnPress);
|
||||||
UnityEventPatch<ButtonToggle>.Patch(buttonToggle, buttonToggle.onDepress, ButtonOnRelease);
|
UnityEventPatch<ButtonToggle>.Patch(buttonToggle, buttonToggle.onDepress, ButtonOnRelease);
|
||||||
|
UnityEventPatch<ButtonToggle>.Patch(buttonToggle, buttonToggle.onPressOneShot, ButtonOnOneShot);
|
||||||
|
|
||||||
patchedButtonToggles.Add(buttonToggle.GetHashCode());
|
patchedButtonToggles.Add(buttonToggle.GetHashCode());
|
||||||
}
|
}
|
||||||
@@ -231,8 +235,15 @@ namespace BoneSync.Sync.Components
|
|||||||
buttonToggles[index]?.onDepress.BypassPatchInvoke();
|
buttonToggles[index]?.onDepress.BypassPatchInvoke();
|
||||||
}
|
}
|
||||||
break;
|
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
|
// on collision
|
||||||
|
|||||||
Reference in New Issue
Block a user