using QSB.Events; using QSB.ItemSync.WorldObjects; using QSB.Player; using QSB.WorldSync; namespace QSB.ItemSync.Events { internal class SocketItemEvent : QSBEvent { public override EventType Type => EventType.SocketItem; public override void SetupListener() => GlobalMessenger.AddListener(EventNames.QSBSocketItem, Handler); public override void CloseListener() => GlobalMessenger.RemoveListener(EventNames.QSBSocketItem, Handler); private void Handler(int socketId, int itemId, SocketEventType type) => SendEvent(CreateMessage(socketId, itemId, type)); private SocketItemMessage CreateMessage(int socketId, int itemId, SocketEventType type) => new SocketItemMessage { AboutId = QSBPlayerManager.LocalPlayerId, SocketId = socketId, ItemId = itemId, SocketType = type }; public override void OnReceiveRemote(bool server, SocketItemMessage message) { var socketWorldObject = QSBWorldSync.GetWorldFromId(message.SocketId); var itemWorldObject = QSBWorldSync.GetWorldFromId(message.ItemId); switch (message.SocketType) { case SocketEventType.Socket: socketWorldObject.PlaceIntoSocket(itemWorldObject); return; case SocketEventType.StartUnsocket: socketWorldObject.RemoveFromSocket(); return; case SocketEventType.CompleteUnsocket: itemWorldObject.OnCompleteUnsocket(); return; } } } }