from .dialogue import *
from _typeshed import Incomplete

class MapImageParameters:
    @classmethod
    def get_darkness(cls) -> int: ...
    @classmethod
    def set_darkness(cls, value: int) -> None: ...
    @classmethod
    def set_tile_size(cls, _width: int, _height: int) -> None: ...
    @classmethod
    def get_tile_width(cls) -> int: ...
    @classmethod
    def get_tile_height(cls) -> int: ...

class DecorationImagesModule:
    DEFAULT_DECORATION_IMAGE_SPRITE_SHEET: SpriteImage
    CUSTOM_DECORATION_IMAGE_SPRITE_SHEET: SpriteImage
    @classmethod
    def init(cls) -> None: ...
    @classmethod
    def count_variations(cls, _type: str) -> int: ...
    @classmethod
    def add_image(cls, _type: str) -> None: ...
    @classmethod
    def get_image(cls, _id: str, darkMode: bool) -> StaticImage: ...

class TileMapImagesModule:
    DEFAULT_TILE_MAP_IMAGE_SPRITE_SHEET: SpriteImage
    TILE_TEMPLE_WIDTH: int
    TILE_TEMPLE_HEIGHT: int
    @classmethod
    def init(cls) -> None: ...
    @classmethod
    def update_size(cls, _width: int, _height: int) -> None: ...
    @classmethod
    def add_image(cls, _id: str) -> None: ...
    @classmethod
    def get_image(cls, _id: str, darkMode: bool) -> StaticImage: ...

class _EntityImagesCollection:
    def __init__(self, imagesList: tuple[StaticImage, ...], crop_size: list[int], offset: list[int], original_img_size: list[int]) -> None: ...
    def __len__(self) -> int: ...
    def get_image(self, index: int) -> StaticImage: ...
    def set_size(self, width: number, height: number) -> None: ...
    def set_index(self, index: int) -> None: ...
    def flip_all(self) -> None: ...
    def get_rectangle(self) -> Rectangle: ...
    def draw_onto(self, _surface: ImageSurface, alpha: int, ifFlip: bool, pos: tuple, draw_outline: bool) -> None: ...

class EntitySpriteImageManager:
    SPRITES_PATH: Final[str]
    @classmethod
    def get_images(cls, characterType: str, action: str) -> _EntityImagesCollection: ...
    @classmethod
    def try_get_image_references(cls, faction: str, characterType: str, action: str) -> _EntityImagesCollection: ...
    @classmethod
    def does_action_exist(cls, characterType: str, action: str) -> bool: ...
    @classmethod
    def generate(cls, entityFaction: str, entityType: str) -> None: ...
    @classmethod
    def generate_all(cls) -> None: ...
    @classmethod
    def load(cls, faction: str, characterType: str, mode: str) -> dict: ...

class Snow(Coordinate):
    imgId: Incomplete
    size: Incomplete
    speed: Incomplete
    def __init__(self, imgId: int, size: int, speed: int, x: int, y: int) -> None: ...
    def move(self, speed_unit: int) -> None: ...

class WeatherSystem:
    def __init__(self) -> None: ...
    def init(self, weather: str, entityNum: int = ...) -> None: ...
    def get_init(self) -> bool: ...
    def draw(self, _surface: ImageSurface, perBlockWidth: number) -> None: ...

class DecorationObject(GameObject2d):
    def __init__(self, x: int, y: int, _type: str, _variation: int, status: dict = ...) -> None: ...
    def ensure_image_cached(self) -> None: ...
    @property
    def id(self) -> str: ...
    @property
    def type(self) -> str: ...
    @property
    def variation(self) -> int: ...
    def to_dict(self) -> dict: ...
    @staticmethod
    def from_dict(_data: dict) -> DecorationObject: ...
    def is_on_pos(self, pos: object) -> bool: ...
    def get_status(self, key: str) -> object: ...
    def set_status(self, key: str, value: object) -> None: ...
    def remove_status(self, key: str) -> None: ...
    def blit(self, _surface: ImageSurface, pos: tuple[int, int], is_dark: bool, alpha: int) -> None: ...
    def get_width(self) -> int: ...
    def get_height(self) -> int: ...

class TileMap(Rectangle, SurfaceWithLocalPos):
    def __init__(self) -> None: ...
    def update(self, mapDataDic: dict, perBlockWidth: int_f, perBlockHeight: int_f) -> None: ...
    @property
    def decorations(self) -> tuple[DecorationObject, ...]: ...
    @property
    def row(self) -> int: ...
    @property
    def column(self) -> int: ...
    @property
    def tile_width(self) -> int: ...
    @property
    def tile_height(self) -> int: ...
    def to_dict(self) -> dict: ...
    def is_passable(self, _x: int, _y: int) -> bool: ...
    def get_local_pos_in_percentage(self) -> dict[str, str]: ...
    def dev_mode(self) -> None: ...
    def get_decoration(self, pos: object) -> Optional[DecorationObject]: ...
    def add_decoration(self, _data: dict) -> None: ...
    def remove_decoration(self, decoration: DecorationObject) -> None: ...
    def count_decorations(self) -> int: ...
    def set_tile_size(self, newPerBlockWidth: int_f, newPerBlockHeight: int_f) -> None: ...
    def set_local_x(self, value: int_f) -> None: ...
    def set_local_y(self, value: int_f) -> None: ...
    def display_map(self, _surface: ImageSurface, screen_to_move_x: int = ..., screen_to_move_y: int = ...) -> tuple: ...
    def display_decoration(self, _surface: ImageSurface, occupied_coordinates: tuple) -> None: ...
    def get_tile(self, _x: int, _y: int) -> str: ...
    def set_tile(self, _x: int, _y: int, name: str) -> None: ...
    def calculate_coordinate(self, on_screen_pos: Optional[tuple[int, int]] = ...) -> Optional[tuple[int, int]]: ...
    def calculate_position(self, x: int_f, y: int_f) -> tuple[int, int]: ...
    def refresh_lit_area(self, alliances_data: dict) -> None: ...
    def is_coordinate_in_lit_area(self, x: int_f, y: int_f) -> bool: ...
    def find_path(self, start: tuple[int, int], goal: tuple[int, int], alliances: dict, enemies: dict, can_move_through_darkness: bool = ..., lenMax: Optional[int] = ..., enemies_ignored: tuple = ..., ignore_alliances: bool = ...) -> list[tuple[int, int]]: ...

class Entity(Position):
    def __init__(self, DATA: dict, mode: str) -> None: ...
    def to_dict(self) -> dict: ...
    def just_entered_a_new_tile(self) -> bool: ...
    def set_x(self, value: number) -> None: ...
    def set_y(self, value: number) -> None: ...
    def get_coordinate(self) -> tuple[int, int]: ...
    @classmethod
    def get_entity_data(cls, _type: str) -> dict: ...
    @property
    def faction(self) -> str: ...
    @property
    def attitude(self) -> int: ...
    def set_attitude(self, value: int) -> None: ...
    @property
    def kind(self) -> str: ...
    @property
    def type(self) -> str: ...
    @property
    def attack_coverage(self) -> int: ...
    @property
    def effective_range(self) -> tuple[int, ...]: ...
    @property
    def max_damage(self) -> int: ...
    @property
    def min_damage(self) -> int: ...
    def attack(self, another_entity: Entity) -> int: ...
    def set_selected(self, value: bool) -> None: ...
    def is_hovered(self) -> bool: ...
    def is_overlapped_with(self, _rect: Rectangle) -> bool: ...
    @property
    def action(self) -> str: ...
    def set_action(self, action: str = ..., ifLoop: bool = ..., switchToIdleAfterwards: bool = ...) -> None: ...
    def is_idle(self) -> bool: ...
    def get_imgId(self, action: str) -> int: ...
    def get_imgNum(self, action: str) -> int: ...
    def set_imgId(self, action: str, imgId: int) -> None: ...
    def reset_imgId(self, action: str) -> None: ...
    def add_imgId(self, action: str, amount: int = ...) -> None: ...
    def get_imgAlpha(self, action: str) -> int: ...
    def set_imgAlpha(self, action: str, alpha: int) -> None: ...
    def is_alive(self) -> bool: ...
    @property
    def current_hp(self) -> int: ...
    @property
    def max_hp(self) -> int: ...
    @property
    def hp_percentage(self) -> float: ...
    def heal(self, hpHealed: int) -> None: ...
    def injury(self, damage: int) -> None: ...
    def recover_armor(self, value: int) -> None: ...
    def set_flip(self, theBool: bool) -> None: ...
    def play_sound(self, kind_of_sound: str) -> None: ...
    def move_follow(self, path: list) -> None: ...
    def near(self, otherEntity: Union[Position, GameObject2d]) -> bool: ...
    def get_effective_range_coordinates(self, MAP_P: TileMap, ifHalfMode: bool = ...) -> list[list[tuple[int, int]]]: ...
    def range_target_in(self, otherEntity: Entity) -> int: ...
    def get_attack_coverage_coordinates(self, _x: int, _y: int, MAP_P: TileMap) -> list[tuple[int, int]]: ...
    def set_flip_based_on_pos(self, pos: object) -> None: ...
    def draw(self, _surface: ImageSurface, MAP_P: TileMap, update_id_only: bool = ...) -> None: ...
    def draw_custom(self, action: str, pos: tuple[int, int], _surface: ImageSurface, MAP_P: TileMap, alpha: int = ...) -> None: ...

class AbstractBattleSystem(AbstractGameSystem, metaclass=ABCMeta):
    def __init__(self) -> None: ...
    def new(self, chapterType: str, chapterId: int, projectName: Optional[str] = ...) -> None: ...
    def load_progress(self, _data: dict) -> None: ...
    def get_map_file_location(self) -> str: ...

class AbstractMapEditor(AbstractBattleSystem, metaclass=ABCMeta):
    def __init__(self) -> None: ...
    def update_entity(self, faction: str, key: str, data: dict) -> None: ...
    def remove_entity_on_pos(self, target_pos: tuple[int, int]) -> None: ...
    def new(self, chapterType: str, chapterId: int, projectName: Optional[str] = ...) -> None: ...
    def draw(self, _surface: ImageSurface) -> None: ...
