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