def step(self, packet: GameTickPacket, drone: Drone, index: int): if drone.position[2] < 25: drone.since_jumped = 0.0 # Go forward drone.controls.throttle = 1.0 if abs( drone.velocity[1]) < 500 else 0.01 # If near half-line if abs(drone.position[1]) < 200: drone.controls.jump = True else: drone.since_jumped += self.dt height = 50 + drone.since_jumped * 150 angle = 1.0 + drone.since_jumped * 1.2 if index % 2 == 0: angle += math.pi rot = rotation(angle) v = vec3(dot(rot, vec2(1, 0))) drone.hover.target = v * self.radius drone.hover.target[2] = height drone.hover.up = normalize(drone.position) drone.hover.step(self.dt) drone.controls = drone.hover.controls
def step(self, packet: GameTickPacket, drone: Drone, index: int): self.finished = True drone.since_jumped = None drone.start_pos = None drone.sort_phase = 0
def step(self, packet: GameTickPacket, drone: Drone, index: int): if drone.since_jumped is None: # Control throttle start and jump. if self.time_since_start > self.delay * (index % 16): # Speed controller. drone.controls.throttle = 1.0 if max(abs( drone.velocity[0]), abs(drone.velocity[1])) < 500 else 0.03 # If near half-line if norm(vec3(0, 0, 0) - drone.position) < 700: drone.since_jumped = 0.0 drone.controls.jump = True # Create helix after jump. else: # Increment timer. drone.since_jumped += self.dt # HEIGHT if drone.since_jumped < 11: height = 150 + drone.since_jumped * 150 # speed of rise elif drone.since_jumped < 20: height = 1800 - (drone.since_jumped - 11) * 150 else: height = 450 + (drone.since_jumped - 16) * 30 height = min(height, 600) # RADIUS if drone.since_jumped < 11: radius = 500 elif drone.since_jumped < 15: radius = 500 - (drone.since_jumped - 10) * 50 elif drone.since_jumped < 17: radius = 300 elif drone.since_jumped < 20: radius = 300 + (drone.since_jumped - 17) * 100 else: radius = 400 + drone.since_jumped**3 / 10 radius = min(radius, 2000) # ANGLE if drone.since_jumped < 11: angle = drone.since_jumped * 0.4 # rotation speed elif drone.since_jumped < 20: angle = (11 * 0.4) + (drone.since_jumped - 11) * 0.6 else: angle = (11 * 0.4) + (9 * 0.6) + (drone.since_jumped - 20) * 0.3 # Offset angle. angle += (index // 16) * (math.pi / 2) # Set hover target and controller. rot = rotation(angle) v = vec3(dot(rot, vec2(1, 0))) drone.hover.target = v * radius drone.hover.target[2] = height drone.hover.up = normalize(drone.position) drone.hover.step(self.dt) drone.controls = drone.hover.controls if drone.since_jumped < 0.05: drone.controls.jump = True drone.controls.boost = False