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))
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()
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))
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")
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))
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)
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?
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))
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))