Files
mapTools/run_pipeline.py
2025-12-08 14:23:57 +08:00

135 lines
5.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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="Level90116.prefab", help="prefab 模板文件 (默认: Level90116.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()