Files
tft/backend/tft/sim/economy.py

41 lines
1.1 KiB
Python

"""Pure gold/XP math. State lives in game.py."""
def interest(gold: int, cfg: dict) -> int:
g = cfg["gold"]
return min(gold // 10 * g["interest_per_10"], g["interest_cap"])
def streak_gold(streak: int, cfg: dict) -> int:
bonus = 0
for min_streak, gold in cfg["gold"]["streak_gold"]:
if abs(streak) >= min_streak:
bonus = gold
return bonus
def round_income(gold: int, streak: int, won: bool, round_label: str, cfg: dict) -> int:
g = cfg["gold"]
base = g["early_income"].get(round_label, g["base_income"])
income = base + interest(gold, cfg) + streak_gold(streak, cfg)
if won:
income += g["win_bonus"]
return income
def xp_to_next(level: int, cfg: dict) -> int | None:
xp = cfg["xp"]
if level >= xp["max_level"]:
return None
return xp["to_next"][level - xp.get("start_level", 1)]
def apply_xp(level: int, xp: int, gained: int, cfg: dict) -> tuple[int, int]:
xp += gained
while (need := xp_to_next(level, cfg)) is not None and xp >= need:
xp -= need
level += 1
if level >= cfg["xp"]["max_level"]:
xp = 0
return level, xp