Exemple #1
0
 def __init__(self, grid, actor):
     super(PGrid, self).__init__(grid.width, grid.height)
     self.grid=[[PTile(grid[i,j]) for j in xrange(grid.height)] for i in xrange(grid.width)]
     self.fov=FOV()
     self.actor=actor
     self.target=None
     self.monsters={}
Exemple #2
0
class PGrid(Grid):
    def __init__(self, grid, actor):
        super(PGrid, self).__init__(grid.width, grid.height)
        self.grid=[[PTile(grid[i,j]) for j in xrange(grid.height)] for i in xrange(grid.width)]
        self.fov=FOV()
        self.actor=actor
        self.target=None
        self.monsters={}

    def calculateFOV(self, radius=None):
        loc=self.actor.parent.loc
        tile=self[loc[0],loc[1]].tile
        me=(loc[0],loc[1],tile.blocksLOS())
        world=[(i,j,self[i,j].tile.blocksLOS()) for i in xrange(self.width) for j in xrange(self.height)]
        fov=self.actor.getFOV()
        if fov==PI_2:
            ret=self.fov.calculateHexFOV(me,world)
        else:
            ret=self.fov.calculateHexFOV(me, world, fov, self.actor.facing)
        for r in ret:
            self[r[0][0],r[0][1]].d2=r[2]
            if r[1]>1:
                logger.error(str(me))
                logger.error(str(r))
                raise AssertionError("cover > 1")
            self[r[0][0],r[0][1]].cover=sin(r[1]*pi/2)
        self.monsters=dict([(tile.tile.loc,tile.top()) for tile in self.tiles if tile.cover<1 and isinstance(tile.top(), Actor) and tile.top()!=self.actor])
        visible_actors=set(self.monsters.values())
        for tile in self.tiles:
            if tile.cover==1 and tile.memory and tile.memory.obj in visible_actors:
                tile.memory = Memory(tile.tile.terrain)
        self.monsters_keys=sorted(self.monsters.keys(), key=lambda x: pow(x[0]-me[0],2)+pow(x[1]-me[1],2)-(x[0]-me[0])*(x[1]-me[1]))
        logger.debug('me:'+str(self.actor.parent.loc)+' them:'+str(self.monsters_keys))
    
    def examineTile(self, loc):
        objects=None
        if self[loc].cover==1:
            objects=[]
            if self[loc].memory:
                objects.append(self[loc].memory.obj)
            if self[loc].was_seen:
                terrain=self[loc].tile.terrain
                if terrain not in objects:
                    objects.append(self[loc].tile.terrain)
        else:
            objects=self[loc].tile.contents()
        return [(id(obj), obj.getShortDescription(self[loc].cover), obj.getLongDescription(self[loc].cover)) for obj in objects]