mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-24 18:39:59 +00:00
add socketing stuff
This commit is contained in:
parent
506f040b97
commit
35b99fcd8e
@ -35,6 +35,7 @@
|
||||
TextTranslated,
|
||||
EnterLeave,
|
||||
PlayerEntangle,
|
||||
DropItem
|
||||
DropItem,
|
||||
SocketItem
|
||||
}
|
||||
}
|
@ -58,6 +58,7 @@ namespace QSB.Events
|
||||
new EnterLeaveEvent(),
|
||||
new QuantumAuthorityEvent(),
|
||||
new DropItemEvent(),
|
||||
new SocketItemEvent(),
|
||||
// Conversation/dialogue/exploration
|
||||
new ConversationEvent(),
|
||||
new ConversationStartEndEvent(),
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
31
QSB/ItemSync/Events/SocketItemMessage.cs
Normal file
31
QSB/ItemSync/Events/SocketItemMessage.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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;
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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() { }
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -8,5 +8,12 @@
|
||||
AttachedObject = attachedObject;
|
||||
base.Init(attachedObject, id);
|
||||
}
|
||||
|
||||
public override IQSBOWItem RemoveFromSocket()
|
||||
{
|
||||
var scrollItem = (QSBScrollItem)_socketedItem;
|
||||
scrollItem.HideNomaiText();
|
||||
return RemoveFromSocket();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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" />
|
||||
|
Loading…
x
Reference in New Issue
Block a user