From bf481c5eea35a74854ad1bcc9880b86006cf155a Mon Sep 17 00:00:00 2001 From: Dustin Date: Tue, 8 Apr 2025 22:55:57 -0700 Subject: [PATCH] Item switching --- project.godot | 2 ++ .../playerE/PlayerE-Movement_StateReceiver.gd | 8 +++-- src/actors/players/playerE/PlayerE.gd | 19 ++++++++++-- src/classes/inventory_manager.gd | 29 +++++++++++++++++++ 4 files changed, 52 insertions(+), 6 deletions(-) diff --git a/project.godot b/project.godot index 5ae2ed4..5ba9fda 100644 --- a/project.godot +++ b/project.godot @@ -335,11 +335,13 @@ attack_secondary_2={ switch_primary_item_1={ "deadzone": 0.5, "events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":4,"pressure":0.0,"pressed":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":72,"physical_scancode":0,"unicode":0,"echo":false,"script":null) ] } switch_secondary_item_1={ "deadzone": 0.5, "events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":5,"pressure":0.0,"pressed":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":74,"physical_scancode":0,"unicode":0,"echo":false,"script":null) ] } switch_primary_item_2={ diff --git a/src/actors/players/playerE/PlayerE-Movement_StateReceiver.gd b/src/actors/players/playerE/PlayerE-Movement_StateReceiver.gd index 8af399d..142b611 100644 --- a/src/actors/players/playerE/PlayerE-Movement_StateReceiver.gd +++ b/src/actors/players/playerE/PlayerE-Movement_StateReceiver.gd @@ -2,6 +2,8 @@ extends Movement_StateReceiver var parent_request_state_change :FuncRef +var player_number: int = 1 + func _ready(): var state_ref :State var state_name :String @@ -16,8 +18,8 @@ func _ready(): # It works but node order really mattered. # State machine needed to be processed first probably for ready function. # good to know! + player_number = parent.player_number -var player_number: int = 1 func get_movement_direction() -> float: #return Input.get_axis('move_left', 'move_right') @@ -72,7 +74,7 @@ func wants_dash() -> bool: var _wants_roll :bool func wants_roll() -> bool: - if Input.is_action_just_pressed("dash_" + str(player_number)) and Input.is_action_pressed("ui_up"): + if Input.is_action_just_pressed("dash_" + str(player_number)) and Input.is_action_pressed("move_up_" + str(player_number)): _wants_roll = true return true else: @@ -81,7 +83,7 @@ func wants_roll() -> bool: var _wants_climb :bool func wants_climb() -> bool: - if Input.is_action_pressed("ui_up"): + if Input.is_action_pressed("move_up_" + str(player_number)): _wants_climb = true return true else: diff --git a/src/actors/players/playerE/PlayerE.gd b/src/actors/players/playerE/PlayerE.gd index 11056dc..5ea7509 100644 --- a/src/actors/players/playerE/PlayerE.gd +++ b/src/actors/players/playerE/PlayerE.gd @@ -26,6 +26,12 @@ func _ready(): # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta): PlayerInfo.player_position = global_position.round() + match movement_state_machine.current_state.name: + "idle": + if Input.is_action_just_released("switch_primary_item_" + str(player_number)): + var _selected_item = player_inventory.switch_primary() + if _selected_item: + print("Switched Primary item to: ", _selected_item.name) func hit_Receiver(damage): $Hurtbox_Component.set_hurtbox(false) @@ -69,10 +75,17 @@ var state_to_item_map :Dictionary = { ##TODO: We need to find a way to 'use' the item. func primary_item() -> String: - if player_inventory.primary_selection.consumable == false: - if state_to_item_map.has(player_inventory.primary_selection.name): +# if player_inventory.primary_selection.consumable == false: +# if state_to_item_map.has(player_inventory.primary_selection.name): +# player_inventory.remove_from_inventory(player_inventory.primary_selection) +# return state_to_item_map[player_inventory.primary_selection.name] + + if player_inventory.primary_selection != null: # Have to make sure we even have a second + var _item_name :String = player_inventory.primary_selection.name + if state_to_item_map.has(_item_name): player_inventory.remove_from_inventory(player_inventory.primary_selection) - return state_to_item_map[player_inventory.primary_selection.name] + return state_to_item_map[_item_name] + return '' func secondary_item() -> String: diff --git a/src/classes/inventory_manager.gd b/src/classes/inventory_manager.gd index fde7b30..8ac4f2b 100644 --- a/src/classes/inventory_manager.gd +++ b/src/classes/inventory_manager.gd @@ -25,6 +25,35 @@ func select_primary(_item :Item) -> void: if _items.has(_item): primary_selection = _item +func switch_primary() -> Item: + ## Don't switch unless there is another item + if primary_selection != null and _items.size() > 1: + var found_item :bool = false + var itemarr = _items.keys() + for i in itemarr: + ## Item found in last iteration, grab the next one. + if found_item: + if i == secondary_selection: + break + primary_selection = i + return i + if i == primary_selection: + found_item = true + ## Item found but was the last in the list, grab the first one. + if found_item and itemarr[0] != primary_selection: + if itemarr[0] != secondary_selection: + primary_selection = itemarr[0] + return itemarr[0] + ## Swap primary and secondary + if secondary_selection != null: + var i = secondary_selection + if primary_selection != null: + secondary_selection = primary_selection + primary_selection = i + return i + ## Nothing changed + return null + func select_secondary(_item :Item) -> void: if _items.has(_item): secondary_selection = _item