Files
2025-01-25 04:38:09 +08:00

154 lines
5.8 KiB
Lua

------------------------------------------------
--作者: gzg
--日期: 2020-02-20
--文件: FSkinModelWrap.lua
--模块: FSkinModelWrap
--描述: 示例类
--注意: 在类中的定义字段,不能赋值为nil,需要赋值为一个值.
------------------------------------------------
--引用
local LuaFSkinModel = CS.Thousandto.Plugins.LuaType.LuaFSkinModel;
local FSkinPartCode = require("Logic.FGameObject.FSkinPartCode")
local FSkinPartWrap = require("Logic.FGameObject.FSkinPartWrap")
--在类中的定义字段,不能赋值为nil,需要赋值为一个值.默认可以为0
local FSkinModelWrap = {
--CS父类对象
_SuperObj_ = 0,
--这里如果定义成员,这里必须
}
--#region --类继承的固定模板
--构造函数
function FSkinModelWrap:New(...)
local _m = Utils.DeepCopy(self)
_m._SuperObj_ = LuaFSkinModel.Create(...);
_m:_InitBindOverride_();
_m:_InitContent_();
Utils.BuildInheritRel(_m);
return _m
end
function FSkinModelWrap:GetCSObj()
return self._SuperObj_;
end
--绑定Override的方法
function FSkinModelWrap:_InitBindOverride_()
--重载函数的重定义
self._SuperObj_.OnSetPartHierarchyDelegate = Utils.Handler(self.OnSetPartHierarchy, self, nil, true);
self._SuperObj_.OnCreatePartInfoDelegate = Utils.Handler(self.OnCreatePartInfo, self, nil, true);
self._SuperObj_.OnDestoryAfterDelegate = Utils.Handler(self.OnDestoryAfter, self, nil, true);
--...
end
--初始化
function FSkinModelWrap:_InitContent_()
--todo
end
--卸载
function FSkinModelWrap:Free()
self._SuperObj_.OnSetPartHierarchyDelegate = nil;
self._SuperObj_.OnCreatePartInfoDelegate = nil;
self._SuperObj_.OnDestoryAfterDelegate = nil;
LuaFSkinModel.Destroy(self._SuperObj_);
Utils.Destory(self);
end
--#endregion
--#region-- Overrider 继承父类函数
-- <summary>
-- C#对象删除
-- </summary>
-- <param name="skin">FSkinBase</param>
-- <param name="part">FSkinPartBase</param>
function FSkinModelWrap:OnDestoryAfter()
self._SuperObj_.OnSetPartHierarchyDelegate = nil;
self._SuperObj_.OnCreatePartInfoDelegate = nil;
self._SuperObj_.OnDestoryAfterDelegate = nil;
Utils.Destory(self);
end
-- <summary>
-- --设置部位的层次
-- </summary>
-- <param name="skin">FSkinBase</param>
-- <param name="part">FSkinPartBase</param>
function FSkinModelWrap:OnSetPartHierarchy(skin, part)
if part.Code == FSkinPartCode.Body then
--主体,如果有坐骑,那么就挂到坐骑的上面,如果没有坐骑,就放到根节点下
if (not self:CreateRelation(skin, FSkinPartCode.Mount, FSkinPartCode.Body)) then
--如果没有坐骑,选择特效挂在主体身上
self:CreateRelation(skin, part.Code, FSkinPartCode.SelectedVfx);
--封印的展示特效
self:CreateRelation(skin, part.Code, FSkinPartCode.SealVfx);
end
--武器
self:CreateRelation(skin, part.Code, FSkinPartCode.GodWeaponBody);
self:CreateRelation(skin, part.Code, FSkinPartCode.GodWeaponHead);
--翅膀
self:CreateRelation(skin, part.Code, FSkinPartCode.Wing);
--强化特效
self:CreateRelation(skin, part.Code, FSkinPartCode.StrengthenVfx);
--头顶提示
self:CreateRelation(skin, part.Code, FSkinPartCode.HeadPromptVfx);
--转职特效
self:CreateRelation(skin, part.Code, FSkinPartCode.TransVfx);
--仙甲阵道
self:CreateRelation(skin, part.Code, FSkinPartCode.XianjiaZhen);
--仙甲光环
self:CreateRelation(skin, part.Code, FSkinPartCode.XianjiaHuan);
elseif part.Code == FSkinPartCode.Mount
then
--设置坐骑的父节点,并把身体的对象挂在坐骑上
skin.AddChild(part.FGameObject, part.ModelInfo.SlotName);
self:CreateRelation(skin, part.Code, FSkinPartCode.Body);
self:CreateRelation(skin, part.Code, FSkinPartCode.SelectedVfx);
--封印的展示特效
self:CreateRelation(skin, part.Code, FSkinPartCode.SealVfx);
elseif part.Code == FSkinPartCode.GodWeaponHead
or part.Code == FSkinPartCode.GodWeaponBody
or part.Code == FSkinPartCode.Wing
then
--装备武器,如果有身体,就挂到身体上,如果没有就挂到根节点上
self:CreateRelation(skin, FSkinPartCode.Body, part.Code);
elseif part.Code == FSkinPartCode.StrengthenVfx
or part.Code == FSkinPartCode.HeadPromptVfx
or part.Code == FSkinPartCode.TransVfx
or part.Code == FSkinPartCode.XianjiaZhen
or part.Code == FSkinPartCode.XianjiaHuan
then
--头顶特效,强化特效,如果有身体,就挂到身体上,如果没有就挂到根节点上
self:CreateRelation(skin, FSkinPartCode.Body, part.Code);
elseif part.Code == FSkinPartCode.SelectedVfx
or part.Code == FSkinPartCode.SealVfx
then
--主体,如果有坐骑,那么就挂到坐骑的上面,如果没有坐骑,就放到根节点下
if ( not self:CreateRelation(skin, FSkinPartCode.Mount, part.Code, false)) then
self:CreateRelation(skin, FSkinPartCode.Body, part.Code);
end
elseif part.Code == FSkinPartCode.GodWeaponVfx
then
--主体,如果有坐骑,那么就挂到坐骑的上面,如果没有坐骑,就放到根节点下
self:CreateRelation(skin, FSkinPartCode.GodWeaponHead, part.Code);
end
end
-- <summary>
-- 创建PartInfo
-- </summary>
-- <param name="code">int</param>
-- <param name="callBack">MyAction<FSkinPartBase></param>
-- <returns></returns>
function FSkinModelWrap:OnCreatePartInfo(code, callBack)
return FSkinPartWrap:New(self:GetCSObj(),code,callBack,false):GetCSObj();
end
--#endregion
return FSkinModelWrap