跳转到主要内容

Endless Sky C++代码的Python绑定

项目描述

Endless Sky的Python绑定

使用Python与Endless Sky C++类交互或在游戏运行时与之交互。

pip install endless-sky-bindings

此库不包括Endless Sky数据,因此要加载这些数据,您需要找到系统上安装的副本或克隆Endless Sky仓库以获取它。下面的代码示例假设在~/endless-sky处检查了endless-sky。

一旦掌握了endless_sky.bindings模块(在此绑定到'es'变量),C++类将直接暴露给Python;有关文档,请参阅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.Get(   ships.Has(   ships.size(
>>> shuttle = ships.Get("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'

警告:endless_sky.bindings包含不可重置的单例,如GameData,因此一旦加载了一些数据(直接使用GameData.BeginLoad(),使用load_data或间接使用解析函数),就无法在不退出Python的情况下卸载数据。

命令行使用

加载数据文件

% 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>
...

同时运行游戏和Python解释器

$ python -m endless_sky run --resources ~/endless-sky --default-config

从源代码构建

git clone --recursive 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 

开发笔记

更新Endless Sky补丁

这些绑定使用Endless Sky的补丁版本来去除线程并做了一些其他更改。

要更新补丁

  • 在endless_sky/endless-sky子模块中做出更改
  • 将此目录作为工作目录,运行git diff > ../../patch.diff

在更新Endless Sky使用的版本后,这可能是必要的。

此补丁的目的是使Python绑定工作;如果将来将此仓库与Emscripten编译的JavaScript绑定结合,则需要扩展。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

endless-sky-bindings-0.0.14.tar.gz (686.1 kB 查看哈希值)

上传时间: 源代码

构建分发版

endless_sky_bindings-0.0.14-cp39-cp39-win_amd64.whl (4.1 MB 查看哈希值)

上传时间: CPython 3.9 Windows x86-64

endless_sky_bindings-0.0.14-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.7 MB 查看哈希值)

上传时间: CPython 3.9 manylinux: glibc 2.17+ x86-64

endless_sky_bindings-0.0.14-cp39-cp39-macosx_10_15_x86_64.whl (2.8 MB 查看哈希值)

上传时间: CPython 3.9 macOS 10.15+ x86-64

endless_sky_bindings-0.0.14-cp38-cp38-win_amd64.whl (4.1 MB 查看哈希值)

上传时间: CPython 3.8 Windows x86-64

endless_sky_bindings-0.0.14-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.7 MB 查看哈希值)

上传时间: CPython 3.8 manylinux: glibc 2.17+ x86-64

endless_sky_bindings-0.0.14-cp38-cp38-macosx_10_15_x86_64.whl (2.8 MB 查看哈希值)

上传时间: CPython 3.8 macOS 10.15+ x86-64

由支持