add socketing stuff

This commit is contained in:
Mister_Nebula 2021-02-25 21:24:10 +00:00
parent 506f040b97
commit 35b99fcd8e
12 changed files with 121 additions and 17 deletions

View File

@ -35,6 +35,7 @@
TextTranslated,
EnterLeave,
PlayerEntangle,
DropItem
DropItem,
SocketItem
}
}

View File

@ -58,6 +58,7 @@ namespace QSB.Events
new EnterLeaveEvent(),
new QuantumAuthorityEvent(),
new DropItemEvent(),
new SocketItemEvent(),
// Conversation/dialogue/exploration
new ConversationEvent(),
new ConversationStartEndEvent(),

View File

@ -1,6 +1,37 @@
namespace QSB.ItemSync.Events
using QSB.Events;
using QSB.ItemSync.WorldObjects;
using QSB.Player;
using QSB.Utility;
using QSB.WorldSync;
namespace QSB.ItemSync.Events
{
internal class SocketItemEvent
internal class SocketItemEvent : QSBEvent<SocketItemMessage>
{
public override QSB.Events.EventType Type => QSB.Events.EventType.SocketItem;
public override void SetupListener()
=> GlobalMessenger<int, int, bool>.AddListener(EventNames.QSBDropItem, Handler);
public override void CloseListener()
=> GlobalMessenger<int, int, bool>.RemoveListener(EventNames.QSBDropItem, Handler);
private void Handler(int socketId, int itemId, bool inserting)
=> SendEvent(CreateMessage(socketId, itemId, inserting));
private SocketItemMessage CreateMessage(int socketId, int itemId, bool inserting) => new SocketItemMessage
{
AboutId = QSBPlayerManager.LocalPlayerId,
SocketId = socketId,
ItemId = itemId,
Inserting = inserting
};
public override void OnReceiveRemote(bool server, SocketItemMessage message)
{
var socketWorldObject = QSBWorldSync.GetWorldFromId<IQSBOWItemSocket>(message.SocketId);
var itemWorldObject = QSBWorldSync.GetWorldFromId<IQSBOWItem>(message.ItemId);
socketWorldObject.PlaceIntoSocket(itemWorldObject);
}
}
}

View File

@ -0,0 +1,31 @@
using QSB.Messaging;
using QSB.SectorSync.WorldObjects;
using QSB.WorldSync;
using QuantumUNET.Transport;
using UnityEngine;
namespace QSB.ItemSync.Events
{
public class SocketItemMessage : PlayerMessage
{
public int SocketId { get; set; }
public int ItemId { get; set; }
public bool Inserting { get; set; }
public override void Deserialize(QNetworkReader reader)
{
base.Deserialize(reader);
SocketId = reader.ReadInt32();
ItemId = reader.ReadInt32();
Inserting = reader.ReadBoolean();
}
public override void Serialize(QNetworkWriter writer)
{
base.Serialize(writer);
writer.Write(SocketId);
writer.Write(ItemId);
writer.Write(Inserting);
}
}
}

View File

@ -25,7 +25,6 @@ namespace QSB.ItemSync.Patches
public static bool ItemTool_SocketItem(OWItem ____heldItem, OWItemSocket socket)
{
DebugLog.DebugWrite($"Socket item {____heldItem.name} into socket {socket.name}.");
var objectId = QSBWorldSync.GetIdFromTypeSubset(ItemManager.GetObject(socket));
return true;
}
@ -34,7 +33,6 @@ namespace QSB.ItemSync.Patches
{
var owitem = socket.RemoveFromSocket();
____heldItem = owitem;
DebugLog.DebugWrite($"Start unsocket item {____heldItem.name} from socket {socket.name}.");
if (____heldItem.IsAnimationPlaying())
{
____waitForUnsocketAnimation = true;
@ -76,6 +74,7 @@ namespace QSB.ItemSync.Patches
QSBEventManager.FireEvent(EventNames.QSBDropItem, objectId, localPos, hit.normal, parentSector);
return false;
}
DebugLog.ToConsole($"Warning - no sector found for rigidbody {targetRigidbody.name}.", OWML.Common.MessageType.Warning);
var localPosition = sector.transform.InverseTransformPoint(hit.point);
QSBEventManager.FireEvent(EventNames.QSBDropItem, objectId, localPosition, hit.normal, sector);
return false;

View File

@ -6,9 +6,10 @@ namespace QSB.ItemSync.WorldObjects
public interface IQSBOWItem : IWorldObjectTypeSubset
{
void DropItem(Vector3 position, Vector3 normal, Sector sector);
ItemType GetItemType();
void SocketItem(Transform socketTransform, Sector sector);
void SetColliderActivation(bool active);
void PlaySocketAnimation();
void PlayUnsocketAnimation();
}
}

View File

@ -2,5 +2,10 @@
namespace QSB.ItemSync.WorldObjects
{
public interface IQSBOWItemSocket : IWorldObjectTypeSubset { }
public interface IQSBOWItemSocket : IWorldObjectTypeSubset
{
bool AcceptsItem(IQSBOWItem item);
bool PlaceIntoSocket(IQSBOWItem item);
IQSBOWItem RemoveFromSocket();
}
}

View File

@ -7,16 +7,13 @@ namespace QSB.ItemSync.WorldObjects
internal class QSBOWItem<T> : WorldObject<T>, IQSBOWItem
where T : OWItem
{
private ItemType _type
{
get => AttachedObject.GetValue<ItemType>("_type");
set => AttachedObject.SetValue("_type", value);
}
public override void Init(T attachedObject, int id) { }
public ItemType GetItemType()
=> _type;
=> AttachedObject.GetItemType();
public void SetColliderActivation(bool active)
=> AttachedObject.SetColliderActivation(active);
public virtual void DropItem(Vector3 position, Vector3 normal, Sector sector)
{
@ -35,5 +32,6 @@ namespace QSB.ItemSync.WorldObjects
=> AttachedObject.SocketItem(socketTransform, sector);
public virtual void PlaySocketAnimation() { }
public virtual void PlayUnsocketAnimation() { }
}
}

View File

@ -7,10 +7,16 @@ namespace QSB.ItemSync.WorldObjects
internal class QSBOWItemSocket<T> : WorldObject<T>, IQSBOWItemSocket
where T : MonoBehaviour
{
private IQSBOWItem _socketedItem
protected IQSBOWItem _socketedItem
{
get => ItemManager.GetObject(AttachedObject.GetValue<OWItem>("_socketedItem"));
set => AttachedObject.SetValue("_socketedItem", (value as IWorldObject).ReturnObject());
set => AttachedObject.SetValue("_socketedItem", (value as IWorldObject)?.ReturnObject());
}
private IQSBOWItem _removedItem
{
get => ItemManager.GetObject(AttachedObject.GetValue<OWItem>("_removedItem"));
set => AttachedObject.SetValue("_removedItem", (value as IWorldObject).ReturnObject());
}
private Transform _socketTransform
@ -46,5 +52,15 @@ namespace QSB.ItemSync.WorldObjects
AttachedObject.enabled = true;
return true;
}
public virtual IQSBOWItem RemoveFromSocket()
{
_removedItem = _socketedItem;
_socketedItem = null;
_removedItem.PlayUnsocketAnimation();
_removedItem.SetColliderActivation(true);
AttachedObject.enabled = true;
return _removedItem;
}
}
}

View File

@ -1,4 +1,5 @@
using UnityEngine;
using OWML.Utils;
using UnityEngine;
namespace QSB.ItemSync.WorldObjects
{
@ -10,5 +11,17 @@ namespace QSB.ItemSync.WorldObjects
AttachedObject = attachedObject;
base.Init(attachedObject, id);
}
public override void PlaySocketAnimation()
=> AttachedObject.PlaySocketAnimation();
public override void PlayUnsocketAnimation()
=> AttachedObject.PlayUnsocketAnimation();
public void HideNomaiText()
=> AttachedObject.HideNomaiText();
public void ShowNomaiText()
=> AttachedObject.ShowNomaiText();
}
}

View File

@ -8,5 +8,12 @@
AttachedObject = attachedObject;
base.Init(attachedObject, id);
}
public override IQSBOWItem RemoveFromSocket()
{
var scrollItem = (QSBScrollItem)_socketedItem;
scrollItem.HideNomaiText();
return RemoveFromSocket();
}
}
}

View File

@ -135,6 +135,7 @@
<Compile Include="ItemSync\Events\DropItemEvent.cs" />
<Compile Include="ItemSync\Events\DropItemMessage.cs" />
<Compile Include="ItemSync\Events\SocketItemEvent.cs" />
<Compile Include="ItemSync\Events\SocketItemMessage.cs" />
<Compile Include="ItemSync\ItemManager.cs" />
<Compile Include="ItemSync\Patches\ItemPatches.cs" />
<Compile Include="ItemSync\SocketEventType.cs" />