Fix stuff?

This commit is contained in:
Aaro Varis
2025-03-10 01:54:27 +02:00
parent f9db5be09b
commit 00f0a33a47
9 changed files with 49 additions and 6 deletions

View File

@@ -42,7 +42,7 @@ namespace BoneSync.Networking.Messages
public override void Execute() public override void Execute()
{ {
MelonLogger.Msg("Got PlugSyncMessage " + messageData.plugSyncId + ":" + messageData.plugIndex + " " + messageData.socketSyncId + ":" + messageData.socketIndex); //MelonLogger.Msg("Got PlugSyncMessage " + messageData.plugSyncId + ":" + messageData.plugIndex + " " + messageData.socketSyncId + ":" + messageData.socketIndex);
Syncable plugSyncable = ObjectSyncCache.GetSyncable(messageData.plugSyncId); Syncable plugSyncable = ObjectSyncCache.GetSyncable(messageData.plugSyncId);
Syncable socketSyncable = ObjectSyncCache.GetSyncable(messageData.socketSyncId); Syncable socketSyncable = ObjectSyncCache.GetSyncable(messageData.socketSyncId);
@@ -76,7 +76,7 @@ namespace BoneSync.Networking.Messages
return; return;
} }
MelonLogger.Msg("Inserting networked plug"); //MelonLogger.Msg("Inserting networked plug");
plug.SafeInsert(socket); plug.SafeInsert(socket);
} }

View File

@@ -2,6 +2,7 @@
using BoneSync.Networking.Messages; using BoneSync.Networking.Messages;
using BoneSync.Sync; using BoneSync.Sync;
using Facepunch.Steamworks; using Facepunch.Steamworks;
using MelonLoader;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@@ -145,6 +146,7 @@ namespace BoneSync.Networking
{ {
bool addToQueue = networkMessage.GetCatchupOrder() > 0; bool addToQueue = networkMessage.GetCatchupOrder() > 0;
if (!addToQueue) return false; if (!addToQueue) return false;
MelonLogger.Msg("Adding packet to queue for scene " + packet._packetInfo.sceneIndex);
EnsureQueueForScene(packet._packetInfo.sceneIndex); EnsureQueueForScene(packet._packetInfo.sceneIndex);
_packetQueues[packet._packetInfo.sceneIndex].Enqueue(networkMessage); _packetQueues[packet._packetInfo.sceneIndex].Enqueue(networkMessage);
return true; return true;
@@ -174,6 +176,10 @@ namespace BoneSync.Networking
NetworkMessage networkMessage = queue.Dequeue(); NetworkMessage networkMessage = queue.Dequeue();
networkMessage.Execute(); networkMessage.Execute();
} }
if (processed > 0)
{
MelonLogger.Msg("Processed " + processed + " queued packets for scene " + sceneIndex);
}
} }
public byte[] Data => _dataBytes; public byte[] Data => _dataBytes;

View File

@@ -54,7 +54,7 @@ namespace BoneSync.Patching
byte plugId = plugSyncable.GetPlugId(plug); byte plugId = plugSyncable.GetPlugId(plug);
byte socketId = socketSyncable != null ? socketSyncable.GetSocketId(socket) : byte.MaxValue; byte socketId = socketSyncable != null ? socketSyncable.GetSocketId(socket) : byte.MaxValue;
MelonLogger.Msg("AlignPlug state:" + plug.transform.GetPath() + " Socket:" + socket?.transform?.GetPath() + " PlugID:" + plugId + " SocketID:" + socketId); //MelonLogger.Msg("AlignPlug state:" + plug.transform.GetPath() + " Socket:" + socket?.transform?.GetPath() + " PlugID:" + plugId + " SocketID:" + socketId);
if (!plugSyncable.isOwner) return; if (!plugSyncable.isOwner) return;

View File

@@ -127,6 +127,7 @@ namespace BoneSync.Patching
} }
// SceneZone and PlayerTrigger patches are based on the ones from entanglement mod // SceneZone and PlayerTrigger patches are based on the ones from entanglement mod
/*
[HarmonyPatch(typeof(SceneZone))] [HarmonyPatch(typeof(SceneZone))]
public static class SceneZonePatch public static class SceneZonePatch
{ {
@@ -185,5 +186,5 @@ namespace BoneSync.Patching
return true; return true;
} }
} }*/
} }

View File

@@ -16,6 +16,7 @@ namespace BoneSync.Sync.Components
private void TrySendAISync() private void TrySendAISync()
{ {
if (!Registered) return;
if (!isOwner) return; if (!isOwner) return;
if (!aiBrain) return; if (!aiBrain) return;
if (Time.realtimeSinceStartup - _lastAISyncTime > 1 / AI_SYNC_FPS) if (Time.realtimeSinceStartup - _lastAISyncTime > 1 / AI_SYNC_FPS)

View File

@@ -156,6 +156,7 @@ namespace BoneSync.Sync.Components
public bool ShouldAutoSync() public bool ShouldAutoSync()
{ {
if (SceneSync.TimeSinceLastSceneChange < 5f) return false; // don't sync if scene just changed, to prevent some weird stuff that happens when a level is loaded
if (InPoolManagerTransform()) return false; if (InPoolManagerTransform()) return false;
if (!gameObject.activeInHierarchy) return false; if (!gameObject.activeInHierarchy) return false;
if (poolee && poolee.pool) { if (poolee && poolee.pool) {

View File

@@ -19,6 +19,11 @@ namespace BoneSync.Sync.Components
_lastSyncTime = Time.realtimeSinceStartup; _lastSyncTime = Time.realtimeSinceStartup;
ObjectSync.SendObjectSyncMessage(this); ObjectSync.SendObjectSyncMessage(this);
} }
private void TrySendObjectSync()
{
if (ShouldSendSync()) SendObjectSync();
}
public IEnumerator SyncCoroutineAsync() public IEnumerator SyncCoroutineAsync()
{ {
MelonLogger.Msg("Running sync coroutine for: " + transform.GetPath()); MelonLogger.Msg("Running sync coroutine for: " + transform.GetPath());
@@ -26,7 +31,9 @@ namespace BoneSync.Sync.Components
_syncCoroutineRunning = true; _syncCoroutineRunning = true;
while (isOwner) while (isOwner)
{ {
if (ShouldSendSync()) SendObjectSync(); TrySendAISync();
TrySendObjectSync();
//TrySendPlugSync();
yield return new WaitForSeconds(!Registered ? 1 : 1 / SYNC_FPS); yield return new WaitForSeconds(!Registered ? 1 : 1 / SYNC_FPS);
} }
_syncCoroutineRunning = false; _syncCoroutineRunning = false;

View File

@@ -6,6 +6,7 @@ using System.Threading.Tasks;
using UnityEngine; using UnityEngine;
using MelonLoader; using MelonLoader;
using StressLevelZero.Interaction; using StressLevelZero.Interaction;
using BoneSync.Patching;
namespace BoneSync.Sync.Components namespace BoneSync.Sync.Components
{ {
@@ -64,6 +65,30 @@ namespace BoneSync.Sync.Components
} }
public partial class Syncable : MonoBehaviour public partial class Syncable : MonoBehaviour
{ {
private float _lastPlugSyncTime;
private const float PLUG_SYNC_FPS = 1f;
private void TrySendPlugSync()
{
if (!Registered) return;
if (!isOwner) return;
if (Time.realtimeSinceStartup - _lastPlugSyncTime > 1 / PLUG_SYNC_FPS)
{
_SendPlugSync();
}
}
private void _SendPlugSync()
{
if (!isOwner) return;
if (!Registered) return;
foreach (AlignPlug plug in plugs)
{
if (!plug) continue;
Socket socket = plug.GetSocket();
AlignPlugPatches.OnPlugSocketChange(plug, socket);
_lastPlugSyncTime = Time.realtimeSinceStartup;
}
}
public void EjectAllPlugs(bool force = false) public void EjectAllPlugs(bool force = false)
{ {

View File

@@ -17,7 +17,8 @@ namespace BoneSync.Sync
private static List<Scene> scenes = new List<Scene>(); private static List<Scene> scenes = new List<Scene>();
private static string _currentSceneName; private static string _currentSceneName;
private static int _currentSceneIndex; private static int _currentSceneIndex;
private static float _lastSceneChangeTime;
public static float TimeSinceLastSceneChange => Time.realtimeSinceStartup - _lastSceneChangeTime;
public static int CurrentSceneIndex => _currentSceneIndex; public static int CurrentSceneIndex => _currentSceneIndex;
public static string CurrentSceneDisplayName public static string CurrentSceneDisplayName
@@ -69,6 +70,7 @@ namespace BoneSync.Sync
public static void OnSceneInit(int buildIndex) public static void OnSceneInit(int buildIndex)
{ {
Scene scene = SceneManager.GetSceneByBuildIndex(buildIndex); Scene scene = SceneManager.GetSceneByBuildIndex(buildIndex);
_lastSceneChangeTime = Time.realtimeSinceStartup;
_currentSceneIndex = buildIndex; _currentSceneIndex = buildIndex;
string SceneName = scene.name; string SceneName = scene.name;
_currentSceneName = SceneName; _currentSceneName = SceneName;