summaryrefslogtreecommitdiff
path: root/scripts/entities/items
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/entities/items')
-rw-r--r--scripts/entities/items/ConsumableItem.cs31
-rw-r--r--scripts/entities/items/ConsumableItem.cs.uid1
-rw-r--r--scripts/entities/items/ConsumableItemDefinition.cs7
-rw-r--r--scripts/entities/items/ConsumableItemDefinition.cs.uid1
-rw-r--r--scripts/entities/items/HealingConsumable.cs27
-rw-r--r--scripts/entities/items/HealingConsumable.cs.uid1
-rw-r--r--scripts/entities/items/HealingConsumableDefinition.cs11
-rw-r--r--scripts/entities/items/HealingConsumableDefinition.cs.uid1
8 files changed, 80 insertions, 0 deletions
diff --git a/scripts/entities/items/ConsumableItem.cs b/scripts/entities/items/ConsumableItem.cs
new file mode 100644
index 0000000..8c862da
--- /dev/null
+++ b/scripts/entities/items/ConsumableItem.cs
@@ -0,0 +1,31 @@
+using Godot;
+
+/// <summary>
+/// Classe para itens consumíveis.
+/// Itens consumíveis são itens de uso limitado.
+/// </summary>
+public abstract partial class ConsumableItem : Entity
+{
+ public ConsumableItem(Vector2I initialPosition, MapData map, EntityDefinition definition) : base(initialPosition, map, definition)
+ {
+ }
+
+ /// <summary>
+ /// Gera uma ação onde o ator consome o item.
+ /// </summary>
+ /// <param name="consumer"></param>
+ /// <returns></returns>
+ public Action GetAction(Actor 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 abstract bool Activate(ItemAction action);
+} \ No newline at end of file
diff --git a/scripts/entities/items/ConsumableItem.cs.uid b/scripts/entities/items/ConsumableItem.cs.uid
new file mode 100644
index 0000000..e6c452a
--- /dev/null
+++ b/scripts/entities/items/ConsumableItem.cs.uid
@@ -0,0 +1 @@
+uid://hpppt5k743x
diff --git a/scripts/entities/items/ConsumableItemDefinition.cs b/scripts/entities/items/ConsumableItemDefinition.cs
new file mode 100644
index 0000000..74340d2
--- /dev/null
+++ b/scripts/entities/items/ConsumableItemDefinition.cs
@@ -0,0 +1,7 @@
+using Godot;
+
+/// <summary>
+/// Esta classe só existe para agrupar seus descendentes.
+/// </summary>
+[GlobalClass]
+public abstract partial class ConsumableItemDefinition : EntityDefinition; \ No newline at end of file
diff --git a/scripts/entities/items/ConsumableItemDefinition.cs.uid b/scripts/entities/items/ConsumableItemDefinition.cs.uid
new file mode 100644
index 0000000..9ddc0f6
--- /dev/null
+++ b/scripts/entities/items/ConsumableItemDefinition.cs.uid
@@ -0,0 +1 @@
+uid://dpdju2ucehsb0
diff --git a/scripts/entities/items/HealingConsumable.cs b/scripts/entities/items/HealingConsumable.cs
new file mode 100644
index 0000000..3d8df51
--- /dev/null
+++ b/scripts/entities/items/HealingConsumable.cs
@@ -0,0 +1,27 @@
+using Godot;
+
+public partial class HealingConsumable : ConsumableItem
+{
+ private HealingConsumableDefinition definition;
+ public float HealingPercentage { get; private set; }
+ public HealingConsumable(Vector2I initialPosition, MapData map, HealingConsumableDefinition definition) : base(initialPosition, map, definition)
+ {
+ this.definition = definition;
+ HealingPercentage = definition.healingPercentage;
+ }
+
+ public override bool Activate(ItemAction action)
+ {
+ Actor consumer = action.ThisActor;
+ int intendedAmount = (int)(HealingPercentage / 100 * consumer.MaxHp);
+ int recovered = consumer.Heal(intendedAmount);
+
+ // Se não tinha o que curar, a ativação falhou.
+ if (recovered == 0) {
+ MessageLogData.Instance.AddMessage("Você já está saudável.");
+ return false;
+ }
+ MessageLogData.Instance.AddMessage($"Você consome {DisplayName} e recupera {recovered} de HP");
+ return true;
+ }
+} \ No newline at end of file
diff --git a/scripts/entities/items/HealingConsumable.cs.uid b/scripts/entities/items/HealingConsumable.cs.uid
new file mode 100644
index 0000000..8f8f942
--- /dev/null
+++ b/scripts/entities/items/HealingConsumable.cs.uid
@@ -0,0 +1 @@
+uid://ct20rmjhaukge
diff --git a/scripts/entities/items/HealingConsumableDefinition.cs b/scripts/entities/items/HealingConsumableDefinition.cs
new file mode 100644
index 0000000..2562e9e
--- /dev/null
+++ b/scripts/entities/items/HealingConsumableDefinition.cs
@@ -0,0 +1,11 @@
+using Godot;
+
+[GlobalClass]
+public partial class HealingConsumableDefinition : ConsumableItemDefinition {
+ ///<summary>
+ /// Porcentagem da vida do ator para restaurar.
+ ///</summary>
+ [ExportCategory("Item Mechanics")]
+ [Export]
+ public float healingPercentage = 10;
+} \ No newline at end of file
diff --git a/scripts/entities/items/HealingConsumableDefinition.cs.uid b/scripts/entities/items/HealingConsumableDefinition.cs.uid
new file mode 100644
index 0000000..2fd311d
--- /dev/null
+++ b/scripts/entities/items/HealingConsumableDefinition.cs.uid
@@ -0,0 +1 @@
+uid://b3qy4gtjfci14