diff --git a/packages/oh-my-live2d/src/modules/oml2d.ts b/packages/oh-my-live2d/src/modules/oml2d.ts index c6d4c5d..fe8c1e3 100644 --- a/packages/oh-my-live2d/src/modules/oml2d.ts +++ b/packages/oh-my-live2d/src/modules/oml2d.ts @@ -4,12 +4,14 @@ import { Menus } from './menus.js'; import { Models } from './models.js'; import { Stage } from './stage.js'; import { StatusBar } from './status-bar.js'; +import { Store } from './store.js'; import { Tips } from './tips.js'; import { WindowSizeType } from '../constants/index.js'; import type { DefaultOptions, PixiLive2dDisplayModule, PixiModule } from '../types/index.js'; import { checkVersion, getWindowSizeType, onChangeWindowSize, printProjectInfo } from '../utils/index.js'; export class OhMyLive2D { + private store: Store; private globalStyle: GlobalStyle; private stage: Stage; private statusBar: StatusBar; @@ -29,10 +31,10 @@ export class OhMyLive2D { this.statusBar = new StatusBar(options); this.tips = new Tips(options); // 提示框 this.menus = new Menus(options); // 菜单 - this.models = new Models(options, PixiLive2dDisplay); + this.models = new Models(options, this.PixiLive2dDisplay); this.application = new Application(this.PIXI); - - this.modelIndex = 0; + this.store = new Store(); + this.modelIndex = this.store.getModelCurrentIndex(this.options.models); } /** @@ -46,6 +48,7 @@ export class OhMyLive2D { this.currentModelIndex = index; this.stage.modelIndex = index; this.models.modelIndex = index; + this.store.updateModelInfo(this.options.models, index); } private get modelIndex(): number { @@ -174,7 +177,7 @@ export class OhMyLive2D { } // 切换状态. 休息/活动 - private switchStatus(): void { + switchStatus(): void { void this.stage.slideOut(); this.tips.clear(); @@ -230,12 +233,12 @@ export class OhMyLive2D { */ private registerModelEvent(): void { this.models.onHit(); + } - // this.models.model?.focus - // window.document.addEventListener('touchend', (e) => { - // console.log(e); - // console.log('ssssssssssss'); - // // this.models.model?.focus(0, 0); - // }); + /** + * 主动提示消息 + */ + tipsMessage(message: string, duration?: number, priority?: number): void { + this.tips.notification(message, duration, priority); } } diff --git a/packages/oh-my-live2d/src/modules/store.ts b/packages/oh-my-live2d/src/modules/store.ts new file mode 100644 index 0000000..f8cde99 --- /dev/null +++ b/packages/oh-my-live2d/src/modules/store.ts @@ -0,0 +1,38 @@ +import { StoreModelInfo } from '../types/common.js'; +import { ModelOptions } from '../types/model.js'; + +export class Store { + setModelInfo(value: StoreModelInfo): void { + const finalValue = JSON.stringify(value); + + localStorage.setItem('OML2D_MODEL_INFO', finalValue); + } + + getModuleInfo(modelOptions: ModelOptions[]): StoreModelInfo { + const key = this.getModelDataKey(modelOptions); + + const value = JSON.parse(localStorage.getItem('OML2D_MODEL_INFO') as string) as StoreModelInfo; + + if (value?.key === key) { + return value; + } + } + + getModelDataKey(modelOptions: ModelOptions[]): string { + const keys = modelOptions?.map((item: ModelOptions): string => { + return item.path; + }); + + return keys.join(); + } + + updateModelInfo(modelOptions: ModelOptions[], currentIndex: number): void { + const key = this.getModelDataKey(modelOptions); + + this.setModelInfo({ key, currentIndex }); + } + + getModelCurrentIndex(modelOptions: ModelOptions[]): number { + return this.getModuleInfo(modelOptions)?.currentIndex || 0; + } +} diff --git a/packages/oh-my-live2d/src/modules/tips.ts b/packages/oh-my-live2d/src/modules/tips.ts index 4f8cb9a..de3658a 100644 --- a/packages/oh-my-live2d/src/modules/tips.ts +++ b/packages/oh-my-live2d/src/modules/tips.ts @@ -28,7 +28,7 @@ export class Tips { this.idlePlayer = this.createIdleMessagePlayer(); } - get tipsOptions(): DefaultTipsOptions { + private get tipsOptions(): DefaultTipsOptions { return this.options.tips; } diff --git a/packages/oh-my-live2d/src/types/common.ts b/packages/oh-my-live2d/src/types/common.ts index 357be65..1a0437c 100644 --- a/packages/oh-my-live2d/src/types/common.ts +++ b/packages/oh-my-live2d/src/types/common.ts @@ -43,3 +43,5 @@ export type LoadOml2dSDK = ( PixiLive2dDisplay: PixiLive2dDisplayModule; }>; export type OML2D = Omit; + +export type StoreModelInfo = { key: string; currentIndex: number } | undefined; diff --git a/packages/vite-plugin/package.json b/packages/vite-plugin/package.json index 7a63668..b64217e 100644 --- a/packages/vite-plugin/package.json +++ b/packages/vite-plugin/package.json @@ -1,5 +1,5 @@ { - "name": "vite-plugin-oml2d", + "name": "vite-plugin-oh-my-live2d", "version": "0.12.0", "description": "", "main": "dist/index.js", diff --git a/tests/vite-app/index.html b/tests/vite-app/index.html index 6c28757..9d50f58 100644 --- a/tests/vite-app/index.html +++ b/tests/vite-app/index.html @@ -8,13 +8,29 @@
- +