def move(self): distance = ml.distance_to_point(self.rect.center, ml.player.rect.center) if distance < self.homing_distance: angle = ml.angle_to_point(self.rect.center, ml.player.rect.center) self.x, self.y, _ = ml.move_point(self, ml.player.rect.center, self.homing_speed, angle, 5) elif self.moving_from_spawn: if self.x == self.target_point[0] and self.y == self.target_point[1]: self.moving_from_spawn = False else: self.x, self.y, _ = ml.move_point(self, self.target_point, self.from_spawn_speed, 0, 360) else: self.y += self.falling_speed
def phase4(self): # Scale speed with distance # move_speed_scale reduces the effect of distance, causing acceleration sooner distance = ml.distance_to_point(self.rect.center, ml.player.rect.center) try: self.move_speed = self.move_speed_scale / distance except ZeroDivisionError: pass if self.move_speed > self.max_move_speed: self.move_speed = self.max_move_speed elif self.move_speed < self.min_move_speed: self.move_speed = self.min_move_speed # Scale turning_rate with move_speed self.base_turning_rate = 4 self.turning_rate = self.base_turning_rate * \ (self.min_move_speed / self.move_speed) # Drop mines self.mine_timer = self.shoot(self.mine_timer, self.mine_bd, self.mine_fd) # Move self.move()