add oneshot event patch
This commit is contained in:
@@ -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" />
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,6 +79,8 @@ namespace BoneSync
|
||||
PlayerRig.LocalSyncTick();
|
||||
transport.Tick();
|
||||
|
||||
//SyncDebugUI.UpdateUI();
|
||||
|
||||
//PlayerRig.Tick();
|
||||
|
||||
if (Input.GetKeyDown(KeyCode.P))
|
||||
|
||||
@@ -15,6 +15,7 @@ namespace BoneSync.Networking.Messages
|
||||
OnDeviceRelease = 2,
|
||||
OnButtonPress = 3,
|
||||
OnButtonRelease = 4,
|
||||
OnButtonOneShot = 5,
|
||||
}
|
||||
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;
|
||||
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)
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user