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