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
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)
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)
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)
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)
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)