Python bindings for Endless Sky C++ code
Project description
Endless Sky bindings for Python
$ pip install endless-sky-bindings
This library does not include the Endless Sky data, so you'll need to find that on your system or clone the Endless Sky repo to get it. The code samples below assume a checkout of endless-sky at ~/endless-sky.
Command line use
Loading data files:
% echo -e 'ship Rocket\n\tattributes\n\t\tdrag 10' > myData.txt
$ python -m endless_sky load --empty-resources myData.txt # only prints ships atm
'Rocket': {'drag': 10.0, 'gun ports': 0.0, 'turret mounts': 0.0},
$ python -m endless_sky load -- --resources ~/endless-sky
{'Aerie': {'bunks': 28.0,
'capture attack': 1.8000000000000003,
'capture defense': 2.4000000000000004,
'cargo space': 50.0,
...
$ # In order to parse a file with vanilla outfits defined, use --resources
$ python -m endless_sky load --resources ~/endless-sky myData.txt
{'Aerie': {'bunks': 28.0,
...
<'Rocket' is somewhere in here>
...
Runing the game and a Python interpreter at the same time:
$ python -m endless_sky run --resources ~/endless-sky --default-config
Library
Once you get a handle on the endless_sky.bindings module (bound to 'es' variable here), C++ classes are exposed to Python pretty directly; for documentation, see the header files in Endless Sky.
>>> from endless_sky.loader import load_data
>>> es = load_data(resources="/Users/tomb/endless-sky")
>>> ships = es.GameData.Ships() # these objects correspond to
>>> ships.<tab><tab>
ships.Find( ships.Has( ships.size(
>>> shuttle = ships.Find("Shuttle")
<endless_sky.bindings.Ship object at 0x1087391b0>
>>> ship = es.Ship(shuttle) # make a copy to avoid modifying the template
>>> ship.<tab><tab>
ship.Acceleration( ship.Hull( ship.Mass(
ship.AddCrew( ship.HyperdriveFuel( ship.MaxReverseVelocity(
ship.Attributes( ship.IdleHeat( ship.MaxVelocity(
ship.BaseAttributes( ship.IsBoarding( ship.MaximumHeat(
... and many more, see header files for documentation
>>> ship.Attributes().Attributes()
<endless_sky.bindings.Dictionary object at 0x1087392f0>
>>> dict(ship.Attributes().Attributes())
{'bunks': 6.0, 'cargo space': 20.0, 'drag': 1.7000000000000002, ...}
>>> ship.SetName("Summer Breeze")
>>> x.Name()
'Summer Breeze'
Warning: endless_sky.bindings contains non-resetable singletons like GameData, so once you load some data (directly with GameData.BeginLoad(), with a load_data, or indirectly with a parser function) you can't unload that data without exiting Python.
Installation
Mac
brew install libmad libpng SDL2
pip install endless-sky-bindings
Linux
sudo apt-get install libsdl2-dev libpng-dev libjpeg-turbo8-dev libopenal-dev libmad0-dev libglew-dev libgl1-mesa-dev libegl1-mesa-dev libgles2-mesa-dev uuid-dev
pip install endless-sky-bindings
Windows
pip install endless-sky-bindings
Building from source
git clone git@github.com:thomasballinger/endless-sky-bindings-python.git
cd endless-sky-bindings-python
Mac
brew install libmad libpng jpeg-turbo SDL2 openal-soft
Linux
sudo apt-get install libsdl2-dev libpng-dev libjpeg-turbo8-dev libopenal-dev libmad0-dev libglew-dev libgl1-mesa-dev libegl1-mesa-dev libgles2-mesa-dev uuid-dev
Windows
Invoke-WebRequest https://endless-sky.github.io/win64-dev.zip -OutFile win64-dev.zip
Expand-Archive win64-dev.zip -DestinationPath . -Force
Remove-Item win64-dev.zip
cd endless_sky/endless-sky
patch -p1 < ../../patch.diff
cd ../..
pip install
Dev notes
Updating the Endless Sky patch
These bindings use a patched version of Endless Sky to patch out threads and make a few other changes.
To update the patch:
- make changes in the submodule at endless_sky/endless-sky
- with that directory as the working directory, run
git diff > ../../patch.diff
This is likely to be necessary after updating the version of Endless Sky used.
This patch is intended to be the minimum to make Python bindings work; if this repo is combined with Emscripten-compiled JavaScript bindings at a later date it will need to be expanded.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
File details
Details for the file endless-sky-bindings-0.0.7.tar.gz
.
File metadata
- Download URL: endless-sky-bindings-0.0.7.tar.gz
- Upload date:
- Size: 683.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1ba05b491701216fc8b3262c7135ea65a358148e8993c5342ad70660b51c320a |
|
MD5 | d88c1d896702c519ad4a506807553bdf |
|
BLAKE2b-256 | 38dfc0da7869c7329bebc31f15c86e7099b4936d2b0a5fed77bcb9d8fb185288 |
File details
Details for the file endless_sky_bindings-0.0.7-cp39-cp39-win_amd64.whl
.
File metadata
- Download URL: endless_sky_bindings-0.0.7-cp39-cp39-win_amd64.whl
- Upload date:
- Size: 4.1 MB
- Tags: CPython 3.9, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e4ac18ea8d2be33247f1adfcdb1b893287b54b153260366e5f3b2f20181b62c8 |
|
MD5 | 501f1843c361611e6a80f6f109c3acc7 |
|
BLAKE2b-256 | db9697db15d77c1cb037b76fb1c670321abf899eb14880fef06ce65b08b69fa8 |
File details
Details for the file endless_sky_bindings-0.0.7-cp39-cp39-macosx_10_15_x86_64.whl
.
File metadata
- Download URL: endless_sky_bindings-0.0.7-cp39-cp39-macosx_10_15_x86_64.whl
- Upload date:
- Size: 2.1 MB
- Tags: CPython 3.9, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8496a75c126e75d9b6a3925e1609c0bc15a8201402d7f04ef9c34dae1f85a584 |
|
MD5 | 8cfb9cb1eaeaa914adcfb646969dba66 |
|
BLAKE2b-256 | 71133a20094de610737e15fa313fc5e070b160070ea252a5695e6a3a74bbffa6 |
File details
Details for the file endless_sky_bindings-0.0.7-cp38-cp38-win_amd64.whl
.
File metadata
- Download URL: endless_sky_bindings-0.0.7-cp38-cp38-win_amd64.whl
- Upload date:
- Size: 4.1 MB
- Tags: CPython 3.8, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | eeab7e8f1917ed80371a692f76c2791ac24e1ffd9716aaefa659e6fab3323250 |
|
MD5 | acada381562c53b69baf6c09975e598b |
|
BLAKE2b-256 | f46ee2fef48795b562b70036538827882806020a92703963ce5e289751871220 |
File details
Details for the file endless_sky_bindings-0.0.7-cp38-cp38-macosx_10_15_x86_64.whl
.
File metadata
- Download URL: endless_sky_bindings-0.0.7-cp38-cp38-macosx_10_15_x86_64.whl
- Upload date:
- Size: 2.1 MB
- Tags: CPython 3.8, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e78d6e8d92e3ae1049cc993361e100cc92faf84284741f38398706566b28ee28 |
|
MD5 | c17dfe33c78f3674f5584331839d8436 |
|
BLAKE2b-256 | 9893e6519c660a560bd7f947aac88152ea86e252631d0dff71eb0297e0f28151 |