From 37cd85cd1e614e71546f73be2e2e2206a42bfe92 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Wed, 19 Nov 2025 18:28:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8B=87=E5=A3=AB=E8=B4=B4=E5=9B=BE?= =?UTF-8?q?=E6=89=93=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client-base/src/material/fallback.ts | 9 + .../client-base/src/material/manager.ts | 28 ++- .../client-base/src/material/types.ts | 12 + .../client-modules/src/render/ui/main.tsx | 1 - packages-user/data-state/src/core/types.ts | 86 ++++++- packages-user/data-state/src/state/hero.ts | 218 +----------------- public/_server/table/data.comment.js | 20 +- public/project/data.js | 7 +- src/types/declaration/data.d.ts | 5 + 9 files changed, 154 insertions(+), 232 deletions(-) diff --git a/packages-user/client-base/src/material/fallback.ts b/packages-user/client-base/src/material/fallback.ts index fb6697b..5dcabf5 100644 --- a/packages-user/client-base/src/material/fallback.ts +++ b/packages-user/client-base/src/material/fallback.ts @@ -1,3 +1,4 @@ +import { ITexture } from '@motajs/render-assets'; import { materials } from './ins'; import { IBlockIdentifier, IIndexedIdentifier } from './types'; @@ -118,8 +119,16 @@ export function fallbackLoad() { addAutotile(autotileSet, floor.fg2map); }); + const heroTextures: ITexture[] = []; + + data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.main.heroImages.forEach(v => { + const tex = materials.getImageByAlias(v); + if (tex) heroTextures.push(tex); + }); + materials.buildAssets(); materials.cacheAutotileList(autotileSet); materials.cacheTilesetList(tilesetSet); + materials.buildListToAsset(heroTextures); } diff --git a/packages-user/client-base/src/material/manager.ts b/packages-user/client-base/src/material/manager.ts index 4098395..fa84c28 100644 --- a/packages-user/client-base/src/material/manager.ts +++ b/packages-user/client-base/src/material/manager.ts @@ -430,13 +430,32 @@ export class MaterialManager implements IMaterialManager { return []; } this.built = true; - const data = this.assetBuilder.addTextureList(this.tileStore.values()); + return this.buildListToAsset(this.tileStore.values()); + } + + buildToAsset(texture: ITexture): IMaterialAssetData { + const data = this.assetBuilder.addTexture(texture); + const assetData: IMaterialAssetData = { + data: data, + identifier: data.index, + alias: `asset-${data.index}`, + store: this.assetStore + }; + this.checkAssetDirty(data); + return assetData; + } + + buildListToAsset( + texture: Iterable + ): Iterable { + const data = this.assetBuilder.addTextureList(texture); const arr = [...data]; const res: IMaterialAssetData[] = []; arr.forEach(v => { const alias = `asset-${v.index}`; - this.assetStore.alias(v.index, alias); - this.assetDataStore.set(v.index, v); + if (!this.assetDataStore.has(v.index)) { + this.assetDataStore.set(v.index, v); + } const data: IMaterialAssetData = { data: v, identifier: v.index, @@ -448,6 +467,9 @@ export class MaterialManager implements IMaterialManager { } res.push(data); }); + arr.forEach(v => { + this.checkAssetDirty(v); + }); return res; } diff --git a/packages-user/client-base/src/material/types.ts b/packages-user/client-base/src/material/types.ts index 925ae31..2d0ce45 100644 --- a/packages-user/client-base/src/material/types.ts +++ b/packages-user/client-base/src/material/types.ts @@ -397,6 +397,18 @@ export interface IMaterialManager */ buildAssets(): Iterable; + /** + * 将指定贴图打包进图集 + * @param texture 贴图对象 + */ + buildToAsset(texture: ITexture): IMaterialAssetData; + + /** + * 将一系列贴图打包进贴图对象 + * @param texture 贴图列表 + */ + buildListToAsset(texture: Iterable): Iterable; + /** * 根据图块标识符在图集中获取对应的可渲染对象 * @param identifier 图块标识符,即图块数字 diff --git a/packages-user/client-modules/src/render/ui/main.tsx b/packages-user/client-modules/src/render/ui/main.tsx index 969bfbd..503e638 100644 --- a/packages-user/client-modules/src/render/ui/main.tsx +++ b/packages-user/client-modules/src/render/ui/main.tsx @@ -261,7 +261,6 @@ const MainScene = defineComponent(() => { return () => (