예제 #1
0
    def hide(self, hunter_position, delta):

        to_hunter = self.position - hunter_position
        if to_hunter.length() > self.panic_radius:
            return self.weighted_sum(delta)

        best_hiding_spot = None
        best_hiding_distance = None

        for object_position in self.world.objects:

            hiding_spot = self.get_hiding_spot(
                hunter_position, Vector2D(object_position.x,
                                          object_position.y))
            hiding_distance = self.position.distance_sq(hiding_spot)
            if not best_hiding_spot or hiding_distance < best_hiding_distance:
                best_hiding_spot = hiding_spot
                best_hiding_distance = hiding_distance

            egi.red_pen()
            egi.cross(hiding_spot, 10)

        if best_hiding_spot:
            return self.arrive(best_hiding_spot)

        return self.flee(hunter_position)
예제 #2
0
파일: agent.py 프로젝트: MWilliams15/AI4G
    def render(self, color=None):

        # draw the ship
        egi.set_pen_color(name=self.color)

        egi.cross(self.pos,10)
        egi.circle(self.pos,10)
예제 #3
0
파일: agent.py 프로젝트: MWilliams15/AI4G
    def render(self, color=None):
        ''' Draw the triangle agent with color'''
        # draw the ship
        egi.set_pen_color(name=self.color)
        pts = self.world.transform_points(self.vehicle_shape, self.pos,
                                          self.heading, self.side, self.scale)
        # draw it!
        egi.closed_shape(pts)

        if self.hiding_spot:
            egi.cross(self.hiding_spot, 5)
        # draw wander info?

        # add some handy debug drawing info lines - force and velocity
        if self.show_info:
            s = 0.5  # <-- scaling factor
            # force
            egi.red_pen()
            egi.line_with_arrow(self.pos, self.pos + self.force * s, 5)
            # velocity
            egi.grey_pen()
            egi.line_with_arrow(self.pos, self.pos + self.vel * s, 5)
            # net (desired) change
            egi.white_pen()
            egi.line_with_arrow(self.pos + self.vel * s,
                                self.pos + (self.force + self.vel) * s, 5)
            egi.line_with_arrow(self.pos,
                                self.pos + (self.force + self.vel) * s, 5)
예제 #4
0
    def render(self):
        if self.hunter is not None:
            self.hunter.render()
        for agent in self.agents:
            agent.render()
        for hide in self.hideObjects:
            hide.render()
        if self.target:
            egi.red_pen()
            egi.cross(self.target, 10)

        if self.showinfo:
            # added additional info to info text in regards to emergant group behaviour ##2018-04-16
            infotext = ', '.join(set(agent.mode for agent in self.agents))
            egi.white_pen()
            egi.text_at_pos(0, 0, infotext)
            infotext = ': '.join(('Cohesion Modifier', str(self.cohesion)))
            egi.white_pen()
            egi.text_at_pos(0, 12, infotext)
            infotext = ': '.join(('Seperation Modifier', str(self.seperation)))
            egi.white_pen()
            egi.text_at_pos(0, 24, infotext)
            infotext = ': '.join(('Alignment Modifier', str(self.alignment)))
            egi.white_pen()
            egi.text_at_pos(0, 36, infotext)
            infotext = ': '.join(('Radius', str(self.radius)))
            egi.white_pen()
            egi.text_at_pos(0, 48, infotext)
예제 #5
0
    def hide(self, hunter):

        DistToClosest = float('inf')
        BestHidingSpot = Vector2D()

        to_target = hunter.pos - self.pos
        panic_range = 60
        dist = to_target.length()
        if dist < panic_range:
            self.visible = False

        for obst in self.world.obstacle:
            hidingSpot = self.GetHidingPosition(hunter.pos, obst)
            hidingDist = Vector2D.distance_sq(
                hidingSpot, self.pos
            )  #change to self.pos for closest obst search, and change vector to positive
            egi.cross(hidingSpot, 4)
            if hidingDist < DistToClosest:
                DistToClosest = hidingDist
                BestHidingSpot = hidingSpot

        if BestHidingSpot:
            egi.line_by_pos(hunter.pos, BestHidingSpot)
            return self.arrive(BestHidingSpot, 'fast')
        return self.flee(hunter.pos)
예제 #6
0
    def render(self):
        for agent in self.agents:
            agent.render()

        if self.target:
            egi.red_pen()
            egi.cross(self.target, 10)

        for obstacle in self.obstacle:
            obstacle.render()

        if self.show_info:
            infotext = ': '.join(('Radius', str(self.radius)))
            egi.white_pen()
            egi.text_at_pos(0, 487, infotext)
            infotext = ': '.join(('Cohesion', str(self.cohesion)))
            egi.white_pen()
            egi.text_at_pos(0, 448, infotext)
            infotext = ': '.join(('Seperation', str(self.separation)))
            egi.white_pen()
            egi.text_at_pos(0, 461, infotext)
            infotext = ': '.join(('Alignment', str(self.alignment)))
            egi.white_pen()
            egi.text_at_pos(0, 474, infotext)
            infotext = ', '.join(set(agent.mode for agent in self.agents))
            egi.white_pen()
            egi.text_at_pos(0, 0, infotext)
예제 #7
0
파일: fish.py 프로젝트: geordiemhall/fishy
	def hide(self, hunters, obstacles, closest=True):

		hidingPlaces = []

		for hunter in hunters:
			for obstacle in obstacles:
				dir = hunter.pos.distanceTo(obstacle.pos).get_normalised()
				length = hunter.pos.distance(obstacle.pos) + obstacle.boundingRadius + self.boundingRadius
				
				# Calculate the position of the hiding spot
				place = hunter.pos + dir * length

				# If this spot isn't inside any other obstacles, then add it to the list
				if(not True in [ob.containsPoint(place) for ob in obstacles]):
					hidingPlaces.append(place)

		self.hidingPlaces = hidingPlaces # store for debugging purposes

		# Find the 'best' hiding place from our list
		self.bestPlace = self.bestHidingPlaceFromHunter(hidingPlaces=hidingPlaces, hunter=hunters[0], closest=closest)

		# print 'bestPlace', self.bestPlace

		# seek = self.seek(self.bestPlace)
		arrive = self.arrive(self.bestPlace, 'fast')

		if(self.chosenOne and self.world.drawHidingSpots):
			for place in self.hidingPlaces or []:
				egi.red_pen()
				if(place == self.bestPlace): egi.green_pen()
				egi.cross(place, 10)

		return arrive
예제 #8
0
    def drawEye(self, color=None):

        if (self.dead):
            egi.set_pen_color(self.color)
            egi.cross(self.renderPosition + self.side * self.body,
                      self.body * 5)
        else:
            egi.set_pen_color(rgba('fff', 0.5))
            egi.circle(self.renderPosition + self.side * self.body, self.body)
예제 #9
0
파일: guppy.py 프로젝트: geordiemhall/fishy
	def drawEye(self, color=None):
		

		if(self.dead):
			egi.set_pen_color(self.color)
			egi.cross(self.renderPosition + self.side * self.body, self.body * 5)
		else:	
			egi.set_pen_color(rgba('fff', 0.5))
			egi.circle(self.renderPosition + self.side * self.body, self.body)
예제 #10
0
 def update(self, delta):
     if not self.paused:
         for agent in self.agents:
             agent.update(delta)
         for hidingSpot in self.hidingSpots:
             egi.blue_pen()
             if self.bestHidingSpot:
                 if self.bestHidingSpot == hidingSpot:
                     egi.green_pen()
             egi.cross(hidingSpot, 10)
예제 #11
0
    def render(self):
        for projectile in self.projectiles:
            projectile.render()

        if self.target:
            egi.red_pen()
            egi.cross(self.target.pos, self.target.size)

        if self.attacker:
            self.attacker.render()
예제 #12
0
파일: agent.py 프로젝트: Jakee1510/AI4GS
    def render(self, color=None):
        egi.blue_pen()
        egi.cross(self.predictedtarget, 5)
        ''' Draw the triangle agent with color'''
        # draw the path if it exists and the mode is follow
        if self.mode == 'follow_path':
            ## ...
            self.path.render()
            pass

        if self.is_hit:
            self.visible = False

        # draw the ship
        egi.set_pen_color(name=self.color)
        pts = self.world.transform_points(self.vehicle_shape, self.pos,
                                          self.heading, self.side, self.scale)

        # draw it!
        egi.closed_shape(pts)

        self.is_hit = False

        # draw wander info?
        if self.mode == 'wander':
            wnd_pos = Vector2D(self.wander_dist, 0)
            wld_pos = self.world.transform_point(wnd_pos, self.pos,
                                                 self.heading, self.side)
            # draw the wander circle
            egi.green_pen()
            egi.circle(wld_pos, self.wander_radius)
            # draw the wander target (little circle on the big circle)
            egi.red_pen()
            wnd_pos = (self.wander_target + Vector2D(self.wander_dist, 0))
            wld_pos = self.world.transform_point(wnd_pos, self.pos,
                                                 self.heading, self.side)
            egi.circle(wld_pos, 3)
            ## ...
            pass

        # add some handy debug drawing info lines - force and velocity
        if self.show_info:
            s = 0.5  # <-- scaling factor
            # force
            egi.red_pen()
            egi.line_with_arrow(self.pos, self.pos + self.force * s, 5)
            # velocity
            egi.grey_pen()
            egi.line_with_arrow(self.pos, self.pos + self.vel * s, 5)
            # net (desired) change
            egi.white_pen()
            egi.line_with_arrow(self.pos + self.vel * s,
                                self.pos + (self.force + self.vel) * s, 5)
            egi.line_with_arrow(self.pos,
                                self.pos + (self.force + self.vel) * s, 5)
예제 #13
0
파일: fish.py 프로젝트: geordiemhall/fishy
	def pursuit(self, target): 

		

		projected = self.projectedPosition(target)

		if(self.world.drawDebug and self.chosenOne):
			egi.red_pen()
			egi.cross(projected, 10)

		return self.seek(projected)
예제 #14
0
파일: world.py 프로젝트: Jakee1510/AI4GS
    def render(self):
        for agent in self.agents:
            agent.render()

        if self.target:
            egi.red_pen()
            egi.cross(self.target, 10)

        if self.showinfo:
            infotext = ', '.join(set(agent.mode for agent in self.agents))
            egi.white_pen()
            egi.text_at_pos(0, 0, infotext)
예제 #15
0
    def render(self, color=None):
        ''' Draw the triangle agent with color'''
        if self.BestHidingSpot is not None:
            egi.white_pen()
            egi.cross(Vector2D(self.BestHidingSpot.x, self.BestHidingSpot.y),
                      5)

        egi.set_pen_color(name=self.color)
        pts = self.world.transform_points(self.vehicle_shape, self.pos,
                                          self.heading, self.side, self.scale)
        # draw it!
        egi.closed_shape(pts)
예제 #16
0
    def render(self, color=None):
        """ Draw the triangle agent with color"""
        egi.set_pen_color(name=self.color)
        pts = self.world.transform_points(self.vehicle_shape, self.pos,
                                          self.heading, self.side, self.scale)

        # draw it!
        egi.closed_shape(pts)

        # display each possible hiding location
        for spot in self.hide_locations:
            if spot == self.hide_locations[-1]:
                egi.set_pen_color(name='GREEN')
            egi.cross(spot, 10)
예제 #17
0
    def render(self):
        for agent in self.agents:
            agent.render()

        self.hunter.render()

        if self.target:
            egi.red_pen()
            egi.cross(self.target, 10)

        if self.showinfo:
            controltext = 'Cohesion [Q/W]\nSeparation [T\Y]\nAlignment [K/L]\nNeighbourhood Radius [N/M]'
            infotext = ', '.join(set(agent.mode for agent in self.agents))
            egi.white_pen()
            egi.text_at_pos(0, 15, controltext)
            egi.text_at_pos(0, 0, infotext)
예제 #18
0
    def render(self):
        self.hunter.render()
        self.cannon.render()

        for projectile in self.projectiles:
            projectile.render()

        if self.target:
            egi.red_pen()
            egi.cross(self.target, 10)

        if self.showinfo:
            infotext = ', '.join(
                set(projectile.mode for projectile in self.projectiles))
            egi.white_pen()
            egi.text_at_pos(0, 0, infotext)
예제 #19
0
파일: world.py 프로젝트: koalaah/aiforgames
    def render(self):
        for agent in self.agents:
            agent.render()

        if self.target:
            egi.red_pen()
            egi.cross(self.target, 10)

        if self.show_info:
            text = 'Mode: ' + self.agents[0].mode + \
            '\nWander: ' + str(round(self.agents[0].wanderAmount, 2)) + \
            '\nSeparation: ' + str(round(self.agents[0].separationAmount, 2)) + \
            '\nCohesion: ' + str(round(self.agents[0].cohesionAmount, 2)) + \
            '\nAlignment ' + str(round(self.agents[0].alignmentAmount, 2))

            egi.white_pen()
            egi.text_at_pos(10, 420, text)
예제 #20
0
    def render(self):
        for agent in self.agents:
            agent.render()

        if self.target:
            egi.red_pen()
            egi.cross(self.target, 10)

        if self.show_info:
            infotext = \
                'Mode: ' + self.agents[0].mode + \
                ', Local group radius: ' + str(round(self.agents[0].local_group_radius, 2)) + \
                ', Separation: ' + str(round(self.agents[0].separation_multiplier, 2)) + \
                ', Cohesion: '   + str(round(self.agents[0].cohesion_multiplier, 2)) + \
                ', Alignment: '  + str(round(self.agents[0].alignment_multiplier, 2))
            egi.white_pen()
            egi.text_at_pos(0, 0, infotext)
예제 #21
0
    def render(self, color=None):
        ''' Draw the triangle agent with color'''
        # draw the path if it exists and the mode is follow
        if self.mode == 'follow_path':
            ## ...
            self.path.render()

        # draw the ship
        egi.set_pen_color(name=self.color)
        pts = self.world.transform_points(self.vehicle_shape, self.pos,
                                          self.heading, self.side, self.scale)
        # draw it!
        egi.closed_shape(pts)

        # draw wander info?
        if self.mode == 'wander':
            ## ...
            wnd_pos = Vector2D(self.wander_dist, 0)
            wld_pos = self.world.transform_point(wnd_pos, self.pos, self.heading, self.side)

            egi.green_pen()
            egi.circle(wld_pos, self.wander_radius)

            egi.red_pen()
            wnd_pos = (self.wander_target + Vector2D(self.wander_dist, 0))
            wld_pos = self.world.transform_point(wnd_pos, self.pos, self.heading, self.side)
            egi.circle(wld_pos, 3)

        if self.mode == 'hide':
            egi.green_pen()
            egi.cross(self.besthidingspot, 5)

        # add some handy debug drawing info lines - force and velocity
        if self.show_info:
            s = 0.5 # <-- scaling factor
            # force
            egi.red_pen()
            egi.line_with_arrow(self.pos, self.pos + self.force * s, 5)
            # velocity
            egi.grey_pen()
            egi.line_with_arrow(self.pos, self.pos + self.vel * s, 5)
            # net (desired) change
            egi.white_pen()
            egi.line_with_arrow(self.pos+self.vel * s, self.pos+ (self.force+self.vel) * s, 5)
            egi.line_with_arrow(self.pos, self.pos+ (self.force+self.vel) * s, 5)
예제 #22
0
    def render(self):
        
        for hidingspot in self.hidingspots:
            egi.blue_pen()
            egi.cross(hidingspot, 5)

        for obstacle in self.obstacles:
            obstacle.render()

        self.hunter.render()

        for agent in self.agents:
            agent.render()

        if self.show_info:
            infotext = ', '.join(set(agent.mode for agent in self.agents))
            egi.white_pen()
            egi.text_at_pos(0, 0, infotext)
예제 #23
0
    def render(self):
        for agent in self.agents:
            agent.render()

        if self.target:
            egi.red_pen()
            egi.cross(self.target, 10)

        if self.hunter:
            agent.render('GREEN')

        if self.show_info:
            infotext = ', '.join(set(agent.mode for agent in self.agents))
            infotext += ', '
            infotext += ' , '.join(
                set(agent.attribute for agent in self.agents))
            egi.white_pen()
            egi.text_at_pos(0, 0, infotext)
예제 #24
0
    def hide(self, hunter_pos, delta):
        if self.world.hunter is self:
            return self.wander(delta)

        best_hiding_spot = None
        best_hiding_dist = 99999999999

        for obs in self.world.obstacles:
            boundary_dist = obs.radius + (obs.radius/2)
            hiding_spot = obs.pos + Vector2D.get_normalised(obs.pos - hunter_pos) * boundary_dist
            hiding_dist = Vector2D.distance(self.pos, hiding_spot)**2

            if hiding_dist < best_hiding_dist:
                best_hiding_spot = hiding_spot
                best_hiding_dist = hiding_dist
            egi.green_pen()
            egi.cross(hiding_spot,10)

        return self.arrive(best_hiding_spot, "fast")
예제 #25
0
파일: world.py 프로젝트: MWilliams15/AI4G
    def render(self):
        for agent in self.agents:
            agent.render()

        for hunter in self.hunters:
            hunter.render()

        for obstacle in self.obstacles:
            obstacle.render()


        if self.target:
            egi.red_pen()
            egi.cross(self.target, 10)

        if self.show_info:
            infotext = ', '.join(set(agent.mode for agent in self.agents))
            egi.white_pen()
            egi.text_at_pos(0, 0, infotext)
예제 #26
0
    def render(self):
        for agent in self.agents:
            if agent is not self.hunter:
                agent.render()
            else:
                agent.render("GREEN")

        for obs in self.obstacles:
            obs.render()

        if self.target:
            egi.red_pen()
            egi.cross(self.target, 10)

        if self.show_info:
            infotext = ', '.join(set(agent.mode for agent in self.agents))
            infotext += ', '
            infotext += ' , '.join(
                set(agent.attribute for agent in self.agents))
            egi.white_pen()
            egi.text_at_pos(0, 0, infotext)
예제 #27
0
    def render(self):
        for agent in self.agents:
            if agent is not self.hunter:
                agent.render()
            else:
                agent.render("GREEN")


        for obs in self.obstacles:
            obs.render()

        if self.target:
            egi.red_pen()
            egi.cross(self.target, 10)


        if self.show_info:
            infotext = ', '.join(set(agent.mode for agent in self.agents))
            infotext += ', '
            infotext += ' , '.join(set(agent.attribute for agent in self.agents))
            egi.white_pen()
            egi.text_at_pos(0, 0, infotext)
예제 #28
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) 
예제 #29
0
    def render(self):
        for agent in self.agents:
            if agent.mode == 'hunt':
                egi.blue_pen()
                for spot in agent.hiding_spots:
                    egi.cross(spot, 10)
            elif agent.mode == 'prey':
                egi.green_pen()
                egi.circle(agent.best_spot, 10)
            agent.render()

        for obstacle in self.obstacles:
            obstacle.render()

        if self.target:
            egi.red_pen()
            egi.cross(self.target, 10)

        if self.show_info:
            infotext = ', '.join(set(agent.mode for agent in self.agents))
            egi.white_pen()
            egi.text_at_pos(0, 0, infotext)
예제 #30
0
파일: world.py 프로젝트: raryin/spike7
    def render(self):
        for agent in self.agents:
            agent.render()

        if self.target:
            egi.red_pen()
            egi.cross(self.target, 10)

        if self.show_info:
            botSpeedText = "Bot Speed(q,w): " + str(agent.max_speed)
            alignFactText = "Alignment Factor(a,s): " + str(
                agent.AlignmentFactor)
            cohFactText = "Cohesion Factor(z,x): " + str(agent.CohesionFactor)
            sepFactText = "Separation Factor(c,v): " + str(
                agent.SeparationFactor)
            agent = self.agents[0]
            infotext = ', '.join(set(agent.mode for agent in self.agents))
            egi.white_pen()
            egi.text_at_pos(0, 0, infotext)
            egi.text_at_pos(150, 0, botSpeedText)
            egi.text_at_pos(150, 13, alignFactText)
            egi.text_at_pos(150, 26, cohFactText)
            egi.text_at_pos(150, 39, sepFactText)
예제 #31
0
    def render(self, color=None):
        ''' Draw the triangle agent with color'''
        # draw the ship
        egi.set_pen_color(name=self.color)
        pts = self.world.transform_points(self.vehicle_shape, self.pos,self.heading, self.side, self.scale)
        # draw it!
        egi.closed_shape(pts)

        #draw some patrol target
        egi.red_pen()
        for target in self.world.targets:
            egi.cross(target, 10)

        ''' Draw bullets '''
        egi.grey_pen()
        if self.mode == 'fire':
            self.shoot_enemy()

        if self.mode == 'reload':
            self.color = 'YELLOW'
            self.reload_gun()
            if self.ammo == 10:
                self.mode = 'soldier'
                self.color = 'GREEN'
예제 #32
0
    def render(self, color=None):
        ''' Draw the triangle agent with color'''
        # draw the ship
        egi.set_pen_color(name=self.color)
        pts = self.world.transform_points(self.vehicle_shape, self.pos,
                                          self.heading, self.side, self.scale)
        # draw it!
        egi.closed_shape(pts)

        #draw some patrol target
        egi.red_pen()
        for target in self.world.targets:
            egi.cross(target, 10)
        ''' Draw bullets '''
        egi.grey_pen()
        if self.mode == 'fire':
            self.shoot_enemy()

        if self.mode == 'reload':
            self.color = 'YELLOW'
            self.reload_gun()
            if self.ammo == 10:
                self.mode = 'soldier'
                self.color = 'GREEN'
예제 #33
0
    def render(self):
        egi.green_pen()
        egi.cross(self.pos, self.size)

        egi.blue_pen()
        egi.cross(self.aimpos, 5)
예제 #34
0
 def render(self):
     egi.set_pen_color(name=self.colour)
     egi.circle(self.pos, self.radius, True)
     egi.set_pen_color(name='YELLOW')
     egi.cross(self.target, 10.0)
예제 #35
0
 def render(self):
     egi.red_pen()
     egi.cross(self.pos, 10)
    def render(self, color=None):
        ''' Draw the triangle agent with color'''
        color = None
        shape = None
        if (self != Agent.world.hunter):
            color = self.color
            shape = Agent.vehicle_shape
        else:
            color = 'RED'
            shape = Agent.hunter_shape
        egi.set_pen_color(name=color)
        pts = Agent.world.transform_points(shape, self.pos, self.heading,
                                           self.side,
                                           Agent.scale * Agent.floatScale)
        # draw it!
        egi.closed_shape(pts)
        #cap taget pos to window diameters
        if ((self.mode == 'pursuit' or self.mode == 'flee')
                and self == Agent.world.hunter):
            egi.green_pen()
            if self.hunterTargVec.y > Agent.world.cy:
                self.hunterTargVec = Vector2D(self.hunterTargVec.x,
                                              Agent.world.cy)
            elif self.hunterTargVec.y < 0:
                self.hunterTargVec = Vector2D(self.hunterTargVec.x, 0)
            if self.hunterTargVec.x > Agent.world.cx:
                self.hunterTargVec = Vector2D(Agent.world.cx,
                                              self.hunterTargVec.y)
            elif self.hunterTargVec.x < 0:
                self.hunterTargVec = Vector2D(0, self.hunterTargVec.y)
            egi.cross(self.hunterTargVec, 10)

        # add some handy debug drawing info lines - force and velocity
        if Agent.show_info:
            #s = 0.5 # <-- scaling factor
            # force
            egi.red_pen()
            egi.line_with_arrow(self.pos, self.pos + self.force,
                                5)  #replaced s with Agent.floatScale
            # velocity
            egi.grey_pen()
            egi.line_with_arrow(self.pos, self.pos + self.vel,
                                5)  #replaced s with Agent.floatScale

            # draw the path if it exists and the mode is follow
            if self.mode == 'follow_path':
                self.path.render()
            # draw wander info?
            elif self.mode == 'wander':
                # calculate the center of the wander circle in front of the agent
                wnd_pos = Vector2D(Agent.wander_dist * Agent.floatScale, 0)
                wld_pos = self.world.transform_point(wnd_pos, self.pos,
                                                     self.heading, self.side)
                # draw the wander circle
                egi.green_pen()
                egi.circle(wld_pos, Agent.wander_radius * Agent.floatScale)
                # draw the wander target (little circle on the big circle)
                egi.red_pen()
                wnd_pos = (self.wander_target +
                           Vector2D(Agent.wander_dist * Agent.floatScale, 0))
                wld_pos = Agent.world.transform_point(wnd_pos, self.pos,
                                                      self.heading, self.side)
                egi.circle(wld_pos, 3)

            #draw cohesion range
            egi.blue_pen()
            egi.circle(self.pos, Agent.cohesiveRange * Agent.floatScale)
            egi.red_pen()
            egi.circle(self.pos, Agent.seperationRange * Agent.floatScale)
            egi.green_pen()
            egi.circle(self.pos, Agent.alignmentRange * Agent.floatScale)

            if self == Agent.world.hunter:
                #draw panic dist and hide dist
                egi.aqua_pen()
                egi.circle(self.pos, Agent.panicDist * Agent.floatScale)
                egi.circle(self.pos, (Agent.panicDist + Agent.hiderange) *
                           Agent.floatScale)
                for hidepos in self.hunterHidePositions:
                    egi.aqua_pen()
                    egi.line_by_pos(self.pos, hidepos[0])

                #debugging
                #TODO REMOVE
                egi.orange_pen()
                egi.line_by_pos(
                    self.pos,
                    self.pos + self.AvoidEnvironmentRedirect(self.force))