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

152 lines
4.3 KiB

  1. -- 技能系统一些额外的数据和接口
  2. require("luaScript.Tools.Effect.CCEffectNode")
  3. require("luaScript.Tools.Tracks.CCTrack")
  4. require("luaScript.Tools.Tracks.CCBaseTrack")
  5. require("luaScript.Tools.Tracks.CCStaticEffectTrack")
  6. require("luaScript.Tools.Tracks.CCAnimationChangeTrack")
  7. require("luaScript.Tools.Tracks.AnimationSpeedTrack")
  8. require("luaScript.Tools.Tracks.CCFlyEffectTrack")
  9. require("luaScript.Tools.Tracks.CCAttractEffectTrack")
  10. require("luaScript.Tools.Tracks.CCChannelEffectTrack")
  11. require("luaScript.Tools.Tracks.CCNodeShakeTrack")
  12. require("luaScript.Tools.Tracks.AnimationFreezeTrack")
  13. require("luaScript.Tools.Tracks.BlendMaterialTrack")
  14. require("luaScript.Tools.Tracks.CCCameraShakeTrack")
  15. require("luaScript.Tools.Tracks.CCCEFileTrack")
  16. require("luaScript.Tools.Tracks.ModelAppearanceTrack")
  17. require("luaScript.Tools.Tracks.ModelTransformTrack")
  18. require("luaScript.Tools.Tracks.CCPlayClipTrack")
  19. require("luaScript.Tools.Tracks.SphericalCameraTrack")
  20. -- 技能点绑定信息
  21. EffectBinder =
  22. {
  23. None = 0,
  24. SourcePos = 1,
  25. TargetPos = 2,
  26. SourceNode = 3,
  27. TargetNode = 4,
  28. FirstSourceNode = 5,
  29. OtherSourceNode = 6,
  30. FirstTargetNode = 7,
  31. OtherTargetNode = 8,
  32. ScreenCenter = 9,
  33. }
  34. function createDefaultCombineEffectParams()
  35. return
  36. {
  37. -- 在这个节点上播放
  38. ParentNode,
  39. -- 相机震动节点
  40. CameraNode,
  41. -- 源点列表
  42. SourcePos = {},
  43. -- 目标点列表
  44. TargetPos = {},
  45. -- 源节点列表
  46. SourceNode = {},
  47. -- 目标节点列表
  48. TargetNode = {},
  49. }
  50. end
  51. -- 预加载技能效果所需的资源
  52. function preloadCombineEffectFromXmlNode(xmlNode)
  53. if xmlNode.Children then
  54. for i , v in ipairs(xmlNode.Children) do
  55. local cls = cc[v.ClassName];
  56. cls:preload(v);
  57. end
  58. end
  59. end
  60. -- 预加载技能效果所需的资源
  61. function preloadCombineEffect(fileName)
  62. if fileName ~= "" then
  63. print("预加载技能效果:" , fileName);
  64. preloadCombineEffectFromXmlNode(table.loadFile(fileName));
  65. end
  66. end
  67. -- 创建技能效果实例
  68. function createCombineEffectFromXmlNode(xmlNode)
  69. local className = xmlNode.ClassName;
  70. local node = cc[className]:create();
  71. node:loadFromXmlNode(xmlNode);
  72. if xmlNode.Children then
  73. for i , v in ipairs(xmlNode.Children) do
  74. node:addTrack(createCombineEffectFromXmlNode(v));
  75. end
  76. end
  77. -- 链接轨迹
  78. if type(node.getChildren) == "function" then
  79. local children = node:getChildren()
  80. if table.nums(children) > 0 then
  81. for i , v in pairs(children) do
  82. if v:getNextTrackId() ~= 0 then
  83. v:setNextTrack(v:getNextTrackId())
  84. end
  85. v:setNextTrackId(0);
  86. end
  87. end
  88. end
  89. return node;
  90. end
  91. function createCombineEffectFromXmlString(xmlString)
  92. local effect = createCombineEffectFromXmlNode(table.loadString(xmlString));
  93. return effect;
  94. end
  95. -- 从文件中创建特效
  96. function createCombineEffectFromXmlFile(combineEffectFile)
  97. if combineEffectFile == "" or combineEffectFile == nil then
  98. return;
  99. end
  100. print("创建技能效果:" , combineEffectFile);
  101. TimeSpan:enterSpan("createCombineEffect" .. combineEffectFile);
  102. --TimeSpan:enterSpan("table.loadFile");
  103. local xmlFile = table.loadFile(combineEffectFile);
  104. --TimeSpan:leaveSpan();
  105. --TimeSpan:enterSpan("createNodeFromXmlNode");
  106. local effect = createCombineEffectFromXmlNode(xmlFile);
  107. effect.FileName = combineEffectFile;
  108. --TimeSpan:leaveSpan();
  109. TimeSpan:leaveSpan();
  110. return effect;
  111. end
  112. -- 从文件中创建特效
  113. function createCombineEffect(combineEffectFile)
  114. if combineEffectFile == "" or combineEffectFile == nil then
  115. return;
  116. end
  117. print("创建技能效果:" , combineEffectFile);
  118. TimeSpan:enterSpan("createCombineEffect" .. combineEffectFile);
  119. --TimeSpan:enterSpan("table.loadFile");
  120. --local xmlFile = table.loadFile(combineEffectFile);
  121. --TimeSpan:leaveSpan();
  122. --TimeSpan:enterSpan("createNodeFromXmlNode");
  123. local effect = tolua.cast(cc.StreamObject:loadFromFile(combineEffectFile) , "cc.CombineEffect");
  124. --local effect = createCombineEffectFromXmlNode(xmlFile);
  125. effect.FileName = combineEffectFile;
  126. --TimeSpan:leaveSpan();
  127. TimeSpan:leaveSpan();
  128. return effect;
  129. end
  130. function prepareCombineEffect(combineEffectFile)
  131. local ce = createCombineEffect(combineEffectFile);
  132. ce:prepare();
  133. end
  134. function getWorldPositionToNode(source , target)
  135. local pos = source:getTranslation();
  136. local worldPos = source:getParent():convertToWorldSpace(pos);
  137. return target:convertToNodeSpace(worldPos);
  138. end