击落反弹

master
chendian 2 years ago
parent dd257a1ef0
commit ee74c578e2

@ -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

@ -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

@ -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

@ -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

@ -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"

@ -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": [{

@ -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": [{

@ -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": [{

@ -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="."]

@ -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)

@ -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)

@ -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

@ -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)

@ -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):

@ -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():

@ -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 #是否地面反弹技能

@ -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()

@ -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

@ -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")

Loading…
Cancel
Save