ryzerrr's picture
Upload folder using huggingface_hub
40c0886 verified
Raw
History Blame Contribute Delete
3.54 kB
"""Command-line entry point for the unity_agent package.
Usage::
python -m unity_agent generate --game OpenWorldCity --preset open_world_city
python -m unity_agent list-tools
python -m unity_agent qa examples/open_world_city
Run ``python -m unity_agent --help`` for the full list of commands.
"""
from __future__ import annotations
import argparse
import sys
from pathlib import Path
from unity_agent.config import Settings
from unity_agent.transport.unity_transport import UnityTransport
from unity_agent.tools.base import get_registry
from unity_agent.tools.unity_tools import GenerateCompleteGameTool, SetupUnityProjectTool
def _cmd_list_tools(args: argparse.Namespace) -> int:
registry = get_registry()
for name in registry.all_names():
cls = registry.get(name)
print(f" {name:35s} {cls.description}")
return 0
def _cmd_generate(args: argparse.Namespace) -> int:
settings = Settings(
output_dir=args.output_dir,
product_name=args.game,
)
transport = UnityTransport(settings)
tool = GenerateCompleteGameTool(settings, transport)
result = tool.run(game_name=args.game, preset=args.preset, project_name=args.game)
print(result.summary)
for f in result.files:
print(f" {f}")
print()
print(transport.summary())
return 0 if result.ok else 1
def _cmd_setup(args: argparse.Namespace) -> int:
settings = Settings(output_dir=args.output_dir, product_name=args.project_name)
transport = UnityTransport(settings)
tool = SetupUnityProjectTool(settings, transport)
result = tool.run(project_name=args.project_name)
print(result.summary)
for f in result.files:
print(f" {f}")
return 0 if result.ok else 1
def _cmd_qa(args: argparse.Namespace) -> int:
from unity_agent.qa import ProjectQA
qa = ProjectQA(args.project_root)
report = qa.run()
print(report.summary())
for issue in report.issues:
print(f" [{issue.severity.upper():7}] {issue.category:8} {issue.message} {issue.path}")
return 0 if report.passed else 1
def build_parser() -> argparse.ArgumentParser:
p = argparse.ArgumentParser(prog="unity_agent", description="Unity game agent CLI.")
sub = p.add_subparsers(dest="cmd", required=True)
p_list = sub.add_parser("list-tools", help="List every registered tool.")
p_list.set_defaults(func=_cmd_list_tools)
p_gen = sub.add_parser("generate", help="Generate a complete game.")
p_gen.add_argument("--game", default="OpenWorldCity", help="Game / project name.")
p_gen.add_argument("--preset", default="open_world_city",
choices=["open_world_city", "fps_arena", "minimal"])
p_gen.add_argument("--output-dir", default="unity_output",
help="Where to write the project (default: unity_output).")
p_gen.set_defaults(func=_cmd_generate)
p_setup = sub.add_parser("setup", help="Scaffold an empty Unity project.")
p_setup.add_argument("--project-name", default="GeneratedGame")
p_setup.add_argument("--output-dir", default="unity_output")
p_setup.set_defaults(func=_cmd_setup)
p_qa = sub.add_parser("qa", help="Run QA checks on a generated project.")
p_qa.add_argument("project_root", help="Path to the project root.")
p_qa.set_defaults(func=_cmd_qa)
return p
def main(argv: list[str] | None = None) -> int:
parser = build_parser()
args = parser.parse_args(argv)
return args.func(args)
if __name__ == "__main__":
sys.exit(main())