技能系统

master
chendian 2 years ago
parent 473c8ec96a
commit 72957ab144

@ -10,10 +10,10 @@ script = ExtResource("1_gik08")
weapon = ExtResource("4_id85o")
stance_from = 0
stance_to = 1
action = "light_attack"
break_level = 3
action = "attack_light"
name = ""
skill_animation = ExtResource("2_6nbpq")
break_level = 2
has_animation = false
sprite_frams = ExtResource("3_og1bb")
animation_name = "long_attack01"

@ -10,10 +10,10 @@ script = ExtResource("1_e0fqi")
weapon = ExtResource("4_novna")
stance_from = 1
stance_to = 2
action = "light_attack"
break_level = 3
action = "attack_light"
name = ""
skill_animation = ExtResource("2_jrgan")
break_level = 2
has_animation = false
sprite_frams = ExtResource("3_jidy7")
animation_name = "long_attack02"

@ -10,10 +10,10 @@ script = ExtResource("1_uaib7")
weapon = ExtResource("2_8uqiw")
stance_from = 2
stance_to = 3
action = "light_attack"
break_level = 3
action = "attack_light"
name = ""
skill_animation = ExtResource("2_ugt3f")
break_level = 2
has_animation = true
sprite_frams = ExtResource("3_sr2og")
animation_name = "long_attack03"

@ -10,10 +10,10 @@ script = ExtResource("1_xsxbs")
weapon = ExtResource("4_plyre")
stance_from = 3
stance_to = 4
action = "light_attack"
break_level = 3
action = "attack_light"
name = ""
skill_animation = ExtResource("2_sam6s")
break_level = 2
has_animation = true
sprite_frams = ExtResource("3_w7h1m")
animation_name = "long_attack04"

@ -10,10 +10,10 @@ script = ExtResource("1_ud5ph")
weapon = ExtResource("4_3bf64")
stance_from = 1
stance_to = 2
action = "heavy_attack"
break_level = 3
action = "attack_heavy"
name = ""
skill_animation = ExtResource("2_ewts2")
break_level = 2
has_animation = true
sprite_frams = ExtResource("3_qwjfl")
animation_name = "long_skill01"

@ -48,8 +48,8 @@ tracks/3/path = NodePath("Status:break_level")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.5, 0.7),
"times": PackedFloat32Array(0, 0.3, 0.7),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [0, 2, 4]
"values": [0, 3, 4]
}

@ -6,6 +6,9 @@
[node name="Character" instance=ExtResource("1_bny0p")]
[node name="Status" parent="." index="1"]
break_level = 0
[node name="Input" type="Node3D" parent="." index="5"]
script = ExtResource("2_qkra8")

@ -9,4 +9,4 @@ enum EStance {
None = 99,
Any = 100,
}
enum EBreakLevel {None, Cancel, Jump, Combo, Walk} #不可打断 取消技打断 跳跃打断 连招打断 行走打断
enum EBreakLevel {None, Cancel, Jump, Break, Walk} #不可打断 取消技打断 跳跃打断 连招打断 行走打断

@ -5,4 +5,4 @@ const pixel_size : float = 0.01
const sprite_scale : float = 1.414
#技能系统
const input_alive_time : float = 0.2
const input_alive_time : float = 0.5

@ -23,7 +23,6 @@ func update_gravity(delta):
character.velocity.y -= gravity * delta * status.cfg.move.gravity_scale
status.speed_y = character.velocity.y
func update_move():
var input_dir = status.move_dir
var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()

@ -38,40 +38,47 @@ func update_break():
Enum.EBreakLevel.None: pass
Enum.EBreakLevel.Cancel: update_break_cancel()
Enum.EBreakLevel.Jump: update_break_jump()
Enum.EBreakLevel.Combo: update_break_combo()
Enum.EBreakLevel.Break: update_break_break()
Enum.EBreakLevel.Walk: update_break_walk()
func update_break_cancel():
update_break_by_level(Enum.EBreakLevel.Cancel)
func update_break_jump():
var index = input_list.find("jump")
if index == -1:
return
refresh_input(index)
skill.cancel_skill()
move.jump()
for i in range(0,len(input_list)):
var input = input_list[i]
if input.action == "jump":
refresh_input(i)
skill.cancel_skill()
move.jump()
return
func update_break_combo():
update_break_by_level(Enum.EBreakLevel.Combo)
func update_break_break():
update_break_by_level(Enum.EBreakLevel.Break)
func update_break_walk():
if status.input_dir.length() > 0:
if status.is_skill_running and status.input_dir.length() > 0:
refresh_input(len(input_list))
skill.cancel_skill()
func update_break_by_level(break_level:Enum.EBreakLevel):
for i in range(0,len(input_list)):
var input = input_list[i]
var skillCfgList = []
var skill_cfg_list = []
if input.action in skill_map:
skillCfgList.append_array(skill_map[input.action])
skill_cfg_list.append_array(skill_map[input.action])
if "any" in skill_map:
skillCfgList.append_array(skill_map["any"])
for skillCfg in skillCfgList:
if skillCfg.break_level == break_level:
skill.cast_skill(skillCfg,status.input_dir)
refresh_input(i)
skill_cfg_list.append_array(skill_map["any"])
for skill_cfg in skill_cfg_list:
var player_skill_cfg = skill_cfg as PlayerSkillCfg
if player_skill_cfg.break_level != break_level:
continue
if player_skill_cfg.stance_from != status.stance:
continue
skill.cast_skill(skill_cfg,status.input_dir)
status.stance = player_skill_cfg.stance_to
refresh_input(i)
return
func refresh_input(index:int):
if index >= len(input_list)-1:
@ -82,6 +89,8 @@ func refresh_input(index:int):
func update_move():
if status.is_free_control:
status.move_dir = status.input_dir
status.stance = Enum.EStance.Idle if status.is_on_floor else Enum.EStance.AirIdle
status.break_level = Enum.EBreakLevel.Walk
func add_input_action(action:String):
var new_input = InputData.new()
@ -89,7 +98,7 @@ func add_input_action(action:String):
new_input.alive_time = Setting.input_alive_time
input_list.append(new_input)
func add_skill(action:String,skillCfg:SkillCfg):
func add_skill(action:String,skillCfg:PlayerSkillCfg):
if not action in skill_map:
skill_map[action] = []
skill_map[action].append(skillCfg)

@ -9,7 +9,9 @@ func _ready():
SignalManager.connect("input_action_move",on_input_action_move)
func on_input_action_pressed(event:InputEvent):
combo.add_input_action(event.as_text())
for action_name in InputMap.get_actions():
if event.is_action(action_name):
combo.add_input_action(action_name)
func on_input_action_released(event:InputEvent):
pass

@ -6,4 +6,5 @@ class_name PlayerSkillCfg
@export var weapon : WeaponCfg
@export var stance_from : Enum.EStance
@export var stance_to : Enum.EStance
@export_enum("light_attack","heavy_attack","flash") var action : String = "light_attack"
@export var break_level : Enum.EBreakLevel = Enum.EBreakLevel.Break
@export_enum("attack_light","attack_heavy","flash") var action : String = "attack_light"

@ -5,7 +5,6 @@ class_name SkillCfg
@export var name : String
@export var skill_animation : Animation
@export var break_level : Enum.EBreakLevel = Enum.EBreakLevel.Combo
var _has_animation : bool
@export var has_animation : bool :

Loading…
Cancel
Save