Add prototype gameplay loop with character/battlefield assets and server game APIs.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
#!/usr/bin/env python3
|
||||
"""等待 DGXA → 已验收 RockBall.fbx → TokenRig+UniMate → 入库 → SetupAnimalAnimator。"""
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
from pathlib import Path
|
||||
|
||||
REPO = Path(__file__).resolve().parents[1]
|
||||
NVSYNC = Path(
|
||||
os.environ.get("LOCALAPPDATA", "")
|
||||
) / "Programs/nvidia-sync/resources/bin/nvsync-amd64.exe"
|
||||
|
||||
|
||||
def ssh_ready() -> bool:
|
||||
try:
|
||||
r = subprocess.run(
|
||||
["ssh", "-o", "BatchMode=yes", "-o", "ConnectTimeout=8", "DGXA", "echo READY"],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=20,
|
||||
)
|
||||
return r.returncode == 0 and "READY" in (r.stdout or "")
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
|
||||
def nvsync_connect() -> None:
|
||||
if not NVSYNC.is_file():
|
||||
return
|
||||
try:
|
||||
subprocess.run(
|
||||
[str(NVSYNC), "connect", "DGXA", "--detach"],
|
||||
timeout=100,
|
||||
check=False,
|
||||
capture_output=True,
|
||||
)
|
||||
except subprocess.TimeoutExpired:
|
||||
pass
|
||||
|
||||
|
||||
def main() -> int:
|
||||
print("=== wait DGXA ===", flush=True)
|
||||
for attempt in range(1, 121):
|
||||
print(f"attempt {attempt}", flush=True)
|
||||
nvsync_connect()
|
||||
if ssh_ready():
|
||||
break
|
||||
time.sleep(15)
|
||||
else:
|
||||
print("DGXA still unreachable after wait", flush=True)
|
||||
return 2
|
||||
|
||||
caps = subprocess.run(
|
||||
[sys.executable, str(REPO / "Tools/dgx3d_animal_pipeline.py"), "--caps-only"],
|
||||
cwd=str(REPO),
|
||||
)
|
||||
if caps.returncode != 0:
|
||||
return caps.returncode
|
||||
|
||||
mesh = REPO / "AIClient/Assets/Bundles/Characters/Animal/RockBall/RockBall.fbx"
|
||||
cmd = [
|
||||
sys.executable,
|
||||
str(REPO / "Tools/dgx3d_animal_pipeline.py"),
|
||||
"--mesh",
|
||||
str(mesh),
|
||||
"-o",
|
||||
str(REPO / "Tools/output/rockball_dgx"),
|
||||
"--name",
|
||||
"RockBall",
|
||||
]
|
||||
print("RUN", " ".join(cmd), flush=True)
|
||||
r = subprocess.run(cmd, cwd=str(REPO))
|
||||
if r.returncode != 0:
|
||||
return r.returncode
|
||||
|
||||
manifest = REPO / "Tools/output/rockball_dgx/RockBall_manifest.json"
|
||||
r = subprocess.run(
|
||||
[sys.executable, str(REPO / "Tools/install_animal_rigged.py"), "-m", str(manifest)],
|
||||
cwd=str(REPO),
|
||||
)
|
||||
if r.returncode != 0:
|
||||
return r.returncode
|
||||
|
||||
r = subprocess.run(
|
||||
[
|
||||
"unity",
|
||||
"command",
|
||||
"--project-path",
|
||||
"D:/UD/AI/AIGame/AIClient",
|
||||
"run_script",
|
||||
"--file",
|
||||
"AgentScripts/SetupAnimalAnimator.cs",
|
||||
"--entry",
|
||||
"SetupAnimalAnimator.SetupRockBall",
|
||||
],
|
||||
cwd=str(REPO),
|
||||
)
|
||||
return r.returncode
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user