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()
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()
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()
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()
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
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')
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
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
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 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
def aim(self, enemy): timeToHit = Vector2D.distance(enemy.pos, self.init_pos) / self.bullet_speed return enemy.pos + enemy.vel * timeToHit