I dont know what i am doing

This commit is contained in:
2025-02-26 13:53:46 +02:00
parent c1c879c80c
commit b721e2d25e
5 changed files with 124 additions and 19 deletions

View File

@@ -88,6 +88,10 @@
<Reference Include="UnityEngine">
<HintPath>..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\BONEWORKS\BONEWORKS\MelonLoader\Managed\UnityEngine.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AnimationModule, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\BONEWORKS\BONEWORKS\MelonLoader\Managed\UnityEngine.AnimationModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.CoreModule">
<HintPath>..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\BONEWORKS\BONEWORKS\MelonLoader\Managed\UnityEngine.CoreModule.dll</HintPath>
</Reference>

View File

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

View File

@@ -18,12 +18,34 @@ namespace BoneSync.Networking.Transport
{
SteamNetworking.OnP2PSessionRequest += OnP2PSessionRequest;
}
private List<SteamId> OpenP2PConnections = new List<SteamId>();
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())
{

View File

@@ -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<PlayerRig> _playerRigs = new List<PlayerRig>();
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<RigManager>();
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 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>();
rigManager.enabled = true;
UpdateRig();
_playerRigs.Add(this);
}
public void Destroy()
{
_playerRigs.Remove(this);
GameObject.Destroy(playerRig);
}
}
}

View File

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