class Dashboard: def __init__(self, surface): self.surface = surface self.x_pos = BORDER_SIZE self.y_pos = round(const.WIN_HEIGHT*2/3) self.width = const.WIN_LENGTH - 2*BORDER_SIZE self.height = round(const.WIN_HEIGHT/3 - BORDER_SIZE) radar_radius = round(self.height/2) - 20 self.radar = Radar(self.x_pos + 5 + self.width - radar_radius - 10, \ self.y_pos + round(self.height/2) + 2, radar_radius) self.sensors = Sensors(self.x_pos + 5, self.y_pos + 2) self.laser_button_n = DashButton((self.x_pos + 510, self.y_pos + 30, 70, 70)) self.laser_button_s = DashButton((self.x_pos + 510, self.y_pos + 110, 70, 70)) self.repair_switch = DashButton((self.x_pos + 350, self.y_pos + 70, 150, 100)) self.laser_n_disabled = False self.laser_s_disabled = False self.repair_disabled = False self.cactus_button = DashButton((BORDER_SIZE, const.WIN_HEIGHT - BORDER_SIZE - 80, 55, 80)) def take_damage(self, damage=1): """Decreases the Hull bar by the amount given, or 1 if none is given. Args: damage (int, optional): Damage dealt. Defaults to 1. """ self.sensors.hull_bar.change_value(damage*-1) if damage is not 0: SOUNDS['damage'].play() def lose_water(self, water_loss=1): """Decreases the Water bar by the amount given, or 1 if none is given. Args: water_loss (int, optional): Water spent. Defaults to 1. """ self.sensors.water_bar.change_value(water_loss*-1) if water_loss is not 0: SOUNDS['sprinkler'].play() def get_health(self): """Getter that returns the health of the hull. """ return self.sensors.hull_bar.value def get_water(self): """Getter that returns the water left in the tank. """ return self.sensors.water_bar.value def draw(self, sprinklers, lightyears, level, is_repairing=False): # Many values here are magic numbers. This layout will be pretty messed up if # we change WIN_LENGTH or WIN_HEIGHT self.radar.draw(self.surface) if not (self.sensors.disabled or self.sensors.broken): self.sensors.draw(self.surface) number_text = const.DIGITAL_FONT.render(str(lightyears), True, const.YELLOW) pygame.draw.rect(self.surface, const.BLACK, (self.x_pos + 75, self.y_pos + 115, \ number_text.get_width() + 20, number_text.get_height() + 10)) self.surface.blit(number_text, (self.x_pos + 85, self.y_pos + 125)) if level <= 2: self.surface.blit(IMAGES['dashboard_sans_lever'], (self.x_pos-10, self.y_pos)) elif level == 3: self.surface.blit(IMAGES['dashboard'], (self.x_pos-10, self.y_pos)) if self.sensors.disabled or self.sensors.broken: self.sensors.draw(self.surface) hull_text = const.DEFAULT_FONT_SM.render("Hull", True, const.BLACK) self.surface.blit(hull_text, (self.x_pos + 68 - hull_text.get_width(), self.y_pos + 10)) water_text = const.DEFAULT_FONT_SM.render("Water", True, const.BLACK) self.surface.blit(water_text, (self.x_pos + 68 - water_text.get_width(), self.y_pos + 20 + BAR_WIDTH)) radar_text = const.DEFAULT_FONT_SM.render('Radar', True, const.BLACK) self.surface.blit(radar_text, (self.x_pos + 600, self.y_pos + BORDER_SIZE)) cactus = pygame.transform.scale(IMAGES['cactus'], (55, 80)) self.surface.blit(cactus, (BORDER_SIZE, \ const.WIN_HEIGHT - BORDER_SIZE - cactus.get_height())) # available sprinklers sprinkler_text = const.DEFAULT_FONT_SM.render('Sprinklers Available', True, const.BLACK) self.surface.blit(sprinkler_text, (self.x_pos + 300, self.y_pos + BORDER_SIZE)) for i in range(sprinklers): self.surface.blit(IMAGES['sprinkler'], (self.x_pos + 300 + i*50, \ self.y_pos + BORDER_SIZE + sprinkler_text.get_height())) # lightyears to destination lightyear_text = const.DEFAULT_FONT_SM.render('Lightyears to', True, const.BLACK) spaceport_text = const.DEFAULT_FONT_SM.render('Next Spaceport', True, const.BLACK) self.surface.blit(lightyear_text, (self.x_pos + 130, self.y_pos + 120)) self.surface.blit(spaceport_text, (self.x_pos + 130, self.y_pos + 120 + lightyear_text.get_height())) # lasers laser_text = const.DEFAULT_FONT_SM.render('Lasers', True, const.BLACK) self.surface.blit(laser_text, (self.x_pos + 515, self.y_pos + BORDER_SIZE)) if self.laser_n_disabled: pygame.draw.rect(self.surface, (50, 50, 50), (self.x_pos + 510, self.y_pos + 38, 70, 70)) fire_text = const.TITLE_FONT_SM.render("FIRE", True, (255, 127, 0)) self.surface.blit(fire_text, (self.x_pos + 510 + (70 - fire_text.get_width())/2, self.y_pos + 53)) if self.laser_s_disabled: pygame.draw.rect(self.surface, (50, 50, 50), (self.x_pos + 510, self.y_pos + 118, 70, 70)) fire_text = const.TITLE_FONT_SM.render("FIRE", True, (255, 127, 0)) self.surface.blit(fire_text, (self.x_pos + 510 + (70 - fire_text.get_width())/2, self.y_pos + 133)) # repair button if level >= 3: repair_text = const.DEFAULT_FONT_SM.render('Repair Mode', True, const.BLACK) self.surface.blit(repair_text, (self.x_pos + 330, self.y_pos + 90)) off_on_text = const.DEFAULT_FONT_SM.render('On Off', True, const.BLACK) if not self.repair_disabled: self.surface.blit(off_on_text, (self.x_pos + 335, self.y_pos + 90 + repair_text.get_height())) if not is_repairing: self.surface.blit(IMAGES['lever'], (self.x_pos + 320, self.y_pos + 133)) else: pygame.draw.rect(self.surface, (50, 50, 50), (self.x_pos + 315, self.y_pos + 133, 135, 45)) fire_text = const.TITLE_FONT_SM.render("ON FIRE", True, (255, 127, 0)) self.surface.blit(fire_text, (self.x_pos + 315 + (135 - fire_text.get_width())/2, self.y_pos + 143))