From a4662f2797e45710da8950f2a9bd23f0b3f80fa3 Mon Sep 17 00:00:00 2001 From: Zacharie Guet Date: Thu, 26 Feb 2026 19:52:46 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20de=20la=20possibilit=C3=A9=20d'avoir=20?= =?UTF-8?q?des=20items=20utilisable=20sans=20se=20d=C3=A9placer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entities/player/inventory/scripts/item.gd | 3 ++ .../inventory/scripts/items/detector.gd | 3 ++ .../inventory/scripts/items/ship_portal.gd | 5 ++- entities/player/scripts/player.gd | 34 ++++++++++++------- 4 files changed, 31 insertions(+), 14 deletions(-) diff --git a/entities/player/inventory/scripts/item.gd b/entities/player/inventory/scripts/item.gd index 212f259..8ad0153 100644 --- a/entities/player/inventory/scripts/item.gd +++ b/entities/player/inventory/scripts/item.gd @@ -33,6 +33,9 @@ func get_energy_used() -> int: func get_usage_zone_radius() -> int: return usage_zone_radius +func is_usage_need_proximity() -> bool: + return true + func get_usage_object_affected(_i : InspectableEntity) -> bool: return false diff --git a/entities/player/inventory/scripts/items/detector.gd b/entities/player/inventory/scripts/items/detector.gd index 39ca3b4..fc1e5e4 100644 --- a/entities/player/inventory/scripts/items/detector.gd +++ b/entities/player/inventory/scripts/items/detector.gd @@ -19,6 +19,9 @@ func get_energy_used() -> int: func get_usage_zone_radius() -> int: return 0 +func is_usage_need_proximity() -> bool: + return false + func can_use(_player : Player, _zone: Player.ActionZone) -> bool: return true diff --git a/entities/player/inventory/scripts/items/ship_portal.gd b/entities/player/inventory/scripts/items/ship_portal.gd index 5705e01..185afbf 100644 --- a/entities/player/inventory/scripts/items/ship_portal.gd +++ b/entities/player/inventory/scripts/items/ship_portal.gd @@ -11,7 +11,7 @@ func get_description() -> String: return tr("SHIP_TELEPORT_DESC_TEXT") func get_icon() -> Texture2D: - return preload("res://common/icons/chevrons-up.svg") + return preload("res://common/icons/rocket.svg") func get_energy_used() -> int: return 0 @@ -19,6 +19,9 @@ func get_energy_used() -> int: func get_usage_zone_radius() -> int: return 0 +func is_usage_need_proximity() -> bool: + return false + func can_use(_player : Player, _zone: Player.ActionZone) -> bool: return true diff --git a/entities/player/scripts/player.gd b/entities/player/scripts/player.gd index da30aa0..c93fcc0 100644 --- a/entities/player/scripts/player.gd +++ b/entities/player/scripts/player.gd @@ -59,7 +59,8 @@ func _end_pass_day(): func _process(delta): last_action_area_movement_timer += delta if controlling_player: - calculate_direction() + + var input_direction : Vector2 = calculate_direction_input_direction() if ( last_action_area_movement_timer >= ACTION_AREA_UPDATE_TIME @@ -67,6 +68,15 @@ func _process(delta): ): instruction.do(self) instruction = null + + if instruction and instruction.need_movement: + if input_direction.length() != 0: + instruction = null + input_direction = calculate_direction_instruction_direction() + + velocity = input_direction * speed + turn_animate(input_direction) + move_preview_zone(get_global_mouse_position()) else: velocity = Vector2.ZERO @@ -76,12 +86,7 @@ func _on_inventory_updated(_inventory: Inventory): setup_preview_zone(data.inventory.get_item()) emit_signal("player_updated", self) -func calculate_direction(): - var input_direction: Vector2 = Input.get_vector("move_left", "move_right", "move_up", "move_down") - - if input_direction.length() != 0: - instruction = null - +func calculate_direction_instruction_direction() -> Vector2: if ( instruction and ( @@ -89,11 +94,11 @@ func calculate_direction(): or instruction is MoveInstruction ) ): - input_direction = self.global_position.direction_to(instruction.position) + return self.global_position.direction_to(instruction.position) + return Vector2.ZERO - velocity = input_direction * speed - - turn_animate(input_direction) +func calculate_direction_input_direction() -> Vector2: + return Input.get_vector("move_left", "move_right", "move_up", "move_down") func turn_animate(input_direction): @@ -243,6 +248,7 @@ func move_preview_zone(zone_position : Vector2): class Instruction: var position : Vector2 + var need_movement : bool = true func _init(_pos : Vector2): position = _pos @@ -259,14 +265,16 @@ class MoveInstruction extends Instruction: class ItemActionInstruction extends Instruction: - var item = Item + var item : Item func _init(_pos : Vector2, _item : Item): position = _pos item = _item + need_movement = item.is_usage_need_proximity() func can_be_done(player : Player): return ( + not item.is_usage_need_proximity() or player.global_position.distance_to(position) < player.MAX_REACH ) @@ -274,7 +282,7 @@ class ItemActionInstruction extends Instruction: player.use_item(item) class InteractableInstruction extends Instruction: - var interactable = Interactable + var interactable : Interactable func _init(_interactable : Interactable): interactable = _interactable