From cb23d5b9acb10a3446388ce4745302a4d90a5670 Mon Sep 17 00:00:00 2001 From: Frank Date: Sun, 6 Sep 2026 19:34:24 +0200 Subject: [PATCH] Show AC on each tracker row Combatant snapshots armor_class from the enemy when added (like maxHp), shown as an "AC n" pill next to the name for quick hit checks. Migration backfills existing combatants from their enemy. Co-Authored-By: Claude Sonnet 5 --- migrations/Version20260906173325.php | 31 ++++++++++++++++++++++++++++ src/Controller/TrackerController.php | 1 + src/Entity/Combatant.php | 15 ++++++++++++++ templates/tracker/show.html.twig | 1 + 4 files changed, 48 insertions(+) create mode 100644 migrations/Version20260906173325.php diff --git a/migrations/Version20260906173325.php b/migrations/Version20260906173325.php new file mode 100644 index 0000000..eab9159 --- /dev/null +++ b/migrations/Version20260906173325.php @@ -0,0 +1,31 @@ +addSql('ALTER TABLE combatant ADD armor_class SMALLINT DEFAULT 10 NOT NULL'); + $this->addSql('UPDATE combatant c JOIN enemy e ON c.enemy_id = e.id SET c.armor_class = e.armor_class'); + $this->addSql('ALTER TABLE combatant ALTER armor_class DROP DEFAULT'); + } + + public function down(Schema $schema): void + { + $this->addSql('ALTER TABLE combatant DROP armor_class'); + } +} diff --git a/src/Controller/TrackerController.php b/src/Controller/TrackerController.php index c687c6e..df49312 100644 --- a/src/Controller/TrackerController.php +++ b/src/Controller/TrackerController.php @@ -77,6 +77,7 @@ class TrackerController extends AbstractController (new Combatant()) ->setEnemy($enemy) ->setLabel($label) + ->setArmorClass($enemy->getArmorClass()) ->setMaxHp($enemy->getHitPoints()) ->setCurrentHp($enemy->getHitPoints()) ->setPosition($pos++) diff --git a/src/Entity/Combatant.php b/src/Entity/Combatant.php index 9435471..8a4111c 100644 --- a/src/Entity/Combatant.php +++ b/src/Entity/Combatant.php @@ -30,6 +30,9 @@ class Combatant #[ORM\Column(length: 120)] private string $label = ''; + #[ORM\Column(type: Types::SMALLINT)] + private int $armorClass = 10; + #[ORM\Column(type: Types::SMALLINT)] private int $maxHp = 1; @@ -113,6 +116,18 @@ class Combatant return $this; } + public function getArmorClass(): int + { + return $this->armorClass; + } + + public function setArmorClass(int $armorClass): static + { + $this->armorClass = $armorClass; + + return $this; + } + public function getMaxHp(): int { return $this->maxHp; diff --git a/templates/tracker/show.html.twig b/templates/tracker/show.html.twig index 26b2730..4742a33 100644 --- a/templates/tracker/show.html.twig +++ b/templates/tracker/show.html.twig @@ -51,6 +51,7 @@
{{ c.label }} + AC {{ c.armorClass }} {% if c.isDown %}Down{% endif %}
{% if c.enemy %}