feat(combat): expose weapon reference in observation snapshot
This commit is contained in:
@@ -86,6 +86,7 @@ from pathlib import Path
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from pf1e_simulator.conditions import CONDITIONS_BY_NAME, Condition
|
||||
from pf1e_simulator.dice import dice_to_str
|
||||
from pf1e_simulator.effects import ActiveBuff, ActiveCondition, StatModifier, resolve_modifiers
|
||||
from pf1e_simulator.loaders.combatant import CombatantLoadError, load_combatant
|
||||
from pf1e_simulator.models import PREDEFINED_SKILLS
|
||||
@@ -613,6 +614,29 @@ class CombatEngine:
|
||||
},
|
||||
"cmb": self._maneuver_cmb(state),
|
||||
"cmd": self._maneuver_cmd(state),
|
||||
"attacks": tuple(
|
||||
{
|
||||
"id": attack.id,
|
||||
"name": attack.name,
|
||||
"kind": attack.kind,
|
||||
"attack_bonus": attack.attack_bonus,
|
||||
"damage": tuple(
|
||||
{
|
||||
"formula": dice_to_str(component.formula),
|
||||
"types": tuple(component.types),
|
||||
}
|
||||
for component in attack.damage
|
||||
),
|
||||
"damage_bonus": attack.damage_bonus,
|
||||
"crit_range": attack.crit_range,
|
||||
"crit_mult": attack.crit_mult,
|
||||
"reach_ft": attack.reach_ft,
|
||||
"range_increment_ft": attack.range_increment_ft,
|
||||
"count": attack.count,
|
||||
"firearm": attack.firearm,
|
||||
}
|
||||
for attack in state.combatant.attacks
|
||||
),
|
||||
}
|
||||
|
||||
def _pair_snapshot(
|
||||
|
||||
@@ -122,3 +122,20 @@ def parse_dice(text: str) -> DiceExpr:
|
||||
raise DiceParseError(text) from None
|
||||
|
||||
return DiceExpr.flat(n)
|
||||
|
||||
|
||||
def dice_to_str(expr: DiceExpr) -> str:
|
||||
"""Serialize a DiceExpr into canonical dice notation.
|
||||
|
||||
Inverse of `parse_dice`: flat expressions (count=0) render as the bare
|
||||
integer, dice expressions render as "NdS" with a signed bonus appended
|
||||
only when non-zero.
|
||||
"""
|
||||
if expr.count == 0:
|
||||
return str(expr.bonus)
|
||||
base = f"{expr.count}d{expr.sides}"
|
||||
if expr.bonus > 0:
|
||||
return f"{base}+{expr.bonus}"
|
||||
if expr.bonus < 0:
|
||||
return f"{base}{expr.bonus}"
|
||||
return base
|
||||
|
||||
Reference in New Issue
Block a user