tractor beam swap enable

This commit is contained in:
Altaezio
2026-07-26 20:43:07 +02:00
parent 88e797148f
commit ea64da019a
+40 -6
View File
@@ -19,6 +19,7 @@ var all_inspected: Array[Node]
var inspected: Node = null var inspected: Node = null
var inspected_card_info: CardInfo = null var inspected_card_info: CardInfo = null
var inspected_inventory_slot: InventoryGuiItemMouseDetector = null var inspected_inventory_slot: InventoryGuiItemMouseDetector = null
var started_dragging_from_slot: InventoryGuiItemMouseDetector = null
var player: Player # renseigné par Player var player: Player # renseigné par Player
var can_interact: bool = false var can_interact: bool = false
var current_selected_item: Item = null 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: if item_to_drop and item_to_drop.type != Item.ItemType.TOOL_ITEM:
GameInfo.game_data.player_data.inventory.remove_item_at(inspected.index) 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()) 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_inventory_slot = inspected
inspected = dropped_item_object inspected = dropped_item_object
player.region.save() player.region.save()
@@ -310,9 +312,41 @@ func stop_dragging():
if inspected is ItemObject: if inspected is ItemObject:
inspected.object_sprite.tractor_beam.emitting = false inspected.object_sprite.tractor_beam.emitting = false
if inspected_inventory_slot is InventoryGuiItemMouseDetector: if inspected_inventory_slot is InventoryGuiItemMouseDetector:
if GameInfo.game_data.player_data.inventory.add_item_at(inspected.item, inspected_inventory_slot.index): var item_in_inspected_slot := GameInfo.game_data.player_data.inventory.get_item(inspected_inventory_slot.index)
all_inspected.clear() if item_in_inspected_slot: # there is an item in inspected slot
inspected.queue_free() if started_dragging_from_slot: # I started dragging from a slot
inspect(inspected_inventory_slot) if not GameInfo.game_data.player_data.inventory.get_item(started_dragging_from_slot.index): # starting slot is still available -> swap items
else: var added_target_to_started_slot := GameInfo.game_data.player_data.inventory.add_item_at(item_in_inspected_slot, started_dragging_from_slot.index)
stop_inspect(inspected) 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