diff --git a/packages-user/client-modules/package.json b/packages-user/client-modules/package.json index 0b2c805..0311a70 100644 --- a/packages-user/client-modules/package.json +++ b/packages-user/client-modules/package.json @@ -1,3 +1,8 @@ { - "name": "@user/client-modules" + "name": "@user/client-modules", + "dependencies": { + "@motajs/render": "workspace:*", + "@motajs/legacy-ui": "workspace:*", + "@user/legacy-plugin-client": "workspace:*" + } } \ No newline at end of file diff --git a/packages-user/client-modules/src/action/index.ts b/packages-user/client-modules/src/action/index.ts new file mode 100644 index 0000000..a9b1dd4 --- /dev/null +++ b/packages-user/client-modules/src/action/index.ts @@ -0,0 +1 @@ +export * from './move'; diff --git a/packages-user/client-modules/src/audio/bgm.ts b/packages-user/client-modules/src/audio/bgm.ts index fea850a..f983414 100644 --- a/packages-user/client-modules/src/audio/bgm.ts +++ b/packages-user/client-modules/src/audio/bgm.ts @@ -258,7 +258,7 @@ export class BgmController< export const bgmController = new BgmController(audioPlayer); export function loadAllBgm() { - const loading = Mota.require('var', 'loading'); + const { loading } = Mota.require('@user/data-base'); loading.once('coreInit', () => { const data = data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d; for (const bgm of data.main.bgms) { diff --git a/packages-user/client-modules/src/fallback/index.ts b/packages-user/client-modules/src/fallback/index.ts index d1b1775..49119df 100644 --- a/packages-user/client-modules/src/fallback/index.ts +++ b/packages-user/client-modules/src/fallback/index.ts @@ -7,8 +7,4 @@ export function patchAll() { patchAudio(); patchWeather(); patchUI(); - const loading = Mota.require('var', 'loading'); - loading.once('coreInit', () => { - Patch.patchAll(); - }); } diff --git a/packages-user/client-modules/src/index.ts b/packages-user/client-modules/src/index.ts index 9c8ab4d..02ebb93 100644 --- a/packages-user/client-modules/src/index.ts +++ b/packages-user/client-modules/src/index.ts @@ -2,6 +2,7 @@ import { patchAll } from './fallback'; patchAll(); +export * from './action'; export * from './weather'; export * from './audio'; export * from './loader'; diff --git a/packages/render-elements/src/damage.ts b/packages-user/client-modules/src/render/damage.ts similarity index 97% rename from packages/render-elements/src/damage.ts rename to packages-user/client-modules/src/render/damage.ts index cb460b4..22980ed 100644 --- a/packages/render-elements/src/damage.ts +++ b/packages-user/client-modules/src/render/damage.ts @@ -8,17 +8,21 @@ import { import { logger } from '@motajs/common'; import EventEmitter from 'eventemitter3'; import { isNil } from 'lodash-es'; -import { LayerGroupFloorBinder } from './floor'; import { + BlockCacher, + CanvasCacheItem, + ICanvasCacheItem, calNeedRenderOf, ILayerGroupRenderExtends, Layer, - LayerGroup -} from './layer'; -import { BlockCacher, CanvasCacheItem, ICanvasCacheItem } from './block'; + LayerGroup, + LayerGroupFloorBinder, + tagMap +} from '@motajs/render'; import { IDamageEnemy, IEnemyCollection, MapDamage } from '@motajs/types'; +import { UserEnemyInfo } from '@user/data-state'; -const ensureFloorDamage = Mota.require('fn', 'ensureFloorDamage'); +const { ensureFloorDamage } = Mota.require('@user/data-state'); /** * 根据伤害大小获取颜色 @@ -323,7 +327,7 @@ export class Damage extends RenderItem { const y = enemy.y!; const { damage } = enemy.calDamage(); const cri = enemy.calCritical(1)[0]?.atkDelta ?? Infinity; - const real = enemy.getRealInfo(); + const real = enemy.getRealInfo() as UserEnemyInfo; const dam1: DamageRenderable = { align: 'left', @@ -587,4 +591,9 @@ export class Damage extends RenderItem { } } +// 注册为内部元素 +tagMap.register('damage', (_0, _1, _props) => { + return new Damage(); +}); + // const adapter = new RenderAdapter('damage'); diff --git a/packages-user/client-modules/src/render/index.tsx b/packages-user/client-modules/src/render/index.tsx index f452fa4..61f5092 100644 --- a/packages-user/client-modules/src/render/index.tsx +++ b/packages-user/client-modules/src/render/index.tsx @@ -3,7 +3,7 @@ import { defineComponent } from 'vue'; import { UIController } from '@motajs/system-ui'; import { mainSceneUI } from './ui/main'; import { MAIN_HEIGHT, MAIN_WIDTH } from './shared'; -import { TextboxStore } from './components'; +import { hook } from '@user/data-base'; export function create() { const main = new MotaRenderer(); @@ -23,21 +23,17 @@ export function create() { main.hide(); createApp(App).mount(main); - Mota.require('var', 'hook').on('reset', () => { + hook.on('reset', () => { main.show(); }); - Mota.require('var', 'hook').on('restart', () => { + hook.on('restart', () => { main.hide(); }); console.log(main); } -Mota.register('module', 'MainUI', { - TextboxStore -}); - export * from './components'; export * from './ui'; export * from './use'; diff --git a/packages-user/legacy-plugin-client/src/fx/itemDetail.ts b/packages-user/client-modules/src/render/itemDetail.ts similarity index 96% rename from packages-user/legacy-plugin-client/src/fx/itemDetail.ts rename to packages-user/client-modules/src/render/itemDetail.ts index 68a927b..6035f24 100644 --- a/packages-user/legacy-plugin-client/src/fx/itemDetail.ts +++ b/packages-user/client-modules/src/render/itemDetail.ts @@ -1,13 +1,13 @@ import { logger } from '@motajs/common'; import { mainSetting } from '@motajs/legacy-ui'; import { - Damage, - DamageRenderable, - FloorDamageExtends, LayerGroupFloorBinder, ILayerGroupRenderExtends, LayerGroup } from '@motajs/render'; +import { hook } from '@user/data-base'; +import { ItemState } from '@user/data-state'; +import { Damage, DamageRenderable, FloorDamageExtends } from './damage'; interface ItemDetailData { x: number; @@ -21,8 +21,7 @@ interface ItemData { y: number; } -const ItemState = Mota.require('module', 'State').ItemState; -Mota.require('var', 'hook').on('setBlock', (x, y, floorId, block) => { +hook.on('setBlock', (x, y, floorId, block) => { FloorItemDetail.listened.forEach(v => { v.setBlock(block, x, y); }); @@ -199,8 +198,7 @@ export class FloorItemDetail implements ILayerGroupRenderExtends { return; } - // @ts-ignore - ItemState.item(id)?.itemEffectFn(); + ItemState.item(id)?.itemEffectFn?.(); detail?.set(index, { x, y, diff }); }); }); diff --git a/packages-user/legacy-plugin-client/src/loopMap.ts b/packages-user/client-modules/src/render/loopMap.ts similarity index 93% rename from packages-user/legacy-plugin-client/src/loopMap.ts rename to packages-user/client-modules/src/render/loopMap.ts index 10c3fd6..2afea65 100644 --- a/packages-user/legacy-plugin-client/src/loopMap.ts +++ b/packages-user/client-modules/src/render/loopMap.ts @@ -1,22 +1,23 @@ import { Container, - FloorDamageExtends, LayerGroupFloorBinder, FloorLayer, LayerGroup, FloorViewport, MotaRenderer } from '@motajs/render'; -import { FloorItemDetail } from '@/plugin/fx/itemDetail'; +import { hook } from '@user/data-base'; +import { MiscData } from '@user/data-state'; +import { FloorDamageExtends } from './damage'; +import { FloorItemDetail } from './itemDetail'; -const loopMaps = Mota.require('module', 'Mechanism').MiscData.loopMaps; +const loopMaps = MiscData.loopMaps; let loopLayer: LayerGroup; let show: boolean = false; /** 循环式地图中,更新视角的委托ticker */ let delegation: number = -1; -const hook = Mota.require('var', 'hook'); hook.on('changingFloor', (floorId, heroLoc) => { enableLoopMapElement(floorId); }); diff --git a/packages-user/client-modules/src/render/ui/main.tsx b/packages-user/client-modules/src/render/ui/main.tsx index 1075e96..6864c55 100644 --- a/packages-user/client-modules/src/render/ui/main.tsx +++ b/packages-user/client-modules/src/render/ui/main.tsx @@ -1,7 +1,6 @@ -import { LayerShadowExtends } from '@/core/fx/shadow'; +import { LayerShadowExtends } from '@motajs/legacy-ui'; import { ILayerGroupRenderExtends, - FloorDamageExtends, LayerGroupAnimate, FloorViewport, ILayerRenderExtends, @@ -11,13 +10,14 @@ import { LayerGroup, Font } from '@motajs/render'; -import { WeatherController } from '@/module/weather'; -import { FloorChange } from '@/plugin/fallback'; -import { LayerGroupFilter } from '@/plugin/fx/gameCanvas'; -import { LayerGroupHalo } from '@/plugin/fx/halo'; -import { FloorItemDetail } from '@/plugin/fx/itemDetail'; -import { PopText } from '@/plugin/fx/pop'; -import { LayerGroupPortal } from '@/plugin/fx/portal'; +import { WeatherController } from '../../weather'; +import { + FloorChange, + LayerGroupFilter, + LayerGroupHalo, + LayerGroupPortal, + PopText +} from '@user/legacy-plugin-client'; import { defineComponent, onMounted, reactive, ref } from 'vue'; import { Textbox, Tip } from '../components'; import { GameUI, UIController } from '@motajs/system-ui'; @@ -35,6 +35,11 @@ import { } from './statusBar'; import { onLoaded } from '../use'; import { ReplayingStatus } from './toolbar'; +import { getHeroStatusOn, HeroSkill, NightSpecial } from '@user/data-state'; +import { jumpIgnoreFloor } from '@user/legacy-plugin-data'; +import { hook } from '@user/data-base'; +import { FloorDamageExtends } from '../damage'; +import { FloorItemDetail } from '../itemDetail'; const MainScene = defineComponent(() => { const layerGroupExtends: ILayerGroupRenderExtends[] = [ @@ -112,8 +117,6 @@ const MainScene = defineComponent(() => { night: 0 }); - const { getHeroStatusOn } = Mota.requireAll('fn'); - const updateStatus = () => { if (!core.status || !core.status.hero || !core.status.floorId) return; hideStatus.value = core.getFlag('hideStatusBar', false); @@ -135,7 +138,6 @@ const MainScene = defineComponent(() => { leftStatus.exAtk = getHeroStatusOn('mana'); leftStatus.magicDef = getHeroStatusOn('magicDef'); - const { HeroSkill, NightSpecial } = Mota.require('module', 'Mechanism'); rightStatus.autoSkill = HeroSkill.getAutoSkill(); rightStatus.skillName = HeroSkill.getSkillName(); rightStatus.skillDesc = HeroSkill.getSkillDesc(); @@ -148,7 +150,7 @@ const MainScene = defineComponent(() => { replayStatus.played = totalList.length - toReplay.length; replayStatus.total = totalList.length; if (HeroSkill.learnedSkill(HeroSkill.Jump)) { - if (Mota.Plugin.require('skill_g').jumpIgnoreFloor.has(floor)) { + if (jumpIgnoreFloor.has(floor)) { rightStatus.jumpCount = -2; } else { rightStatus.jumpCount = 3 - (flags[`jump_${floor}`] ?? 0); @@ -168,7 +170,7 @@ const MainScene = defineComponent(() => { loaded.value = true; }); - Mota.require('var', 'hook').on('statusBarUpdate', updateStatus); + hook.on('statusBarUpdate', updateStatus); return () => ( diff --git a/packages-user/client-modules/src/render/ui/settings.tsx b/packages-user/client-modules/src/render/ui/settings.tsx index 8f5f814..e258efc 100644 --- a/packages-user/client-modules/src/render/ui/settings.tsx +++ b/packages-user/client-modules/src/render/ui/settings.tsx @@ -14,7 +14,7 @@ import { mainUi } from '@motajs/legacy-ui'; import { gameKey } from '@motajs/system-action'; import { generateKeyboardEvent } from '@motajs/system-action'; import { getVitualKeyOnce } from '@motajs/legacy-ui'; -import { getAllSavesData, getSaveData } from '@/module/utils'; +import { getAllSavesData, getSaveData } from '../../utils'; export interface SettingsProps extends Partial, UIComponentProps { loc: ElementLocator; @@ -410,7 +410,9 @@ export const DownloadSaveSelect = defineComponent(props => { { text: '请等待处理完毕' } ); core.download( - `${core.firstData.name}_${core.formatDate2(new Date())}.h5save`, + `${core.firstData.name}_${core.formatDate2( + new Date() + )}.h5save`, data ); } @@ -426,7 +428,9 @@ export const DownloadSaveSelect = defineComponent(props => { if (confirm) { const data = await getSaveData(core.saves.saveIndex); core.download( - `${core.firstData.name}_${core.formatDate2(new Date())}.h5save`, + `${core.firstData.name}_${core.formatDate2( + new Date() + )}.h5save`, data ); } diff --git a/packages-user/client-modules/src/render/ui/statusBar.tsx b/packages-user/client-modules/src/render/ui/statusBar.tsx index 77bd0fa..a18a23d 100644 --- a/packages-user/client-modules/src/render/ui/statusBar.tsx +++ b/packages-user/client-modules/src/render/ui/statusBar.tsx @@ -18,6 +18,7 @@ import { ReplayingStatus, ReplayingToolbar } from './toolbar'; +import { HeroSkill } from '@user/data-state'; export interface ILeftHeroStatus { hp: number; @@ -275,7 +276,6 @@ export const RightStatusBar = defineComponent>( }; const changeAutoSkill = () => { - const { HeroSkill } = Mota.require('module', 'Mechanism'); const auto = !s.autoSkill; HeroSkill.setAutoSkill(auto); core.status.route.push(`set:autoSkill:${auto}`); diff --git a/packages-user/client-modules/src/render/use.ts b/packages-user/client-modules/src/render/use.ts index 0e75432..2f33465 100644 --- a/packages-user/client-modules/src/render/use.ts +++ b/packages-user/client-modules/src/render/use.ts @@ -1,3 +1,4 @@ +import { loading } from '@user/data-base'; import { TimingFn, Transition } from 'mutate-animate'; import { ComponentInternalInstance, @@ -59,7 +60,6 @@ export function onOrientationChange(hook: OrientationHook) { * @param hook 当游戏加载完成时执行的函数 */ export function onLoaded(hook: () => void) { - const loading = Mota.require('var', 'loading'); if (!loading.loaded) { loading.once('loaded', hook); } else { diff --git a/packages-user/client-modules/src/weather/snow.ts b/packages-user/client-modules/src/weather/snow.ts index b18991c..99da47e 100644 --- a/packages-user/client-modules/src/weather/snow.ts +++ b/packages-user/client-modules/src/weather/snow.ts @@ -10,6 +10,7 @@ import { MotaOffscreenCanvas2D } from '@motajs/render'; import { IWeather } from './weather'; +import { loading } from '@user/data-base'; const snowVs = /* glsl */ ` in vec2 a_snowVertex; @@ -105,7 +106,7 @@ void main() { /** 雨滴顶点坐标 */ const vertex = new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]); -Mota.require('var', 'loading').once('coreInit', () => { +loading.once('coreInit', () => { const shader = new SnowShader(); const gl = shader.gl; shader.size(480, 480); diff --git a/packages-user/data-base/src/game.ts b/packages-user/data-base/src/game.ts index 9992b92..af79114 100644 --- a/packages-user/data-base/src/game.ts +++ b/packages-user/data-base/src/game.ts @@ -107,6 +107,8 @@ export interface GameEvent { ]; /** Emitted in lib/control.js */ replayStatus: [replaying: boolean]; + /** Emitted in project/functions.js */ + loadData: []; } export const hook = new EventEmitter(); diff --git a/packages-user/data-state/src/enemy/damage.ts b/packages-user/data-state/src/enemy/damage.ts index b17b6c1..5f3d8e2 100644 --- a/packages-user/data-state/src/enemy/damage.ts +++ b/packages-user/data-state/src/enemy/damage.ts @@ -13,7 +13,8 @@ import { HaloFn, IEnemyCollection, IDamageEnemy, - HaloType + HaloType, + IEnemyCollectionEvent } from '@motajs/types'; // todo: 光环划分优先级,从而可以实现光环的多级运算 @@ -52,13 +53,8 @@ specialValue .set(31, ['hpHalo']) .set(32, ['assimilateRange']); -interface EnemyCollectionEvent { - extract: []; - calculated: []; -} - export class EnemyCollection - extends EventEmitter + extends EventEmitter implements IEnemyCollection { floorId: FloorIds; diff --git a/packages-user/data-state/src/mechanism/skillTree.ts b/packages-user/data-state/src/mechanism/skillTree.ts index 2c91c0a..e2cb043 100644 --- a/packages-user/data-state/src/mechanism/skillTree.ts +++ b/packages-user/data-state/src/mechanism/skillTree.ts @@ -233,7 +233,7 @@ export function getSkillConsume(skill: number) { export function openTree() { if (main.replayChecking) return; - Mota.require('var', 'mainUi').open('skillTree'); + Mota.require('@motajs/legacy-ui').mainUi.open('skillTree'); } /** diff --git a/packages-user/data-state/src/state/hero.ts b/packages-user/data-state/src/state/hero.ts index b6c90c8..7fbaf19 100644 --- a/packages-user/data-state/src/state/hero.ts +++ b/packages-user/data-state/src/state/hero.ts @@ -59,7 +59,7 @@ function getRealStatus( name: keyof HeroStatus | 'all' | (keyof HeroStatus)[], floorId: FloorIds = core.status.floorId ): any { - const { getSkillLevel } = Mota.Plugin.require('skillTree_g'); + const { getSkillLevel } = Mota.require('@user/legacy-plugin-data'); if (name instanceof Array) { const res: any = {}; name.forEach(v => { diff --git a/packages-user/data-state/src/state/move.ts b/packages-user/data-state/src/state/move.ts index 5b3ec02..e45e7e1 100644 --- a/packages-user/data-state/src/state/move.ts +++ b/packages-user/data-state/src/state/move.ts @@ -11,7 +11,7 @@ import type { LayerMovingRenderable, LayerFloorBinder } from '@motajs/render'; -import type { HeroKeyMover } from '@/module/action/move'; +import type { HeroKeyMover } from '@user/client-modules'; import { BluePalace, MiscData } from '../mechanism/misc'; import { sleep } from '@motajs/common'; @@ -939,7 +939,7 @@ export const heroMoveCollection: HeroMoveCollection = { loading.once('coreInit', () => { // 注册按键操作 Mota.r(() => { - const { HeroKeyMover } = Mota.require('@motajs/system-action'); + const { HeroKeyMover } = Mota.require('@user/client-modules'); const { gameKey } = Mota.require('@motajs/system-action'); const keyMover = new HeroKeyMover(gameKey, heroMover); heroMoveCollection.keyMover = keyMover; diff --git a/packages-user/entry-client/src/create.ts b/packages-user/entry-client/src/create.ts index e4efbfd..6530af1 100644 --- a/packages-user/entry-client/src/create.ts +++ b/packages-user/entry-client/src/create.ts @@ -16,6 +16,8 @@ import * as SystemAction from '@motajs/system-action'; import * as SystemUI from '@motajs/system-ui'; import * as ClientModules from '@user/client-modules'; import * as LegacyPluginClient from '@user/legacy-plugin-client'; +import * as MutateAnimate from 'mutate-animate'; +import * as Vue from 'vue'; export function create() { Mota.register('@motajs/client', Client); @@ -35,4 +37,6 @@ export function create() { Mota.register('@motajs/system-ui', SystemUI); Mota.register('@user/client-modules', ClientModules); Mota.register('@user/legacy-plugin-client', LegacyPluginClient); + Mota.register('MutateAnimate', MutateAnimate); + Mota.register('Vue', Vue); } diff --git a/packages-user/entry-data/src/index.ts b/packages-user/entry-data/src/index.ts index c07228f..cd6618f 100644 --- a/packages-user/entry-data/src/index.ts +++ b/packages-user/entry-data/src/index.ts @@ -1,9 +1,15 @@ import { patchAll } from '@user/data-fallback'; import { createMota } from './mota'; import { create } from './create'; +import { loading } from '@user/data-base'; +import { Patch } from '@motajs/legacy-common'; createMota(); patchAll(); create(); +loading.once('coreInit', () => { + Patch.patchAll(); +}); + export * from './mota'; diff --git a/packages-user/entry-data/src/mota.ts b/packages-user/entry-data/src/mota.ts index 64ddc34..d05dbd2 100644 --- a/packages-user/entry-data/src/mota.ts +++ b/packages-user/entry-data/src/mota.ts @@ -20,6 +20,9 @@ import type * as DataState from '@user/data-state'; import type * as DataUtils from '@user/data-utils'; import type * as LegacyPluginClient from '@user/legacy-plugin-client'; import type * as LegacyPluginData from '@user/legacy-plugin-data'; +// ---------- 必要的第三方库 +import type * as MutateAnimate from 'mutate-animate'; +import type * as Vue from 'vue'; interface ModuleInterface { '@motajs/client': typeof Client; @@ -44,6 +47,9 @@ interface ModuleInterface { '@user/data-utils': typeof DataUtils; '@user/legacy-plugin-client': typeof LegacyPluginClient; '@user/legacy-plugin-data': typeof LegacyPluginData; + // ---------- 必要的第三方库 + MutateAnimate: typeof MutateAnimate; + Vue: typeof Vue; } export interface IMota { diff --git a/packages-user/legacy-plugin-client/package.json b/packages-user/legacy-plugin-client/package.json index 9d3df1b..4b9f93d 100644 --- a/packages-user/legacy-plugin-client/package.json +++ b/packages-user/legacy-plugin-client/package.json @@ -1,6 +1,7 @@ { "name": "@user/legacy-plugin-client", "dependencies": { + "@user/client-modules": "workspace:*", "@user/data-state": "workspace:*" } } \ No newline at end of file diff --git a/packages-user/legacy-plugin-client/src/boss/index.ts b/packages-user/legacy-plugin-client/src/boss/index.ts index 85b3ea0..456a5fa 100644 --- a/packages-user/legacy-plugin-client/src/boss/index.ts +++ b/packages-user/legacy-plugin-client/src/boss/index.ts @@ -1,3 +1,4 @@ +import { hook } from '@user/data-base'; import { BarrageBoss } from './barrage'; import { TowerBoss } from './towerBoss'; @@ -15,7 +16,7 @@ export function getBoss(): T | null { return boss as T; } -Mota.require('var', 'hook').on('reset', () => { +hook.on('reset', () => { if (boss) { boss.end(); } diff --git a/packages-user/legacy-plugin-client/src/boss/palaceBoss.ts b/packages-user/legacy-plugin-client/src/boss/palaceBoss.ts index badcb37..92ad16f 100644 --- a/packages-user/legacy-plugin-client/src/boss/palaceBoss.ts +++ b/packages-user/legacy-plugin-client/src/boss/palaceBoss.ts @@ -12,8 +12,10 @@ import { import { Pop } from '../fx/pop'; import { SplittableBall } from './palaceBossProjectile'; import { PointEffect } from '../fx/pointShader'; +import { loading } from '@user/data-base'; +import { clip } from '@user/legacy-plugin-data'; -Mota.require('var', 'loading').once('coreInit', () => { +loading.once('coreInit', () => { const shader = new Shader(); shader.size(480, 480); shader.setHD(true); @@ -102,7 +104,7 @@ export class PalaceBoss extends BarrageBoss { PalaceBoss.effect.end(); core.status.hero.hp = this.heroHp; - Mota.Plugin.require('replay_g').clip('choices:0'); + clip('choices:0'); } ai(time: number, frame: number): void {} diff --git a/packages-user/legacy-plugin-client/src/boss/towerBoss.ts b/packages-user/legacy-plugin-client/src/boss/towerBoss.ts index 1c624a7..b15390b 100644 --- a/packages-user/legacy-plugin-client/src/boss/towerBoss.ts +++ b/packages-user/legacy-plugin-client/src/boss/towerBoss.ts @@ -23,9 +23,11 @@ import { } from './towerBossProjectile'; import { IStateDamageable } from '@user/data-state'; import { Pop } from '../fx/pop'; -import { WeatherController } from '@/module'; +import { WeatherController } from '@user/client-modules'; +import { loading } from '@user/data-base'; +import { clip } from '@user/legacy-plugin-data'; -Mota.require('var', 'loading').once('coreInit', () => { +loading.once('coreInit', () => { const shader = new Shader(); shader.size(480, 480); shader.setHD(true); @@ -198,7 +200,7 @@ export class TowerBoss extends BarrageBoss { TowerBoss.effect.end(); core.status.hero.hp = this.heroHp; - Mota.Plugin.require('replay_g').clip('choices:0'); + clip('choices:0'); } /** diff --git a/packages-user/legacy-plugin-client/src/chase/chase.ts b/packages-user/legacy-plugin-client/src/chase/chase.ts index 272fa5a..98d17a8 100644 --- a/packages-user/legacy-plugin-client/src/chase/chase.ts +++ b/packages-user/legacy-plugin-client/src/chase/chase.ts @@ -9,7 +9,12 @@ import { disableViewport, enableViewport } from '@motajs/render'; -import type { HeroMover, MoveStep } from '@user/data-state'; +import { loading } from '@user/data-base'; +import { + heroMoveCollection, + type HeroMover, + type MoveStep +} from '@user/data-state'; import EventEmitter from 'eventemitter3'; export interface IChaseController { @@ -108,7 +113,7 @@ export class Chase extends EventEmitter { const layer = render.getElementById('layer-main')! as LayerGroup; this.layer = layer; - const mover = Mota.require('module', 'State').heroMoveCollection.mover; + const mover = heroMoveCollection.mover; this.heroMove = mover; mover.on('stepEnd', this.onStepEnd); @@ -345,7 +350,7 @@ export class Chase extends EventEmitter { } } -Mota.require('var', 'loading').once('coreInit', () => { +loading.once('coreInit', () => { const shader = new Shader(); Chase.shader = shader; shader.size(480, 480); diff --git a/packages-user/legacy-plugin-client/src/chase/chase1.ts b/packages-user/legacy-plugin-client/src/chase/chase1.ts index 6339456..ab9d44b 100644 --- a/packages-user/legacy-plugin-client/src/chase/chase1.ts +++ b/packages-user/legacy-plugin-client/src/chase/chase1.ts @@ -10,7 +10,9 @@ import { Sprite } from '@motajs/render'; import { PointEffect, PointEffectType } from '../fx/pointShader'; -import { bgmController } from '@/module'; +import { bgmController } from '@user/client-modules'; +import { loading } from '@user/data-base'; +import { chaseInit1, clip } from '@user/legacy-plugin-data'; const path: Partial> = { MT16: [ @@ -107,7 +109,7 @@ let back: Sprite | undefined; let contrastId: number = 0; const effect = new PointEffect(); -Mota.require('var', 'loading').once('loaded', () => { +loading.once('loaded', () => { effect.create(Chase.shader, 40); }); @@ -215,7 +217,7 @@ export function initChase(): IChaseController { para3(chase, ani); processScale(chase, ani, scale, camera); - Mota.Plugin.require('chase_g').chaseInit1(); + chaseInit1(); chase.on('end', () => { effect.end(); @@ -712,7 +714,7 @@ function para3(chase: Chase, ani: Animation) { }); chase.onceLoc(21, 7, 'MT14', async () => { flags.finishChase1 = true; - Mota.Plugin.require('replay_g').clip('choices:0'); + clip('choices:0'); core.showStatusBar(); ani.time(750).apply('rect', 0); chase.end(true); diff --git a/packages-user/legacy-plugin-client/src/fx/gameCanvas.ts b/packages-user/legacy-plugin-client/src/fx/gameCanvas.ts index 9c398ef..5693b93 100644 --- a/packages-user/legacy-plugin-client/src/fx/gameCanvas.ts +++ b/packages-user/legacy-plugin-client/src/fx/gameCanvas.ts @@ -4,6 +4,7 @@ import { ILayerGroupRenderExtends, LayerGroup } from '@motajs/render'; +import { loading } from '@user/data-base'; const filterMap: [FloorIds[], string][] = []; @@ -11,7 +12,7 @@ function getCanvasFilterByFloorId(floorId: FloorIds = core.status.floorId) { return filterMap.find(v => v[0].includes(floorId))?.[1] ?? ''; } -Mota.require('var', 'loading').once('coreInit', () => { +loading.once('coreInit', () => { filterMap.push( [['MT50', 'MT60', 'MT61'], 'contrast(120%)'], // 童心佬的滤镜( [ diff --git a/packages-user/legacy-plugin-client/src/fx/halo.ts b/packages-user/legacy-plugin-client/src/fx/halo.ts index 2fbeeaa..fcffc46 100644 --- a/packages-user/legacy-plugin-client/src/fx/halo.ts +++ b/packages-user/legacy-plugin-client/src/fx/halo.ts @@ -8,8 +8,7 @@ import { Sprite, Transform } from '@motajs/render'; - -const gameListener = Mota.require('var', 'gameListener'); +import { gameListener, hook } from '@user/data-base'; export class LayerGroupHalo implements ILayerGroupRenderExtends { id: string = 'halo'; @@ -130,7 +129,7 @@ function updateHalo(block: Block) { } } -Mota.require('var', 'hook').on('enemyExtract', col => { +hook.on('enemyExtract', col => { LayerGroupHalo.sprites.forEach(v => { const floor = v.binder.getFloor(); if (col.floorId === floor) { diff --git a/packages-user/legacy-plugin-client/src/fx/index.ts b/packages-user/legacy-plugin-client/src/fx/index.ts index a3e1a3e..de93f55 100644 --- a/packages-user/legacy-plugin-client/src/fx/index.ts +++ b/packages-user/legacy-plugin-client/src/fx/index.ts @@ -1,6 +1,5 @@ export * from './gameCanvas'; export * from './halo'; -export * from './itemDetail'; export * from './pointShader'; export * from './pop'; export * from './portal'; diff --git a/packages-user/legacy-plugin-client/src/fx/portal.ts b/packages-user/legacy-plugin-client/src/fx/portal.ts index 5ed723b..8a60eb8 100644 --- a/packages-user/legacy-plugin-client/src/fx/portal.ts +++ b/packages-user/legacy-plugin-client/src/fx/portal.ts @@ -7,7 +7,7 @@ import { LayerGroup, Sprite } from '@motajs/render'; -import type { BluePalace } from '@user/data-state'; +import { BluePalace } from '@user/data-state'; /** 最大粒子数 */ const MAX_PARTICLES = 10; @@ -24,7 +24,7 @@ export class LayerGroupPortal implements ILayerGroupRenderExtends { portal!: Portal; private onFloorChange = (floor: FloorIds) => { - const data = Mota.require('module', 'Mechanism').BluePalace.portals; + const data = BluePalace.portals; this.portal.cellSize = this.group.cellSize; this.portal.setData(data[floor] ?? []); }; diff --git a/packages-user/legacy-plugin-client/src/index.ts b/packages-user/legacy-plugin-client/src/index.ts index 1d495b7..4217111 100644 --- a/packages-user/legacy-plugin-client/src/index.ts +++ b/packages-user/legacy-plugin-client/src/index.ts @@ -3,4 +3,4 @@ export * from './chase'; export * from './fx'; export * from './fallback'; -export * from './loopMap'; +export * from '../../client-modules/src/render/loopMap'; diff --git a/packages-user/legacy-plugin-data/package.json b/packages-user/legacy-plugin-data/package.json index 2cc08e4..2cd40c9 100644 --- a/packages-user/legacy-plugin-data/package.json +++ b/packages-user/legacy-plugin-data/package.json @@ -2,6 +2,7 @@ "name": "@user/legacy-plugin-data", "dependencies": { "@user/data-state": "workspace:*", - "@user/data-base": "workspace:*" + "@user/data-base": "workspace:*", + "@user/data-utils": "workspace:*" } } \ No newline at end of file diff --git a/packages-user/legacy-plugin-data/src/enemy/checkblock.ts b/packages-user/legacy-plugin-data/src/enemy/checkblock.ts index 071cb67..a430c12 100644 --- a/packages-user/legacy-plugin-data/src/enemy/checkblock.ts +++ b/packages-user/legacy-plugin-data/src/enemy/checkblock.ts @@ -1,4 +1,4 @@ -import { has, ofDir } from '@/plugin/game/utils'; +import { has, ofDir } from '@user/data-utils'; export function init() { // 伤害弹出 @@ -11,11 +11,11 @@ export function init() { const damage = info?.damage; if (damage) { if (!main.replayChecking) { - Mota.Plugin.require('pop_r').addPop( - (x - core.bigmap.offsetX / 32) * 32 + 12, - (y - core.bigmap.offsetY / 32) * 32 + 20, - (-damage).toString() - ); + // addPop( + // (x - core.bigmap.offsetX / 32) * 32 + 12, + // (y - core.bigmap.offsetY / 32) * 32 + 20, + // (-damage).toString() + // ); } core.status.hero.hp -= damage; const type = [...info.type]; diff --git a/packages-user/legacy-plugin-data/src/fallback.ts b/packages-user/legacy-plugin-data/src/fallback.ts index 5d313ba..d607779 100644 --- a/packages-user/legacy-plugin-data/src/fallback.ts +++ b/packages-user/legacy-plugin-data/src/fallback.ts @@ -10,6 +10,7 @@ import type { } from '@motajs/render'; import type { TimingFn } from 'mutate-animate'; import { BlockMover, heroMoveCollection, MoveStep } from '@user/data-state'; +import { hook, loading } from '@user/data-base'; // 向后兼容用,会充当两个版本间过渡的作用 @@ -24,8 +25,6 @@ interface Adapters { const adapters: Adapters = {}; export function initFallback() { - const hook = Mota.require('var', 'hook'); - const loading = Mota.require('var', 'loading'); let fallbackIds: number = 1e8; if (!main.replayChecking && main.mode === 'play') { @@ -90,7 +89,7 @@ export function initFallback() { // ----- 引入 const { Camera, MotaRenderer: Renderer } = Mota.require('@motajs/render'); - const Animation = Mota.require('module', 'Animation'); + const Animation = Mota.require('MutateAnimate'); // ----- 勇士移动相关 control.prototype.moveAction = async function (callback?: () => void) { @@ -313,7 +312,7 @@ export function initFallback() { core.removeBlock(x, y); setTimeout(function () { core.status.replay.animate = false; - Mota.require('var', 'hook').emit( + hook.emit( 'afterOpenDoor', block.event.id as AllIdsOf<'animates'>, x, diff --git a/packages-user/legacy-plugin-data/src/fx/itemDetail.ts b/packages-user/legacy-plugin-data/src/fx/itemDetail.ts index 5bd1adf..9eaa7a6 100644 --- a/packages-user/legacy-plugin-data/src/fx/itemDetail.ts +++ b/packages-user/legacy-plugin-data/src/fx/itemDetail.ts @@ -1,5 +1,5 @@ import { EnemyCollection, ensureFloorDamage } from '@user/data-state'; -import { formatDamage } from '../utils'; +import { formatDamage } from '@user/data-utils'; export function init() { core.control.updateDamage = function ( @@ -58,7 +58,7 @@ function renderThumbnailDamage(col: EnemyCollection) { py: 32 * (v.y! + 1) - 1, color: color }); - const setting = Mota.require('var', 'mainSetting'); + const setting = Mota.require('@motajs/legacy-ui').mainSetting; const criGem = setting.getValue('screen.criticalGem', false); const n = critical?.atkDelta ?? Infinity; const ratio = core.status.maps[col.floorId].ratio; diff --git a/packages-user/legacy-plugin-data/src/removeMap.ts b/packages-user/legacy-plugin-data/src/removeMap.ts index d3fbf0a..e8e064c 100644 --- a/packages-user/legacy-plugin-data/src/removeMap.ts +++ b/packages-user/legacy-plugin-data/src/removeMap.ts @@ -40,7 +40,7 @@ export function removeMaps( deleted = true; } if (deleted && !main.replayChecking) { - Mota.Plugin.require('fly_r').splitArea(); + Mota.require('@motajs/legacy-ui').splitArea(); } } diff --git a/packages-user/legacy-plugin-data/src/replay.ts b/packages-user/legacy-plugin-data/src/replay.ts index b04dfcd..cd31720 100644 --- a/packages-user/legacy-plugin-data/src/replay.ts +++ b/packages-user/legacy-plugin-data/src/replay.ts @@ -1,9 +1,11 @@ -import { HeroSkill } from '@/game/mechanism/misc'; +import { HeroSkill } from '@user/data-state'; import { getSkillFromIndex, upgradeSkill } from '../../data-state/src/mechanism/skillTree'; import { canOpenShop } from './shop'; +import { hook } from '@user/data-base'; +import { jumpSkill } from './skill'; const replayableSettings = ['autoSkill']; @@ -27,7 +29,7 @@ export function initReplay() { function tipAndWait(content: string, time: number) { const speed = core.status.replay.speed; if (main.replayChecking || speed === 24) return Promise.resolve(); - const { tip } = Mota.Plugin.require('utils_r'); + const { tip } = Mota.require('@motajs/legacy-ui'); tip('info', '录像播放操作:' + content); return new Promise(res => { setTimeout(res, time / speed); @@ -78,7 +80,7 @@ export function initReplay() { let shopOpened = false; let openedShopId = ''; - Mota.require('var', 'hook').on('reset', () => { + hook.on('reset', () => { shopOpened = false; openedShopId = ''; }); @@ -162,7 +164,7 @@ export function initReplay() { !core.status.floorId.startsWith('tower') && HeroSkill.learnedSkill(HeroSkill.Jump) ) { - const success = Mota.Plugin.require('skill_g').jumpSkill(); + const success = jumpSkill(); core.status.route.push(`useSkill:${toEmit}`); if (!success) core.replay(); return true; diff --git a/packages-user/legacy-plugin-data/src/shop.ts b/packages-user/legacy-plugin-data/src/shop.ts index c268747..f82e00a 100644 --- a/packages-user/legacy-plugin-data/src/shop.ts +++ b/packages-user/legacy-plugin-data/src/shop.ts @@ -10,7 +10,7 @@ export function openShop(shopId: string, noRoute: boolean) { if (shop.item) { Mota.r(() => { if (!core.isReplaying()) { - Mota.require('var', 'mainUi').open('shop', { + Mota.require('@motajs/legacy-ui').mainUi.open('shop', { shopId: shopId }); } diff --git a/packages/legacy-common/src/resource.ts b/packages/legacy-common/src/resource.ts index fac3c4b..4381ee3 100644 --- a/packages/legacy-common/src/resource.ts +++ b/packages/legacy-common/src/resource.ts @@ -529,7 +529,7 @@ export function loadDefaultResource() { const res = LoadTask.add('byte', `byte/project/sounds/${v}`); Mota.r(() => { res.once('load', res => { - const { soundPlayer } = Mota.require('module', 'Audio'); + const { soundPlayer } = Mota.require('@user/client-modules'); soundPlayer.add(v, res.resource!); }); }); @@ -548,7 +548,7 @@ export function loadDefaultResource() { const res = LoadTask.add('image', `image/project/autotiles/${v}.png`); res.once('load', res => { autotiles[v as AllIdsOf<'autotile'>] = res.resource; - const loading = Mota.require('var', 'loading'); + const { loading } = Mota.require('@user/data-base'); loading.addAutotileLoaded(); loading.onAutotileLoaded(autotiles); core.material.images.autotile[v as AllIdsOf<'autotile'>] = @@ -675,7 +675,7 @@ export async function loadCompressedResource() { autotiles[ name.slice(0, -4) as AllIdsOf<'autotile'> ] = image; - const loading = Mota.require('var', 'loading'); + const { loading } = Mota.require('@user/data-base'); loading.addAutotileLoaded(); loading.onAutotileLoaded(autotiles); core.material.images.autotile[ @@ -717,8 +717,10 @@ export async function loadCompressedResource() { new FontFace(name.slice(0, -4), font) ); } else if (usage === 'sound') { - const { soundPlayer } = Mota.require('module', 'Audio'); - soundPlayer.add(v, value); + const { soundPlayer } = Mota.require( + '@user/client-modules' + ); + soundPlayer.add(name as SoundIds, value as Uint8Array); } else if (usage === 'animate') { const ani = value as string; core.material.animates[ diff --git a/packages/legacy-ui/src/components/minimap.vue b/packages/legacy-ui/src/components/minimap.vue index 509f57a..4c014ee 100644 --- a/packages/legacy-ui/src/components/minimap.vue +++ b/packages/legacy-ui/src/components/minimap.vue @@ -134,7 +134,7 @@ onMounted(() => { } drawer.drawMap(); - const hook = Mota.require('var', 'hook'); + const { hook } = Mota.require('@user/data-base'); hook.on('afterChangeFloor', onChange); hook.on('afterBattle', afterBattle); @@ -168,7 +168,7 @@ onMounted(() => { }); onUnmounted(() => { - const hook = Mota.require('var', 'hook'); + const { hook } = Mota.require('@user/data-base'); hook.off('afterChangeFloor', onChange); hook.off('afterBattle', afterBattle); }); diff --git a/packages/legacy-ui/src/fx/index.ts b/packages/legacy-ui/src/fx/index.ts new file mode 100644 index 0000000..5eea405 --- /dev/null +++ b/packages/legacy-ui/src/fx/index.ts @@ -0,0 +1,2 @@ +export * from './shadow'; +export * from './webgl'; diff --git a/packages/legacy-ui/src/fx/shadow.ts b/packages/legacy-ui/src/fx/shadow.ts index 0302c1a..6cdfb27 100644 --- a/packages/legacy-ui/src/fx/shadow.ts +++ b/packages/legacy-ui/src/fx/shadow.ts @@ -75,7 +75,7 @@ function addLightFromBlock( }); } -const hook = Mota.require('var', 'hook'); +const { hook } = Mota.require('@user/data-base'); hook.once('reset', () => { Shadow.init(); @@ -100,11 +100,9 @@ hook.once('reset', () => { }, { background: [0, 0, 0, 0.3] } ); - Mota.rewrite(core.control, 'loadData', 'add', () => { - if (!main.replayChecking) { - Shadow.update(true); - LayerShadowExtends.shadowList.forEach(v => v.update()); - } + hook.on('loadData', () => { + Shadow.update(true); + LayerShadowExtends.shadowList.forEach(v => v.update()); }); }); hook.on('reset', () => { diff --git a/packages/legacy-ui/src/index.ts b/packages/legacy-ui/src/index.ts index 6c7fcd5..bdafd6e 100644 --- a/packages/legacy-ui/src/index.ts +++ b/packages/legacy-ui/src/index.ts @@ -4,6 +4,7 @@ export * as UI from './ui'; export * as Components from './components'; export * from './preset'; export * from './tools'; +export * from './fx'; export * from './animateController'; export * from './controller'; diff --git a/packages/legacy-ui/src/mark.ts b/packages/legacy-ui/src/mark.ts index 65a1a34..e82c962 100644 --- a/packages/legacy-ui/src/mark.ts +++ b/packages/legacy-ui/src/mark.ts @@ -34,7 +34,7 @@ const marked: MarkInfo[] = []; */ export function markEnemy(id: EnemyIds) { if (hasMarkedEnemy(id)) return; - const DamageEnemy = Mota.require('class', 'DamageEnemy'); + const { DamageEnemy, getHeroStatusOn } = Mota.require('@user/data-state'); const enemy = new DamageEnemy(core.material.enemys[id]); enemy.calAttribute(); enemy.getRealInfo(); @@ -43,7 +43,7 @@ export function markEnemy(id: EnemyIds) { id, enemy, mode: 0b011111, - lastAtk: Mota.requireAll('fn').getHeroStatusOn('atk', 'empty'), + lastAtk: getHeroStatusOn('atk', 'empty'), lastDamage: enemy.calDamage().damage, status: 0b0, update: ref(true) @@ -65,7 +65,7 @@ export function unmarkEnemy(id: EnemyIds) { } export function checkMarkedEnemy() { - const { getHeroStatusOn } = Mota.requireAll('fn'); + const { getHeroStatusOn } = Mota.require('@user/data-state'); marked.forEach(v => { const { id, enemy, mode, lastAtk, lastDamage, markDamage } = v; const atk = getHeroStatusOn('atk', 'empty'); @@ -158,7 +158,7 @@ export function hasMarkedEnemy(id: EnemyIds) { return marked.some(v => v.id === id); } -const hook = Mota.require('var', 'hook'); +const { hook } = Mota.require('@user/data-base'); hook.on('statusBarUpdate', () => { checkMarkedEnemy(); }); diff --git a/packages/legacy-ui/src/preset/danmaku.ts b/packages/legacy-ui/src/preset/danmaku.ts index ddd1a7c..f28f1b4 100644 --- a/packages/legacy-ui/src/preset/danmaku.ts +++ b/packages/legacy-ui/src/preset/danmaku.ts @@ -21,12 +21,14 @@ if (import.meta.env.DEV) { Danmaku.backend = `/danmaku`; } -Mota.require('var', 'hook').once('reset', () => { +const { hook } = Mota.require('@user/data-base'); + +hook.once('reset', () => { Danmaku.fetch(); }); // 勇士移动后显示弹幕 -Mota.require('var', 'hook').on('moveOneStep', (x, y, floor) => { +hook.on('moveOneStep', (x, y, floor) => { const enabled = mainSetting.getValue('ui.danmaku', true); if (!enabled) return; const f = Danmaku.allInPos[floor]; diff --git a/packages/legacy-ui/src/preset/fixed.ts b/packages/legacy-ui/src/preset/fixed.ts index 9d869a5..0a7fb25 100644 --- a/packages/legacy-ui/src/preset/fixed.ts +++ b/packages/legacy-ui/src/preset/fixed.ts @@ -37,7 +37,8 @@ const closeFixed = () => { // todo: 应当在这里实现查看临界与特殊属性的功能 export let hovered: Block | null; -const { hook, gameListener } = Mota.requireAll('var'); +const { hook, gameListener } = Mota.require('@user/data-base'); + gameListener.on('hoverBlock', block => { closeFixed(); hovered = block; diff --git a/packages/legacy-ui/src/preset/hotkey.ts b/packages/legacy-ui/src/preset/hotkey.ts index 667179d..44b70fb 100644 --- a/packages/legacy-ui/src/preset/hotkey.ts +++ b/packages/legacy-ui/src/preset/hotkey.ts @@ -535,7 +535,7 @@ gameKey core.actions._clickGameInfo_openComments(); }) .realize('skill1', () => { - const HeroSkill = Mota.require('module', 'Mechanism').HeroSkill; + const HeroSkill = Mota.require('@user/data-state').HeroSkill; if (!HeroSkill.learnedSkill(HeroSkill.Blade)) return; if (HeroSkill.getAutoSkill()) { tip('error', '已开启自动切换技能!'); @@ -547,13 +547,13 @@ gameKey core.updateStatusBar(); }) .realize('skill2', () => { - const HeroSkill = Mota.require('module', 'Mechanism').HeroSkill; + const HeroSkill = Mota.require('@user/data-state').HeroSkill; if ( !flags.onChase && !core.status.floorId.startsWith('tower') && HeroSkill.learnedSkill(HeroSkill.Jump) ) { - Mota.Plugin.require('skill_g').jumpSkill(); + Mota.require('@user/legacy-plugin-data').jumpSkill(); core.status.route.push('useSkill:Jump'); } else { if (core.hasItem('pickaxe')) { @@ -562,7 +562,7 @@ gameKey } }) .realize('skill3', () => { - const HeroSkill = Mota.require('module', 'Mechanism').HeroSkill; + const HeroSkill = Mota.require('@user/data-state').HeroSkill; if (!HeroSkill.learnedSkill(HeroSkill.Shield)) return; if (HeroSkill.getAutoSkill()) { tip('error', '已开启自动切换技能!'); diff --git a/packages/legacy-ui/src/preset/ui.ts b/packages/legacy-ui/src/preset/ui.ts index 31edf04..aeea3d7 100644 --- a/packages/legacy-ui/src/preset/ui.ts +++ b/packages/legacy-ui/src/preset/ui.ts @@ -8,7 +8,6 @@ import { UI, UiController } from '@motajs/legacy-ui'; -import { bgmController, soundPlayer } from '@/module'; import settingsText from '../data/settings.json'; //#region legacy-ui @@ -47,7 +46,7 @@ fixedUi.register( ); fixedUi.showAll(); -const hook = Mota.require('var', 'hook'); +const { hook } = Mota.require('@user/data-base'); hook.once('mounted', () => { const ui = document.getElementById('ui-main')!; const fixed = document.getElementById('ui-fixed')!; @@ -143,7 +142,7 @@ function handleActionSetting( ) { if (key === 'autoSkill') { // 自动切换技能 - const HeroSkill = Mota.require('module', 'Mechanism').HeroSkill; + const HeroSkill = Mota.require('@user/data-state').HeroSkill; HeroSkill.setAutoSkill(n as boolean); core.status.route.push(`set:autoSkill:${n}`); } @@ -154,6 +153,7 @@ function handleAudioSetting( n: T, _o: T ) { + const { bgmController, soundPlayer } = Mota.require('@user/client-modules'); if (key === 'bgmEnabled') { bgmController.setEnabled(n as boolean); core.checkBgm(); @@ -261,7 +261,7 @@ mainSetting .register('tips', '小贴士', true, COM.Boolean) ); -const loading = Mota.require('var', 'loading'); +const { loading } = Mota.require('@user/data-base'); loading.once('coreInit', () => { mainSetting.reset({ 'screen.fullscreen': !!document.fullscreenElement, diff --git a/packages/legacy-ui/src/tools/equipbox.tsx b/packages/legacy-ui/src/tools/equipbox.tsx index af1e77e..7ea3cb1 100644 --- a/packages/legacy-ui/src/tools/equipbox.tsx +++ b/packages/legacy-ui/src/tools/equipbox.tsx @@ -61,7 +61,7 @@ export function getNowStatus(nowEquip?: Equip, onCol: boolean = false) { 'hpmax', 'money' ] as (keyof SelectType)[]; - const { getHeroStatusOn } = Mota.requireAll('fn'); + const { getHeroStatusOn } = Mota.require('@user/data-state'); return (
diff --git a/packages/legacy-ui/src/tools/fixed.ts b/packages/legacy-ui/src/tools/fixed.ts index 2094da5..2383108 100644 --- a/packages/legacy-ui/src/tools/fixed.ts +++ b/packages/legacy-ui/src/tools/fixed.ts @@ -31,7 +31,7 @@ export function getDetailedEnemy( const special: [string, string, string][] = [...enemy.info.special] .filter(v => !enemy.info.specialHalo?.includes(v)) .map(vv => { - const s = Mota.require('var', 'enemySpecials')[vv]; + const s = Mota.require('@user/data-state').specials[vv]; return [ fromFunc(s.name, enemy.info), fromFunc(s.desc, enemy.info), diff --git a/packages/legacy-ui/src/tools/fly.ts b/packages/legacy-ui/src/tools/fly.ts index 81bcd3d..3be5749 100644 --- a/packages/legacy-ui/src/tools/fly.ts +++ b/packages/legacy-ui/src/tools/fly.ts @@ -519,7 +519,7 @@ export class MinimapDrawer { ctx.textBaseline = 'middle'; ctx.font = `3px "normal"`; ctx.strokeStyle = 'black'; - Mota.require('fn', 'ensureFloorDamage')(floorId); + Mota.require('@user/data-state').ensureFloorDamage(floorId); ctx.fillStyle = 'rgba(0, 0, 0, 0.6)'; ctx.fillRect(x - 6, y - 2, 12, 4); ctx.fillStyle = 'white'; diff --git a/packages/legacy-ui/src/ui/achievement.vue b/packages/legacy-ui/src/ui/achievement.vue index 8543108..2fa4276 100644 --- a/packages/legacy-ui/src/ui/achievement.vue +++ b/packages/legacy-ui/src/ui/achievement.vue @@ -107,6 +107,7 @@ import { } from '../tools/achievement'; import Scroll from '../components/scroll.vue'; import { isMobile } from '../use'; +import { mainUi } from '../preset'; const props = defineProps<{ num: number; @@ -176,7 +177,7 @@ function getAllAchievements(type: AchievementType): ResolvedAchievement[] { } function exit() { - Mota.require('var', 'mainUi').close(props.num); + mainUi.close(props.num); } diff --git a/packages/legacy-ui/src/ui/fixed.vue b/packages/legacy-ui/src/ui/fixed.vue index 015a5d7..180d045 100644 --- a/packages/legacy-ui/src/ui/fixed.vue +++ b/packages/legacy-ui/src/ui/fixed.vue @@ -32,13 +32,13 @@ import { onMounted, onUpdated, Ref, ref, watch } from 'vue'; import Box from '../components/box.vue'; import { GameUi } from '../controller'; -import type { DamageEnemy, EnemyInfo } from '@/game/enemy/damage'; import { nextFrame } from '../utils'; +import { EnemyInfo, IDamageEnemy } from '@motajs/types'; const props = defineProps<{ num: number; ui: GameUi; - enemy: DamageEnemy; + enemy: IDamageEnemy; close: Ref; loc: [x: number, y: number]; }>(); @@ -83,7 +83,7 @@ const special = (() => { }; const show = s.slice(0, 2).map(v => { - const s = Mota.require('var', 'enemySpecials')[v]; + const s = Mota.require('@user/data-state').specials[v]; return [fromFunc(s.name, enemy.info), s.color]; }); if (s.length > 2) show.push(['...', 'white']); diff --git a/packages/legacy-ui/src/ui/load.vue b/packages/legacy-ui/src/ui/load.vue index 1180075..dc3f860 100644 --- a/packages/legacy-ui/src/ui/load.vue +++ b/packages/legacy-ui/src/ui/load.vue @@ -74,7 +74,7 @@ onMounted(async () => { core._afterLoadResources(props.callback); logger.log(`Resource load end.`); loadDiv.style.opacity = '0'; - Mota.require('var', 'loading').emit('loaded'); + Mota.require('@user/data-base').loading.emit('loaded'); await sleep(1000); fixedUi.close(props.num); fixedUi.open('start'); diff --git a/packages/legacy-ui/src/ui/skillTree.vue b/packages/legacy-ui/src/ui/skillTree.vue index fc345b9..bbc90db 100644 --- a/packages/legacy-ui/src/ui/skillTree.vue +++ b/packages/legacy-ui/src/ui/skillTree.vue @@ -87,32 +87,31 @@ import { sleep } from 'mutate-animate'; import { gameKey } from '@motajs/system-action'; import { GameUi } from '../controller'; import { mainUi } from '../preset/ui'; -import type { Chapter } from '@/plugin/game/skillTree'; const props = defineProps<{ num: number; ui: GameUi; }>(); -const skillTree = Mota.Plugin.require('skillTree_g'); +const skillTree = Mota.require('@user/legacy-plugin-data'); let canvas: HTMLCanvasElement; let ctx: CanvasRenderingContext2D; -const selected = ref(0); -const chapter = ref('chapter1'); -const update = ref(false); - const chapterDict = { chapter1: '第一章', chapter2: '第二章' }; +const selected = ref(0); +const chapter = ref('chapter1'); +const update = ref(false); + flags.skillTree ??= 0; -const s = Mota.Plugin.require('skillTree_g').skills; +const s = skillTree.skills; -const chapterList = Object.keys(s) as Chapter[]; +const chapterList = Object.keys(s) as (keyof typeof chapterDict)[]; selected.value = s[chapterList[flags.skillTree]][0].index; chapter.value = chapterList[flags.skillTree]; diff --git a/packages/legacy-ui/src/ui/start.vue b/packages/legacy-ui/src/ui/start.vue index 247f0de..66a5355 100644 --- a/packages/legacy-ui/src/ui/start.vue +++ b/packages/legacy-ui/src/ui/start.vue @@ -72,8 +72,6 @@ import { gameKey } from '@motajs/system-action'; import { mainUi } from '../preset/ui'; import { mainSetting } from '../preset/ui'; import { mat4 } from 'gl-matrix'; -// todo: 改了 -import { bgmController } from '@/module'; const props = defineProps<{ num: number; @@ -90,7 +88,7 @@ let background: HTMLImageElement; let buttons: HTMLSpanElement[] = []; -let played: boolean; +let played: boolean = false; const soundChecked = ref(false); const fullscreen = ref(!!document.fullscreenElement); @@ -327,6 +325,7 @@ onMounted(async () => { resize(); soundChecked.value = mainSetting.getValue('audio.bgmEnabled', true); + const { bgmController } = Mota.require('@user/client-modules'); bgmController.play('title.opus'); start.style.opacity = '1'; @@ -425,8 +424,7 @@ onUnmounted(() => { ); background-clip: text; -webkit-background-clip: text; - text-shadow: - 1px 1px 4px rgba(0, 0, 0, 0.5), + text-shadow: 1px 1px 4px rgba(0, 0, 0, 0.5), -1px -1px 3px rgba(255, 255, 255, 0.3), 5px 5px 5px rgba(0, 0, 0, 0.4); filter: brightness(1.8); @@ -449,17 +447,14 @@ onUnmounted(() => { position: absolute; opacity: 0; animation: cursor 2.5s linear 0s infinite normal running; - transition: - left 0.4s ease-out, - top 0.4s ease-out, + transition: left 0.4s ease-out, top 0.4s ease-out, opacity 1.5s ease-out; } .start-button { position: relative; font: bold 1.5em 'normal'; - text-shadow: - 1px 1px 2px rgba(0, 0, 0, 0.4), + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.4), 0px 0px 1px rgba(255, 255, 255, 0.3); background-clip: text; -webkit-background-clip: text; diff --git a/packages/legacy-ui/src/utils.ts b/packages/legacy-ui/src/utils.ts index 3044e5f..2aa9017 100644 --- a/packages/legacy-ui/src/utils.ts +++ b/packages/legacy-ui/src/utils.ts @@ -359,8 +359,7 @@ export function spliceBy(arr: T[], from: T): T[] { } export async function triggerFullscreen(full: boolean) { - if (!Mota.Plugin.inited) return; - const { maxGameScale } = Mota.Plugin.require('utils_g'); + const { maxGameScale } = Mota.require('@user/data-utils'); if (!!document.fullscreenElement && !full) { if (window.jsinterface) { window.jsinterface.requestPortrait(); @@ -472,10 +471,10 @@ export function formatSize(size: number) { return size < 1 << 10 ? `${size.toFixed(2)}B` : size < 1 << 20 - ? `${(size / (1 << 10)).toFixed(2)}KB` - : size < 1 << 30 - ? `${(size / (1 << 20)).toFixed(2)}MB` - : `${(size / (1 << 30)).toFixed(2)}GB`; + ? `${(size / (1 << 10)).toFixed(2)}KB` + : size < 1 << 30 + ? `${(size / (1 << 20)).toFixed(2)}MB` + : `${(size / (1 << 30)).toFixed(2)}GB`; } let num = 0; diff --git a/packages/render-elements/src/cache.ts b/packages/render-elements/src/cache.ts index 13e61cf..def0c5b 100644 --- a/packages/render-elements/src/cache.ts +++ b/packages/render-elements/src/cache.ts @@ -14,7 +14,8 @@ const i = (img: ImageMapKeys) => { const imageMap: Partial = {}; -Mota.require('var', 'loading').once('loaded', () => { +const { loading } = Mota.require('@user/data-base'); +loading.once('loaded', () => { [ 'enemys', 'enemy48', @@ -91,7 +92,7 @@ class TextureCache { constructor() { this.material = imageMap as Record; - Mota.require('var', 'loading').once('loaded', () => { + loading.once('loaded', () => { const map = maps_90f36752_8815_4be8_b32b_d7fad1d0542e; // @ts-expect-error 无法推导 this.idNumberMap = {}; diff --git a/packages/render-elements/src/floor.ts b/packages/render-elements/src/floor.ts index 8339919..fe99080 100644 --- a/packages/render-elements/src/floor.ts +++ b/packages/render-elements/src/floor.ts @@ -11,7 +11,7 @@ import { texture } from './cache'; import { sleep } from 'mutate-animate'; import { RenderAdapter } from '@motajs/render-core'; -const hook = Mota.require('var', 'hook'); +const { hook } = Mota.require('@user/data-base'); hook.on('setBlock', (x, y, floor, block) => { const isNow = floor === core.status.floorId; diff --git a/packages/render-elements/src/frame.ts b/packages/render-elements/src/frame.ts index fefd3be..1d2f292 100644 --- a/packages/render-elements/src/frame.ts +++ b/packages/render-elements/src/frame.ts @@ -39,7 +39,7 @@ class RenderEmits extends EventEmitter { export const renderEmits = new RenderEmits(); -Mota.require('var', 'hook').once('reset', () => { +Mota.require('@user/data-base').hook.once('reset', () => { let lastTime = 0; RenderItem.ticker.add(time => { if (!core.isPlaying()) return; diff --git a/packages/render-elements/src/index.ts b/packages/render-elements/src/index.ts index 89a9a48..a9a9930 100644 --- a/packages/render-elements/src/index.ts +++ b/packages/render-elements/src/index.ts @@ -2,7 +2,6 @@ export * from './animate'; export * from './block'; export * from './cache'; export * from './camera'; -export * from './damage'; export * from './floor'; export * from './frame'; export * from './graphics'; diff --git a/packages/render-elements/src/misc.ts b/packages/render-elements/src/misc.ts index 86cc39e..8d19f74 100644 --- a/packages/render-elements/src/misc.ts +++ b/packages/render-elements/src/misc.ts @@ -292,7 +292,7 @@ export class Icon extends RenderItem implements IAnimateFrame { } const num = typeof id === 'number' ? id : texture.idNumberMap[id]; - const loading = Mota.require('var', 'loading'); + const { loading } = Mota.require('@user/data-base'); if (loading.loaded) { this.setIconRenderable(num); } else { @@ -500,7 +500,7 @@ export class Winskin extends RenderItem { * @param name 图片名称 */ setImageByName(name: ImageIds) { - const loading = Mota.require('var', 'loading'); + const { loading } = Mota.require('@user/data-base'); if (loading.loaded) { const image = core.material.images.images[name]; this.setImage(image); diff --git a/packages/render-elements/src/viewport.ts b/packages/render-elements/src/viewport.ts index a5828cd..3623315 100644 --- a/packages/render-elements/src/viewport.ts +++ b/packages/render-elements/src/viewport.ts @@ -346,7 +346,7 @@ adapter.receiveSync('endMove', item => { item.endMove(); }); -const hook = Mota.require('var', 'hook'); +const { hook } = Mota.require('@user/data-base'); hook.on('changingFloor', (_, loc) => { adapter.all('setPosition', loc.x, loc.y); }); diff --git a/packages/render-vue/src/elements.tsx b/packages/render-vue/src/elements.tsx index 5c61d36..5b0563a 100644 --- a/packages/render-vue/src/elements.tsx +++ b/packages/render-vue/src/elements.tsx @@ -47,7 +47,6 @@ import { ELayerEvent, ELayerGroupEvent, EAnimateEvent, - EDamageEvent, EGraphicItemEvent } from '@motajs/render-elements'; @@ -100,7 +99,7 @@ declare module 'vue/jsx-runtime' { custom: TagDefine; layer: TagDefine; 'layer-group': TagDefine; - damage: TagDefine; + damage: TagDefine; animation: TagDefine; 'g-rect': TagDefine; 'g-circle': TagDefine; diff --git a/packages/render-vue/src/map.ts b/packages/render-vue/src/map.ts index f3775b5..a1f8e6d 100644 --- a/packages/render-vue/src/map.ts +++ b/packages/render-vue/src/map.ts @@ -17,8 +17,6 @@ import { Text, Winskin, Animate, - Damage, - EDamageEvent, Layer, LayerGroup, BezierCurve, @@ -236,9 +234,6 @@ tagMap.register('layer-group', (_0, _1, props) => { return l; } }); -tagMap.register('damage', (_0, _1, _props) => { - return new Damage(); -}); tagMap.register('animation', (_0, _1, _props) => { return new Animate(); }); diff --git a/packages/types/src/enemy.ts b/packages/types/src/enemy.ts index dec14d0..0696ad6 100644 --- a/packages/types/src/enemy.ts +++ b/packages/types/src/enemy.ts @@ -1,3 +1,5 @@ +import EventEmitter from 'eventemitter3'; + export interface EnemyInfo extends Partial> { atk: number; def: number; @@ -133,7 +135,12 @@ export interface IDamageEnemy { getSeckillAtk(): number; } -export interface IEnemyCollection { +export interface IEnemyCollectionEvent { + calculated: []; + extract: []; +} + +export interface IEnemyCollection extends EventEmitter { /** 这个怪物集的地图 id */ readonly floorId: FloorIds; /** 地图宽度 */ diff --git a/public/project/functions.js b/public/project/functions.js index ca4d56a..4804e4e 100644 --- a/public/project/functions.js +++ b/public/project/functions.js @@ -1,4 +1,4 @@ -/// +/// var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = { events: { @@ -395,6 +395,8 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = { } }); }); + + Mota.require('@user/data-base').hook.emit('loadData'); }, updateStatusBar: function () { // 检查等级 diff --git a/src/App.vue b/src/App.vue index 7fa9a0c..84827e8 100644 --- a/src/App.vue +++ b/src/App.vue @@ -29,7 +29,7 @@ import { onMounted } from 'vue'; import { mainUi, fixedUi } from '@motajs/legacy-ui'; onMounted(() => { - const { hook } = Mota.requireAll('var'); + const { hook } = Mota.require('@user/data-base'); hook.emit('mounted'); }); diff --git a/tsconfig.json b/tsconfig.json index 9717b7d..e9c4a30 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -17,7 +17,6 @@ "noEmit": true, "baseUrl": ".", "paths": { - "@/*": ["src/*"], "@motajs/*": ["packages/*/src"], "@user/*": ["packages-user/*/src"] } diff --git a/vite.config.ts b/vite.config.ts index fea3960..c55a295 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -51,15 +51,7 @@ export default defineConfig({ base: `./`, resolve: { alias: [ - ...aliases, - { - find: '@', - replacement: resolve(__dirname, './src') - }, - { - find: '@ui', - replacement: resolve(__dirname, './src/ui') - } + ...aliases ] }, build: {