From 639cd8cef403e9e66bf31e7888e786effac2b292 Mon Sep 17 00:00:00 2001 From: Matheus Date: Fri, 24 Oct 2025 21:25:15 -0300 Subject: refactor: Sistema de itens reescrito MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Em tese, este novo sistema é mais fácil de serializar. Descanse em paz pergaminhos, eu não quero reimplementá-los neste novo sistema. --- scripts/Entities/Items/Item.cs | 61 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 scripts/Entities/Items/Item.cs (limited to 'scripts/Entities/Items/Item.cs') diff --git a/scripts/Entities/Items/Item.cs b/scripts/Entities/Items/Item.cs new file mode 100644 index 0000000..0eeffd8 --- /dev/null +++ b/scripts/Entities/Items/Item.cs @@ -0,0 +1,61 @@ +using System.Reflection.Metadata; +using Godot; +using TheLegendOfGustav.Entities.Actions; +using TheLegendOfGustav.Entities.Actors; + +namespace TheLegendOfGustav.Entities.Items; + +public partial class Item : RefCounted +{ + + public Item(ItemResource definition) + { + Definition = definition; + Uses = Definition.MaxUses; + } + + public ItemResource Definition { get; private set; } + public int Uses { get; set; } + + /// + /// Gera uma ação onde o ator consome o item. + /// + /// + /// + public Action GetAction(Player consumer) + { + return new ItemAction(consumer, this); + } + + /// + /// Ativa a função deste item. + /// Este método é chamado pela ação gerada por ele mesmo. + /// Este método permite definir condições para a sua ativação. + /// + /// Ação gerada pelo item. + /// Se a ação foi realizada ou não. + public bool Activate(ItemAction action) + { + if (Uses != 0) + { + bool ret = Definition.Activation.OnActivation(action.Player); + + if (ret && Uses > 0) + { + Uses--; + } + + return ret; + } + else + { + return false; + } + } + + public virtual void ConsumedBy(Player consumer) + { + Inventory inventory = consumer.Inventory; + inventory.RemoveItem(this); + } +} \ No newline at end of file -- cgit v1.2.3