def __init__(self, rect, state): Entity.__init__(self, None, Vec3(rect.x, rect.y)) self.rect.size = (rect.w, rect.h) self.properties = {} self.thing = None self.layer = 100 self.thing_type = None self.state = state self.impassables = state.impassables
def __init__(self, screen, player, actionables): Entity.__init__(self, spr=Spr(image=pygame.Surface((100, 100)) )) self.screen = screen self.player = player self.visible = False self.layer = 1000000 self.actionable_detector = pyknic.collision.CollisionDetector() self.actionable_detector.register_once('player', 'stuff', [self.player], actionables, \ AABBCollisionStrategy(), (Player, InteractiveThing), self.coll_player_stuff) self.items = [] self.names = []
def render(self, screen_surf, offset=Vec3(0,0), screen_offset=Vec3(0,0)): item_height = 10 name_height = 15 min_width = 90 if not self.visible: return # align to player self.position = Vec3(self.player.position.x+10, self.player.position.y +10) # setup sprite for menu height = 50 + len(self.items) * item_height + \ len(set(self.names)) * name_height i_width = 20 + reduce(max, [len(i) for i, v in self.items]) * item_height n_width = 20 + reduce(max, [len(i) for i in self.names]) * name_height width = max(i_width, n_width, min_width) self.spr.image = pygame.Surface((width, height)) self.spr.image.set_alpha(200) self.spr.image.fill((255, 0,0)) pygame.draw.rect(self.spr.image,(0,0,0), pygame.Rect(0,0, width-1, height-1), 2) # draw menu title font = pygame.font.Font(None,25) text = font.render("Actions",1,(255,255,255,0)) self.spr.image.blit(text,(10,10)) # draw menu items fonta = pygame.font.Font(None,20) fontb = pygame.font.Font(None,15) y = 35 label_text = '' for i in range(len(self.items)): item, _ = self.items[i] if self.names[i] != label_text: label_text = self.names[i] label = fonta.render(label_text, 1, (255,255,255)) self.spr.image.blit(label,(10,y)) y += name_height text = fontb.render("%d: %s" % (i+1, item),1,(255,255,255,0)) self.spr.image.blit(text,(10,y)) y += item_height # actually render Entity.render(self, screen_surf, offset)