You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
2.2 KiB
GDScript

2 years ago
extends CharacterBody3D
class_name Character
@onready var collision = (%Collision)
2 years ago
@onready var status = (%Status as Status)
@onready var view = (%View as View)
@onready var buff = (%Buff as Buff)
@onready var skill = (%Skill as Skill)
@onready var battle = (%Battle as Battle)
2 years ago
func init(id:int,cfg:CharacterCfg,team:Enum.ETeam):
2 years ago
status.id = id
2 years ago
status.team = team
2 years ago
status.cfg = cfg
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)
2 years ago
view.scale = Vector3(1,Setting.sprite_scale,1)
2 years ago
view.init(cfg.sprite_frames)
skill.init()
2 years ago
2 years ago
func init_after():
2 years ago
var cfg = status.cfg as CharacterCfg
2 years ago
set_status("hp",cfg.hp_max)
set_status("hp_max",cfg.hp_max)
2 years ago
set_status("shield",cfg.shield.shield_max)
set_status("shield_max",cfg.shield.shield_max)
set_status("stun",0)
set_status("stun_max",cfg.stun.stun_max)
2 years ago
2 years ago
func set_material(material:ShaderMaterial):
view.material_override = material
2 years ago
#==getter==
func id()->int:return status.id
2 years ago
func cfg()->CharacterCfg:return status.cfg
2 years ago
func team()->Enum.ETeam:return status.team
2 years ago
func pos2D()->Vector2:return Vector2(position.x,position.z)
func pos()->Vector3:return position
2 years ago
func view_pos()->Vector3:return position + view.position
2 years ago
#==interface==
2 years ago
func get_status(status_name:String):return status.get_status(status_name)
func set_status(status_name:String,value):status.set_status(status_name,value)
func set_pos(pos:Vector3):position = pos
2 years ago
func add_buff(buff_name:String,duration:float,ignore_pause:bool=false):buff.add_buff(buff_name,duration,ignore_pause)
2 years ago
func remove_buff(buff_name:String):buff.remove_buff(buff_name)
func has_buff(buff_name:String)->bool:return buff.has_buff(buff_name)
2 years ago
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)
2 years ago
func add_attack(from:int,dir:Vector2,attack:AttackCfg):battle.add_attack(from,dir,attack)