Ready for lasers.
Šī revīzija ir iekļauta:
		@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Atsaukties uz šo jaunā problēmā
	
	Block a user