make SocketItemMessage a QSBWorldObjectMessage

This commit is contained in:
JohnCorby 2022-10-05 16:43:36 -07:00
parent 93f66df201
commit 027ff0becc
3 changed files with 15 additions and 19 deletions

View File

@ -7,12 +7,11 @@ using QSB.WorldSync;
namespace QSB.ItemSync.Messages;
internal class SocketItemMessage : QSBMessage<(SocketMessageType Type, int SocketId, int ItemId)>
internal class SocketItemMessage : QSBWorldObjectMessage<IQSBItem, (SocketMessageType Type, int SocketId)>
{
public SocketItemMessage(SocketMessageType type, OWItemSocket socket, OWItem item) : base((
public SocketItemMessage(SocketMessageType type, OWItemSocket socket) : base((
type,
socket ? socket.GetWorldObject<QSBItemSocket>().ObjectId : -1,
item ? item.GetWorldObject<IQSBItem>().ObjectId : -1
socket ? socket.GetWorldObject<QSBItemSocket>().ObjectId : -1
)) { }
public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
@ -24,12 +23,11 @@ internal class SocketItemMessage : QSBMessage<(SocketMessageType Type, int Socke
case SocketMessageType.Socket:
{
var qsbItemSocket = Data.SocketId.GetWorldObject<QSBItemSocket>();
var qsbItem = Data.ItemId.GetWorldObject<IQSBItem>();
qsbItemSocket.PlaceIntoSocket(qsbItem);
qsbItem.ItemState.HasBeenInteractedWith = true;
qsbItem.ItemState.State = ItemStateType.Socketed;
qsbItem.ItemState.Socket = qsbItemSocket.AttachedObject;
qsbItemSocket.PlaceIntoSocket(WorldObject);
WorldObject.ItemState.HasBeenInteractedWith = true;
WorldObject.ItemState.State = ItemStateType.Socketed;
WorldObject.ItemState.Socket = qsbItemSocket.AttachedObject;
var player = QSBPlayerManager.GetPlayer(From);
player.HeldItem = null;
@ -39,7 +37,6 @@ internal class SocketItemMessage : QSBMessage<(SocketMessageType Type, int Socke
case SocketMessageType.StartUnsocket:
{
var qsbItemSocket = Data.SocketId.GetWorldObject<QSBItemSocket>();
var qsbItem = Data.ItemId.GetWorldObject<IQSBItem>();
if (!qsbItemSocket.IsSocketOccupied())
{
@ -47,19 +44,17 @@ internal class SocketItemMessage : QSBMessage<(SocketMessageType Type, int Socke
return;
}
qsbItem.StoreLocation();
WorldObject.StoreLocation();
var player = QSBPlayerManager.GetPlayer(From);
player.HeldItem = qsbItem;
player.HeldItem = WorldObject;
qsbItemSocket.RemoveFromSocket();
return;
}
case SocketMessageType.CompleteUnsocket:
{
var qsbItem = Data.ItemId.GetWorldObject<IQSBItem>();
qsbItem.OnCompleteUnsocket();
WorldObject.OnCompleteUnsocket();
return;
}
}

View File

@ -35,7 +35,7 @@ internal class ItemToolPatches : QSBPatch
var qsbItem = item.GetWorldObject<IQSBItem>();
qsbItem.ItemState.State = ItemStateType.Socketed;
qsbItem.ItemState.Socket = socket;
new SocketItemMessage(SocketMessageType.Socket, socket, item).Send();
qsbItem.SendMessage(new SocketItemMessage(SocketMessageType.Socket, socket));
}
[HarmonyPrefix]
@ -46,7 +46,7 @@ internal class ItemToolPatches : QSBPatch
var qsbItem = item.GetWorldObject<IQSBItem>();
qsbItem.ItemState.HasBeenInteractedWith = true;
QSBPlayerManager.LocalPlayer.HeldItem = qsbItem;
new SocketItemMessage(SocketMessageType.StartUnsocket, socket, item).Send();
qsbItem.SendMessage(new SocketItemMessage(SocketMessageType.StartUnsocket, socket));
}
[HarmonyPrefix]
@ -54,7 +54,8 @@ internal class ItemToolPatches : QSBPatch
public static void CompleteUnsocketItem(ItemTool __instance)
{
var item = __instance._heldItem;
new SocketItemMessage(SocketMessageType.CompleteUnsocket, null, item).Send();
var qsbItem = item.GetWorldObject<IQSBItem>();
qsbItem.SendMessage(new SocketItemMessage(SocketMessageType.CompleteUnsocket, null));
}
[HarmonyPrefix]

View File

@ -97,7 +97,7 @@ public class QSBItem<T> : WorldObject<T>, IQSBItem
((IQSBItem)this).SendMessage(new MoveToCarryMessage(ItemState.HoldingPlayer.PlayerId));
break;
case ItemStateType.Socketed:
new SocketItemMessage(SocketMessageType.Socket, ItemState.Socket, AttachedObject).Send();
((IQSBItem)this).SendMessage(new SocketItemMessage(SocketMessageType.Socket, ItemState.Socket));
break;
case ItemStateType.OnGround:
((IQSBItem)this).SendMessage(