|
|
|
|
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)
|
|
|
|
|
status.basic_offset = Vector3(0,half_height,0)
|
|
|
|
|
view.init(cfg.sprite_frames)
|
|
|
|
|
skill.init()
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
func set_material(material:ShaderMaterial):
|
|
|
|
|
view.material_override = material
|
|
|
|
|
|
|
|
|
|
#==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,ignore_pause:bool=false):buff.add_buff(buff_name,duration,ignore_pause)
|
|
|
|
|
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)
|