SDM_LethalCompany_Mod/ScarletMansion/ScarletMansion/SyncedInstance.cs
LadyAliceMargatroid 523e7ed898 Added BrachTileBoost system
Added the new coilhead behaviour to the knight
Added treasure room puzzle for bedroom
Changed many LogInfo into LogDebug
Removed jank animator override stuff (no offense)
Changed how treasure rooms lock their doors to work in multiplayer
Removed basement scripts
2024-08-19 02:44:15 -07:00

83 lines
2.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Unity.Netcode;
using OdinSerializer;
using System.IO;
using HarmonyLib;
using BepInEx.Configuration;
using BepInEx.Logging;
using UnityEngine;
namespace ScarletMansion {
[Serializable]
public class SyncedInstance<T> {
internal static CustomMessagingManager MessageManager => NetworkManager.Singleton.CustomMessagingManager;
internal static bool IsClient => NetworkManager.Singleton.IsClient;
internal static bool IsHost => NetworkManager.Singleton.IsHost;
internal static ManualLogSource logger => Plugin.logger;
[NonSerialized]
protected static int IntSize = 4;
public static T Default { get; private set; }
public static T Instance { get; private set; }
public static bool Synced { get; internal set; }
protected void InitInstance(T instance) {
Default = instance;
Instance = instance;
// Makes sure the size of an integer is correct for the current system.
// We use 4 by default as that's the size of an int on 32 and 64 bit systems.
IntSize = sizeof(int);
}
internal static void SyncInstance(byte[] data) {
Instance = DeserializeFromBytes(data);
Synced = true;
}
internal static void RevertSync() {
Instance = Default;
Synced = false;
}
public static byte[] SerializeToBytes(T val) {
try {
return SerializationUtility.SerializeValue(val, DataFormat.Binary);
}
catch (Exception e) {
logger.LogError($"Error serializing instance: {e}");
return null;
}
}
public static T DeserializeFromBytes(byte[] data) {
try {
return SerializationUtility.DeserializeValue<T>(data, DataFormat.Binary);
} catch (Exception e) {
logger.LogError($"Error deserializing instance: {e}");
return default;
}
}
public static void SendMessage(FastBufferWriter stream, string title, ulong clientId = 0uL){
var pastCapacity = stream.Capacity > 1300;
var flag = pastCapacity ? NetworkDelivery.ReliableFragmentedSequenced : NetworkDelivery.Reliable;
if (pastCapacity){
logger.LogDebug("Stream is past capacity. Sending fragmented message");
}
MessageManager.SendNamedMessage(title, clientId, stream, flag);
Plugin.logger.LogDebug($"Send message to client {clientId} with title {title} and flag {flag}");
}
}
}