/tools/addmodel.lua

https://bitbucket.org/itraykov/boxy · Lua · 83 lines · 67 code · 11 blank · 5 comment · 14 complexity · e115e714409ba6927b359e758fc3c843 MD5 · raw file

  1. AddModelTool = {}
  2. AddModelToolMT = { __index = AddModelTool }
  3. setmetatable(AddModelTool, { __index = Tool })
  4. function AddModelTool:Create(owner)
  5. local self = Tool:Create(owner, AddModelToolMT)
  6. return self
  7. end
  8. function AddModelTool:Destroy()
  9. Tool.Destroy(self)
  10. end
  11. function AddModelTool:Select(mode)
  12. if mode == nil then
  13. for i, v in pairs(models) do
  14. mode = i
  15. break
  16. end
  17. assert(mode)
  18. end
  19. mode = mode
  20. local world = self.owner:get_world()
  21. self.mode = mode
  22. self.model = models[mode]:Create(world)
  23. end
  24. function AddModelTool:Deselect()
  25. self.mode = nil
  26. self.model:Destroy()
  27. self.model = nil
  28. end
  29. function AddModelTool:MousePress(wx, wy, alt, shift)
  30. local gstate = self.owner.gstate
  31. wx, wy = gstate:ToGrid(wx, wy)
  32. self.sx, self.sy = wx, wy
  33. end
  34. function AddModelTool:MouseMove(wx, wy, owx, owy)
  35. local gstate = self.owner.gstate
  36. wx, wy = gstate:ToGrid(wx, wy)
  37. self.ex, self.ey = wx, wy
  38. end
  39. function AddModelTool:MouseRelease(wx, wy)
  40. local sx, sy = self.sx, self.sy
  41. if sx == nil or sy == nil then
  42. return
  43. end
  44. local gstate = self.owner.gstate
  45. local scene = self.owner:get_scene()
  46. wx, wy = gstate:ToGrid(wx, wy)
  47. local bodies = self.model:Init(sx, sy, wx, wy)
  48. for i, v in pairs(bodies) do
  49. --v:UpdateSprite(0)
  50. scene:AddBody(v)
  51. scene:RedrawBody(v)
  52. end
  53. self.sx, self.sy = nil, nil
  54. self.ex, self.ey = nil, nil
  55. end
  56. function AddModelTool:Redraw(dt)
  57. local owner = self.owner
  58. local camera = owner:get_camera()
  59. local scene = owner:get_scene()
  60. --[[
  61. local level = owner:get_world()
  62. level.sprite.canvas:clear()
  63. ]]
  64. local ex, ey = self.ex, self.ey
  65. if ex == nil or ey == nil then
  66. return
  67. end
  68. local sx, sy = self.sx or ex, self.sy or ey
  69. local s = camera.scalex
  70. self.model:Preview(sx, sy, ex, ey, s)
  71. scene:DrawStatus(self.mode)
  72. end