Exemple #1
0
 def draw_tooltip(self, screen, name, description = []):
     font = Game.get_font(False)
     big_font = Game.get_font(True)
     mouse_pos = pygame.mouse.get_pos()
     
     name_image = GUI.render_string_array([name], big_font, 0, Game.WHITE)
     desc_image = GUI.render_string_array(description, font, 0, Game.WHITE)
     name_width = name_image.get_width()
     name_height = name_image.get_height()
     desc_width = desc_image.get_width()
     desc_height = desc_image.get_height()
     width = max(name_width, desc_width)
     height = name_height
     if desc_height > 0:
         height += TOOLTIP_GAP + desc_height
     corner = 4 * Game.SCALE
     edge = 2 * corner
     
     pos = (mouse_pos[0] + corner, mouse_pos[1])
     
     #if too long, flip it to the other side of the mouse
     if pos[0] + width + 2 * corner > Game.SCREEN_WIDTH:
         pos = (max(pos[0] - width - 4 * corner, 0), pos[1]) #gap for mouse
     if pos[1] + height + 2 * corner > Game.SCREEN_HEIGHT:
         pos = (pos[0], pos[1] - height - 2 * corner)
     
     #top border
     screen.blit(Images.tooltip_pieces[0][0], pos)
     for x in range(0, width, edge):
         screen.blit(Images.tooltip_pieces[0][1], (pos[0] + corner + x, pos[1]))
     screen.blit(Images.tooltip_pieces[0][2], (pos[0] + 3 * corner + x, pos[1]))
     
     #middle
     slices = math.ceil(height / edge)
     for s in range(slices):
         y = height * s // slices
         screen.blit(Images.tooltip_pieces[1][0], (pos[0], pos[1] + corner + y))
         for x in range(0, width, edge):
             screen.blit(Images.tooltip_centers[((x + y) // edge) % 4], (pos[0] + corner + x, pos[1] + corner + y))
         screen.blit(Images.tooltip_pieces[1][2], (pos[0] + 3 * corner + x, pos[1] + corner + y))
     
     #bottom border
     y = corner + height
     screen.blit(Images.tooltip_pieces[2][0], (pos[0], pos[1] + y))
     for x in range(0, width, edge):
         screen.blit(Images.tooltip_pieces[2][1], (pos[0] + corner + x, pos[1] + y))
     screen.blit(Images.tooltip_pieces[2][2], (pos[0] + 3 * corner + x, pos[1] + y))
     
     #text
     screen.blit(name_image, (pos[0] + corner, pos[1] + corner))
     screen.blit(desc_image, (pos[0] + corner, pos[1] + corner + name_height + TOOLTIP_GAP))
Exemple #2
0
def render():
    if gamemode == MAINMENU or gamemode == PAUSEMENU:
        menu.render_background(screen)
        menu.render(screen)
        
    elif gamemode in (PLAYING, OPENGUI):
        player = world.player
        shift = pygame.key.get_pressed()[pygame.K_LSHIFT] or pygame.key.get_pressed()[pygame.K_RSHIFT]
        screen.fill(SKY)
        
        #background
        world.render(screen, viewport, True)
        if shift:
            player.draw_block_highlight(world, pygame.mouse.get_pos(), viewport, screen, shift)
        world.render_breaks(screen, viewport, True)
        
        #foreground
        world.render(screen, viewport, False)
        if not shift:
            player.draw_block_highlight(world, pygame.mouse.get_pos(), viewport, screen, shift)
        world.render_breaks(screen, viewport, False)
        player.render(screen, Convert.world_to_viewport(player.pos, viewport))
        
        #add blue overlay- not completely sure this is good
        overlay = pygame.Surface((SCREEN_WIDTH, SCREEN_HEIGHT))
        overlay.set_alpha(64)
        overlay.fill(BLUE)
        screen.blit(overlay, (0, 0))
        
        if gamemode == PLAYING:
            hotbarGui.render(screen)
        else:
            gui.render(screen)
        
        if DEBUG:
            #render debug text
            chunk = world.loaded_chunks.get(Convert.world_to_chunk(player.pos[0])[1])
            debugtext = ["fps: {0:.2f}".format(clock.get_fps()),
                        "pos: [{0:.2f}".format(player.pos[0]) + ", {0:.2f}]".format(player.pos[1]),
                        "chunk: " + str(chunk.x),
                        "biome: " + str(chunk.biome["name"])]
            debugimg = GUI.render_string_array(debugtext, font, 0, WHITE)
            h = SCREEN_HEIGHT - debugimg.get_height()
            screen.blit(debugimg, (2 * SCALE, h))
    pygame.display.flip()
Exemple #3
0
 def render(self, left, top, screen, hotbargap, item_to_skip = None):
     font = Game.get_font()
     mouse_pos = pygame.mouse.get_pos()
     
     tooltip_item = None
     for r in range(len(self.items)):
         for c in range(len(self.items[r])):
             inv_item = self.items[r][c]
             if inv_item is not None and inv_item is not item_to_skip:
                 #c and r are flipped here so it renders across then down
                 slotX = left + GUI.SCALING * 13 / 8 +  c * GUI.SCALING
                 slotY = top + GUI.SCALING / 2 + r * GUI.SCALING
                 if r > 0 and hotbargap:
                     slotY += HOTBAR_GAP
                 
                 inv_item.render((slotX, slotY), screen)
                 
                 rect = pygame.rect.Rect(slotX, slotY, GUI.SCALING, GUI.SCALING)
                 if rect.collidepoint(mouse_pos):
                     tooltip_item = inv_item
                     highlight_pos = (slotX, slotY)
     #TODO draw armor if not none
     
     if tooltip_item is not None and item_to_skip is None:
         screen.blit(Images.highlight_image, highlight_pos)
         
         text = World.items[tooltip_item.name]["description"]
         if isinstance(text, str):
             text = [text]
         else:
             text = text.copy()
         displayName = World.items[tooltip_item.name]["displayName"]
         text.insert(0, displayName)
         text_image = GUI.render_string_array(text, font, 0, Game.WHITE)
         
         width = text_image.get_width()
         height = text_image.get_height()
         corner = 4 * Game.SCALE
         
         pos = (mouse_pos[0] + corner, mouse_pos[1])
         
         #if too long, flip it to the other side of the mouse
         if pos[0] + width + 2 * corner > Game.SCREEN_WIDTH:
             pos = (max(pos[0] - width - 4 * corner, 0), pos[1]) #gap for mouse
         if pos[1] + height + 2 * corner > Game.SCREEN_HEIGHT:
             pos = (pos[0], pos[1] - height - 2 * corner)
         
         screen.blit(Images.tooltip_pieces[0][0], pos)
         for x in range(0, width, 2 * corner):
             screen.blit(Images.tooltip_pieces[0][1], (pos[0] + corner + x, pos[1]))
         screen.blit(Images.tooltip_pieces[0][2], (pos[0] + 3 * corner + x, pos[1]))
         
         for y in range(0, height, 2 * corner):
             screen.blit(Images.tooltip_pieces[1][0], (pos[0], pos[1] + corner + y))
             for x in range(0, width, 2 * corner):
                 screen.blit(Images.tooltip_centers[((x + y) // (2 * corner)) % 4], (pos[0] + corner + x, pos[1] + corner + y))
             screen.blit(Images.tooltip_pieces[1][2], (pos[0] + 3 * corner + x, pos[1] + corner + y))
         
         screen.blit(Images.tooltip_pieces[2][0], (pos[0], pos[1] + 3 * corner + y))
         for x in range(0, width, 2 * corner):
             screen.blit(Images.tooltip_pieces[2][1], (pos[0] + corner + x, pos[1] + 3 * corner + y))
         screen.blit(Images.tooltip_pieces[2][2], (pos[0] + 3 * corner + x, pos[1] + 3 * corner + y))
         
         screen.blit(text_image, (pos[0] + corner, pos[1] + corner))