RPG-style dialog box with multiple display styles and text animations.
Supports typewriter effect, fade-in, and character-by-character display.
_properties: Dict[str, Dict[str, Any]] = {**UIElement._properties, 'style': {'name': 'style', 'key': 'style', 'type': str, 'editable': True, 'description': 'Visual style: "default", "rpg", "pokemon", "modern".', 'options': ['default', 'rpg', 'pokemon', 'modern']}, 'text': {'name': 'text', 'key': 'text', 'type': str, 'editable': True, 'description': 'The dialog text content.'}, 'speaker_name': {'name': 'speaker name', 'key': 'speaker_name', 'type': str, 'editable': True, 'description': 'Name of the speaker displayed above the box.'}, 'animation_type': {'name': 'animation type', 'key': 'animation_type', 'type': str, 'editable': True, 'description': 'Type of text animation: "typewriter".'}, 'animation_speed': {'name': 'animation speed', 'key': 'animation_speed', 'type': int, 'editable': True, 'description': 'Characters per second for typewriter effect.'}}
def __init__(self: Any, x: int, y: int, width: int, height: int, style: Literal['default', 'rpg', 'pokemon', 'modern'] = 'default', theme: Optional[ThemeType] = None, element_id: Optional[str] = None) -> None
def _get_init_args(self: Any) -> Dict[str, Any]
def set_text(self: Any, text: str, speaker_name: str = '', instant: bool = False) -> None
def set_animation(self: Any, animation_type: str, speed: int = 30) -> None
def skip_animation(self: Any) -> None
def advance(self: Any) -> bool
def set_on_complete(self: Any, callback: Callable[[], None]) -> None
def set_on_advance(self: Any, callback: Callable[[], None]) -> None
def update(self: Any, dt: float, inputState: InputState) -> None
def render(self: Any, renderer: Renderer) -> None
def _render_wrapped_text(self: Any, renderer: Renderer, x: int, y: int, width: int, height: int, theme: Any) -> None