make it work

This commit is contained in:
Mister_Nebula 2021-01-29 15:29:50 +00:00
parent b15f6a9f17
commit 50805753f5
13 changed files with 57 additions and 65 deletions

View File

@ -39,7 +39,6 @@ namespace QSB.QuantumSync.Events
public override void OnReceiveRemote(bool server, EnumMessage<EnterLeaveType> message)
{
var player = QSBPlayerManager.GetPlayer(message.FromId);
DebugLog.DebugWrite($"Get enter/leave event of {message.Value} from {player.PlayerId}");
switch (message.Value)
{
case EnterLeaveType.EnterMoon:

View File

@ -31,7 +31,6 @@ namespace QSB.QuantumSync.Events
return;
}
DebugLog.DebugWrite($"MOON TO INDEX {message.StateIndex}, ANGLE {message.OrbitAngle}, POINT {message.OnUnitSphere}");
var moon = Locator.GetQuantumMoon();
var wasPlayerEntangled = moon.IsPlayerEntangled();
var location = new RelativeLocationData(Locator.GetPlayerTransform().GetComponent<OWRigidbody>(), moon.transform);

View File

@ -38,7 +38,6 @@ namespace QSB.QuantumSync.Events
return;
}
var qsbObj = QSBWorldSync.GetWorldObject<QSBMultiStateQuantumObject>(message.ObjectId);
DebugLog.DebugWrite($"{qsbObj.AttachedObject.name} to state {message.StateIndex}");
qsbObj.ChangeState(message.StateIndex);
}
}

View File

@ -1,4 +1,5 @@
using QSB.Events;
using OWML.Common;
using QSB.Events;
using QSB.Utility;
using QSB.WorldSync;
using System.Linq;
@ -25,8 +26,12 @@ namespace QSB.QuantumSync.Events
{
var objects = QSBWorldSync.GetWorldObjects<IQSBQuantumObject>();
var obj = objects.ToList()[message.ObjectId];
if (obj.ControllingPlayer != 0 && message.AuthorityOwner != 0)
{
DebugLog.DebugWrite($"Warning - object {message.ObjectId} already has owner {obj.ControllingPlayer}, but trying to be replaced by {message.AuthorityOwner}!", MessageType.Warning);
}
obj.ControllingPlayer = message.AuthorityOwner;
DebugLog.DebugWrite($"Set (message:{message.ObjectId}) (obj:{(obj as IWorldObject).ObjectId}) to (message:{message.AuthorityOwner}) (obj:{obj.ControllingPlayer})");
DebugLog.DebugWrite($"Set {message.ObjectId} to owner {message.AuthorityOwner} - From {message.FromId}");
}
}
}

View File

@ -152,7 +152,6 @@ namespace QSB.QuantumSync.Patches
public static bool Shrine_ChangeQuantumState(QuantumShrine __instance)
{
var isInControl = QSBWorldSync.GetWorldObject<QSBSocketedQuantumObject>(QuantumManager.Instance.GetId(__instance)).ControllingPlayer == QSBPlayerManager.LocalPlayerId;
DebugLog.DebugWrite($"Shrine change state - in control? {isInControl}");
return isInControl;
}

View File

@ -30,7 +30,6 @@ namespace QSB.QuantumSync
private void OnSceneLoaded(OWScene scene, bool isInUniverse)
{
DebugLog.DebugWrite($"INIT QUANTUM OBJECTS");
_socketedQuantumObjects = QSBWorldSync.Init<QSBSocketedQuantumObject, SocketedQuantumObject>();
_multiStateQuantumObjects = QSBWorldSync.Init<QSBMultiStateQuantumObject, MultiStateQuantumObject>();
_quantumSockets = QSBWorldSync.Init<QSBQuantumSocket, QuantumSocket>();
@ -39,12 +38,6 @@ namespace QSB.QuantumSync
{
Shrine = Resources.FindObjectsOfTypeAll<QuantumShrine>().First();
}
foreach (var item in Resources.FindObjectsOfTypeAll<QuantumObject>())
{
DebugLog.DebugWrite($"adding tracker to {item.gameObject.name}");
item.gameObject.AddComponent<OnEnableDisableTracker>();
}
}
public void OnRenderObject()
@ -58,27 +51,6 @@ namespace QSB.QuantumSync
{
Popcron.Gizmos.Sphere(Shrine.transform.position, 10f, Color.magenta);
}
foreach (var item in _socketedQuantumObjects)
{
if (item.gameObject.activeInHierarchy)
{
Popcron.Gizmos.Cube(item.transform.position, item.transform.rotation, Vector3.one, Color.cyan);
}
}
foreach (var item in _multiStateQuantumObjects)
{
if (item.gameObject.activeInHierarchy)
{
Popcron.Gizmos.Cube(item.transform.position, item.transform.rotation, Vector3.one, Color.magenta);
}
}
foreach (var item in _quantumSockets)
{
Popcron.Gizmos.Cube(item.transform.position, item.transform.rotation, Vector3.one / 2, Color.yellow);
}
}
public void OnGUI()
@ -96,19 +68,6 @@ namespace QSB.QuantumSync
GUI.Label(new Rect(220, offset, 200f, 20f), $"- {camera.name} : {tracker.GetType().GetMethod("IsInFrustum", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(tracker, new object[] { camera.GetFrustumPlanes() })}");
offset += 30f;
}
GUI.Label(new Rect(220, offset, 200f, 20f), $"Entangled with QM : {Locator.GetQuantumMoon().IsPlayerEntangled()}");
offset += 30f;
GUI.Label(new Rect(220, offset, 200f, 20f), $"Inside QM : {Locator.GetQuantumMoon().IsPlayerInside()}");
offset += 30f;
GUI.Label(new Rect(220, offset, 200f, 20f), $"QM illuminated : {Locator.GetQuantumMoon().IsIlluminated()}");
offset += 30f;
GUI.Label(new Rect(220, offset, 200f, 20f), $"QM locked : {Locator.GetQuantumMoon().IsLocked()}");
offset += 30f;
GUI.Label(new Rect(220, offset, 200f, 20f), $"Entangled with Shrine : {Shrine.IsPlayerEntangled()}");
offset += 30f;
GUI.Label(new Rect(220, offset, 200f, 20f), $"Player in darkness : {Shrine.IsPlayerInDarkness()}");
offset += 30f;
GUI.Label(new Rect(220, offset, 200f, 20f), $"Shrine fade fraction : {Shrine.GetValue<float>("_fadeFraction")}");
offset = 10f;
GUI.Label(new Rect(440, offset, 200f, 20f), $"Players in QM :");

View File

@ -7,13 +7,15 @@ using UnityEngine;
namespace QSB.QuantumSync.WorldObjects
{
internal abstract class QSBQuantumObject<T> : WorldObject<T>, IQSBQuantumObject where T : UnityEngine.Object
internal abstract class QSBQuantumObject<T> : WorldObject<T>, IQSBQuantumObject
where T : MonoBehaviour
{
public uint ControllingPlayer { get; set; }
public override void Init(T attachedObject, int id)
{
var tracker = (AttachedObject as Component).gameObject.AddComponent<OnEnableDisableTracker>();
var tracker = (AttachedObject as Behaviour).gameObject.AddComponent<OnEnableDisableTracker>();
tracker.AttachedComponent = AttachedObject.gameObject.GetComponent<T>();
tracker.OnEnableEvent += OnEnable;
tracker.OnDisableEvent += OnDisable;
ControllingPlayer = QSBCore.IsServer ? 1u : 0u;
@ -27,7 +29,6 @@ namespace QSB.QuantumSync.WorldObjects
return;
}
var id = QSBWorldSync.GetWorldObjects<IQSBQuantumObject>().ToList().IndexOf(this);
DebugLog.DebugWrite($"ON ENABLE {(this as WorldObject<T>).AttachedObject.name} ({id})");
// no one is controlling this object right now, request authority
GlobalMessenger<int, uint>.FireEvent(EventNames.QSBQuantumAuthority, id, QSBPlayerManager.LocalPlayerId);
ControllingPlayer = QSBPlayerManager.LocalPlayerId;
@ -41,7 +42,6 @@ namespace QSB.QuantumSync.WorldObjects
return;
}
var id = QSBWorldSync.GetWorldObjects<IQSBQuantumObject>().ToList().IndexOf(this);
DebugLog.DebugWrite($"ON DISABLE {(this as WorldObject<T>).AttachedObject.name} ({id})");
// send event to other players that we're releasing authority
GlobalMessenger<int, uint>.FireEvent(EventNames.QSBQuantumAuthority, id, 0);
ControllingPlayer = 0;

View File

@ -1,5 +1,7 @@
using QSB.Player;
using OWML.Common;
using QSB.Player;
using QSB.QuantumSync.Events;
using QSB.Utility;
using QSB.WorldSync;
using System.Reflection;
using UnityEngine;
@ -17,7 +19,18 @@ namespace QSB.QuantumSync.WorldObjects
public void MoveToSocket(SocketStateChangeMessage message)
{
var socket = QSBWorldSync.GetWorldObject<QSBQuantumSocket>(message.SocketId).AttachedObject;
var qsbSocket = QSBWorldSync.GetWorldObject<QSBQuantumSocket>(message.SocketId);
if (qsbSocket == null)
{
DebugLog.DebugWrite($"Couldn't find socket id {message.SocketId}", MessageType.Error);
return;
}
var socket = qsbSocket.AttachedObject;
if (socket == null)
{
DebugLog.DebugWrite($"QSBSocket id {message.SocketId} has no attached socket.", MessageType.Error);
return;
}
AttachedObject.GetType().GetMethod("MoveToSocket", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(AttachedObject, new object[] { socket });
if ((QuantumManager.Instance.Shrine as SocketedQuantumObject) != AttachedObject)
{

View File

@ -95,7 +95,7 @@ namespace QSB.Tools
{
return;
}
var light = _lights[0].GetLight();
var light = _lights[1].GetLight();
if (light.enabled)
{
Popcron.Gizmos.Cone(light.transform.position, light.transform.rotation, light.range, light.spotAngle, Color.yellow);

View File

@ -58,7 +58,7 @@ namespace QSB.TransformSync
{
return;
}
Popcron.Gizmos.Sphere(Player.Body.transform.position, 1f);
Popcron.Gizmos.Cube(Player.Body.transform.position, Player.Body.transform.rotation, new Vector3(1, 2, 1));
Popcron.Gizmos.Line(ReferenceSector.Position, Player.Body.transform.position, Color.blue, true);
Popcron.Gizmos.Sphere(ReferenceSector.Position, 5f, Color.cyan);
}

View File

@ -9,19 +9,36 @@ namespace QSB.Utility
public event EnableDisableEvent OnEnableEvent;
public event EnableDisableEvent OnDisableEvent;
public OnEnableDisableTracker()
public MonoBehaviour AttachedComponent;
private ComponentState _wasEnabled = ComponentState.NotChecked;
private void Update()
{
if (gameObject.activeInHierarchy)
if (AttachedComponent == null)
{
OnEnableEvent?.Invoke();
return;
}
else
var state = AttachedComponent.isActiveAndEnabled ? ComponentState.Enabled : ComponentState.Disabled;
if (_wasEnabled != state)
{
OnDisableEvent?.Invoke();
_wasEnabled = state;
if (state == ComponentState.Enabled)
{
OnEnableEvent?.Invoke();
}
else
{
OnDisableEvent?.Invoke();
}
}
}
}
private void OnEnable() => OnEnableEvent?.Invoke();
private void OnDisable() => OnDisableEvent?.Invoke();
enum ComponentState
{
NotChecked = 0,
Enabled = 1,
Disabled = 2
}
}

View File

@ -33,7 +33,7 @@ namespace QSB.WorldSync
public static List<TUnityObject> Init<TWorldObject, TUnityObject>()
where TWorldObject : WorldObject<TUnityObject>
where TUnityObject : UnityEngine.Object
where TUnityObject : MonoBehaviour
{
var list = Resources.FindObjectsOfTypeAll<TUnityObject>().ToList();
for (var id = 0; id < list.Count; id++)

View File

@ -1,7 +1,9 @@
namespace QSB.WorldSync
using UnityEngine;
namespace QSB.WorldSync
{
public abstract class WorldObject<T> : IWorldObject
where T : UnityEngine.Object
where T : MonoBehaviour
{
public int ObjectId { get; protected set; }
public T AttachedObject { get; protected set; }