class Game(BaseScene): def __init__(self, engine): super().__init__(engine, background_color=(10, 21, 41)) self.render_group = LayeredDirty() self.spawn_objects = [InfiniteObjectManager(self, Chimney, self.groups[config.KEY_CHIMNEY])] self.spawner = Spawner() self.spawn_objects.append(self.spawner) santa = Santa(self, Vector(*self.engine.display.get_rect().center), self.groups[config.KEY_GIFTS], self.groups[config.KEY_SANTA]) self.controller = Controller(actor=santa) channel = resources.sounds["santaclauseiscoming"].play(-1) channel.set_volume(0.1) self.score = 0 self.missed_chimneys = 0 Score(self, lambda: self.score, self.groups[config.KEY_UI]) def render(self): window = display.get_surface() for group in self.groups.values(): self.render_group.add(group.sprites()) for sprite in self.render_group.sprites(): self.render_group.change_layer(sprite, sprite.layer) sprite.pre_draw() return self.render_group.draw(window, self.background) def simulate(self, time_delta: float): self.controller.respond() super().simulate(time_delta) for spawn_object in self.spawn_objects: spawn_object.resolve(time_delta) collisions = groupcollide(self.groups[config.KEY_CHIMNEY], self.groups[config.KEY_GIFTS], False, False) successes = 0 for chimney, gifts in collisions.items(): for gift in gifts: if chimney.rect.left < gift.position.x < chimney.rect.right: successes += 1 gift.kill() chimney.delivered = True if successes: self.score += config.POINTS_GIFT_DELIVERED * successes logging.debug(f"{successes} Successes!") if self.missed_chimneys >= config.LIMIT_CHIMNEYS_MISSED: self.running = False