Spaces:
Sleeping
Sleeping
File size: 2,193 Bytes
b0620f3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | from __future__ import annotations
"""
Debug elixir estimation end-to-end.
Usage:
cd toxic_royale_env
BS_DEBUG_ELIXIR=1 python3 scripts/bluestacks_debug_elixir.py
It will:
- take a screenshot via scripts/bluestacks_screenshot.sh
- estimate elixir using the same algorithm as bluestacks_autoplay_deck_rules.py
- save ROI image to outputs/bluestacks/debug_elixir_roi_best.png (when BS_DEBUG_ELIXIR=1)
"""
import json
import os
import subprocess
import importlib.util
import sys
from pathlib import Path
def _load_estimator(root: Path):
"""
Load _estimate_elixir from scripts/bluestacks_autoplay_deck_rules.py without
requiring scripts/ to be a Python package.
"""
mod_path = root / "scripts" / "bluestacks_autoplay_deck_rules.py"
spec = importlib.util.spec_from_file_location("bluestacks_autoplay_deck_rules", mod_path)
if spec is None or spec.loader is None:
raise RuntimeError(f"Could not load module from {mod_path}")
module = importlib.util.module_from_spec(spec)
sys.modules[spec.name] = module
spec.loader.exec_module(module)
est = getattr(module, "_estimate_elixir", None)
if est is None:
raise RuntimeError("Missing _estimate_elixir in bluestacks_autoplay_deck_rules.py")
return est
def _run(cmd: list[str]) -> None:
subprocess.run(cmd, check=False)
def main() -> int:
root = Path(__file__).resolve().parents[1]
cfg_path = root / "config" / "bluestacks_gameplay.local.json"
if not cfg_path.exists():
raise SystemExit("Missing calibration: config/bluestacks_gameplay.local.json")
cfg = json.loads(cfg_path.read_text(encoding="utf-8"))
out_dir = root / "outputs" / "bluestacks"
out_dir.mkdir(parents=True, exist_ok=True)
img = out_dir / "debug_elixir_current.png"
_run([str(root / "scripts" / "bluestacks_screenshot.sh"), str(img)])
estimate = _load_estimator(root)
el = estimate(img_path=img, cfg_obj=cfg)
print("screenshot:", img)
print("elixir_est:", el)
if os.environ.get("BS_DEBUG_ELIXIR", "0") == "1":
print("roi:", out_dir / "debug_elixir_roi_best.png")
return 0
if __name__ == "__main__":
raise SystemExit(main())
|