private void OnUseThingEndCast(ICastableSkill castableSkill) { _useThingSkill.OnEndCast -= OnUseThingEndCast; if (_useThingSkill.Thing is IStack st) { _bag.Pull(st); } else { _bag.Pull(_lastClickedCell.Item); } }
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)); }