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());
        }
Exemplo n.º 2
0
        /// <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()}.");
            }
        }