mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-04 03:39:55 +00:00
aaaaaaaaa
This commit is contained in:
parent
bbb498ae0c
commit
2c903f079a
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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}";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -25,6 +25,8 @@ namespace QSB.QuantumSync.WorldObjects
|
||||
}
|
||||
}
|
||||
|
||||
public override bool ShouldDisplayLabel() => ControllingPlayer != 0;
|
||||
|
||||
public override void Init()
|
||||
{
|
||||
var debugBundle = QSBCore.DebugAssetBundle;
|
||||
|
@ -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";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -89,7 +89,7 @@ namespace QSB.SectorSync
|
||||
}
|
||||
}
|
||||
|
||||
QSBWorldSync.Init<QSBSector, Sector>();
|
||||
QSBWorldSync.Init<QSBSector, Sector>(this);
|
||||
IsReady = QSBWorldSync.GetWorldObjects<QSBSector>().Any();
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
@ -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));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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++;
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user