Merge pull request #334 from misternebula/some-dlc-support

Some dlc support
This commit is contained in:
_nebula 2021-11-01 22:57:56 +00:00 committed by GitHub
commit a53e599364
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
48 changed files with 307 additions and 193 deletions

View File

@ -37,7 +37,7 @@ namespace QSB.Animation.NPC.Patches
var playerId = ConversationManager.Instance.GetPlayerTalkingToTree(____dialogueTree); var playerId = ConversationManager.Instance.GetPlayerTalkingToTree(____dialogueTree);
var player = QSBPlayerManager.GetPlayer(playerId); var player = QSBPlayerManager.GetPlayer(playerId);
var qsbObj = QSBWorldSync.GetWorldFromUnity<QSBCharacterAnimController, CharacterAnimController>(__instance); // OPTIMIZE : maybe cache this somewhere... or assess how slow this is var qsbObj = QSBWorldSync.GetWorldFromUnity<QSBCharacterAnimController>(__instance); // OPTIMIZE : maybe cache this somewhere... or assess how slow this is
PlayerInfo playerToUse = null; PlayerInfo playerToUse = null;
if (____inConversation) if (____inConversation)
@ -98,7 +98,7 @@ namespace QSB.Animation.NPC.Patches
[HarmonyPatch(typeof(CharacterAnimController), nameof(CharacterAnimController.OnZoneExit))] [HarmonyPatch(typeof(CharacterAnimController), nameof(CharacterAnimController.OnZoneExit))]
public static bool HeadZoneExit(CharacterAnimController __instance) public static bool HeadZoneExit(CharacterAnimController __instance)
{ {
var qsbObj = QSBWorldSync.GetWorldFromUnity<QSBCharacterAnimController, CharacterAnimController>(__instance); var qsbObj = QSBWorldSync.GetWorldFromUnity<QSBCharacterAnimController>(__instance);
QSBEventManager.FireEvent(EventNames.QSBExitNonNomaiHeadZone, qsbObj.ObjectId); QSBEventManager.FireEvent(EventNames.QSBExitNonNomaiHeadZone, qsbObj.ObjectId);
return false; return false;
} }
@ -107,7 +107,7 @@ namespace QSB.Animation.NPC.Patches
[HarmonyPatch(typeof(CharacterAnimController), nameof(CharacterAnimController.OnZoneEntry))] [HarmonyPatch(typeof(CharacterAnimController), nameof(CharacterAnimController.OnZoneEntry))]
public static bool HeadZoneEntry(CharacterAnimController __instance) public static bool HeadZoneEntry(CharacterAnimController __instance)
{ {
var qsbObj = QSBWorldSync.GetWorldFromUnity<QSBCharacterAnimController, CharacterAnimController>(__instance); var qsbObj = QSBWorldSync.GetWorldFromUnity<QSBCharacterAnimController>(__instance);
QSBEventManager.FireEvent(EventNames.QSBEnterNonNomaiHeadZone, qsbObj.ObjectId); QSBEventManager.FireEvent(EventNames.QSBEnterNonNomaiHeadZone, qsbObj.ObjectId);
return false; return false;
} }

View File

@ -28,7 +28,7 @@ namespace QSB.Animation.NPC.Patches
__instance._animatorStateEvents.OnEnterState += __instance.OnEnterAnimatorState; __instance._animatorStateEvents.OnEnterState += __instance.OnEnterAnimatorState;
} }
var qsbObj = QSBWorldSync.GetWorldFromUnity<QSBSolanumAnimController, SolanumAnimController>(__instance); var qsbObj = QSBWorldSync.GetWorldFromUnity<QSBSolanumAnimController>(__instance);
var playersInHeadZone = qsbObj.GetPlayersInHeadZone(); var playersInHeadZone = qsbObj.GetPlayersInHeadZone();
var targetCamera = playersInHeadZone == null || playersInHeadZone.Count == 0 var targetCamera = playersInHeadZone == null || playersInHeadZone.Count == 0
@ -48,7 +48,7 @@ namespace QSB.Animation.NPC.Patches
[HarmonyPatch(typeof(NomaiConversationManager), nameof(NomaiConversationManager.OnEnterWatchVolume))] [HarmonyPatch(typeof(NomaiConversationManager), nameof(NomaiConversationManager.OnEnterWatchVolume))]
public static bool EnterWatchZone(NomaiConversationManager __instance) public static bool EnterWatchZone(NomaiConversationManager __instance)
{ {
var qsbObj = QSBWorldSync.GetWorldFromUnity<QSBSolanumAnimController, SolanumAnimController>(__instance._solanumAnimController); var qsbObj = QSBWorldSync.GetWorldFromUnity<QSBSolanumAnimController>(__instance._solanumAnimController);
QSBEventManager.FireEvent(EventNames.QSBEnterNomaiHeadZone, qsbObj.ObjectId); QSBEventManager.FireEvent(EventNames.QSBEnterNomaiHeadZone, qsbObj.ObjectId);
return false; return false;
} }
@ -57,7 +57,7 @@ namespace QSB.Animation.NPC.Patches
[HarmonyPatch(typeof(NomaiConversationManager), nameof(NomaiConversationManager.OnExitWatchVolume))] [HarmonyPatch(typeof(NomaiConversationManager), nameof(NomaiConversationManager.OnExitWatchVolume))]
public static bool ExitWatchZone(NomaiConversationManager __instance) public static bool ExitWatchZone(NomaiConversationManager __instance)
{ {
var qsbObj = QSBWorldSync.GetWorldFromUnity<QSBSolanumAnimController, SolanumAnimController>(__instance._solanumAnimController); var qsbObj = QSBWorldSync.GetWorldFromUnity<QSBSolanumAnimController>(__instance._solanumAnimController);
QSBEventManager.FireEvent(EventNames.QSBExitNomaiHeadZone, qsbObj.ObjectId); QSBEventManager.FireEvent(EventNames.QSBExitNomaiHeadZone, qsbObj.ObjectId);
return false; return false;
} }
@ -66,7 +66,7 @@ namespace QSB.Animation.NPC.Patches
[HarmonyPatch(typeof(NomaiConversationManager), nameof(NomaiConversationManager.Update))] [HarmonyPatch(typeof(NomaiConversationManager), nameof(NomaiConversationManager.Update))]
public static bool ReplacementUpdate(NomaiConversationManager __instance) public static bool ReplacementUpdate(NomaiConversationManager __instance)
{ {
var qsbObj = QSBWorldSync.GetWorldFromUnity<QSBSolanumAnimController, SolanumAnimController>(__instance._solanumAnimController); var qsbObj = QSBWorldSync.GetWorldFromUnity<QSBSolanumAnimController>(__instance._solanumAnimController);
__instance._playerInWatchVolume = qsbObj.GetPlayersInHeadZone().Any(); __instance._playerInWatchVolume = qsbObj.GetPlayersInHeadZone().Any();
if (!__instance._initialized) if (!__instance._initialized)

View File

@ -15,7 +15,7 @@ namespace QSB.CampfireSync.Patches
[HarmonyPatch(typeof(Campfire), nameof(Campfire.OnPressInteract))] [HarmonyPatch(typeof(Campfire), nameof(Campfire.OnPressInteract))]
public static bool LightCampfireEvent(Campfire __instance) public static bool LightCampfireEvent(Campfire __instance)
{ {
var qsbCampfire = QSBWorldSync.GetWorldFromUnity<QSBCampfire, Campfire>(__instance); var qsbCampfire = QSBWorldSync.GetWorldFromUnity<QSBCampfire>(__instance);
if (__instance._state == Campfire.State.LIT) if (__instance._state == Campfire.State.LIT)
{ {
qsbCampfire.StartRoasting(); qsbCampfire.StartRoasting();

View File

@ -17,7 +17,7 @@ namespace QSB.ElevatorSync.Patches
public static void Elevator_StartLift(Elevator __instance) public static void Elevator_StartLift(Elevator __instance)
{ {
var isGoingUp = __instance.GetValue<bool>("_goingToTheEnd"); var isGoingUp = __instance.GetValue<bool>("_goingToTheEnd");
var id = QSBWorldSync.GetIdFromUnity<QSBElevator, Elevator>(__instance); var id = QSBWorldSync.GetIdFromUnity<QSBElevator>(__instance);
QSBEventManager.FireEvent(EventNames.QSBStartLift, id, isGoingUp); QSBEventManager.FireEvent(EventNames.QSBStartLift, id, isGoingUp);
} }
} }

View File

@ -1,5 +1,5 @@
using QSB.Events; using QSB.Events;
using QSB.ItemSync.WorldObjects; using QSB.ItemSync.WorldObjects.Items;
using QSB.Player; using QSB.Player;
using QSB.Utility; using QSB.Utility;
using QSB.WorldSync; using QSB.WorldSync;

View File

@ -29,7 +29,7 @@ namespace QSB.ItemSync.Events
writer.Write(ObjectId); writer.Write(ObjectId);
writer.Write(Position); writer.Write(Position);
writer.Write(Normal); writer.Write(Normal);
var qsbSector = QSBWorldSync.GetWorldFromUnity<QSBSector, Sector>(Sector); var qsbSector = QSBWorldSync.GetWorldFromUnity<QSBSector>(Sector);
writer.Write(qsbSector.ObjectId); writer.Write(qsbSector.ObjectId);
} }
} }

View File

@ -1,5 +1,5 @@
using QSB.Events; using QSB.Events;
using QSB.ItemSync.WorldObjects; using QSB.ItemSync.WorldObjects.Items;
using QSB.Player; using QSB.Player;
using QSB.WorldSync; using QSB.WorldSync;
using QSB.WorldSync.Events; using QSB.WorldSync.Events;
@ -48,6 +48,18 @@ namespace QSB.ItemSync.Events
? player.VesselCoreSocket ? player.VesselCoreSocket
: player.WarpCoreSocket; : player.WarpCoreSocket;
break; break;
case ItemType.Lantern:
itemSocket = player.SimpleLanternSocket;
break;
case ItemType.DreamLantern:
itemSocket = player.DreamLanternSocket;
break;
case ItemType.SlideReel:
itemSocket = player.SlideReelSocket;
break;
case ItemType.VisionTorch:
itemSocket = player.VisionTorchSocket;
break;
default: default:
itemSocket = player.ItemSocket; itemSocket = player.ItemSocket;
break; break;

View File

@ -1,5 +1,7 @@
using QSB.Events; using QSB.Events;
using QSB.ItemSync.WorldObjects; using QSB.ItemSync.WorldObjects;
using QSB.ItemSync.WorldObjects.Items;
using QSB.ItemSync.WorldObjects.Sockets;
using QSB.Player; using QSB.Player;
using QSB.Utility; using QSB.Utility;
using QSB.WorldSync; using QSB.WorldSync;

View File

@ -1,5 +1,6 @@
using OWML.Common; using OWML.Common;
using QSB.ItemSync.WorldObjects; using QSB.ItemSync.WorldObjects.Items;
using QSB.ItemSync.WorldObjects.Sockets;
using QSB.Utility; using QSB.Utility;
using QSB.WorldSync; using QSB.WorldSync;
@ -10,80 +11,22 @@ namespace QSB.ItemSync
protected override void RebuildWorldObjects(OWScene scene) protected override void RebuildWorldObjects(OWScene scene)
{ {
DebugLog.DebugWrite("Rebuilding OWItems...", MessageType.Info); DebugLog.DebugWrite("Rebuilding OWItems...", MessageType.Info);
QSBWorldSync.Init<QSBScrollSocket, ScrollSocket>();
// Items
QSBWorldSync.Init<QSBScrollItem, ScrollItem>(); QSBWorldSync.Init<QSBScrollItem, ScrollItem>();
QSBWorldSync.Init<QSBSharedStoneSocket, SharedStoneSocket>();
QSBWorldSync.Init<QSBSharedStone, SharedStone>(); QSBWorldSync.Init<QSBSharedStone, SharedStone>();
QSBWorldSync.Init<QSBWarpCoreSocket, WarpCoreSocket>();
QSBWorldSync.Init<QSBWarpCoreItem, WarpCoreItem>(); QSBWorldSync.Init<QSBWarpCoreItem, WarpCoreItem>();
QSBWorldSync.Init<QSBNomaiConversationStoneSocket, NomaiConversationStoneSocket>();
QSBWorldSync.Init<QSBNomaiConversationStone, NomaiConversationStone>(); QSBWorldSync.Init<QSBNomaiConversationStone, NomaiConversationStone>();
} QSBWorldSync.Init<QSBSimpleLanternItem, SimpleLanternItem>();
QSBWorldSync.Init<QSBSlideReelItem, SlideReelItem>();
public static IQSBOWItem GetObject(OWItem unityObject) // Sockets
{ QSBWorldSync.Init<QSBScrollSocket, ScrollSocket>();
if (unityObject == null) QSBWorldSync.Init<QSBSharedStoneSocket, SharedStoneSocket>();
{ QSBWorldSync.Init<QSBWarpCoreSocket, WarpCoreSocket>();
DebugLog.ToConsole($"Error - Trying to run GetObject (Item) with null unity object!", MessageType.Error); QSBWorldSync.Init<QSBNomaiConversationStoneSocket, NomaiConversationStoneSocket>();
return default; QSBWorldSync.Init<QSBSlideReelSocket, SlideReelSocket>();
} QSBWorldSync.Init<QSBSlideProjectorSocket, SlideProjectorSocket>();
IQSBOWItem worldObj = null;
if (unityObject.GetType() == typeof(ScrollItem))
{
worldObj = QSBWorldSync.GetWorldFromUnity<QSBScrollItem, ScrollItem>((ScrollItem)unityObject);
}
else if (unityObject.GetType() == typeof(SharedStone))
{
worldObj = QSBWorldSync.GetWorldFromUnity<QSBSharedStone, SharedStone>((SharedStone)unityObject);
}
else if (unityObject.GetType() == typeof(WarpCoreItem))
{
worldObj = QSBWorldSync.GetWorldFromUnity<QSBWarpCoreItem, WarpCoreItem>((WarpCoreItem)unityObject);
}
else if (unityObject.GetType() == typeof(NomaiConversationStone))
{
worldObj = QSBWorldSync.GetWorldFromUnity<QSBNomaiConversationStone, NomaiConversationStone>((NomaiConversationStone)unityObject);
}
else
{
DebugLog.ToConsole($"Warning - couldn't work out type of OWItem {unityObject.name}.", MessageType.Warning);
}
return worldObj;
}
public static IQSBOWItemSocket GetObject(OWItemSocket unityObject)
{
if (unityObject == null)
{
DebugLog.ToConsole($"Error - Trying to run GetObject (Socket) with null unity object!", MessageType.Error);
return default;
}
IQSBOWItemSocket worldObj = null;
if (unityObject.GetType() == typeof(ScrollSocket))
{
worldObj = QSBWorldSync.GetWorldFromUnity<QSBScrollSocket, ScrollSocket>((ScrollSocket)unityObject);
}
else if (unityObject.GetType() == typeof(SharedStoneSocket))
{
worldObj = QSBWorldSync.GetWorldFromUnity<QSBSharedStoneSocket, SharedStoneSocket>((SharedStoneSocket)unityObject);
}
else if (unityObject.GetType() == typeof(WarpCoreSocket))
{
worldObj = QSBWorldSync.GetWorldFromUnity<QSBWarpCoreSocket, WarpCoreSocket>((WarpCoreSocket)unityObject);
}
else if (unityObject.GetType() == typeof(NomaiConversationStoneSocket))
{
worldObj = QSBWorldSync.GetWorldFromUnity<QSBNomaiConversationStoneSocket, NomaiConversationStoneSocket>((NomaiConversationStoneSocket)unityObject);
}
else
{
DebugLog.ToConsole($"Warning - couldn't work out type of OWItemSocket {unityObject.name}.", MessageType.Warning);
}
return worldObj;
} }
} }
} }

View File

@ -1,6 +1,8 @@
using HarmonyLib; using HarmonyLib;
using OWML.Common; using OWML.Common;
using QSB.Events; using QSB.Events;
using QSB.ItemSync.WorldObjects.Items;
using QSB.ItemSync.WorldObjects.Sockets;
using QSB.Patches; using QSB.Patches;
using QSB.Player; using QSB.Player;
using QSB.Utility; using QSB.Utility;
@ -18,7 +20,7 @@ namespace QSB.ItemSync.Patches
[HarmonyPatch(typeof(ItemTool), nameof(ItemTool.MoveItemToCarrySocket))] [HarmonyPatch(typeof(ItemTool), nameof(ItemTool.MoveItemToCarrySocket))]
public static bool ItemTool_MoveItemToCarrySocket(OWItem item) public static bool ItemTool_MoveItemToCarrySocket(OWItem item)
{ {
var qsbObj = ItemManager.GetObject(item); var qsbObj = (IQSBOWItem)QSBWorldSync.GetWorldFromUnity(item);
var itemId = QSBWorldSync.GetIdFromTypeSubset(qsbObj); var itemId = QSBWorldSync.GetIdFromTypeSubset(qsbObj);
QSBPlayerManager.LocalPlayer.HeldItem = qsbObj; QSBPlayerManager.LocalPlayer.HeldItem = qsbObj;
QSBEventManager.FireEvent(EventNames.QSBMoveToCarry, itemId); QSBEventManager.FireEvent(EventNames.QSBMoveToCarry, itemId);
@ -29,8 +31,8 @@ namespace QSB.ItemSync.Patches
[HarmonyPatch(typeof(ItemTool), nameof(ItemTool.SocketItem))] [HarmonyPatch(typeof(ItemTool), nameof(ItemTool.SocketItem))]
public static bool ItemTool_SocketItem(OWItem ____heldItem, OWItemSocket socket) public static bool ItemTool_SocketItem(OWItem ____heldItem, OWItemSocket socket)
{ {
var qsbObj = ItemManager.GetObject(____heldItem); var qsbObj = (IQSBOWItem)QSBWorldSync.GetWorldFromUnity(____heldItem);
var socketId = QSBWorldSync.GetIdFromTypeSubset(ItemManager.GetObject(socket)); var socketId = QSBWorldSync.GetIdFromTypeSubset((IQSBOWItemSocket)QSBWorldSync.GetWorldFromUnity(socket));
var itemId = QSBWorldSync.GetIdFromTypeSubset(qsbObj); var itemId = QSBWorldSync.GetIdFromTypeSubset(qsbObj);
QSBPlayerManager.LocalPlayer.HeldItem = null; QSBPlayerManager.LocalPlayer.HeldItem = null;
QSBEventManager.FireEvent(EventNames.QSBSocketItem, socketId, itemId, SocketEventType.Socket); QSBEventManager.FireEvent(EventNames.QSBSocketItem, socketId, itemId, SocketEventType.Socket);
@ -41,9 +43,9 @@ namespace QSB.ItemSync.Patches
[HarmonyPatch(typeof(ItemTool), nameof(ItemTool.StartUnsocketItem))] [HarmonyPatch(typeof(ItemTool), nameof(ItemTool.StartUnsocketItem))]
public static bool ItemTool_StartUnsocketItem(OWItemSocket socket) public static bool ItemTool_StartUnsocketItem(OWItemSocket socket)
{ {
var item = ItemManager.GetObject(socket.GetSocketedItem()); var item = (IQSBOWItem)QSBWorldSync.GetWorldFromUnity(socket.GetSocketedItem());
QSBPlayerManager.LocalPlayer.HeldItem = item; QSBPlayerManager.LocalPlayer.HeldItem = item;
var socketId = QSBWorldSync.GetIdFromTypeSubset(ItemManager.GetObject(socket)); var socketId = QSBWorldSync.GetIdFromTypeSubset((IQSBOWItemSocket)QSBWorldSync.GetWorldFromUnity(socket));
QSBEventManager.FireEvent(EventNames.QSBSocketItem, socketId, 0, SocketEventType.StartUnsocket); QSBEventManager.FireEvent(EventNames.QSBSocketItem, socketId, 0, SocketEventType.StartUnsocket);
return true; return true;
} }
@ -52,7 +54,7 @@ namespace QSB.ItemSync.Patches
[HarmonyPatch(typeof(ItemTool), nameof(ItemTool.CompleteUnsocketItem))] [HarmonyPatch(typeof(ItemTool), nameof(ItemTool.CompleteUnsocketItem))]
public static bool ItemTool_CompleteUnsocketItem(OWItem ____heldItem) public static bool ItemTool_CompleteUnsocketItem(OWItem ____heldItem)
{ {
var itemId = QSBWorldSync.GetIdFromTypeSubset(ItemManager.GetObject(____heldItem)); var itemId = QSBWorldSync.GetIdFromTypeSubset((IQSBOWItem)QSBWorldSync.GetWorldFromUnity(____heldItem));
QSBEventManager.FireEvent(EventNames.QSBSocketItem, 0, itemId, SocketEventType.CompleteUnsocket); QSBEventManager.FireEvent(EventNames.QSBSocketItem, 0, itemId, SocketEventType.CompleteUnsocket);
return true; return true;
} }
@ -88,7 +90,7 @@ namespace QSB.ItemSync.Patches
var parent = (customDropTarget == null) var parent = (customDropTarget == null)
? targetRigidbody.transform ? targetRigidbody.transform
: customDropTarget.GetItemDropTargetTransform(hit.collider.gameObject); : customDropTarget.GetItemDropTargetTransform(hit.collider.gameObject);
var objectId = QSBWorldSync.GetIdFromTypeSubset(ItemManager.GetObject(____heldItem)); var objectId = QSBWorldSync.GetIdFromTypeSubset((IQSBOWItem)QSBWorldSync.GetWorldFromUnity(____heldItem));
____heldItem.DropItem(hit.point, hit.normal, parent, sector, customDropTarget); ____heldItem.DropItem(hit.point, hit.normal, parent, sector, customDropTarget);
____heldItem = null; ____heldItem = null;
QSBPlayerManager.LocalPlayer.HeldItem = null; QSBPlayerManager.LocalPlayer.HeldItem = null;

View File

@ -1,7 +1,7 @@
using QSB.WorldSync; using QSB.WorldSync;
using UnityEngine; using UnityEngine;
namespace QSB.ItemSync.WorldObjects namespace QSB.ItemSync.WorldObjects.Items
{ {
public interface IQSBOWItem : IWorldObjectTypeSubset public interface IQSBOWItem : IWorldObjectTypeSubset
{ {

View File

@ -1,4 +1,4 @@
namespace QSB.ItemSync.WorldObjects namespace QSB.ItemSync.WorldObjects.Items
{ {
internal class QSBNomaiConversationStone : QSBOWItem<NomaiConversationStone> internal class QSBNomaiConversationStone : QSBOWItem<NomaiConversationStone>
{ {

View File

@ -1,10 +1,12 @@
using OWML.Utils; using OWML.Utils;
using QSB.ItemSync.WorldObjects.Sockets;
using QSB.Player; using QSB.Player;
using QSB.SectorSync.WorldObjects; using QSB.SectorSync.WorldObjects;
using QSB.Utility;
using QSB.WorldSync; using QSB.WorldSync;
using UnityEngine; using UnityEngine;
namespace QSB.ItemSync.WorldObjects namespace QSB.ItemSync.WorldObjects.Items
{ {
internal class QSBOWItem<T> : WorldObject<T>, IQSBOWItem internal class QSBOWItem<T> : WorldObject<T>, IQSBOWItem
where T : OWItem where T : OWItem
@ -18,13 +20,25 @@ namespace QSB.ItemSync.WorldObjects
public override void Init(T attachedObject, int id) public override void Init(T attachedObject, int id)
{ {
if (attachedObject == null)
{
DebugLog.ToConsole($"Error - AttachedObject is null! Type:{GetType().Name}", OWML.Common.MessageType.Error);
return;
}
InitialParent = attachedObject.transform.parent; InitialParent = attachedObject.transform.parent;
InitialPosition = attachedObject.transform.localPosition; InitialPosition = attachedObject.transform.localPosition;
InitialRotation = attachedObject.transform.localRotation; InitialRotation = attachedObject.transform.localRotation;
InitialSector = QSBWorldSync.GetWorldFromUnity<QSBSector, Sector>(attachedObject.GetSector()); InitialSector = QSBWorldSync.GetWorldFromUnity<QSBSector>(attachedObject.GetSector());
if (InitialParent.GetComponent<OWItemSocket>() != null)
if (InitialParent == null)
{ {
var qsbObj = ItemManager.GetObject(InitialParent.GetComponent<OWItemSocket>()); DebugLog.ToConsole($"Warning - InitialParent of {attachedObject.name} is null!", OWML.Common.MessageType.Warning);
}
if (InitialParent?.GetComponent<OWItemSocket>() != null)
{
var qsbObj = (IQSBOWItemSocket)QSBWorldSync.GetWorldFromUnity(InitialParent.GetComponent<OWItemSocket>());
InitialSocket = qsbObj; InitialSocket = qsbObj;
} }
@ -76,10 +90,10 @@ namespace QSB.ItemSync.WorldObjects
{ {
AttachedObject.transform.SetParent(sector.transform); AttachedObject.transform.SetParent(sector.transform);
AttachedObject.transform.localScale = Vector3.one; AttachedObject.transform.localScale = Vector3.one;
var localDropNormal = AttachedObject.GetValue<Vector3>("_localDropNormal"); var localDropNormal = AttachedObject._localDropNormal;
var lhs = Quaternion.FromToRotation(AttachedObject.transform.TransformDirection(localDropNormal), normal); var lhs = Quaternion.FromToRotation(AttachedObject.transform.TransformDirection(localDropNormal), normal);
AttachedObject.transform.rotation = lhs * AttachedObject.transform.rotation; AttachedObject.transform.rotation = lhs * AttachedObject.transform.rotation;
var localDropOffset = AttachedObject.GetValue<Vector3>("_localDropOffset"); var localDropOffset = AttachedObject._localDropOffset;
AttachedObject.transform.position = sector.transform.TransformPoint(position) + AttachedObject.transform.TransformDirection(localDropOffset); AttachedObject.transform.position = sector.transform.TransformPoint(position) + AttachedObject.transform.TransformDirection(localDropOffset);
AttachedObject.SetSector(sector); AttachedObject.SetSector(sector);
AttachedObject.SetColliderActivation(true); AttachedObject.SetColliderActivation(true);

View File

@ -1,4 +1,4 @@
namespace QSB.ItemSync.WorldObjects namespace QSB.ItemSync.WorldObjects.Items
{ {
internal class QSBScrollItem : QSBOWItem<ScrollItem> internal class QSBScrollItem : QSBOWItem<ScrollItem>
{ {

View File

@ -1,4 +1,4 @@
namespace QSB.ItemSync.WorldObjects namespace QSB.ItemSync.WorldObjects.Items
{ {
internal class QSBSharedStone : QSBOWItem<SharedStone> internal class QSBSharedStone : QSBOWItem<SharedStone>
{ {

View File

@ -0,0 +1,21 @@
namespace QSB.ItemSync.WorldObjects.Items
{
class QSBSimpleLanternItem : QSBOWItem<SimpleLanternItem>
{
public override void Init(SimpleLanternItem attachedObject, int id)
{
ObjectId = id;
AttachedObject = attachedObject;
base.Init(attachedObject, id);
}
public override void PlaySocketAnimation()
=> AttachedObject.PlaySocketAnimation();
public override void PlayUnsocketAnimation()
=> AttachedObject.PlayUnsocketAnimation();
public override void OnCompleteUnsocket()
=> AttachedObject.OnCompleteUnsocket();
}
}

View File

@ -0,0 +1,21 @@
namespace QSB.ItemSync.WorldObjects.Items
{
class QSBSlideReelItem : QSBOWItem<SlideReelItem>
{
public override void Init(SlideReelItem attachedObject, int id)
{
ObjectId = id;
AttachedObject = attachedObject;
base.Init(attachedObject, id);
}
public override void PlaySocketAnimation()
=> AttachedObject.PlaySocketAnimation();
public override void PlayUnsocketAnimation()
=> AttachedObject.PlayUnsocketAnimation();
public override void OnCompleteUnsocket()
=> AttachedObject.OnCompleteUnsocket();
}
}

View File

@ -1,4 +1,4 @@
namespace QSB.ItemSync.WorldObjects namespace QSB.ItemSync.WorldObjects.Items
{ {
internal class QSBWarpCoreItem : QSBOWItem<WarpCoreItem> internal class QSBWarpCoreItem : QSBOWItem<WarpCoreItem>
{ {

View File

@ -1,6 +1,7 @@
using QSB.WorldSync; using QSB.ItemSync.WorldObjects.Items;
using QSB.WorldSync;
namespace QSB.ItemSync.WorldObjects namespace QSB.ItemSync.WorldObjects.Sockets
{ {
public interface IQSBOWItemSocket : IWorldObjectTypeSubset public interface IQSBOWItemSocket : IWorldObjectTypeSubset
{ {

View File

@ -1,4 +1,4 @@
namespace QSB.ItemSync.WorldObjects namespace QSB.ItemSync.WorldObjects.Sockets
{ {
internal class QSBNomaiConversationStoneSocket : QSBOWItemSocket<NomaiConversationStoneSocket> internal class QSBNomaiConversationStoneSocket : QSBOWItemSocket<NomaiConversationStoneSocket>
{ {

View File

@ -0,0 +1,27 @@
using QSB.ItemSync.WorldObjects.Items;
using QSB.WorldSync;
namespace QSB.ItemSync.WorldObjects.Sockets
{
internal class QSBOWItemDoubleSocket<T> : WorldObject<T>, IQSBOWItemSocket
where T : OWItemSocket
{
public override void Init(T attachedObject, int id) { }
public virtual bool AcceptsItem(IQSBOWItem item)
{
var itemType = item.GetItemType();
var acceptableType = AttachedObject._acceptableType;
return (itemType & acceptableType) == itemType;
}
public virtual bool IsSocketOccupied()
=> AttachedObject.IsSocketOccupied();
public virtual bool PlaceIntoSocket(IQSBOWItem item)
=> AttachedObject.PlaceIntoSocket((OWItem)(item as IWorldObject).ReturnObject());
public virtual IQSBOWItem RemoveFromSocket()
=> (IQSBOWItem)QSBWorldSync.GetWorldFromUnity(AttachedObject.RemoveFromSocket());
}
}

View File

@ -1,7 +1,7 @@
using OWML.Utils; using QSB.ItemSync.WorldObjects.Items;
using QSB.WorldSync; using QSB.WorldSync;
namespace QSB.ItemSync.WorldObjects namespace QSB.ItemSync.WorldObjects.Sockets
{ {
internal class QSBOWItemSocket<T> : WorldObject<T>, IQSBOWItemSocket internal class QSBOWItemSocket<T> : WorldObject<T>, IQSBOWItemSocket
where T : OWItemSocket where T : OWItemSocket
@ -11,7 +11,7 @@ namespace QSB.ItemSync.WorldObjects
public virtual bool AcceptsItem(IQSBOWItem item) public virtual bool AcceptsItem(IQSBOWItem item)
{ {
var itemType = item.GetItemType(); var itemType = item.GetItemType();
var acceptableType = AttachedObject.GetValue<ItemType>("_acceptableType"); var acceptableType = AttachedObject._acceptableType;
return (itemType & acceptableType) == itemType; return (itemType & acceptableType) == itemType;
} }
@ -22,6 +22,6 @@ namespace QSB.ItemSync.WorldObjects
=> AttachedObject.PlaceIntoSocket((OWItem)(item as IWorldObject).ReturnObject()); => AttachedObject.PlaceIntoSocket((OWItem)(item as IWorldObject).ReturnObject());
public virtual IQSBOWItem RemoveFromSocket() public virtual IQSBOWItem RemoveFromSocket()
=> ItemManager.GetObject(AttachedObject.RemoveFromSocket()); => (IQSBOWItem)QSBWorldSync.GetWorldFromUnity(AttachedObject.RemoveFromSocket());
} }
} }

View File

@ -1,4 +1,4 @@
namespace QSB.ItemSync.WorldObjects namespace QSB.ItemSync.WorldObjects.Sockets
{ {
internal class QSBScrollSocket : QSBOWItemSocket<ScrollSocket> internal class QSBScrollSocket : QSBOWItemSocket<ScrollSocket>
{ {

View File

@ -1,4 +1,4 @@
namespace QSB.ItemSync.WorldObjects namespace QSB.ItemSync.WorldObjects.Sockets
{ {
internal class QSBSharedStoneSocket : QSBOWItemSocket<SharedStoneSocket> internal class QSBSharedStoneSocket : QSBOWItemSocket<SharedStoneSocket>
{ {

View File

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace QSB.ItemSync.WorldObjects.Sockets
{
internal class QSBSlideProjectorSocket : QSBOWItemDoubleSocket<SlideProjectorSocket>
{
public override void Init(SlideProjectorSocket attachedObject, int id)
{
ObjectId = id;
AttachedObject = attachedObject;
base.Init(attachedObject, id);
}
}
}

View File

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace QSB.ItemSync.WorldObjects.Sockets
{
internal class QSBSlideReelSocket : QSBOWItemSocket<SlideReelSocket>
{
public override void Init(SlideReelSocket attachedObject, int id)
{
ObjectId = id;
AttachedObject = attachedObject;
base.Init(attachedObject, id);
}
}
}

View File

@ -1,4 +1,4 @@
namespace QSB.ItemSync.WorldObjects namespace QSB.ItemSync.WorldObjects.Sockets
{ {
internal class QSBWarpCoreSocket : QSBOWItemSocket<WarpCoreSocket> internal class QSBWarpCoreSocket : QSBOWItemSocket<WarpCoreSocket>
{ {

View File

@ -27,7 +27,7 @@ namespace QSB.Player
if (_previousCollidingQuantumObject != collidingQuantumObject) if (_previousCollidingQuantumObject != collidingQuantumObject)
{ {
var objectIndex = (collidingQuantumObject != null) var objectIndex = (collidingQuantumObject != null)
? QSBWorldSync.GetIdFromTypeSubset(QuantumManager.GetObject(collidingQuantumObject)) ? QSBWorldSync.GetIdFromTypeSubset((IQSBQuantumObject)QSBWorldSync.GetWorldFromUnity(collidingQuantumObject))
: -1; : -1;
QSBEventManager.FireEvent( QSBEventManager.FireEvent(

View File

@ -4,6 +4,7 @@ using QSB.Animation.Player.Thrusters;
using QSB.CampfireSync.WorldObjects; using QSB.CampfireSync.WorldObjects;
using QSB.ClientServerStateSync; using QSB.ClientServerStateSync;
using QSB.ItemSync.WorldObjects; using QSB.ItemSync.WorldObjects;
using QSB.ItemSync.WorldObjects.Items;
using QSB.Player.TransformSync; using QSB.Player.TransformSync;
using QSB.ProbeSync; using QSB.ProbeSync;
using QSB.QuantumSync; using QSB.QuantumSync;
@ -94,6 +95,10 @@ namespace QSB.Player
public Transform SharedStoneSocket => CameraBody.transform.Find("REMOTE_SharedStoneSocket"); public Transform SharedStoneSocket => CameraBody.transform.Find("REMOTE_SharedStoneSocket");
public Transform WarpCoreSocket => CameraBody.transform.Find("REMOTE_WarpCoreSocket"); public Transform WarpCoreSocket => CameraBody.transform.Find("REMOTE_WarpCoreSocket");
public Transform VesselCoreSocket => CameraBody.transform.Find("REMOTE_VesselCoreSocket"); public Transform VesselCoreSocket => CameraBody.transform.Find("REMOTE_VesselCoreSocket");
public Transform SimpleLanternSocket => CameraBody.transform.Find("REMOTE_SimpleLanternSocket");
public Transform DreamLanternSocket => CameraBody.transform.Find("REMOTE_DreamLanternSocket");
public Transform SlideReelSocket => CameraBody.transform.Find("REMOTE_SlideReelSocket");
public Transform VisionTorchSocket => CameraBody.transform.Find("REMOTE_VisionTorchSocket");
public QSBMarshmallow Marshmallow { get; set; } public QSBMarshmallow Marshmallow { get; set; }
public QSBCampfire Campfire { get; set; } public QSBCampfire Campfire { get; set; }
public IQSBOWItem HeldItem { get; set; } public IQSBOWItem HeldItem { get; set; }

View File

@ -1,5 +1,5 @@
using OWML.Common; using OWML.Common;
using QSB.ItemSync.WorldObjects; using QSB.ItemSync.WorldObjects.Items;
using QSB.Player.Events; using QSB.Player.Events;
using QSB.Player.TransformSync; using QSB.Player.TransformSync;
using QSB.Tools; using QSB.Tools;

View File

@ -105,6 +105,11 @@
<Compile Include="Instruments\QSBCamera\CameraManager.cs" /> <Compile Include="Instruments\QSBCamera\CameraManager.cs" />
<Compile Include="Instruments\QSBCamera\CameraMode.cs" /> <Compile Include="Instruments\QSBCamera\CameraMode.cs" />
<Compile Include="Instruments\InstrumentsManager.cs" /> <Compile Include="Instruments\InstrumentsManager.cs" />
<Compile Include="ItemSync\WorldObjects\Items\QSBSimpleLanternItem.cs" />
<Compile Include="ItemSync\WorldObjects\Items\QSBSlideReelItem.cs" />
<Compile Include="ItemSync\WorldObjects\Sockets\QSBOWItemDoubleSocket.cs" />
<Compile Include="ItemSync\WorldObjects\Sockets\QSBSlideProjectorSocket.cs" />
<Compile Include="ItemSync\WorldObjects\Sockets\QSBSlideReelSocket.cs" />
<Compile Include="Menus\IMenuAPI.cs" /> <Compile Include="Menus\IMenuAPI.cs" />
<Compile Include="Menus\MenuManager.cs" /> <Compile Include="Menus\MenuManager.cs" />
<Compile Include="Messaging\BoolMessage.cs" /> <Compile Include="Messaging\BoolMessage.cs" />
@ -126,18 +131,18 @@
<Compile Include="ItemSync\Patches\ItemPatches.cs" /> <Compile Include="ItemSync\Patches\ItemPatches.cs" />
<Compile Include="ItemSync\SocketEventType.cs" /> <Compile Include="ItemSync\SocketEventType.cs" />
<Compile Include="PoolSync\CustomNomaiRemoteCamera.cs" /> <Compile Include="PoolSync\CustomNomaiRemoteCamera.cs" />
<Compile Include="ItemSync\WorldObjects\IQSBOWItem.cs" /> <Compile Include="ItemSync\WorldObjects\Items\IQSBOWItem.cs" />
<Compile Include="ItemSync\WorldObjects\IQSBOWItemSocket.cs" /> <Compile Include="ItemSync\WorldObjects\Sockets\IQSBOWItemSocket.cs" />
<Compile Include="ItemSync\WorldObjects\QSBNomaiConversationStone.cs" /> <Compile Include="ItemSync\WorldObjects\Items\QSBNomaiConversationStone.cs" />
<Compile Include="ItemSync\WorldObjects\QSBNomaiConversationStoneSocket.cs" /> <Compile Include="ItemSync\WorldObjects\Sockets\QSBNomaiConversationStoneSocket.cs" />
<Compile Include="ItemSync\WorldObjects\QSBOWItem.cs" /> <Compile Include="ItemSync\WorldObjects\Items\QSBOWItem.cs" />
<Compile Include="ItemSync\WorldObjects\QSBOWItemSocket.cs" /> <Compile Include="ItemSync\WorldObjects\Sockets\QSBOWItemSocket.cs" />
<Compile Include="ItemSync\WorldObjects\QSBScrollItem.cs" /> <Compile Include="ItemSync\WorldObjects\Items\QSBScrollItem.cs" />
<Compile Include="ItemSync\WorldObjects\QSBScrollSocket.cs" /> <Compile Include="ItemSync\WorldObjects\Sockets\QSBScrollSocket.cs" />
<Compile Include="ItemSync\WorldObjects\QSBSharedStone.cs" /> <Compile Include="ItemSync\WorldObjects\Items\QSBSharedStone.cs" />
<Compile Include="ItemSync\WorldObjects\QSBSharedStoneSocket.cs" /> <Compile Include="ItemSync\WorldObjects\Sockets\QSBSharedStoneSocket.cs" />
<Compile Include="ItemSync\WorldObjects\QSBWarpCoreItem.cs" /> <Compile Include="ItemSync\WorldObjects\Items\QSBWarpCoreItem.cs" />
<Compile Include="ItemSync\WorldObjects\QSBWarpCoreSocket.cs" /> <Compile Include="ItemSync\WorldObjects\Sockets\QSBWarpCoreSocket.cs" />
<Compile Include="LogSync\Events\RevealFactEvent.cs" /> <Compile Include="LogSync\Events\RevealFactEvent.cs" />
<Compile Include="LogSync\Events\RevealFactMessage.cs" /> <Compile Include="LogSync\Events\RevealFactMessage.cs" />
<Compile Include="LogSync\Patches\LogPatches.cs" /> <Compile Include="LogSync\Patches\LogPatches.cs" />

View File

@ -40,7 +40,7 @@ namespace QSB.QuantumSync.Patches
{ {
if (WorldObjectManager.AllReady) if (WorldObjectManager.AllReady)
{ {
var socketedWorldObject = QSBWorldSync.GetWorldFromUnity<QSBSocketedQuantumObject, SocketedQuantumObject>(__instance); var socketedWorldObject = QSBWorldSync.GetWorldFromUnity<QSBSocketedQuantumObject>(__instance);
if (socketedWorldObject.ControllingPlayer != QSBPlayerManager.LocalPlayerId) if (socketedWorldObject.ControllingPlayer != QSBPlayerManager.LocalPlayerId)
{ {
return false; return false;
@ -154,8 +154,8 @@ namespace QSB.QuantumSync.Patches
return; return;
} }
var objectWorldObject = QSBWorldSync.GetWorldFromUnity<QSBSocketedQuantumObject, SocketedQuantumObject>(__instance); var objectWorldObject = QSBWorldSync.GetWorldFromUnity<QSBSocketedQuantumObject>(__instance);
var socketWorldObject = QSBWorldSync.GetWorldFromUnity<QSBQuantumSocket, QuantumSocket>(socket); var socketWorldObject = QSBWorldSync.GetWorldFromUnity<QSBQuantumSocket>(socket);
if (objectWorldObject == null) if (objectWorldObject == null)
{ {
@ -187,7 +187,7 @@ namespace QSB.QuantumSync.Patches
QSBQuantumShuffleObject shuffleWorldObject = default; QSBQuantumShuffleObject shuffleWorldObject = default;
if (WorldObjectManager.AllReady) if (WorldObjectManager.AllReady)
{ {
shuffleWorldObject = QSBWorldSync.GetWorldFromUnity<QSBQuantumShuffleObject, QuantumShuffleObject>(__instance); shuffleWorldObject = QSBWorldSync.GetWorldFromUnity<QSBQuantumShuffleObject>(__instance);
if (shuffleWorldObject.ControllingPlayer != QSBPlayerManager.LocalPlayerId) if (shuffleWorldObject.ControllingPlayer != QSBPlayerManager.LocalPlayerId)
{ {
return false; return false;
@ -230,7 +230,7 @@ namespace QSB.QuantumSync.Patches
return true; return true;
} }
var qsbObj = QSBWorldSync.GetWorldFromUnity<QSBMultiStateQuantumObject, MultiStateQuantumObject>(__instance); var qsbObj = QSBWorldSync.GetWorldFromUnity<QSBMultiStateQuantumObject>(__instance);
if (qsbObj.ControllingPlayer == 0) if (qsbObj.ControllingPlayer == 0)
{ {
return true; return true;
@ -266,7 +266,7 @@ namespace QSB.QuantumSync.Patches
return true; return true;
} }
var qsbObj = QSBWorldSync.GetWorldFromUnity<QSBMultiStateQuantumObject, MultiStateQuantumObject>(__instance); var qsbObj = QSBWorldSync.GetWorldFromUnity<QSBMultiStateQuantumObject>(__instance);
if (qsbObj.ControllingPlayer == 0 && qsbObj.CurrentState == -1) if (qsbObj.ControllingPlayer == 0 && qsbObj.CurrentState == -1)
{ {
return true; return true;
@ -291,7 +291,7 @@ namespace QSB.QuantumSync.Patches
} }
var allMultiStates = QSBWorldSync.GetWorldObjects<QSBMultiStateQuantumObject>(); var allMultiStates = QSBWorldSync.GetWorldObjects<QSBMultiStateQuantumObject>();
var stateObject = QSBWorldSync.GetWorldFromUnity<QSBQuantumState, QuantumState>(__instance); var stateObject = QSBWorldSync.GetWorldFromUnity<QSBQuantumState>(__instance);
var owner = allMultiStates.FirstOrDefault(x => x.QuantumStates.Contains(stateObject)); var owner = allMultiStates.FirstOrDefault(x => x.QuantumStates.Contains(stateObject));
if (owner == default) if (owner == default)
{ {
@ -363,7 +363,7 @@ namespace QSB.QuantumSync.Patches
[HarmonyPatch(typeof(QuantumShrine), nameof(QuantumShrine.ChangeQuantumState))] [HarmonyPatch(typeof(QuantumShrine), nameof(QuantumShrine.ChangeQuantumState))]
public static bool QuantumShrine_ChangeQuantumState(QuantumShrine __instance) public static bool QuantumShrine_ChangeQuantumState(QuantumShrine __instance)
{ {
var shrineWorldObject = QSBWorldSync.GetWorldFromUnity<QSBSocketedQuantumObject, SocketedQuantumObject>(__instance); var shrineWorldObject = QSBWorldSync.GetWorldFromUnity<QSBSocketedQuantumObject>(__instance);
var isInControl = shrineWorldObject.ControllingPlayer == QSBPlayerManager.LocalPlayerId; var isInControl = shrineWorldObject.ControllingPlayer == QSBPlayerManager.LocalPlayerId;
return isInControl; return isInControl;
} }

View File

@ -132,39 +132,8 @@ namespace QSB.QuantumSync
return Enumerable.Empty<PlayerInfo>(); return Enumerable.Empty<PlayerInfo>();
} }
var worldObj = GetObject(obj); var worldObj = (IQSBQuantumObject)QSBWorldSync.GetWorldFromUnity(obj);
return QSBPlayerManager.PlayerList.Where(x => x.EntangledObject == worldObj); return QSBPlayerManager.PlayerList.Where(x => x.EntangledObject == worldObj);
} }
public static IQSBQuantumObject GetObject(QuantumObject unityObject)
{
IQSBQuantumObject worldObj = null;
if (unityObject.GetType() == typeof(SocketedQuantumObject) || unityObject.GetType() == typeof(QuantumShrine))
{
worldObj = QSBWorldSync.GetWorldFromUnity<QSBSocketedQuantumObject, SocketedQuantumObject>((SocketedQuantumObject)unityObject);
}
else if (unityObject.GetType() == typeof(MultiStateQuantumObject))
{
worldObj = QSBWorldSync.GetWorldFromUnity<QSBMultiStateQuantumObject, MultiStateQuantumObject>((MultiStateQuantumObject)unityObject);
}
else if (unityObject.GetType() == typeof(QuantumShuffleObject))
{
worldObj = QSBWorldSync.GetWorldFromUnity<QSBQuantumShuffleObject, QuantumShuffleObject>((QuantumShuffleObject)unityObject);
}
else if (unityObject.GetType() == typeof(QuantumMoon))
{
worldObj = QSBWorldSync.GetWorldFromUnity<QSBQuantumMoon, QuantumMoon>((QuantumMoon)unityObject);
}
else if (unityObject.GetType() == typeof(EyeProxyQuantumMoon))
{
worldObj = QSBWorldSync.GetWorldFromUnity<QSBEyeProxyQuantumMoon, EyeProxyQuantumMoon>((EyeProxyQuantumMoon)unityObject);
}
else
{
DebugLog.ToConsole($"Warning - couldn't work out type of QuantumObject {unityObject.name}.", MessageType.Warning);
}
return worldObj;
}
} }
} }

View File

@ -36,7 +36,7 @@ namespace QSB.QuantumSync.WorldObjects
public override void PostInit() public override void PostInit()
{ {
QuantumStates = AttachedObject._states.ToList().Select(x => QSBWorldSync.GetWorldFromUnity<QSBQuantumState, QuantumState>(x)).ToList(); QuantumStates = AttachedObject._states.ToList().Select(x => QSBWorldSync.GetWorldFromUnity<QSBQuantumState>(x)).ToList();
if (QuantumStates.Any(x => x == null)) if (QuantumStates.Any(x => x == null))
{ {

View File

@ -31,7 +31,7 @@ namespace QSB.RoastingSync.Events
return; return;
} }
var qsbObj = QSBWorldSync.GetWorldFromUnity<QSBCampfire, Campfire>(campfire); var qsbObj = QSBWorldSync.GetWorldFromUnity<QSBCampfire>(campfire);
SendEvent(CreateMessage(qsbObj.ObjectId, roasting)); SendEvent(CreateMessage(qsbObj.ObjectId, roasting));
} }

View File

@ -78,7 +78,7 @@ namespace QSB.SectorSync
private void AddSector(Sector sector) private void AddSector(Sector sector)
{ {
var worldObject = QSBWorldSync.GetWorldFromUnity<QSBSector, Sector>(sector); var worldObject = QSBWorldSync.GetWorldFromUnity<QSBSector>(sector);
if (worldObject == null) if (worldObject == null)
{ {
DebugLog.ToConsole($"Error - Can't find QSBSector for sector {sector.name}!", MessageType.Error); DebugLog.ToConsole($"Error - Can't find QSBSector for sector {sector.name}!", MessageType.Error);
@ -95,7 +95,7 @@ namespace QSB.SectorSync
private void RemoveSector(Sector sector) private void RemoveSector(Sector sector)
{ {
var worldObject = QSBWorldSync.GetWorldFromUnity<QSBSector, Sector>(sector); var worldObject = QSBWorldSync.GetWorldFromUnity<QSBSector>(sector);
if (worldObject == null) if (worldObject == null)
{ {
DebugLog.ToConsole($"Error - Can't find QSBSector for sector {sector.name}!", MessageType.Error); DebugLog.ToConsole($"Error - Can't find QSBSector for sector {sector.name}!", MessageType.Error);

View File

@ -16,7 +16,7 @@ namespace QSB.ShipSync.Events.Component
private WorldObjectMessage CreateMessage(ShipComponent hull) private WorldObjectMessage CreateMessage(ShipComponent hull)
{ {
var worldObject = QSBWorldSync.GetWorldFromUnity<QSBShipComponent, ShipComponent>(hull); var worldObject = QSBWorldSync.GetWorldFromUnity<QSBShipComponent>(hull);
return new WorldObjectMessage return new WorldObjectMessage
{ {
AboutId = LocalPlayerId, AboutId = LocalPlayerId,

View File

@ -15,7 +15,7 @@ namespace QSB.ShipSync.Events.Component
private RepairTickMessage CreateMessage(ShipComponent hull, float repairFraction) private RepairTickMessage CreateMessage(ShipComponent hull, float repairFraction)
{ {
var worldObject = QSBWorldSync.GetWorldFromUnity<QSBShipComponent, ShipComponent>(hull); var worldObject = QSBWorldSync.GetWorldFromUnity<QSBShipComponent>(hull);
return new RepairTickMessage return new RepairTickMessage
{ {
AboutId = LocalPlayerId, AboutId = LocalPlayerId,

View File

@ -16,7 +16,7 @@ namespace QSB.ShipSync.Events.Component
private WorldObjectMessage CreateMessage(ShipComponent hull) private WorldObjectMessage CreateMessage(ShipComponent hull)
{ {
var worldObject = QSBWorldSync.GetWorldFromUnity<QSBShipComponent, ShipComponent>(hull); var worldObject = QSBWorldSync.GetWorldFromUnity<QSBShipComponent>(hull);
return new WorldObjectMessage return new WorldObjectMessage
{ {
AboutId = LocalPlayerId, AboutId = LocalPlayerId,

View File

@ -15,7 +15,7 @@ namespace QSB.ShipSync.Events.Hull
private HullChangeIntegrityMessage CreateMessage(ShipHull hull, float integrity) private HullChangeIntegrityMessage CreateMessage(ShipHull hull, float integrity)
{ {
var worldObject = QSBWorldSync.GetWorldFromUnity<QSBShipHull, ShipHull>(hull); var worldObject = QSBWorldSync.GetWorldFromUnity<QSBShipHull>(hull);
return new HullChangeIntegrityMessage return new HullChangeIntegrityMessage
{ {
AboutId = LocalPlayerId, AboutId = LocalPlayerId,

View File

@ -16,7 +16,7 @@ namespace QSB.ShipSync.Events.Hull
private WorldObjectMessage CreateMessage(ShipHull hull) private WorldObjectMessage CreateMessage(ShipHull hull)
{ {
var worldObject = QSBWorldSync.GetWorldFromUnity<QSBShipHull, ShipHull>(hull); var worldObject = QSBWorldSync.GetWorldFromUnity<QSBShipHull>(hull);
return new WorldObjectMessage return new WorldObjectMessage
{ {
AboutId = LocalPlayerId, AboutId = LocalPlayerId,

View File

@ -15,7 +15,7 @@ namespace QSB.ShipSync.Events.Hull
private HullImpactMessage CreateMessage(ShipHull hull, ImpactData data, float damage) private HullImpactMessage CreateMessage(ShipHull hull, ImpactData data, float damage)
{ {
var worldObject = QSBWorldSync.GetWorldFromUnity<QSBShipHull, ShipHull>(hull); var worldObject = QSBWorldSync.GetWorldFromUnity<QSBShipHull>(hull);
return new HullImpactMessage return new HullImpactMessage
{ {
AboutId = LocalPlayerId, AboutId = LocalPlayerId,

View File

@ -15,7 +15,7 @@ namespace QSB.ShipSync.Events.Hull
private RepairTickMessage CreateMessage(ShipHull hull, float repairFraction) private RepairTickMessage CreateMessage(ShipHull hull, float repairFraction)
{ {
var worldObject = QSBWorldSync.GetWorldFromUnity<QSBShipHull, ShipHull>(hull); var worldObject = QSBWorldSync.GetWorldFromUnity<QSBShipHull>(hull);
return new RepairTickMessage return new RepairTickMessage
{ {
AboutId = LocalPlayerId, AboutId = LocalPlayerId,

View File

@ -16,7 +16,7 @@ namespace QSB.ShipSync.Events.Hull
private WorldObjectMessage CreateMessage(ShipHull hull) private WorldObjectMessage CreateMessage(ShipHull hull)
{ {
var worldObject = QSBWorldSync.GetWorldFromUnity<QSBShipHull, ShipHull>(hull); var worldObject = QSBWorldSync.GetWorldFromUnity<QSBShipHull>(hull);
return new WorldObjectMessage return new WorldObjectMessage
{ {
AboutId = LocalPlayerId, AboutId = LocalPlayerId,

View File

@ -212,6 +212,30 @@ namespace QSB.Tools
vesselCore.transform.localPosition = new Vector3(0.177f, -0.106f, 0.2f); vesselCore.transform.localPosition = new Vector3(0.177f, -0.106f, 0.2f);
vesselCore.transform.localRotation = Quaternion.Euler(3.142f, 14.827f, 12.094f); vesselCore.transform.localRotation = Quaternion.Euler(3.142f, 14.827f, 12.094f);
vesselCore.transform.localScale = new Vector3(0.27f, 0.27f, 0.27f); vesselCore.transform.localScale = new Vector3(0.27f, 0.27f, 0.27f);
var simpleLantern = new GameObject("REMOTE_SimpleLanternSocket");
simpleLantern.transform.parent = cameraBody;
simpleLantern.transform.localPosition = new Vector3(0.242997f, -0.18f, 0.2620007f);
simpleLantern.transform.localRotation = Quaternion.Euler(0f, 33f, 0f);
simpleLantern.transform.localScale = new Vector3(0.33f, 0.33f, 0.33f);
var dreamLantern = new GameObject("REMOTE_DreamLanternSocket");
dreamLantern.transform.parent = cameraBody;
dreamLantern.transform.localPosition = new Vector3(0.243f, -0.207f, 0.262f);
dreamLantern.transform.localRotation = Quaternion.Euler(0f, 0f, 0f);
dreamLantern.transform.localScale = new Vector3(0.33f, 0.33f, 0.33f);
var slideReel = new GameObject("REMOTE_SlideReelSocket");
slideReel.transform.parent = cameraBody;
slideReel.transform.localPosition = new Vector3(0.1353f, -0.0878f, 0.2878f);
slideReel.transform.localRotation = Quaternion.Euler(-145.532f, 6.589996f, -94.54901f);
slideReel.transform.localScale = new Vector3(0.3300001f, 0.33f, 0.3299999f);
var visionTorch = new GameObject("REMOTE_VisionTorchSocket");
visionTorch.transform.parent = cameraBody;
visionTorch.transform.localPosition = new Vector3(0.21f, -0.32f, 0.33f);
visionTorch.transform.localRotation = Quaternion.Euler(-4.5f, 0.03f, 9f);
visionTorch.transform.localScale = new Vector3(0.33f, 0.33f, 0.33f);
} }
private static void CreateFlashlight(Transform cameraBody) private static void CreateFlashlight(Transform cameraBody)

View File

@ -53,7 +53,7 @@ namespace QSB.Tools.ProbeLauncherTool.Patches
if (__instance != QSBPlayerManager.LocalPlayer.LocalProbeLauncher) if (__instance != QSBPlayerManager.LocalPlayer.LocalProbeLauncher)
{ {
QSBEventManager.FireEvent(EventNames.QSBRetrieveProbe, QSBWorldSync.GetWorldFromUnity<QSBProbeLauncher, ProbeLauncher>(__instance), playEffects); QSBEventManager.FireEvent(EventNames.QSBRetrieveProbe, QSBWorldSync.GetWorldFromUnity<QSBProbeLauncher>(__instance), playEffects);
} }
else else
{ {

View File

@ -23,7 +23,7 @@ namespace QSB.TranslationSync.Patches
QSBEventManager.FireEvent( QSBEventManager.FireEvent(
EventNames.QSBTextTranslated, EventNames.QSBTextTranslated,
NomaiTextType.WallText, NomaiTextType.WallText,
QSBWorldSync.GetIdFromUnity<QSBWallText, NomaiWallText>(__instance), QSBWorldSync.GetIdFromUnity<QSBWallText>(__instance),
id); id);
return true; return true;
} }
@ -40,7 +40,7 @@ namespace QSB.TranslationSync.Patches
QSBEventManager.FireEvent( QSBEventManager.FireEvent(
EventNames.QSBTextTranslated, EventNames.QSBTextTranslated,
NomaiTextType.Computer, NomaiTextType.Computer,
QSBWorldSync.GetIdFromUnity<QSBComputer, NomaiComputer>(__instance), QSBWorldSync.GetIdFromUnity<QSBComputer>(__instance),
id); id);
return true; return true;
} }
@ -57,7 +57,7 @@ namespace QSB.TranslationSync.Patches
QSBEventManager.FireEvent( QSBEventManager.FireEvent(
EventNames.QSBTextTranslated, EventNames.QSBTextTranslated,
NomaiTextType.VesselComputer, NomaiTextType.VesselComputer,
QSBWorldSync.GetIdFromUnity<QSBVesselComputer, NomaiVesselComputer>(__instance), QSBWorldSync.GetIdFromUnity<QSBVesselComputer>(__instance),
id); id);
return true; return true;
} }

View File

@ -33,9 +33,7 @@ namespace QSB.WorldSync
return GetWorldObjects<TWorldObject>().ToList()[id]; return GetWorldObjects<TWorldObject>().ToList()[id];
} }
public static TWorldObject GetWorldFromUnity<TWorldObject, TUnityObject>(TUnityObject unityObject) public static IWorldObject GetWorldFromUnity(MonoBehaviour unityObject)
where TWorldObject : WorldObject<TUnityObject>
where TUnityObject : MonoBehaviour
{ {
if (!WorldObjectManager.AllReady) if (!WorldObjectManager.AllReady)
{ {
@ -44,37 +42,73 @@ namespace QSB.WorldSync
if (unityObject == null) if (unityObject == null)
{ {
DebugLog.ToConsole($"Error - Trying to run GetWorldFromUnity with a null unity object! TWorldObject:{typeof(TWorldObject).Name}, TUnityObject:{typeof(TUnityObject).Name}", MessageType.Error); DebugLog.ToConsole($"Error - Trying to run GetWorldFromUnity with a null unity object! TUnityObject:NULL", MessageType.Error);
return default; return default;
} }
if (!QSBCore.IsInMultiplayer) if (!QSBCore.IsInMultiplayer)
{ {
DebugLog.ToConsole($"Warning - Trying to run GetWorldFromUnity while not in multiplayer! TWorldObject:{typeof(TWorldObject).Name}, TUnityObject:{typeof(TUnityObject).Name}", MessageType.Warning); DebugLog.ToConsole($"Warning - Trying to run GetWorldFromUnity while not in multiplayer! TUnityObject:{unityObject.GetType().Name}", MessageType.Warning);
return default; return default;
} }
if (!WorldObjectsToUnityObjects.ContainsKey(unityObject)) if (!WorldObjectsToUnityObjects.ContainsKey(unityObject))
{ {
DebugLog.ToConsole($"Error - WorldObjectsToUnityObjects does not contain \"{unityObject.name}\"! TWorldObject:{typeof(TWorldObject).Name}, TUnityObject:{typeof(TUnityObject).Name}", MessageType.Error); DebugLog.ToConsole($"Error - WorldObjectsToUnityObjects does not contain \"{unityObject.name}\"! TUnityObject:{unityObject.GetType().Name}", MessageType.Error);
return default; return default;
} }
var returnObject = WorldObjectsToUnityObjects[unityObject] as TWorldObject; var returnObject = WorldObjectsToUnityObjects[unityObject];
if (returnObject == default || returnObject == null) if (returnObject == null)
{ {
DebugLog.ToConsole($"Error - World object for unity object {unityObject.name} is null! TWorldObject:{typeof(TWorldObject).Name}, TUnityObject:{typeof(TUnityObject).Name}", MessageType.Error); DebugLog.ToConsole($"Error - World object for unity object {unityObject.name} is null! TUnityObject:{unityObject.GetType().Name}", MessageType.Error);
return default;
}
return (IWorldObject)returnObject;
}
public static TWorldObject GetWorldFromUnity<TWorldObject>(MonoBehaviour unityObject)
where TWorldObject : IWorldObject
{
if (!WorldObjectManager.AllReady)
{
return default;
}
if (unityObject == null)
{
DebugLog.ToConsole($"Error - Trying to run GetWorldFromUnity with a null unity object! TWorldObject:{typeof(TWorldObject).Name}, TUnityObject:NULL", MessageType.Error);
return default;
}
if (!QSBCore.IsInMultiplayer)
{
DebugLog.ToConsole($"Warning - Trying to run GetWorldFromUnity while not in multiplayer! TWorldObject:{typeof(TWorldObject).Name}, TUnityObject:{unityObject.GetType().Name}", MessageType.Warning);
return default;
}
if (!WorldObjectsToUnityObjects.ContainsKey(unityObject))
{
DebugLog.ToConsole($"Error - WorldObjectsToUnityObjects does not contain \"{unityObject.name}\"! TWorldObject:{typeof(TWorldObject).Name}, TUnityObject:{unityObject.GetType().Name}", MessageType.Error);
return default;
}
var returnObject = (TWorldObject)WorldObjectsToUnityObjects[unityObject];
if (returnObject == null)
{
DebugLog.ToConsole($"Error - World object for unity object {unityObject.name} is null! TWorldObject:{typeof(TWorldObject).Name}, TUnityObject:{unityObject.GetType().Name}", MessageType.Error);
return default; return default;
} }
return returnObject; return returnObject;
} }
public static int GetIdFromUnity<TWorldObject, TUnityObject>(TUnityObject unityObject) public static int GetIdFromUnity<TWorldObject>(MonoBehaviour unityObject)
where TWorldObject : WorldObject<TUnityObject> where TWorldObject : IWorldObject
where TUnityObject : MonoBehaviour => GetWorldFromUnity<TWorldObject>(unityObject).ObjectId;
=> GetWorldFromUnity<TWorldObject, TUnityObject>(unityObject).ObjectId;
public static int GetIdFromTypeSubset<TTypeSubset>(TTypeSubset typeSubset) public static int GetIdFromTypeSubset<TTypeSubset>(TTypeSubset typeSubset)
{ {