diff --git a/pyproject.toml b/pyproject.toml index 382d2dd..64e6098 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = 'camp-engine' version = '0.0.1' -authors = [{ name = "Ken Moriarty", email = "kwatford@gmail.com" }] +authors = [{ name = "Ken Moriarty", email = "ken@kmoriarty.dev" }] description = "Rules engines for the Camp app" readme = "README.md" license = { file = "LICENSE" } @@ -19,7 +19,7 @@ force_single_line = true name = "camp-engine" version = "0.1.0" description = "" -authors = ["Ken Moriarty "] +authors = ["Ken Moriarty "] readme = "README.md" packages = [{ include = "camp", from = "src" }] diff --git a/src/camp/engine/rules/tempest/controllers/feature_controller.py b/src/camp/engine/rules/tempest/controllers/feature_controller.py index 26efefd..6087c46 100644 --- a/src/camp/engine/rules/tempest/controllers/feature_controller.py +++ b/src/camp/engine/rules/tempest/controllers/feature_controller.py @@ -588,7 +588,7 @@ def child_purchase_limit(self) -> int | None: @property def child_purchase_count(self) -> int: - return sum(c.purchased_ranks for c in self.children) + return sum(c.purchased_ranks for c in self.children if c.purchase_limit_applies) @property def child_purchase_remaining(self) -> int | None: @@ -600,6 +600,10 @@ def child_purchase_remaining(self) -> int | None: def child_purchase_budget(self) -> int | None: return None + @property + def purchase_limit_applies(self) -> bool: + return self.definition.use_purchase_limit + def can_increase(self, value: int = 1) -> Decision: if value <= 0: return _MUST_BE_POSITIVE @@ -612,7 +616,11 @@ def can_increase(self, value: int = 1) -> Decision: if purchaseable <= 0: return Decision.NO # If the parent feature has purchase limits for children, enforce it. - if self.parent and self.parent.supports_child_purchases: + if ( + self.purchase_limit_applies + and self.parent + and self.parent.supports_child_purchases + ): if (remaining := self.parent.child_purchase_remaining) is not None: if remaining < value: return Decision( diff --git a/src/camp/engine/rules/tempest/defs.py b/src/camp/engine/rules/tempest/defs.py index ed88b1c..f09bbbf 100644 --- a/src/camp/engine/rules/tempest/defs.py +++ b/src/camp/engine/rules/tempest/defs.py @@ -166,6 +166,7 @@ class BaseFeatureDef(base_models.BaseFeatureDef, PowerCard): choices: dict[str, ChoiceDef] | None = None subcard: PowerCard | list[PowerCard] | None = None child_purchase: ChildPurchaseDef | None = None + use_purchase_limit: bool = False def post_validate(self, ruleset: base_models.BaseRuleset) -> None: super().post_validate(ruleset)