tractor beam swap enable
This commit is contained in:
@@ -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:
|
||||||
|
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):
|
if GameInfo.game_data.player_data.inventory.add_item_at(inspected.item, inspected_inventory_slot.index):
|
||||||
all_inspected.clear()
|
all_inspected.clear()
|
||||||
inspected.queue_free()
|
inspected.queue_free()
|
||||||
inspect(inspected_inventory_slot)
|
inspect(inspected_inventory_slot)
|
||||||
else:
|
AudioManager.play_sfx("PickUp")
|
||||||
stop_inspect(inspected)
|
else: # just leave where it is
|
||||||
|
player.just_dropped_item_objects.append(inspected)
|
||||||
|
started_dragging_from_slot = null
|
||||||
|
|||||||
Reference in New Issue
Block a user