Ready for lasers.
This commit is contained in:
parent
b61f54963d
commit
e9a62a028c
|
@ -72,10 +72,16 @@ class Level(object):
|
|||
self.camera_x = (self.player.x - screen_size[0] / 2 + 32)
|
||||
self.camera_y = (self.player.y - screen_size[1] / 2 - 24)
|
||||
|
||||
def draw(self, window):
|
||||
def _blit_background(self, window):
|
||||
window.blit(self.background, (0 - self.camera_x, 0 - self.camera_y))
|
||||
|
||||
for obj in sorted(self.objects, key=lambda obj: (obj.y + obj.z)):
|
||||
def _sorted_objs(self):
|
||||
return sorted(self.objects, key=lambda obj: (obj.y + obj.z))
|
||||
|
||||
def draw(self, window):
|
||||
self._blit_background(window)
|
||||
|
||||
for obj in self._sorted_objs():
|
||||
obj.draw(window)
|
||||
|
||||
self.darkness.draw(window)
|
||||
|
|
|
@ -65,7 +65,7 @@ class Level4(level.Level):
|
|||
self.objects.append({
|
||||
lm.Mirror: mirror.Mirror(self, x, y, random.choice((True, False))),
|
||||
lm.Lever: lever.Lever(
|
||||
self, x, y, [], toggling=True,
|
||||
self, x, y, [lambda setting: self.generate_lasers], toggling=True,
|
||||
anim='lever_leftright' if x == 0 or x == 15 * 64
|
||||
else 'lever_updown'),
|
||||
lm.Target: block.Block(self, x, y, self.imgs['block3'],
|
||||
|
@ -82,13 +82,38 @@ class Level4(level.Level):
|
|||
m = min(mirrors, key=lambda m: misc.manhattan_dist(
|
||||
(m.x, m.y), (l.x, l.y)))
|
||||
mirrors.remove(m)
|
||||
l.links.append((lambda m: lambda setting: m.rotate())(m))
|
||||
l.links.insert(0, (lambda m: lambda setting: m.rotate())(m))
|
||||
|
||||
self.generate_lasers()
|
||||
|
||||
self.player.set_pos(64 * 7, 48 * 2)
|
||||
self.player.set_init_pos()
|
||||
|
||||
|
||||
def restart(self):
|
||||
for obj in self.objects:
|
||||
obj.reset_pos()
|
||||
|
||||
def generate_lasers(self):
|
||||
self.lasers = []
|
||||
|
||||
|
||||
def draw_lasers(self, window):
|
||||
for p0, p1 in self.lasers:
|
||||
pygame.draw.line(p0, p1, (255, 0, 0))
|
||||
|
||||
def draw(self, window):
|
||||
self._blit_background(window)
|
||||
|
||||
objs = self._sorted_objs()
|
||||
nonmirrors = filter(lambda obj: not isinstance(obj, mirror.Mirror),
|
||||
objs)
|
||||
mirrors = filter(lambda obj: isinstance(obj, mirror.Mirror), objs)
|
||||
for obj in nonmirrors:
|
||||
obj.draw(window)
|
||||
|
||||
self.draw_lasers(window)
|
||||
|
||||
for obj in mirrors:
|
||||
obj.draw(window)
|
||||
|
||||
self.darkness.draw(window)
|
||||
|
|
|
@ -34,6 +34,7 @@ class Mirror(worldobject.WorldObject):
|
|||
worldobject.WorldObject.__init__(self, level, x, y)
|
||||
|
||||
self.in_rotation = False
|
||||
self.left_up_aim = self.left_up
|
||||
|
||||
self.frame = 7
|
||||
self.anim_speed = 12
|
||||
|
@ -43,7 +44,7 @@ class Mirror(worldobject.WorldObject):
|
|||
if self.in_rotation:
|
||||
return
|
||||
self.in_rotation = True
|
||||
self.left_up = not self.left_up
|
||||
self.left_up_aim = not self.left_up_aim
|
||||
self.frame = 0
|
||||
|
||||
def update(self, e, t, dt):
|
||||
|
@ -52,11 +53,12 @@ class Mirror(worldobject.WorldObject):
|
|||
self.frame = min(self.frame + self.anim_speed * dt, top)
|
||||
if self.frame == top:
|
||||
self.in_rotation = False
|
||||
self.left_up = not self.left_up
|
||||
|
||||
worldobject.WorldObject.update(self, e, t, dt)
|
||||
|
||||
def draw(self, window):
|
||||
fn = self.frame + 1 if not self.left_up else self.frame + self._half_anim_len
|
||||
fn = self.frame + 1 if not self.left_up_aim else self.frame + self._half_anim_len
|
||||
self.img = self.level.imgs['mirror'][int(fn)]
|
||||
window.blit(self.img, (self.x - 32 - self.level.camera_x,
|
||||
self.y - self.img.get_size()[1] + 24
|
||||
|
|
Loading…
Reference in New Issue