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)
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)
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)
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)
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)
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)
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 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)
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)
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): 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()
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 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)
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)
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)
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)
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)
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)
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)
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)
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 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)
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)
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 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)
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)
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)
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)
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): 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)
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'
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'
def render(self): egi.green_pen() egi.cross(self.pos, self.size) egi.blue_pen() egi.cross(self.aimpos, 5)
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)
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))