extends CharacterBody3D class_name Character @onready var collision = (%Collision) @onready var status = (%Status as Status) @onready var view = (%View as View) @onready var buff = (%Buff as Buff) @onready var skill = (%Skill as Skill) var character_manager : CharacterManager func init(mgr:CharacterManager,id:int,cfg:CharacterCfg,team:Enum.ETeam): character_manager = mgr status.id = id status.team = team status.cfg = cfg build_view(cfg) build_battle(cfg) func build_view(cfg:CharacterCfg): var half_height = Setting.pixel_size * Setting.sprite_scale * cfg.sprite_harf_height var width = Setting.pixel_size * Setting.sprite_scale * cfg.sprite_width collision.position = Vector3(0,half_height,0) collision.scale = Vector3(width,half_height*2,width) view.position = Vector3(0,half_height,0) view.init(cfg.sprite_frames) func build_battle(cfg:CharacterCfg): status.hp = cfg.hp_max status.hp_max = cfg.hp_max status.shield = cfg.shield_max status.shield_max = cfg.shield_max #==getter== func manager()->CharacterManager:return character_manager func id()->int:return status.id func team()->Enum.ETeam:return status.team func pos()->Vector2:return Vector2(position.x,position.z) #==interface== func set_pos(pos:Vector3):position = pos func add_buff(buff_name:String,duration:float):buff.add_buff(buff_name,duration) 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)