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())