extends Node3D class_name Buff @onready var character = (get_owner() as Character) @onready var status = (%Status as Status) class BuffInfo: var name : String var duration : float var buff_map = {} #命中信息 func _process(delta): for buff_name in buff_map: var buff_info = buff_map[buff_name] if buff_info.duration == -1: trigger_buff_effect(buff_info.name,"update") else: buff_info.duration -= delta if buff_info.duration <= 0: trigger_buff_effect(buff_info.name,"end") buff_map.erase(buff_name) else: trigger_buff_effect(buff_info.name,"update") func trigger_buff_effect(buff_name:String,trigger_name:String): var function_name = "on_%s_%s" % [trigger_name,buff_name] if has_method(function_name): call(function_name) func has_buff(buff_name:String) -> bool: return buff_name in buff_map func add_buff(buff_name:String,duration:float): if buff_name in buff_map: buff_map[buff_name].duration = duration 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") #==具体实现== 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