protected override TextButton[] InitItems(IProp prop) { _prop = prop; var inventoryState = _serviceProvider.GetRequiredService <IInventoryState>(); inventoryState.SelectedProp = new PropViewModel(prop); var list = new List <TextButton>(); var useCommand = _serviceProvider.GetRequiredService <UseSelfCommand>(); var commandPool = _serviceProvider.GetRequiredService <ICommandPool>(); switch (prop) { case Equipment: InitItemsForEquipment(list, commandPool); break; case Resource: InitItemsForResource(list, useCommand, commandPool); break; default: Debug.Fail($"Unknown type {prop.GetType()} of the prop."); break; } return(list.ToArray()); }
/// <summary> /// Удаление предмета из хранилища. /// </summary> /// <param name="prop"> Целевой предмет. </param> public void Remove(IProp prop) { switch (prop) { case Resource resource: // запоминаем предыдущее состояние для событий var oldProp = CalcActualItems()?.SingleOrDefault(x => x.Scheme == prop.Scheme); TransferResource(resource, PropRemoved, PropAdded); // Выброс событий var currentProp = CalcActualItems()?.SingleOrDefault(x => x.Scheme == prop.Scheme); if (oldProp is null) { throw new InvalidOperationException(); } if (currentProp != null) { Changed?.Invoke(this, new PropStoreEventArgs(oldProp)); } else { Removed?.Invoke(this, new PropStoreEventArgs(oldProp)); } break; case Equipment _: case Concept _: TransferNoCount(prop, PropAdded, PropRemoved); Removed?.Invoke(this, new PropStoreEventArgs(prop)); break; default: throw new ArgumentException($"Предмет неизвестного типа {prop?.GetType()}."); } }