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.

140 lines
3.5 KiB

  1. local SceneEditor = class("SceneEditor" , require("NodeEditor"));
  2. function SceneEditor:ctor()
  3. SceneEditor.super.ctor(self);
  4. end
  5. function SceneEditor:activate()
  6. SceneEditor.super.activate(self);
  7. app.setting.OriginAnchor = cc.p(0,0);
  8. app:refreshSetting();
  9. end
  10. function SceneEditor:unactivate()
  11. SceneEditor.super.unactivate(self);
  12. if self.MapEditor ~= nil then
  13. self.MapEditor:close();
  14. end
  15. end
  16. function SceneEditor:play()
  17. if self.node then
  18. self.node:playCurveAnimation();
  19. local cameraSphericlNode = self.node:findNode("SphericalCameraNode")
  20. if cameraSphericlNode then
  21. cameraSphericlNode:setCollectAnimationClip(false)
  22. local function curveAnimationEnd()
  23. -- 编辑器里需要更新
  24. if cameraSphericlNode:isSphericalActive() then
  25. cameraSphericlNode:startUpdate()
  26. end
  27. end
  28. cameraSphericlNode:playCurveAnimation(curveAnimationEnd)
  29. end
  30. -- 递归遍历下面的所有子节点
  31. local function visit(node)
  32. if node.stop then
  33. node:stop();
  34. end
  35. if node.play then
  36. node:play();
  37. end
  38. end
  39. self.node:visitNode(visit);
  40. end
  41. end
  42. function SceneEditor:stop()
  43. if self.node then
  44. self.node:stopCurveAnimation();
  45. local cameraSphericlNode = self.node:findNode("SphericalCameraNode")
  46. if cameraSphericlNode then
  47. cameraSphericlNode:stopCurveAnimation()
  48. -- 编辑器里需要更新
  49. if cameraSphericlNode:isSphericalActive() then
  50. cameraSphericlNode:startUpdate()
  51. end
  52. end
  53. -- 递归遍历下面的所有子节点
  54. local function visit(node)
  55. if node.stop then
  56. node:stop();
  57. end
  58. end
  59. self.node:visitNode(visit);
  60. end
  61. end
  62. -- 创建新的光效
  63. function SceneEditor:newNode()
  64. self:closeNode();
  65. local node = self:createNode("Scene");
  66. node:setName("Root");
  67. self:initNode(node)
  68. -- 创建一个新的地图
  69. self.Map = require("Map"):new();
  70. self.MapEditor = require("MapEditor"):new();
  71. return node;
  72. end
  73. -- 设置地图的宽度和高度
  74. function SceneEditor:initMap(mapWidth, mapHeight, tileWidth, tileHeight)
  75. if self.Map == nil then
  76. error("没有创建地图");
  77. end
  78. -- 初始化地图宽度和高度
  79. self.Map:initWidthAndHeight(mapWidth, mapHeight, tileWidth, tileHeight);
  80. self.Map:initObstacles();
  81. self.MapEditor:init();
  82. end
  83. -- 从文件载入节点
  84. function SceneEditor:loadNode(nodeFile)
  85. local node = SceneEditor.super.loadNode(self, nodeFile);
  86. -- 创建一个题图载入资源
  87. self.Map = require("Map"):new();
  88. local arr = string.split(nodeFile, ".");
  89. self.Map:loadLua(arr[1] .. ".lmap");
  90. self.MapEditor = require("MapEditor"):new();
  91. self.MapEditor:init();
  92. --[[-- 获取相机
  93. local cameraNode = node:findNode("main_camera");
  94. app.mainLayer:setActiveCamera(cameraNode:getCamera());
  95. app.mainCamera = cameraNode:getCamera();
  96. local winSize = cc.Director:getInstance():getWinSize();
  97. app.mainCamera:setAspectRatio(winSize.width / winSize.height);
  98. app.cameraController:refreshSetting();--]]
  99. return node;
  100. end
  101. function SceneEditor:save(filename)
  102. SceneEditor.super.save(self, filename);
  103. local arr = string.split(filename, ".");
  104. -- 保存地图
  105. self.Map:saveLua(arr[1] .. ".lmap");
  106. self.Map:saveXml(arr[1] .. ".map");
  107. end
  108. -- 关闭光效
  109. function SceneEditor:closeNode()
  110. SceneEditor.super.closeNode(self);
  111. end
  112. -- 初始化光效,添加到场景中
  113. function SceneEditor:initNode(node)
  114. SceneEditor.super.initNode(self , node);
  115. end
  116. function SceneEditor:createNode(nodeType)
  117. local node = SceneEditor.super.createNode(self , nodeType);
  118. if node.enableAutoPlay then
  119. node:enableAutoPlay();
  120. end
  121. return node;
  122. end
  123. return SceneEditor;