/**
 * gameAssetTypes.ts — Types for GameAsset2dEditor
 *
 * Supports tile maps, sprite sheets, animations, and game asset processing.
 */
export type TileMapMode = '2d' | '2.5d-isometric' | '2.5d-oblique';
export interface TileDefinition {
    id: string;
    name: string;
    image: ImageData;
    thumbnail: string;
    width: number;
    height: number;
    properties: Record<string, string | number | boolean>;
    collision?: CollisionShape;
    animated?: boolean;
    frames?: string[];
    frameDuration?: number;
}
export interface CollisionShape {
    type: 'none' | 'full' | 'custom';
    polygons?: {
        x: number;
        y: number;
    }[][];
}
export interface TileLayer {
    id: string;
    name: string;
    visible: boolean;
    locked: boolean;
    opacity: number;
    tiles: (string | null)[][];
    parallaxX: number;
    parallaxY: number;
    offsetX: number;
    offsetY: number;
    zIndex: number;
}
export interface TileMap {
    id: string;
    name: string;
    mode: TileMapMode;
    width: number;
    height: number;
    tileWidth: number;
    tileHeight: number;
    layers: TileLayer[];
    properties: Record<string, string | number | boolean>;
    backgroundColor: string;
}
export interface SpriteFrame {
    id: string;
    name: string;
    x: number;
    y: number;
    width: number;
    height: number;
    pivotX: number;
    pivotY: number;
    trimmed?: boolean;
    trimRect?: {
        x: number;
        y: number;
        w: number;
        h: number;
    };
}
export interface SpriteSheet {
    id: string;
    name: string;
    image: HTMLImageElement | null;
    imageData: ImageData | null;
    dataUrl: string;
    width: number;
    height: number;
    frames: SpriteFrame[];
    animations: SpriteAnimation[];
}
export interface SpriteAnimation {
    id: string;
    name: string;
    frameIds: string[];
    frameDurations: number[];
    loop: boolean;
    pingPong: boolean;
}
export interface AnimationState {
    id: string;
    name: string;
    animationId: string;
    speed: number;
    loop: boolean;
    position: {
        x: number;
        y: number;
    };
}
export interface AnimationTransition {
    id: string;
    fromStateId: string;
    toStateId: string;
    condition: TransitionCondition;
    duration: number;
    priority: number;
}
export interface TransitionCondition {
    type: 'trigger' | 'bool' | 'int' | 'float' | 'any';
    paramName: string;
    comparison?: '==' | '!=' | '>' | '<' | '>=' | '<=';
    value?: string | number | boolean;
}
export interface AnimationParameter {
    id: string;
    name: string;
    type: 'trigger' | 'bool' | 'int' | 'float';
    defaultValue: boolean | number;
}
export interface AnimationStateMachine {
    id: string;
    name: string;
    states: AnimationState[];
    transitions: AnimationTransition[];
    parameters: AnimationParameter[];
    entryStateId: string;
    anyStateTransitions: AnimationTransition[];
}
export type EffectType = 'outline' | 'shadow' | 'glow' | 'palette-swap' | 'pixelate' | 'blur' | 'brightness' | 'contrast' | 'saturation' | 'hue-shift' | 'invert' | 'tint';
export interface Effect {
    id: string;
    type: EffectType;
    enabled: boolean;
    params: Record<string, number | string>;
}
export interface EffectPreset {
    id: string;
    name: string;
    effects: Effect[];
}
export interface GameAssetProject {
    id: string;
    name: string;
    tileSets: TileDefinition[];
    tileMaps: TileMap[];
    spriteSheets: SpriteSheet[];
    stateMachines: AnimationStateMachine[];
    effectPresets: EffectPreset[];
    settings: ProjectSettings;
}
export interface ProjectSettings {
    defaultTileWidth: number;
    defaultTileHeight: number;
    pixelsPerUnit: number;
    exportFormat: 'json' | 'yaml' | 'binary';
    compressImages: boolean;
}
export type EditorMode = 'tilemap' | 'spritesheet' | 'animation' | 'effects';
export type TileMapTool = 'select' | 'brush' | 'eraser' | 'fill' | 'rectangle' | 'ellipse' | 'line' | 'eyedropper' | 'move';
export type SpriteSheetTool = 'select' | 'slice' | 'auto-slice' | 'merge' | 'split' | 'move' | 'resize';
export interface EditorState {
    mode: EditorMode;
    tileMapTool: TileMapTool;
    spriteSheetTool: SpriteSheetTool;
    selectedTileId: string | null;
    selectedFrameIds: string[];
    selectedStateId: string | null;
    activeLayerId: string | null;
    activeTileMapId: string | null;
    activeSpriteSheetId: string | null;
    activeStateMachineId: string | null;
    zoom: number;
    panX: number;
    panY: number;
    showGrid: boolean;
    showCollision: boolean;
    snapToGrid: boolean;
}
export interface ExportOptions {
    format: 'png' | 'json' | 'tiled-json' | 'godot' | 'unity';
    includeImages: boolean;
    optimizeAtlas: boolean;
    maxAtlasSize: number;
    padding: number;
    powerOfTwo: boolean;
}
export interface TiledExport {
    type: 'map';
    version: string;
    tiledversion: string;
    width: number;
    height: number;
    tilewidth: number;
    tileheight: number;
    layers: object[];
    tilesets: object[];
}
export interface UnityExport {
    sprites: {
        name: string;
        rect: {
            x: number;
            y: number;
            width: number;
            height: number;
        };
        pivot: {
            x: number;
            y: number;
        };
        border: {
            x: number;
            y: number;
            z: number;
            w: number;
        };
    }[];
    animations: {
        name: string;
        frames: {
            sprite: string;
            duration: number;
        }[];
    }[];
}
export interface HistoryEntry {
    id: string;
    description: string;
    timestamp: number;
    snapshot: Partial<GameAssetProject>;
}
export declare const TILE_MAP_TOOLS: {
    id: TileMapTool;
    icon: string;
    label: string;
    key: string;
}[];
export declare const EFFECT_DEFAULTS: Record<EffectType, Record<string, number | string>>;
export declare const DEFAULT_PROJECT_SETTINGS: ProjectSettings;
