135 lines
5.5 KiB
Python
135 lines
5.5 KiB
Python
#!/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()
|