Ejemplo n.º 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))
Ejemplo n.º 2
0
 def __init__(self, text, pos, small = False):
     self.text = text
     self.pos = pos
     if small:
         imgurl = "img/gui/label_small.png"
     else:
         imgurl = "img/gui/label.png"
     self.img = Images.load_imageurl(imgurl)
     self.font = Game.get_font()
Ejemplo n.º 3
0
 def render(self, pos, screen):
     if self.can_place:
         img = World.block_images[False][World.get_block_id(self.name)]
     else:
         img = self.imgs[0]
     screen.blit(img, (pos[0] + GUI.SCALING / 6, pos[1] + GUI.SCALING / 6))
     if self.stackable:
         countimg = Game.get_font().render(str(self.count), 0, Game.WHITE)
         screen.blit(countimg, (pos[0] + 3 * Game.SCALE, pos[1] + 3 * Game.SCALE))
Ejemplo n.º 4
0
 def __init__(self, pos, text, effect, small = False):
     self.pos = pos
     self.text = text
     self.effect = effect
     self.pressed = False
     self.font = Game.get_font()
     if small:
         url_base = "img/gui/button_small"
     else:
         url_base = "img/gui/button"
     self.unpressed_image = Images.load_imageurl(url_base + "_up.png")
     self.hovered_image = Images.load_imageurl(url_base + "_hover.png")
     self.pressed_image = Images.load_imageurl(url_base + "_down.png")
Ejemplo n.º 5
0
 def render(self, screen):
     left = (Game.SCREEN_WIDTH - 192) / 2
     top = (Game.SCREEN_HEIGHT - 192) / 2
     pygame.draw.rect(screen, Game.BLACK, pygame.Rect(left, top, 192, 192), 0)
     inventory = self.player.inventory
     for r in range(len(inventory)):
         for c in range(len(inventory[r])):
             inv_item = inventory[r][c]
             if inv_item is not None:
                 # c and r are flipped here so it renders across then down
                 screen.blit(
                     World.block_images[World.get_block_id(inv_item.itemtype)], (left + c * 32, top + r * 32)
                 )
                 countimg = Game.get_font().render(str(inv_item.count), 0, Game.WHITE)
                 screen.blit(countimg, (left + c * 32, top + r * 32))
Ejemplo n.º 6
0
 def render(self, screen, pos):
     #this is temporary, until I fix the structure generation
     txt = Game.get_font().render("*", 0, Game.WHITE)
     screen.blit(txt, pos)
Ejemplo n.º 7
0
 def render(self, screen, pos):
     #this is temporary, until I fix the structure generation
     txt = Game.get_font().render("*", 0, Game.WHITE)
     screen.blit(txt, pos)
 
 #TODO: update, hold item and transfer it- how?
Ejemplo n.º 8
0
 def render(self, pos, screen):
     screen.blit(self.img, (pos[0] + GUI.SCALING / 6, pos[1] + GUI.SCALING / 6))
     if self.stackable:
         countimg = Game.get_font().render(str(self.count), 0, Game.WHITE)
         screen.blit(countimg, (pos[0] + 3 * Game.SCALE, pos[1] + 3 * Game.SCALE))
Ejemplo n.º 9
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))