From d65b1078195fce69874eab5e9343d48e914484b8 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Sun, 20 Sep 2026 23:49:27 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=B8=B2=E6=9F=93=E7=AB=AF?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .planning/milestone.lock | 6 +++ packages-user/client-modules/src/client.ts | 11 ----- packages-user/client-modules/src/common.ts | 42 +++++++++++++++++++ .../client-modules/src/loader/hook.ts | 22 ++++++++++ .../client-modules/src/loader/index.ts | 0 packages-user/client-modules/src/types.ts | 5 +-- packages-user/data-state/src/common.ts | 3 ++ packages-user/data-state/src/core.ts | 12 +++--- packages-user/data-state/src/index.ts | 2 + packages-user/data-state/src/loader/index.ts | 4 ++ .../.textures.jsonc => animation/.list.jsonc} | 0 src/content/audio/.list.jsonc | 3 ++ src/content/client.jsonc | 23 +++++++++- src/content/core.jsonc | 3 +- src/content/defaults/animation.jsonc | 5 +++ src/content/defaults/audio.jsonc | 5 +++ src/content/defaults/font.jsonc | 5 +++ src/content/defaults/texture.jsonc | 5 +++ src/content/font/.list.jsonc | 0 src/content/texture/.list.jsonc | 3 ++ 20 files changed, 137 insertions(+), 22 deletions(-) create mode 100644 .planning/milestone.lock create mode 100644 packages-user/client-modules/src/common.ts create mode 100644 packages-user/client-modules/src/loader/hook.ts create mode 100644 packages-user/client-modules/src/loader/index.ts rename src/content/{textures/.textures.jsonc => animation/.list.jsonc} (100%) create mode 100644 src/content/audio/.list.jsonc create mode 100644 src/content/defaults/animation.jsonc create mode 100644 src/content/defaults/audio.jsonc create mode 100644 src/content/defaults/font.jsonc create mode 100644 src/content/defaults/texture.jsonc create mode 100644 src/content/font/.list.jsonc create mode 100644 src/content/texture/.list.jsonc diff --git a/.planning/milestone.lock b/.planning/milestone.lock new file mode 100644 index 0000000..00aadd0 --- /dev/null +++ b/.planning/milestone.lock @@ -0,0 +1,6 @@ +{ + "phase": "04", + "session": "wt-session-b84829ae-9f7f-44f6-b3e6-65c99e0c49cb", + "pid": 33048, + "updated_at": 1789718455992 +} diff --git a/packages-user/client-modules/src/client.ts b/packages-user/client-modules/src/client.ts index 28e9efb..ac7578d 100644 --- a/packages-user/client-modules/src/client.ts +++ b/packages-user/client-modules/src/client.ts @@ -10,10 +10,8 @@ import { } from '@motajs/audio'; import { IRenderTreeRoot, MotaRenderer } from '@motajs/render'; import { - IMotaAssetsLoader, IMaterialManager, IAutotileProcessor, - MotaAssetsLoader, MaterialManager, AutotileProcessor, ISaveSystem, @@ -49,7 +47,6 @@ export class ClientCore extends CoreState implements IClientCore { readonly save: ISaveSystem; // Layer 5 渲染顶层 - readonly loader: IMotaAssetsLoader; readonly materials: IMaterialManager; readonly autotile: IAutotileProcessor; @@ -89,14 +86,6 @@ export class ClientCore extends CoreState implements IClientCore { //#endregion - this.loader = new MotaAssetsLoader( - this.loadProgress, - this.dataLoader, - this.audioContext, - this.soundPlayer, - this.materials - ); - // 兼容层 loading.once('loaded', () => { fallbackLoad(this.materials); diff --git a/packages-user/client-modules/src/common.ts b/packages-user/client-modules/src/common.ts new file mode 100644 index 0000000..da361af --- /dev/null +++ b/packages-user/client-modules/src/common.ts @@ -0,0 +1,42 @@ +export interface IClientContentDefaultConfig { + /** 贴图列表中每一项的默认值 */ + readonly textureDefault: string; + /** 音频列表中每一项的默认值 */ + readonly audioDefault: string; + /** 动画列表中每一项的默认值 */ + readonly animationDefault: string; + /** 字体列表中每一项的默认值 */ + readonly fontDefault: string; +} + +export interface IClientContentConfig { + /** 配置的默认对象配置路径 */ + readonly defaults: IClientContentDefaultConfig; + /** 贴图文件夹路径 */ + readonly textureDir: string; + /** 贴图列表文件路径 */ + readonly textureListDir: string; + /** 音频文件夹路径 */ + readonly audioDir: string; + /** 音频列表文件路径 */ + readonly audioListDir: string; + /** 动画文件夹路径 */ + readonly animationDir: string; + /** 动画列表文件路径 */ + readonly animationListDir: string; + /** 字体文件夹路径 */ + readonly fontDir: string; + /** 字体列表文件路径 */ + readonly fontListDir: string; +} + +export interface IClientConfig { + /** 渲染端数据配置 */ + readonly content: IClientContentConfig; + /** 标题界面使用的图片 */ + readonly titleImage: string; + /** 标题界面使用的背景音乐 */ + readonly titleBGM: string; + /** 初始状态下勇士使用的默认贴图 */ + readonly heroImage: string; +} diff --git a/packages-user/client-modules/src/loader/hook.ts b/packages-user/client-modules/src/loader/hook.ts new file mode 100644 index 0000000..d3449c9 --- /dev/null +++ b/packages-user/client-modules/src/loader/hook.ts @@ -0,0 +1,22 @@ +import { + IMotaDataLoader, + IMotaDataLoaderHooks, + ICoreStateCoreConfig +} from '@user/data-state'; + +export class RenderLoaderHooks implements IMotaDataLoaderHooks { + constructor(readonly clientDir: string) {} + + awake(): void {} + + destroy(): void {} + + onCoreConfigLoaded?( + _: ICoreStateCoreConfig, + loader: IMotaDataLoader + ): Promise { + loader.addExtraConfig('client', this.clientDir); + + return Promise.resolve(); + } +} diff --git a/packages-user/client-modules/src/loader/index.ts b/packages-user/client-modules/src/loader/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/packages-user/client-modules/src/types.ts b/packages-user/client-modules/src/types.ts index 7d0e1d6..84148ef 100644 --- a/packages-user/client-modules/src/types.ts +++ b/packages-user/client-modules/src/types.ts @@ -1,11 +1,8 @@ import { IMapExtensionManager, IMapRenderer } from './render/map'; -import { IMotaAssetsLoader, IClientBase } from '@user/client-base'; +import { IClientBase } from '@user/client-base'; import { IExcitation, IExcitationDivider } from '@motajs/animate'; export interface IClientCore extends IClientBase { - /** 渲染端加载对象 */ - readonly loader: IMotaAssetsLoader; - /** 用于渲染系统的 Raf 激励源 */ readonly rafExcitation: IExcitation; /** 用于渲染系统的激励源分频器 */ diff --git a/packages-user/data-state/src/common.ts b/packages-user/data-state/src/common.ts index 8b23837..8e0c724 100644 --- a/packages-user/data-state/src/common.ts +++ b/packages-user/data-state/src/common.ts @@ -1,3 +1,4 @@ +import { IMapAreaInterval } from '@user/data-base'; import { IHeroAttr } from '@user/data-common'; //#region 数据端主配置 @@ -82,6 +83,8 @@ export interface ICoreStateCoreConfig { readonly title: string; /** 游戏版本号,仅呈现作用,对游戏本身没有任何影响 */ readonly version: string; + /** 地图分区配置 */ + readonly floorAreas: IMapAreaInterval[]; /** 游戏数据配置 */ readonly content: ICoreStateContentConfig; /** 游戏的初始状态数据 */ diff --git a/packages-user/data-state/src/core.ts b/packages-user/data-state/src/core.ts index 997b120..0a58aaf 100644 --- a/packages-user/data-state/src/core.ts +++ b/packages-user/data-state/src/core.ts @@ -1,4 +1,5 @@ import { logger } from '@motajs/common'; +import { ILoadManager, LoadManager } from '@motajs/loader'; import { IRoleFaceBinder, IFaceManager, @@ -59,7 +60,7 @@ import { } from './enemy'; import { HERO_DEFAULT_ATTRIBUTE, TILE_HEIGHT, TILE_WIDTH } from './shared'; import { DefaultHeroMoveTopImpl, DefaultPassPredicateImpl } from './hero'; -import { createEventRegistrations } from './event/registrations'; +import { createEventRegistrations } from './event'; import { ReplayEquip, ReplayMove, @@ -67,10 +68,11 @@ import { ReplayUnequip, ReplayUseItem } from './replay'; -import { IMotaDataLoader } from './loader/types'; -import { MotaDataLoader } from './loader/loader'; -import { ILoadManager, LoadManager } from '@motajs/loader'; -import { DefaultDataLoaderHook } from './loader/hook'; +import { + IMotaDataLoader, + MotaDataLoader, + DefaultDataLoaderHook +} from './loader'; export class CoreState implements ICoreState { // Layer 0 公共层,最底层的接口,不会依赖任何其他内容,一般是工具性接口及不需要存档的数据 diff --git a/packages-user/data-state/src/index.ts b/packages-user/data-state/src/index.ts index eb2c5f6..7a2ca4c 100644 --- a/packages-user/data-state/src/index.ts +++ b/packages-user/data-state/src/index.ts @@ -1,8 +1,10 @@ export * from './enemy'; export * from './event'; export * from './hero'; +export * from './loader'; export * from './replay'; +export * from './common'; export * from './core'; export * from './ins'; export * from './shared'; diff --git a/packages-user/data-state/src/loader/index.ts b/packages-user/data-state/src/loader/index.ts index e69de29..8005af5 100644 --- a/packages-user/data-state/src/loader/index.ts +++ b/packages-user/data-state/src/loader/index.ts @@ -0,0 +1,4 @@ +export * from './hook'; +export * from './jsoncProcessor'; +export * from './loader'; +export * from './types'; diff --git a/src/content/textures/.textures.jsonc b/src/content/animation/.list.jsonc similarity index 100% rename from src/content/textures/.textures.jsonc rename to src/content/animation/.list.jsonc diff --git a/src/content/audio/.list.jsonc b/src/content/audio/.list.jsonc new file mode 100644 index 0000000..301e5e7 --- /dev/null +++ b/src/content/audio/.list.jsonc @@ -0,0 +1,3 @@ +// Type: type define required +// --- SYSTEM PREFIX END --- // +{} diff --git a/src/content/client.jsonc b/src/content/client.jsonc index c91455d..51a83f4 100644 --- a/src/content/client.jsonc +++ b/src/content/client.jsonc @@ -1,2 +1,23 @@ +// Type: packages-user/client-modules/src/common.ts IClientConfig // --- SYSTEM PREFIX END --- // -{} +{ + "titleImage": "title.jpg", + "titleBGM": "bgm.opus", + "heroImage": "hero.png", + "content": { + "textureDir": "texture", + "textureListDir": "texture/.list.jsonc", + "audioDir": "audio", + "audioListDir": "audio/.list.jsonc", + "animationDir": "animation", + "animationListDir": "animation/.list.jsonc", + "fontDir": "font", + "fontListDir": "font/.list.jsonc", + "defaults": { + "textureDefault": "defaults/texture.jsonc", + "audioDefault": "defaults/audio.jsonc", + "animationDefault": "defaults/animation.jsonc", + "fontDefault": "defaults/font.jsonc" + } + } +} diff --git a/src/content/core.jsonc b/src/content/core.jsonc index eebc2f7..432e6ae 100644 --- a/src/content/core.jsonc +++ b/src/content/core.jsonc @@ -1,9 +1,10 @@ -// Type: packages-user/data-state/src/types.ts ICoreStateCoreConfig +// Type: packages-user/data-state/src/common.ts ICoreStateCoreConfig // --- SYSTEM PREFIX END --- // { "name": "template", "title": "魔塔样板", "version": "Ver 2.C", + "floorAreas": [], "content": { "mapsDir": "maps", "mapListDir": "maps/.list.jsonc", diff --git a/src/content/defaults/animation.jsonc b/src/content/defaults/animation.jsonc new file mode 100644 index 0000000..8f6ed72 --- /dev/null +++ b/src/content/defaults/animation.jsonc @@ -0,0 +1,5 @@ +// Type: type required. +// "@required" means the property is required. +// For objects, system will compare every properties. +// --- SYSTEM PREFIX END --- // +{} diff --git a/src/content/defaults/audio.jsonc b/src/content/defaults/audio.jsonc new file mode 100644 index 0000000..8f6ed72 --- /dev/null +++ b/src/content/defaults/audio.jsonc @@ -0,0 +1,5 @@ +// Type: type required. +// "@required" means the property is required. +// For objects, system will compare every properties. +// --- SYSTEM PREFIX END --- // +{} diff --git a/src/content/defaults/font.jsonc b/src/content/defaults/font.jsonc new file mode 100644 index 0000000..8f6ed72 --- /dev/null +++ b/src/content/defaults/font.jsonc @@ -0,0 +1,5 @@ +// Type: type required. +// "@required" means the property is required. +// For objects, system will compare every properties. +// --- SYSTEM PREFIX END --- // +{} diff --git a/src/content/defaults/texture.jsonc b/src/content/defaults/texture.jsonc new file mode 100644 index 0000000..8f6ed72 --- /dev/null +++ b/src/content/defaults/texture.jsonc @@ -0,0 +1,5 @@ +// Type: type required. +// "@required" means the property is required. +// For objects, system will compare every properties. +// --- SYSTEM PREFIX END --- // +{} diff --git a/src/content/font/.list.jsonc b/src/content/font/.list.jsonc new file mode 100644 index 0000000..e69de29 diff --git a/src/content/texture/.list.jsonc b/src/content/texture/.list.jsonc new file mode 100644 index 0000000..301e5e7 --- /dev/null +++ b/src/content/texture/.list.jsonc @@ -0,0 +1,3 @@ +// Type: type define required +// --- SYSTEM PREFIX END --- // +{}