extends Node3D class_name Battle @onready var character = (get_owner() as Character) @onready var status = (%Status as Status) class HitInfo: var from : int var to : int var dir : Vector2 var attack : AttackCfg var hit_info_list = [] #命中信息 func attack(): if !status.skill_cfg: return var attack_list = status.skill_cfg.attack_list if !attack_list: print("未配置技能攻击",status.skill_cfg) return var attack_index = status.skill_attack_index if attack_index >= len(attack_list): attack_index = len(attack_list) - 1 var attack = attack_list[attack_index] var enemy_list = character.manager().get_enemy_list(character.id()) for enemy in enemy_list: var pos_dir = enemy.pos2D()-character.pos2D() var distance = pos_dir.length() #test if (distance < 1): var hit_info = HitInfo.new() hit_info.from = character.id() hit_info.to = enemy.id() hit_info.dir = status.skill_dir hit_info.attack = attack hit_info_list.append(hit_info) func _process(delta): for hit_info in hit_info_list: settle(hit_info) hit_info_list.clear() func settle(hit_info:HitInfo): var character_from = character.manager().get_character(hit_info.from) as Character var character_to = character.manager().get_character(hit_info.to) as Character if !character_from or !character_to: return var attack = hit_info.attack #造成伤害 var damage = attack.damage_rate * character_from.get_property("attack") var hp = character_to.get_status("hp") damage = min(hp,damage) character_to.set_status("hp",hp-damage) #取消技能 character_to.cancel_skill() #受击动画 character_to.set_view_trigger("hit") #浮空 强制位移 var hit_up_speed = attack.hit_up_speed if attack.is_floating: character_to.add_buff("stagger",-1) character_to.add_buff("floating",-1) else: character_to.add_buff("stagger",1) hit_up_speed = 0 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) #抖动 character_to.add_buff("shake_x",0.2,true) #闪白 character_to.add_buff("flash_white",0.1) #形变 character_to.add_buff("deformation",0.1) #卡帧 character_from.add_buff("pause",0.1) character_to.add_buff("pause",0.1)