From ea64da019ace78f26c979725bb187f48bd59f3cb Mon Sep 17 00:00:00 2001 From: Altaezio Date: Sun, 26 Jul 2026 20:43:07 +0200 Subject: [PATCH] tractor beam swap enable --- gui/pointer/scripts/pointer.gd | 46 +++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/gui/pointer/scripts/pointer.gd b/gui/pointer/scripts/pointer.gd index c5d4ca1..23124a2 100644 --- a/gui/pointer/scripts/pointer.gd +++ b/gui/pointer/scripts/pointer.gd @@ -19,6 +19,7 @@ var all_inspected: Array[Node] var inspected: Node = null var inspected_card_info: CardInfo = null var inspected_inventory_slot: InventoryGuiItemMouseDetector = null +var started_dragging_from_slot: InventoryGuiItemMouseDetector = null var player: Player # renseigné par Player var can_interact: bool = false var current_selected_item: Item = null @@ -291,6 +292,7 @@ func start_dragging(): if item_to_drop and item_to_drop.type != Item.ItemType.TOOL_ITEM: GameInfo.game_data.player_data.inventory.remove_item_at(inspected.index) var dropped_item_object := player.terrain.drop_item(item_to_drop, player.get_global_mouse_position()) + started_dragging_from_slot = inspected inspected_inventory_slot = inspected inspected = dropped_item_object player.region.save() @@ -310,9 +312,41 @@ func stop_dragging(): if inspected is ItemObject: inspected.object_sprite.tractor_beam.emitting = false if inspected_inventory_slot is InventoryGuiItemMouseDetector: - if GameInfo.game_data.player_data.inventory.add_item_at(inspected.item, inspected_inventory_slot.index): - all_inspected.clear() - inspected.queue_free() - inspect(inspected_inventory_slot) - else: - stop_inspect(inspected) + var item_in_inspected_slot := GameInfo.game_data.player_data.inventory.get_item(inspected_inventory_slot.index) + if item_in_inspected_slot: # there is an item in inspected slot + if started_dragging_from_slot: # I started dragging from a slot + if not GameInfo.game_data.player_data.inventory.get_item(started_dragging_from_slot.index): # starting slot is still available -> swap items + var added_target_to_started_slot := GameInfo.game_data.player_data.inventory.add_item_at(item_in_inspected_slot, started_dragging_from_slot.index) + GameInfo.game_data.player_data.inventory.remove_item_at(inspected_inventory_slot.index) + var added_dragged_to_inspected_slot := GameInfo.game_data.player_data.inventory.add_item_at(inspected.item, inspected_inventory_slot.index) + if not added_target_to_started_slot: + printerr("Not able to add item from target slot to started slot") + if not added_dragged_to_inspected_slot: + printerr("Not able to add dragged item to target slot") + all_inspected.clear() + inspected.queue_free() + inspect(inspected_inventory_slot) + AudioManager.play_sfx("PickUp") + else: # starting slot not available anymore + printerr("Can an item be added while dragging?") + stop_inspect(inspected) + else: # I started dragging from the ground -> drop item in inspected slot and put inspected item + GameInfo.game_data.player_data.inventory.remove_item_at(inspected_inventory_slot.index) + var dropped_item_object := player.terrain.drop_item(item_in_inspected_slot, player.global_position) + player.just_dropped_item_objects.append(dropped_item_object) + AudioManager.play_sfx("Drop") + var added_dragged_to_inspected_slot := GameInfo.game_data.player_data.inventory.add_item_at(inspected.item, inspected_inventory_slot.index) + if not added_dragged_to_inspected_slot: + printerr("Not able to add item to inspected slot") + all_inspected.clear() + inspected.queue_free() + inspect(inspected_inventory_slot) + else: # no item in inspected slot -> put inspected item in it + if GameInfo.game_data.player_data.inventory.add_item_at(inspected.item, inspected_inventory_slot.index): + all_inspected.clear() + inspected.queue_free() + inspect(inspected_inventory_slot) + AudioManager.play_sfx("PickUp") + else: # just leave where it is + player.just_dropped_item_objects.append(inspected) + started_dragging_from_slot = null