예제 #1
0
    def __init__(self,
                 parent,
                 text,
                 x,
                 y,
                 fg=COLOR_TEXTO,
                 bg=COLOR_BOX,
                 kind='digits'):
        super().__init__(parent)
        self.text = text

        f1 = self.crear_fuente(16)
        f2 = self.crear_fuente(16, underline=True)

        self.img_uns = f1.render(text + ':', True, fg, bg)
        self.img_sel = f2.render(text + ':', True, fg, bg)

        self.image = self.img_uns
        self.rect = self.image.get_rect(topleft=(x, y))
        EventHandler.register(self.clear_selection, 'Clear')

        if kind == 'digits':
            self.text_area = NumberArea(self, text, self.rect.right + 3,
                                        self.rect.y, fg, bg)

        elif kind == 'letters':
            self.text_area = TextArea(self, text, self.rect.right + 3,
                                      self.rect.y, fg, bg)
예제 #2
0
 def __init__(self,
              parent,
              name,
              star,
              value,
              is_orbit=False,
              is_complete_orbit=False,
              is_resonance=False):
     super().__init__(parent)
     self.f1 = self.crear_fuente(16)
     self.f2 = self.crear_fuente(16, bold=True)
     self.star = star
     self.name = name
     self._value = value
     if is_orbit:
         self.orbit = RawOrbit(self.parent.current, round(value, 3))
         self.text = '{:~}'.format(value)
         self.color = COLOR_SELECTED
     elif is_complete_orbit:
         self.orbit = value
         self.text = '{:~}'.format(value.a)
         self.color = COLOR_SELECTED
     else:
         self.color = COLOR_TEXTO
         self.text = '{:~}'.format(value)
     if is_resonance:
         pass
     self.update()
     self.image = self.img_uns
     self.rect = self.image.get_rect(x=3)
     EventHandler.register(self.key_to_mouse, 'Arrow')
예제 #3
0
    def __init__(self, parent):
        rel_props = ['Mass', 'Radius', 'Surface gravity', 'Escape velocity']
        rel_args = ['mass', 'radius', 'gravity', 'escape_velocity']
        abs_args = [
            'density', 'volume', 'surface', 'circumference', 'tilt', 'spin',
            'albedo', 'greenhouse', 'clase'
        ]
        abs_props = [
            'Density', 'Volume', 'Surface area', 'Circumference', 'Axial tilt',
            'Spin', 'Albedo (bond)', 'Greenhouse effect', 'Class'
        ]
        super().__init__(parent, rel_props, abs_props, rel_args, abs_args)
        self.set_modifiables('relatives', 0, 1)
        self.set_modifiables('absolutes', 4, 6, 7)
        self.absolutes.widgets()[4].set_min_and_max(0, 100)
        f = self.crear_fuente(14)
        f.set_underline(True)
        render = f.render('Planets', True, COLOR_TEXTO, COLOR_AREA)
        render_rect = render.get_rect(y=420)
        self.parent.image.blit(render, render_rect)

        f = self.crear_fuente(16, bold=True)
        self.habitable = f.render('Habitable', True, (0, 255, 0), COLOR_BOX)
        self.hab_rect = self.habitable.get_rect(right=self.parent.rect.right -
                                                10,
                                                y=self.parent.rect.y + 50)

        EventHandler.register(self.load_planet, 'LoadData')
예제 #4
0
 def __init__(self, parent, x, centery):
     super().__init__(parent)
     self.f = self.crear_fuente(16)
     self.base = 'Pressure at Sea Level: '
     self.image = self.f.render(self.base, 1, COLOR_TEXTO, COLOR_BOX)
     self.rect = self.image.get_rect(x=x, centery=centery)
     EventHandler.register(self.on_keydown, 'Key', 'BackSpace', 'Fin')
예제 #5
0
 def select(self):
     if self.enabled:
         self.selected = True
         self.image.fill((255, 255, 255))
         w, h = self.rect.size
         self.image.fill(COLOR_BOX, [1, 1, w - 2, h - 2])
         EventHandler.register(self.on_keydown, 'Key', 'BackSpace', 'Fin')
예제 #6
0
    def __init__(self, parent):
        super().__init__(parent)
        self.name = 'Planetary Orbit'
        self.image = Surface((ANCHO, ALTO - 32))
        self.image.fill(COLOR_BOX)
        self.rect = self.image.get_rect()
        self.properties = WidgetGroup()
        self.buttons = WidgetGroup()
        self.orbit_descriptions = WidgetGroup()
        self._markers = {}
        self.markers = []
        self.added = []
        self.objects = []
        self.satellites = {}
        self._loaded_orbits = []
        self.area_buttons = self.image.fill(COLOR_AREA,
                                            [0, 420, self.rect.w, 200])
        self.area_markers = Rect(3, 58, 380, 20 * 16)
        self.curr_x = self.area_buttons.x + 3
        self.curr_y = self.area_buttons.y + 21
        self.planet_area = AvailablePlanets(self, ANCHO - 200, 32, 200, 340)
        self.add_orbits_button = SetOrbitButton(self, ANCHO - 94, 394)
        self.area_modify = ModifyArea(self, ANCHO - 201, 374)
        self.show_markers_button = ToggleableButton(self, 'Satellites',
                                                    self.toggle_stellar_orbits,
                                                    3, 421)
        self.show_markers_button.disable()
        self.resonances_button = AddResonanceButton(self, ANCHO - 140, 416)
        self.order_f = self.crear_fuente(14)
        self.write(self.name + ' Panel',
                   self.crear_fuente(16, underline=True),
                   centerx=(ANCHO // 4) * 1.5,
                   y=0)
        self.digit_x = RatioDigit(self, 'x',
                                  self.resonances_button.rect.left - 60,
                                  self.resonances_button.rect.y)
        self.write(':',
                   self.crear_fuente(16),
                   topleft=[
                       self.digit_x.rect.right + 1,
                       self.resonances_button.rect.y - 1
                   ])
        self.digit_y = RatioDigit(self, 'y', self.digit_x.rect.right + 9,
                                  self.resonances_button.rect.y)
        self.ratios = [self.digit_x, self.digit_y]
        self.cycler = cycle(self.ratios)
        next(self.cycler)

        self.properties.add(self.area_modify,
                            self.show_markers_button,
                            self.digit_x,
                            self.digit_y,
                            self.planet_area,
                            self.add_orbits_button,
                            self.resonances_button,
                            layer=2)

        EventHandler.register(self.save_orbits, 'Save')
        EventHandler.register(self.load_orbits, 'LoadData')
예제 #7
0
    def __init__(self, parent, x, y):
        super().__init__(parent)

        self.image = Surface(graph.get_size())
        self.image.blit(graph, (0, 0))
        self.canvas = Surface(graph.get_size(), SRCALPHA)
        self.rect = self.image.get_rect(topleft=(x, y))
        self.name = 'atmograph'
        EventHandler.register(self.on_keydown, 'Fin', 'Arrow')
예제 #8
0
 def __init__(self, parent):
     super().__init__(parent)
     self.properties = WidgetGroup()
     self.primary = None
     self.secondary = None
     self.separation = None
     self.ecc_p = None
     self.ecc_s = None
     self.create()
     EventHandler.register(self.clear, 'ClearData')
예제 #9
0
    def __init__(self, parent):
        super().__init__('Planet', parent)
        self.area_buttons = self.image.fill(COLOR_AREA,
                                            [0, 420, self.rect.w, 200])
        self.current = PlanetType(self)
        self.properties = WidgetGroup()

        self.unit = Unit(self, 0, 416)
        self.properties.add(self.unit)

        self.button_add = AddPlanetButton(self, ANCHO - 13, 398)
        self.button_del = DelPlanetButton(self, ANCHO - 13, 416)
        self.properties.add(self.button_add, self.button_del)
        self.planet_buttons = WidgetGroup()
        self.planets = []
        EventHandler.register(self.save_planets, 'Save')
        EventHandler.register(self.name_current, 'NameObject')
예제 #10
0
 def __init__(self, parent):
     super().__init__('Asteroid', parent)
     self.properties = WidgetGroup()
     self.current = AsteroidType(self)
     f1 = self.crear_fuente(16, underline=True)
     f2 = self.crear_fuente(13, underline=True)
     r = self.image.fill(COLOR_AREA, [0, 420, (self.rect.w // 4) + 32, 200])
     self.write('Composition', f1, COLOR_AREA, topleft=(0, 420))
     self.area_asteroids = self.image.fill(COLOR_AREA,
                                           (r.right + 10, r.y, 400, 200))
     self.write('Asteroids',
                f2,
                COLOR_AREA,
                x=self.area_asteroids.x + 3,
                y=self.area_asteroids.y)
     self.curr_x = self.area_asteroids.x + 3
     self.curr_y = self.area_asteroids.y + 21
     self.properties.add(self.current)
     self.button_add = AddAsteroidButton(self, ANCHO - 13, 398)
     self.button_del = DelAsteroidButton(self, ANCHO - 13, 416)
     self.properties.add(self.button_add, self.button_del)
     self.asteroids = WidgetGroup()
     self.moons = []
     EventHandler.register(self.load_satellites, 'LoadData')
     EventHandler.register(self.save_satellites, 'Save')
     EventHandler.register(self.name_current, 'NameObject')
예제 #11
0
    def __init__(self, parent):
        super().__init__(parent)
        self.name = 'Star System'
        self.image = Surface((ANCHO, ALTO - 32))
        self.image.fill(COLOR_BOX)
        self.rect = self.image.get_rect()
        self.area_buttons = self.image.fill(COLOR_AREA,
                                            [0, 420, self.rect.w, 200])
        self.f2 = self.crear_fuente(14, underline=True)
        self.write('Star Systems', self.f2, COLOR_AREA, x=3, y=420)
        self.properties = WidgetGroup()
        self.f1 = self.crear_fuente(16, underline=True)
        self.write(self.name + ' Panel',
                   self.f1,
                   centerx=(ANCHO // 4) * 1.5,
                   y=0)
        self.stars_area = AvailableStars(self, ANCHO - 200, 32, 200, 340)

        self.current = SystemType(self)

        self.systems = []
        self.setup_button = SetupButton(self, 484, 416)
        self.undo_button = DissolveButton(self, 334, 416)
        self.restore_button = UndoButton(self, 234, 416)
        self.properties.add(self.setup_button, self.undo_button,
                            self.restore_button, self.stars_area, self.current)
        self.system_buttons = WidgetGroup()
        EventHandler.register(self.save_systems, 'Save')
        EventHandler.register(self.load_systems, 'LoadData')
        EventHandler.register(self.name_current, 'NameObject')
    def init(cls):
        cls._systems = []
        cls.loose_stars = []
        cls._current_idx = 0

        EventHandler.register(cls.save, "SaveDataFile")
        EventHandler.register(cls.compound_save_data, "SaveData")
        EventHandler.register(cls.load_data, 'LoadData')
예제 #13
0
 def __init__(self, parent):
     super().__init__('Star', parent)
     self.properties = WidgetGroup()
     self.current = StarType(self)
     self.area_buttons = self.image.fill(COLOR_AREA,
                                         [0, 420, self.rect.w, 200])
     f = self.crear_fuente(14, underline=True)
     render = f.render('Stars', True, COLOR_TEXTO, COLOR_AREA)
     self.image.blit(render, self.area_buttons.topleft)
     self.button_add = AddStarButton(self, ANCHO - 13, 398)
     self.button_del = DelStarButton(self, ANCHO - 13, 416)
     self.properties.add(self.button_add, self.button_del, layer=1)
     self.stars = []
     EventHandler.register(self.save_stars, 'Save')
     EventHandler.register(self.load_stars, 'LoadData')
     EventHandler.register(self.name_current, 'NameObject')
예제 #14
0
 def __init__(self, parent):
     super().__init__(parent)
     self.properties = WidgetGroup()
     self.create()
     EventHandler.register(self.clear, 'ClearData')
     self.relative_args = ['density', 'mass', 'volume']
예제 #15
0
 def show(self):
     super().show()
     EventHandler.register(self.on_keydown, 'Arrow')
예제 #16
0
 def show(self):
     super().show()
     EventHandler.register(self.input, 'Key', 'BackSpace', 'Fin')
예제 #17
0
 def __init__(self, *args, **kwargs):
     super().__init__(*args, **kwargs)
     EventHandler.register(self.input, 'Typed', 'BackSpace', 'Fin', 'Key')
예제 #18
0
    def __init__(self, parent):
        super().__init__(parent)
        self.name = 'Atmosphere'
        self.image = Surface((ANCHO, ALTO - 32))
        self.image.fill(COLOR_BOX)
        self.rect = self.image.get_rect()
        self.elements = WidgetGroup()
        self.pressure = q(0, 'psi')

        f1 = self.crear_fuente(16, underline=True)
        self.f2 = self.crear_fuente(12)
        self.f3 = self.crear_fuente(16)
        f4 = self.crear_fuente(11)
        self.f5 = self.crear_fuente(11, bold=True)

        self.write(self.name + ' Panel', f1, centerx=(ANCHO // 4) * 1.5, y=0)
        self.write('Composition', self.f3, centerx=65, y=35)
        self.water_state_rect = self.write('State of Water at Surface: ',
                                           f4,
                                           x=3,
                                           y=ALTO - 50)
        EventHandler.register(self.load_atmosphere, 'LoadData')
        EventHandler.register(self.clear, 'ClearData')
        self.area_info = Rect(190, 460, 195, 132 - 41)
        self.warning_rect = Rect(self.area_info.x, self.area_info.bottom,
                                 self.area_info.w, 21)

        for i, element in enumerate(molecular_weight):
            gas = molecular_weight[element]
            name = gas['name']

            c = None
            if name == 'Molecular Nitrogen':
                c = (255, 255, 0)
            weight = gas['weight']
            min_atm = q(gas.get('min_atm', 0), 'atm')
            max_atm = q(gas.get('max_atm', 0), 'atm')
            boiling = None if gas['boiling'] is None else q(
                gas.get('boiling'), 'degree_Celsius')
            melting = None if gas['melting'] is None else q(
                gas.get('melting'), 'degree_Celsius')
            elm = Element(self,
                          i,
                          element,
                          name,
                          weight,
                          min_atm,
                          max_atm,
                          boiling,
                          melting,
                          3,
                          21 * i + 60,
                          color=c)
            elm.hide()
            self.elements.add(elm)
            self.write('%',
                       self.f3,
                       x=elm.percent.rect.right + 3,
                       centery=elm.rect.centery)

        self.atmograph = Atmograph(self, 190, 60)
        self.show_pressure = ShownPressure(self,
                                           x=self.atmograph.rect.x,
                                           centery=self.atmograph.rect.bottom +
                                           10)
        self.show_pressure.update_text('Not stablished')
        self.properties = WidgetGroup()
        self.planets = AvailablePlanets(self, ANCHO - 200, 460, 200, 132)
        self.properties.add(self.planets)