From b721e2d25e4aac86b72fa7902481a3112a026ff5 Mon Sep 17 00:00:00 2001 From: Aaro Varis Date: Wed, 26 Feb 2025 13:53:46 +0200 Subject: [PATCH] I dont know what i am doing --- BoneSync/BoneSync.csproj | 4 + BoneSync/MelonLoaderMod.cs | 24 ++++- .../Networking/Transport/SteamTransport.cs | 26 +++++- BoneSync/PlayerRigs/PlayerRig.cs | 88 +++++++++++++++---- BoneSync/Properties/AssemblyInfo.cs | 1 + 5 files changed, 124 insertions(+), 19 deletions(-) diff --git a/BoneSync/BoneSync.csproj b/BoneSync/BoneSync.csproj index 9284f42..73cabc7 100644 --- a/BoneSync/BoneSync.csproj +++ b/BoneSync/BoneSync.csproj @@ -88,6 +88,10 @@ ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\BONEWORKS\BONEWORKS\MelonLoader\Managed\UnityEngine.dll + + False + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\BONEWORKS\BONEWORKS\MelonLoader\Managed\UnityEngine.AnimationModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\BONEWORKS\BONEWORKS\MelonLoader\Managed\UnityEngine.CoreModule.dll diff --git a/BoneSync/MelonLoaderMod.cs b/BoneSync/MelonLoaderMod.cs index c03b63c..dea54f0 100644 --- a/BoneSync/MelonLoaderMod.cs +++ b/BoneSync/MelonLoaderMod.cs @@ -3,15 +3,17 @@ using BoneSync.Networking.LobbyManager; using BoneSync.Networking.Transport; using MelonLoader; using HarmonyLib; +using UnityEngine; +using BoneSync.PlayerRigs; namespace BoneSync { public static class BuildInfo { public const string Name = "BoneSync"; // Name of the Mod. (MUST BE SET) - public const string Author = null; // Author of the Mod. (Set as null if none) + public const string Author = "aarov"; // Author of the Mod. (Set as null if none) public const string Company = null; // Company that made the Mod. (Set as null if none) - public const string Version = "1.0.0"; // Version of the Mod. (MUST BE SET) + public const string Version = "0.0.1"; // Version of the Mod. (MUST BE SET) public const string DownloadLink = null; // Download Link for the Mod. (Set as null if none) } @@ -32,7 +34,7 @@ namespace BoneSync public static void PatchAll() { - HarmonyLib.Harmony harmony = new HarmonyLib.Harmony("com.bonesync"); + HarmonyLib.Harmony harmony = new HarmonyLib.Harmony("com.aarov.bonesync"); harmony.PatchAll(); } @@ -54,6 +56,22 @@ namespace BoneSync public override void OnUpdate() { transport.Tick(); + PlayerRig.Tick(); + + if (Input.GetKeyDown(KeyCode.P)) + { + MelonLogger.Msg("P key pressed"); + PlayerRig playerRig = PlayerRig.InstantiatePlayerRigPrefab(); + if (playerRig == null) + { + MelonLogger.Error("Failed to instantiate player rig prefab"); + return; + } + else + { + MelonLogger.Msg("Player rig instantiated"); + } + } } public override void OnFixedUpdate() diff --git a/BoneSync/Networking/Transport/SteamTransport.cs b/BoneSync/Networking/Transport/SteamTransport.cs index 56303af..4f12f75 100644 --- a/BoneSync/Networking/Transport/SteamTransport.cs +++ b/BoneSync/Networking/Transport/SteamTransport.cs @@ -18,12 +18,34 @@ namespace BoneSync.Networking.Transport { SteamNetworking.OnP2PSessionRequest += OnP2PSessionRequest; } - + private List OpenP2PConnections = new List(); private void OnP2PSessionRequest(SteamId steamId) { MelonLogger.Msg("P2P Request from " + steamId); if (BoneSync.lobby.GetPeers().Contains(steamId)) + { SteamNetworking.AcceptP2PSessionWithUser(steamId); + if (!OpenP2PConnections.Contains(steamId)) + { + OpenP2PConnections.Add(steamId); + } + } + + + } + + private void CleanUp() + { + ulong[] peers = BoneSync.lobby.GetPeers(); + for (int i = 0; i < OpenP2PConnections.Count; i++) + { + SteamId peer = OpenP2PConnections[i]; + if (!peers.Contains(peer)) + { + OpenP2PConnections.RemoveAt(i); + i--; + } + } } private void ProcessPacket(P2Packet steamPacket) @@ -35,8 +57,10 @@ namespace BoneSync.Networking.Transport Packet.OnPacketReceived(packet); } } + public override bool Tick() { + if (!SteamClient.IsValid) return false; int processed = 0; while (SteamNetworking.IsP2PPacketAvailable()) { diff --git a/BoneSync/PlayerRigs/PlayerRig.cs b/BoneSync/PlayerRigs/PlayerRig.cs index 66b1564..2cc480a 100644 --- a/BoneSync/PlayerRigs/PlayerRig.cs +++ b/BoneSync/PlayerRigs/PlayerRig.cs @@ -8,6 +8,7 @@ using UnityEngine; using StressLevelZero; using StressLevelZero.Rig; using StressLevelZero.Player; +using StressLevelZero.VRMK; namespace BoneSync.PlayerRigs @@ -16,14 +17,44 @@ namespace BoneSync.PlayerRigs { private const string RIGMANAGER_SCENE_NAME = "[RigManager (Default Brett)]"; private static GameObject _rigPrefabCache = null; + private static List _playerRigs = new List(); - private Rig[] rigs; private GameObject playerRig; + private RigManager rigManager; + private SLZ_Body body; + private CharacterAnimationManager characterAnimationManager; + private Animator repAnimator; + + + + + public static void Tick() + { + TryRegisterRigPrefab(); + foreach (PlayerRig playerRig in _playerRigs) + { + try + { + playerRig.UpdateRig(); + } catch (Exception e) + { + MelonLogger.Error(e.Message); + //MelonLogger.Error("Failed to update player rig"); + } + + } + } + public static void TryRegisterRigPrefab() + { + if (_rigPrefabCache) return; + GetPlayerRigPrefab(); + } public static GameObject GetPlayerRigPrefab() { if (_rigPrefabCache == null) { + // find the rig game object in the scene GameObject playerRig = GameObject.Find(RIGMANAGER_SCENE_NAME); if (playerRig == null) { @@ -32,35 +63,62 @@ namespace BoneSync.PlayerRigs } // create a clone of the rig GameObject playerRep = GameObject.Instantiate(playerRig); + playerRep.gameObject.SetActive(false); playerRep.name = "[RigManager (Networked)]"; - GameObject.DestroyImmediate(playerRep.transform.Find("[ControllerRig (SteamVR)]")); - GameObject.DestroyImmediate(playerRep.transform.Find("OVRCameraRig")); - GameObject.DestroyImmediate(playerRep.transform.Find("[UIRig]")); - GameObject.DestroyImmediate(playerRep.transform.Find("AirParticles")); - GameObject.DestroyImmediate(playerRep.transform.Find("Vignetter")); + RigManager repRigManager = playerRep.GetComponent(); + repRigManager.oculusControllerRig.gameObject.SetActive(false); + repRigManager.steamControllerRig.gameObject.SetActive(false); + repRigManager.uiRig.gameObject.SetActive(false); + repRigManager.enabled = false; + + + _rigPrefabCache = playerRep; + MelonLogger.Msg("Player rig prefab created"); } return _rigPrefabCache; } public static PlayerRig InstantiatePlayerRigPrefab() { - GameObject playerRig = GetPlayerRigPrefab(); - if (playerRig == null) + GameObject prefab = GetPlayerRigPrefab(); + if (prefab == null) { return null; } - return new PlayerRig(playerRig); + GameObject go = GameObject.Instantiate(prefab); + go.SetActive(true); + PlayerRig playerRig = new PlayerRig(go); + + return playerRig; } - - private PlayerRig(GameObject playerRig) + private void UpdateRig() { - this.playerRig = playerRig; - rigs = playerRig.GetComponentsInChildren(); - Rig rig = rigs[0]; - rig.DisableBallLoco(); + Vector3 velocity = Vector3.zero; + Vector3 acceleration = Vector3.zero; + //SkeletonRig skeletonRig = rigManager.gameWorldSkeletonRig; + //skeletonRig.OnLateUpdate(); + rigManager.ControllerRig.gameObject.SetActive(false); + characterAnimationManager.OnLateUpdate(); + body.FullBodyUpdate(velocity, acceleration); + body.ArtToBlender.UpdateBlender(); + repAnimator.Update(Time.deltaTime); + } + private PlayerRig(GameObject go) + { + playerRig = go; + rigManager = playerRig.GetComponent(); + rigManager.enabled = true; + UpdateRig(); + _playerRigs.Add(this); + } + + public void Destroy() + { + _playerRigs.Remove(this); + GameObject.Destroy(playerRig); } } } diff --git a/BoneSync/Properties/AssemblyInfo.cs b/BoneSync/Properties/AssemblyInfo.cs index e957f12..321a5d6 100644 --- a/BoneSync/Properties/AssemblyInfo.cs +++ b/BoneSync/Properties/AssemblyInfo.cs @@ -16,6 +16,7 @@ using MelonLoader; [assembly: AssemblyVersion(BoneSync.BuildInfo.Version)] [assembly: AssemblyFileVersion(BoneSync.BuildInfo.Version)] [assembly: NeutralResourcesLanguage("en")] +[assembly: MelonOptionalDependencies("xunit.assert", "xunit.core")] // users don't need to install xunit.assert and xunit.core to use this mod [assembly: MelonInfo(typeof(BoneSync.BoneSync), BoneSync.BuildInfo.Name, BoneSync.BuildInfo.Version, BoneSync.BuildInfo.Author, BoneSync.BuildInfo.DownloadLink)]