From 53aa3567f29ce5c91a41c9955f6478897e746881 Mon Sep 17 00:00:00 2001 From: ctan Date: Sat, 29 Aug 2026 20:29:31 +0200 Subject: [PATCH] feat(models): combat resources --- src/pf1e_simulator/combat.py | 9 +++++++++ src/pf1e_simulator/runner.py | 1 + 2 files changed, 10 insertions(+) diff --git a/src/pf1e_simulator/combat.py b/src/pf1e_simulator/combat.py index a6d0148..5f5bfe8 100644 --- a/src/pf1e_simulator/combat.py +++ b/src/pf1e_simulator/combat.py @@ -180,9 +180,18 @@ class CombatantState: # New duration-tracked fields active_buffs: list[ActiveBuff] = field(default_factory=list) active_conditions: list[ActiveCondition] = field(default_factory=list) + resources_left: dict[str, int] = field(default_factory=dict) moved_this_turn: bool = False power_attack: bool = False + def spend_resource(self, name: str, n: int = 1) -> bool: + """Spend n points of a resource. Returns True if successful, False if insufficient.""" + current = self.resources_left.get(name, 0) + if current < n: + return False + self.resources_left[name] = current - n + return True + @property def active(self) -> bool: return self.hp > 0 diff --git a/src/pf1e_simulator/runner.py b/src/pf1e_simulator/runner.py index 7d3ac92..dd66d50 100644 --- a/src/pf1e_simulator/runner.py +++ b/src/pf1e_simulator/runner.py @@ -111,6 +111,7 @@ def build_states(spec: EncounterSpec) -> list[CombatantState]: side=side.name, pos=pos, hp=effective.hp_max, + resources_left=dict(effective.resources), ) ) return states