------------------------------------------------ --作者: 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 继承父类函数 -- -- C#对象删除 -- -- FSkinBase -- FSkinPartBase function FSkinModelWrap:OnDestoryAfter() self._SuperObj_.OnSetPartHierarchyDelegate = nil; self._SuperObj_.OnCreatePartInfoDelegate = nil; self._SuperObj_.OnDestoryAfterDelegate = nil; Utils.Destory(self); end -- -- --设置部位的层次 -- -- FSkinBase -- FSkinPartBase 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 -- -- 创建PartInfo -- -- int -- MyAction -- function FSkinModelWrap:OnCreatePartInfo(code, callBack) return FSkinPartWrap:New(self:GetCSObj(),code,callBack,false):GetCSObj(); end --#endregion return FSkinModelWrap