/spacey

To get this branch, use:
bzr branch http://9ix.org/bzr/spacey
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
35 by Josh C
fix double-removing sprites (and subsequent zombie mirror bullets).
32
                     --print('creating mirror: X='..mirrorX..' Y='..mirrorY)
22 by Josh C
mirror (contains a bug where things in the corner aren't getting mirrored?
33
27 by Josh C
try to not spawn rocks where you can see them. not working if screen
34
                     self.xMirror = Mirror:new{ of = self, image = self.image }
32 by Josh C
stick things into layers
35
                     the.mirrors:add(self.xMirror)
22 by Josh C
mirror (contains a bug where things in the corner aren't getting mirrored?
36
                  end
37
38
                  self.xMirror.x = mirrorX
39
                  self.xMirror.y = self.y
40
                  self.xMirror.rotation = self.rotation
26 by Josh C
rocks!
41
                  self.xMirror.scale = self.scale
22 by Josh C
mirror (contains a bug where things in the corner aren't getting mirrored?
42
               elseif self.xMirror then
35 by Josh C
fix double-removing sprites (and subsequent zombie mirror bullets).
43
                  if self.type == 'bullet' then
44
                     --print('pruning bullet')
45
                  end
32 by Josh C
stick things into layers
46
                  the.mirrors:remove(self.xMirror)
35 by Josh C
fix double-removing sprites (and subsequent zombie mirror bullets).
47
                  self.xMirror.of = nil -- break circular reference
22 by Josh C
mirror (contains a bug where things in the corner aren't getting mirrored?
48
                  self.xMirror = nil
49
                  -- die?
50
               end
51
52
               if self.y ~= mirrorY then
53
                  if not self.yMirror then
35 by Josh C
fix double-removing sprites (and subsequent zombie mirror bullets).
54
                     --print('creating mirror: X='..mirrorX..' Y='..mirrorY)
22 by Josh C
mirror (contains a bug where things in the corner aren't getting mirrored?
55
27 by Josh C
try to not spawn rocks where you can see them. not working if screen
56
                     self.yMirror = Mirror:new{ of = self, image = self.image }
32 by Josh C
stick things into layers
57
                     the.mirrors:add(self.yMirror)
22 by Josh C
mirror (contains a bug where things in the corner aren't getting mirrored?
58
                  end
59
60
                  self.yMirror.x = self.x
61
                  self.yMirror.y = mirrorY
62
                  self.yMirror.rotation = self.rotation
26 by Josh C
rocks!
63
                  self.yMirror.scale = self.scale
22 by Josh C
mirror (contains a bug where things in the corner aren't getting mirrored?
64
               elseif self.yMirror then
35 by Josh C
fix double-removing sprites (and subsequent zombie mirror bullets).
65
                  if self.type == 'bullet' then
66
                     --print('pruning bullet')
67
                  end
32 by Josh C
stick things into layers
68
                  the.mirrors:remove(self.yMirror)
35 by Josh C
fix double-removing sprites (and subsequent zombie mirror bullets).
69
                  self.yMirror.of = nil -- break circular reference
22 by Josh C
mirror (contains a bug where things in the corner aren't getting mirrored?
70
                  self.yMirror = nil
71
                  -- die?
72
               end
23 by Josh C
and that fixes the corner bug
73
74
               if self.x ~= mirrorX and self.y ~= mirrorY then
75
                  if not self.xyMirror then
35 by Josh C
fix double-removing sprites (and subsequent zombie mirror bullets).
76
                     --print('creating mirror: X='..mirrorX..' Y='..mirrorY)
23 by Josh C
and that fixes the corner bug
77
27 by Josh C
try to not spawn rocks where you can see them. not working if screen
78
                     self.xyMirror = Mirror:new{ of = self, image = self.image }
32 by Josh C
stick things into layers
79
                     the.mirrors:add(self.xyMirror)
23 by Josh C
and that fixes the corner bug
80
                  end
81
82
                  self.xyMirror.x = mirrorX
83
                  self.xyMirror.y = mirrorY
84
                  self.xyMirror.rotation = self.rotation
26 by Josh C
rocks!
85
                  self.xyMirror.scale = self.scale
23 by Josh C
and that fixes the corner bug
86
               elseif self.xyMirror then
35 by Josh C
fix double-removing sprites (and subsequent zombie mirror bullets).
87
                  if self.type == 'bullet' then
88
                     --print('pruning bullet')
89
                  end
32 by Josh C
stick things into layers
90
                  the.mirrors:remove(self.xyMirror)
35 by Josh C
fix double-removing sprites (and subsequent zombie mirror bullets).
91
                  self.xyMirror.of = nil -- break circular reference
23 by Josh C
and that fixes the corner bug
92
                  self.xyMirror = nil
93
                  -- die?
94
               end
22 by Josh C
mirror (contains a bug where things in the corner aren't getting mirrored?
95
            end,
24 by Josh C
monkey patch group to add onRemove hook. remove mirrors on remove.
96
   onRemove = function(self)
97
                 if self.xMirror then
35 by Josh C
fix double-removing sprites (and subsequent zombie mirror bullets).
98
                    if self.type == 'bullet' then
99
                       --print('removing bullet, so removing mirror')
100
                    end
32 by Josh C
stick things into layers
101
                    the.mirrors:remove(self.xMirror)
35 by Josh C
fix double-removing sprites (and subsequent zombie mirror bullets).
102
                    self.xMirror.of = nil -- break circular reference
103
                    self.xMirror = nil
24 by Josh C
monkey patch group to add onRemove hook. remove mirrors on remove.
104
                 end
105
106
                 if self.yMirror then
35 by Josh C
fix double-removing sprites (and subsequent zombie mirror bullets).
107
                    if self.type == 'bullet' then
108
                       --print('removing bullet, so removing mirror')
109
                    end
32 by Josh C
stick things into layers
110
                    the.mirrors:remove(self.yMirror)
35 by Josh C
fix double-removing sprites (and subsequent zombie mirror bullets).
111
                    self.yMirror.of = nil -- break circular reference
112
                    self.yMirror = nil
24 by Josh C
monkey patch group to add onRemove hook. remove mirrors on remove.
113
                 end
114
115
                 if self.xyMirror then
35 by Josh C
fix double-removing sprites (and subsequent zombie mirror bullets).
116
                    if self.type == 'bullet' then
117
                       --print('removing bullet, so removing mirror')
118
                    end
32 by Josh C
stick things into layers
119
                    the.mirrors:remove(self.xyMirror)
35 by Josh C
fix double-removing sprites (and subsequent zombie mirror bullets).
120
                    self.xyMirror.of = nil -- break circular reference
121
                    self.xyMirror = nil
24 by Josh C
monkey patch group to add onRemove hook. remove mirrors on remove.
122
                 end
123
              end,
22 by Josh C
mirror (contains a bug where things in the corner aren't getting mirrored?
124
   update = function (self, elapsed)
125
               Tile.update(self, elapsed)
126
127
               self:wrap()
35 by Josh C
fix double-removing sprites (and subsequent zombie mirror bullets).
128
               if self.active then
129
                  self:reflect()
130
               end
22 by Josh C
mirror (contains a bug where things in the corner aren't getting mirrored?
131
            end
132
}