Ejemplo n.º 1
0
 def flee(self, hunter_pos):
     if(Vector2D.distance(self.pos, hunter_pos) < 100):
         desired_vel = (self.pos - hunter_pos).normalise() * self.max_speed
         return (desired_vel - self.vel)
     elif(Vector2D.distance(self.pos, hunter_pos) > 300):
         return self.seek(hunter_pos) #TODO: Replace with wander function call
     else:
         return Vector2D()
Ejemplo n.º 2
0
 def flee(self, hunter_pos):
     if (Vector2D.distance(self.pos, hunter_pos) < 100):
         desired_vel = (self.pos - hunter_pos).normalise() * self.max_speed
         return (desired_vel - self.vel)
     elif (Vector2D.distance(self.pos, hunter_pos) > 300):
         return self.seek(
             hunter_pos)  #TODO: Replace with wander function call
     else:
         return Vector2D()
Ejemplo n.º 3
0
    def flee(self, hunter_pos):
        ''' move away from hunter position '''
## add panic distance (second)
## add flee calculations (first)

        if(Vector2D.distance(self.pos, hunter_pos) < 100):
            desired_vel = (self.pos - hunter_pos).normalise() * self.max_speed
            return (desired_vel - self.vel)
        elif(Vector2D.distance(self.pos, hunter_pos) > 300):
            return self.seek(hunter_pos) #TODO: Replace with wander function call
        else:
            return Vector2D()
Ejemplo n.º 4
0
    def flee(self, hunter_pos):
        ''' move away from hunter position '''
        ## add panic distance (second)
        ## add flee calculations (first)

        if (Vector2D.distance(self.pos, hunter_pos) < 100):
            desired_vel = (self.pos - hunter_pos).normalise() * self.max_speed
            return (desired_vel - self.vel)
        elif (Vector2D.distance(self.pos, hunter_pos) > 300):
            return self.seek(
                hunter_pos)  #TODO: Replace with wander function call
        else:
            return Vector2D()
Ejemplo n.º 5
0
    def find_prey(self, radius):

        tagged_prey = []
        for prey in self.world.preyList:
            if Vector2D.distance(self.pos, prey.pos) < radius:
                tagged_prey.append(prey)

        shortest_dist = 999999999999999

        closest_prey = None
        for prey in tagged_prey:
            if Vector2D.distance(self.pos, prey.pos) < shortest_dist:
                shortest_dist = Vector2D.distance(self.pos, prey.pos)
                closest_prey = prey
        return closest_prey
Ejemplo n.º 6
0
    def follow_path(self):
        if(self.path is None):
            self.path = self.randomise_path()
        if(Vector2D.distance(self.path.current_pt(), self.pos) <= self.waypoint_threshold):
            self.path.inc_current_pt()

        return self.arrive(self.path.current_pt(), 'normal')
Ejemplo n.º 7
0
 def update(self, delta):
    self.pos += (self.direction * self.velocity) * delta
    if (self.pos.x > self.world.cx or self.pos.x < 0) or (self.pos.y > self.world.cy or self.pos.y < 0):
        self.active = False
        return
    elif Vector2D.distance(self.pos, self.world.prey.pos) <= (self.radius - 10)**2:
        self.active = False
        self.world.prey.color = 'BLUE'
        return
Ejemplo n.º 8
0
 def flee(self, hunter_pos):
     ''' move away from hunter position '''
     #Updated 26/3/18
     # Check if within Panic Radius (currently Hard coded
     if Vector2D.distance(self.pos, hunter_pos) < 200:
         # Flee Velocity Calc
         desired_vel = (self.pos - hunter_pos).normalise() * self.max_speed
         return (desired_vel - self.vel)
     else:
         return self.acceleration
Ejemplo n.º 9
0
 def update(self, delta):
     self.pos += (self.direction * self.velocity) * delta
     if (self.pos.x > self.world.cx
             or self.pos.x < 0) or (self.pos.y > self.world.cy
                                    or self.pos.y < 0):
         self.active = False
         return
     elif Vector2D.distance(self.pos,
                            self.world.prey.pos) <= (self.radius - 10)**2:
         self.active = False
         self.world.prey.color = 'BLUE'
         return
Ejemplo n.º 10
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.º 11
0
 def aim(self):
     timeToHit = Vector2D.distance(self.world.prey.pos,
                                   self.init_pos) / self.bullet_speed
     return self.world.prey.pos + self.world.prey.vel * timeToHit
Ejemplo n.º 12
0
 def aim(self):
     timeToHit = Vector2D.distance(self.world.prey.pos, self.init_pos) / self.bullet_speed
     return self.world.prey.pos + self.world.prey.vel * timeToHit
Ejemplo n.º 13
0
 def aim(self, enemy):
     timeToHit = Vector2D.distance(enemy.pos, self.init_pos) / self.bullet_speed
     return enemy.pos + enemy.vel * timeToHit