| @@ -103,9 +103,9 @@ class Bg: | |||
| self, | |||
| game: Game, | |||
| ): | |||
| self.base = BgBase (game) | |||
| self.jojoko = Jojoko (game) | |||
| self.kita = KitaSun (game) | |||
| self.base = BgBase (game, self.kita.sun, layer = self.kita.layer - 5) | |||
| self.jojoko = Jojoko (game) | |||
| self.grass = BgGrass (game) | |||
| @@ -284,23 +284,60 @@ class BgBase (GameObject): | |||
| bg_evening: Surface | |||
| bg_grass: Surface | |||
| bg_night: Surface | |||
| surface: Surface | |||
| sun: Sun | |||
| def __init__ ( | |||
| self, | |||
| game: Game, | |||
| sun: Sun, | |||
| layer: float, | |||
| ): | |||
| super ().__init__ (game) | |||
| self.bg = pygame.image.load ('assets/bg.jpg') | |||
| self.bg_evening = pygame.image.load ('assets/bg-evening.jpg') | |||
| self.bg_grass = pygame.image.load ('assets/bg-grass.png') | |||
| self.bg_night = pygame.image.load ('assets/bg-night.jpg') | |||
| self.surface = pygame.transform.scale (self.bg, (CWindow.WIDTH, CWindow.HEIGHT)) | |||
| super ().__init__ (game, layer = layer) | |||
| self.bg = self._load_image ('assets/bg.jpg') | |||
| self.bg_evening = self._load_image ('assets/bg-evening.jpg') | |||
| self.bg_grass = self._load_image ('assets/bg-grass.png') | |||
| self.bg_night = self._load_image ('assets/bg-night.jpg') | |||
| self.sun = sun | |||
| @staticmethod | |||
| def _load_image ( | |||
| path: str, | |||
| ) -> Surface: | |||
| return pygame.transform.scale (pygame.image.load (path), | |||
| (CWindow.WIDTH, CWindow.HEIGHT)) | |||
| def redraw ( | |||
| self, | |||
| ) -> None: | |||
| self.game.screen.blit (self.surface, (self.x, self.y)) | |||
| date_tmp = self.game.sky.observer.date | |||
| self.game.sky.observer.date = self.game.now.date () | |||
| sunrise_start: datetime = ( | |||
| (ephem.localtime (self.game.sky.observer.previous_rising (self.sun)) | |||
| - timedelta (minutes = 30))) | |||
| sunrise_end: datetime = sunrise_start + timedelta (hours = 1) | |||
| sunrise_centre: datetime = ( | |||
| sunrise_start + (sunrise_end - sunrise_start) / 2) | |||
| sunset_start: datetime = ( | |||
| (ephem.localtime (self.game.sky.observer.next_setting (self.sun)) | |||
| - timedelta (minutes = 30))) | |||
| sunset_end: datetime = sunset_start + timedelta (hours = 1) | |||
| sunset_centre: datetime = ( | |||
| sunset_start + (sunset_end - sunset_start) / 2) | |||
| self.game.sky.observer.date = date_tmp | |||
| surface: Surface = ((self.bg | |||
| if (sunrise_centre <= self.game.now < sunset_centre) | |||
| else self.bg_night) | |||
| .copy ()) | |||
| if sunrise_start <= self.game.now < sunrise_end: | |||
| self.bg_evening.set_alpha (255 - int ((abs (self.game.now - sunrise_centre) * 510) | |||
| / (sunrise_end - sunrise_centre))) | |||
| elif sunset_start <= self.game.now < sunset_end: | |||
| self.bg_evening.set_alpha (255 - int ((abs (self.game.now - sunset_centre) * 510) | |||
| / (sunset_end - sunset_centre))) | |||
| else: | |||
| self.bg_evening.set_alpha (0) | |||
| surface.blit (self.bg_evening, (0, 0)) | |||
| self.game.screen.blit (surface, (self.x, self.y)) | |||
| super ().redraw () | |||