Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
	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
Exemplo n.º 4
0
    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
Exemplo n.º 5
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
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
	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
Exemplo n.º 8
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
Exemplo 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
Exemplo n.º 10
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
Exemplo n.º 11
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)
Exemplo n.º 12
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)
Exemplo n.º 13
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)
    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))