private void ProcessDepartureEvent(CoreMoveItemEvent departureEvent) { if (departureEvent.Item.Id != Me.Id) { if (departureEvent.NewParent.Id == Me.Id) { Inventory.Add(new List <Item>() { departureEvent.Item }); } } }
private void ProcessArrivalEvent(CoreMoveItemEvent arrivalEvent) { if (arrivalEvent.Item.Id != Me.Id) { if (arrivalEvent.OldParent.Id == Me.Id) { Inventory.Remove(new List <Item>() { arrivalEvent.Item }); } // Force notify to fire Inventory.Items = Inventory.Items.ToList(); } }
/// <summary> /// Relocate an item /// </summary> /// <param name="item">Item to move</param> /// <param name="newParent">Item which will become the parent</param> /// <param name="source">Item responsible for doing the moving</param> public Item Move(Item item, Item newParent, Item source = null) { var oldLocation = ItemRepo.Read(item.ParentId.Value); // Update item's location item.Parent = newParent; item.ParentId = newParent.Id; ItemRepo.Update(item); var newLocation = ItemRepo.Read(newParent.Id); // Send messages var moveItemEvent = new CoreMoveItemEvent() { Item = ItemRepo.Read(item.Id), OldParent = oldLocation, NewParent = newParent, Source = source }; var messageManager = ModuleManager.GetManager <IMessageManager>(); var recipients = new List <Item>(); var addRecipients = new List <Item>(); addRecipients.AddRange(oldLocation.Children); addRecipients.AddRange(newLocation.Children); addRecipients.Add(oldLocation); addRecipients.Add(newLocation); addRecipients.ForEach(recipient => { if (!recipients.Select(x => x.Id).ToList().Contains(recipient.Id)) { recipients.Add(recipient); } }); ItemMoveEvent?.Invoke(moveItemEvent); messageManager.SendMessage(new List <IMessage>() { moveItemEvent }, recipients); return(item); }