From b909d6a00017c715208c80695e4019ae83d46154 Mon Sep 17 00:00:00 2001 From: chendian <-> Date: Tue, 17 Oct 2023 01:51:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=97=E5=87=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script/character/battle.gd | 12 +++- script/character/buff.gd | 8 +++ script/character/view.gd | 109 +++++++++++++++++------------- script/editor_tool/editor_tool.gd | 9 +-- 4 files changed, 85 insertions(+), 53 deletions(-) diff --git a/script/character/battle.gd b/script/character/battle.gd index 2bfccb8..6b09368 100644 --- a/script/character/battle.gd +++ b/script/character/battle.gd @@ -54,11 +54,17 @@ func settle(hit_info:HitInfo): character_to.add_buff("hit_back",attack.hit_back_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) - #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 47f7ce9..d109942 100644 --- a/script/character/buff.gd +++ b/script/character/buff.gd @@ -48,6 +48,9 @@ func add_buff(buff_name:String,duration:float): buff.duration = 0 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_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_start_pause(rate):status.is_pause = true 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 diff --git a/script/character/view.gd b/script/character/view.gd index 7f41716..a030fd1 100644 --- a/script/character/view.gd +++ b/script/character/view.gd @@ -9,15 +9,10 @@ class Trans: var conditionValue var from: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 trigger_list = [] var move_sprite_frames:SpriteFrames func _ready(): @@ -38,19 +33,36 @@ func _ready(): run("jump5","idle_loop") 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") - trans("hit2_loop","hit3","is_stagger","=",false) 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): if status.is_pause:return update_flip() - update_trigger() update_view() - if status.is_free_control: - update_trans() + update_trans(false) func init(default:SpriteFrames): sprite_frames = default @@ -62,50 +74,55 @@ func reset(): play("idle_loop") 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): - var newTrans = Trans.new() - newTrans.condition = condition - newTrans.compareType = compareType - newTrans.conditionValue = conditionValue - newTrans.from = from - newTrans.to = to - trans_list.append(newTrans) + _add_trans(from,to,condition,compareType,conditionValue,"",false) + +func trigger(from:StringName,to:StringName,trigger_name:StringName): + _add_trans(from,to,"","","",trigger_name,false) -func trigger(from:StringName,to:StringName,condition): - var newTrigger = Trans.new() - newTrigger.condition = condition - newTrigger.from = from - newTrigger.to = to - trigger_list.append(newTrigger) +func trigger_with_condition(from:StringName,to:StringName,trigger_name:StringName,condition,compareType,conditionValue): + _add_trans(from,to,condition,compareType,conditionValue,trigger_name,false) -func update_trigger(): - for trigger in trigger_list: - if trigger.from == "any" or trigger.from == animation: - if status.get(trigger.condition): - status.set(trigger.condition,false) - play(trigger.to) +func _add_trans(from:StringName,to:StringName,condition,compareType,conditionValue,trigger_name:StringName,on_end:bool): + var new_trans = Trans.new() + new_trans.condition = condition + new_trans.compareType = compareType + new_trans.conditionValue = conditionValue + 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(): - #view位置 - position = status.basic_offset + status.shake_offset - -func update_trans(): +func update_trans(on_end:bool): 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) match trans.compareType: - ">":if conditionValue <= trans.conditionValue:return - "<":if conditionValue >= trans.conditionValue:return - "=":if conditionValue != trans.conditionValue:return - play(trans.to) + ">":if conditionValue <= trans.conditionValue:continue + "<":if conditionValue >= trans.conditionValue:continue + "=":if conditionValue != trans.conditionValue:continue + if trans.trigger_name != "": + if status.get(trans.trigger_name): + status.set(trans.trigger_name,false) + else:continue + play(trans.to) func update_flip(): scale.x = 1 if status.is_right else -1 +func update_view(): + position = status.basic_offset + status.shake_offset + func _on_animation_finished(): - if animation in run_map: - var run = run_map[animation] - play(run) + update_trans(true) diff --git a/script/editor_tool/editor_tool.gd b/script/editor_tool/editor_tool.gd index 93fee03..d88fc18 100644 --- a/script/editor_tool/editor_tool.gd +++ b/script/editor_tool/editor_tool.gd @@ -4,14 +4,15 @@ extends Node3D @export var refresh_animation_lib : bool : get: return false - set(value): + set(_value): Util.refresh_animation_lib() @export var refresh_uid : bool : get: return false - set(value): + set(_value): process_dir("res://") + print("done.") func process_dir(dir_name: String) -> void: var dir := DirAccess.open(dir_name) @@ -22,10 +23,10 @@ func process_dir(dir_name: String) -> void: dir_name = dir_name.trim_suffix("/") while file_name != "": if dir.current_is_dir(): - print("----- New directory: " + dir_name + "/" + file_name + " -----") + print("-----" + dir_name + "/" + file_name + " -----") process_dir(dir_name + "/" + file_name) 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) ResourceSaver.save(res)