"""Type stubs for McRogueFace Python API.

Auto-generated - do not edit directly.
"""

from typing import Any, List, Dict, Tuple, Optional, Callable, Union

# Module documentation
# McRogueFace Python API\n\nCore game engine interface for creating roguelike games with Python.\n\nThis module provides:\n- Scene management (createScene, setScene, currentScene)\n- UI components (Frame, Caption, Sprite, Grid)\n- Entity system for game objects\n- Audio playback (sound effects and music)\n- Timer system for scheduled events\n- Input handling\n- Performance metrics\n\nExample:\n    import mcrfpy\n    \n    # Create a new scene\n    mcrfpy.createScene('game')\n    mcrfpy.setScene('game')\n    \n    # Add UI elements\n    frame = mcrfpy.Frame(10, 10, 200, 100)\n    caption = mcrfpy.Caption('Hello World', 50, 50)\n    mcrfpy.sceneUI().extend([frame, caption])\n

# Classes

class Animation:
    """Animation object for animating UI properties"""
    def __init__(selftype(self)) -> None: ...

    def get_current_value(self, *args, **kwargs) -> Any: ...
    def start(self, *args, **kwargs) -> Any: ...
    def update(selfreturns True if still running) -> Any: ...

class Caption:
    """Caption(text='', x=0, y=0, font=None, fill_color=None, outline_color=None, outline=0, click=None)"""
    def __init__(selftype(self)) -> None: ...

    def get_bounds(selfx, y, width, height) -> Any: ...
    def move(selfdx, dy) -> Any: ...
    def resize(selfwidth, height) -> Any: ...

class Color:
    """SFML Color Object"""
    def __init__(selftype(self)) -> None: ...

    def from_hex(selfe.g., '#FF0000' or 'FF0000') -> Any: ...
    def lerp(self, *args, **kwargs) -> Any: ...
    def to_hex(self, *args, **kwargs) -> Any: ...

class Drawable:
    """Base class for all drawable UI elements"""
    def __init__(selftype(self)) -> None: ...

    def get_bounds(selfx, y, width, height) -> Any: ...
    def move(selfdx, dy) -> Any: ...
    def resize(selfwidth, height) -> Any: ...

class Entity:
    """UIEntity objects"""
    def __init__(selftype(self)) -> None: ...

    def at(self, *args, **kwargs) -> Any: ...
    def die(self, *args, **kwargs) -> Any: ...
    def get_bounds(selfx, y, width, height) -> Any: ...
    def index(self, *args, **kwargs) -> Any: ...
    def move(selfdx, dy) -> Any: ...
    def path_to(selfx: int, y: int) -> bool: ...
    def resize(selfwidth, height) -> Any: ...
    def update_visibility(self) -> None: ...

class EntityCollection:
    """Iterable, indexable collection of Entities"""
    def __init__(selftype(self)) -> None: ...

    def append(self, *args, **kwargs) -> Any: ...
    def count(self, *args, **kwargs) -> Any: ...
    def extend(self, *args, **kwargs) -> Any: ...
    def index(self, *args, **kwargs) -> Any: ...
    def remove(self, *args, **kwargs) -> Any: ...

class Font:
    """SFML Font Object"""
    def __init__(selftype(self)) -> None: ...

class Frame:
    """Frame(x=0, y=0, w=0, h=0, fill_color=None, outline_color=None, outline=0, click=None, children=None)"""
    def __init__(selftype(self)) -> None: ...

    def get_bounds(selfx, y, width, height) -> Any: ...
    def move(selfdx, dy) -> Any: ...
    def resize(selfwidth, height) -> Any: ...

class Grid:
    """Grid(x=0, y=0, grid_size=(20, 20), texture=None, tile_width=16, tile_height=16, scale=1.0, click=None)"""
    def __init__(selftype(self)) -> None: ...

    def at(self, *args, **kwargs) -> Any: ...
    def compute_astar_path(selfx1: int, y1: int, x2: int, y2: int, diagonal_cost: float = 1.41) -> List[Tuple[int, int]]: ...
    def compute_dijkstra(selfroot_x: int, root_y: int, diagonal_cost: float = 1.41) -> None: ...
    def compute_fov(selfx: int, y: int, radius: int = 0, light_walls: bool = True, algorithm: int = FOV_BASIC) -> None: ...
    def find_path(selfx1: int, y1: int, x2: int, y2: int, diagonal_cost: float = 1.41) -> List[Tuple[int, int]]: ...
    def get_bounds(selfx, y, width, height) -> Any: ...
    def get_dijkstra_distance(selfx: int, y: int) -> Optional[float]: ...
    def get_dijkstra_path(selfx: int, y: int) -> List[Tuple[int, int]]: ...
    def is_in_fov(selfx: int, y: int) -> bool: ...
    def move(selfdx, dy) -> Any: ...
    def resize(selfwidth, height) -> Any: ...

class GridPoint:
    """UIGridPoint object"""
    def __init__(selftype(self)) -> None: ...

class GridPointState:
    """UIGridPointState object"""
    def __init__(selftype(self)) -> None: ...

class Scene:
    """Base class for object-oriented scenes"""
    def __init__(selftype(self)) -> None: ...

    def activate(self, *args, **kwargs) -> Any: ...
    def get_ui(self, *args, **kwargs) -> Any: ...
    def register_keyboard(selfalternative to overriding on_keypress) -> Any: ...

class Sprite:
    """Sprite(x=0, y=0, texture=None, sprite_index=0, scale=1.0, click=None)"""
    def __init__(selftype(self)) -> None: ...

    def get_bounds(selfx, y, width, height) -> Any: ...
    def move(selfdx, dy) -> Any: ...
    def resize(selfwidth, height) -> Any: ...

class Texture:
    """SFML Texture Object"""
    def __init__(selftype(self)) -> None: ...

class Timer:
    """Timer object for scheduled callbacks"""
    def __init__(selftype(self)) -> None: ...

    def cancel(self, *args, **kwargs) -> Any: ...
    def pause(self, *args, **kwargs) -> Any: ...
    def restart(self, *args, **kwargs) -> Any: ...
    def resume(self, *args, **kwargs) -> Any: ...

class UICollection:
    """Iterable, indexable collection of UI objects"""
    def __init__(selftype(self)) -> None: ...

    def append(self, *args, **kwargs) -> Any: ...
    def count(self, *args, **kwargs) -> Any: ...
    def extend(self, *args, **kwargs) -> Any: ...
    def index(self, *args, **kwargs) -> Any: ...
    def remove(self, *args, **kwargs) -> Any: ...

class UICollectionIter:
    """Iterator for a collection of UI objects"""
    def __init__(selftype(self)) -> None: ...

class UIEntityCollectionIter:
    """Iterator for a collection of UI objects"""
    def __init__(selftype(self)) -> None: ...

class Vector:
    """SFML Vector Object"""
    def __init__(selftype(self)) -> None: ...

    def angle(self, *args, **kwargs) -> Any: ...
    def copy(self, *args, **kwargs) -> Any: ...
    def distance_to(self, *args, **kwargs) -> Any: ...
    def dot(self, *args, **kwargs) -> Any: ...
    def magnitude(self, *args, **kwargs) -> Any: ...
    def magnitude_squared(self, *args, **kwargs) -> Any: ...
    def normalize(self, *args, **kwargs) -> Any: ...

class Window:
    """Window singleton for accessing and modifying the game window properties"""
    def __init__(selftype(self)) -> None: ...

    def center(self, *args, **kwargs) -> Any: ...
    def get(self, *args, **kwargs) -> Any: ...
    def screenshot(self, *args, **kwargs) -> Any: ...

# Functions

def createScene(name: str) -> None: ...
def createSoundBuffer(filename: str) -> int: ...
def currentScene() -> str: ...
def delTimer(name: str) -> None: ...
def exit() -> None: ...
def find(name: str, scene: str = None) -> UIDrawable | None: ...
def findAll(pattern: str, scene: str = None) -> list: ...
def getMetrics() -> dict: ...
def getMusicVolume() -> int: ...
def getSoundVolume() -> int: ...
def keypressScene(handler: callable) -> None: ...
def loadMusic(filename: str) -> None: ...
def playSound(buffer_id: int) -> None: ...
def sceneUI(scene: str = None) -> list: ...
def setMusicVolume(volume: int) -> None: ...
def setScale(multiplier: float) -> None: ...
def setScene(scene: str, transition: str = None, duration: float = 0.0) -> None: ...
def setSoundVolume(volume: int) -> None: ...
def setTimer(name: str, handler: callable, interval: int) -> None: ...

# Constants

FOV_BASIC: int
FOV_DIAMOND: int
FOV_PERMISSIVE_0: int
FOV_PERMISSIVE_1: int
FOV_PERMISSIVE_2: int
FOV_PERMISSIVE_3: int
FOV_PERMISSIVE_4: int
FOV_PERMISSIVE_5: int
FOV_PERMISSIVE_6: int
FOV_PERMISSIVE_7: int
FOV_PERMISSIVE_8: int
FOV_RESTRICTIVE: int
FOV_SHADOW: int
default_font: Any
default_texture: Any