1
0
Fork 0
taleweave-ai/taleweave/models/effect.py

102 lines
2.2 KiB
Python

from typing import List, Literal
from pydantic import Field
from .base import FloatRange, IntRange, dataclass, uuid
@dataclass
class StringEffectPattern:
name: str
append: str | List[str] | None = None
prepend: str | List[str] | None = None
set: str | List[str] | None = None
@dataclass
class FloatEffectPattern:
name: str
set: float | FloatRange | None = None
offset: float | FloatRange | None = None
multiply: float | FloatRange | None = None
@dataclass
class IntEffectPattern:
name: str
set: int | IntRange | None = None
offset: int | IntRange | None = None
multiply: float | FloatRange | None = None
@dataclass
class BooleanEffectPattern:
name: str
set: bool | None = None
toggle: bool | None = None
AttributeEffectPattern = (
StringEffectPattern | FloatEffectPattern | IntEffectPattern | BooleanEffectPattern
)
@dataclass
class EffectPattern:
name: str
description: str
application: Literal["permanent", "temporary"]
attributes: List[AttributeEffectPattern] = Field(default_factory=list)
cooldown: int | None = None
duration: int | IntRange | None = None
last_used: int | None = None
uses: int | None = None
id: str = Field(default_factory=uuid)
type: Literal["effect_pattern"] = "effect_pattern"
@dataclass
class BooleanEffectResult:
name: str
set: bool | None = None
toggle: bool | None = None
@dataclass
class FloatEffectResult:
name: str
set: float | None = None
offset: float | None = None
multiply: float | None = None
@dataclass
class IntEffectResult:
name: str
set: int | None = None
offset: int | None = None
multiply: float | None = None # still needs to be a float for decimals/division
@dataclass
class StringEffectResult:
name: str
append: str | None = None
prepend: str | None = None
set: str | None = None
AttributeEffectResult = (
BooleanEffectResult | FloatEffectResult | IntEffectResult | StringEffectResult
)
@dataclass
class EffectResult:
name: str
description: str
attributes: List[AttributeEffectResult] = Field(default_factory=list)
duration: int | None = None
id: str = Field(default_factory=uuid)
type: Literal["effect_result"] = "effect_result"