Exemplo n.º 1
0
    def hunt( self, task ):
        if self.body.node.isEmpty():
            return Task.done

        
        if self.target == None or self.target.isEmpty() or self.target.getTag("type") == "destroyed":
            list = render.findAllMatches("**/=type=robot")
            print "list size = " + str(list.size())
            if list.size() < 2:
                return Task.cont

            target = randint(0, list.size() - 1 )
            self.target = list.getPath( target )
            if self.target == self.body.node:
                return Task.cont

        if task.time - self.time <= 0.1:
            return Task.cont
        self.time = task.time
        
        if calcDistance2D( self.target.getPos().getXy(), self.body.node.getPos().getXy() ) < 1:
            if task.time - self.bulletTime >= 5:
                Bullet(self.body.node.getX(), self.body.node.getY(), self.body.node.getZ(), calcDirection( self.body.node.getPos(), self.target.getPos() ),self.id)
                self.bulletTime = task.time
        else:
            direction = calcDirection2D(self.body.node.getPos().getXy(), self.target.getPos().getXy() )
           # print "in hunt direction="
          #  print direction
            self.body.node.setH(Vec2.signedAngleDeg(Vec2(0,1), Vec2(direction.getX(),direction.getY())))
            self.body.node.setX( self.body.node.getX() + direction.getX() )
            self.body.node.setY( self.body.node.getY() + direction.getY() )

        return Task.cont
Exemplo n.º 2
0
    def __init__(self, x, y, z, direction, id):
        NodePath.__init__(self,loader.loadModel("../Models/missile"))
 
        self.reparentTo(render)
        self.setPos(x, y, z)
        
        self.direction = Vec3()
        self.direction.set(direction.getX(), direction.getY(), direction.getZ())
        self.setH(Vec2.signedAngleDeg(Vec2(0,1), Vec2(direction.getX(),direction.getY())))

        if self.direction.length() == 0:
            self.removeNode()
            return
        
        self.direction /= direction.length()

        min, max = self.getTightBounds()
        size = max - min
        maximum = -1
        for i in size:
            if i > maximum:
                maximum = i

        self.cnode = CollisionNode('bullet')
        self.cnode.setTag( "id", str(id) )
        self.cnode.addSolid(CollisionSphere(0, 0, 0, maximum + 0.3))
        self.cnodePath = self.attachNewNode(self.cnode)
        self.cnodePath.show()
        base.cTrav.addCollider(self.cnodePath, base.event)

        taskMgr.add(self.updateBullet, "update Bullet")

        print radiansToDegrees(atan2(direction.getY(),direction.getX()))
Exemplo n.º 3
0
    def randomWalk( self, task ):
        if self.body.node == None or self.body.node.isEmpty():
            return Task.done

        
        if task.time - self.time <= 0.1:
            return Task.cont
        self.time = task.time
                    
            
        if calcDistance2D(self.destination, self.body.node.getPos().getXy() ) <= 1:
            self.setRandomPoint( self.destination )

        direction = calcDirection2D(self.body.node.getPos().getXy(), self.destination)
        #print "randomWalk destination ="
        #print direction
        self.body.node.setH(Vec2.signedAngleDeg(Vec2(0,1), Vec2(direction.getX(),direction.getY())))
        self.body.node.setX( self.body.node.getX() + direction.getX() )
        self.body.node.setY( self.body.node.getY() + direction.getY() )
        return Task.cont