PageRenderTime 28ms CodeModel.GetById 19ms app.highlight 7ms RepoModel.GetById 0ms app.codeStats 0ms

/tools/addmodel.lua

https://bitbucket.org/itraykov/boxy
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