-- 技能系统一些额外的数据和接口 require("luaScript.Tools.Effect.CCEffectNode") require("luaScript.Tools.Tracks.CCTrack") require("luaScript.Tools.Tracks.CCBaseTrack") require("luaScript.Tools.Tracks.CCStaticEffectTrack") require("luaScript.Tools.Tracks.CCAnimationChangeTrack") require("luaScript.Tools.Tracks.AnimationSpeedTrack") require("luaScript.Tools.Tracks.CCFlyEffectTrack") require("luaScript.Tools.Tracks.CCAttractEffectTrack") require("luaScript.Tools.Tracks.CCChannelEffectTrack") require("luaScript.Tools.Tracks.CCNodeShakeTrack") require("luaScript.Tools.Tracks.AnimationFreezeTrack") require("luaScript.Tools.Tracks.BlendMaterialTrack") require("luaScript.Tools.Tracks.CCCameraShakeTrack") require("luaScript.Tools.Tracks.CCCEFileTrack") require("luaScript.Tools.Tracks.ModelAppearanceTrack") require("luaScript.Tools.Tracks.ModelTransformTrack") require("luaScript.Tools.Tracks.CCPlayClipTrack") require("luaScript.Tools.Tracks.SphericalCameraTrack") -- 技能点绑定信息 EffectBinder = { None = 0, SourcePos = 1, TargetPos = 2, SourceNode = 3, TargetNode = 4, FirstSourceNode = 5, OtherSourceNode = 6, FirstTargetNode = 7, OtherTargetNode = 8, ScreenCenter = 9, } function createDefaultCombineEffectParams() return { -- 在这个节点上播放 ParentNode, -- 相机震动节点 CameraNode, -- 源点列表 SourcePos = {}, -- 目标点列表 TargetPos = {}, -- 源节点列表 SourceNode = {}, -- 目标节点列表 TargetNode = {}, } end -- 预加载技能效果所需的资源 function preloadCombineEffectFromXmlNode(xmlNode) if xmlNode.Children then for i , v in ipairs(xmlNode.Children) do local cls = cc[v.ClassName]; cls:preload(v); end end end -- 预加载技能效果所需的资源 function preloadCombineEffect(fileName) if fileName ~= "" then print("预加载技能效果:" , fileName); preloadCombineEffectFromXmlNode(table.loadFile(fileName)); end end -- 创建技能效果实例 function createCombineEffectFromXmlNode(xmlNode) local className = xmlNode.ClassName; local node = cc[className]:create(); node:loadFromXmlNode(xmlNode); if xmlNode.Children then for i , v in ipairs(xmlNode.Children) do node:addTrack(createCombineEffectFromXmlNode(v)); end end -- 链接轨迹 if type(node.getChildren) == "function" then local children = node:getChildren() if table.nums(children) > 0 then for i , v in pairs(children) do if v:getNextTrackId() ~= 0 then v:setNextTrack(v:getNextTrackId()) end v:setNextTrackId(0); end end end return node; end function createCombineEffectFromXmlString(xmlString) local effect = createCombineEffectFromXmlNode(table.loadString(xmlString)); return effect; end -- 从文件中创建特效 function createCombineEffectFromXmlFile(combineEffectFile) if combineEffectFile == "" or combineEffectFile == nil then return; end print("创建技能效果:" , combineEffectFile); TimeSpan:enterSpan("createCombineEffect" .. combineEffectFile); --TimeSpan:enterSpan("table.loadFile"); local xmlFile = table.loadFile(combineEffectFile); --TimeSpan:leaveSpan(); --TimeSpan:enterSpan("createNodeFromXmlNode"); local effect = createCombineEffectFromXmlNode(xmlFile); effect.FileName = combineEffectFile; --TimeSpan:leaveSpan(); TimeSpan:leaveSpan(); return effect; end -- 从文件中创建特效 function createCombineEffect(combineEffectFile) if combineEffectFile == "" or combineEffectFile == nil then return; end print("创建技能效果:" , combineEffectFile); TimeSpan:enterSpan("createCombineEffect" .. combineEffectFile); --TimeSpan:enterSpan("table.loadFile"); --local xmlFile = table.loadFile(combineEffectFile); --TimeSpan:leaveSpan(); --TimeSpan:enterSpan("createNodeFromXmlNode"); local effect = tolua.cast(cc.StreamObject:loadFromFile(combineEffectFile) , "cc.CombineEffect"); --local effect = createCombineEffectFromXmlNode(xmlFile); effect.FileName = combineEffectFile; --TimeSpan:leaveSpan(); TimeSpan:leaveSpan(); return effect; end function prepareCombineEffect(combineEffectFile) local ce = createCombineEffect(combineEffectFile); ce:prepare(); end function getWorldPositionToNode(source , target) local pos = source:getTranslation(); local worldPos = source:getParent():convertToWorldSpace(pos); return target:convertToNodeSpace(worldPos); end