import { System } from '../core/System'; import { GameEntity } from '../core/Entity'; /** 等距配置 */ export interface IsometricConfig { /** 地块宽度(像素),标准等距用 2:1 比例 */ tileWidth: number; /** 地块高度(像素),通常是 tileWidth / 2 */ tileHeight: number; /** 高度单位的像素值(1单位高度 = 多少像素向上偏移) */ heightScale: number; /** 是否启用深度排序 */ depthSortEnabled: boolean; /** 阴影配置 */ shadow: { enabled: boolean; color: string; offsetX: number; offsetY: number; blur: number; /** 阴影随高度的缩放 */ heightFade: number; }; } /** 等距变换组件 - 扩展基础 Transform */ export interface IsometricTransform { /** 世界 X 坐标(等距网格) */ x: number; /** 世界 Y 坐标(等距网格) */ y: number; /** 世界 Z 坐标(高度) */ z: number; /** 旋转(弧度) */ rotation: number; /** X 缩放 */ scaleX: number; /** Y 缩放 */ scaleY: number; _screenX?: number; _screenY?: number; _depth?: number; } /** 等距精灵组件 */ export interface IsometricSprite { /** 精灵宽度 */ width: number; /** 精灵高度 */ height: number; /** 锚点 X (0-1),默认 0.5(中心) */ anchorX: number; /** 锚点 Y (0-1),默认 1(底部)- 等距游戏通常锚点在脚底 */ anchorY: number; /** 颜色(如果没有纹理) */ color?: string; /** 纹理 */ texture?: string; /** 透明度 */ alpha: number; /** 是否可见 */ visible: boolean; /** 自定义渲染函数 */ render?: (ctx: CanvasRenderingContext2D, entity: GameEntity, iso: IsometricSystem) => void; /** 是否投射阴影 */ castShadow: boolean; /** 阴影大小(相对于精灵) */ shadowScale: number; } /** 深度排序键 */ export interface DepthKey { entity: GameEntity; depth: number; screenX: number; screenY: number; } /** * 等距视角系统 */ export declare class IsometricSystem extends System { static priority: number; /** 配置 */ config: IsometricConfig; /** 摄像机偏移(屏幕空间) */ cameraX: number; cameraY: number; cameraZoom: number; /** 缓存的排序结果 */ private sortedEntities; /** * 设置配置 */ setConfig(config: Partial): void; /** * 世界坐标转屏幕坐标 */ worldToScreen(worldX: number, worldY: number, worldZ?: number): { x: number; y: number; }; /** * 屏幕坐标转世界坐标(假设 z=0 的地面) */ screenToWorld(screenX: number, screenY: number, worldZ?: number): { x: number; y: number; }; /** * 获取网格单元格坐标 */ screenToTile(screenX: number, screenY: number): { tileX: number; tileY: number; }; /** * 计算深度值(用于排序) * 深度 = x + y + z * factor * 确保后面的物体先绘制,前面的物体后绘制 */ calculateDepth(worldX: number, worldY: number, worldZ?: number): number; /** * 更新所有等距实体的屏幕坐标 */ onUpdate(_dt: number): void; /** * 获取排序后的实体列表 */ getSortedEntities(): DepthKey[]; /** * 绘制等距地面网格(调试/编辑器用) */ drawGrid(ctx: CanvasRenderingContext2D, startX: number, startY: number, cols: number, rows: number, options?: { lineColor?: string; lineWidth?: number; fillColor?: string; highlightTile?: { x: number; y: number; }; highlightColor?: string; }): void; /** * 获取地块的四个角的屏幕坐标 */ getTileCorners(tileX: number, tileY: number, z?: number): Array<{ x: number; y: number; }>; /** * 绘制等距方块(立方体) */ drawIsometricBox(ctx: CanvasRenderingContext2D, worldX: number, worldY: number, worldZ: number, width: number, depth: number, height: number, options?: { topColor?: string; leftColor?: string; rightColor?: string; stroke?: string; strokeWidth?: number; }): void; /** * 绘制等距圆柱体(适合角色) */ drawIsometricCylinder(ctx: CanvasRenderingContext2D, worldX: number, worldY: number, worldZ: number, radius: number, height: number, options?: { topColor?: string; bodyColor?: string; bodyGradient?: boolean; stroke?: string; }): void; /** * 绘制阴影 */ drawShadow(ctx: CanvasRenderingContext2D, worldX: number, worldY: number, worldZ: number, radiusX: number, radiusY?: number): void; /** * 检查点是否在屏幕可见范围内 */ isOnScreen(screenX: number, screenY: number, margin?: number): boolean; /** * 移动摄像机 */ moveCamera(dx: number, dy: number): void; /** * 设置摄像机位置(世界坐标) */ setCameraPosition(worldX: number, worldY: number): void; /** * 摄像机跟随实体 */ followEntity(entity: GameEntity, smoothing?: number): void; /** * 调整颜色亮度 */ private adjustBrightness; } /** * 创建等距变换组件 */ export declare function createIsometricTransform(x?: number, y?: number, z?: number): IsometricTransform; /** * 创建等距精灵组件 */ export declare function createIsometricSprite(options?: Partial): IsometricSprite; //# sourceMappingURL=IsometricSystem.d.ts.map