def render(self): egi.set_pen_color(name=self.color) points = self.world.transform_points(self.vehicle_shape, self.position, self.heading, self.side, Vector2D(self.scale, self.scale)) egi.closed_shape(points) #egi.red_pen() #egi.circle(self.position, self.panic_radius) if self.mode == 'Wander1': # Disabled for now local_position = Vector2D(self.wander_distance, 0) world_position = self.world.transform_point( local_position, self.position, self.heading, self.side) egi.green_pen() egi.circle(world_position, self.wander_radius) local_position += self.wander_target world_position = self.world.transform_point( local_position, self.position, self.heading, self.side) egi.red_pen() egi.circle(world_position, 5) elif self.mode == 'Follow path': self.path.render()
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
def drawWaves(self): egi.green_pen() seed = self.world._clock * 2 water = self.water egi.set_stroke(2) egi.set_pen_color(color=rgba(water[0], 0.5)) egi.unclosed_shape( self.createWave(seed=seed, amplitude=7, width=self.size.width, start=Vector2D(self.box.left, self.box.top + 10))) egi.set_pen_color(color=rgba(water[1], 0.5)) self.mainWave = self.createWave(seed=seed / 2, amplitude=3, width=self.size.width, start=Vector2D(self.box.left, self.box.top + 0)) egi.unclosed_shape(self.mainWave) egi.set_pen_color(color=rgba(water[2], 0.5)) egi.unclosed_shape( self.createWave(seed=seed / 3, amplitude=10, width=self.size.width, start=Vector2D(self.box.left, self.box.top + 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 wander info if self.mode == 'wander': # calculate the center of the wander circle in front of the agent wnd_pos = Vector2D(self.wander_dist, 0) wnd_pos = self.world.transform_point(wnd_pos, self.pos, self.heading, self.side) # draw wander circle egi.green_pen() egi.circle(wnd_pos, self.wander_radius) # draw the wander target (little cirlce 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) if self.mode == 'follow_path': self.path.render() # draw it! egi.closed_shape(pts)
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) if (self.mode == 'hunt'): 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) # draw it! egi.closed_shape(pts) 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)
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': ## ... pass #draw neighbour radius cntr_pos = Vector2D() cntrwld_pos = self.world.transform_point(cntr_pos, self.pos, self.heading, self.side) egi.white_pen() egi.circle(cntrwld_pos, self.neighbour_radius) # 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) if (self.mode == 'wander'): #calculate center of the wander circle in front of agent 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 big circle) egi.red_pen() wnd_pos = (self.wander_target + Vector2D(self.wander_dist, 0)) wnd_pos = self.world.transform_point(wnd_pos, self.pos, self.heading, self.side) egi.circle(wld_pos, 3)
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)
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)
def idleSteer(self, delta): wanderForce = self.wander(delta) * self.state['wanderInfluence'] flockForce = self.flock(delta) * self.flockingInfluence # obstaclesForce = self.obstacleAvoidance(self.world.solids) percentFromCenterX = (self.pos.x - self.world.center.x) / self.world.width percentFromCenterY = (self.pos.y - self.world.center.y) / self.world.height # Square the falloff valueX = -Util.sign(percentFromCenterX)*(self.maxCenterForce * percentFromCenterX**2) valueY = -Util.sign(percentFromCenterY)*(self.maxCenterForce * percentFromCenterY**2) centerForce = Vector2D(valueX, valueY) survivalSteer = self.survivalSteer(delta) foodForce = self.foodSteer(delta) * (1 + self.sickness / 10) self.maxSpeed = self.stat('speed') - (self.sickness / 2) netForce = wanderForce + flockForce + centerForce + survivalSteer + foodForce # print 'self.flockingInfluence', self.flockingInfluence if(self.chosenOne and self.world.drawDebug): egi.blue_pen() egi.line_by_pos(self.pos, self.pos + wanderForce * 5) egi.green_pen() egi.line_by_pos(self.pos, self.pos + flockForce * 5) egi.orange_pen() egi.line_by_pos(self.pos, self.pos + netForce * 5) egi.set_pen_color(name='BROWN') egi.line_by_pos(self.pos, self.pos + centerForce * 5) return netForce
def drawWaves(self): egi.green_pen() seed = self.world._clock * 2 water = self.water egi.set_stroke(2) egi.set_pen_color(color=rgba(water[0], 0.5)) egi.unclosed_shape(self.createWave(seed= seed, amplitude = 7, width = self.size.width, start = Vector2D(self.box.left, self.box.top + 10) )) egi.set_pen_color(color=rgba(water[1], 0.5)) self.mainWave = self.createWave(seed= seed/2, amplitude = 3, width = self.size.width, start = Vector2D(self.box.left, self.box.top + 0) ) egi.unclosed_shape(self.mainWave) egi.set_pen_color(color=rgba(water[2], 0.5)) egi.unclosed_shape(self.createWave(seed= seed/3, amplitude = 10, width = self.size.width, start = Vector2D(self.box.left, self.box.top + 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)
def drawBody(self, color=None): egi.set_pen_color(color) if(self.world.drawDebug): if(self.isNeighbour): egi.blue_pen() if(self.tagged): egi.green_pen() if(self.chosenOne): if(self.world.drawDebug or self.world.drawComponentForces): egi.white_pen() pts = self.pointsInWorldSpace(self.vehicle_shape, self.renderPosition) # pts = self.world.transform_points(self.vehicle_shape, self.renderPosition, self.heading, self.side, self.scale) # draw it! egi.closed_shape(pts) self.drawEye(color)
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")
def survivalSteer(self, delta): avoidHunters, hunterDist = self.avoidHuntersSteer(delta) # avoidHunters * hideForce = self.hidingSteer(delta) / (hunterDist / 20000) / ( avoidHunters.length() / 100) steer = avoidHunters + hideForce if (self.chosenOne and self.world.drawHidingSpots): egi.green_pen() egi.line_by_pos(self.pos, self.pos + avoidHunters * 5) # print 'avoidHunters', avoidHunters egi.red_pen() egi.line_by_pos(self.pos, self.pos + hideForce * 5) # print 'hideForce', hideForce egi.orange_pen() # egi.line_by_pos(self.pos, self.pos + steer * 5) return steer
def survivalSteer(self, delta): avoidHunters, hunterDist = self.avoidHuntersSteer(delta) # avoidHunters * hideForce = self.hidingSteer(delta) / (hunterDist / 20000) / (avoidHunters.length() / 100) steer = avoidHunters + hideForce if(self.chosenOne and self.world.drawHidingSpots): egi.green_pen() egi.line_by_pos(self.pos, self.pos + avoidHunters * 5) # print 'avoidHunters', avoidHunters egi.red_pen() egi.line_by_pos(self.pos, self.pos + hideForce * 5) # print 'hideForce', hideForce egi.orange_pen() # egi.line_by_pos(self.pos, self.pos + steer * 5) return steer
def idleSteer(self, delta): wanderForce = self.wander(delta) * self.state['wanderInfluence'] flockForce = self.flock(delta) * self.flockingInfluence # obstaclesForce = self.obstacleAvoidance(self.world.solids) percentFromCenterX = (self.pos.x - self.world.center.x) / self.world.width percentFromCenterY = (self.pos.y - self.world.center.y) / self.world.height # Square the falloff valueX = -Util.sign(percentFromCenterX) * (self.maxCenterForce * percentFromCenterX**2) valueY = -Util.sign(percentFromCenterY) * (self.maxCenterForce * percentFromCenterY**2) centerForce = Vector2D(valueX, valueY) survivalSteer = self.survivalSteer(delta) foodForce = self.foodSteer(delta) * (1 + self.sickness / 10) self.maxSpeed = self.stat('speed') - (self.sickness / 2) netForce = wanderForce + flockForce + centerForce + survivalSteer + foodForce # print 'self.flockingInfluence', self.flockingInfluence if (self.chosenOne and self.world.drawDebug): egi.blue_pen() egi.line_by_pos(self.pos, self.pos + wanderForce * 5) egi.green_pen() egi.line_by_pos(self.pos, self.pos + flockForce * 5) egi.orange_pen() egi.line_by_pos(self.pos, self.pos + netForce * 5) egi.set_pen_color(name='BROWN') egi.line_by_pos(self.pos, self.pos + centerForce * 5) return netForce
def update(self, delta): ''' update vehicle position and orientation ''' # calculate and set self.force to be applied # force = self.calculate() # <-- delta needed for wander (delta) ## limit force? <-- for wander force = self.calculate(delta) force.truncate(self.max_force) # <-- new force limiting code # determine the new accelteration self.accel = force / self.mass # not needed if mass = 1.0 # new velocity self.vel += self.accel * delta # check for limits of new velocity self.vel.truncate(self.max_speed) # update position self.pos += self.vel * delta # update heading is non-zero velocity (moving) if self.vel.length_sq() > 0.00000001: self.heading = self.vel.get_normalised() self.side = self.heading.perp() # treat world as continuous space - wrap new position if needed self.world.wrap_around(self.pos) ### added wander to render function. ### # draw wander info? if self.mode == 'wander': # calculate the center of the wander circle in front of the agent 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
def render(self,color=None): self.calculateRenderPosition() if(color is None): color = self.color ''' Draw the triangle agent with color''' self.drawBody(color) if(not self.world.drawDebug or not self.chosenOne): return # Debug stuff to draw for all agents # if not self.chosenOne: # return # Debug stuff to only draw for one agent egi.circle(self.pos, self.boundingRadius) egi.orange_pen() egi.circle(self.pos, self.boundingRadius) egi.grey_pen() wnd_pos = Vector2D(0, 0) # Draw wander info # calculate the center of the wander circle wnd_pos = Vector2D(self.wanderDistance, 0) wld_pos = self.world.transform_point(wnd_pos, self.renderPosition, self.heading, self.side) # draw the wander circle egi.green_pen() egi.circle(wld_pos, self.wanderRadius) # draw the wander target (little circle on the big circle) egi.red_pen() wnd_pos = (self.wander_target + Vector2D(self.wanderDistance,0)) wld_pos = self.world.transform_point(wnd_pos, self.renderPosition, self.heading, self.side) egi.circle(wld_pos, 3)
def flock(self, delta): alignment = self.alignmentForce() separation = self.separationForce() cohesion = self.cohesionForce() if(self.chosenOne and self.world.drawComponentForces): s = 0.1 egi.green_pen() egi.line_with_arrow(self.pos, self.pos + alignment * s, 10) egi.blue_pen() egi.line_with_arrow(self.pos, self.pos + separation * s, 10) egi.red_pen() egi.line_with_arrow(self.pos, self.pos + cohesion * s, 10) egi.grey_pen() egi.line_with_arrow(self.pos, self.pos + self.force * s, 10) egi.circle(self.pos, self.neighbourDistance) return alignment + separation + cohesion
def render(self): ''' Draw the path, open or closed, using the current pen colour. ''' for index, wp in enumerate(self._way_pts): egi.blue_pen() filled = False if(index < self._cur_pt_idx): egi.green_pen() if(index == self._cur_pt_idx): egi.orange_pen() filled = True egi.circle(pos=wp, radius=5, filled=filled, slices=32) egi.blue_pen() if self.looped: egi.closed_shape(self._way_pts) else: egi.polyline(self._way_pts)
def render(self): ''' Draw the path, open or closed, using the current pen colour. ''' for index, wp in enumerate(self._way_pts): egi.blue_pen() filled = False if (index < self._cur_pt_idx): egi.green_pen() if (index == self._cur_pt_idx): egi.orange_pen() filled = True egi.circle(pos=wp, radius=5, filled=filled, slices=32) egi.blue_pen() if self.looped: egi.closed_shape(self._way_pts) else: egi.polyline(self._way_pts)
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)
def render(self, color=None): ''' Draw moving target ''' #calculate target points self.movingTarget() #draw target using those points egi.blue_pen() dbox = [ Point2D(self.x0, self.y0), Point2D(self.x1, self.y0), Point2D(self.x1, self.y1), Point2D(self.x0, self.y1) ] egi.closed_shape(dbox, False) #pos of target self.target_pos = Vector2D(self.x0 + self.target_mid.x, self.y1 + self.target_mid.y) ''' 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 bullets being fired egi.green_pen() if self.mode == 'rifle' or self.mode == 'rocket' or self.mode == 'handgun' or self.mode == 'grenade': if self.step_count == 0: egi.circle(self.bullet_pos, self.size) self.step_count += 1 elif self.bullet_pos.y > self.target_pos.y: self.step_count = 0 self.bullet_pos = Vector2D(250,250) self.mode = 'aim' else: self.bullet_pos += self.avg egi.circle(self.bullet_pos, self.size) self.step_count += 1
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) # draw wander info? ## ... # calculate the center of the wander circle in front of the agent 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.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(self.pos, self.radius) # 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)
def render(self): if self.visible: egi.green_pen() egi.circle(self.pos, 3)
def draw(self): if self.projectile: egi.green_pen() egi.set_stroke(10) egi.circle(self.projectile, 3)
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))
def render(self): egi.green_pen() egi.cross(self.pos, self.size) egi.blue_pen() egi.cross(self.aimpos, 5)
def render(self): egi.green_pen() egi.circle(self.pos, self.radius, True)
def render(self): egi.green_pen() egi.set_stroke(2) egi.circle(self.pos, self.radius, True)