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.

68 lines
2.4 KiB
GDScript

extends Node3D
class_name PlayerAction
@onready var test_bullet: CharacterCfg = load("res://config/character/bullet01.tres") as CharacterCfg
@onready var character: Character = (get_owner() as Character)
@onready var status: Status = (%Status as Status)
@onready var combo: Combo = (%Combo as Combo)
var is_lock_pressed: bool
var lock_cd_dict: Dictionary = {}
func _process(delta) -> void:
var has_target: bool = status.target != 0
for key in lock_cd_dict:
if lock_cd_dict[key] > 0:
lock_cd_dict[key] -= delta
else:
lock_cd_dict.erase(key)
if is_lock_pressed == has_target:
return
if is_lock_pressed:
var enemy_list: Array[Character] = Global.character_mgr.get_enemy_list(character.id())
var pos_player: Vector2 = character.pos2D()
enemy_list.sort_custom(
func(a: Character, b: Character):
var a_lock_cd: bool = a.id() in lock_cd_dict
var b_lock_cd: bool = b.id() in lock_cd_dict
if a_lock_cd != b_lock_cd:
return b_lock_cd
return a.pos2D().distance_squared_to(pos_player) < b.pos2D().distance_squared_to(pos_player)
)
if enemy_list:
character.set_target(enemy_list[0].id())
else:
lock_cd_dict[character.target()] = 1 #1秒内无法再次锁定
character.set_target(0)
func check_action(key: String, is_pressed: bool) -> bool:
if is_pressed and check_action_pressed(key):
return true
match key:
"lock": lock(is_pressed)
"switch": switch(is_pressed)
_: return false
return true
func check_action_pressed(key: String) -> bool:
match key:
"weapon_pre": combo.weapon_index_change(-1)
"weapon_next": combo.weapon_index_change(1)
"test_1":
Global.character_mgr.create_character(ResourceManager.cfg_character_monster_test1, Enum.ETeam.Monster, Vector3(5.5, 0, 2))
Global.character_mgr.create_character(ResourceManager.cfg_character_monster_test2, Enum.ETeam.Monster, Vector3(5.5, 0, 2))
Global.character_mgr.create_character(ResourceManager.cfg_character_monster_test3, Enum.ETeam.Monster, Vector3(5.5, 0, 2))
_: return false
return true
func lock(is_pressed: bool):
is_lock_pressed = is_pressed
func switch(is_pressed: bool):
character.set_status("is_switch", is_pressed)