Exemplo n.º 1
0
    private void OnUseThingEndCast(ICastableSkill castableSkill)
    {
        _useThingSkill.OnEndCast -= OnUseThingEndCast;

        if (_useThingSkill.Thing is IStack st)
        {
            _bag.Pull(st);
        }
        else
        {
            _bag.Pull(_lastClickedCell.Item);
        }
    }
Exemplo n.º 2
0
        public CraftResult Craft(Recipe recipe, float chance)
        {
            if (recipe == null)
            {
                throw new ArgumentNullException(nameof(recipe));
            }

            var sourceItems = _bag.Pull(recipe.SourceItems).ToList();

            var result             = new Collection <IThing>();
            var crackedSourceItems = new Collection <IThing>();

            foreach (var stack in recipe.SourceItems)
            {
                //for (var i = 0; i < stack.Count; i++)
                {
                    var sourceItem = sourceItems.FirstOrDefault(it => it.Prototype == stack.Prototype);
                    if (sourceItem == null)
                    {
                        throw new Exception("Недостаточно предметов " + stack.Prototype.Name);
                    }
                    sourceItems.Remove(sourceItem);
                    crackedSourceItems.Add(sourceItem);
                }
            }
            if (_chanceCalculator.Try(chance))
            {
                Create(recipe, result);
            }

            // результат крафта кладём в сумку
            foreach (var bagItem in result)
            {
                _bag.Add(bagItem);
            }

            // если вдруг не израсходовались, положить обратно
            foreach (var item in sourceItems)
            {
                _bag.Add(item);
            }

            return(new CraftResult(result, crackedSourceItems));
        }