Ejemplo n.º 1
0
 def seperation(self):
     steering_force = Vector2D()
     for agent in self.world.agents:
         if(agent is not self and agent.tagged):
             toBot = self.pos - agent.pos
             steering_force += Vector2D.normalise(toBot)/Vector2D.length(toBot)
     return steering_force
Ejemplo n.º 2
0
    def pursuit(self, evader):
        evader.mode = 'wander'

        ## OPTIONAL EXTRA... pursuit (you'll need something to pursue!)
        self.toEvader = evader.pos - self.pos
        self.relHeading = Vector2D.dot(evader.heading, self.heading)

        if(Vector2D.dot(self.toEvader, self.heading) > 0 and self.relHeading < -0.95):
            return self.seek(evader.pos)

        lookAheadTime = Vector2D.length(self.toEvader) / (self.max_speed + evader.speed())
        return self.seek(evader.pos + evader.vel * lookAheadTime)
Ejemplo n.º 3
0
    def pursuit(self, evader):
        ''' this behaviour predicts where an agent will be in time T and seeks
            towards that point to intercept it. '''
        evader.mode = 'flee'
## OPTIONAL EXTRA... pursuit (you'll need something to pursue!)
        self.toEvader = evader.pos - self.pos
        self.relHeading = Vector2D.dot(evader.heading, self.heading)

        if(Vector2D.dot(self.toEvader, self.heading) > 0 and self.relHeading < -0.95):
            return self.seek(evader.pos)

        lookAheadTime = Vector2D.length(self.toEvader) / (self.max_speed + evader.speed())
        return self.seek(evader.pos + evader.vel * lookAheadTime)
Ejemplo n.º 4
0
    def pursuit(self, evader):
        ''' this behaviour predicts where an agent will be in time T and seeks
            towards that point to intercept it. '''
        evader.mode = 'flee'
        ## OPTIONAL EXTRA... pursuit (you'll need something to pursue!)
        self.toEvader = evader.pos - self.pos
        self.relHeading = Vector2D.dot(evader.heading, self.heading)

        if (Vector2D.dot(self.toEvader, self.heading) > 0
                and self.relHeading < -0.95):
            return self.seek(evader.pos)

        lookAheadTime = Vector2D.length(
            self.toEvader) / (self.max_speed + evader.speed())
        return self.seek(evader.pos + evader.vel * lookAheadTime)
Ejemplo n.º 5
0
    def Hide(self, hunter, objs, delta):
        DistToClosest = 1000000

        self.BestHidingSpot = None
        for hun in hunter:
            # check for possible hiding spots
            for obj in objs:
                HidingSpot = self.GetHidingPosition(hun, obj)
                HidingDist = Vector2D.distanceSq(HidingSpot, self.pos)
                if HidingDist < DistToClosest and (
                        Vector2D.length(hun.pos - obj.pos) - hun.radius) > 0:
                    DistToClosest = HidingDist
                    self.BestHidingSpot = HidingSpot
        # if we have a best hiding spot, use it

        if self.BestHidingSpot is not None:
            return self.arrive(self.BestHidingSpot, 'fast')  # speed = fast?
        # default - run away!
        return self.pursuit(hunter, delta)
Ejemplo n.º 6
0
    def hide(self,hunter,objs, delta):
        DistToClosest = 1000000
        
        self.BestHidingSpot = None
        hun = hunter
        # check for possible hiding spots
        for obj in objs:
            HidingSpot = self.getHidingPosition(hun,obj)
            HidingDist = Vector2D.distance_sq(HidingSpot,self.pos)
            # render the hiding spots immediatly
            egi.aqua_pen()
            egi.cross(HidingSpot, 5)

            if HidingDist < DistToClosest and (Vector2D.length(hun.pos - obj.pos) - hun.radius) > 0:
                DistToClosest = HidingDist
                self.BestHidingSpot = HidingSpot
        # if we have a best hiding spot, use it

        if self.BestHidingSpot is not None:
            return self.arrive(self.BestHidingSpot, 'fast') # speed = fast?
        # default - run away!
        return self.runAway(hunter, delta)