From ee74c578e2dbd0460257ddc09878633f38b6088c Mon Sep 17 00:00:00 2001 From: chendian <-> Date: Sun, 22 Oct 2023 09:05:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=87=BB=E8=90=BD=E5=8F=8D=E5=BC=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/attack/normal_hit.tres | 6 +++-- ...ebound_heavy.tres => normal_hit_down.tres} | 10 ++++---- config/attack/normal_hit_up.tres | 4 ++-- config/attack/rebound.tres | 10 ++++---- .../hero01_long_air_attack03.tres | 4 ++-- .../hero01_long_air_attack01.tres | 16 +++++++++++-- .../hero01_long_air_attack02.tres | 16 +++++++++++-- .../hero01_long_air_attack03.tres | 16 +++++++++++-- scene/character/character.tscn | 4 +++- scene/launcher.tscn | 6 +---- script/character/battle.gd | 15 ++++++++---- script/character/buff.gd | 23 ++++++++++++------- script/character/character.gd | 11 ++++----- script/character/status.gd | 3 +++ script/character/view.gd | 5 ++++ script/config/attack_cfg.gd | 2 ++ script/manager/character_manager.gd | 2 +- script/manager/game_manager.gd | 7 ++---- script/manager/resource_manager.gd | 13 ++++++++--- 19 files changed, 119 insertions(+), 54 deletions(-) rename config/attack/{rebound_heavy.tres => normal_hit_down.tres} (65%) diff --git a/config/attack/normal_hit.tres b/config/attack/normal_hit.tres index 8dfe800..93b6f13 100644 --- a/config/attack/normal_hit.tres +++ b/config/attack/normal_hit.tres @@ -8,7 +8,9 @@ damage_rate = 1.0 break_level = 0 hit_back_speed = 2.0 hit_back_duration = 0.05 -hit_up_speed = 0.0 -hit_up_duration = 0.0 +hit_up_speed = 1.0 +hit_up_duration = 0.1 pause_time = 0.0 is_floating = false +is_hit_down = false +is_rebound = false diff --git a/config/attack/rebound_heavy.tres b/config/attack/normal_hit_down.tres similarity index 65% rename from config/attack/rebound_heavy.tres rename to config/attack/normal_hit_down.tres index cf2e1d6..f338d7c 100644 --- a/config/attack/rebound_heavy.tres +++ b/config/attack/normal_hit_down.tres @@ -1,14 +1,16 @@ -[gd_resource type="Resource" script_class="AttackCfg" load_steps=2 format=3 uid="uid://r7fg0y1bf815"] +[gd_resource type="Resource" script_class="AttackCfg" load_steps=2 format=3 uid="uid://bnqnw10v7kude"] -[ext_resource type="Script" path="res://script/config/attack_cfg.gd" id="1_csh3t"] +[ext_resource type="Script" path="res://script/config/attack_cfg.gd" id="1_fl1sp"] [resource] -script = ExtResource("1_csh3t") +script = ExtResource("1_fl1sp") damage_rate = 1.0 break_level = 0 hit_back_speed = 4.0 hit_back_duration = 0.05 -hit_up_speed = 4.0 +hit_up_speed = -4.0 hit_up_duration = 0.05 pause_time = 0.1 is_floating = true +is_hit_down = true +is_rebound = false diff --git a/config/attack/normal_hit_up.tres b/config/attack/normal_hit_up.tres index 0c38aab..16efcdb 100644 --- a/config/attack/normal_hit_up.tres +++ b/config/attack/normal_hit_up.tres @@ -6,8 +6,8 @@ script = ExtResource("1_iuifx") damage_rate = 1.0 break_level = 0 -hit_back_speed = 3.0 -hit_back_duration = 0.1 +hit_back_speed = 0.0 +hit_back_duration = 0.0 hit_up_speed = 3.0 hit_up_duration = 0.1 pause_time = 0.0 diff --git a/config/attack/rebound.tres b/config/attack/rebound.tres index 9354f6d..9c4a1bb 100644 --- a/config/attack/rebound.tres +++ b/config/attack/rebound.tres @@ -6,9 +6,11 @@ script = ExtResource("1_2fwsa") damage_rate = 1.0 break_level = 0 -hit_back_speed = 4.0 -hit_back_duration = 0.05 -hit_up_speed = 4.0 +hit_back_speed = 0.0 +hit_back_duration = 0.0 +hit_up_speed = 3.0 hit_up_duration = 0.05 -pause_time = 0.1 +pause_time = 2.0 is_floating = true +is_hit_down = null +is_rebound = true diff --git a/config/player_skill/hero01_long_air_attack03.tres b/config/player_skill/hero01_long_air_attack03.tres index 7b632f0..f18d677 100644 --- a/config/player_skill/hero01_long_air_attack03.tres +++ b/config/player_skill/hero01_long_air_attack03.tres @@ -1,6 +1,6 @@ [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="Resource" uid="uid://bnqnw10v7kude" path="res://config/attack/normal_hit_down.tres" id="1_x3v4o"] [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"] @@ -15,7 +15,7 @@ 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")]) +attack_list = Array[Resource("res://script/config/attack_cfg.gd")]([ExtResource("1_x3v4o")]) has_animation = false 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 index d3a3641..65c4887 100644 --- a/resource/skill_animation/hero01_long_air_attack01.tres +++ b/resource/skill_animation/hero01_long_air_attack01.tres @@ -77,13 +77,25 @@ tracks/5/keys = { "update": 1, "values": [1.0, 0.0] } -tracks/6/type = "method" +tracks/6/type = "value" tracks/6/imported = false tracks/6/enabled = true -tracks/6/path = NodePath("Battle") +tracks/6/path = NodePath("Status:skill_float_speed") tracks/6/interp = 1 tracks/6/loop_wrap = true tracks/6/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [0.1, 1.0, 0.0] +} +tracks/7/type = "method" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Battle") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { "times": PackedFloat32Array(0.2), "transitions": PackedFloat32Array(1), "values": [{ diff --git a/resource/skill_animation/hero01_long_air_attack02.tres b/resource/skill_animation/hero01_long_air_attack02.tres index 082c1cc..83f10f3 100644 --- a/resource/skill_animation/hero01_long_air_attack02.tres +++ b/resource/skill_animation/hero01_long_air_attack02.tres @@ -77,13 +77,25 @@ tracks/5/keys = { "update": 1, "values": [1.0, 0.0] } -tracks/6/type = "method" +tracks/6/type = "value" tracks/6/imported = false tracks/6/enabled = true -tracks/6/path = NodePath("Battle") +tracks/6/path = NodePath("Status:skill_float_speed") tracks/6/interp = 1 tracks/6/loop_wrap = true tracks/6/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [0.1, 1.0, 0.0] +} +tracks/7/type = "method" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Battle") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { "times": PackedFloat32Array(0.2), "transitions": PackedFloat32Array(1), "values": [{ diff --git a/resource/skill_animation/hero01_long_air_attack03.tres b/resource/skill_animation/hero01_long_air_attack03.tres index 2bde2fe..b2b4c1f 100644 --- a/resource/skill_animation/hero01_long_air_attack03.tres +++ b/resource/skill_animation/hero01_long_air_attack03.tres @@ -77,13 +77,25 @@ tracks/5/keys = { "update": 1, "values": [1.0, 0.0] } -tracks/6/type = "method" +tracks/6/type = "value" tracks/6/imported = false tracks/6/enabled = true -tracks/6/path = NodePath("Battle") +tracks/6/path = NodePath("Status:skill_float_speed") tracks/6/interp = 1 tracks/6/loop_wrap = true tracks/6/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [0.1, 1.0, 0.0] +} +tracks/7/type = "method" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Battle") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { "times": PackedFloat32Array(0.2), "transitions": PackedFloat32Array(1), "values": [{ diff --git a/scene/character/character.tscn b/scene/character/character.tscn index 7b54a88..f8d6ec7 100644 --- a/scene/character/character.tscn +++ b/scene/character/character.tscn @@ -34,6 +34,8 @@ shape = SubResource("BoxShape3D_ty8lx") [node name="Status" type="Node3D" parent="."] unique_name_in_owner = true script = ExtResource("2_txdip") +speed_up_rate = -0.5 +skill_float_speed = 0.1 [node name="View" type="AnimatedSprite3D" parent="."] unique_name_in_owner = true @@ -46,7 +48,7 @@ double_sided = false alpha_cut = 2 texture_filter = 0 sprite_frames = ExtResource("5_m25rr") -animation = &"long_attack01" +animation = &"long_air_attack02" script = ExtResource("4_vijjv") [node name="Move" type="Node3D" parent="."] diff --git a/scene/launcher.tscn b/scene/launcher.tscn index eb9c322..1ddf41a 100644 --- a/scene/launcher.tscn +++ b/scene/launcher.tscn @@ -1,9 +1,7 @@ -[gd_scene load_steps=13 format=3 uid="uid://bkhnhc6bk3w7l"] +[gd_scene load_steps=11 format=3 uid="uid://bkhnhc6bk3w7l"] [ext_resource type="Script" path="res://script/manager/game_manager.gd" id="1_q2t80"] [ext_resource type="ArrayMesh" uid="uid://cap7t5iwpjpi2" path="res://resource/level/levelground0000.vox" id="1_u51ir"] -[ext_resource type="Resource" uid="uid://bjvrih37ni5nx" path="res://config/character/hero01.tres" id="2_m8pa4"] -[ext_resource type="Resource" uid="uid://dmfh54jffhx28" path="res://config/character/monster02.tres" id="3_t5dvy"] [ext_resource type="Script" path="res://script/manager/character_manager.gd" id="4_oonkb"] [ext_resource type="Script" path="res://script/manager/camera_manager.gd" id="4_yqiun"] [ext_resource type="Script" path="res://script/editor_tool/editor_tool.gd" id="5_n3qhi"] @@ -19,8 +17,6 @@ data = PackedVector3Array(-6.4, 0, -6.4, -3.2, 0, -6.4, -3.2, 0, 6.4, -3.2, 0, 6 [node name="GameManager" type="Node3D" parent="."] script = ExtResource("1_q2t80") -player = ExtResource("2_m8pa4") -test_monster = ExtResource("3_t5dvy") [node name="CameraManager" type="Camera3D" parent="GameManager"] transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 4.01178, 2.85449) diff --git a/script/character/battle.gd b/script/character/battle.gd index 8fa7521..91e24c1 100644 --- a/script/character/battle.gd +++ b/script/character/battle.gd @@ -36,7 +36,7 @@ func attack(): hit_info.attack = attack hit_info_list.append(hit_info) -func add_attack(from:int,dir:Vector3,attack:AttackCfg): +func add_attack(from:int,dir:Vector2,attack:AttackCfg): var hit_info = HitInfo.new() hit_info.from = from hit_info.to = character.id() @@ -66,16 +66,23 @@ func settle(hit_info:HitInfo): #取消技能 character_to.cancel_skill() #受击动画 - character_to.set_view_trigger("hit") + if attack.is_rebound: + character_to.set_view_trigger("rebound") + else: + character_to.set_view_trigger("hit") - #浮空 强制位移 + #浮空 击落 强制位移 var hit_up_speed = attack.hit_up_speed - if attack.is_floating: + if attack.is_floating or not character_to.get_status("is_on_floor"): character_to.add_buff("stagger",-1) character_to.add_buff("floating",-1) + if hit_info.dir.x!=0: + character_to.set_status("is_right",hit_info.dir.x<0) else: character_to.add_buff("stagger",1) hit_up_speed = 0 + if attack.is_hit_down: + character_to.add_buff("hit_down",-1) character_to.set_hit_move(hit_info.dir,attack.hit_back_speed,hit_up_speed) character_to.add_buff("hit_back",attack.hit_back_duration) character_to.add_buff("hit_up",attack.hit_up_duration) diff --git a/script/character/buff.gd b/script/character/buff.gd index 9ad1f84..54b3383 100644 --- a/script/character/buff.gd +++ b/script/character/buff.gd @@ -24,8 +24,7 @@ func _process(delta): trigger_buff_effect(buff_info,"second") buff_info.duration += delta if buff_info.duration >= buff_info.duration_max: - trigger_buff_effect(buff_info,"end") - buff_map.erase(buff_name) + remove_buff(buff_name) else: trigger_buff_effect(buff_info,"update") @@ -53,22 +52,30 @@ func add_buff(buff_name:String,duration:float,ignore_pause:bool=false): trigger_buff_effect(buff,"start") func remove_buff(buff_name:String): - buff_map.erase(buff_name) + if buff_name in buff_map: + var buff = buff_map[buff_name] + trigger_buff_effect(buff,"end") + buff_map.erase(buff_name) -#==具体实现== +#==具体实现==is_rising #位移 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_jumping(rate):status.is_jumping = true func on_end_jumping(rate):status.is_jumping = false -func on_start_floating(rate):status.is_floating = true +func on_start_rising(rate):status.is_rising = true +func on_end_rising(rate):status.is_rising = false +func on_start_floating(rate):status.is_floating = true;add_buff("rising",0.1) func on_update_floating(rate): - if not status.is_on_floor: + if not status.is_on_floor or status.is_rising: return if has_buff("hit_down"): - pass + character.add_attack(character.id(),status.move_dir,ResourceManager.cfg_attack_rebound) + remove_buff("hit_down") else: - status.is_floating=false + remove_buff("floating") + add_buff("stagger",3) +func on_end_floating(rate):status.is_floating = false #战斗状态 func on_start_stagger(rate):status.is_stagger = true diff --git a/script/character/character.gd b/script/character/character.gd index c11566b..0aa99f3 100644 --- a/script/character/character.gd +++ b/script/character/character.gd @@ -37,17 +37,14 @@ func team()->Enum.ETeam:return status.team func pos2D()->Vector2:return Vector2(position.x,position.z) func pos()->Vector3:return position func view_pos()->Vector3:return position + view.position + +#==interface== func get_property(prop_name:String)->float:return status.cfg.get(prop_name) func get_status(status_name:String):return status.get_status(status_name) func set_status(status_name:String,value):status.set_status(status_name,value) - -#==interface== func set_pos(pos:Vector3):position = pos func add_buff(buff_name:String,duration:float,ignore_pause:bool=false):buff.add_buff(buff_name,duration,ignore_pause) -func set_hit_move(hit_back_dir:Vector2,hit_back_speed:float,hit_up_speed:float): - status.hit_back_dir = hit_back_dir - status.hit_back_speed = hit_back_speed - status.hit_up_speed = hit_up_speed +func set_hit_move(hit_back_dir:Vector2,hit_back_speed:float,hit_up_speed:float):status.hit_back_dir = hit_back_dir;status.hit_back_speed = hit_back_speed;status.hit_up_speed = hit_up_speed func cancel_skill():skill.cancel_skill() func set_view_trigger(trigger_name:String):status.set("trigger_%s"%trigger_name,true) -func add_attack(from:int,dir:Vector3,attack:AttackCfg):battle.add_attack(from,dir,attack) +func add_attack(from:int,dir:Vector2,attack:AttackCfg):battle.add_attack(from,dir,attack) diff --git a/script/character/status.gd b/script/character/status.gd index b7344bd..df69af8 100644 --- a/script/character/status.gd +++ b/script/character/status.gd @@ -39,6 +39,7 @@ class_name Status @export var is_stagger : bool #是否硬直 @export var is_stun : bool #是否眩晕 @export var is_floating : bool #是否正在浮空 +@export var is_rising : bool #是否正在开始浮空 @export var hit_back_dir : Vector2 #击退方向 @export var hit_back_speed : float #击退速度 @export var hit_up_speed : float #击飞速度 @@ -61,6 +62,8 @@ class_name Status @export var trigger_hit : bool #受击-轻 @export var trigger_mhit : bool #受击-中 @export var trigger_lhit : bool #受击-重 +@export var trigger_rebound : bool #反弹 + func get_status(status_name:String):return get(status_name) func set_status(status_name:String,value): diff --git a/script/character/view.gd b/script/character/view.gd index df4e7c9..dc5ba12 100644 --- a/script/character/view.gd +++ b/script/character/view.gd @@ -57,6 +57,11 @@ func _ready(): trans("ground1_loop","ground2","is_stagger","=",false) run("ground2","idle_loop") + #落地反弹 + trigger("any","rebound","trigger_rebound") + run("rebound","airhit2_loop") + + func _process(delta): update_view() if not status.is_skill_running and status.is_pause == is_playing(): diff --git a/script/config/attack_cfg.gd b/script/config/attack_cfg.gd index 6077885..f28060e 100644 --- a/script/config/attack_cfg.gd +++ b/script/config/attack_cfg.gd @@ -14,4 +14,6 @@ class_name AttackCfg @export var hit_up_duration : float #击飞持续时间 @export var pause_time : float #卡帧时间 @export var is_floating : bool #是否浮空技 +@export var is_hit_down : bool #是否击落技 +@export var is_rebound : bool #是否地面反弹技能 diff --git a/script/manager/character_manager.gd b/script/manager/character_manager.gd index c7eb613..a104627 100644 --- a/script/manager/character_manager.gd +++ b/script/manager/character_manager.gd @@ -20,7 +20,7 @@ func create_character(cfg:CharacterCfg,team:Enum.ETeam,pos:Vector3): character_idx += 1 character_map[character_idx]=character character.init(character_idx,cfg,team) - character.set_material(ResourceManager.character_material.duplicate()) + character.set_material(ResourceManager.material_character.duplicate()) character.set_pos(pos) SignalManager.character_create.emit(character_idx,team,pos) character.init_after() diff --git a/script/manager/game_manager.gd b/script/manager/game_manager.gd index ddf9467..e2fa67c 100644 --- a/script/manager/game_manager.gd +++ b/script/manager/game_manager.gd @@ -1,13 +1,10 @@ extends Node3D -@export var player:CharacterCfg -@export var test_monster:CharacterCfg - @onready var character_manager = (%CharacterManager as CharacterManager) func _ready(): - character_manager.create_character(player,Enum.ETeam.Player,Vector3(0,1,0)) - character_manager.create_character(test_monster,Enum.ETeam.Monster,Vector3(0.5,1,0)) + character_manager.create_character(ResourceManager.cfg_character_player,Enum.ETeam.Player,Vector3(0,1,0)) + character_manager.create_character(ResourceManager.cfg_character_monster_test,Enum.ETeam.Monster,Vector3(0.5,1,0)) func _process(delta): pass diff --git a/script/manager/resource_manager.gd b/script/manager/resource_manager.gd index 400dac1..b45b9a4 100644 --- a/script/manager/resource_manager.gd +++ b/script/manager/resource_manager.gd @@ -1,8 +1,15 @@ extends Node3D -#scene +#==scene== var scene_player = load("res://scene/character/player.tscn") var scene_monster = load("res://scene/character/monster.tscn") -#material -var character_material = load("res://render/material/character.tres") +#==material== +var material_character = load("res://render/material/character.tres") + +#==config== +#character +var cfg_character_player = load("res://config/character/hero01.tres") +var cfg_character_monster_test = load("res://config/character/monster02.tres") +#attack +var cfg_attack_rebound = load("res://config/attack/rebound.tres")