コード例 #1
0
    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
コード例 #2
0
 def step(self, packet: GameTickPacket, drone: Drone, index: int):
     self.finished = True
     drone.since_jumped = None
     drone.start_pos = None
     drone.sort_phase = 0
コード例 #3
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