mirror of
				https://github.com/unanmed/HumanBreak.git
				synced 2025-11-04 15:12:58 +08:00 
			
		
		
		
	feat: 图集脏标记
This commit is contained in:
		
							parent
							
								
									fd9d21efa4
								
							
						
					
					
						commit
						637647dc17
					
				
							
								
								
									
										30
									
								
								packages-user/client-base/src/material/asset.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								packages-user/client-base/src/material/asset.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					import { ITextureComposedData } from '@motajs/render-assets';
 | 
				
			||||||
 | 
					import { IMaterialAsset } from './types';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export class MaterialAsset implements IMaterialAsset {
 | 
				
			||||||
 | 
					    /** 标记列表 */
 | 
				
			||||||
 | 
					    private readonly marks: Map<symbol, number> = new Map();
 | 
				
			||||||
 | 
					    /** 脏标记,所有值小于此标记的都视为需要更新 */
 | 
				
			||||||
 | 
					    private dirtyFlag: number = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constructor(readonly data: ITextureComposedData) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    dirty(): void {
 | 
				
			||||||
 | 
					        this.dirtyFlag++;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    mark(): symbol {
 | 
				
			||||||
 | 
					        const symbol = Symbol();
 | 
				
			||||||
 | 
					        this.marks.set(symbol, this.dirtyFlag);
 | 
				
			||||||
 | 
					        return symbol;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    unmark(mark: symbol): void {
 | 
				
			||||||
 | 
					        this.marks.delete(mark);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    dirtySince(mark: symbol): boolean {
 | 
				
			||||||
 | 
					        const value = this.marks.get(mark) ?? -1;
 | 
				
			||||||
 | 
					        return value < this.dirtyFlag;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -171,6 +171,10 @@ export class AutotileProcessor implements IAutotileProcessor {
 | 
				
			|||||||
        return this.fromStaticRenderable(tile.static(), connection);
 | 
					        return this.fromStaticRenderable(tile.static(), connection);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 根据静态可渲染对象获取自动元件的帧列表
 | 
				
			||||||
 | 
					     * @param renderable 静态可渲染对象
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    private getStaticRectList(
 | 
					    private getStaticRectList(
 | 
				
			||||||
        renderable: ITextureRenderable
 | 
					        renderable: ITextureRenderable
 | 
				
			||||||
    ): AutotileFrameList {
 | 
					    ): AutotileFrameList {
 | 
				
			||||||
@ -194,11 +198,17 @@ export class AutotileProcessor implements IAutotileProcessor {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 对自动元件连接执行偏移操作,偏移至自动元件在图像源中的所在矩形范围
 | 
				
			||||||
 | 
					     * @param ox 横向偏移量
 | 
				
			||||||
 | 
					     * @param oy 纵向偏移量
 | 
				
			||||||
 | 
					     * @param connection 自动元件连接信息
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    private getConnectedRect(
 | 
					    private getConnectedRect(
 | 
				
			||||||
        ox: number,
 | 
					        ox: number,
 | 
				
			||||||
        oy: number,
 | 
					        oy: number,
 | 
				
			||||||
        connection: ConnectedAutotile
 | 
					        connection: ConnectedAutotile
 | 
				
			||||||
    ): ConnectedAutotile | null {
 | 
					    ): ConnectedAutotile {
 | 
				
			||||||
        const { lt, rt, rb, lb } = connection;
 | 
					        const { lt, rt, rb, lb } = connection;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return {
 | 
					        return {
 | 
				
			||||||
 | 
				
			|||||||
@ -7,4 +7,10 @@ export function createMaterial() {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export * from './autotile';
 | 
				
			||||||
 | 
					export * from './builder';
 | 
				
			||||||
 | 
					export * from './fallback';
 | 
				
			||||||
 | 
					export * from './ins';
 | 
				
			||||||
export * from './manager';
 | 
					export * from './manager';
 | 
				
			||||||
 | 
					export * from './types';
 | 
				
			||||||
 | 
					export * from './utils';
 | 
				
			||||||
 | 
				
			|||||||
@ -19,12 +19,14 @@ import {
 | 
				
			|||||||
    IMaterialAssetData,
 | 
					    IMaterialAssetData,
 | 
				
			||||||
    BlockCls,
 | 
					    BlockCls,
 | 
				
			||||||
    IBigImageData,
 | 
					    IBigImageData,
 | 
				
			||||||
    IAssetBuilder
 | 
					    IAssetBuilder,
 | 
				
			||||||
 | 
					    IMaterialAsset
 | 
				
			||||||
} from './types';
 | 
					} from './types';
 | 
				
			||||||
import { logger } from '@motajs/common';
 | 
					import { logger } from '@motajs/common';
 | 
				
			||||||
import { getClsByString } from './utils';
 | 
					import { getClsByString } from './utils';
 | 
				
			||||||
import { isNil } from 'lodash-es';
 | 
					import { isNil } from 'lodash-es';
 | 
				
			||||||
import { AssetBuilder } from './builder';
 | 
					import { AssetBuilder } from './builder';
 | 
				
			||||||
 | 
					import { MaterialAsset } from './asset';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class MaterialManager implements IMaterialManager {
 | 
					export class MaterialManager implements IMaterialManager {
 | 
				
			||||||
    readonly tileStore: ITextureStore = new TextureStore();
 | 
					    readonly tileStore: ITextureStore = new TextureStore();
 | 
				
			||||||
@ -34,7 +36,8 @@ export class MaterialManager implements IMaterialManager {
 | 
				
			|||||||
    readonly bigImageStore: ITextureStore = new TextureStore();
 | 
					    readonly bigImageStore: ITextureStore = new TextureStore();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /** 图集信息存储 */
 | 
					    /** 图集信息存储 */
 | 
				
			||||||
    readonly assetDataStore: Map<number, ITextureComposedData> = new Map();
 | 
					    readonly assetDataStore: Map<number, IMaterialAsset> = new Map();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /** 大怪物数据 */
 | 
					    /** 大怪物数据 */
 | 
				
			||||||
    readonly bigImageData: Map<number, ITexture> = new Map();
 | 
					    readonly bigImageData: Map<number, ITexture> = new Map();
 | 
				
			||||||
    /** tileset 中 `Math.floor(id / 10000) + 1` 映射到 tileset 对应索引的映射,用于处理图块超出 10000 的 tileset */
 | 
					    /** tileset 中 `Math.floor(id / 10000) + 1` 映射到 tileset 对应索引的映射,用于处理图块超出 10000 的 tileset */
 | 
				
			||||||
@ -60,6 +63,9 @@ export class MaterialManager implements IMaterialManager {
 | 
				
			|||||||
    /** 是否已经构建过素材 */
 | 
					    /** 是否已经构建过素材 */
 | 
				
			||||||
    private built: boolean = false;
 | 
					    private built: boolean = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** 标记列表 */
 | 
				
			||||||
 | 
					    private readonly markList: symbol[] = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    constructor() {
 | 
					    constructor() {
 | 
				
			||||||
        this.assetBuilder.pipe(this.assetStore);
 | 
					        this.assetBuilder.pipe(this.assetStore);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -264,6 +270,23 @@ export class MaterialManager implements IMaterialManager {
 | 
				
			|||||||
        return newTexture;
 | 
					        return newTexture;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 检查图集状态,如果已存在图集则标记为脏,否则新增图集
 | 
				
			||||||
 | 
					     * @param data 图集数据
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private checkAssetDirty(data: ITextureComposedData) {
 | 
				
			||||||
 | 
					        const asset = this.assetDataStore.get(data.index);
 | 
				
			||||||
 | 
					        if (asset) {
 | 
				
			||||||
 | 
					            // 如果不是新图集,需要标记为脏
 | 
				
			||||||
 | 
					            asset.dirty();
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            // 如果有新图集,需要添加
 | 
				
			||||||
 | 
					            const alias = `asset-${data.index}`;
 | 
				
			||||||
 | 
					            this.assetStore.alias(data.index, alias);
 | 
				
			||||||
 | 
					            this.assetDataStore.set(data.index, new MaterialAsset(data));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    cacheTileset(identifier: number): ITexture | null {
 | 
					    cacheTileset(identifier: number): ITexture | null {
 | 
				
			||||||
        const newTexture = this.getTilesetOwnTexture(identifier);
 | 
					        const newTexture = this.getTilesetOwnTexture(identifier);
 | 
				
			||||||
        if (!newTexture) return null;
 | 
					        if (!newTexture) return null;
 | 
				
			||||||
@ -273,6 +296,7 @@ export class MaterialManager implements IMaterialManager {
 | 
				
			|||||||
        this.numIdMap.set(identifier, `X${identifier}`);
 | 
					        this.numIdMap.set(identifier, `X${identifier}`);
 | 
				
			||||||
        const data = this.assetBuilder.addTexture(newTexture);
 | 
					        const data = this.assetBuilder.addTexture(newTexture);
 | 
				
			||||||
        newTexture.toAsset(data);
 | 
					        newTexture.toAsset(data);
 | 
				
			||||||
 | 
					        this.checkAssetDirty(data);
 | 
				
			||||||
        return newTexture;
 | 
					        return newTexture;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -295,10 +319,11 @@ export class MaterialManager implements IMaterialManager {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        const data = this.assetBuilder.addTextureList(toAdd);
 | 
					        const data = this.assetBuilder.addTextureList(toAdd);
 | 
				
			||||||
        const res = [...data];
 | 
					        const res = [...data];
 | 
				
			||||||
        res.forEach(v => {
 | 
					        res.forEach(data => {
 | 
				
			||||||
            v.assetMap.keys().forEach(tex => {
 | 
					            data.assetMap.keys().forEach(tex => {
 | 
				
			||||||
                if (set.has(tex)) tex.toAsset(v);
 | 
					                if (set.has(tex)) tex.toAsset(data);
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					            this.checkAssetDirty(data);
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return toAdd;
 | 
					        return toAdd;
 | 
				
			||||||
@ -313,13 +338,13 @@ export class MaterialManager implements IMaterialManager {
 | 
				
			|||||||
        const data = this.assetBuilder.addTextureList(this.tileStore.values());
 | 
					        const data = this.assetBuilder.addTextureList(this.tileStore.values());
 | 
				
			||||||
        const arr = [...data];
 | 
					        const arr = [...data];
 | 
				
			||||||
        const res: IMaterialAssetData[] = [];
 | 
					        const res: IMaterialAssetData[] = [];
 | 
				
			||||||
        arr.forEach((v, i) => {
 | 
					        arr.forEach(v => {
 | 
				
			||||||
            const alias = `asset-${i}`;
 | 
					            const alias = `asset-${v.index}`;
 | 
				
			||||||
            this.assetStore.alias(i, alias);
 | 
					            this.assetStore.alias(v.index, alias);
 | 
				
			||||||
            this.assetDataStore.set(i, v);
 | 
					            this.assetDataStore.set(v.index, new MaterialAsset(v));
 | 
				
			||||||
            const data: IMaterialAssetData = {
 | 
					            const data: IMaterialAssetData = {
 | 
				
			||||||
                data: v,
 | 
					                data: v,
 | 
				
			||||||
                identifier: i,
 | 
					                identifier: v.index,
 | 
				
			||||||
                alias,
 | 
					                alias,
 | 
				
			||||||
                store: this.assetStore
 | 
					                store: this.assetStore
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
@ -331,11 +356,11 @@ export class MaterialManager implements IMaterialManager {
 | 
				
			|||||||
        return res;
 | 
					        return res;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    getAsset(identifier: number): ITextureComposedData | null {
 | 
					    getAsset(identifier: number): IMaterialAsset | null {
 | 
				
			||||||
        return this.assetDataStore.get(identifier) ?? null;
 | 
					        return this.assetDataStore.get(identifier) ?? null;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    getAssetByAlias(alias: string): ITextureComposedData | null {
 | 
					    getAssetByAlias(alias: string): IMaterialAsset | null {
 | 
				
			||||||
        const id = this.assetStore.identifierOf(alias);
 | 
					        const id = this.assetStore.identifierOf(alias);
 | 
				
			||||||
        if (isNil(id)) return null;
 | 
					        if (isNil(id)) return null;
 | 
				
			||||||
        return this.assetDataStore.get(id) ?? null;
 | 
					        return this.assetDataStore.get(id) ?? null;
 | 
				
			||||||
@ -406,4 +431,14 @@ export class MaterialManager implements IMaterialManager {
 | 
				
			|||||||
        if (isNil(identifier)) return null;
 | 
					        if (isNil(identifier)) return null;
 | 
				
			||||||
        return this.bigImageData.get(identifier) ?? null;
 | 
					        return this.bigImageData.get(identifier) ?? null;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    getIfBigImage(identifier: number): ITexture | null {
 | 
				
			||||||
 | 
					        const bigImage = this.bigImageData.get(identifier) ?? null;
 | 
				
			||||||
 | 
					        if (bigImage) return bigImage;
 | 
				
			||||||
 | 
					        if (identifier < 10000) {
 | 
				
			||||||
 | 
					            return this.tileStore.getTexture(identifier);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            return this.cacheTileset(identifier);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -90,6 +90,37 @@ export interface IBigImageData {
 | 
				
			|||||||
    readonly store: ITextureStore;
 | 
					    readonly store: ITextureStore;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface IAssetDirtyMarker {
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 标记为脏,即进行了一次更新
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    dirty(): void;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface IAssetDirtyTracker {
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 对图集状态进行标记
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    mark(): symbol;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 取消指定标记符号
 | 
				
			||||||
 | 
					     * @param mark 标记符号
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    unmark(mark: symbol): void;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 从指定标记符号开始,图集是否发生了变动
 | 
				
			||||||
 | 
					     * @param mark 标记符号
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    dirtySince(mark: symbol): boolean;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface IMaterialAsset extends IAssetDirtyTracker, IAssetDirtyMarker {
 | 
				
			||||||
 | 
					    /** 图集的贴图数据 */
 | 
				
			||||||
 | 
					    readonly data: ITextureComposedData;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface IAutotileProcessor {
 | 
					export interface IAutotileProcessor {
 | 
				
			||||||
    /** 该自动元件处理器使用的素材管理器 */
 | 
					    /** 该自动元件处理器使用的素材管理器 */
 | 
				
			||||||
    readonly manager: IMaterialManager;
 | 
					    readonly manager: IMaterialManager;
 | 
				
			||||||
@ -162,7 +193,98 @@ export interface IAutotileProcessor {
 | 
				
			|||||||
    ): Generator<IAutotileRenderable, void> | null;
 | 
					    ): Generator<IAutotileRenderable, void> | null;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface IMaterialManager {
 | 
					export interface IMaterialGetter {
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 根据图块数字获取图块,可以获取额外素材,会自动将未缓存的额外素材缓存
 | 
				
			||||||
 | 
					     * @param identifier 图块的图块数字
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    getTile(identifier: number): ITexture | null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 根据图块标识符获取图块类型
 | 
				
			||||||
 | 
					     * @param identifier 图块标识符,即图块数字
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    getBlockCls(identifier: number): BlockCls;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 判断一个图块是否包含 `bigImage` 贴图,即是否是大怪物
 | 
				
			||||||
 | 
					     * @param identifier 图块标识符,即图块数字
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    isBigImage(identifier: number): boolean;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 根据图块标识符获取一个图块的 `bigImage` 贴图
 | 
				
			||||||
 | 
					     * @param identifier 图块标识符,即图块数字
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    getBigImage(identifier: number): ITexture | null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 根据图块标识符,首先判断是否是 `bigImage` 贴图,如果是,则返回 `bigImage` 贴图,
 | 
				
			||||||
 | 
					     * 否则返回普通贴图。如果图块不存在,则返回 `null`
 | 
				
			||||||
 | 
					     * @param identifier 图块标识符,即图块数字
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    getIfBigImage(identifier: number): ITexture | null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 根据标识符获取图集信息
 | 
				
			||||||
 | 
					     * @param identifier 图集的标识符
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    getAsset(identifier: number): IMaterialAsset | null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 根据额外素材索引获取额外素材
 | 
				
			||||||
 | 
					     * @param identifier 额外素材的索引
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    getTileset(identifier: number): ITexture | null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 根据图片的索引获取图片
 | 
				
			||||||
 | 
					     * @param identifier 图片的索引
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    getImage(identifier: number): ITexture | null;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface IMaterialAliasGetter {
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 根据图块 id 获取图块,可以获取额外素材,会自动将未缓存的额外素材缓存
 | 
				
			||||||
 | 
					     * @param alias 图块 id
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    getTileByAlias(alias: string): ITexture | null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 根据额外素材名称获取额外素材
 | 
				
			||||||
 | 
					     * @param alias 额外素材名称
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    getTilesetByAlias(alias: string): ITexture | null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 根据图片名称获取图片
 | 
				
			||||||
 | 
					     * @param alias 图片名称
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    getImageByAlias(alias: string): ITexture | null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 根据别名获取图集信息
 | 
				
			||||||
 | 
					     * @param alias 图集的别名
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    getAssetByAlias(alias: string): IMaterialAsset | null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 根据图块别名获取图块类型
 | 
				
			||||||
 | 
					     * @param alias 图块别名,即图块的 id
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    getBlockClsByAlias(alias: string): BlockCls;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 根据图块别名获取一个图块的 `bigImage` 贴图
 | 
				
			||||||
 | 
					     * @param alias 图块别名,即图块的 id
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    getBigImageByAlias(alias: string): ITexture | null;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface IMaterialManager
 | 
				
			||||||
 | 
					    extends IMaterialGetter,
 | 
				
			||||||
 | 
					        IMaterialAliasGetter {
 | 
				
			||||||
    /** 贴图存储,把 terrains 等内容单独分开存储 */
 | 
					    /** 贴图存储,把 terrains 等内容单独分开存储 */
 | 
				
			||||||
    readonly tileStore: ITextureStore;
 | 
					    readonly tileStore: ITextureStore;
 | 
				
			||||||
    /** tilesets 贴图存储,每个 tileset 是一个贴图对象 */
 | 
					    /** tilesets 贴图存储,每个 tileset 是一个贴图对象 */
 | 
				
			||||||
@ -174,6 +296,9 @@ export interface IMaterialManager {
 | 
				
			|||||||
    /** bigImage 存储,存储大怪物数据 */
 | 
					    /** bigImage 存储,存储大怪物数据 */
 | 
				
			||||||
    readonly bigImageStore: ITextureStore;
 | 
					    readonly bigImageStore: ITextureStore;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** 图集信息存储 */
 | 
				
			||||||
 | 
					    readonly assetDataStore: Iterable<[number, IMaterialAsset]>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /** 图块类型映射 */
 | 
					    /** 图块类型映射 */
 | 
				
			||||||
    readonly clsMap: Map<number, BlockCls>;
 | 
					    readonly clsMap: Map<number, BlockCls>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -231,42 +356,6 @@ export interface IMaterialManager {
 | 
				
			|||||||
        identifier: IIndexedIdentifier
 | 
					        identifier: IIndexedIdentifier
 | 
				
			||||||
    ): IMaterialData;
 | 
					    ): IMaterialData;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 根据图块数字获取图块,可以获取额外素材,会自动将未缓存的额外素材缓存
 | 
					 | 
				
			||||||
     * @param identifier 图块的图块数字
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    getTile(identifier: number): ITexture | null;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 根据额外素材索引获取额外素材
 | 
					 | 
				
			||||||
     * @param identifier 额外素材的索引
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    getTileset(identifier: number): ITexture | null;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 根据图片的索引获取图片
 | 
					 | 
				
			||||||
     * @param identifier 图片的索引
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    getImage(identifier: number): ITexture | null;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 根据图块 id 获取图块,可以获取额外素材,会自动将未缓存的额外素材缓存
 | 
					 | 
				
			||||||
     * @param alias 图块 id
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    getTileByAlias(alias: string): ITexture | null;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 根据额外素材名称获取额外素材
 | 
					 | 
				
			||||||
     * @param alias 额外素材名称
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    getTilesetByAlias(alias: string): ITexture | null;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 根据图片名称获取图片
 | 
					 | 
				
			||||||
     * @param alias 图片名称
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    getImageByAlias(alias: string): ITexture | null;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 缓存某个 tileset
 | 
					     * 缓存某个 tileset
 | 
				
			||||||
     * @param identifier tileset 的标识符,即图块数字
 | 
					     * @param identifier tileset 的标识符,即图块数字
 | 
				
			||||||
@ -286,18 +375,6 @@ export interface IMaterialManager {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    buildAssets(): Iterable<IMaterialAssetData>;
 | 
					    buildAssets(): Iterable<IMaterialAssetData>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 根据标识符获取图集信息
 | 
					 | 
				
			||||||
     * @param identifier 图集的标识符
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    getAsset(identifier: number): ITextureComposedData | null;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 根据别名获取图集信息
 | 
					 | 
				
			||||||
     * @param alias 图集的别名
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    getAssetByAlias(alias: string): ITextureComposedData | null;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 根据图块标识符在图集中获取对应的可渲染对象
 | 
					     * 根据图块标识符在图集中获取对应的可渲染对象
 | 
				
			||||||
     * @param identifier 图块标识符,即图块数字
 | 
					     * @param identifier 图块标识符,即图块数字
 | 
				
			||||||
@ -310,18 +387,6 @@ export interface IMaterialManager {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    getRenderableByAlias(alias: string): ITextureRenderable | null;
 | 
					    getRenderableByAlias(alias: string): ITextureRenderable | null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 根据图块标识符获取图块类型
 | 
					 | 
				
			||||||
     * @param identifier 图块标识符,即图块数字
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    getBlockCls(identifier: number): BlockCls;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 根据图块别名获取图块类型
 | 
					 | 
				
			||||||
     * @param alias 图块别名,即图块的 id
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    getBlockClsByAlias(alias: string): BlockCls;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 根据图块别名获取图块标识符,即图块数字
 | 
					     * 根据图块别名获取图块标识符,即图块数字
 | 
				
			||||||
     * @param alias 图块别名,即图块的 id
 | 
					     * @param alias 图块别名,即图块的 id
 | 
				
			||||||
@ -340,24 +405,6 @@ export interface IMaterialManager {
 | 
				
			|||||||
     * @param image `bigImage` 对应的贴图对象
 | 
					     * @param image `bigImage` 对应的贴图对象
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    setBigImage(identifier: number, image: ITexture): IBigImageData;
 | 
					    setBigImage(identifier: number, image: ITexture): IBigImageData;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 判断一个图块是否包含 `bigImage` 贴图,即是否是大怪物
 | 
					 | 
				
			||||||
     * @param identifier 图块标识符,即图块数字
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    isBigImage(identifier: number): boolean;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 根据图块标识符获取一个图块的 `bigImage` 贴图
 | 
					 | 
				
			||||||
     * @param identifier 图块标识符,即图块数字
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    getBigImage(identifier: number): ITexture | null;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 根据图块别名获取一个图块的 `bigImage` 贴图
 | 
					 | 
				
			||||||
     * @param alias 图块别名,即图块的 id
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    getBigImageByAlias(alias: string): ITexture | null;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface IAssetBuilder {
 | 
					export interface IAssetBuilder {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user