Usage
Use command to pull, pre-dependency is completed Configure credentials
pip install eggpy==0.1.0
File List
File | File Size |
|---|---|
115.33 KiB | |
88.45 KiB |
Dependency List
requires_dist | |
mypy | >=0.910; extra == "dev" |
lupa | >=1.14.0 |
astor | >=0.8.1 |
pytest | >=6.0; extra == "dev" |
black | >=21.0; extra == "dev" |
flake8 | >=3.9; extra == "dev" |
provides_extra | |
dev |
一个将蛋仔地图 Lua 与 Python 互转的工具。
eggpy 是一个专门为蛋仔地图开发设计的工具,用于在 Lua 和 Python 之间进行双向转换。蛋仔游戏运行在安全沙盒中,对 Lua 环境有特殊限制,本工具帮助开发者使用 Python 编写游戏逻辑,然后转换为兼容的 Lua 代码。
init 和 reverse 命令# 从源码安装
git clone <repository-url>
cd eggpy
pip install -e .
或通过 pip 安装:
pip install -i https://cnb:dUkPqqz3kZhg9G1337n9bZQZShD@pypi.cnb.cool/Astronaut-Leica/Lecca/-/packages/simpleeggpy
在包含 Lua 文件的目录中运行:
python -m eggpy init
此命令会:
.lua 文件eggpy/ 目录中)EggyAPI.lua 生成 Python API 定义(保存在 eggpy/api/ 目录中)转换后,你可以在 eggpy/ 目录中编写和修改 Python 文件。注意:
eggpy/api/ 中的类型定义当你完成 Python 开发后,运行反向转换:
python -m eggpy reverse
此命令会:
eggpy/ 目录下的所有 .py 文件init 命令python -m eggpy init [选项]
选项:
--input-dir PATH: 指定输入目录(默认为当前目录)--output-dir PATH: 指定输出目录(默认为 eggpy/)--api-dir PATH: 指定 API 输出目录(默认为 eggpy/api/)--skip-api: 跳过 API 生成--verbose: 显示详细输出reverse 命令python -m eggpy reverse [选项]
选项:
--input-dir PATH: 指定输入目录(默认为 eggpy/)--output-dir PATH: 指定输出目录(默认为当前目录)--overwrite: 覆盖已存在的 Lua 文件--verbose: 显示详细输出eggpy 的工作原理基于以下几个步骤:
math.Vector3、dict())映射到对应的 Python 实现关键转换规则:
Fixed 类型转换为 Python 的 float(但受范围限制)math.Vector3 和 math.Quaternion 转换为对应的类蛋仔游戏支持以下特殊数据类型:
dict() 创建)蛋仔的 math 库与标准 Lua 不同:
# Python 中的使用示例
import math
# 转换函数
value = math.tointeger(3.14) # 转换为整数(向下取整)
fixed = math.toFixed(100) # 转换为定点数
# 三角函数(输入为弧度)
sin_val = math.sin(math.pi / 2)
cos_val = math.cos(math.pi)
# 反三角函数(返回弧度)
angle = math.asin(0.5)
# 取整函数
rounded = math.round(3.5)
ceiled = math.ceil(3.1)
floored = math.floor(3.9)
# 值限制
clamped = math.clamp(value, 0, 100)
# 创建向量
from eggpy.api.vector import Vector3
vec = Vector3(1.0, 2.0, 3.0)
print(vec.x, vec.y, vec.z) # 1.0 2.0 3.0
# 向量运算
length = vec.length()
unit_length = vec.normalize()
dot_product = vec.dot(Vector3(4.0, 5.0, 6.0))
cross_product = vec.cross(Vector3(4.0, 5.0, 6.0))
# 四元数
from eggpy.api.quaternion import Quaternion
rot = Quaternion(pitch=0.0, yaw=90.0, roll=0.0)
inverse_rot = rot.inverse()
rotated_vec = rot.apply(vec)
# 创建支持任意类型键的字典
from eggpy.api.dict import dict
my_dict = dict()
key = Vector3(1, 2, 3)
my_dict.set(key, "value")
value = my_dict.get(key)
# 遍历字典
for key, value in my_dict.keyvalues():
print(f"Key: {key}, Value: {value}")
for key in my_dict.keys():
print(f"Key: {key}")
for value in my_dict.values():
print(f"Value: {value}")
蛋仔游戏运行在安全沙盒中,有以下限制(详见 doc/1.txt):
移除的库:
io, os, package, debug重新实现的库:
math(支持定点数和整数)语法限制:
dict())dict() 创建支持其他类型键的字典开发者模式(仅限 PC 编辑器):
io 和 debug 库重要提示:开发者模式只在 PC 编辑器内试玩时有效,发布的游戏不能依赖这些功能。
project/
├── doc/
│ ├── README.md # 本文档
│ ├── EggyAPI.lua # 原始 API 定义
│ └── 1.txt # 环境限制文档
├── eggpy/ # 转换后的 Python 文件
│ ├── api/ # 生成的 API 定义
│ │ ├── __init__.py
│ │ ├── math.py
│ │ ├── vector.py
│ │ ├── quaternion.py
│ │ └── dict.py
│ └── main.py # 示例转换后的文件
├── setup.py # Python 包配置
└── requirements.txt # 依赖项
原始 EggyAPI.lua 文件已拆分为以下模块:
为确保生成的代码能在蛋仔沙盒中运行,eggpy 遵循以下原则:
欢迎提交 Issue 和 Pull Request!
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)本项目采用 MIT 许可证。详见 LICENSE 文件。