first commint

This commit is contained in:
suqin
2025-12-06 17:48:48 +08:00
commit 37f211ffc6
14 changed files with 5122 additions and 0 deletions

134
run_pipeline.py Normal file
View File

@@ -0,0 +1,134 @@
#!/usr/bin/env python3
"""
run_pipeline.py
串联三步处理脚本:
1) 从 Excel 抽取币 / p / v 与绿色方块(使用 read_excel.py 中的函数)
2) 根据 found_*.xlsx 生成 C# 关卡代码(调用 write_code.py 的 main
3) 根据 found_方块.xlsx 生成 prefab调用 make_prefab.py 的 main
用法示例:
python run_pipeline.py --excel global.xlsx --sheet Sheet2 --start-i 80316
python run_pipeline.py --steps 1,2 # 只执行前两步
可配置项:--start-i, --excel, --sheet, --template, --steps
注意:本脚本会 import 现有模块并调用它们的 main 函数 / 函数。
请确保安装依赖openpyxl, pandas
"""
import argparse
import importlib
import sys
import os
from typing import List
def parse_steps(s: str) -> List[int]:
parts = [p.strip() for p in s.split(",") if p.strip()]
steps = []
for p in parts:
if p.isdigit():
steps.append(int(p))
elif p.lower() == "all":
return [1, 2, 3]
return steps
def main():
parser = argparse.ArgumentParser(description="Run pipeline: read_excel -> write_code -> make_prefab")
parser.add_argument("--excel", default="global.xlsx", help="输入 Excel 文件 (默认: global.xlsx)")
parser.add_argument("--sheet", default="Sheet2", help="Excel 的 sheet 名称 (默认: Sheet2)")
parser.add_argument("--start-i", type=int, default=80316, help="A 列地图号的起始值 (默认: 80316)")
parser.add_argument("--template", default="Level90093.prefab", help="prefab 模板文件 (默认: Level90093.prefab)")
parser.add_argument("--steps", default="all", help="要执行的步骤,例如: 1,2,3 或 all (默认: all)")
parser.add_argument("--output-levels", default="generated_levels.cs", help="生成的 C# 文件名 (默认: generated_levels.cs)")
args = parser.parse_args()
steps = parse_steps(args.steps)
if not steps:
steps = [1, 2, 3]
# 确保当前工作目录是脚本所在目录(便于相对路径文件读写)
script_dir = os.path.dirname(os.path.abspath(__file__))
os.chdir(script_dir)
print("流水线开始,工作目录:", script_dir)
print("将执行步骤:", steps)
# STEP 1: run read_excel.find_cells_with_currency_xlsx for 币, p, v
if 1 in steps:
print("\n=== 步骤 1: 从 Excel 中抽取 币 / p / v 与绿色方块 ===")
try:
import read_excel
except Exception as e:
print("无法导入 read_excel.py", e)
sys.exit(1)
# 调用函数(函数会自己写出 found_币.xlsx / found_p.xlsx / found_v.xlsx / found_方块.xlsx
found_coin = read_excel.find_cells_with_currency_xlsx(args.excel, sheet_name=args.sheet, start_i=args.start_i, search_term="")
found_p = read_excel.find_cells_with_currency_xlsx(args.excel, sheet_name=args.sheet, start_i=args.start_i, search_term="p")
found_v = read_excel.find_cells_with_currency_xlsx(args.excel, sheet_name=args.sheet, start_i=args.start_i, search_term="v")
color_summary = read_excel.scan_color_blocks(args.excel, sheet_name=args.sheet, start_i=args.start_i)
if color_summary:
block_len = len(color_summary.get("block", []))
water_len = len(color_summary.get("water", []))
wall_len = len(color_summary.get("wall", []))
jump_len = len(color_summary.get("jump", []))
print(
"步骤1完成发现 币 {0} / p {1} / v {2} 条目;颜色格子 block {3} / water {4} / wall {5} / jump {6}.".format(
len(found_coin), len(found_p), len(found_v), block_len, water_len, wall_len, jump_len
)
)
else:
print(f"步骤1完成发现 币 {len(found_coin)} / p {len(found_p)} / v {len(found_v)} 条目。")
# STEP 2: run write_code.py to generate generated_levels.cs
if 2 in steps:
print("\n=== 步骤 2: 使用 found_*.xlsx 生成 C# 关卡文件 ===")
try:
import write_code
except Exception as e:
print("无法导入 write_code.py", e)
sys.exit(1)
# 允许覆盖 write_code 中的文件名常量
write_code.FILE_P = getattr(write_code, 'FILE_P', 'found_p.xlsx')
write_code.FILE_V = getattr(write_code, 'FILE_V', 'found_v.xlsx')
write_code.FILE_COIN = getattr(write_code, 'FILE_COIN', 'found_币.xlsx')
write_code.OUTPUT_FILE = args.output_levels
# 调用其 main() 来生成文件
try:
write_code.main()
print(f"步骤2完成已生成 {args.output_levels}")
except Exception as e:
print("执行 write_code.main() 时出错:", e)
sys.exit(1)
# STEP 3: run make_prefab.py to generate prefab files
if 3 in steps:
print("\n=== 步骤 3: 使用 found_方块.xlsx 生成 prefab ===")
try:
import make_prefab
except Exception as e:
print("无法导入 make_prefab.py", e)
sys.exit(1)
# 覆盖模板与输入 Excel 路径
make_prefab.EXCEL_PATH = getattr(make_prefab, 'EXCEL_PATH', 'found_方块.xlsx')
make_prefab.TEMPLATE_PREFAB = args.template
try:
make_prefab.main()
print("步骤3完成Prefab 已生成到 GeneratedPrefabs/ 目录")
except Exception as e:
print("执行 make_prefab.main() 时出错:", e)
sys.exit(1)
print("\n流水线全部完成。")
if __name__ == '__main__':
main()