diff --git a/config/player_skill/hero01_long_air_attack01.tres b/config/player_skill/hero01_long_air_attack01.tres new file mode 100644 index 0000000..e2d3542 --- /dev/null +++ b/config/player_skill/hero01_long_air_attack01.tres @@ -0,0 +1,21 @@ +[gd_resource type="Resource" script_class="PlayerSkillCfg" load_steps=6 format=3 uid="uid://bsdspblvefgpv"] + +[ext_resource type="Resource" uid="uid://bsqk3q6mccllg" path="res://config/attack/normal_hit.tres" id="1_mxlqc"] +[ext_resource type="Script" path="res://script/config/player_skill_cfg.gd" id="2_hh5ph"] +[ext_resource type="Animation" uid="uid://p8l0puqxrkwh" path="res://resource/skill_animation/hero01_long_air_attack01.tres" id="3_3pp8a"] +[ext_resource type="SpriteFrames" uid="uid://ce83cuqwgwwi4" path="res://resource/animation/character/hero01_long_attack.aseprite" id="4_q0bln"] +[ext_resource type="Resource" uid="uid://cy3wwalxeyro0" path="res://config/weapon/long.tres" id="5_s1k6m"] + +[resource] +script = ExtResource("2_hh5ph") +weapon = ExtResource("5_s1k6m") +stance_from = 10 +stance_to = 11 +break_level = 3 +action = "attack_light" +name = "" +skill_animation = ExtResource("3_3pp8a") +attack_list = Array[Resource("res://script/config/attack_cfg.gd")]([ExtResource("1_mxlqc")]) +has_animation = true +sprite_frams = ExtResource("4_q0bln") +animation_name = "long_air_attack01" diff --git a/config/player_skill/hero01_long_air_attack02.tres b/config/player_skill/hero01_long_air_attack02.tres new file mode 100644 index 0000000..98154cd --- /dev/null +++ b/config/player_skill/hero01_long_air_attack02.tres @@ -0,0 +1,21 @@ +[gd_resource type="Resource" script_class="PlayerSkillCfg" load_steps=6 format=3 uid="uid://drxg06dvcx4oj"] + +[ext_resource type="Resource" uid="uid://bsqk3q6mccllg" path="res://config/attack/normal_hit.tres" id="1_qfkyy"] +[ext_resource type="Script" path="res://script/config/player_skill_cfg.gd" id="2_gjjhv"] +[ext_resource type="Animation" uid="uid://cjfy6ia1ukyiu" path="res://resource/skill_animation/hero01_long_air_attack02.tres" id="3_76yga"] +[ext_resource type="SpriteFrames" uid="uid://ce83cuqwgwwi4" path="res://resource/animation/character/hero01_long_attack.aseprite" id="4_ahm2t"] +[ext_resource type="Resource" uid="uid://cy3wwalxeyro0" path="res://config/weapon/long.tres" id="5_nkec4"] + +[resource] +script = ExtResource("2_gjjhv") +weapon = ExtResource("5_nkec4") +stance_from = 11 +stance_to = 12 +break_level = 3 +action = "attack_light" +name = "" +skill_animation = ExtResource("3_76yga") +attack_list = Array[Resource("res://script/config/attack_cfg.gd")]([ExtResource("1_qfkyy")]) +has_animation = true +sprite_frams = ExtResource("4_ahm2t") +animation_name = "long_air_attack02" diff --git a/config/player_skill/hero01_long_air_attack03.tres b/config/player_skill/hero01_long_air_attack03.tres new file mode 100644 index 0000000..8ca3bd9 --- /dev/null +++ b/config/player_skill/hero01_long_air_attack03.tres @@ -0,0 +1,21 @@ +[gd_resource type="Resource" script_class="PlayerSkillCfg" load_steps=6 format=3 uid="uid://c8l7h74abqlhb"] + +[ext_resource type="Resource" uid="uid://bsqk3q6mccllg" path="res://config/attack/normal_hit.tres" id="1_sfcbc"] +[ext_resource type="Script" path="res://script/config/player_skill_cfg.gd" id="2_0x7hh"] +[ext_resource type="Animation" uid="uid://bh5s2t3cbobpp" path="res://resource/skill_animation/hero01_long_air_attack03.tres" id="3_1erk8"] +[ext_resource type="SpriteFrames" uid="uid://ce83cuqwgwwi4" path="res://resource/animation/character/hero01_long_attack.aseprite" id="4_wrd60"] +[ext_resource type="Resource" uid="uid://cy3wwalxeyro0" path="res://config/weapon/long.tres" id="5_u3vas"] + +[resource] +script = ExtResource("2_0x7hh") +weapon = ExtResource("5_u3vas") +stance_from = 12 +stance_to = 13 +break_level = 3 +action = "attack_light" +name = "" +skill_animation = ExtResource("3_1erk8") +attack_list = Array[Resource("res://script/config/attack_cfg.gd")]([ExtResource("1_sfcbc")]) +has_animation = true +sprite_frams = ExtResource("4_wrd60") +animation_name = "long_air_attack03" diff --git a/resource/skill_animation/hero01_long_air_attack01.tres b/resource/skill_animation/hero01_long_air_attack01.tres new file mode 100644 index 0000000..d3a3641 --- /dev/null +++ b/resource/skill_animation/hero01_long_air_attack01.tres @@ -0,0 +1,93 @@ +[gd_resource type="Animation" load_steps=2 format=3 uid="uid://p8l0puqxrkwh"] + +[ext_resource type="SpriteFrames" uid="uid://ce83cuqwgwwi4" path="res://resource/animation/character/hero01_long_attack.aseprite" id="1_do05t"] + +[resource] +resource_name = "hero01_long_air_attack01" +length = 0.9 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("View:sprite_frames") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [ExtResource("1_do05t")] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("View:animation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["long_air_attack01"] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("View:frame") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1), +"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] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Status:speed_up_rate") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0.2, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [-0.5, -1.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Status:skill_move_speed") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0.1, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [1.0, 0.0] +} +tracks/6/type = "method" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Battle") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0.2), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"attack" +}] +} diff --git a/resource/skill_animation/hero01_long_air_attack02.tres b/resource/skill_animation/hero01_long_air_attack02.tres new file mode 100644 index 0000000..082c1cc --- /dev/null +++ b/resource/skill_animation/hero01_long_air_attack02.tres @@ -0,0 +1,93 @@ +[gd_resource type="Animation" load_steps=2 format=3 uid="uid://cjfy6ia1ukyiu"] + +[ext_resource type="SpriteFrames" uid="uid://ce83cuqwgwwi4" path="res://resource/animation/character/hero01_long_attack.aseprite" id="1_1q1tj"] + +[resource] +resource_name = "hero01_long_air_attack02" +length = 0.9 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("View:sprite_frames") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [ExtResource("1_1q1tj")] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("View:animation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["long_air_attack02"] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("View:frame") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1), +"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] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Status:speed_up_rate") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0.2, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [-0.5, -1.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Status:skill_move_speed") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0.1, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [1.0, 0.0] +} +tracks/6/type = "method" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Battle") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0.2), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"attack" +}] +} diff --git a/resource/skill_animation/hero01_long_air_attack03.tres b/resource/skill_animation/hero01_long_air_attack03.tres new file mode 100644 index 0000000..2bde2fe --- /dev/null +++ b/resource/skill_animation/hero01_long_air_attack03.tres @@ -0,0 +1,93 @@ +[gd_resource type="Animation" load_steps=2 format=3 uid="uid://bh5s2t3cbobpp"] + +[ext_resource type="SpriteFrames" uid="uid://ce83cuqwgwwi4" path="res://resource/animation/character/hero01_long_attack.aseprite" id="1_0pfmh"] + +[resource] +resource_name = "hero01_long_air_attack03" +length = 0.9 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("View:sprite_frames") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [ExtResource("1_0pfmh")] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("View:animation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["long_air_attack03"] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("View:frame") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1), +"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] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Status:speed_up_rate") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0.2, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [-0.5, -1.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Status:skill_move_speed") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0.1, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [1.0, 0.0] +} +tracks/6/type = "method" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Battle") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0.2), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"attack" +}] +} diff --git a/resource/skill_animation_library/animation_library.tres b/resource/skill_animation_library/animation_library.tres index 2079d16..bad2329 100644 --- a/resource/skill_animation_library/animation_library.tres +++ b/resource/skill_animation_library/animation_library.tres @@ -1,7 +1,10 @@ -[gd_resource type="AnimationLibrary" load_steps=8 format=3 uid="uid://croik07a1qko5"] +[gd_resource type="AnimationLibrary" load_steps=11 format=3 uid="uid://croik07a1qko5"] +[ext_resource type="Animation" uid="uid://p8l0puqxrkwh" path="res://resource/skill_animation/hero01_long_air_attack01.tres" id="1_b46g3"] [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://cjfy6ia1ukyiu" path="res://resource/skill_animation/hero01_long_air_attack02.tres" id="2_8wtap"] [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://bh5s2t3cbobpp" path="res://resource/skill_animation/hero01_long_air_attack03.tres" id="2_nqaew"] [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"] @@ -10,6 +13,9 @@ [resource] _data = { +"hero01_long_air_attack01": ExtResource("1_b46g3"), +"hero01_long_air_attack02": ExtResource("2_8wtap"), +"hero01_long_air_attack03": ExtResource("2_nqaew"), "hero01_long_attack01": ExtResource("1_nwjtl"), "hero01_long_attack02": ExtResource("2_klfcs"), "hero01_long_attack03": ExtResource("3_g8q4d"), diff --git a/scene/character/character.tscn b/scene/character/character.tscn index 88019af..9a5d643 100644 --- a/scene/character/character.tscn +++ b/scene/character/character.tscn @@ -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://dhfqj1dxldqao" path="res://resource/animation/character/hero01_long_skill01.aseprite" id="3_vw4qy"] +[ext_resource type="SpriteFrames" uid="uid://ce83cuqwgwwi4" path="res://resource/animation/character/hero01_long_attack.aseprite" id="3_q8i10"] [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"] @@ -24,15 +24,14 @@ shape = SubResource("BoxShape3D_ty8lx") unique_name_in_owner = true script = ExtResource("2_txdip") speed_up_rate = -0.5 -skill_float_speed = 3.0 [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) +transform = Transform3D(1, 0, 0, 0, 1.414, 0, 0, 0, 1, 0, 0.376646, 0) alpha_cut = 2 texture_filter = 0 -sprite_frames = ExtResource("3_vw4qy") -animation = &"long_skill02" +sprite_frames = ExtResource("3_q8i10") +animation = &"long_air_attack03" script = ExtResource("4_vijjv") [node name="Move" type="Node3D" parent="."] diff --git a/script/_global/setting.gd b/script/_global/setting.gd index e5b8fd5..8613fdb 100644 --- a/script/_global/setting.gd +++ b/script/_global/setting.gd @@ -4,8 +4,5 @@ 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 diff --git a/script/character/battle.gd b/script/character/battle.gd index 93716f3..2bfccb8 100644 --- a/script/character/battle.gd +++ b/script/character/battle.gd @@ -56,5 +56,10 @@ func settle(hit_info:HitInfo): character_to.add_buff("stagger",1) character_to.add_buff("floating",-1) + character_to.add_buff("shake_x",0.2) + + #pause + character_from.add_buff("pause",0.1) + character_to.add_buff("pause",0.1) diff --git a/script/character/buff.gd b/script/character/buff.gd index 36d743f..47f7ce9 100644 --- a/script/character/buff.gd +++ b/script/character/buff.gd @@ -6,6 +6,7 @@ class_name Buff class BuffInfo: var name : String + var duration_max : float var duration : float var buff_map = {} #命中信息 @@ -13,37 +14,51 @@ var buff_map = {} #命中信息 func _process(delta): for buff_name in buff_map: var buff_info = buff_map[buff_name] + if has_buff("pause") and buff_name!="pause": + continue if buff_info.duration == -1: - trigger_buff_effect(buff_info.name,"update") + trigger_buff_effect(buff_info,"update") else: - buff_info.duration -= delta - if buff_info.duration <= 0: - trigger_buff_effect(buff_info.name,"end") + buff_info.duration += delta + if buff_info.duration >= buff_info.duration_max: + trigger_buff_effect(buff_info,"end") buff_map.erase(buff_name) else: - trigger_buff_effect(buff_info.name,"update") + trigger_buff_effect(buff_info,"update") -func trigger_buff_effect(buff_name:String,trigger_name:String): +func trigger_buff_effect(buff:BuffInfo,trigger_name:String): + var buff_name = buff.name var function_name = "on_%s_%s" % [trigger_name,buff_name] if has_method(function_name): - call(function_name) + var rate = buff.duration/buff.duration_max + call(function_name,rate) func has_buff(buff_name:String) -> bool: return buff_name in buff_map func add_buff(buff_name:String,duration:float): + var buff : BuffInfo if buff_name in buff_map: - buff_map[buff_name].duration = duration + buff = buff_map[buff_name] else: - var new_buff = BuffInfo.new() - new_buff.name = buff_name - new_buff.duration = duration - buff_map[buff_name] = new_buff - trigger_buff_effect(buff_name,"start") - + buff = BuffInfo.new() + buff.name = buff_name + buff_map[buff_name] = buff + buff.duration_max = duration + buff.duration = 0 + trigger_buff_effect(buff,"start") + #==具体实现== -func on_end_hit_back():status.hit_back_speed = 0 -func on_end_hit_up():status.hit_up_speed = 0 -func on_start_stagger():status.is_stagger = true -func on_end_stagger():status.is_stagger = false -func on_end_stun():status.is_stun = false +func on_end_hit_back(rate):status.hit_back_speed = 0 +func on_end_hit_up(rate):status.hit_up_speed = 0 +func on_start_stagger(rate):status.is_stagger = true +func on_end_stagger(rate):status.is_stagger = false +func on_end_stun(rate):status.is_stun = false +func on_start_jumping(rate):status.is_jumping = true +func on_end_jumping(rate):status.is_jumping = false +func on_update_shake_x(rate): + var offset = sin(rate * PI * 4) - 0.5 + status.shake_offset = Vector3(offset*0.02,0,0); +func on_end_shake_x(rate):status.shake_offset = Vector3.ZERO +func on_start_pause(rate):status.is_pause = true +func on_end_pause(rate):status.is_pause = false diff --git a/script/character/character.gd b/script/character/character.gd index 5735733..6c84f2c 100644 --- a/script/character/character.gd +++ b/script/character/character.gd @@ -23,7 +23,7 @@ func build_view(cfg:CharacterCfg): collision.position = Vector3(0,half_height,0) collision.scale = Vector3(width,half_height*2,width) - view.position = Vector3(0,half_height,0) + status.basic_offset = Vector3(0,half_height,0) view.init(cfg.sprite_frames) skill.init() diff --git a/script/character/move.gd b/script/character/move.gd index 329b047..92a25f1 100644 --- a/script/character/move.gd +++ b/script/character/move.gd @@ -3,24 +3,21 @@ class_name Move @onready var character = (get_owner() as Character) @onready var status = (%Status as Status) +@onready var buff = (%Buff as Buff) var gravity = ProjectSettings.get_setting("physics/3d/default_gravity") func _physics_process(delta): + if status.is_pause:return update_on_floor(delta) update_speed_y(delta) update_move() - character.move_and_slide() func update_on_floor(delta): status.is_on_floor = character.is_on_floor() - if status.is_on_floor: - if status.is_jumped_check_time > 0: - status.is_jumped_check_time -= delta - else: - status.is_jumped_check_time = 0 - status.is_jumped = false + if status.is_on_floor and not status.is_jumping: + status.is_jumped = false func update_speed_y(delta): var has_y_speed = status.skill_float_speed != 0 or status.hit_up_speed != 0 @@ -32,8 +29,7 @@ func update_speed_y(delta): status.speed_y = character.velocity.y func update_move(): - var move_speed = status.cfg.move.speed * (1 + status.speed_up_rate) - var move_velocity = status.move_dir * move_speed + var move_velocity = status.move_dir * (status.cfg.move.speed * (1 + status.speed_up_rate)) var skill_velocity = status.skill_dir * status.skill_move_speed var hit_back_velocity = status.hit_back_dir * status.hit_back_speed move_velocity += skill_velocity + hit_back_velocity @@ -41,11 +37,11 @@ func update_move(): character.velocity.z = move_velocity.y status.speed_xz = Vector2(character.velocity.x,character.velocity.z).length() - if status.is_free_turn and move_velocity.x != 0: - status.is_right = move_velocity.x > 0 + if status.is_free_turn and status.move_dir.x != 0: + status.is_right = status.move_dir.x > 0 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 + buff.add_buff("jumping",0.1) diff --git a/script/character/skill.gd b/script/character/skill.gd index fa7b78e..9a08eae 100644 --- a/script/character/skill.gd +++ b/script/character/skill.gd @@ -6,7 +6,12 @@ class_name Skill 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(); + func cast_skill(cfg:SkillCfg,cast_dir:Vector2): if cast_dir.length() == 0: cast_dir = Vector2.RIGHT if status.is_right else Vector2.LEFT diff --git a/script/character/status.gd b/script/character/status.gd index 7b7ea83..0ebcecc 100644 --- a/script/character/status.gd +++ b/script/character/status.gd @@ -15,6 +15,11 @@ class_name Status @export var shield : float #当前护盾 @export var shield_max : float #护盾最大值 +@export_category("表现状态") +@export var basic_offset : Vector3 #基本偏移值 +@export var shake_offset : Vector3 #抖动偏移值 +@export var is_pause : bool #是否暂停 + @export_category("移动状态") @export var move_dir : Vector2 #移动方向 @export var speed_up_rate : float #移动速度比率 @@ -24,8 +29,8 @@ class_name Status @export var is_on_floor : bool #是否在地面 @export var is_free_turn : bool = true #是否允许转向 @export var is_right : bool = true #是否向右 +@export var is_jumping : bool #是否正在跳跃 @export var is_jumped : bool #是否已跳跃 -@export var is_jumped_check_time : float #是否已跳跃检测时间 避免未起直接判定落地 @export_category("buff状态") @export var is_stagger : bool #是否硬直 diff --git a/script/character/view.gd b/script/character/view.gd index b9bbb72..7f41716 100644 --- a/script/character/view.gd +++ b/script/character/view.gd @@ -45,8 +45,10 @@ func _ready(): run("hit3","idle_loop") func _process(delta): + if status.is_pause:return update_flip() update_trigger() + update_view() if status.is_free_control: update_trans() @@ -84,7 +86,11 @@ func update_trigger(): if status.get(trigger.condition): status.set(trigger.condition,false) play(trigger.to) - + +func update_view(): + #view位置 + position = status.basic_offset + status.shake_offset + func update_trans(): for trans in trans_list: if trans.from == "any" or trans.from == animation: