37 lines
1.2 KiB
Python
37 lines
1.2 KiB
Python
from __future__ import annotations
|
|
|
|
TYPE_RADIANT = "radiant"
|
|
TYPE_NOCTURNAL = "nocturnal"
|
|
TYPE_ICE = "ice"
|
|
TYPE_GARDEN = "garden"
|
|
TYPE_WILDFLOWER = "wildflower"
|
|
|
|
ALL_TYPES = (TYPE_RADIANT, TYPE_NOCTURNAL, TYPE_ICE, TYPE_GARDEN, TYPE_WILDFLOWER)
|
|
|
|
# type_beats[X] = the type that X is strong against
|
|
TYPE_BEATS = {
|
|
TYPE_RADIANT: TYPE_NOCTURNAL,
|
|
TYPE_NOCTURNAL: TYPE_ICE,
|
|
TYPE_ICE: TYPE_GARDEN,
|
|
TYPE_GARDEN: TYPE_WILDFLOWER,
|
|
TYPE_WILDFLOWER: TYPE_RADIANT,
|
|
}
|
|
|
|
TYPE_ADVANTAGE_MULT = 1.4 # hitting a type you're strong against
|
|
TYPE_DISADVANTAGE_MULT = 0.7 # hitting a type that's strong against you
|
|
|
|
|
|
def type_multiplier(attacker_type: str, defender_type: str) -> float:
|
|
"""Damage multiplier between two plant types. Only affects damage."""
|
|
if TYPE_BEATS.get(attacker_type) == defender_type:
|
|
return TYPE_ADVANTAGE_MULT
|
|
if TYPE_BEATS.get(defender_type) == attacker_type:
|
|
return TYPE_DISADVANTAGE_MULT
|
|
return 1.0
|
|
|
|
|
|
def type_relations(ptype: str):
|
|
"""Return (strong_against, weak_against) for a type."""
|
|
strong = TYPE_BEATS.get(ptype)
|
|
weak = next((k for k, v in TYPE_BEATS.items() if v == ptype), None)
|
|
return strong, weak |