feat(combat): expose per-pair movement and threat info in observation

This commit is contained in:
2026-09-06 14:01:34 +02:00
parent 90c71bbeb0
commit cfeb28e336
2 changed files with 157 additions and 8 deletions
+13
View File
@@ -678,6 +678,16 @@ class CombatEngine:
)
charge = self.can_charge(state, target)
can_charge = charge is not None and charge.weapon is not None
occupied = state.occupied_cells()
target_threatens_me = bool(
target.active
and any(w.kind == "melee" for w in target.usable_attacks())
and self.threatened_squares(target) & occupied
)
threatening_enemies: set[str] = set()
for cell in occupied:
for enemy in self.enemies_threatening(state, cell):
threatening_enemies.add(enemy.combatant.id)
return {
"target_index": self._states.index(target),
"distance_ft": distance_ft,
@@ -689,6 +699,9 @@ class CombatEngine:
self._grid, state.occupied_cells(), target.occupied_cells()
),
"flanking": self._flanking_bonus(state, target) > 0,
"movement_cost_ft": self.movement_cost_ft(state, target),
"target_threatens_me": target_threatens_me,
"enemies_threatening_me": len(threatening_enemies),
}
def _take_turn(self, state: CombatantState) -> bool: