From 4b2afd3e2144e42bfa7f11a870584b9255052cf7 Mon Sep 17 00:00:00 2001 From: Matheus Date: Thu, 4 Sep 2025 21:08:57 -0300 Subject: INVENTÁRIO PEGÁVEL AAAAAAAAAAAAAAAAAAAAAAAAAAAA MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/entities/actions/PickUpAction.cs | 34 ++++++++++++++++++++++++ scripts/entities/actions/PickUpAction.cs.uid | 1 + scripts/entities/actors/Inventory.cs | 35 +++++++++++++++++++++++++ scripts/entities/actors/Inventory.cs.uid | 1 + scripts/entities/actors/Player.cs | 11 +++++++- scripts/entities/actors/PlayerDefinition.cs | 8 ++++++ scripts/entities/actors/PlayerDefinition.cs.uid | 1 + 7 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 scripts/entities/actions/PickUpAction.cs create mode 100644 scripts/entities/actions/PickUpAction.cs.uid create mode 100644 scripts/entities/actors/Inventory.cs create mode 100644 scripts/entities/actors/Inventory.cs.uid create mode 100644 scripts/entities/actors/PlayerDefinition.cs create mode 100644 scripts/entities/actors/PlayerDefinition.cs.uid (limited to 'scripts/entities') diff --git a/scripts/entities/actions/PickUpAction.cs b/scripts/entities/actions/PickUpAction.cs new file mode 100644 index 0000000..b772bb7 --- /dev/null +++ b/scripts/entities/actions/PickUpAction.cs @@ -0,0 +1,34 @@ +using Godot; + +public partial class PickupAction : DirectionalAction +{ + protected Player player; + + public PickupAction(Player player, Vector2I offset) : base(player, offset) + { + this.player = player; + // Pegar itens requer um tempo menor. + cost = 2; + } + + public override bool Perform() + { + ConsumableItem item = Map_Data.GetFirstItemAtPosition(Destination); + + if (item == null) { + MessageLogData.Instance.AddMessage("Não tem item aqui."); + return false; + } + + if (player.inventory.Items.Count >= player.inventory.Capacity) { + MessageLogData.Instance.AddMessage("Seu inventário está cheio"); + return false; + } + + Map_Data.RemoveEntity(item); + player.inventory.Add(item); + + player.Energy -= cost; + return true; + } +} \ No newline at end of file diff --git a/scripts/entities/actions/PickUpAction.cs.uid b/scripts/entities/actions/PickUpAction.cs.uid new file mode 100644 index 0000000..7ca9c72 --- /dev/null +++ b/scripts/entities/actions/PickUpAction.cs.uid @@ -0,0 +1 @@ +uid://dydpoqnwxwbq6 diff --git a/scripts/entities/actors/Inventory.cs b/scripts/entities/actors/Inventory.cs new file mode 100644 index 0000000..ea9569f --- /dev/null +++ b/scripts/entities/actors/Inventory.cs @@ -0,0 +1,35 @@ +using Godot; + +public partial class Inventory : Node { + private Player player; + + public Godot.Collections.Array Items { get; private set; } = []; + + public int Capacity { get; private set; } + + public Inventory(int capacity) { + Capacity = capacity; + } + + public override void _Ready() { + base._Ready(); + player = GetParent(); + } + + public void Drop(ConsumableItem item) { + Items.Remove(item); + MapData data = player.Map_Data; + data.InsertEntity(item); + data.EmitSignal(MapData.SignalName.EntityPlaced, item); + item.Map_Data = data; + item.GridPosition = player.GridPosition; + + MessageLogData.Instance.AddMessage($"Você descarta {item.DisplayName}."); + } + + public void Add(ConsumableItem item) { + if (Items.Count >= Capacity) return; + + Items.Add(item); + } +} \ No newline at end of file diff --git a/scripts/entities/actors/Inventory.cs.uid b/scripts/entities/actors/Inventory.cs.uid new file mode 100644 index 0000000..05c2beb --- /dev/null +++ b/scripts/entities/actors/Inventory.cs.uid @@ -0,0 +1 @@ +uid://isaqxdpou22h diff --git a/scripts/entities/actors/Player.cs b/scripts/entities/actors/Player.cs index 324e67a..d1c4c7f 100644 --- a/scripts/entities/actors/Player.cs +++ b/scripts/entities/actors/Player.cs @@ -7,7 +7,16 @@ using System; [GlobalClass] public partial class Player : Actor { - public Player(Vector2I initialPosition, MapData map, ActorDefinition definition) : base(initialPosition, map, definition) + public Inventory inventory; + + public Player(Vector2I initialPosition, MapData map, PlayerDefinition definition) : base(initialPosition, map, definition) { + SetDefinition(definition); + } + + public void SetDefinition(PlayerDefinition definition) { + inventory = new(definition.InventoryCapacity); + + AddChild(inventory); } } diff --git a/scripts/entities/actors/PlayerDefinition.cs b/scripts/entities/actors/PlayerDefinition.cs new file mode 100644 index 0000000..aca07e1 --- /dev/null +++ b/scripts/entities/actors/PlayerDefinition.cs @@ -0,0 +1,8 @@ +using Godot; + +[GlobalClass] +public partial class PlayerDefinition : ActorDefinition { + [ExportCategory("Player Mechanics")] + [Export] + public int InventoryCapacity = 0; +} \ No newline at end of file diff --git a/scripts/entities/actors/PlayerDefinition.cs.uid b/scripts/entities/actors/PlayerDefinition.cs.uid new file mode 100644 index 0000000..9d01ab9 --- /dev/null +++ b/scripts/entities/actors/PlayerDefinition.cs.uid @@ -0,0 +1 @@ +uid://bd78nfh1tsjq6 -- cgit v1.2.3