Skip to main content

A Python module implemented in Rust for serializing and deserializing RLBot's flatbuffers

Project description

rlbot-flatbuffers-py

A Python module implemented in Rust for serializing and deserializing RLBot's flatbuffers

The goal of this project

To provide a fast, safe, and easy to use Python module for serializing and deserializing RLBot's flatbuffers.

A majority of the code is generated in the codegen/ upon first compile and thrown into src/python.

This includes the code generated by flatc (living in src/generated), the Python wrapper binds to the generated Rust code, and the Python type hints (rlbot_flatbuffers.pyi).

Dev setup

  • Ensure Python 3.11+ is installed
  • Create a virtual Python environment
    • python3 -m venv venv
  • Activate the virtual environment
    • Windows: venv\Scripts\activate.bat
    • Linux: source venv/bin/activate
  • Install maturin
    • pip install maturin
  • Build & install for testing
    • maturin develop --release

To use in another Python environment, like if testing python-interface, you can build the wheel:

  • maturin build --release
  • (In another environment) pip install path/to/file.whl

The exact path of the wheel will be printed by maturin, just copy+paste it.

Basic usage

All classes and methods should have types hints readable by your IDE, removing the guesswork of common operations.

Creating

import rlbot_flatbuffers as flat

desired_ball = flat.DesiredBallState(
    physics=flat.Physics(
        location=flat.Vector3Partial(z=200),
        velocity=flat.Vector3Partial(x=1500, y=1500),
        angular_velocity=flat.Vector3Partial(),
    ),
)

desired_game_info = flat.DesiredGameInfoState(
    world_gravity_z=-100,
    game_speed=2,
)

desired_game_state = flat.DesiredGameState(
    ball_state=desired_ball,
    game_info_state=desired_game_info,
)

In the above code, we:

  • Set the ball to:
    • Location (0, 0, 200)
    • Velocity (1500, 1500, 0)
    • Angular velocity of (0, 0, 0)
  • Don't set the car states
  • Set the game info state:
    • World gravity to -100
    • Game speed to 2x default
    • Don't set end match or paused
  • Don't set any console commands

All values are optional when creating a class and have the proper defaults.

Reading values

import rlbot_flatbuffers as flat

def handle_packet(packet: flat.GamePacket):
    if packet.game_info.game_status not in {
        flat.GameStatus.Active,
        flat.GameStatus.Kickoff,
    }:
        # Return early if the game isn't active
        return

    # Print the ball's location
    print(packet.ball.physics.location)

    for car in packet.players:
        # Print the every car's location
        print(car.physics.location)

The goal of the above was to feel familiar to RLBot v4 while providing a more Pythonic interface.

  • All classes (not enums and unions) implement __match_args__ for easy destructuring via the match/case pattern.
    • Enums and unions and can still be used to match against the type, they just can't be destructured.
  • Every class implements __str__, __repr__, and __hash__ methods.
    • All enums also implement __int__ and __eq__.
  • Lists no longer have num_x fields accompanying them, they are just Python lists of the appropriate length.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rlbot_flatbuffers-0.11.1.tar.gz (3.9 MB view details)

Uploaded Source

Built Distributions

rlbot_flatbuffers-0.11.1-cp310-abi3-win_amd64.whl (570.1 kB view details)

Uploaded CPython 3.10+ Windows x86-64

rlbot_flatbuffers-0.11.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (700.7 kB view details)

Uploaded CPython 3.10+ manylinux: glibc 2.17+ x86-64

File details

Details for the file rlbot_flatbuffers-0.11.1.tar.gz.

File metadata

  • Download URL: rlbot_flatbuffers-0.11.1.tar.gz
  • Upload date:
  • Size: 3.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.7.4

File hashes

Hashes for rlbot_flatbuffers-0.11.1.tar.gz
Algorithm Hash digest
SHA256 5a3f83a81c6d793ac01c1517851477dcbfa40c0885b677de2ae025586e7dfb5b
MD5 e6f20d85366b7673aa985cf5ac0693d0
BLAKE2b-256 a6e88862fb06208d1ac695495c38e1e54441c3bf28c379368e41fcc27ce1339f

See more details on using hashes here.

File details

Details for the file rlbot_flatbuffers-0.11.1-cp310-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for rlbot_flatbuffers-0.11.1-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 23f32941fdb2d40cd1a39f7e495b8fd1ced6b20c2219584d1e406abc22c0267c
MD5 89b8962f0bc012362a301e904d48cae2
BLAKE2b-256 264290b6802ca47175bc339fd92254c9125283a2299f3eb61d32fc731b6aaf95

See more details on using hashes here.

File details

Details for the file rlbot_flatbuffers-0.11.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rlbot_flatbuffers-0.11.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 82caa8343f886bb8b78ae0218dd6f0b72fb181d2f72b3476b129a9c3fc3b4a50
MD5 c415785164eb73b32b247a227a315684
BLAKE2b-256 4d7b1513f7eca9c314b5e56e4c49980031ec2eb25ffae0962671b75627ba41b9

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page