add completeunsocket sync, and fix geyser

This commit is contained in:
Mister_Nebula 2021-02-26 12:47:05 +00:00
parent 1b694498d7
commit c02b50d183
8 changed files with 46 additions and 22 deletions

View File

@ -23,6 +23,10 @@ namespace QSB.GeyserSync.Events
public override void OnReceiveRemote(bool server, BoolWorldObjectMessage message)
{
if (!QSBCore.HasWokenUp)
{
return;
}
var geyser = QSBWorldSync.GetWorldFromId<QSBGeyser>(message.ObjectId);
geyser?.SetState(message.State);
}

View File

@ -10,32 +10,38 @@ namespace QSB.ItemSync.Events
public override EventType Type => EventType.SocketItem;
public override void SetupListener()
=> GlobalMessenger<int, int, bool>.AddListener(EventNames.QSBSocketItem, Handler);
=> GlobalMessenger<int, int, SocketEventType>.AddListener(EventNames.QSBSocketItem, Handler);
public override void CloseListener()
=> GlobalMessenger<int, int, bool>.RemoveListener(EventNames.QSBSocketItem, Handler);
=> GlobalMessenger<int, int, SocketEventType>.RemoveListener(EventNames.QSBSocketItem, Handler);
private void Handler(int socketId, int itemId, bool inserting)
=> SendEvent(CreateMessage(socketId, itemId, inserting));
private void Handler(int socketId, int itemId, SocketEventType type)
=> SendEvent(CreateMessage(socketId, itemId, type));
private SocketItemMessage CreateMessage(int socketId, int itemId, bool inserting) => new SocketItemMessage
private SocketItemMessage CreateMessage(int socketId, int itemId, SocketEventType type) => new SocketItemMessage
{
AboutId = QSBPlayerManager.LocalPlayerId,
SocketId = socketId,
ItemId = itemId,
Inserting = inserting
SocketType = type
};
public override void OnReceiveRemote(bool server, SocketItemMessage message)
{
var socketWorldObject = QSBWorldSync.GetWorldFromId<IQSBOWItemSocket>(message.SocketId);
var itemWorldObject = QSBWorldSync.GetWorldFromId<IQSBOWItem>(message.ItemId);
if (message.Inserting)
switch (message.SocketType)
{
socketWorldObject.PlaceIntoSocket(itemWorldObject);
return;
case SocketEventType.Socket:
socketWorldObject.PlaceIntoSocket(itemWorldObject);
return;
case SocketEventType.StartUnsocket:
socketWorldObject.RemoveFromSocket();
return;
case SocketEventType.CompleteUnsocket:
itemWorldObject.OnCompleteUnsocket();
return;
}
socketWorldObject.RemoveFromSocket();
}
}
}

View File

@ -7,14 +7,14 @@ namespace QSB.ItemSync.Events
{
public int SocketId { get; set; }
public int ItemId { get; set; }
public bool Inserting { get; set; }
public SocketEventType SocketType { get; set; }
public override void Deserialize(QNetworkReader reader)
{
base.Deserialize(reader);
SocketId = reader.ReadInt32();
ItemId = reader.ReadInt32();
Inserting = reader.ReadBoolean();
SocketType = (SocketEventType)reader.ReadInt32();
}
public override void Serialize(QNetworkWriter writer)
@ -22,7 +22,7 @@ namespace QSB.ItemSync.Events
base.Serialize(writer);
writer.Write(SocketId);
writer.Write(ItemId);
writer.Write(Inserting);
writer.Write((int)SocketType);
}
}
}

View File

@ -15,6 +15,7 @@ namespace QSB.ItemSync.Patches
QSBCore.Helper.HarmonyHelper.AddPrefix<ItemTool>("MoveItemToCarrySocket", typeof(ItemPatches), nameof(ItemTool_MoveItemToCarrySocket));
QSBCore.Helper.HarmonyHelper.AddPrefix<ItemTool>("SocketItem", typeof(ItemPatches), nameof(ItemTool_SocketItem));
QSBCore.Helper.HarmonyHelper.AddPrefix<ItemTool>("StartUnsocketItem", typeof(ItemPatches), nameof(ItemTool_StartUnsocketItem));
QSBCore.Helper.HarmonyHelper.AddPrefix<ItemTool>("OnCompleteUnsocket", typeof(ItemPatches), nameof(ItemTool_OnCompleteUnsocket));
QSBCore.Helper.HarmonyHelper.AddPrefix<ItemTool>("DropItem", typeof(ItemPatches), nameof(ItemTool_DropItem));
}
@ -34,14 +35,21 @@ namespace QSB.ItemSync.Patches
{
var socketId = QSBWorldSync.GetIdFromTypeSubset(ItemManager.GetObject(socket));
var itemId = QSBWorldSync.GetIdFromTypeSubset(ItemManager.GetObject(____heldItem));
QSBEventManager.FireEvent(EventNames.QSBSocketItem, socketId, itemId, true);
QSBEventManager.FireEvent(EventNames.QSBSocketItem, socketId, itemId, SocketEventType.Socket);
return true;
}
public static bool ItemTool_StartUnsocketItem(OWItemSocket socket)
{
var socketId = QSBWorldSync.GetIdFromTypeSubset(ItemManager.GetObject(socket));
QSBEventManager.FireEvent(EventNames.QSBSocketItem, socketId, 0, false);
QSBEventManager.FireEvent(EventNames.QSBSocketItem, socketId, 0, SocketEventType.StartUnsocket);
return true;
}
public static bool ItemTool_OnCompleteUnsocket(OWItem ____heldItem)
{
var itemId = QSBWorldSync.GetIdFromTypeSubset(ItemManager.GetObject(____heldItem));
QSBEventManager.FireEvent(EventNames.QSBSocketItem, 0, itemId, SocketEventType.CompleteUnsocket);
return true;
}

View File

@ -2,7 +2,8 @@
{
public enum SocketEventType
{
Unsocket,
StartUnsocket,
CompleteUnsocket,
Socket
}
}

View File

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

View File

@ -15,6 +15,9 @@ namespace QSB.ItemSync.WorldObjects
public void SetColliderActivation(bool active)
=> AttachedObject.SetColliderActivation(active);
public virtual void SocketItem(Transform socketTransform, Sector sector)
=> AttachedObject.SocketItem(socketTransform, sector);
public virtual void PickUpItem(Transform holdTransform)
=> AttachedObject.PickUpItem(holdTransform);
@ -31,10 +34,8 @@ namespace QSB.ItemSync.WorldObjects
AttachedObject.SetColliderActivation(true);
}
public virtual void SocketItem(Transform socketTransform, Sector sector)
=> AttachedObject.SocketItem(socketTransform, sector);
public virtual void PlaySocketAnimation() { }
public virtual void PlayUnsocketAnimation() { }
public virtual void OnCompleteUnsocket() { }
}
}

View File

@ -15,6 +15,9 @@
public override void PlayUnsocketAnimation()
=> AttachedObject.PlayUnsocketAnimation();
public override void OnCompleteUnsocket()
=> AttachedObject.OnCompleteUnsocket();
public void HideNomaiText()
=> AttachedObject.HideNomaiText();