diff options
| author | Matheus <matheus.guedes.mg.m@gmail.com> | 2025-10-24 21:25:15 -0300 |
|---|---|---|
| committer | Matheus <matheus.guedes.mg.m@gmail.com> | 2025-10-24 21:25:15 -0300 |
| commit | 639cd8cef403e9e66bf31e7888e786effac2b292 (patch) | |
| tree | a1b3872a91ad599a71629d0d62c72125138c5c14 /scripts/Entities/Items/Item.cs | |
| parent | 52c32a24044aa574c9e7bf7aa4e2499349cc36b2 (diff) | |
refactor: Sistema de itens reescrito
Em tese, este novo sistema é mais fácil de serializar.
Descanse em paz pergaminhos, eu não quero reimplementá-los
neste novo sistema.
Diffstat (limited to 'scripts/Entities/Items/Item.cs')
| -rw-r--r-- | scripts/Entities/Items/Item.cs | 61 |
1 files changed, 61 insertions, 0 deletions
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; } + + /// <summary> + /// Gera uma ação onde o ator consome o item. + /// </summary> + /// <param name="consumer"></param> + /// <returns></returns> + public Action GetAction(Player consumer) + { + return new ItemAction(consumer, this); + } + + /// <summary> + /// 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. + /// </summary> + /// <param name="action">Ação gerada pelo item.</param> + /// <returns>Se a ação foi realizada ou não.</returns> + 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 |
