use 1 world object for items

This commit is contained in:
JohnCorby 2022-01-25 21:48:52 -08:00
parent 55ba74f4e9
commit 87d5c26dcb
16 changed files with 33 additions and 131 deletions

View File

@ -15,12 +15,7 @@ namespace QSB.ItemSync
DebugLog.DebugWrite("Building 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<QSBItem, OWItem>();
// Sockets
QSBWorldSync.Init<QSBItemSocket, OWItemSocket>();

View File

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

View File

@ -4,7 +4,7 @@ using QSB.Player;
namespace QSB.ItemSync.Messages
{
internal class MoveToCarryMessage : QSBWorldObjectMessage<IQSBOWItem>
internal class MoveToCarryMessage : QSBWorldObjectMessage<QSBItem>
{
public override void OnReceiveRemote()
{
@ -16,7 +16,7 @@ namespace QSB.ItemSync.Messages
{
ItemType.Scroll => player.ScrollSocket,
ItemType.SharedStone => player.SharedStoneSocket,
ItemType.WarpCore => ((QSBWarpCoreItem)WorldObject).IsVesselCoreType()
ItemType.WarpCore => ((WarpCoreItem)WorldObject.AttachedObject).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;
IQSBOWItem itemWorldObject;
QSBItem itemWorldObject;
var player = QSBPlayerManager.GetPlayer(From);
player.HeldItem = null;
switch (Value)
{
case SocketMessageType.Socket:
socketWorldObject = SocketId.GetWorldObject<QSBItemSocket>();
itemWorldObject = ItemId.GetWorldObject<IQSBOWItem>();
itemWorldObject = ItemId.GetWorldObject<QSBItem>();
socketWorldObject.PlaceIntoSocket(itemWorldObject);
return;
@ -62,7 +62,7 @@ namespace QSB.ItemSync.Messages
socketWorldObject.RemoveFromSocket();
return;
case SocketMessageType.CompleteUnsocket:
itemWorldObject = ItemId.GetWorldObject<IQSBOWItem>();
itemWorldObject = ItemId.GetWorldObject<QSBItem>();
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<IQSBOWItem>();
var qsbObj = item.GetWorldObject<QSBItem>();
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<IQSBOWItem>();
var qsbObj = __instance._heldItem.GetWorldObject<QSBItem>();
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<IQSBOWItem>();
var item = socket.GetSocketedItem().GetWorldObject<QSBItem>();
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<IQSBOWItem>().ObjectId;
var itemId = __instance._heldItem.GetWorldObject<QSBItem>().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<IQSBOWItem>();
var qsbItem = __instance._heldItem.GetWorldObject<QSBItem>();
__instance._heldItem.DropItem(hit.point, hit.normal, parent, sector, customDropTarget);
__instance._heldItem = null;
QSBPlayerManager.LocalPlayer.HeldItem = null;

View File

@ -1,17 +0,0 @@
using QSB.WorldSync;
using UnityEngine;
namespace QSB.ItemSync.WorldObjects.Items
{
public interface IQSBOWItem : IWorldObject
{
ItemType GetItemType();
void SetColliderActivation(bool active);
void SocketItem(Transform socketTransform, Sector sector);
void PickUpItem(Transform holdTransform, uint playerId);
void DropItem(Vector3 position, Vector3 normal, Sector sector);
void PlaySocketAnimation();
void PlayUnsocketAnimation();
void OnCompleteUnsocket();
}
}

View File

@ -7,9 +7,7 @@ using UnityEngine;
namespace QSB.ItemSync.WorldObjects.Items
{
// todo make this one type
internal class QSBOWItem<T> : WorldObject<T>, IQSBOWItem
where T : OWItem
public class QSBItem : WorldObject<OWItem>
{
public QSBItemSocket InitialSocket { get; private set; }
public Transform InitialParent { get; private set; }
@ -89,19 +87,19 @@ namespace QSB.ItemSync.WorldObjects.Items
public void SetColliderActivation(bool active)
=> AttachedObject.SetColliderActivation(active);
public virtual void SocketItem(Transform socketTransform, Sector sector)
public void SocketItem(Transform socketTransform, Sector sector)
{
AttachedObject.SocketItem(socketTransform, sector);
HoldingPlayer = 0;
}
public virtual void PickUpItem(Transform holdTransform, uint playerId)
public void PickUpItem(Transform holdTransform, uint playerId)
{
AttachedObject.PickUpItem(holdTransform);
HoldingPlayer = playerId;
}
public virtual void DropItem(Vector3 position, Vector3 normal, Sector sector)
public void DropItem(Vector3 position, Vector3 normal, Sector sector)
{
AttachedObject.transform.SetParent(sector.transform);
AttachedObject.transform.localScale = Vector3.one;
@ -115,8 +113,13 @@ namespace QSB.ItemSync.WorldObjects.Items
HoldingPlayer = 0;
}
public virtual void PlaySocketAnimation() { }
public virtual void PlayUnsocketAnimation() { }
public virtual void OnCompleteUnsocket() { }
public void PlaySocketAnimation()
=> AttachedObject.PlaySocketAnimation();
public void PlayUnsocketAnimation()
=> AttachedObject.PlayUnsocketAnimation();
public void OnCompleteUnsocket()
=> AttachedObject.OnCompleteUnsocket();
}
}

View File

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

View File

@ -1,20 +0,0 @@
namespace QSB.ItemSync.WorldObjects.Items
{
internal class QSBScrollItem : QSBOWItem<ScrollItem>
{
public override void PlaySocketAnimation()
=> AttachedObject.PlaySocketAnimation();
public override void PlayUnsocketAnimation()
=> AttachedObject.PlayUnsocketAnimation();
public override void OnCompleteUnsocket()
=> AttachedObject.OnCompleteUnsocket();
public void HideNomaiText()
=> AttachedObject.HideNomaiText();
public void ShowNomaiText()
=> AttachedObject.ShowNomaiText();
}
}

View File

@ -1,17 +0,0 @@
namespace QSB.ItemSync.WorldObjects.Items
{
internal class QSBSharedStone : QSBOWItem<SharedStone>
{
public override void PlaySocketAnimation()
=> AttachedObject.PlaySocketAnimation();
public override void PlayUnsocketAnimation()
=> AttachedObject.PlayUnsocketAnimation();
public override void OnCompleteUnsocket()
=> AttachedObject.OnCompleteUnsocket();
public NomaiRemoteCameraPlatform.ID GetRemoteCameraID()
=> AttachedObject.GetRemoteCameraID();
}
}

View File

@ -1,14 +0,0 @@
namespace QSB.ItemSync.WorldObjects.Items
{
internal class QSBSimpleLanternItem : QSBOWItem<SimpleLanternItem>
{
public override void PlaySocketAnimation()
=> AttachedObject.PlaySocketAnimation();
public override void PlayUnsocketAnimation()
=> AttachedObject.PlayUnsocketAnimation();
public override void OnCompleteUnsocket()
=> AttachedObject.OnCompleteUnsocket();
}
}

View File

@ -1,14 +0,0 @@
namespace QSB.ItemSync.WorldObjects.Items
{
internal class QSBSlideReelItem : QSBOWItem<SlideReelItem>
{
public override void PlaySocketAnimation()
=> AttachedObject.PlaySocketAnimation();
public override void PlayUnsocketAnimation()
=> AttachedObject.PlayUnsocketAnimation();
public override void OnCompleteUnsocket()
=> AttachedObject.OnCompleteUnsocket();
}
}

View File

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

View File

@ -3,14 +3,14 @@ using QSB.WorldSync;
namespace QSB.ItemSync.WorldObjects.Sockets
{
internal class QSBItemSocket : WorldObject<OWItemSocket>
public class QSBItemSocket : WorldObject<OWItemSocket>
{
public override void SendResyncInfo(uint to)
{
// todo SendResyncInfo
}
public bool AcceptsItem(IQSBOWItem item)
public bool AcceptsItem(QSBItem item)
{
var itemType = item.GetItemType();
var acceptableType = AttachedObject._acceptableType;
@ -20,10 +20,10 @@ namespace QSB.ItemSync.WorldObjects.Sockets
public bool IsSocketOccupied()
=> AttachedObject.IsSocketOccupied();
public bool PlaceIntoSocket(IQSBOWItem item)
=> AttachedObject.PlaceIntoSocket((OWItem)item.ReturnObject());
public bool PlaceIntoSocket(QSBItem item)
=> AttachedObject.PlaceIntoSocket(item.AttachedObject);
public IQSBOWItem RemoveFromSocket()
=> AttachedObject.RemoveFromSocket().GetWorldObject<IQSBOWItem>();
public QSBItem RemoveFromSocket()
=> AttachedObject.RemoveFromSocket().GetWorldObject<QSBItem>();
}
}

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 IQSBOWItem HeldItem { get; set; }
public QSBItem 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, IQSBOWItem>> GetPlayerCarryItems()
=> PlayerList.Select(x => new Tuple<PlayerInfo, IQSBOWItem>(x, x.HeldItem));
public static IEnumerable<Tuple<PlayerInfo, QSBItem>> GetPlayerCarryItems()
=> PlayerList.Select(x => new Tuple<PlayerInfo, QSBItem>(x, x.HeldItem));
}
}