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.

65 lines
1.9 KiB
GDScript

2 years ago
extends AnimationPlayer
class_name Skill
@onready var character = (get_owner() as Character)
2 years ago
@onready var view = (%View as View)
@onready var status = (%Status as Status)
2 years ago
@onready var effect = (%Effect as Effect)
2 years ago
func init():
cancel_skill()
func _process(delta):
if status.is_skill_running and status.is_pause == is_playing():
if status.is_pause:pause();
else:play();
2 years ago
func cast_skill(cfg:SkillCfg,cast_dir:Vector2):
2 years ago
cancel_skill()
2 years ago
if cast_dir.length() == 0:
cast_dir = Vector2.RIGHT if status.is_right else Vector2.LEFT
if !cfg.free_lock and status.target:
var target = Global.character_mgr.get_character(status.target)
if target:
cast_dir = character.pos2D().direction_to(target.pos2D()).normalized()
2 years ago
2 years ago
var animation_name = "animation_library/%s" % Util.get_resource_name(cfg)
if has_animation(animation_name):
2 years ago
status.speed_up_rate = -1
status.skill_move_speed = 0
status.skill_float_speed = 0
2 years ago
status.is_free_control = false
2 years ago
status.is_free_turn = false
2 years ago
status.is_skill_running = true
2 years ago
status.skill_cfg = cfg
2 years ago
status.skill_dir = cast_dir
status.break_level = Enum.EBreakLevel.None
status.skill_attack_index = 0
status.skill_attack_effect_index = 0
2 years ago
if cast_dir.x != 0: status.is_right = cast_dir.x > 0
play(animation_name,-1,Setting.animation_speed_scale)
2 years ago
else:
print("技能animation不存在",animation_name)
2 years ago
2 years ago
func cancel_skill():
2 years ago
stop()
status.speed_up_rate = 0
status.skill_move_speed = 0
status.skill_float_speed = 0
status.is_free_control = true
2 years ago
status.is_free_turn = true
2 years ago
status.is_skill_running = false
2 years ago
status.skill_cfg = null
2 years ago
status.break_level = Enum.EBreakLevel.Walk
status.skill_attack_index = 0
status.skill_attack_effect_index = 0
2 years ago
effect.release_effect()
2 years ago
view.reset()
2 years ago
func on_attack_miss():
# 攻击未命中时跳帧
advance(Setting.animation_frame_rate)
2 years ago
func _on_animation_finished(_anim_name):
cancel_skill()