37 lines
1.1 KiB
Python
37 lines
1.1 KiB
Python
# races.py
|
|
from __future__ import annotations
|
|
from dataclasses import dataclass, field
|
|
from typing import Dict, List, Any
|
|
|
|
# Reuse your existing types:
|
|
|
|
from app.utils.hero_catalog import SkillDef, SpellDef
|
|
|
|
from app.models.enums import Race
|
|
from app.models.primitives import Attributes, Resources
|
|
|
|
@dataclass
|
|
class RacialTrait:
|
|
id: str
|
|
data: Dict[str, Any] = field(default_factory=dict)
|
|
|
|
@dataclass
|
|
class RaceSheet:
|
|
key: Race
|
|
display_name: str
|
|
|
|
# Flat bases/mods (additive by default)
|
|
base_attributes: Attributes = field(default_factory=Attributes)
|
|
starting_resources: Resources = field(default_factory=Resources)
|
|
|
|
# Starting lists (IDs only)
|
|
starting_skills: List[str] = field(default_factory=list)
|
|
starting_spells: List[str] = field(default_factory=list)
|
|
|
|
# Optional local catalogs (definitions)
|
|
skills: Dict[str, SkillDef] = field(default_factory=dict)
|
|
spells: Dict[str, SpellDef] = field(default_factory=dict)
|
|
|
|
# Racial traits/abilities with free-form data
|
|
traits: List[RacialTrait] = field(default_factory=list)
|