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 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 hiding spots egi.blue_pen() egi.circle(self.obstacles[0], 25) egi.circle(self.obstacles[1], 50) egi.circle(self.obstacles[2], 75) #draw detection box egi.blue_pen() length = 1.0 * (self.speed() / self.max_speed) * 3.0 #db length dbox = [ Point2D(-1.0, 0.6), Point2D(length, 0.6), #new Point2D(length, 0.0), #new Point2D(length, -0.6), #new Point2D(-1.0, -0.6) ] pts = self.world.transform_points(dbox, self.pos, self.heading, self.side, self.scale) egi.closed_shape(pts, False)
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 the border egi.blue_pen() egi.closed_shape(self.walls, False) egi.red_pen() egi.line_with_arrow(self.pos, self.pos + self.vel * 0.5, 5) #feeler1 # 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, 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 the border egi.blue_pen() egi.closed_shape(self.walls, False) egi.red_pen() egi.line_with_arrow(self.pos, self.pos + self.vel * 0.5, 5) #feeler1 # 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, color=None): # graphics, ''' Draw the triangle agent with color''' # self.graphics = Graphics() # draw the path if it exists and the mode is follow. if self.mode == 'follow_path': self.path.render() pass # 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) # 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, 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''' 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): """Displays the Hunter on the screen""" egi.set_pen_color(name=self.color) pts = self.world.transform_points(self.vehicle_shape, self.pos, self.heading, self.side, self.scale) egi.closed_shape(pts) if self.mode == 'follow_path': self.path.render()
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 render(self, color=None): ''' Draw the triangle agent with color''' if(color == None): egi.set_pen_color(name=self.color) else: egi.set_pen_color(name=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): 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 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): ''' 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 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, 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 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 draw(self): # draw filled box egi.set_pen_color(self.color) egi.closed_shape(self._pts, filled=True) # draw box border if cfg['BOXLINES_ON']: egi.set_pen_color((.7, .7, .7, 1)) egi.closed_shape(self._pts, filled=False) if self.kind == 'I': egi.set_stroke(1) egi.set_pen_color(name="RED") egi.line(self._pts[0].x + 10, self._pts[0].y - 5, self._pts[0].x + 10, self._pts[0].y - 16) egi.line(self._pts[0].x + 5, self._pts[0].y - 11, self._pts[0].x + 16, self._pts[0].y - 11) if self.kind == 'P': obj_pts = ( Point2D(self._pts[0].x + 5, self._pts[0].y - 5), # top left Point2D(self._pts[0].x + 15, self._pts[0].y - 4), # top right Point2D(self._pts[0].x + 15, self._pts[0].y - 15), # bottom right Point2D(self._pts[0].x + 5, self._pts[0].y - 15) # bottom left ) egi.set_stroke(1) egi.set_pen_color(name="RED") egi.closed_shape(obj_pts, filled=False) # centre circle if cfg['CENTER_ON']: egi.set_pen_color((.3, .3, 1, 1)) egi.circle(self._vc, 5) # box position (simple column,row) (or x,y actually) if self.node: if cfg['LABELS_ON']: if not self.idx_label: info = "%d" % self.idx self.idx_label = pyglet.text.Label(info, color=(0, 0, 0, 255), anchor_x="center", anchor_y="top") info = "(%d,%d)" % (self.pos[0], self.pos[1]) self.pos_label = pyglet.text.Label(info, color=(0, 0, 0, 255), anchor_x="center", anchor_y="bottom") self._reposition_labels() self.idx_label.draw() #self.pos_label.draw() if self.marker: if not self.marker_label or self.marker_label.text != self.marker: self.marker_label = pyglet.text.Label(self.marker, color=(255, 0, 0, 255), bold=True, anchor_x="center", anchor_y="center") self._reposition_labels() self.marker_label.draw()
def render(self, color=None): """Displays the Hunter on the screen""" if self.visible: 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 centre 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 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) # draw it egi.closed_shape(pts)
def draw(self): # draw filled box egi.set_pen_color(self.color) egi.closed_shape(self._pts, filled=True) # draw box border if cfg['BOXLINES_ON']: egi.set_pen_color((.7, .7, .7, 1)) egi.closed_shape(self._pts, filled=False) # centre circle if cfg['CENTER_ON']: egi.set_pen_color((.3, .3, 1, 1)) egi.circle(self._vc, 5) # box position (simple column,row) (or x,y actually) if self.node: if cfg['LABELS_ON']: if not self.idx_label: info = "%d" % self.idx self.idx_label = pyglet.text.Label(info, color=(0, 0, 0, 255), anchor_x="center", anchor_y="top") info = "(%d,%d)" % (self.pos[0], self.pos[1]) self.pos_label = pyglet.text.Label(info, color=(0, 0, 0, 255), anchor_x="center", anchor_y="bottom") self._reposition_labels() self.idx_label.draw() #self.pos_label.draw() if self.marker: if not self.marker_label or self.marker_label.text != self.marker: self.marker_label = pyglet.text.Label(self.marker, color=(255, 0, 0, 255), bold=True, anchor_x="center", anchor_y="center") self._reposition_labels() self.marker_label.draw()
def render(self, color=None): 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) # 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, 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 draw(self): # draw filled box egi.set_pen_color(self.color) egi.closed_shape(self._pts, filled=True) # draw box border if cfg['BOXLINES_ON']: egi.set_pen_color((.7,.7,.7,1)) egi.closed_shape(self._pts, filled=False) # centre circle if cfg['CENTER_ON']: egi.set_pen_color((.3,.3,1,1)) egi.circle(self._vc, 5) # box position (simple column,row) (or x,y actually) if self.node: if cfg['LABELS_ON']: if not self.idx_label: info = "%d" % self.idx self.idx_label = pyglet.text.Label(info, color=(0,0,0,255), anchor_x="center", anchor_y="top") info = "(%d,%d)" % (self.pos[0], self.pos[1]) self.pos_label = pyglet.text.Label(info, color=(0,0,0,255), anchor_x="center", anchor_y="bottom") self._reposition_labels() self.idx_label.draw() #self.pos_label.draw() if self.marker: if not self.marker_label or self.marker_label.text != self.marker: self.marker_label = pyglet.text.Label(self.marker, color=(255,0,0,255), bold=True, anchor_x="center", anchor_y="center") self._reposition_labels() self.marker_label.draw()
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''' 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, 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() pass 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.mode == 'neighbourhood': if self.tagged == True: self.color = 'BLUE' if self.tagged == False: self.color = 'ORANGE' 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 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.set_pen_color(self.color) renderShape = self.getRenderShape() egi.closed_shape(renderShape)
def render(self): egi.set_pen_color(name=self.color) pts = self.world.transform_points(self.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''' 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 obstacleAvoidance(self, objects): # calc a "Detection Box" length proportional to current speed boxLength = self.minBoxLength + (self.speed() / self.maxSpeed) * self.minBoxLength boxWidth = self.boundingRadius * 2 # Draw the collision box if(self.chosenOne and self.world.drawDebug): box = Rect({ 'left': 0, 'right': boxLength, 'top': boxWidth/2, 'bottom': -boxWidth/2 }) boxPoints = box.getPoints() print 'render points...', Util.strPoints(boxPoints) pts = self.pointsInWorldSpace(boxPoints, self.pos) print 'render points...', Util.strPoints(pts) egi.red_pen() egi.closed_shape(pts) simple = [ Vector2D(0, 10), Vector2D(10, 10), Vector2D(10, -10), Vector2D(0, -10)] egi.closed_shape(self.pointsInWorldSpace(simple, self.pos)) # note (tag) the objects in range tagList = self.tagObjectsInViewRange(objects, boxLength, boxWidth) closestDistance = BIG_FLOAT # float('inf') closestObj = None closestPos = None # Loop through the TagList and find the intersection points ... # keep track of the closest object found ... # Calculate the steering force (if required) ... for obj in tagList: localPos = PointToLocalSpace(obj.pos, self.heading, self.side, self.pos) if localPos.x >= 0: ExpandedRadius = obj.boundingRadius + self.boundingRadius if abs(localPos.y) < ExpandedRadius: # line/circle intersection test, x = cX +/- sqrt(r**2 - cY**2) for y=0 cX = localPos.x cY = localPos.y # only calc the sqrt part once (avoid repetition) sqrtPart = math.sqrt(ExpandedRadius**2 - cY**2) ip = cX - sqrtPart if ip <= 0.0: ip = cX + sqrtPart # Keep track of the closest found so far if ip < closestDistance: closestDistance = ip closestObj = obj closestPos = obj.pos # now find the steering force steeringForce = Vector2D() if closestObj: # the closer, the stronger the force needed multi = 1.0 + (boxLength - closestPos.x) / boxLength # lateral force as needed steeringForce.y = (closestObj.boundingRadius - closestPos.y) * multi # breaking force proportional to closest object breakingWeight = 0.2 steeringForce.x = (closestObj.boundingRadius - closestPos.x) * breakingWeight # convert force back to world space return VectorToWorldSpace(steeringForce,self.heading, self.side)