aaaaaaaaa

This commit is contained in:
Mister_Nebula 2021-12-28 18:06:34 +00:00
parent bbb498ae0c
commit 2c903f079a
33 changed files with 188 additions and 169 deletions

View File

@ -14,7 +14,7 @@ namespace QSB.Anglerfish
{
Anglers.Clear();
Anglers.AddRange(QSBWorldSync.GetUnityObjects<AnglerfishController>());
QSBWorldSync.Init<QSBAngler, AnglerfishController>(Anglers);
QSBWorldSync.Init<QSBAngler, AnglerfishController>(Anglers, this);
}
}
}

View File

@ -10,12 +10,12 @@ namespace QSB.Animation.NPC
protected override void RebuildWorldObjects(OWScene scene)
{
QSBWorldSync.Init<QSBCharacterAnimController, CharacterAnimController>();
QSBWorldSync.Init<QSBTravelerController, TravelerController>();
QSBWorldSync.Init<QSBSolanumController, NomaiConversationManager>();
QSBWorldSync.Init<QSBSolanumAnimController, SolanumAnimController>();
QSBWorldSync.Init<QSBHearthianRecorderEffects, HearthianRecorderEffects>();
QSBWorldSync.Init<QSBTravelerEyeController, TravelerEyeController>();
QSBWorldSync.Init<QSBCharacterAnimController, CharacterAnimController>(this);
QSBWorldSync.Init<QSBTravelerController, TravelerController>(this);
QSBWorldSync.Init<QSBSolanumController, NomaiConversationManager>(this);
QSBWorldSync.Init<QSBSolanumAnimController, SolanumAnimController>(this);
QSBWorldSync.Init<QSBHearthianRecorderEffects, HearthianRecorderEffects>(this);
QSBWorldSync.Init<QSBTravelerEyeController, TravelerEyeController>(this);
//MOVE : this is the wrong place to put this... move it to Conversations?
QSBWorldSync.OldDialogueTrees.Clear();

View File

@ -8,6 +8,6 @@ namespace QSB.CampfireSync
public override WorldObjectType WorldObjectType => WorldObjectType.Both;
protected override void RebuildWorldObjects(OWScene scene)
=> QSBWorldSync.Init<QSBCampfire, Campfire>();
=> QSBWorldSync.Init<QSBCampfire, Campfire>(this);
}
}

View File

@ -38,7 +38,7 @@ namespace QSB.ConversationSync
}
protected override void RebuildWorldObjects(OWScene scene)
=> QSBWorldSync.Init<QSBRemoteDialogueTrigger, RemoteDialogueTrigger>();
=> QSBWorldSync.Init<QSBRemoteDialogueTrigger, RemoteDialogueTrigger>(this);
public uint GetPlayerTalkingToTree(CharacterDialogueTree tree)
{

View File

@ -8,6 +8,6 @@ namespace QSB.EchoesOfTheEye.AirlockSync
// is this used in the prisoner sequence in the eye?
public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem;
protected override void RebuildWorldObjects(OWScene scene) => QSBWorldSync.Init<QSBGhostAirlock, GhostAirlock>();
protected override void RebuildWorldObjects(OWScene scene) => QSBWorldSync.Init<QSBGhostAirlock, GhostAirlock>(this);
}
}

View File

@ -8,6 +8,6 @@ namespace QSB.EchoesOfTheEye.LightSensorSync
// see AirlockManager question
public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem;
protected override void RebuildWorldObjects(OWScene scene) => QSBWorldSync.Init<QSBSingleLightSensor, SingleLightSensor>();
protected override void RebuildWorldObjects(OWScene scene) => QSBWorldSync.Init<QSBSingleLightSensor, SingleLightSensor>(this);
}
}

View File

@ -8,6 +8,6 @@ namespace QSB.ElevatorSync
public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem;
protected override void RebuildWorldObjects(OWScene scene)
=> QSBWorldSync.Init<QSBElevator, Elevator>();
=> QSBWorldSync.Init<QSBElevator, Elevator>(this);
}
}

View File

@ -8,6 +8,6 @@ namespace QSB.EyeOfTheUniverse.InstrumentSync
public override WorldObjectType WorldObjectType => WorldObjectType.Eye;
protected override void RebuildWorldObjects(OWScene scene)
=> QSBWorldSync.Init<QSBQuantumInstrument, QuantumInstrument>();
=> QSBWorldSync.Init<QSBQuantumInstrument, QuantumInstrument>(this);
}
}

View File

@ -8,6 +8,6 @@ namespace QSB.GeyserSync
public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem;
protected override void RebuildWorldObjects(OWScene scene)
=> QSBWorldSync.Init<QSBGeyser, GeyserController>();
=> QSBWorldSync.Init<QSBGeyser, GeyserController>(this);
}
}

View File

@ -15,20 +15,20 @@ namespace QSB.ItemSync
DebugLog.DebugWrite("Rebuilding OWItems...", MessageType.Info);
// Items
QSBWorldSync.Init<QSBScrollItem, ScrollItem>();
QSBWorldSync.Init<QSBSharedStone, SharedStone>();
QSBWorldSync.Init<QSBWarpCoreItem, WarpCoreItem>();
QSBWorldSync.Init<QSBNomaiConversationStone, NomaiConversationStone>();
QSBWorldSync.Init<QSBSimpleLanternItem, SimpleLanternItem>();
QSBWorldSync.Init<QSBSlideReelItem, SlideReelItem>();
QSBWorldSync.Init<QSBScrollItem, ScrollItem>(this);
QSBWorldSync.Init<QSBSharedStone, SharedStone>(this);
QSBWorldSync.Init<QSBWarpCoreItem, WarpCoreItem>(this);
QSBWorldSync.Init<QSBNomaiConversationStone, NomaiConversationStone>(this);
QSBWorldSync.Init<QSBSimpleLanternItem, SimpleLanternItem>(this);
QSBWorldSync.Init<QSBSlideReelItem, SlideReelItem>(this);
// Sockets
QSBWorldSync.Init<QSBScrollSocket, ScrollSocket>();
QSBWorldSync.Init<QSBSharedStoneSocket, SharedStoneSocket>();
QSBWorldSync.Init<QSBWarpCoreSocket, WarpCoreSocket>();
QSBWorldSync.Init<QSBNomaiConversationStoneSocket, NomaiConversationStoneSocket>();
QSBWorldSync.Init<QSBSlideReelSocket, SlideReelSocket>();
QSBWorldSync.Init<QSBSlideProjectorSocket, SlideProjectorSocket>();
QSBWorldSync.Init<QSBScrollSocket, ScrollSocket>(this);
QSBWorldSync.Init<QSBSharedStoneSocket, SharedStoneSocket>(this);
QSBWorldSync.Init<QSBWarpCoreSocket, WarpCoreSocket>(this);
QSBWorldSync.Init<QSBNomaiConversationStoneSocket, NomaiConversationStoneSocket>(this);
QSBWorldSync.Init<QSBSlideReelSocket, SlideReelSocket>(this);
QSBWorldSync.Init<QSBSlideProjectorSocket, SlideProjectorSocket>(this);
}
}
}

View File

@ -14,7 +14,7 @@ namespace QSB.JellyfishSync
{
Jellyfish.Clear();
Jellyfish.AddRange(QSBWorldSync.GetUnityObjects<JellyfishController>());
QSBWorldSync.Init<QSBJellyfish, JellyfishController>(Jellyfish);
QSBWorldSync.Init<QSBJellyfish, JellyfishController>(Jellyfish, this);
}
}
}

View File

@ -18,9 +18,9 @@ namespace QSB.MeteorSync
{
FinishDelayedReady();
WhiteHoleVolume = QSBWorldSync.GetUnityObjects<WhiteHoleVolume>().First();
QSBWorldSync.Init<QSBMeteorLauncher, MeteorLauncher>();
QSBWorldSync.Init<QSBMeteor, MeteorController>();
QSBWorldSync.Init<QSBFragment, FragmentIntegrity>();
QSBWorldSync.Init<QSBMeteorLauncher, MeteorLauncher>(this);
QSBWorldSync.Init<QSBMeteor, MeteorController>(this);
QSBWorldSync.Init<QSBFragment, FragmentIntegrity>(this);
});
}
}

View File

@ -14,7 +14,7 @@ namespace QSB.OrbSync
{
Orbs.Clear();
Orbs.AddRange(QSBWorldSync.GetUnityObjects<NomaiInterfaceOrb>());
QSBWorldSync.Init<QSBOrb, NomaiInterfaceOrb>(Orbs);
QSBWorldSync.Init<QSBOrb, NomaiInterfaceOrb>(Orbs, this);
}
}
}

View File

@ -47,7 +47,7 @@ namespace QSB
public static bool DebugMode => DebugSettings.DebugMode;
public static bool ShowLinesInDebug => DebugMode && DebugSettings.DrawLines;
public static bool ShowQuantumVisibilityObjects => DebugMode && DebugSettings.ShowQuantumVisibilityObjects;
public static bool ShowQuantumDebugBoxes => DebugMode && DebugSettings.ShowQuantumDebugBoxes;
public static bool ShowDebugLabels => DebugMode && DebugSettings.ShowDebugLabels;
public static bool AvoidTimeSync => DebugMode && DebugSettings.AvoidTimeSync;
public static bool SkipTitleScreen => DebugMode && DebugSettings.SkipTitleScreen;
public static AssetBundle NetworkAssetBundle { get; internal set; }
@ -114,8 +114,6 @@ namespace QSB
gameObject.AddComponent(type);
}
DebugBoxManager.Init();
Helper.HarmonyHelper.EmptyMethod<ModCommandListener>("Update");
QSBPatchManager.OnPatchType += OnPatchType;

View File

@ -24,16 +24,6 @@ namespace QSB.QuantumSync.Messages
StateIndex = reader.ReadInt32();
}
public override void OnReceiveLocal()
{
if (!QSBCore.ShowQuantumDebugBoxes)
{
return;
}
WorldObject.DebugBoxText.text = StateIndex.ToString();
}
public override void OnReceiveRemote()
{
if (WorldObject.ControllingPlayer != From)

View File

@ -33,13 +33,13 @@ namespace QSB.QuantumSync
protected override void RebuildWorldObjects(OWScene scene)
{
DebugLog.DebugWrite("Rebuilding quantum objects...", MessageType.Info);
QSBWorldSync.Init<QSBQuantumState, QuantumState>();
QSBWorldSync.Init<QSBSocketedQuantumObject, SocketedQuantumObject>();
QSBWorldSync.Init<QSBMultiStateQuantumObject, MultiStateQuantumObject>();
QSBWorldSync.Init<QSBQuantumSocket, QuantumSocket>();
QSBWorldSync.Init<QSBQuantumShuffleObject, QuantumShuffleObject>();
QSBWorldSync.Init<QSBQuantumMoon, QuantumMoon>();
QSBWorldSync.Init<QSBEyeProxyQuantumMoon, EyeProxyQuantumMoon>();
QSBWorldSync.Init<QSBQuantumState, QuantumState>(this);
QSBWorldSync.Init<QSBSocketedQuantumObject, SocketedQuantumObject>(this);
QSBWorldSync.Init<QSBMultiStateQuantumObject, MultiStateQuantumObject>(this);
QSBWorldSync.Init<QSBQuantumSocket, QuantumSocket>(this);
QSBWorldSync.Init<QSBQuantumShuffleObject, QuantumShuffleObject>(this);
QSBWorldSync.Init<QSBQuantumMoon, QuantumMoon>(this);
QSBWorldSync.Init<QSBEyeProxyQuantumMoon, EyeProxyQuantumMoon>(this);
if (scene == OWScene.SolarSystem)
{
Shrine = QSBWorldSync.GetUnityObjects<QuantumShrine>().First();
@ -64,7 +64,7 @@ namespace QSB.QuantumSync
public void OnRenderObject()
{
if (!WorldObjectManager.AllObjectsReady || !QSBCore.ShowLinesInDebug)
if (!AllObjectsReady || !QSBCore.ShowLinesInDebug)
{
return;
}

View File

@ -1,33 +1,18 @@
using QSB.Utility;
using QSB.WorldSync;
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine.UI;
namespace QSB.QuantumSync.WorldObjects
{
internal class QSBMultiStateQuantumObject : QSBQuantumObject<MultiStateQuantumObject>
{
public List<QSBQuantumState> QuantumStates { get; private set; }
public Text DebugBoxText;
public int CurrentState => AttachedObject._stateIndex;
public override void OnRemoval()
{
base.OnRemoval();
if (DebugBoxText != null)
{
UnityEngine.Object.Destroy(DebugBoxText.gameObject);
}
}
public override void Init()
{
if (QSBCore.ShowQuantumDebugBoxes)
{
DebugBoxText = DebugBoxManager.CreateBox(AttachedObject.transform, 0, $"Multistate\r\nid:{ObjectId}\r\nstate:{CurrentState}").GetComponent<Text>();
}
base.Init();
StartDelayedReady();
@ -44,6 +29,9 @@ namespace QSB.QuantumSync.WorldObjects
});
}
public override string ReturnLabel()
=> $"{LogName}{Environment.NewLine}StateIndex:{AttachedObject._stateIndex}";
public void ChangeState(int newStateIndex)
{
if (CurrentState != -1)
@ -53,10 +41,6 @@ namespace QSB.QuantumSync.WorldObjects
QuantumStates[newStateIndex].SetVisible(true);
AttachedObject._stateIndex = newStateIndex;
if (QSBCore.ShowQuantumDebugBoxes)
{
DebugBoxText.text = $"Multistate\r\nid:{ObjectId}\r\nstate:{CurrentState}";
}
}
}
}

View File

@ -25,6 +25,8 @@ namespace QSB.QuantumSync.WorldObjects
}
}
public override bool ShouldDisplayLabel() => ControllingPlayer != 0;
public override void Init()
{
var debugBundle = QSBCore.DebugAssetBundle;

View File

@ -2,31 +2,30 @@
using QSB.Player;
using QSB.Utility;
using QSB.WorldSync;
using System;
using UnityEngine;
using UnityEngine.UI;
namespace QSB.QuantumSync.WorldObjects
{
internal class QSBSocketedQuantumObject : QSBQuantumObject<SocketedQuantumObject>
{
public Text DebugBoxText;
public override void Init()
{
base.Init();
AttachedObject._randomYRotation = false;
if (QSBCore.ShowQuantumDebugBoxes)
{
DebugBoxText = DebugBoxManager.CreateBox(AttachedObject.transform, 0, $"Socketed\r\nid:{ObjectId}").GetComponent<Text>();
}
}
public override void OnRemoval()
public override string ReturnLabel()
{
base.OnRemoval();
if (DebugBoxText != null)
var socket = AttachedObject.GetCurrentSocket();
if (socket != null)
{
Object.Destroy(DebugBoxText.gameObject);
var socketObj = QSBWorldSync.GetWorldObject<QSBQuantumSocket>(socket);
return $"{LogName}{Environment.NewLine}SocketId:{socketObj.ObjectId}";
}
else
{
return $"{LogName}{Environment.NewLine}SocketId:NULL";
}
}

View File

@ -89,7 +89,7 @@ namespace QSB.SectorSync
}
}
QSBWorldSync.Init<QSBSector, Sector>();
QSBWorldSync.Init<QSBSector, Sector>(this);
IsReady = QSBWorldSync.GetWorldObjects<QSBSector>().Any();
}

View File

@ -91,8 +91,8 @@ namespace QSB.ShipSync
Instantiate(QSBNetworkManager.Instance.ShipPrefab).SpawnWithServerAuthority();
}
QSBWorldSync.Init<QSBShipComponent, ShipComponent>();
QSBWorldSync.Init<QSBShipHull, ShipHull>();
QSBWorldSync.Init<QSBShipComponent, ShipComponent>(this);
QSBWorldSync.Init<QSBShipHull, ShipHull>(this);
}
public void AddPlayerToShip(PlayerInfo player)

View File

@ -104,7 +104,6 @@ namespace QSB.Syncs
protected virtual float DistanceLeeway { get; } = 5f;
private float _previousDistance;
protected const float SmoothTime = 0.1f;
protected const int MaxLabelSize = 15;
private Vector3 _positionSmoothVelocity;
private Quaternion _rotationSmoothVelocity;
protected bool _isInitialized;
@ -298,37 +297,10 @@ namespace QSB.Syncs
void OnGUI()
{
GUIStyle guiStyle = new();
guiStyle.normal.textColor = Color.white;
GUI.contentColor = Color.white;
if (Locator.GetPlayerCamera() == null)
if (AttachedObject != null)
{
return;
DebugGUI.DrawLabel(AttachedObject.transform, LogName);
}
if (AttachedObject == null)
{
return;
}
var screenPosition = Locator.GetPlayerCamera().WorldToScreenPoint(AttachedObject.transform.position);
var distance = screenPosition.z;
var mappedFontSize = distance.Map(0, 250, MaxLabelSize, 0, true);
guiStyle.fontSize = (int)mappedFontSize;
if ((int)mappedFontSize <= 0)
{
return;
}
if ((int)mappedFontSize >= MaxLabelSize)
{
return;
}
// WorldToScreenPoint's (0,0) is at screen bottom left, GUI's (0,0) is at screen top left. grrrr
GUI.Label(new Rect(screenPosition.x, Screen.height - screenPosition.y, 100f, 20f), LogName, guiStyle);
}
}
}

View File

@ -8,6 +8,6 @@ namespace QSB.Tools.ProbeLauncherTool
public override WorldObjectType WorldObjectType => WorldObjectType.Both;
protected override void RebuildWorldObjects(OWScene scene)
=> QSBWorldSync.Init<QSBProbeLauncher, ProbeLauncher>(typeof(PlayerProbeLauncher));
=> QSBWorldSync.Init<QSBProbeLauncher, ProbeLauncher>(this, typeof(PlayerProbeLauncher));
}
}

View File

@ -14,7 +14,7 @@ namespace QSB.Tools.TranslatorTool.TranslationSync
QSBCore.UnityEvents.RunWhen(() => LateInitializerManager.isDoneInitializing, () =>
{
FinishDelayedReady();
QSBWorldSync.Init<QSBNomaiText, NomaiText>(typeof(GhostWallText));
QSBWorldSync.Init<QSBNomaiText, NomaiText>(this, typeof(GhostWallText));
});
}
}

View File

@ -12,7 +12,7 @@ namespace QSB.TornadoSync
protected override void RebuildWorldObjects(OWScene scene)
{
QSBWorldSync.Init<QSBTornado, TornadoController>();
QSBWorldSync.Init<QSBTornado, TornadoController>(this);
if (!QSBCore.IsHost)
{

View File

@ -1,36 +0,0 @@
using OWML.Common;
using UnityEngine;
using UnityEngine.UI;
namespace QSB.Utility
{
public static class DebugBoxManager
{
private static GameObject _boxPrefab;
public static void Init()
{
_boxPrefab = QSBCore.ConversationAssetBundle.LoadAsset<GameObject>("assets/Prefabs/dialoguebubble.prefab");
var font = (Font)Resources.Load(@"fonts\english - latin\spacemono-bold");
if (font == null)
{
DebugLog.ToConsole("Error - Font is null!", MessageType.Error);
}
_boxPrefab.GetComponent<Text>().font = font;
_boxPrefab.GetComponent<Text>().color = Color.white;
}
public static GameObject CreateBox(Transform parent, float vertOffset, string text)
{
var newBox = Object.Instantiate(_boxPrefab);
newBox.SetActive(false);
newBox.transform.SetParent(parent);
newBox.transform.localPosition = new Vector3(0, vertOffset, 0);
newBox.transform.rotation = parent.rotation;
newBox.GetComponent<Text>().text = text;
newBox.SetActive(true);
return newBox;
}
}
}

View File

@ -24,12 +24,16 @@ namespace QSB.Utility
private float column3Offset = 10f;
private const float Column4 = Column3 + FixedWidth;
private float column4Offset = 10f;
private const int MaxLabelSize = 15;
private const float MaxLabelDistance = 250;
private GUIStyle guiStyle = new()
private GUIStyle guiGUIStyle = new()
{
fontSize = 9
};
private static GUIStyle labelGUIStyle = new();
private void WriteLine(int collumnID, string text)
{
var currentOffset = 0f;
@ -58,14 +62,14 @@ namespace QSB.Utility
break;
}
GUI.Label(new Rect(x, currentOffset, FixedWidth, 20f), text, guiStyle);
GUI.Label(new Rect(x, currentOffset, FixedWidth, 20f), text, guiGUIStyle);
}
private void WriteLine(int collumnID, string text, Color color)
{
guiStyle.normal.textColor = color;
guiGUIStyle.normal.textColor = color;
WriteLine(collumnID, text);
guiStyle.normal.textColor = Color.white;
guiGUIStyle.normal.textColor = Color.white;
}
public void OnGUI()
@ -75,7 +79,7 @@ namespace QSB.Utility
return;
}
guiStyle.normal.textColor = Color.white;
guiGUIStyle.normal.textColor = Color.white;
GUI.contentColor = Color.white;
column1Offset = 10f;
@ -256,5 +260,84 @@ namespace QSB.Utility
}
#endregion
}
public static void DrawLabel(Transform obj, string label)
{
if (!QSBCore.ShowDebugLabels)
{
return;
}
var camera = Locator.GetPlayerCamera();
if (camera == null)
{
return;
}
if (obj == null)
{
return;
}
labelGUIStyle.normal.textColor = Color.white;
GUI.contentColor = Color.white;
var cheapDistance = (camera.transform.position - obj.transform.position).sqrMagnitude;
if (cheapDistance < 0)
{
return;
}
if (cheapDistance > MaxLabelDistance * MaxLabelDistance)
{
return;
}
var screenPosition = camera.WorldToScreenPoint(obj.position);
var distance = screenPosition.z;
if (distance < 0)
{
return;
}
if (distance > MaxLabelDistance)
{
return;
}
if (screenPosition.x < 0 || screenPosition.x > Screen.width)
{
return;
}
if (screenPosition.y < 0 || screenPosition.y > Screen.height)
{
return;
}
var mappedFontSize = distance.Map(0, MaxLabelDistance, MaxLabelSize, 0, true);
if ((int)mappedFontSize <= 0)
{
return;
}
if ((int)mappedFontSize >= MaxLabelSize)
{
return;
}
labelGUIStyle.fontSize = (int)mappedFontSize;
var rect = GUILayoutUtility.GetRect(new GUIContent(label), labelGUIStyle);
rect.x = screenPosition.x;
rect.y = Screen.height - screenPosition.y;
// WorldToScreenPoint's (0,0) is at screen bottom left, GUI's (0,0) is at screen top left. grrrr
GUI.Label(rect, label, labelGUIStyle);
}
}
}

View File

@ -13,8 +13,8 @@ namespace QSB.Utility
[JsonProperty("showQuantumVisibilityObjects")]
public bool ShowQuantumVisibilityObjects { get; set; } = false;
[JsonProperty("showQuantumDebugBoxes")]
public bool ShowQuantumDebugBoxes { get; set; } = false;
[JsonProperty("showDebugLabels")]
public bool ShowDebugLabels { get; set; } = false;
[JsonProperty("avoidTimeSync")]
public bool AvoidTimeSync { get; set; } = false;

View File

@ -5,9 +5,12 @@ namespace QSB.WorldSync
public interface IWorldObject
{
int ObjectId { get; }
WorldObjectManager Manager { get; }
string Name { get; }
void OnRemoval();
MonoBehaviour ReturnObject();
bool ShouldDisplayLabel();
string ReturnLabel();
}
}

View File

@ -82,6 +82,7 @@ namespace QSB.WorldSync
try
{
item.OnRemoval();
item.Manager.UnregisterWorldObject(item);
}
catch (Exception e)
{
@ -98,23 +99,23 @@ namespace QSB.WorldSync
=> Resources.FindObjectsOfTypeAll<TUnityObject>()
.Where(x => x.gameObject.scene.name != null);
public static void Init<TWorldObject, TUnityObject>()
public static void Init<TWorldObject, TUnityObject>(WorldObjectManager owner)
where TWorldObject : WorldObject<TUnityObject>, new()
where TUnityObject : MonoBehaviour
{
var list = GetUnityObjects<TUnityObject>();
Init<TWorldObject, TUnityObject>(list);
Init<TWorldObject, TUnityObject>(list, owner);
}
public static void Init<TWorldObject, TUnityObject>(params Type[] typesToExclude)
public static void Init<TWorldObject, TUnityObject>(WorldObjectManager owner, params Type[] typesToExclude)
where TWorldObject : WorldObject<TUnityObject>, new()
where TUnityObject : MonoBehaviour
{
var list = GetUnityObjects<TUnityObject>().Where(x => !typesToExclude.Contains(x.GetType()));
Init<TWorldObject, TUnityObject>(list);
Init<TWorldObject, TUnityObject>(list, owner);
}
public static void Init<TWorldObject, TUnityObject>(IEnumerable<TUnityObject> listToInitFrom)
public static void Init<TWorldObject, TUnityObject>(IEnumerable<TUnityObject> listToInitFrom, WorldObjectManager owner)
where TWorldObject : WorldObject<TUnityObject>, new()
where TUnityObject : MonoBehaviour
{
@ -124,12 +125,14 @@ namespace QSB.WorldSync
var obj = new TWorldObject
{
AttachedObject = item,
ObjectId = WorldObjects.Count
ObjectId = WorldObjects.Count,
Manager = owner
};
obj.Init();
WorldObjects.Add(obj);
WorldObjectsToUnityObjects.Add(item, obj);
owner.RegisterWorldObject(obj);
}
}

View File

@ -8,12 +8,15 @@ namespace QSB.WorldSync
{
public int ObjectId { get; init; }
public T AttachedObject { get; init; }
public WorldObjectManager Manager { get; init; }
public string Name => AttachedObject == null ? "<NullObject!>" : AttachedObject.name;
public string LogName => $"{QSBPlayerManager.LocalPlayerId}.{ObjectId}:{GetType().Name}";
public virtual void Init() { }
public virtual void OnRemoval() { }
public MonoBehaviour ReturnObject() => AttachedObject;
public virtual bool ShouldDisplayLabel() => true;
public virtual string ReturnLabel() => LogName;
/// indicates that this won't become ready immediately
protected void StartDelayedReady() => WorldObjectManager._numObjectsReadying++;

View File

@ -33,6 +33,8 @@ namespace QSB.WorldSync
/// </summary>
public abstract WorldObjectType WorldObjectType { get; }
private List<IWorldObject> _worldObjects = new List<IWorldObject>();
public virtual void Awake()
{
QSBSceneManager.OnSceneLoaded += OnSceneLoaded;
@ -57,6 +59,9 @@ namespace QSB.WorldSync
AllObjectsReady = false;
}
public void RegisterWorldObject(IWorldObject obj) => _worldObjects.Add(obj);
public void UnregisterWorldObject(IWorldObject obj) => _worldObjects.Remove(obj);
public static void Rebuild(OWScene scene)
{
if (!QSBNetworkManager.Instance.IsReady)
@ -126,5 +131,18 @@ namespace QSB.WorldSync
/// indicates that this is now ready
protected void FinishDelayedReady() => _numManagersReadying--;
private void OnGUI()
{
if (!QSBCore.ShowDebugLabels)
{
return;
}
foreach (var obj in _worldObjects)
{
DebugGUI.DrawLabel(obj.ReturnObject().transform, obj.ReturnLabel());
}
}
}
}

View File

@ -8,6 +8,6 @@ namespace QSB.ZeroGCaveSync
public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem;
protected override void RebuildWorldObjects(OWScene scene)
=> QSBWorldSync.Init<QSBSatelliteNode, SatelliteNode>();
=> QSBWorldSync.Init<QSBSatelliteNode, SatelliteNode>(this);
}
}