bzr branch
http://9ix.org/bzr/traderous
22
by Josh C
mirror (contains a bug where things in the corner aren't getting mirrored? |
1 |
WrapTile = Tile:extend { |
2 |
wrap = function(self) |
|
3 |
if self.x < the.app.width / 2 then |
|
4 |
self.x = the.bg.width - the.app.width / 2 |
|
5 |
elseif self.x > the.bg.width - the.app.width / 2 then |
|
6 |
self.x = the.app.width / 2 |
|
7 |
end |
|
8 |
||
9 |
if self.y < the.app.height / 2 then |
|
10 |
self.y = the.bg.height - the.app.height / 2 |
|
11 |
elseif self.y > the.bg.height - the.app.height / 2 then |
|
12 |
self.y = the.app.height / 2 |
|
13 |
end |
|
14 |
end, |
|
15 |
reflect = function(self) |
|
16 |
local mirrorX, mirrorY = self.x, self.y |
|
17 |
||
18 |
if self.x > the.bg.width - the.app.width then |
|
19 |
mirrorX = self.x - the.bg.width + the.app.width |
|
20 |
elseif self.x < the.app.width then |
|
21 |
mirrorX = self.x + the.bg.width - the.app.width |
|
22 |
end |
|
23 |
||
24 |
if self.y > the.bg.height - the.app.height then |
|
25 |
mirrorY = self.y - the.bg.height + the.app.height |
|
26 |
elseif self.y < the.app.height then |
|
27 |
mirrorY = self.y + the.bg.height - the.app.height |
|
28 |
end |
|
29 |
||
30 |
if self.x ~= mirrorX then |
|
31 |
if not self.xMirror then |
|
32 |
--print('creating mirror: X='..xMirrorX..' Y='..xMirrorY) |
|
33 |
||
34 |
self.xMirror = Tile:new{ image = self.image } |
|
35 |
the.app.view:add(self.xMirror) |
|
36 |
end |
|
37 |
||
38 |
self.xMirror.x = mirrorX |
|
39 |
self.xMirror.y = self.y |
|
40 |
self.xMirror.rotation = self.rotation |
|
41 |
elseif self.xMirror then |
|
42 |
the.app.view:remove(self.xMirror) |
|
43 |
self.xMirror = nil |
|
44 |
-- die? |
|
45 |
end |
|
46 |
||
47 |
if self.y ~= mirrorY then |
|
48 |
if not self.yMirror then |
|
49 |
--print('creating mirror: X='..yMirrorX..' Y='..yMirrorY) |
|
50 |
||
51 |
self.yMirror = Tile:new{ image = self.image } |
|
52 |
the.app.view:add(self.yMirror) |
|
53 |
end |
|
54 |
||
55 |
self.yMirror.x = self.x |
|
56 |
self.yMirror.y = mirrorY |
|
57 |
self.yMirror.rotation = self.rotation |
|
58 |
elseif self.yMirror then |
|
59 |
the.app.view:remove(self.yMirror) |
|
60 |
self.yMirror = nil |
|
61 |
-- die? |
|
62 |
end |
|
23
by Josh C
and that fixes the corner bug |
63 |
|
64 |
if self.x ~= mirrorX and self.y ~= mirrorY then |
|
65 |
if not self.xyMirror then |
|
66 |
--print('creating mirror: X='..xyMirrorX..' Y='..xyMirrorY) |
|
67 |
||
68 |
self.xyMirror = Tile:new{ image = self.image } |
|
69 |
the.app.view:add(self.xyMirror) |
|
70 |
end |
|
71 |
||
72 |
self.xyMirror.x = mirrorX |
|
73 |
self.xyMirror.y = mirrorY |
|
74 |
self.xyMirror.rotation = self.rotation |
|
75 |
elseif self.xyMirror then |
|
76 |
the.app.view:remove(self.xyMirror) |
|
77 |
self.xyMirror = nil |
|
78 |
-- die? |
|
79 |
end |
|
22
by Josh C
mirror (contains a bug where things in the corner aren't getting mirrored? |
80 |
end, |
24
by Josh C
monkey patch group to add onRemove hook. remove mirrors on remove. |
81 |
onRemove = function(self) |
82 |
if self.xMirror then |
|
83 |
the.app.view:remove(self.xMirror) |
|
84 |
end |
|
85 |
||
86 |
if self.yMirror then |
|
87 |
the.app.view:remove(self.yMirror) |
|
88 |
end |
|
89 |
||
90 |
if self.xyMirror then |
|
91 |
the.app.view:remove(self.xyMirror) |
|
92 |
end |
|
93 |
end, |
|
22
by Josh C
mirror (contains a bug where things in the corner aren't getting mirrored? |
94 |
update = function (self, elapsed) |
95 |
Tile.update(self, elapsed) |
|
96 |
||
97 |
self:wrap() |
|
98 |
self:reflect() |
|
99 |
||
100 |
-- TODO: make sure mirrors are cleaned up when we are |
|
101 |
-- killed / removed from view |
|
102 |
end |
|
103 |
} |