コード例 #1
0
 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
コード例 #2
0
 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 = []
コード例 #3
0
    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)