54 lines
1.3 KiB
Python
54 lines
1.3 KiB
Python
from __future__ import annotations
|
||
|
||
import argparse
|
||
from pathlib import Path
|
||
|
||
from src.engine import InteractiveRunner, StoryEngine
|
||
from src.parser import StoryValidationError, parse_story
|
||
|
||
|
||
def build_arg_parser() -> argparse.ArgumentParser:
|
||
parser = argparse.ArgumentParser(description="simple-ink: 命令行交互式小说框架")
|
||
parser.add_argument(
|
||
"--story",
|
||
type=Path,
|
||
default=Path("data/main_story.yaml"),
|
||
help="故事配置文件路径(YAML)",
|
||
)
|
||
parser.add_argument(
|
||
"--load",
|
||
type=Path,
|
||
default=None,
|
||
help="启动时立即加载存档路径",
|
||
)
|
||
return parser
|
||
|
||
|
||
def main() -> int:
|
||
args = build_arg_parser().parse_args()
|
||
|
||
try:
|
||
parsed = parse_story(args.story)
|
||
except StoryValidationError as exc:
|
||
print(f"故事配置错误: {exc}")
|
||
return 2
|
||
|
||
for warning in parsed.warnings:
|
||
print(f"[warning] {warning}")
|
||
|
||
engine = StoryEngine(parsed.story)
|
||
if args.load is not None:
|
||
try:
|
||
engine.load(args.load)
|
||
except Exception as exc:
|
||
print(f"加载启动存档失败: {exc}")
|
||
return 3
|
||
|
||
runner = InteractiveRunner(engine)
|
||
runner.run()
|
||
return 0
|
||
|
||
|
||
if __name__ == "__main__":
|
||
raise SystemExit(main())
|