From 69da0484388643bac1a6d77f34d1ca7acb553b07 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Fri, 31 Jan 2025 13:00:47 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=B8=B2=E6=9F=93=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E7=9A=84=E9=83=A8=E5=88=86=E7=9B=AE=E5=BD=95=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/libs/control.js | 6 +- src/core/index.ts | 4 +- src/core/render/index.ts | 14 ++++ src/core/render/item.ts | 2 +- src/game/system.ts | 2 - src/module/fallback/index.ts | 5 +- src/module/fallback/weather.ts | 21 ++++++ src/module/index.ts | 10 +-- src/module/{ui => render}/components/index.ts | 0 .../{ui => render}/components/textbox.tsx | 0 .../{ui => render}/components/textboxTyper.ts | 0 src/module/{ui => render}/components/types.ts | 0 src/{core => module}/render/index.tsx | 72 +++++++++---------- src/module/ui/index.ts | 1 - src/plugin/boss/towerBoss.ts | 5 +- 15 files changed, 83 insertions(+), 59 deletions(-) create mode 100644 src/core/render/index.ts create mode 100644 src/module/fallback/weather.ts rename src/module/{ui => render}/components/index.ts (100%) rename src/module/{ui => render}/components/textbox.tsx (100%) rename src/module/{ui => render}/components/textboxTyper.ts (100%) rename src/module/{ui => render}/components/types.ts (100%) rename src/{core => module}/render/index.tsx (65%) delete mode 100644 src/module/ui/index.ts diff --git a/public/libs/control.js b/public/libs/control.js index 4ed348a..af95525 100644 --- a/public/libs/control.js +++ b/public/libs/control.js @@ -2853,11 +2853,7 @@ control.prototype.getMappedName = function (name) { ////// 更改天气效果 ////// control.prototype.setWeather = function (type, level) { // Deprecated. Use WeatherController API instead. - Mota.r(() => { - const controller = Mota.require('module', 'Weather').controller; - controller.clearWeather(); - if (type !== null && type !== void 0) controller.activate(type, level); - }); + // Fallback see src/module/fallback/weather.ts }; ////// 注册一个天气 ////// diff --git a/src/core/index.ts b/src/core/index.ts index 9ba6ead..0492c9d 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -75,7 +75,6 @@ import './render/index'; import * as RenderUtils from './render/utils'; import '@/module'; import { MotaOffscreenCanvas2D } from './fx/canvas2d'; -import { TextboxStore } from './render/index'; // ----- 类注册 Mota.register('class', 'CustomToolbar', CustomToolbar); @@ -157,8 +156,7 @@ Mota.register('module', 'Render', { LayerGroupFloorBinder, Camera, MotaOffscreenCanvas2D, - Utils: RenderUtils, - TextboxStore + Utils: RenderUtils }); Mota.register('module', 'Action', { HeroKeyMover diff --git a/src/core/render/index.ts b/src/core/render/index.ts new file mode 100644 index 0000000..b675579 --- /dev/null +++ b/src/core/render/index.ts @@ -0,0 +1,14 @@ +export * from './preset'; +export * from './renderer'; +export * from './adapter'; +export * from './cache'; +export * from './camera'; +export * from './container'; +export * from './frame'; +export * from './gl2'; +export * from './item'; +export * from './render'; +export * from './shader'; +export * from './sprite'; +export * from './transform'; +export * from './utils'; diff --git a/src/core/render/item.ts b/src/core/render/item.ts index 51515e7..45def3e 100644 --- a/src/core/render/item.ts +++ b/src/core/render/item.ts @@ -388,7 +388,7 @@ export abstract class RenderItem /** * 渲染函数 * @param canvas 渲染至的画布 - * @param transform 当前变换矩阵的,渲染时已经进行变换处理,不需要对画布再次进行变换处理 + * @param transform 当前变换矩阵的,渲染时已经进行变换处理,不需要对画布再次进行变换处理。 * 此参数可用于自己对元素进行变换处理,也会用于对子元素的处理。 * 例如对于`absolute`类型的元素,同时有对视角改变的需求,就可以通过此参数进行变换。 * 样板内置的`Layer`及`Damage`元素就是通过此方式实现的 diff --git a/src/game/system.ts b/src/game/system.ts index e414e71..0c192e4 100644 --- a/src/game/system.ts +++ b/src/game/system.ts @@ -38,7 +38,6 @@ import type * as Animation from 'mutate-animate'; import type * as RenderUtils from '@/core/render/utils'; import type { WeatherController } from '@/module/weather/weather'; import type { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; -import type { TextboxStore } from '@/core/render'; interface ClassInterface { // 渲染进程与游戏进程通用 @@ -115,7 +114,6 @@ interface ModuleInterface { Camera: typeof Camera; MotaOffscreenCanvas2D: typeof MotaOffscreenCanvas2D; Utils: typeof RenderUtils; - TextboxStore: typeof TextboxStore; }; State: { ItemState: typeof ItemState; diff --git a/src/module/fallback/index.ts b/src/module/fallback/index.ts index be00871..cc0dd32 100644 --- a/src/module/fallback/index.ts +++ b/src/module/fallback/index.ts @@ -1,9 +1,10 @@ import { Patch } from '@/common/patch'; import { patchAudio } from './audio'; - -patchAudio(); +import { patchWeather } from './weather'; export function patchAll() { + patchAudio(); + patchWeather(); const loading = Mota.require('var', 'loading'); loading.once('coreInit', () => { Patch.patchAll(); diff --git a/src/module/fallback/weather.ts b/src/module/fallback/weather.ts new file mode 100644 index 0000000..76b05fb --- /dev/null +++ b/src/module/fallback/weather.ts @@ -0,0 +1,21 @@ +import { Patch, PatchClass } from '@/common/patch'; +import { WeatherController } from '../weather'; +import { isNil } from 'lodash-es'; + +export function patchWeather() { + const patch = new Patch(PatchClass.Control); + let nowWeather: string = ''; + let nowLevel: number = 0; + + patch.add('setWeather', (type, level) => { + const weather = WeatherController.get('main'); + if (!weather) return; + if (type === nowWeather && level === nowLevel) return; + weather.clearWeather(); + if (!isNil(type)) { + weather.activate(type, level); + nowWeather = type; + nowLevel = level ?? 5; + } + }); +} diff --git a/src/module/index.ts b/src/module/index.ts index f34302f..e000ade 100644 --- a/src/module/index.ts +++ b/src/module/index.ts @@ -1,19 +1,21 @@ import { soundPlayer } from './audio'; import { patchAll } from './fallback'; -import { controller } from './weather'; +import { create } from './render'; import { RainWeather } from './weather/rain'; import { WeatherController } from './weather/weather'; patchAll(); Mota.register('module', 'Weather', { - controller, WeatherController, RainWeather }); -Mota.register('module', 'Audio', { soundPlayer }); +Mota.register('module', 'Audio', { + soundPlayer +}); +Mota.require('var', 'loading').once('coreInit', create); export * from './weather'; export * from './audio'; export * from './loader'; export * from './fallback'; -export * from './ui'; +export * from './render'; diff --git a/src/module/ui/components/index.ts b/src/module/render/components/index.ts similarity index 100% rename from src/module/ui/components/index.ts rename to src/module/render/components/index.ts diff --git a/src/module/ui/components/textbox.tsx b/src/module/render/components/textbox.tsx similarity index 100% rename from src/module/ui/components/textbox.tsx rename to src/module/render/components/textbox.tsx diff --git a/src/module/ui/components/textboxTyper.ts b/src/module/render/components/textboxTyper.ts similarity index 100% rename from src/module/ui/components/textboxTyper.ts rename to src/module/render/components/textboxTyper.ts diff --git a/src/module/ui/components/types.ts b/src/module/render/components/types.ts similarity index 100% rename from src/module/ui/components/types.ts rename to src/module/render/components/types.ts diff --git a/src/core/render/index.tsx b/src/module/render/index.tsx similarity index 65% rename from src/core/render/index.tsx rename to src/module/render/index.tsx index d6c6bf9..a216599 100644 --- a/src/core/render/index.tsx +++ b/src/module/render/index.tsx @@ -1,26 +1,25 @@ import { FloorItemDetail } from '@/plugin/fx/itemDetail'; -import { FloorDamageExtends } from './preset/damage'; -import { LayerDoorAnimate } from './preset/floor'; -import { HeroRenderer } from './preset/hero'; -import { MotaRenderer } from './render'; -import { LayerShadowExtends } from '../fx/shadow'; +import { FloorDamageExtends, LayerGroup } from '@/core/render'; +import { LayerDoorAnimate } from '@/core/render'; +import { HeroRenderer } from '@/core/render'; +import { MotaRenderer } from '@/core/render'; +import { LayerShadowExtends } from '@/core/fx/shadow'; import { LayerGroupFilter } from '@/plugin/fx/gameCanvas'; -import { LayerGroupAnimate } from './preset/animate'; +import { LayerGroupAnimate } from '@/core/render'; import { LayerGroupPortal } from '@/plugin/fx/portal'; import { LayerGroupHalo } from '@/plugin/fx/halo'; -import { FloorViewport } from './preset/viewport'; +import { FloorViewport } from '@/core/render'; import { PopText } from '@/plugin/fx/pop'; import { FloorChange } from '@/plugin/fallback'; -import { createApp } from './renderer'; -import { defineComponent } from 'vue'; -import { Textbox } from '../../module/ui/components'; -import { ILayerGroupRenderExtends, ILayerRenderExtends } from './preset'; -import { Props } from './utils'; +import { createApp } from '@/core/render'; +import { defineComponent, onMounted, ref } from 'vue'; +import { Textbox } from './components'; +import { ILayerGroupRenderExtends, ILayerRenderExtends } from '@/core/render'; +import { Props } from '@/core/render'; +import { WeatherController } from '../weather'; -let main: MotaRenderer; - -Mota.require('var', 'loading').once('coreInit', () => { - main = new MotaRenderer(); +export function create() { + const main = new MotaRenderer(); const App = defineComponent(_props => { const layerGroupExtends: ILayerGroupRenderExtends[] = [ @@ -57,9 +56,16 @@ Mota.require('var', 'loading').once('coreInit', () => { lineHeight: 6 }; + const map = ref(); + const weather = new WeatherController('main'); + + onMounted(() => { + weather.bind(map.value); + }); + return () => ( - + @@ -75,28 +81,16 @@ Mota.require('var', 'loading').once('coreInit', () => { main.hide(); createApp(App).mount(main); - // render(, main); + + Mota.require('var', 'hook').on('reset', () => { + main.show(); + }); + + Mota.require('var', 'hook').on('restart', () => { + main.hide(); + }); console.log(main); -}); +} -Mota.require('var', 'hook').on('reset', () => { - main.show(); -}); - -Mota.require('var', 'hook').on('restart', () => { - main.hide(); -}); - -export * from './preset'; -export * from './renderer'; -export * from './adapter'; -export * from './cache'; -export * from './camera'; -export * from './container'; -export * from './gl2'; -export * from './item'; -export * from './render'; -export * from './shader'; -export * from './sprite'; -export * from './transform'; +export * from './components'; diff --git a/src/module/ui/index.ts b/src/module/ui/index.ts deleted file mode 100644 index 07635cb..0000000 --- a/src/module/ui/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './components'; diff --git a/src/plugin/boss/towerBoss.ts b/src/plugin/boss/towerBoss.ts index fb6d307..95bbd1b 100644 --- a/src/plugin/boss/towerBoss.ts +++ b/src/plugin/boss/towerBoss.ts @@ -20,8 +20,8 @@ import { } from './towerBossProjectile'; import { IStateDamageable } from '@/game/state/interface'; import { HeroRenderer } from '@/core/render/preset/hero'; -import { controller } from '@/module/weather'; import { Pop } from '../fx/pop'; +import { WeatherController } from '@/module'; Mota.require('var', 'loading').once('coreInit', () => { const shader = new Shader(); @@ -401,7 +401,8 @@ export class TowerBoss extends BarrageBoss { this.skill4Time = 5; this.skill5Time = 3; core.playBgm('towerBoss2.opus'); - controller.activate('rain', 6); + const weather = WeatherController.get('main'); + weather?.activate('rain', 6); } releaseSkill4() {