You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
1.9 KiB
GDScript

2 years ago
extends Node3D
class_name PlayerInput
2 years ago
@onready var status = (%Status as Status)
2 years ago
@onready var combo = (%Combo as Combo)
2 years ago
@onready var action = (%PlayerAction as PlayerAction)
2 years ago
2 years ago
var action_map = {}
var switch_action_list = ["attack_heavy","attack_light","jump","interact"]
var skill_action_list = ["skill1","skill2","skill3","skill4"]
2 years ago
2 years ago
func _ready():
SignalManager.connect("input_action_pressed",on_input_action_pressed)
2 years ago
SignalManager.connect("input_action_released",on_input_action_released)
2 years ago
SignalManager.connect("input_action_move",on_input_action_move)
2 years ago
func on_input_action_pressed(action_name:String):
if action_name in action_map:
2 years ago
return
action_map[action_name] = true
2 years ago
action_name = get_switch_action(action_name)
action_name = get_skill_action(action_name)
2 years ago
Global.ui_mgr.input_action(action_name,true)
if Global.is_control_pause:
return
if not action.check_action(action_name,true):
combo.add_input_action(action_name)
2 years ago
2 years ago
func on_input_action_released(action_name:String):
2 years ago
if not action_name in action_map:
return
2 years ago
action_map.erase(action_name)
2 years ago
action_name = get_switch_action(action_name)
action_name = get_skill_action(action_name)
2 years ago
Global.ui_mgr.input_action(action_name,false)
if Global.is_control_pause:
return
action.check_action(action_name,false)
2 years ago
func on_input_action_move(input_dir):
2 years ago
Global.ui_mgr.input_dir(input_dir)
2 years ago
if Global.is_control_pause:
return
2 years ago
status.input_dir = input_dir
func get_switch_action(action_name:String)->String:
if not action_name in switch_action_list:
return action_name
if not status.is_switch:
return action_name
if status.target:
return "lock_%s"%action_name
else:
return "free_%s"%action_name
func get_skill_action(action_name:String)->String:
if not action_name in skill_action_list:
return action_name
var index = skill_action_list.find(action_name)
action_name = switch_action_list[index]
if status.target:
return "lock_%s"%action_name
else:
return "free_%s"%action_name