summaryrefslogtreecommitdiff
path: root/scripts/Entities/Items/Item.cs
diff options
context:
space:
mode:
authorMatheus <matheus.guedes.mg.m@gmail.com>2025-10-24 21:25:15 -0300
committerMatheus <matheus.guedes.mg.m@gmail.com>2025-10-24 21:25:15 -0300
commit639cd8cef403e9e66bf31e7888e786effac2b292 (patch)
treea1b3872a91ad599a71629d0d62c72125138c5c14 /scripts/Entities/Items/Item.cs
parent52c32a24044aa574c9e7bf7aa4e2499349cc36b2 (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.cs61
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