feat: 地图渲染相关接口

This commit is contained in:
unanmed 2025-10-29 18:44:12 +08:00
parent 5382ef3f3d
commit 66c4215204

View File

@ -0,0 +1,238 @@
import {
ITextureRenderable,
SizedCanvasImageSource
} from '@motajs/render-assets';
import {
IAutotileProcessor,
IMaterialGetter,
IMaterialManager
} from '@user/client-base';
export interface IMapAssetData {
/** 缓存对象的标识符 */
readonly symbol: unique symbol;
/** 图像源列表 */
readonly sourceList: ImageBitmap[];
/**
* `ImageBitmap` 使
* `ImageBitmap` `sourceList`
*/
readonly skipRef: Map<SizedCanvasImageSource, number>;
/** 被标记为脏的图像源,这些图像源经过了更新,需要重新传递给显卡 */
readonly dirty: Set<number>;
/** 贴图数据 */
readonly materials: IMaterialGetter;
}
export interface IMapAssetManager {
/** 素材管理对象 */
readonly materials: IMaterialManager;
/**
*
*/
generateAsset(): IMapAssetData;
}
export interface IMapVertexData {
/** 顶点坐标数组,包含顶点坐标及对应的纹理坐标 */
readonly position: Float32Array;
/** 帧偏移池 */
readonly offsetList: Float32Array;
/** 偏移索引数组 */
readonly offsetIndices: Uint8Array;
}
export interface IMapLayerHooks {
/**
*
* @param dependencies
*/
awake(...dependencies: IMapLayerHooks[]): void;
/**
*
*/
destroy(): void;
/**
*
* @param x
* @param y
* @param width
* @param height
*/
onUpdateArea(x: number, y: number, width: number, height: number): void;
/**
*
* @param x
* @param y
*/
onUpdateBlock(x: number, y: number): void;
/**
*
* @param data
*/
onUpdateVertexData(data: IMapVertexData): void;
}
export interface IMapLayerExtends extends Partial<IMapLayerHooks> {
/** 这个拓展对象的标识符 */
readonly id: string;
/** 这个拓展对象的依赖列表 */
readonly dependencies: string[];
}
export interface IMapLayerExtendsController {
/**
*
*/
getMapData(): Uint32Array;
/**
*
*/
getVertexData(): IMapVertexData;
/**
*
*/
close(): void;
}
export interface IMapLayer {
/** 图层的纵深,纵深高的会遮挡纵深低的 */
readonly zIndex: number;
/**
* 使
* @param asset 使
*/
useAsset(asset: IMapAssetData): void;
/**
*
* @param block
* @param x
* @param y
*/
setBlock(block: number, x: number, y: number): void;
/**
*
* @param array
* @param x
* @param y
* @param width
*/
putMapData(array: Uint32Array, x: number, y: number, width: number): void;
/**
*
*/
getMapData(): Uint32Array;
/**
*
* @param x
* @param y
* @param width
* @param height
*/
getMapData(
x: number,
y: number,
width: number,
height: number
): Uint32Array;
/**
* 使
* @param ex
* @returns
*/
addExtends(ex: IMapLayerExtends): IMapLayerExtendsController;
/**
*
* @param ex
*/
removeExtends(ex: IMapLayerExtends | string): void;
}
/**
* WebGL2
*
*/
export interface IMapRenderer {
/** 地图渲染器使用的资源管理器 */
readonly manager: IMaterialManager;
/** 自动元件处理对象 */
readonly autotile: IAutotileProcessor;
/**
* 使
* @param asset 使
*/
useAsset(asset: IMapAssetData): void;
/**
* WebGL2
* @param gl
*/
initContext(gl: WebGL2RenderingContext): void;
/**
*
* @param gl
*/
render(gl: WebGL2RenderingContext): void;
/**
*
* @param layer
* @param identifier {@link getLayer}
*/
addLayer(layer: IMapLayer, identifier?: string): void;
/**
*
* @param layer
*/
removeLayer(layer: IMapLayer): void;
/**
*
* @param identifier
*/
getLayer(identifier: string): IMapLayer | null;
/**
*
*/
getSortedLayer(): IMapLayer[];
/**
* 使
* @param renderable
*/
setStaticBackground(renderable: ITextureRenderable): void;
/**
* 使
* @param renderable `ITexture.cycled``ITexture.dynamic`
*/
setDynamicBackground(renderable: Iterable<ITextureRenderable>): void;
/**
* 使
* @param tile
*/
setTileBackground(tile: number): void;
/**
* 使
*/
close(): void;
}