fix 技能系统

master
chendian 2 years ago
parent 4c9b36775a
commit 42e934728d

@ -10,10 +10,10 @@ script = ExtResource("1_yamsl")
weapon = ExtResource("4_xft4c")
stance_from = 100
stance_to = 0
break_level = 1
action = "flash"
name = ""
skill_animation = ExtResource("2_bdxlh")
break_level = 1
has_animation = true
sprite_frams = ExtResource("2_uof6p")
animation_name = "long_flash"

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

@ -41,3 +41,15 @@ tracks/2/keys = {
"update": 0,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Status:break_level")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.3, 0.5),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [0, 3, 4]
}

@ -41,3 +41,15 @@ tracks/2/keys = {
"update": 0,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Status:break_level")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.7, 0.9),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [0, 3, 4]
}

@ -41,3 +41,15 @@ tracks/2/keys = {
"update": 0,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Status:break_level")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.6, 1),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [0, 3, 4]
}

@ -40,3 +40,15 @@ tracks/2/keys = {
"update": 0,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Status:break_level")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.3, 0.5),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [0, 3, 4]
}

@ -1,9 +1,10 @@
[gd_resource type="AnimationLibrary" load_steps=6 format=3 uid="uid://croik07a1qko5"]
[gd_resource type="AnimationLibrary" load_steps=7 format=3 uid="uid://croik07a1qko5"]
[ext_resource type="Animation" uid="uid://daopmieibx3b7" path="res://resource/skill_animation/hero01_long_attack01.tres" id="1_nwjtl"]
[ext_resource type="Animation" uid="uid://bf6jaraltouun" path="res://resource/skill_animation/hero01_long_attack02.tres" id="2_klfcs"]
[ext_resource type="Animation" uid="uid://c8yueqe7rjn60" path="res://resource/skill_animation/hero01_long_attack03.tres" id="3_g8q4d"]
[ext_resource type="Animation" uid="uid://dk1o3gqhjmuvh" path="res://resource/skill_animation/hero01_long_attack04.tres" id="4_36e6x"]
[ext_resource type="Animation" uid="uid://cwm116apu63n1" path="res://resource/skill_animation/hero01_long_flash.tres" id="5_fumom"]
[ext_resource type="Animation" uid="uid://bjnkrte7660pt" path="res://resource/skill_animation/hero01_long_skill01.tres" id="5_kt0qw"]
[resource]
@ -12,5 +13,6 @@ _data = {
"hero01_long_attack02": ExtResource("2_klfcs"),
"hero01_long_attack03": ExtResource("3_g8q4d"),
"hero01_long_attack04": ExtResource("4_36e6x"),
"hero01_long_flash": ExtResource("5_fumom"),
"hero01_long_skill01": ExtResource("5_kt0qw")
}

@ -2,7 +2,7 @@
[ext_resource type="Script" path="res://script/character/character.gd" id="1_tonbs"]
[ext_resource type="Script" path="res://script/character/status.gd" id="2_txdip"]
[ext_resource type="SpriteFrames" uid="uid://7swf8owxd63i" path="res://resource/animation/character/hero01_long_attack.aseprite" id="3_d0x76"]
[ext_resource type="SpriteFrames" uid="uid://7swf8owxd63i" path="res://resource/animation/character/hero01_long_attack.aseprite" id="3_ibonj"]
[ext_resource type="Script" path="res://script/character/move.gd" id="4_66r53"]
[ext_resource type="Script" path="res://script/character/view.gd" id="4_vijjv"]
[ext_resource type="Script" path="res://script/character/skill.gd" id="6_h4xqy"]
@ -21,15 +21,14 @@ shape = SubResource("BoxShape3D_ty8lx")
[node name="Status" type="Node3D" parent="."]
unique_name_in_owner = true
script = ExtResource("2_txdip")
break_level = 4
[node name="View" type="AnimatedSprite3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1.414, 0, 0, 0, 1, 0, 0, 0)
alpha_cut = 2
texture_filter = 0
sprite_frames = ExtResource("3_d0x76")
animation = &"long_attack01"
sprite_frames = ExtResource("3_ibonj")
animation = &"long_attack04"
script = ExtResource("4_vijjv")
metadata/_aseprite_wizard_config_ = {
"layer": "",

@ -6,9 +6,6 @@
[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")

@ -4,5 +4,8 @@ extends Node3D
const pixel_size : float = 0.01
const sprite_scale : float = 1.414
#移动
const is_jumped_check_time : float = 0.1
#技能系统
const input_alive_time : float = 0.5

@ -1,12 +1,14 @@
@tool
extends Node3D
var animation_library = load("res://resource/skill_animation_library/animation_library.tres")
func get_resource_name(resource:Resource) -> String:
return resource.resource_path.get_file().trim_suffix('.tres') #todo 性能
func refresh_animation_lib():
var animation_library_path = "res://resource/skill_animation_library/animation_library.tres"
var animation_library = load(animation_library_path)
var dir_path = "res://resource/skill_animation"
var dir = DirAccess.open(dir_path)
for file in dir.get_files():
@ -15,8 +17,11 @@ func refresh_animation_lib():
if res is Animation:
var animation = res as Animation
var animation_name = Util.get_resource_name(animation)
print(animation_name)
animation_library.add_animation(animation_name,animation)
animation_library.animation_added.emit(animation_name)
ResourceSaver.save(animation_library,animation_library_path)
func get_all_player_skill():
var ret = []

@ -7,16 +7,20 @@ class_name Move
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
func _physics_process(delta):
update_on_floor()
update_on_floor(delta)
update_gravity(delta)
update_move()
character.move_and_slide()
func update_on_floor():
func update_on_floor(delta):
status.is_on_floor = character.is_on_floor()
if status.is_on_floor:
status.is_jumped = false
if status.is_jumped_check_time > 0:
status.is_jumped_check_time -= delta
else:
status.is_jumped_check_time = 0
status.is_jumped = false
func update_gravity(delta):
if not status.is_on_floor:
@ -41,4 +45,5 @@ func update_move():
func jump():
character.velocity.y = status.cfg.move.jump_velocity
status.is_jumped = true
status.is_jumped_check_time = Setting.is_jumped_check_time
status.trigger_jump = true

@ -47,7 +47,7 @@ func update_break_cancel():
func update_break_jump():
for i in range(0,len(input_list)):
var input = input_list[i]
if input.action == "jump":
if input.action == "jump" and not status.is_jumped:
refresh_input(i)
skill.cancel_skill()
move.jump()
@ -85,11 +85,13 @@ func refresh_input(index:int):
input_list = input_list.slice(index+1)
func update_move():
if status.is_free_control:
if status.is_skill_running:
status.move_dir = Vector2.ZERO
else:
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()
new_input.action = action

@ -3,6 +3,8 @@ extends Node
@onready var status = (%Status as Status)
@onready var combo = (%Combo as Combo)
var action_map = {}
func _ready():
SignalManager.connect("input_action_pressed",on_input_action_pressed)
SignalManager.connect("input_action_pressed",on_input_action_released)
@ -11,10 +13,14 @@ func _ready():
func on_input_action_pressed(event:InputEvent):
for action_name in InputMap.get_actions():
if event.is_action(action_name):
combo.add_input_action(action_name)
if not action_name in action_map:
action_map[action_name] = true
combo.add_input_action(action_name)
func on_input_action_released(event:InputEvent):
pass
for action_name in InputMap.get_actions():
if event.is_action(action_name):
action_map.erase(action_name)
func on_input_action_move(input_dir):
status.input_dir = input_dir

@ -11,15 +11,22 @@ func _process(delta):
pass
func cast_skill(cfg:SkillCfg,cast_dir:Vector2):
status.is_free_control = false
status.is_skill_running = true
status.skill_dir = cast_dir
play("animation_library/%s"%Util.get_resource_name(cfg))
var animation_name = "animation_library/%s" % Util.get_resource_name(cfg)
if has_animation(animation_name):
status.is_free_control = false
status.is_skill_running = true
status.skill_dir = cast_dir
status.break_level = Enum.EBreakLevel.None
play(animation_name)
else:
print("技能animation不存在",animation_name)
func cancel_skill():
view.reset()
status.is_free_control = true
status.is_skill_running = false
status.break_level = Enum.EBreakLevel.Walk
stop()
view.reset()
func _on_animation_finished(_anim_name):
cancel_skill()

@ -23,15 +23,18 @@ class_name Status
@export var is_free_turn : bool = true #是否允许转向
@export var is_right : bool = true #是否向右
@export var is_jumped : bool #是否已跳跃
@export var is_jumped_check_time : float #是否已跳跃检测时间 避免未起直接判定落地
@export_category("技能状态")
@export var is_skill_running : bool #技能是否正在释放
@export_category("玩家输入状态")
@export_category("玩家技能状态")
@export var input_dir : Vector2 #指令方向
@export var skill_dir : Vector2 #技能释放方向
@export var stance : Enum.EStance #技能姿态
@export var break_level : Enum.EBreakLevel #打断等级
@export var skill_move_speed : float #技能位移速度
@export var skill_step_speed : float #技能操控速度
@export_category("动画触发器")
@export var trigger_jump : bool #跳跃

Loading…
Cancel
Save