Пример #1
0
 def __init__(self, controller):
     self.__controller = controller
     self.__last_scene = controller.get_scene()
     self.game_objects = LayeredUpdates()
     self.screen_rect = pygame.display.get_surface().get_rect()
     try:
         open(self.REGULAR_FONT).close()
     except FileNotFoundError:
         fix_path()
Пример #2
0
    def init(cls):
        init()
        os.environ['SDL_VIDEO_CENTERED'] = "{!s},{!s}".format(0, 0)
        display.set_icon(
            image.load(os.path.join(os.getcwd(), 'data', 'favicon.png')))
        display.set_caption("WorldBuilding")
        display.set_mode((ANCHO, ALTO), SCALED)

        cls.contents = LayeredUpdates()
    def init(cls):
        display.set_caption('BehaviourTreeEditor v2')
        # display.set_icon(image.load('frontend/favicon.png'))
        display.set_mode((WIDTH, HEIGHT))

        f = font.SysFont('Verdana', 14)
        cls.typemode_label = f.render('TypeMode (F3):', 1, COLOR_TEXT,
                                      COLOR_BG)
        cls.typemode_mark = Surface((19, 19))
        cls.widgets = LayeredUpdates()
Пример #4
0
 def __init__(self, graph_yaml=None, graph_tmx=None):
     self.visitor = None
     self.scroll_group = None
     self.graph_yaml = graph_yaml
     self.graph_tmx = graph_tmx
     self.visitor_cursor = None
     self.vertex_group = VertexLookupGroup()
     self.hud_group = None
     self.hud_button = None
     self.pointer = None
     self.sprites = LayeredUpdates()
     self._animations = Group()
Пример #5
0
def render_center_info(board_render):
    center_info_surface = Surface((250, 250))
    match = board_render.match
    group = LayeredUpdates()

    # Background
    info_rect = Rect(0, 0, 250, 250)
    info_rect.center = board_render.surface.get_rect().center
    pygame.draw.rect(center_info_surface, (0, 0, 0), info_rect)

    current_path = os.path.dirname(os.path.realpath(__file__))
    font_path = os.path.join(
        current_path, "..", "..", "resources", "fonts", "SourceSans3-Semibold.ttf"
    )
    font = Font(font_path, 30)
    large_font = Font(font_path, 42)

    # Round Title
    round_text = "{} {}".format("East" if match.east_prevalent else "South", match.round_number)
    round_surface = font.render(round_text, True, (255, 255, 255))
    round_sprite = Sprite()
    round_sprite.image = round_surface
    round_sprite.rect = round_surface.get_rect()
    round_sprite.rect.center = info_rect.center
    round_sprite.rect.y -= (round_surface.get_rect().height // 2)
    round_sprite.layer = 1
    group.add(round_sprite)

    # Tiles Left in Wall
    tile_count_surface = large_font.render(str(len(match.current_board.wall)), True, (255, 255, 255))
    wall_remaining_sprite = Sprite()
    wall_remaining_sprite.image = tile_count_surface
    wall_remaining_sprite.rect = tile_count_surface.get_rect()
    wall_remaining_sprite.rect.center = info_rect.center
    wall_remaining_sprite.rect.y += (tile_count_surface.get_rect().height // 3)
    wall_remaining_sprite.layer = 1
    group.add(wall_remaining_sprite)

    # Wind Markers
    create_wind_markers(match, info_rect, group)

    # Turn Marker
    create_turn_marker(match, info_rect, group)

    # Riichi Markers
    create_riichi_markers(match, info_rect, group)

    background_sprite = Sprite()
    background_sprite.rect = info_rect
    background_sprite.image = center_info_surface
    background_sprite.layer = 0
    group.add(background_sprite)
    return group
Пример #6
0
    def __init__(self, game):
        super().__init__(game)
        self.player = None
        self.active = True

        self.geometry = list()
        self.space = pymunk.Space()
        self.space.gravity = (0, 1000)
        self.sprites = LayeredUpdates()
        self.event_handler = event_handling.EventQueueHandler()
        self.background = resources.gfx("background.png", convert=True)
        self.load()
        pygame.mixer.music.load(resources.music_path("zirkus.ogg"))
        pygame.mixer.music.play(-1)
Пример #7
0
 def __init__(self,
              scene_name="cutscene001",
              scene_file_name="test-cutscene.yaml"):
     self.running = False
     self.script_runner = ScriptRunner()
     self._scene_name = scene_name
     self._scene_file_name = scene_file_name
     self._border = None
     self._sprites = LayeredUpdates()
     self._animations = Group()
     self._dialog_open = False
     self._dialog_rect = None
     self._caption = None
     self._text = None
Пример #8
0
 def init(cls):
     init()
     os.environ['SDL_VIDEO_CENTERED'] = "{!s},{!s}".format(0, 0)
     try:
         icon = image.load(
             os.path.join(os.getcwd(), 'lib', 'frontend', 'icon.png'))
     except error:
         icon = image.load(os.path.join(os.getcwd(), 'frontend',
                                        'icon.png'))
     icon.set_colorkey((255, 255, 255, 0))
     display.set_icon(icon)
     display.set_caption("PMCDB: PyMavisCustomDatabase v0.2.2")
     display.set_mode((ANCHO, ALTO))
     cls.contents = LayeredUpdates()
Пример #9
0
 def __init__(self, controller):
     try:
         open(self.REGULAR_FONT).close()
     except FileNotFoundError:
         fix_path()
     self._font = ftfont.Font(self.REGULAR_FONT, 50)
     self._small_font = ftfont.Font(self.REGULAR_FONT, 30)
     self._bold_font = ftfont.Font(self.BOLD_FONT, 30)
     self.__controller = controller
     try:
         self.__last_scene = controller.get_scene()
     except AttributeError:
         self.__last_scene = None
     self.game_objects = LayeredUpdates()
     self.screen_rect = pygame.display.get_surface().get_rect()
     background = pygame.Surface(self.screen_rect.size)
     background.fill((240, 240, 240))
     self.background = GameObject(self.game_objects,
                                  pygame.Rect(0, 0, 0, 0), background)
     self.game_objects.add(self.background)
Пример #10
0
def render_bot_icons(board_render):
    ICON_SIZE = (50, 50)
    group = LayeredUpdates()

    SEAT_POS = [
        None, (board_render.surface.get_width() - ICON_SIZE[0] - 10, 80),
        (460 - ICON_SIZE[0] - 10, 10), (10, 80)
    ]

    game_view = board_render.match.game_manager.get_active_view()

    icon_cache = game_view.bot_icon_cache
    ais = game_view.ai_list
    ai_icons = []
    dud_ai_icon = pygame.Surface(ICON_SIZE, pygame.SRCALPHA)
    load_image_resource("dudB.png", dud_ai_icon, size=ICON_SIZE)
    for i in range(4):
        for icon in icon_cache:
            if icon['ai'] == ais[i]:
                surface = pygame.Surface(ICON_SIZE, pygame.SRCALPHA)
                load_image_resource(icon['icon'], surface, size=ICON_SIZE)
                ai_icons += [surface]
                break

    is_story_mode = hasattr(game_view, "match_dict")
    for seat in range(4):
        if seat == 0:
            continue
        sprite = Sprite()
        sprite.rect = (SEAT_POS[seat], ICON_SIZE)
        sprite.layer = 0
        if is_story_mode and seat != 2:
            sprite.image = dud_ai_icon
        else:
            sprite.image = ai_icons[seat]
        group.add(sprite)
    return group
 def init(cls):
     cls.blocks = LayeredUpdates()
     mouse.set_pos((320, 240))
     display.set_mode((640, 480))
     cls.rect_selection = Rect(0, 0, 0, 0)
     os.environ['SDL_VIDEO_CENTERED'] = "{!s},{!s}".format(0, 0)
Пример #12
0
 def init(cls):
     cls.contents = LayeredUpdates()
     cls.clock = time.Clock()
Пример #13
0
def render_score_screen(board_render):
    should_show_screen = board_render.board_manager.round_should_end
    group = LayeredUpdates()

    if not should_show_screen:
        return group

    current_path = os.path.dirname(os.path.realpath(__file__))
    font_path = os.path.join(
        current_path, "..", "..", "resources", "fonts", "SourceSans3-Semibold.ttf"
    )
    font = Font(font_path, 40)
    font_small = Font(font_path, 24)

    match = board_render.match
    scores = match.scores
    delta_scores = match.delta_scores
    total_scores = list(map(lambda s: s[0] + s[1], zip(scores, delta_scores)))

    winner_indices = numpy.argwhere(numpy.array(delta_scores) > 0).flatten()
    winner_names = []

    array = numpy.array(total_scores)
    temp = array.argsort()[::-1]
    ranks = numpy.empty_like(temp)
    ranks[temp] = numpy.arange(len(array))

    icons = get_object('boticons')['bot']

    screen_surface = Surface(board_render.surface.get_size(), pygame.SRCALPHA)
    screen_surface.fill((0, 0, 0))

    ROUND_COMPLETE = "Round Complete"

    round_complete_surface = font.render(ROUND_COMPLETE, True, (255, 255, 255))
    font_width, font_height = font.size(ROUND_COMPLETE)

    icon_size = (100, 100)

    player_list = match.ai_list

    x = screen_surface.get_width() // 5
    y = font_height + 5

    for seat in range(4):
        ai_name = player_list[seat]
        name = None
        icon = None
        for entry in icons:
            if entry['ai'] == ai_name:
                name = entry['name']
                icon = entry['icon']
                break
        if name is None:
            raise "BOT WAS NOT DEFINED."

        if seat in winner_indices:
            winner_names += [name]

        icon_surface = Surface(icon_size, pygame.SRCALPHA)
        load_image_resource(icon, icon_surface, size=icon_size)

        screen_surface.blit(
            icon_surface,
            (x, y)
        )

        player_name = font.render(name, True, (255, 255, 255))
        _, name_h = font.size(name)

        screen_surface.blit(
            player_name,
            (x + icon_size[0] + 10, y)
        )

        score_string = "{} Points".format(scores[seat])
        score_render = font_small.render(score_string, True, (255, 255, 255))
        _, score_h = font_small.size(score_string)

        screen_surface.blit(
            score_render,
            (x + icon_size[0] + 10, y + name_h + 5)
        )

        delta_string = "{}{}".format("+" if delta_scores[seat] >= 0 else "", delta_scores[seat])
        delta_render = font_small.render(delta_string, True, (255, 255, 255))
        _, delta_h = font_small.size(delta_string)

        screen_surface.blit(
            delta_render,
            (x + icon_size[0] + 10, y + name_h + 5 + score_h + 5)
        )

        total_string = "Total: {} Points".format(total_scores[seat])
        total_render = font_small.render(total_string, True, (255, 255, 255))

        screen_surface.blit(
            total_render,
            (x + icon_size[0] + 10, y + name_h + 5 + score_h + 5 + delta_h + 5)
        )

        place_string = "{}".format(ranks[seat] + 1)
        place_render = font.render(place_string, True, (255, 255, 255))
        place_w, place_h = font.size(place_string)

        screen_surface.blit(
            place_render,
            (x - place_w - 5, y + ((icon_size[1] - place_h) // 2))
        )

        y += icon_size[1] + 70

    LOADING_NEXT_ROUND = "Loading next Round..."
    loading_surface = font.render(LOADING_NEXT_ROUND, True, (255, 255, 255))
    loading_width, loading_height = font.size(LOADING_NEXT_ROUND)

    screen_surface.blit(
        loading_surface,
        (screen_surface.get_width() - loading_width - 10, screen_surface.get_height() - loading_height - 10)
    )

    screen_surface.blit(
        round_complete_surface,
        ((screen_surface.get_width() // 2) - (font_width // 2), 10),
    )

    result_pos = (screen_surface.get_width() * 0.6, screen_surface.get_height() // 3)

    if board_render.board_manager.did_exhaustive_draw:
        EXHAUSTIVE = "Exhaustive Draw"
        exhaustive_surface = font.render(EXHAUSTIVE, True, (255, 255, 255))

        screen_surface.blit(
            exhaustive_surface,
            result_pos
        )
    else:
        WINNERS = "Winners:"
        winners = ", ".join(winner_names)

        winner_text = font_small.render(WINNERS, True, (255, 255, 255))
        winner_name_text = font_small.render(winners, True, (255, 255, 255))

        screen_surface.blit(
            winner_text,
            result_pos
        )

        screen_surface.blit(
            winner_name_text,
            (result_pos[0], result_pos[1] + winner_text.get_rect().height + 5)
        )




    background_sprite = Sprite()
    background_sprite.rect = screen_surface.get_rect()
    background_sprite.image = screen_surface
    background_sprite.layer = 0
    group.add(background_sprite)



    return group
Пример #14
0
 def init(cls):
     init()
     os.environ['SDL_VIDEO_CENTERED'] = "{!s},{!s}".format(0, 0)
     display.set_mode((ANCHO, ALTO))
     cls.contents = LayeredUpdates()
Пример #15
0
 def __new__(cls) -> _GroupsBase:
     args = [Group() for _ in range(6)]
     args += [LayeredUpdates()]
     return super(Groups, cls).__new__(cls, *args)  # type: ignore
Пример #16
0
def graph_loop(mass_lower_limit=0.0,
               mass_upper_limit=0.0,
               radius_lower_limit=0.0,
               radius_upper_limit=0.0,
               is_gas_drwaf=False):
    m_lo_l = mass_lower_limit
    m_hi_l = mass_upper_limit
    r_lo_l = radius_lower_limit
    r_hi_l = radius_upper_limit

    fondo = display.set_mode((witdh, height), SCALED)
    rect = Rect(60, 2, 529, 476)
    lineas = LayeredUpdates()

    linea_h = Linea(rect, rect.x, rect.centery, rect.w, 1, lineas)
    linea_v = Linea(rect, rect.centerx, rect.y, 1, rect.h, lineas)
    punto = Punto(rect, rect.centerx, rect.centery, lineas)

    data = {}

    if any([
            mass_lower_limit < 0, mass_upper_limit < 0, radius_lower_limit < 0,
            radius_upper_limit < 0
    ]):
        raise ValueError()

    lim_mass_a = int(find_and_interpolate(m_lo_l, mass_keys,
                                          exes)) if m_lo_l else 0
    lim_mass_b = int(find_and_interpolate(m_hi_l, mass_keys,
                                          exes)) if m_hi_l else 0
    lim_radius_a = int(find_and_interpolate(r_lo_l, radius_keys,
                                            yes)) if r_lo_l else 0
    lim_radius_b = int(find_and_interpolate(r_hi_l, radius_keys,
                                            yes)) if r_hi_l else 0

    move_x, move_y = True, True
    lockx, locky = False, False

    mass_value = 0
    radius_value = 0

    mass_color = negro
    radius_color = negro

    mouse.set_pos(rect.center)
    event.clear()

    done = False
    composition_text_comp = None
    while not done:
        for e in event.get():
            if e.type == QUIT:
                py_quit()
                if __name__ == '__main__':
                    sys.exit()
            elif e.type == MOUSEBUTTONDOWN:
                if e.button == 1:
                    if (not lockx) or (not locky):
                        if (not lockx) and (not move_x):
                            lockx = True

                        elif (not locky) and (not move_y):
                            locky = True

                        elif not punto.disabled:
                            data['mass'] = round(mass_value, 3)
                            data['radius'] = round(radius_value, 3)
                            data['gravity'] = round(
                                mass_value / (radius_value**2), 3)
                            data['density'] = round(
                                mass_value / (radius_value**3), 3)
                            done = True
                        else:
                            data = {}
                            done = True

                elif e.button == 3:
                    if lockx:
                        lockx = False
                        move_x = not lockx

                    if locky:
                        locky = False
                        move_y = not locky

            elif e.type == MOUSEMOTION:
                px, py = e.pos
                if move_y:
                    linea_h.move_y(py)
                    punto.move_y(py)

                if move_x:
                    linea_v.move_x(px)
                    punto.move_x(px)

                point_x, point_y = punto.rect.center
                if rect.collidepoint(point_x, point_y) and (move_x or move_y):
                    if mascara.get_at((point_x, point_y)):
                        punto.select()
                        for name in _lineas:
                            if [point_x, point_y] in _lineas[name]:
                                composition_text_comp = name
                                break
                    else:
                        punto.deselect()

            elif e.type == KEYDOWN:
                if e.key == K_ESCAPE:
                    py_quit()
                    sys.exit()

                if e.key == K_LSHIFT:
                    move_x = False

                elif e.key == K_LCTRL:
                    move_y = False

                elif e.key == K_SPACE:
                    data['mass'] = round(mass_value, 3)
                    data['radius'] = round(radius_value, 3)
                    data['gravity'] = round(mass_value / (radius_value**2), 3)
                    data['density'] = round(mass_value / (radius_value**3), 3)
                    done = True

            elif e.type == KEYUP:
                if e.key == K_LSHIFT:
                    if not lockx:
                        move_x = True

                elif e.key == K_LCTRL:
                    if not locky:
                        move_y = True

        px, py = punto.rect.center
        alto, bajo = 0, 0
        if rect.collidepoint((px, py)):
            for _y in reversed(range(0, py)):
                if mascara.get_at((px, _y)):
                    alto = _y
                    break
            for _y in range(py, 476):
                if mascara.get_at((px, _y)):
                    bajo = _y
                    break

            a, b = 0, 0
            # creo que esto se puede escribir con oneliners.
            for name in _lineas:
                if [px, alto] in _lineas[name]:
                    a = name
                    break
            for name in _lineas:
                if [px, bajo] in _lineas[name]:
                    b = name
                    break
            if a and b:
                c = composiciones
                silicates = interpolate(py, alto, bajo, c[a]['silicates'],
                                        c[b]['silicates'])
                hydrogen = interpolate(py, alto, bajo, c[a]['hydrogen'],
                                       c[b]['hydrogen'])
                helium = interpolate(py, alto, bajo, c[a]['helium'],
                                     c[b]['helium'])
                iron = interpolate(py, alto, bajo, c[a]['iron'], c[b]['iron'])
                water_ice = interpolate(py, alto, bajo, c[a]['water ice'],
                                        c[b]['water ice'])
                values = [
                    i for i in [silicates, hydrogen, helium, iron, water_ice]
                    if i != 0
                ]

                # sólo mostramos los valores mayores a 0%
                keys, compo = [], []
                if silicates:
                    compo.append(str(round(silicates, 2)) + '% silicates')
                    keys.append('silicates')
                if hydrogen:
                    compo.append(str(round(hydrogen, 2)) + '% hydrogen')
                    keys.append('hydrogen')
                if helium:
                    compo.append(str(round(helium, 2)) + '% helium')
                    keys.append('helium')
                if iron:
                    compo.append(str(round(iron, 2)) + '% iron')
                    keys.append('iron')
                if water_ice:
                    compo.append(str(round(water_ice, 2)) + '% water ice')
                    keys.append('water ice')

                composition_text_comp = ', '.join(compo)
                data['composition'] = dict(zip(keys, values))

                if hydrogen or helium:
                    data['clase'] = 'Gas Dwarf'
                    data['albedo'] = 30
                else:
                    data['clase'] = 'Terrestial Planet'
                    data['albedo'] = 25
            else:
                data = {}

        mass_value = find_and_interpolate(linea_v.rect.x, exes, mass_keys)
        radius_value = find_and_interpolate_flipped(linea_h.rect.y, yes,
                                                    radius_keys)

        block = Surface(rect.size, SRCALPHA)
        block_mask = mask.from_surface(block)
        if any([lim_mass_b, lim_mass_a, lim_radius_a, lim_radius_b]):
            block_rect = block.get_rect(topleft=rect.topleft)
            alpha = 150
            if lim_mass_a:
                block.fill([0] * 3 + [alpha],
                           (0, rect.y - 2, lim_mass_a - rect.x, rect.h))
            if lim_mass_b:
                block.fill([0] * 3 + [alpha],
                           (lim_mass_b - rect.x, rect.y - 2, rect.w, rect.h))
            if lim_radius_a:
                block.fill([0] * 3 + [alpha],
                           (0, lim_radius_a, rect.w, rect.h - lim_radius_a))
            if lim_radius_b:
                block.fill([0] * 3 + [alpha],
                           (0, rect.y - 2, rect.w, lim_radius_b))
            if is_gas_drwaf:
                block.blit(gas_drawf, (0, 0))

            block_mask = mask.from_surface(block)
            point_x, point_y = punto.rect.center
            if block_rect.collidepoint((point_x, point_y)):
                if block_mask.get_at((point_x - rect.x, point_y - rect.y)):
                    punto.disable()
                    radius_color = rojo
                    mass_color = rojo
                else:
                    punto.enable()
                    mass_color = negro
                    radius_color = negro

        mass_text = 'Mass:' + str(round(mass_value, 3))
        radius_text = 'Radius:' + str(round(radius_value, 3))
        gravity_text = 'Density:' + str(
            round(mass_value / (radius_value**3), 3))
        density_text = 'Gravity:' + str(
            round(mass_value / (radius_value**2), 3))

        if not done:
            fondo.fill(blanco)
            fondo.blit(graph, (0, 0))
            if block_mask.count() != 0:
                fondo.blit(block, rect)

            if punto.disabled:
                fondo.blit(texto3, rectT3)
            else:
                fondo.blit(fuente1.render(mass_text, True, mass_color),
                           (5, rect.bottom + 43))
                fondo.blit(fuente1.render(radius_text, True, radius_color),
                           (140, rect.bottom + 43))
                fondo.blit(fuente1.render(density_text, True, negro),
                           (130 * 2 - 5, rect.bottom + 43))
                fondo.blit(fuente1.render(gravity_text, True, negro),
                           (140 * 3, rect.bottom + 43))
                if composition_text_comp is not None:
                    composition_text = 'Composition:' + composition_text_comp
                    fondo.blit(
                        fuente1.render(composition_text, True, negro, blanco),
                        (5, rect.bottom + 64))

            fondo.blit(texto1, rectT1)
            fondo.blit(texto2, rectT2)
            punto.update()
            lineas.update()
            lineas.draw(fondo)
            display.update()

    display.quit()
    return data
Пример #17
0
    def __init__(self):
        super(Jackin, self).__init__()
        self.running = False
        self._sprites = LayeredUpdates()
        self._animations = Group()
        self.platten_speed = 40
        self.pressed = set()
        self.cpl = 40
        self.buffer = None
        self.cache = None
        self.char_height = 0
        self.char_width = 0
        self.platten = None
        self.paper = None
        self.mode = None
        self.fade_buffer = None
        self.screen_size = None

        self.cursor = Vector2(200, -70)

        self.document = list()
        self.document.append(list())
        self.current_line = 0

        font_name = 'Apple ][.ttf'
        font_size = 8
        ratio = 10
        color = pygame.Color('goldenrod')

        self.text = [
            ('display', '> '),
            ('wait', 1500),
            ('type', 'CD/HACK'),
            ('display', '\nHACK> '),
            ('type', '\nRUN HACK.BAS'),
            ('wait', 1000),
            ('type', '\nAT&F&D2&C1S0=0X4'),
            ('wait', 1500),
            ('display', '\nOK'),
            ('wait', 1000),
            ('type', '\nATDT0040745129711\n'),
            ('sound', 'modem'),
            ('wait', 18000),
            ('display', '\nCONNECT 14400')
        ]

        self.sounds = {
            'run': load_sound('run.wav'),
            'boot': load_sound('boot.wav'),
            'beep': load_sound('beep.wav'),
            'modem': load_sound('188828__0ktober__modem-dial.wav'),
            'spacebar': [load_sound(i) for i in [
                'spacebar01.wav',
                'spacebar02.wav']],
            'key': [load_sound(i) for i in [
                'keypress01.wav',
                'keypress02.wav',
                'keypress04.wav',
                'keypress05.wav',
                'keypress06.wav',
            ]]

        }

        self.generate_font(font_name, font_size, ratio, color)
        self.set_tab(0)