un-consolidate QSBItem

This commit is contained in:
JohnCorby 2022-01-26 00:41:39 -08:00
parent 779cf15022
commit 43387d5c63
18 changed files with 76 additions and 20 deletions

View File

@ -15,7 +15,14 @@ namespace QSB.ItemSync
DebugLog.DebugWrite("Building OWItems...", MessageType.Info);
// Items
QSBWorldSync.Init<QSBItem, OWItem>();
QSBWorldSync.Init<QSBDreamLanternItem, DreamLanternItem>();
QSBWorldSync.Init<QSBNomaiConversationStone, NomaiConversationStone>();
QSBWorldSync.Init<QSBScrollItem, ScrollItem>();
QSBWorldSync.Init<QSBSharedStone, SharedStone>();
QSBWorldSync.Init<QSBSimpleLanternItem, SimpleLanternItem>();
QSBWorldSync.Init<QSBSlideReelItem, SlideReelItem>();
QSBWorldSync.Init<QSBVisionTorchItem, VisionTorchItem>();
QSBWorldSync.Init<QSBWarpCoreItem, WarpCoreItem>();
// Sockets
QSBWorldSync.Init<QSBItemSocket, OWItemSocket>();

View File

@ -8,7 +8,7 @@ using UnityEngine;
namespace QSB.ItemSync.Messages
{
internal class DropItemMessage : QSBWorldObjectMessage<QSBItem>
internal class DropItemMessage : QSBWorldObjectMessage<IQSBItem>
{
private Vector3 Position;
private Vector3 Normal;

View File

@ -4,7 +4,7 @@ using QSB.Player;
namespace QSB.ItemSync.Messages
{
internal class MoveToCarryMessage : QSBWorldObjectMessage<QSBItem>
internal class MoveToCarryMessage : QSBWorldObjectMessage<IQSBItem>
{
public override void OnReceiveRemote()
{
@ -16,7 +16,7 @@ namespace QSB.ItemSync.Messages
{
ItemType.Scroll => player.ScrollSocket,
ItemType.SharedStone => player.SharedStoneSocket,
ItemType.WarpCore => ((WarpCoreItem)WorldObject.AttachedObject).IsVesselCoreType()
ItemType.WarpCore => ((QSBWarpCoreItem)WorldObject).IsVesselCoreType()
? player.VesselCoreSocket
: player.WarpCoreSocket,
ItemType.Lantern => player.SimpleLanternSocket,

View File

@ -39,14 +39,14 @@ namespace QSB.ItemSync.Messages
public override void OnReceiveRemote()
{
QSBItemSocket socketWorldObject;
QSBItem itemWorldObject;
IQSBItem itemWorldObject;
var player = QSBPlayerManager.GetPlayer(From);
player.HeldItem = null;
switch (Value)
{
case SocketMessageType.Socket:
socketWorldObject = SocketId.GetWorldObject<QSBItemSocket>();
itemWorldObject = ItemId.GetWorldObject<QSBItem>();
itemWorldObject = ItemId.GetWorldObject<IQSBItem>();
socketWorldObject.PlaceIntoSocket(itemWorldObject);
return;
@ -62,7 +62,7 @@ namespace QSB.ItemSync.Messages
socketWorldObject.RemoveFromSocket();
return;
case SocketMessageType.CompleteUnsocket:
itemWorldObject = ItemId.GetWorldObject<QSBItem>();
itemWorldObject = ItemId.GetWorldObject<IQSBItem>();
itemWorldObject.OnCompleteUnsocket();
return;

View File

@ -21,7 +21,7 @@ namespace QSB.ItemSync.Patches
[HarmonyPatch(typeof(ItemTool), nameof(ItemTool.MoveItemToCarrySocket))]
public static bool ItemTool_MoveItemToCarrySocket(OWItem item)
{
var qsbObj = item.GetWorldObject<QSBItem>();
var qsbObj = item.GetWorldObject<IQSBItem>();
QSBPlayerManager.LocalPlayer.HeldItem = qsbObj;
qsbObj.SendMessage(new MoveToCarryMessage());
return true;
@ -31,7 +31,7 @@ namespace QSB.ItemSync.Patches
[HarmonyPatch(typeof(ItemTool), nameof(ItemTool.SocketItem))]
public static bool ItemTool_SocketItem(ItemTool __instance, OWItemSocket socket)
{
var qsbObj = __instance._heldItem.GetWorldObject<QSBItem>();
var qsbObj = __instance._heldItem.GetWorldObject<IQSBItem>();
var socketId = socket.GetWorldObject<QSBItemSocket>().ObjectId;
var itemId = qsbObj.ObjectId;
QSBPlayerManager.LocalPlayer.HeldItem = null;
@ -43,7 +43,7 @@ namespace QSB.ItemSync.Patches
[HarmonyPatch(typeof(ItemTool), nameof(ItemTool.StartUnsocketItem))]
public static bool ItemTool_StartUnsocketItem(OWItemSocket socket)
{
var item = socket.GetSocketedItem().GetWorldObject<QSBItem>();
var item = socket.GetSocketedItem().GetWorldObject<IQSBItem>();
QSBPlayerManager.LocalPlayer.HeldItem = item;
var socketId = socket.GetWorldObject<QSBItemSocket>().ObjectId;
new SocketItemMessage(SocketMessageType.StartUnsocket, socketId).Send();
@ -54,7 +54,7 @@ namespace QSB.ItemSync.Patches
[HarmonyPatch(typeof(ItemTool), nameof(ItemTool.CompleteUnsocketItem))]
public static bool ItemTool_CompleteUnsocketItem(ItemTool __instance)
{
var itemId = __instance._heldItem.GetWorldObject<QSBItem>().ObjectId;
var itemId = __instance._heldItem.GetWorldObject<IQSBItem>().ObjectId;
new SocketItemMessage(SocketMessageType.CompleteUnsocket, itemId: itemId).Send();
return true;
}
@ -90,7 +90,7 @@ namespace QSB.ItemSync.Patches
var parent = (customDropTarget == null)
? targetRigidbody.transform
: customDropTarget.GetItemDropTargetTransform(hit.collider.gameObject);
var qsbItem = __instance._heldItem.GetWorldObject<QSBItem>();
var IQSBItem = __instance._heldItem.GetWorldObject<IQSBItem>();
__instance._heldItem.DropItem(hit.point, hit.normal, parent, sector, customDropTarget);
__instance._heldItem = null;
QSBPlayerManager.LocalPlayer.HeldItem = null;
@ -99,7 +99,7 @@ namespace QSB.ItemSync.Patches
if (parentSector != null)
{
var localPos = parentSector.transform.InverseTransformPoint(hit.point);
qsbItem.SendMessage(new DropItemMessage(localPos, hit.normal, parentSector));
IQSBItem.SendMessage(new DropItemMessage(localPos, hit.normal, parentSector));
return false;
}

View File

@ -0,0 +1,13 @@
using QSB.WorldSync;
using UnityEngine;
namespace QSB.ItemSync.WorldObjects.Items
{
public interface IQSBItem : IWorldObject
{
ItemType GetItemType();
void PickUpItem(Transform itemSocket);
void DropItem(Vector3 position, Vector3 normal, Sector sector);
void OnCompleteUnsocket();
}
}

View File

@ -0,0 +1,4 @@
namespace QSB.ItemSync.WorldObjects.Items
{
internal class QSBDreamLanternItem : QSBItem<DreamLanternItem> { }
}

View File

@ -7,7 +7,8 @@ using UnityEngine;
namespace QSB.ItemSync.WorldObjects.Items
{
public class QSBItem : WorldObject<OWItem>
internal class QSBItem<T> : WorldObject<T>, IQSBItem
where T : OWItem
{
private QSBItemSocket InitialSocket { get; set; }
private Transform InitialParent { get; set; }

View File

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

View File

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

View File

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

View File

@ -0,0 +1,4 @@
namespace QSB.ItemSync.WorldObjects.Items
{
internal class QSBSimpleLanternItem : QSBItem<SimpleLanternItem> { }
}

View File

@ -0,0 +1,4 @@
namespace QSB.ItemSync.WorldObjects.Items
{
internal class QSBSlideReelItem : QSBItem<SlideReelItem> { }
}

View File

@ -0,0 +1,4 @@
namespace QSB.ItemSync.WorldObjects.Items
{
internal class QSBVisionTorchItem : QSBItem<VisionTorchItem> { }
}

View File

@ -0,0 +1,7 @@
namespace QSB.ItemSync.WorldObjects.Items
{
internal class QSBWarpCoreItem : QSBItem<WarpCoreItem>
{
public bool IsVesselCoreType() => AttachedObject.IsVesselCoreType();
}
}

View File

@ -3,7 +3,7 @@ using QSB.WorldSync;
namespace QSB.ItemSync.WorldObjects.Sockets
{
public class QSBItemSocket : WorldObject<OWItemSocket>
internal class QSBItemSocket : WorldObject<OWItemSocket>
{
public override void SendInitialState(uint to)
{
@ -13,8 +13,8 @@ namespace QSB.ItemSync.WorldObjects.Sockets
public bool IsSocketOccupied()
=> AttachedObject.IsSocketOccupied();
public void PlaceIntoSocket(QSBItem item)
=> AttachedObject.PlaceIntoSocket(item.AttachedObject);
public void PlaceIntoSocket(IQSBItem item)
=> AttachedObject.PlaceIntoSocket((OWItem)item.ReturnObject());
public void RemoveFromSocket()
=> AttachedObject.RemoveFromSocket();

View File

@ -115,7 +115,7 @@ namespace QSB.Player
public Transform VisionTorchSocket => CameraBody.transform.Find("REMOTE_VisionTorchSocket");
public QSBMarshmallow Marshmallow { get; set; }
public QSBCampfire Campfire { get; set; }
public QSBItem HeldItem { get; set; }
public IQSBItem HeldItem { get; set; }
public bool FlashlightActive { get; set; }
public bool SuitedUp { get; set; }
public bool ProbeLauncherEquipped { get; set; }

View File

@ -114,7 +114,7 @@ namespace QSB.Player
return playerList.Where(x => x.IsReady && x.Body != null).OrderBy(x => Vector3.Distance(x.Body.transform.position, worldPoint)).FirstOrDefault();
}
public static IEnumerable<Tuple<PlayerInfo, QSBItem>> GetPlayerCarryItems()
=> PlayerList.Select(x => new Tuple<PlayerInfo, QSBItem>(x, x.HeldItem));
public static IEnumerable<Tuple<PlayerInfo, IQSBItem>> GetPlayerCarryItems()
=> PlayerList.Select(x => new Tuple<PlayerInfo, IQSBItem>(x, x.HeldItem));
}
}