def render(self): ''' Draw the path, open or closed, using the current pen colour. ''' # draw base line egi.blue_pen() if self.looped: egi.closed_shape(self._pts) else: egi.polyline(self._pts) # draw current waypoint egi.orange_pen() wp = self.current_pt() egi.circle(pos=wp, radius=5, slices=32)
def patrolSteer(self, delta): wanderForce = self.wander(delta) * self.state.wanderInfluence netForce = wanderForce if(self.chosenOne and self.world.drawDebug): egi.blue_pen() egi.line_by_pos(self.pos, self.pos + wanderForce * 5) egi.orange_pen() egi.line_by_pos(self.pos, self.pos + netForce * 5) return netForce
def patrolSteer(self, delta): wanderForce = self.wander(delta) * self.state.wanderInfluence netForce = wanderForce if (self.chosenOne and self.world.drawDebug): egi.blue_pen() egi.line_by_pos(self.pos, self.pos + wanderForce * 5) egi.orange_pen() egi.line_by_pos(self.pos, self.pos + netForce * 5) return netForce
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 foodSteer(self, delta): steeringForce = Vector2D() bestFood = self.findBestFood(self.food) if (bestFood is not None): steeringForce = self.pursuit(bestFood) # else: # steeringForce = self.idleSteer(delta) if (self.chosenOne and self.world.drawDebug): egi.orange_pen() egi.line_by_pos(self.pos, self.pos + steeringForce) return steeringForce
def foodSteer(self, delta): steeringForce = Vector2D() bestFood = self.findBestFood(self.food) if(bestFood is not None): steeringForce = self.pursuit(bestFood) # else: # steeringForce = self.idleSteer(delta) if(self.chosenOne and self.world.drawDebug): egi.orange_pen() egi.line_by_pos(self.pos, self.pos + steeringForce) return steeringForce
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 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 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 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, 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))