public static void Socketed_MoveToSocket(SocketedQuantumObject __instance, QuantumSocket socket) { if (socket == null) { DebugLog.ToConsole($"Error - Trying to move {__instance.name} to a null socket!", MessageType.Error); return; } var objectWorldObject = QSBWorldSync.GetWorldFromUnity <QSBSocketedQuantumObject, SocketedQuantumObject>(__instance); var socketWorldObject = QSBWorldSync.GetWorldFromUnity <QSBQuantumSocket, QuantumSocket>(socket); if (objectWorldObject == null) { DebugLog.ToConsole($"Worldobject is null for {__instance.name}!"); return; } if (objectWorldObject.ControllingPlayer != QSBPlayerManager.LocalPlayerId) { return; } QSBEventManager.FireEvent( EventNames.QSBSocketStateChange, objectWorldObject.ObjectId, socketWorldObject.ObjectId, __instance.transform.localRotation); }
public static void SocketedQuantumObject_MoveToSocket(SocketedQuantumObject __instance, QuantumSocket socket) { if (!QSBWorldSync.AllObjectsReady) { return; } if (socket == null) { DebugLog.ToConsole($"Error - Trying to move {__instance.name} to a null socket!", MessageType.Error); return; } var objectWorldObject = __instance.GetWorldObject <QSBSocketedQuantumObject>(); var socketWorldObject = socket.GetWorldObject <QSBQuantumSocket>(); if (objectWorldObject == null) { DebugLog.ToConsole($"Worldobject is null for {__instance.name}!"); return; } if (objectWorldObject.ControllingPlayer != QSBPlayerManager.LocalPlayerId) { return; } objectWorldObject.SendMessage(new SocketStateChangeMessage( socketWorldObject.ObjectId, __instance.transform.localRotation)); }
public static bool Socketed_ChangeQuantumState( SocketedQuantumObject __instance, ref bool __result, bool skipInstantVisibilityCheck, List <QuantumSocket> ____childSockets, List <QuantumSocket> ____socketList, ref QuantumSocket ____recentlyObscuredSocket, QuantumSocket ____occupiedSocket) { var socketedWorldObject = QSBWorldSync.GetWorldFromUnity <QSBSocketedQuantumObject, SocketedQuantumObject>(__instance); if (socketedWorldObject.ControllingPlayer != QSBPlayerManager.LocalPlayerId) { return(false); } foreach (var socket in ____childSockets) { if (socket.IsOccupied()) { __result = false; return(false); } } if (____socketList.Count <= 1) { DebugLog.ToConsole($"Error - Not enough quantum sockets in list for {__instance.name}!", MessageType.Error); __result = false; return(false); } var list = new List <QuantumSocket>(); foreach (var socket in ____socketList) { if (!socket.IsOccupied() && socket.IsActive()) { list.Add(socket); } } if (list.Count == 0) { __result = false; return(false); } if (____recentlyObscuredSocket != null) { __instance.GetType().GetMethod("MoveToSocket", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(__instance, new object[] { ____recentlyObscuredSocket }); ____recentlyObscuredSocket = null; __result = true; return(false); } var occupiedSocket = ____occupiedSocket; for (var i = 0; i < 20; i++) { var index = UnityEngine.Random.Range(0, list.Count); __instance.GetType().GetMethod("MoveToSocket", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(__instance, new object[] { list[index] }); if (skipInstantVisibilityCheck) { __result = true; return(false); } bool socketNotSuitable; var isSocketIlluminated = (bool)__instance.GetType().GetMethod("CheckIllumination", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(__instance, null); var playersEntangled = QuantumManager.GetEntangledPlayers(__instance); if (playersEntangled.Count() != 0) { // socket not suitable if illuminated socketNotSuitable = isSocketIlluminated; } else { var checkVisInstant = (bool)__instance.GetType().GetMethod("CheckVisibilityInstantly", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(__instance, null); if (isSocketIlluminated) { // socket not suitable if object is visible socketNotSuitable = checkVisInstant; } else { // socket not suitable if player is inside object socketNotSuitable = playersEntangled.Any(x => __instance.CheckPointInside(x.CameraBody.transform.position)); } } if (!socketNotSuitable) { __result = true; return(false); } list.RemoveAt(index); if (list.Count == 0) { break; } } __instance.GetType().GetMethod("MoveToSocket", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(__instance, new object[] { occupiedSocket }); __result = false; return(false); }