DOF/sqr/User/Object/ActiveObject/CharacterObjectClass.nut

144 lines
4.0 KiB
Plaintext
Raw Normal View History

2024-12-11 15:08:57 +08:00
/*
文件名:CharacterObjectClass.nut
路径:User/GameClass/ObjectClass/CharacterObjectClass.nut
创建日期:2024-05-11 21:03
文件用途:角色类
*/
class GameObject.Character extends GameObject.ActiveObject {
2024-12-11 15:08:57 +08:00
hair = null; //头部
hat = null; //帽子
2024-12-11 15:08:57 +08:00
face = null; //脸部
breast = null; //胸部
2024-12-11 15:08:57 +08:00
coat = null; //上衣
skin = null; //皮肤
waist = null; //腰部
2024-12-11 15:08:57 +08:00
pants = null; //下装
shoes = null; //鞋子
weapon = null; //武器
2024-12-17 09:41:42 +08:00
aurora = null; //光环
2024-12-11 15:08:57 +08:00
//动画对象管理器
AnimationManager = null;
2024-12-11 15:08:57 +08:00
//属性对象
Attribute = null;
2024-12-18 12:30:47 +08:00
//名字
Name = "无名字";
//职业编号
Job = 0;
2024-12-11 15:08:57 +08:00
function Init(Idx) {
//初始化动画组
CurrentAni = [];
2024-12-18 12:30:47 +08:00
//设置职业编号
this.Job = Idx;
2024-12-14 12:08:20 +08:00
//获取角色职业信息
2024-12-11 15:08:57 +08:00
Info = sq_DeepCopy(AssetManager.CharacterInfoList[Idx]);
base.Init(Info);
//构造角色动画对象
AnimationManager = Character_Animation();
Addchild(AnimationManager);
AnimationManager.Init();
2024-12-11 15:08:57 +08:00
foreach(EquId in Info.default_avatar) {
local EquObj = GameItem.Equipment(EquId);
ChangeEquipment(EquObj);
}
2024-12-11 15:08:57 +08:00
//构造属性对象
// Attribute = AttributeClass();
}
function SyncObjectBox() {
//同步受击框 和 攻击框
DamageBox = null;
AttackBox = null;
//皮肤同步受击框 武器同步攻击框
foreach(AniObj in CurrentAni) {
if (AniObj.Type == "skin") {
local Info = AniObj.GetCurrentFrameInfo();
if (Info.DamageBox.len() > 0) {
DamageBox = [];
foreach(Box in Info.DamageBox) {
local NewBox = [Box[0] + X, Box[1] + Y, Box[2] + Z, Box[3] + X, Box[4] + Y, Box[5] + Z];
DamageBox.append(NewBox);
}
}
} else if (AniObj.Type == "weapon") {
local Info = AniObj.GetCurrentFrameInfo();
if (Info.AttackBox.len() > 0) {
AttackBox = [];
foreach(Box in Info.AttackBox) {
local NewBox = [Box[0] + X, Box[1] + Y, Box[2] + Z, Box[3] + X, Box[4] + Y, Box[5] + Z];
AttackBox.append(NewBox);
}
}
}
}
}
// function OnUpdate(dt) {
// //原始逻辑
// base.OnUpdate(dt);
// }
//设置Ani
function SetAnimation(Ani) {
//如果存在动画管理器则设置
if (AnimationManager) AnimationManager.SetAnimation(Ani);
2024-12-11 15:08:57 +08:00
}
//切换装备
function ChangeEquipment(Equ) {
//如果当前装备槽已经有装备则移除
if (this[Equ.SlotType]) {
this[Equ.SlotType].OnWearEnd();
this[Equ.SlotType] = null;
2024-12-11 15:08:57 +08:00
}
//将装备对象赋值给对应装备槽
this[Equ.SlotType] = Equ;
this[Equ.SlotType].OnWearStart();
2024-12-11 15:08:57 +08:00
//如果是武器或者时装则同步动画
if (Equ.SlotType == "weapon" || Equ.Type == "avatar") {
AnimationManager.Init(Equ.SlotType);
2024-12-17 09:41:42 +08:00
} else if (Equ.Type == "aurora") {
AnimationManager.InitAuroa();
2024-12-11 15:08:57 +08:00
}
}
//切换装备列表
function ChangeEquipmentList(EquList) {
foreach(Equ in EquList) {
ChangeEquipment(Equ);
2024-12-11 15:08:57 +08:00
}
}
2024-12-18 12:30:47 +08:00
//设置名字
function SetName(Name) {
this.Name = Name;
AnimationManager.SetName(Name);
base.SetName(Name);
}
}
//通过职业和装备列表来构造一个角色
GameObject.CreateCharacter <- function(Job = 0, EquIdList = []) {
//构造角色
local Character = GameObject.Character();
Character.Init(Job);
foreach(EquId in EquIdList) {
if (EquId > 0) {
local EquObj = GameItem.Equipment(EquId);
Character.ChangeEquipment(EquObj);
}
2024-12-11 15:08:57 +08:00
}
return Character;
2024-12-11 15:08:57 +08:00
}