Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
	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
Ejemplo n.º 3
0
    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)))
Ejemplo n.º 4
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)
Ejemplo n.º 5
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)

        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)
Ejemplo n.º 6
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':
            ## ...
            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)
Ejemplo n.º 7
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)
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
0
	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
Ejemplo n.º 10
0
	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) ))
Ejemplo n.º 11
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)
Ejemplo n.º 12
0
	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)
Ejemplo n.º 13
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")
Ejemplo n.º 14
0
    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
Ejemplo n.º 15
0
	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
Ejemplo n.º 16
0
    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
Ejemplo n.º 18
0
	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)
Ejemplo n.º 19
0
	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
Ejemplo n.º 20
0
    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)
Ejemplo n.º 21
0
    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)
Ejemplo n.º 22
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)
Ejemplo n.º 23
0
    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
Ejemplo n.º 24
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)

        # 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)
Ejemplo n.º 25
0
 def render(self):
     if self.visible:
         egi.green_pen()
         egi.circle(self.pos, 3)
Ejemplo n.º 26
0
 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))
Ejemplo n.º 28
0
    def render(self):
        egi.green_pen()
        egi.cross(self.pos, self.size)

        egi.blue_pen()
        egi.cross(self.aimpos, 5)
Ejemplo n.º 29
0
 def render(self):
     egi.green_pen()
     egi.circle(self.pos, self.radius, True)
Ejemplo n.º 30
0
 def render(self):
     egi.green_pen()
     egi.set_stroke(2)
     egi.circle(self.pos, self.radius, True)