master
chendian 2 years ago
parent f6fd096935
commit b909d6a000

@ -54,11 +54,17 @@ func settle(hit_info:HitInfo):
character_to.add_buff("hit_back",attack.hit_back_duration) character_to.add_buff("hit_back",attack.hit_back_duration)
character_to.add_buff("hit_up",attack.hit_up_duration) character_to.add_buff("hit_up",attack.hit_up_duration)
character_to.add_buff("stagger",1) #浮空
character_to.add_buff("floating",-1) if attack.is_floating:
character_to.add_buff("stagger",-1)
character_to.add_buff("floating",-1)
else:
character_to.add_buff("stagger",1)
#抖动
character_to.add_buff("shake_x",0.2) character_to.add_buff("shake_x",0.2)
#pause #卡帧
character_from.add_buff("pause",0.1) character_from.add_buff("pause",0.1)
character_to.add_buff("pause",0.1) character_to.add_buff("pause",0.1)

@ -48,6 +48,9 @@ func add_buff(buff_name:String,duration:float):
buff.duration = 0 buff.duration = 0
trigger_buff_effect(buff,"start") trigger_buff_effect(buff,"start")
func remove_buff(buff_name:String):
buff_map.erase(buff_name)
#==具体实现== #==具体实现==
func on_end_hit_back(rate):status.hit_back_speed = 0 func on_end_hit_back(rate):status.hit_back_speed = 0
func on_end_hit_up(rate):status.hit_up_speed = 0 func on_end_hit_up(rate):status.hit_up_speed = 0
@ -62,3 +65,8 @@ func on_update_shake_x(rate):
func on_end_shake_x(rate):status.shake_offset = Vector3.ZERO func on_end_shake_x(rate):status.shake_offset = Vector3.ZERO
func on_start_pause(rate):status.is_pause = true func on_start_pause(rate):status.is_pause = true
func on_end_pause(rate):status.is_pause = false func on_end_pause(rate):status.is_pause = false
func on_start_floating(rate):status.is_floating = true
func on_update_floating(rate):
if status.is_on_floor:
#反弹
pass

@ -9,15 +9,10 @@ class Trans:
var conditionValue var conditionValue
var from:StringName var from:StringName
var to:StringName var to:StringName
var trigger_name:StringName
var on_end:bool
class Trigger:
var condition:StringName
var from:StringName
var to:StringName
var run_map = {}
var trans_list = [] var trans_list = []
var trigger_list = []
var move_sprite_frames:SpriteFrames var move_sprite_frames:SpriteFrames
func _ready(): func _ready():
@ -38,19 +33,36 @@ func _ready():
run("jump5","idle_loop") run("jump5","idle_loop")
trans("jump5","run1","speed_xz",">",1) trans("jump5","run1","speed_xz",">",1)
#受击 #地面受击
trigger("any","hit1","trigger_hit") trigger_with_condition("any","hit1","trigger_hit","is_on_floor","=",true)
trigger_with_condition("any","mhit","trigger_mhit","is_on_floor","=",true)
trigger_with_condition("any","lhit","trigger_lhit","is_on_floor","=",true)
run("hit1","hit2_loop") run("hit1","hit2_loop")
trans("hit2_loop","hit3","is_stagger","=",false)
run("hit3","idle_loop") run("hit3","idle_loop")
run("mhit3","idle_loop")
trans("hit2_loop","hit3","is_stagger","=",false)
trans("mhit2_loop","mhit3","is_stagger","=",false)
trans("lhit2_loop","lhit3","is_stagger","=",false)
run("mhit1","mhit2_loop")
run("lhit1","lhit2_loop")
run("lhit3","idle_loop")
#空中受击
trigger_with_condition("any","airhit1","trigger_hit","is_on_floor","=",false)
run("airhit1","airhit2_loop")
trans("airhit2_loop","airhit3","speed_y","<",0)
run("airhit3","airhit4_loop")
trans("airhit4_loop","airhit5","is_on_floor","=",true)
run("airhit5","ground1_loop")
trans("ground1_loop","ground2","is_stagger","=",false)
func _process(delta): func _process(delta):
if status.is_pause:return if status.is_pause:return
update_flip() update_flip()
update_trigger()
update_view() update_view()
if status.is_free_control: update_trans(false)
update_trans()
func init(default:SpriteFrames): func init(default:SpriteFrames):
sprite_frames = default sprite_frames = default
@ -62,50 +74,55 @@ func reset():
play("idle_loop") play("idle_loop")
func run(from:StringName,to:StringName): func run(from:StringName,to:StringName):
run_map[from] = to _add_trans(from,to,"","","","",true)
func run_with_condition(from:StringName,to:StringName,condition,compareType,conditionValue):
_add_trans(from,to,condition,compareType,conditionValue,"",true)
func trans(from:StringName,to:StringName,condition,compareType,conditionValue): func trans(from:StringName,to:StringName,condition,compareType,conditionValue):
var newTrans = Trans.new() _add_trans(from,to,condition,compareType,conditionValue,"",false)
newTrans.condition = condition
newTrans.compareType = compareType func trigger(from:StringName,to:StringName,trigger_name:StringName):
newTrans.conditionValue = conditionValue _add_trans(from,to,"","","",trigger_name,false)
newTrans.from = from
newTrans.to = to
trans_list.append(newTrans)
func trigger(from:StringName,to:StringName,condition): func trigger_with_condition(from:StringName,to:StringName,trigger_name:StringName,condition,compareType,conditionValue):
var newTrigger = Trans.new() _add_trans(from,to,condition,compareType,conditionValue,trigger_name,false)
newTrigger.condition = condition
newTrigger.from = from
newTrigger.to = to
trigger_list.append(newTrigger)
func update_trigger(): func _add_trans(from:StringName,to:StringName,condition,compareType,conditionValue,trigger_name:StringName,on_end:bool):
for trigger in trigger_list: var new_trans = Trans.new()
if trigger.from == "any" or trigger.from == animation: new_trans.condition = condition
if status.get(trigger.condition): new_trans.compareType = compareType
status.set(trigger.condition,false) new_trans.conditionValue = conditionValue
play(trigger.to) new_trans.from = from
new_trans.to = to
new_trans.trigger_name = trigger_name
new_trans.on_end = on_end
trans_list.append(new_trans)
func update_view(): func update_trans(on_end:bool):
#view位置
position = status.basic_offset + status.shake_offset
func update_trans():
for trans in trans_list: for trans in trans_list:
if trans.from == "any" or trans.from == animation: if on_end != trans.on_end:
continue
if not (trans.from == "any" or trans.from == animation):
continue
if trans.condition != "":
var conditionValue = status.get(trans.condition) var conditionValue = status.get(trans.condition)
match trans.compareType: match trans.compareType:
">":if conditionValue <= trans.conditionValue:return ">":if conditionValue <= trans.conditionValue:continue
"<":if conditionValue >= trans.conditionValue:return "<":if conditionValue >= trans.conditionValue:continue
"=":if conditionValue != trans.conditionValue:return "=":if conditionValue != trans.conditionValue:continue
play(trans.to) if trans.trigger_name != "":
if status.get(trans.trigger_name):
status.set(trans.trigger_name,false)
else:continue
play(trans.to)
func update_flip(): func update_flip():
scale.x = 1 if status.is_right else -1 scale.x = 1 if status.is_right else -1
func update_view():
position = status.basic_offset + status.shake_offset
func _on_animation_finished(): func _on_animation_finished():
if animation in run_map: update_trans(true)
var run = run_map[animation]
play(run)

@ -4,14 +4,15 @@ extends Node3D
@export var refresh_animation_lib : bool : @export var refresh_animation_lib : bool :
get: get:
return false return false
set(value): set(_value):
Util.refresh_animation_lib() Util.refresh_animation_lib()
@export var refresh_uid : bool : @export var refresh_uid : bool :
get: get:
return false return false
set(value): set(_value):
process_dir("res://") process_dir("res://")
print("done.")
func process_dir(dir_name: String) -> void: func process_dir(dir_name: String) -> void:
var dir := DirAccess.open(dir_name) var dir := DirAccess.open(dir_name)
@ -22,10 +23,10 @@ func process_dir(dir_name: String) -> void:
dir_name = dir_name.trim_suffix("/") dir_name = dir_name.trim_suffix("/")
while file_name != "": while file_name != "":
if dir.current_is_dir(): if dir.current_is_dir():
print("----- New directory: " + dir_name + "/" + file_name + " -----") print("-----" + dir_name + "/" + file_name + " -----")
process_dir(dir_name + "/" + file_name) process_dir(dir_name + "/" + file_name)
elif file_name.get_extension() in [ "tres", "res" ]: elif file_name.get_extension() in [ "tres", "res" ]:
print("Processing file: " + dir_name + "/" + file_name) print(dir_name + "/" + file_name)
var res := ResourceLoader.load(dir_name + "/" + file_name) var res := ResourceLoader.load(dir_name + "/" + file_name)
ResourceSaver.save(res) ResourceSaver.save(res)

Loading…
Cancel
Save