fix: 迁移过程中产生的所有报错

This commit is contained in:
unanmed 2025-03-09 17:38:29 +08:00
parent 0679bbb1a5
commit 4fda246a9a
72 changed files with 225 additions and 189 deletions

View File

@ -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:*"
}
} }

View File

@ -0,0 +1 @@
export * from './move';

View File

@ -258,7 +258,7 @@ export class BgmController<
export const bgmController = new BgmController<BgmIds>(audioPlayer); export const bgmController = new BgmController<BgmIds>(audioPlayer);
export function loadAllBgm() { export function loadAllBgm() {
const loading = Mota.require('var', 'loading'); const { loading } = Mota.require('@user/data-base');
loading.once('coreInit', () => { loading.once('coreInit', () => {
const data = data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d; const data = data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d;
for (const bgm of data.main.bgms) { for (const bgm of data.main.bgms) {

View File

@ -7,8 +7,4 @@ export function patchAll() {
patchAudio(); patchAudio();
patchWeather(); patchWeather();
patchUI(); patchUI();
const loading = Mota.require('var', 'loading');
loading.once('coreInit', () => {
Patch.patchAll();
});
} }

View File

@ -2,6 +2,7 @@ import { patchAll } from './fallback';
patchAll(); patchAll();
export * from './action';
export * from './weather'; export * from './weather';
export * from './audio'; export * from './audio';
export * from './loader'; export * from './loader';

View File

@ -8,17 +8,21 @@ import {
import { logger } from '@motajs/common'; import { logger } from '@motajs/common';
import EventEmitter from 'eventemitter3'; import EventEmitter from 'eventemitter3';
import { isNil } from 'lodash-es'; import { isNil } from 'lodash-es';
import { LayerGroupFloorBinder } from './floor';
import { import {
BlockCacher,
CanvasCacheItem,
ICanvasCacheItem,
calNeedRenderOf, calNeedRenderOf,
ILayerGroupRenderExtends, ILayerGroupRenderExtends,
Layer, Layer,
LayerGroup LayerGroup,
} from './layer'; LayerGroupFloorBinder,
import { BlockCacher, CanvasCacheItem, ICanvasCacheItem } from './block'; tagMap
} from '@motajs/render';
import { IDamageEnemy, IEnemyCollection, MapDamage } from '@motajs/types'; 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<EDamageEvent> {
const y = enemy.y!; const y = enemy.y!;
const { damage } = enemy.calDamage(); const { damage } = enemy.calDamage();
const cri = enemy.calCritical(1)[0]?.atkDelta ?? Infinity; const cri = enemy.calCritical(1)[0]?.atkDelta ?? Infinity;
const real = enemy.getRealInfo(); const real = enemy.getRealInfo() as UserEnemyInfo;
const dam1: DamageRenderable = { const dam1: DamageRenderable = {
align: 'left', align: 'left',
@ -587,4 +591,9 @@ export class Damage extends RenderItem<EDamageEvent> {
} }
} }
// 注册为内部元素
tagMap.register<EDamageEvent, Damage>('damage', (_0, _1, _props) => {
return new Damage();
});
// const adapter = new RenderAdapter<Damage>('damage'); // const adapter = new RenderAdapter<Damage>('damage');

View File

@ -3,7 +3,7 @@ import { defineComponent } from 'vue';
import { UIController } from '@motajs/system-ui'; import { UIController } from '@motajs/system-ui';
import { mainSceneUI } from './ui/main'; import { mainSceneUI } from './ui/main';
import { MAIN_HEIGHT, MAIN_WIDTH } from './shared'; import { MAIN_HEIGHT, MAIN_WIDTH } from './shared';
import { TextboxStore } from './components'; import { hook } from '@user/data-base';
export function create() { export function create() {
const main = new MotaRenderer(); const main = new MotaRenderer();
@ -23,21 +23,17 @@ export function create() {
main.hide(); main.hide();
createApp(App).mount(main); createApp(App).mount(main);
Mota.require('var', 'hook').on('reset', () => { hook.on('reset', () => {
main.show(); main.show();
}); });
Mota.require('var', 'hook').on('restart', () => { hook.on('restart', () => {
main.hide(); main.hide();
}); });
console.log(main); console.log(main);
} }
Mota.register('module', 'MainUI', {
TextboxStore
});
export * from './components'; export * from './components';
export * from './ui'; export * from './ui';
export * from './use'; export * from './use';

View File

@ -1,13 +1,13 @@
import { logger } from '@motajs/common'; import { logger } from '@motajs/common';
import { mainSetting } from '@motajs/legacy-ui'; import { mainSetting } from '@motajs/legacy-ui';
import { import {
Damage,
DamageRenderable,
FloorDamageExtends,
LayerGroupFloorBinder, LayerGroupFloorBinder,
ILayerGroupRenderExtends, ILayerGroupRenderExtends,
LayerGroup LayerGroup
} from '@motajs/render'; } from '@motajs/render';
import { hook } from '@user/data-base';
import { ItemState } from '@user/data-state';
import { Damage, DamageRenderable, FloorDamageExtends } from './damage';
interface ItemDetailData { interface ItemDetailData {
x: number; x: number;
@ -21,8 +21,7 @@ interface ItemData {
y: number; y: number;
} }
const ItemState = Mota.require('module', 'State').ItemState; hook.on('setBlock', (x, y, floorId, block) => {
Mota.require('var', 'hook').on('setBlock', (x, y, floorId, block) => {
FloorItemDetail.listened.forEach(v => { FloorItemDetail.listened.forEach(v => {
v.setBlock(block, x, y); v.setBlock(block, x, y);
}); });
@ -199,8 +198,7 @@ export class FloorItemDetail implements ILayerGroupRenderExtends {
return; return;
} }
// @ts-ignore ItemState.item(id)?.itemEffectFn?.();
ItemState.item(id)?.itemEffectFn();
detail?.set(index, { x, y, diff }); detail?.set(index, { x, y, diff });
}); });
}); });

View File

@ -1,22 +1,23 @@
import { import {
Container, Container,
FloorDamageExtends,
LayerGroupFloorBinder, LayerGroupFloorBinder,
FloorLayer, FloorLayer,
LayerGroup, LayerGroup,
FloorViewport, FloorViewport,
MotaRenderer MotaRenderer
} from '@motajs/render'; } 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 loopLayer: LayerGroup;
let show: boolean = false; let show: boolean = false;
/** 循环式地图中更新视角的委托ticker */ /** 循环式地图中更新视角的委托ticker */
let delegation: number = -1; let delegation: number = -1;
const hook = Mota.require('var', 'hook');
hook.on('changingFloor', (floorId, heroLoc) => { hook.on('changingFloor', (floorId, heroLoc) => {
enableLoopMapElement(floorId); enableLoopMapElement(floorId);
}); });

View File

@ -1,7 +1,6 @@
import { LayerShadowExtends } from '@/core/fx/shadow'; import { LayerShadowExtends } from '@motajs/legacy-ui';
import { import {
ILayerGroupRenderExtends, ILayerGroupRenderExtends,
FloorDamageExtends,
LayerGroupAnimate, LayerGroupAnimate,
FloorViewport, FloorViewport,
ILayerRenderExtends, ILayerRenderExtends,
@ -11,13 +10,14 @@ import {
LayerGroup, LayerGroup,
Font Font
} from '@motajs/render'; } from '@motajs/render';
import { WeatherController } from '@/module/weather'; import { WeatherController } from '../../weather';
import { FloorChange } from '@/plugin/fallback'; import {
import { LayerGroupFilter } from '@/plugin/fx/gameCanvas'; FloorChange,
import { LayerGroupHalo } from '@/plugin/fx/halo'; LayerGroupFilter,
import { FloorItemDetail } from '@/plugin/fx/itemDetail'; LayerGroupHalo,
import { PopText } from '@/plugin/fx/pop'; LayerGroupPortal,
import { LayerGroupPortal } from '@/plugin/fx/portal'; PopText
} from '@user/legacy-plugin-client';
import { defineComponent, onMounted, reactive, ref } from 'vue'; import { defineComponent, onMounted, reactive, ref } from 'vue';
import { Textbox, Tip } from '../components'; import { Textbox, Tip } from '../components';
import { GameUI, UIController } from '@motajs/system-ui'; import { GameUI, UIController } from '@motajs/system-ui';
@ -35,6 +35,11 @@ import {
} from './statusBar'; } from './statusBar';
import { onLoaded } from '../use'; import { onLoaded } from '../use';
import { ReplayingStatus } from './toolbar'; 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 MainScene = defineComponent(() => {
const layerGroupExtends: ILayerGroupRenderExtends[] = [ const layerGroupExtends: ILayerGroupRenderExtends[] = [
@ -112,8 +117,6 @@ const MainScene = defineComponent(() => {
night: 0 night: 0
}); });
const { getHeroStatusOn } = Mota.requireAll('fn');
const updateStatus = () => { const updateStatus = () => {
if (!core.status || !core.status.hero || !core.status.floorId) return; if (!core.status || !core.status.hero || !core.status.floorId) return;
hideStatus.value = core.getFlag('hideStatusBar', false); hideStatus.value = core.getFlag('hideStatusBar', false);
@ -135,7 +138,6 @@ const MainScene = defineComponent(() => {
leftStatus.exAtk = getHeroStatusOn('mana'); leftStatus.exAtk = getHeroStatusOn('mana');
leftStatus.magicDef = getHeroStatusOn('magicDef'); leftStatus.magicDef = getHeroStatusOn('magicDef');
const { HeroSkill, NightSpecial } = Mota.require('module', 'Mechanism');
rightStatus.autoSkill = HeroSkill.getAutoSkill(); rightStatus.autoSkill = HeroSkill.getAutoSkill();
rightStatus.skillName = HeroSkill.getSkillName(); rightStatus.skillName = HeroSkill.getSkillName();
rightStatus.skillDesc = HeroSkill.getSkillDesc(); rightStatus.skillDesc = HeroSkill.getSkillDesc();
@ -148,7 +150,7 @@ const MainScene = defineComponent(() => {
replayStatus.played = totalList.length - toReplay.length; replayStatus.played = totalList.length - toReplay.length;
replayStatus.total = totalList.length; replayStatus.total = totalList.length;
if (HeroSkill.learnedSkill(HeroSkill.Jump)) { if (HeroSkill.learnedSkill(HeroSkill.Jump)) {
if (Mota.Plugin.require('skill_g').jumpIgnoreFloor.has(floor)) { if (jumpIgnoreFloor.has(floor)) {
rightStatus.jumpCount = -2; rightStatus.jumpCount = -2;
} else { } else {
rightStatus.jumpCount = 3 - (flags[`jump_${floor}`] ?? 0); rightStatus.jumpCount = 3 - (flags[`jump_${floor}`] ?? 0);
@ -168,7 +170,7 @@ const MainScene = defineComponent(() => {
loaded.value = true; loaded.value = true;
}); });
Mota.require('var', 'hook').on('statusBarUpdate', updateStatus); hook.on('statusBarUpdate', updateStatus);
return () => ( return () => (
<container id="main-scene" width={MAIN_WIDTH} height={MAIN_HEIGHT}> <container id="main-scene" width={MAIN_WIDTH} height={MAIN_HEIGHT}>

View File

@ -14,7 +14,7 @@ import { mainUi } from '@motajs/legacy-ui';
import { gameKey } from '@motajs/system-action'; import { gameKey } from '@motajs/system-action';
import { generateKeyboardEvent } from '@motajs/system-action'; import { generateKeyboardEvent } from '@motajs/system-action';
import { getVitualKeyOnce } from '@motajs/legacy-ui'; import { getVitualKeyOnce } from '@motajs/legacy-ui';
import { getAllSavesData, getSaveData } from '@/module/utils'; import { getAllSavesData, getSaveData } from '../../utils';
export interface SettingsProps extends Partial<ChoicesProps>, UIComponentProps { export interface SettingsProps extends Partial<ChoicesProps>, UIComponentProps {
loc: ElementLocator; loc: ElementLocator;
@ -410,7 +410,9 @@ export const DownloadSaveSelect = defineComponent<SettingsProps>(props => {
{ text: '请等待处理完毕' } { text: '请等待处理完毕' }
); );
core.download( core.download(
`${core.firstData.name}_${core.formatDate2(new Date())}.h5save`, `${core.firstData.name}_${core.formatDate2(
new Date()
)}.h5save`,
data data
); );
} }
@ -426,7 +428,9 @@ export const DownloadSaveSelect = defineComponent<SettingsProps>(props => {
if (confirm) { if (confirm) {
const data = await getSaveData(core.saves.saveIndex); const data = await getSaveData(core.saves.saveIndex);
core.download( core.download(
`${core.firstData.name}_${core.formatDate2(new Date())}.h5save`, `${core.firstData.name}_${core.formatDate2(
new Date()
)}.h5save`,
data data
); );
} }

View File

@ -18,6 +18,7 @@ import {
ReplayingStatus, ReplayingStatus,
ReplayingToolbar ReplayingToolbar
} from './toolbar'; } from './toolbar';
import { HeroSkill } from '@user/data-state';
export interface ILeftHeroStatus { export interface ILeftHeroStatus {
hp: number; hp: number;
@ -275,7 +276,6 @@ export const RightStatusBar = defineComponent<StatusBarProps<IRightHeroStatus>>(
}; };
const changeAutoSkill = () => { const changeAutoSkill = () => {
const { HeroSkill } = Mota.require('module', 'Mechanism');
const auto = !s.autoSkill; const auto = !s.autoSkill;
HeroSkill.setAutoSkill(auto); HeroSkill.setAutoSkill(auto);
core.status.route.push(`set:autoSkill:${auto}`); core.status.route.push(`set:autoSkill:${auto}`);

View File

@ -1,3 +1,4 @@
import { loading } from '@user/data-base';
import { TimingFn, Transition } from 'mutate-animate'; import { TimingFn, Transition } from 'mutate-animate';
import { import {
ComponentInternalInstance, ComponentInternalInstance,
@ -59,7 +60,6 @@ export function onOrientationChange(hook: OrientationHook) {
* @param hook * @param hook
*/ */
export function onLoaded(hook: () => void) { export function onLoaded(hook: () => void) {
const loading = Mota.require('var', 'loading');
if (!loading.loaded) { if (!loading.loaded) {
loading.once('loaded', hook); loading.once('loaded', hook);
} else { } else {

View File

@ -10,6 +10,7 @@ import {
MotaOffscreenCanvas2D MotaOffscreenCanvas2D
} from '@motajs/render'; } from '@motajs/render';
import { IWeather } from './weather'; import { IWeather } from './weather';
import { loading } from '@user/data-base';
const snowVs = /* glsl */ ` const snowVs = /* glsl */ `
in vec2 a_snowVertex; in vec2 a_snowVertex;
@ -105,7 +106,7 @@ void main() {
/** 雨滴顶点坐标 */ /** 雨滴顶点坐标 */
const vertex = new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]); 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 shader = new SnowShader();
const gl = shader.gl; const gl = shader.gl;
shader.size(480, 480); shader.size(480, 480);

View File

@ -107,6 +107,8 @@ export interface GameEvent {
]; ];
/** Emitted in lib/control.js */ /** Emitted in lib/control.js */
replayStatus: [replaying: boolean]; replayStatus: [replaying: boolean];
/** Emitted in project/functions.js */
loadData: [];
} }
export const hook = new EventEmitter<GameEvent>(); export const hook = new EventEmitter<GameEvent>();

View File

@ -13,7 +13,8 @@ import {
HaloFn, HaloFn,
IEnemyCollection, IEnemyCollection,
IDamageEnemy, IDamageEnemy,
HaloType HaloType,
IEnemyCollectionEvent
} from '@motajs/types'; } from '@motajs/types';
// todo: 光环划分优先级,从而可以实现光环的多级运算 // todo: 光环划分优先级,从而可以实现光环的多级运算
@ -52,13 +53,8 @@ specialValue
.set(31, ['hpHalo']) .set(31, ['hpHalo'])
.set(32, ['assimilateRange']); .set(32, ['assimilateRange']);
interface EnemyCollectionEvent {
extract: [];
calculated: [];
}
export class EnemyCollection export class EnemyCollection
extends EventEmitter<EnemyCollectionEvent> extends EventEmitter<IEnemyCollectionEvent>
implements IEnemyCollection implements IEnemyCollection
{ {
floorId: FloorIds; floorId: FloorIds;

View File

@ -233,7 +233,7 @@ export function getSkillConsume(skill: number) {
export function openTree() { export function openTree() {
if (main.replayChecking) return; if (main.replayChecking) return;
Mota.require('var', 'mainUi').open('skillTree'); Mota.require('@motajs/legacy-ui').mainUi.open('skillTree');
} }
/** /**

View File

@ -59,7 +59,7 @@ function getRealStatus(
name: keyof HeroStatus | 'all' | (keyof HeroStatus)[], name: keyof HeroStatus | 'all' | (keyof HeroStatus)[],
floorId: FloorIds = core.status.floorId floorId: FloorIds = core.status.floorId
): any { ): any {
const { getSkillLevel } = Mota.Plugin.require('skillTree_g'); const { getSkillLevel } = Mota.require('@user/legacy-plugin-data');
if (name instanceof Array) { if (name instanceof Array) {
const res: any = {}; const res: any = {};
name.forEach(v => { name.forEach(v => {

View File

@ -11,7 +11,7 @@ import type {
LayerMovingRenderable, LayerMovingRenderable,
LayerFloorBinder LayerFloorBinder
} from '@motajs/render'; } from '@motajs/render';
import type { HeroKeyMover } from '@/module/action/move'; import type { HeroKeyMover } from '@user/client-modules';
import { BluePalace, MiscData } from '../mechanism/misc'; import { BluePalace, MiscData } from '../mechanism/misc';
import { sleep } from '@motajs/common'; import { sleep } from '@motajs/common';
@ -939,7 +939,7 @@ export const heroMoveCollection: HeroMoveCollection = {
loading.once('coreInit', () => { loading.once('coreInit', () => {
// 注册按键操作 // 注册按键操作
Mota.r(() => { Mota.r(() => {
const { HeroKeyMover } = Mota.require('@motajs/system-action'); const { HeroKeyMover } = Mota.require('@user/client-modules');
const { gameKey } = Mota.require('@motajs/system-action'); const { gameKey } = Mota.require('@motajs/system-action');
const keyMover = new HeroKeyMover(gameKey, heroMover); const keyMover = new HeroKeyMover(gameKey, heroMover);
heroMoveCollection.keyMover = keyMover; heroMoveCollection.keyMover = keyMover;

View File

@ -16,6 +16,8 @@ import * as SystemAction from '@motajs/system-action';
import * as SystemUI from '@motajs/system-ui'; import * as SystemUI from '@motajs/system-ui';
import * as ClientModules from '@user/client-modules'; import * as ClientModules from '@user/client-modules';
import * as LegacyPluginClient from '@user/legacy-plugin-client'; import * as LegacyPluginClient from '@user/legacy-plugin-client';
import * as MutateAnimate from 'mutate-animate';
import * as Vue from 'vue';
export function create() { export function create() {
Mota.register('@motajs/client', Client); Mota.register('@motajs/client', Client);
@ -35,4 +37,6 @@ export function create() {
Mota.register('@motajs/system-ui', SystemUI); Mota.register('@motajs/system-ui', SystemUI);
Mota.register('@user/client-modules', ClientModules); Mota.register('@user/client-modules', ClientModules);
Mota.register('@user/legacy-plugin-client', LegacyPluginClient); Mota.register('@user/legacy-plugin-client', LegacyPluginClient);
Mota.register('MutateAnimate', MutateAnimate);
Mota.register('Vue', Vue);
} }

View File

@ -1,9 +1,15 @@
import { patchAll } from '@user/data-fallback'; import { patchAll } from '@user/data-fallback';
import { createMota } from './mota'; import { createMota } from './mota';
import { create } from './create'; import { create } from './create';
import { loading } from '@user/data-base';
import { Patch } from '@motajs/legacy-common';
createMota(); createMota();
patchAll(); patchAll();
create(); create();
loading.once('coreInit', () => {
Patch.patchAll();
});
export * from './mota'; export * from './mota';

View File

@ -20,6 +20,9 @@ import type * as DataState from '@user/data-state';
import type * as DataUtils from '@user/data-utils'; import type * as DataUtils from '@user/data-utils';
import type * as LegacyPluginClient from '@user/legacy-plugin-client'; import type * as LegacyPluginClient from '@user/legacy-plugin-client';
import type * as LegacyPluginData from '@user/legacy-plugin-data'; import type * as LegacyPluginData from '@user/legacy-plugin-data';
// ---------- 必要的第三方库
import type * as MutateAnimate from 'mutate-animate';
import type * as Vue from 'vue';
interface ModuleInterface { interface ModuleInterface {
'@motajs/client': typeof Client; '@motajs/client': typeof Client;
@ -44,6 +47,9 @@ interface ModuleInterface {
'@user/data-utils': typeof DataUtils; '@user/data-utils': typeof DataUtils;
'@user/legacy-plugin-client': typeof LegacyPluginClient; '@user/legacy-plugin-client': typeof LegacyPluginClient;
'@user/legacy-plugin-data': typeof LegacyPluginData; '@user/legacy-plugin-data': typeof LegacyPluginData;
// ---------- 必要的第三方库
MutateAnimate: typeof MutateAnimate;
Vue: typeof Vue;
} }
export interface IMota { export interface IMota {

View File

@ -1,6 +1,7 @@
{ {
"name": "@user/legacy-plugin-client", "name": "@user/legacy-plugin-client",
"dependencies": { "dependencies": {
"@user/client-modules": "workspace:*",
"@user/data-state": "workspace:*" "@user/data-state": "workspace:*"
} }
} }

View File

@ -1,3 +1,4 @@
import { hook } from '@user/data-base';
import { BarrageBoss } from './barrage'; import { BarrageBoss } from './barrage';
import { TowerBoss } from './towerBoss'; import { TowerBoss } from './towerBoss';
@ -15,7 +16,7 @@ export function getBoss<T extends BarrageBoss>(): T | null {
return boss as T; return boss as T;
} }
Mota.require('var', 'hook').on('reset', () => { hook.on('reset', () => {
if (boss) { if (boss) {
boss.end(); boss.end();
} }

View File

@ -12,8 +12,10 @@ import {
import { Pop } from '../fx/pop'; import { Pop } from '../fx/pop';
import { SplittableBall } from './palaceBossProjectile'; import { SplittableBall } from './palaceBossProjectile';
import { PointEffect } from '../fx/pointShader'; 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(); const shader = new Shader();
shader.size(480, 480); shader.size(480, 480);
shader.setHD(true); shader.setHD(true);
@ -102,7 +104,7 @@ export class PalaceBoss extends BarrageBoss {
PalaceBoss.effect.end(); PalaceBoss.effect.end();
core.status.hero.hp = this.heroHp; core.status.hero.hp = this.heroHp;
Mota.Plugin.require('replay_g').clip('choices:0'); clip('choices:0');
} }
ai(time: number, frame: number): void {} ai(time: number, frame: number): void {}

View File

@ -23,9 +23,11 @@ import {
} from './towerBossProjectile'; } from './towerBossProjectile';
import { IStateDamageable } from '@user/data-state'; import { IStateDamageable } from '@user/data-state';
import { Pop } from '../fx/pop'; 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(); const shader = new Shader();
shader.size(480, 480); shader.size(480, 480);
shader.setHD(true); shader.setHD(true);
@ -198,7 +200,7 @@ export class TowerBoss extends BarrageBoss {
TowerBoss.effect.end(); TowerBoss.effect.end();
core.status.hero.hp = this.heroHp; core.status.hero.hp = this.heroHp;
Mota.Plugin.require('replay_g').clip('choices:0'); clip('choices:0');
} }
/** /**

View File

@ -9,7 +9,12 @@ import {
disableViewport, disableViewport,
enableViewport enableViewport
} from '@motajs/render'; } 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'; import EventEmitter from 'eventemitter3';
export interface IChaseController { export interface IChaseController {
@ -108,7 +113,7 @@ export class Chase extends EventEmitter<ChaseEvent> {
const layer = render.getElementById('layer-main')! as LayerGroup; const layer = render.getElementById('layer-main')! as LayerGroup;
this.layer = layer; this.layer = layer;
const mover = Mota.require('module', 'State').heroMoveCollection.mover; const mover = heroMoveCollection.mover;
this.heroMove = mover; this.heroMove = mover;
mover.on('stepEnd', this.onStepEnd); mover.on('stepEnd', this.onStepEnd);
@ -345,7 +350,7 @@ export class Chase extends EventEmitter<ChaseEvent> {
} }
} }
Mota.require('var', 'loading').once('coreInit', () => { loading.once('coreInit', () => {
const shader = new Shader(); const shader = new Shader();
Chase.shader = shader; Chase.shader = shader;
shader.size(480, 480); shader.size(480, 480);

View File

@ -10,7 +10,9 @@ import {
Sprite Sprite
} from '@motajs/render'; } from '@motajs/render';
import { PointEffect, PointEffectType } from '../fx/pointShader'; 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<Record<FloorIds, LocArr[]>> = { const path: Partial<Record<FloorIds, LocArr[]>> = {
MT16: [ MT16: [
@ -107,7 +109,7 @@ let back: Sprite | undefined;
let contrastId: number = 0; let contrastId: number = 0;
const effect = new PointEffect(); const effect = new PointEffect();
Mota.require('var', 'loading').once('loaded', () => { loading.once('loaded', () => {
effect.create(Chase.shader, 40); effect.create(Chase.shader, 40);
}); });
@ -215,7 +217,7 @@ export function initChase(): IChaseController {
para3(chase, ani); para3(chase, ani);
processScale(chase, ani, scale, camera); processScale(chase, ani, scale, camera);
Mota.Plugin.require('chase_g').chaseInit1(); chaseInit1();
chase.on('end', () => { chase.on('end', () => {
effect.end(); effect.end();
@ -712,7 +714,7 @@ function para3(chase: Chase, ani: Animation) {
}); });
chase.onceLoc(21, 7, 'MT14', async () => { chase.onceLoc(21, 7, 'MT14', async () => {
flags.finishChase1 = true; flags.finishChase1 = true;
Mota.Plugin.require('replay_g').clip('choices:0'); clip('choices:0');
core.showStatusBar(); core.showStatusBar();
ani.time(750).apply('rect', 0); ani.time(750).apply('rect', 0);
chase.end(true); chase.end(true);

View File

@ -4,6 +4,7 @@ import {
ILayerGroupRenderExtends, ILayerGroupRenderExtends,
LayerGroup LayerGroup
} from '@motajs/render'; } from '@motajs/render';
import { loading } from '@user/data-base';
const filterMap: [FloorIds[], string][] = []; const filterMap: [FloorIds[], string][] = [];
@ -11,7 +12,7 @@ function getCanvasFilterByFloorId(floorId: FloorIds = core.status.floorId) {
return filterMap.find(v => v[0].includes(floorId))?.[1] ?? ''; return filterMap.find(v => v[0].includes(floorId))?.[1] ?? '';
} }
Mota.require('var', 'loading').once('coreInit', () => { loading.once('coreInit', () => {
filterMap.push( filterMap.push(
[['MT50', 'MT60', 'MT61'], 'contrast(120%)'], // 童心佬的滤镜( [['MT50', 'MT60', 'MT61'], 'contrast(120%)'], // 童心佬的滤镜(
[ [

View File

@ -8,8 +8,7 @@ import {
Sprite, Sprite,
Transform Transform
} from '@motajs/render'; } from '@motajs/render';
import { gameListener, hook } from '@user/data-base';
const gameListener = Mota.require('var', 'gameListener');
export class LayerGroupHalo implements ILayerGroupRenderExtends { export class LayerGroupHalo implements ILayerGroupRenderExtends {
id: string = 'halo'; 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 => { LayerGroupHalo.sprites.forEach(v => {
const floor = v.binder.getFloor(); const floor = v.binder.getFloor();
if (col.floorId === floor) { if (col.floorId === floor) {

View File

@ -1,6 +1,5 @@
export * from './gameCanvas'; export * from './gameCanvas';
export * from './halo'; export * from './halo';
export * from './itemDetail';
export * from './pointShader'; export * from './pointShader';
export * from './pop'; export * from './pop';
export * from './portal'; export * from './portal';

View File

@ -7,7 +7,7 @@ import {
LayerGroup, LayerGroup,
Sprite Sprite
} from '@motajs/render'; } from '@motajs/render';
import type { BluePalace } from '@user/data-state'; import { BluePalace } from '@user/data-state';
/** 最大粒子数 */ /** 最大粒子数 */
const MAX_PARTICLES = 10; const MAX_PARTICLES = 10;
@ -24,7 +24,7 @@ export class LayerGroupPortal implements ILayerGroupRenderExtends {
portal!: Portal; portal!: Portal;
private onFloorChange = (floor: FloorIds) => { private onFloorChange = (floor: FloorIds) => {
const data = Mota.require('module', 'Mechanism').BluePalace.portals; const data = BluePalace.portals;
this.portal.cellSize = this.group.cellSize; this.portal.cellSize = this.group.cellSize;
this.portal.setData(data[floor] ?? []); this.portal.setData(data[floor] ?? []);
}; };

View File

@ -3,4 +3,4 @@ export * from './chase';
export * from './fx'; export * from './fx';
export * from './fallback'; export * from './fallback';
export * from './loopMap'; export * from '../../client-modules/src/render/loopMap';

View File

@ -2,6 +2,7 @@
"name": "@user/legacy-plugin-data", "name": "@user/legacy-plugin-data",
"dependencies": { "dependencies": {
"@user/data-state": "workspace:*", "@user/data-state": "workspace:*",
"@user/data-base": "workspace:*" "@user/data-base": "workspace:*",
"@user/data-utils": "workspace:*"
} }
} }

View File

@ -1,4 +1,4 @@
import { has, ofDir } from '@/plugin/game/utils'; import { has, ofDir } from '@user/data-utils';
export function init() { export function init() {
// 伤害弹出 // 伤害弹出
@ -11,11 +11,11 @@ export function init() {
const damage = info?.damage; const damage = info?.damage;
if (damage) { if (damage) {
if (!main.replayChecking) { if (!main.replayChecking) {
Mota.Plugin.require('pop_r').addPop( // addPop(
(x - core.bigmap.offsetX / 32) * 32 + 12, // (x - core.bigmap.offsetX / 32) * 32 + 12,
(y - core.bigmap.offsetY / 32) * 32 + 20, // (y - core.bigmap.offsetY / 32) * 32 + 20,
(-damage).toString() // (-damage).toString()
); // );
} }
core.status.hero.hp -= damage; core.status.hero.hp -= damage;
const type = [...info.type]; const type = [...info.type];

View File

@ -10,6 +10,7 @@ import type {
} from '@motajs/render'; } from '@motajs/render';
import type { TimingFn } from 'mutate-animate'; import type { TimingFn } from 'mutate-animate';
import { BlockMover, heroMoveCollection, MoveStep } from '@user/data-state'; import { BlockMover, heroMoveCollection, MoveStep } from '@user/data-state';
import { hook, loading } from '@user/data-base';
// 向后兼容用,会充当两个版本间过渡的作用 // 向后兼容用,会充当两个版本间过渡的作用
@ -24,8 +25,6 @@ interface Adapters {
const adapters: Adapters = {}; const adapters: Adapters = {};
export function initFallback() { export function initFallback() {
const hook = Mota.require('var', 'hook');
const loading = Mota.require('var', 'loading');
let fallbackIds: number = 1e8; let fallbackIds: number = 1e8;
if (!main.replayChecking && main.mode === 'play') { if (!main.replayChecking && main.mode === 'play') {
@ -90,7 +89,7 @@ export function initFallback() {
// ----- 引入 // ----- 引入
const { Camera, MotaRenderer: Renderer } = const { Camera, MotaRenderer: Renderer } =
Mota.require('@motajs/render'); Mota.require('@motajs/render');
const Animation = Mota.require('module', 'Animation'); const Animation = Mota.require('MutateAnimate');
// ----- 勇士移动相关 // ----- 勇士移动相关
control.prototype.moveAction = async function (callback?: () => void) { control.prototype.moveAction = async function (callback?: () => void) {
@ -313,7 +312,7 @@ export function initFallback() {
core.removeBlock(x, y); core.removeBlock(x, y);
setTimeout(function () { setTimeout(function () {
core.status.replay.animate = false; core.status.replay.animate = false;
Mota.require('var', 'hook').emit( hook.emit(
'afterOpenDoor', 'afterOpenDoor',
block.event.id as AllIdsOf<'animates'>, block.event.id as AllIdsOf<'animates'>,
x, x,

View File

@ -1,5 +1,5 @@
import { EnemyCollection, ensureFloorDamage } from '@user/data-state'; import { EnemyCollection, ensureFloorDamage } from '@user/data-state';
import { formatDamage } from '../utils'; import { formatDamage } from '@user/data-utils';
export function init() { export function init() {
core.control.updateDamage = function ( core.control.updateDamage = function (
@ -58,7 +58,7 @@ function renderThumbnailDamage(col: EnemyCollection) {
py: 32 * (v.y! + 1) - 1, py: 32 * (v.y! + 1) - 1,
color: color color: color
}); });
const setting = Mota.require('var', 'mainSetting'); const setting = Mota.require('@motajs/legacy-ui').mainSetting;
const criGem = setting.getValue('screen.criticalGem', false); const criGem = setting.getValue('screen.criticalGem', false);
const n = critical?.atkDelta ?? Infinity; const n = critical?.atkDelta ?? Infinity;
const ratio = core.status.maps[col.floorId].ratio; const ratio = core.status.maps[col.floorId].ratio;

View File

@ -40,7 +40,7 @@ export function removeMaps(
deleted = true; deleted = true;
} }
if (deleted && !main.replayChecking) { if (deleted && !main.replayChecking) {
Mota.Plugin.require('fly_r').splitArea(); Mota.require('@motajs/legacy-ui').splitArea();
} }
} }

View File

@ -1,9 +1,11 @@
import { HeroSkill } from '@/game/mechanism/misc'; import { HeroSkill } from '@user/data-state';
import { import {
getSkillFromIndex, getSkillFromIndex,
upgradeSkill upgradeSkill
} from '../../data-state/src/mechanism/skillTree'; } from '../../data-state/src/mechanism/skillTree';
import { canOpenShop } from './shop'; import { canOpenShop } from './shop';
import { hook } from '@user/data-base';
import { jumpSkill } from './skill';
const replayableSettings = ['autoSkill']; const replayableSettings = ['autoSkill'];
@ -27,7 +29,7 @@ export function initReplay() {
function tipAndWait(content: string, time: number) { function tipAndWait(content: string, time: number) {
const speed = core.status.replay.speed; const speed = core.status.replay.speed;
if (main.replayChecking || speed === 24) return Promise.resolve(); 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); tip('info', '录像播放操作:' + content);
return new Promise<void>(res => { return new Promise<void>(res => {
setTimeout(res, time / speed); setTimeout(res, time / speed);
@ -78,7 +80,7 @@ export function initReplay() {
let shopOpened = false; let shopOpened = false;
let openedShopId = ''; let openedShopId = '';
Mota.require('var', 'hook').on('reset', () => { hook.on('reset', () => {
shopOpened = false; shopOpened = false;
openedShopId = ''; openedShopId = '';
}); });
@ -162,7 +164,7 @@ export function initReplay() {
!core.status.floorId.startsWith('tower') && !core.status.floorId.startsWith('tower') &&
HeroSkill.learnedSkill(HeroSkill.Jump) HeroSkill.learnedSkill(HeroSkill.Jump)
) { ) {
const success = Mota.Plugin.require('skill_g').jumpSkill(); const success = jumpSkill();
core.status.route.push(`useSkill:${toEmit}`); core.status.route.push(`useSkill:${toEmit}`);
if (!success) core.replay(); if (!success) core.replay();
return true; return true;

View File

@ -10,7 +10,7 @@ export function openShop(shopId: string, noRoute: boolean) {
if (shop.item) { if (shop.item) {
Mota.r(() => { Mota.r(() => {
if (!core.isReplaying()) { if (!core.isReplaying()) {
Mota.require('var', 'mainUi').open('shop', { Mota.require('@motajs/legacy-ui').mainUi.open('shop', {
shopId: shopId shopId: shopId
}); });
} }

View File

@ -529,7 +529,7 @@ export function loadDefaultResource() {
const res = LoadTask.add('byte', `byte/project/sounds/${v}`); const res = LoadTask.add('byte', `byte/project/sounds/${v}`);
Mota.r(() => { Mota.r(() => {
res.once('load', res => { res.once('load', res => {
const { soundPlayer } = Mota.require('module', 'Audio'); const { soundPlayer } = Mota.require('@user/client-modules');
soundPlayer.add(v, res.resource!); soundPlayer.add(v, res.resource!);
}); });
}); });
@ -548,7 +548,7 @@ export function loadDefaultResource() {
const res = LoadTask.add('image', `image/project/autotiles/${v}.png`); const res = LoadTask.add('image', `image/project/autotiles/${v}.png`);
res.once('load', res => { res.once('load', res => {
autotiles[v as AllIdsOf<'autotile'>] = res.resource; autotiles[v as AllIdsOf<'autotile'>] = res.resource;
const loading = Mota.require('var', 'loading'); const { loading } = Mota.require('@user/data-base');
loading.addAutotileLoaded(); loading.addAutotileLoaded();
loading.onAutotileLoaded(autotiles); loading.onAutotileLoaded(autotiles);
core.material.images.autotile[v as AllIdsOf<'autotile'>] = core.material.images.autotile[v as AllIdsOf<'autotile'>] =
@ -675,7 +675,7 @@ export async function loadCompressedResource() {
autotiles[ autotiles[
name.slice(0, -4) as AllIdsOf<'autotile'> name.slice(0, -4) as AllIdsOf<'autotile'>
] = image; ] = image;
const loading = Mota.require('var', 'loading'); const { loading } = Mota.require('@user/data-base');
loading.addAutotileLoaded(); loading.addAutotileLoaded();
loading.onAutotileLoaded(autotiles); loading.onAutotileLoaded(autotiles);
core.material.images.autotile[ core.material.images.autotile[
@ -717,8 +717,10 @@ export async function loadCompressedResource() {
new FontFace(name.slice(0, -4), font) new FontFace(name.slice(0, -4), font)
); );
} else if (usage === 'sound') { } else if (usage === 'sound') {
const { soundPlayer } = Mota.require('module', 'Audio'); const { soundPlayer } = Mota.require(
soundPlayer.add(v, value); '@user/client-modules'
);
soundPlayer.add(name as SoundIds, value as Uint8Array);
} else if (usage === 'animate') { } else if (usage === 'animate') {
const ani = value as string; const ani = value as string;
core.material.animates[ core.material.animates[

View File

@ -134,7 +134,7 @@ onMounted(() => {
} }
drawer.drawMap(); drawer.drawMap();
const hook = Mota.require('var', 'hook'); const { hook } = Mota.require('@user/data-base');
hook.on('afterChangeFloor', onChange); hook.on('afterChangeFloor', onChange);
hook.on('afterBattle', afterBattle); hook.on('afterBattle', afterBattle);
@ -168,7 +168,7 @@ onMounted(() => {
}); });
onUnmounted(() => { onUnmounted(() => {
const hook = Mota.require('var', 'hook'); const { hook } = Mota.require('@user/data-base');
hook.off('afterChangeFloor', onChange); hook.off('afterChangeFloor', onChange);
hook.off('afterBattle', afterBattle); hook.off('afterBattle', afterBattle);
}); });

View File

@ -0,0 +1,2 @@
export * from './shadow';
export * from './webgl';

View File

@ -75,7 +75,7 @@ function addLightFromBlock(
}); });
} }
const hook = Mota.require('var', 'hook'); const { hook } = Mota.require('@user/data-base');
hook.once('reset', () => { hook.once('reset', () => {
Shadow.init(); Shadow.init();
@ -100,11 +100,9 @@ hook.once('reset', () => {
}, },
{ background: [0, 0, 0, 0.3] } { background: [0, 0, 0, 0.3] }
); );
Mota.rewrite(core.control, 'loadData', 'add', () => { hook.on('loadData', () => {
if (!main.replayChecking) { Shadow.update(true);
Shadow.update(true); LayerShadowExtends.shadowList.forEach(v => v.update());
LayerShadowExtends.shadowList.forEach(v => v.update());
}
}); });
}); });
hook.on('reset', () => { hook.on('reset', () => {

View File

@ -4,6 +4,7 @@ export * as UI from './ui';
export * as Components from './components'; export * as Components from './components';
export * from './preset'; export * from './preset';
export * from './tools'; export * from './tools';
export * from './fx';
export * from './animateController'; export * from './animateController';
export * from './controller'; export * from './controller';

View File

@ -34,7 +34,7 @@ const marked: MarkInfo<EnemyIds>[] = [];
*/ */
export function markEnemy(id: EnemyIds) { export function markEnemy(id: EnemyIds) {
if (hasMarkedEnemy(id)) return; 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]); const enemy = new DamageEnemy(core.material.enemys[id]);
enemy.calAttribute(); enemy.calAttribute();
enemy.getRealInfo(); enemy.getRealInfo();
@ -43,7 +43,7 @@ export function markEnemy(id: EnemyIds) {
id, id,
enemy, enemy,
mode: 0b011111, mode: 0b011111,
lastAtk: Mota.requireAll('fn').getHeroStatusOn('atk', 'empty'), lastAtk: getHeroStatusOn('atk', 'empty'),
lastDamage: enemy.calDamage().damage, lastDamage: enemy.calDamage().damage,
status: 0b0, status: 0b0,
update: ref(true) update: ref(true)
@ -65,7 +65,7 @@ export function unmarkEnemy(id: EnemyIds) {
} }
export function checkMarkedEnemy() { export function checkMarkedEnemy() {
const { getHeroStatusOn } = Mota.requireAll('fn'); const { getHeroStatusOn } = Mota.require('@user/data-state');
marked.forEach(v => { marked.forEach(v => {
const { id, enemy, mode, lastAtk, lastDamage, markDamage } = v; const { id, enemy, mode, lastAtk, lastDamage, markDamage } = v;
const atk = getHeroStatusOn('atk', 'empty'); const atk = getHeroStatusOn('atk', 'empty');
@ -158,7 +158,7 @@ export function hasMarkedEnemy(id: EnemyIds) {
return marked.some(v => v.id === id); return marked.some(v => v.id === id);
} }
const hook = Mota.require('var', 'hook'); const { hook } = Mota.require('@user/data-base');
hook.on('statusBarUpdate', () => { hook.on('statusBarUpdate', () => {
checkMarkedEnemy(); checkMarkedEnemy();
}); });

View File

@ -21,12 +21,14 @@ if (import.meta.env.DEV) {
Danmaku.backend = `/danmaku`; Danmaku.backend = `/danmaku`;
} }
Mota.require('var', 'hook').once('reset', () => { const { hook } = Mota.require('@user/data-base');
hook.once('reset', () => {
Danmaku.fetch(); Danmaku.fetch();
}); });
// 勇士移动后显示弹幕 // 勇士移动后显示弹幕
Mota.require('var', 'hook').on('moveOneStep', (x, y, floor) => { hook.on('moveOneStep', (x, y, floor) => {
const enabled = mainSetting.getValue('ui.danmaku', true); const enabled = mainSetting.getValue('ui.danmaku', true);
if (!enabled) return; if (!enabled) return;
const f = Danmaku.allInPos[floor]; const f = Danmaku.allInPos[floor];

View File

@ -37,7 +37,8 @@ const closeFixed = () => {
// todo: 应当在这里实现查看临界与特殊属性的功能 // todo: 应当在这里实现查看临界与特殊属性的功能
export let hovered: Block | null; export let hovered: Block | null;
const { hook, gameListener } = Mota.requireAll('var'); const { hook, gameListener } = Mota.require('@user/data-base');
gameListener.on('hoverBlock', block => { gameListener.on('hoverBlock', block => {
closeFixed(); closeFixed();
hovered = block; hovered = block;

View File

@ -535,7 +535,7 @@ gameKey
core.actions._clickGameInfo_openComments(); core.actions._clickGameInfo_openComments();
}) })
.realize('skill1', () => { .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.learnedSkill(HeroSkill.Blade)) return;
if (HeroSkill.getAutoSkill()) { if (HeroSkill.getAutoSkill()) {
tip('error', '已开启自动切换技能!'); tip('error', '已开启自动切换技能!');
@ -547,13 +547,13 @@ gameKey
core.updateStatusBar(); core.updateStatusBar();
}) })
.realize('skill2', () => { .realize('skill2', () => {
const HeroSkill = Mota.require('module', 'Mechanism').HeroSkill; const HeroSkill = Mota.require('@user/data-state').HeroSkill;
if ( if (
!flags.onChase && !flags.onChase &&
!core.status.floorId.startsWith('tower') && !core.status.floorId.startsWith('tower') &&
HeroSkill.learnedSkill(HeroSkill.Jump) HeroSkill.learnedSkill(HeroSkill.Jump)
) { ) {
Mota.Plugin.require('skill_g').jumpSkill(); Mota.require('@user/legacy-plugin-data').jumpSkill();
core.status.route.push('useSkill:Jump'); core.status.route.push('useSkill:Jump');
} else { } else {
if (core.hasItem('pickaxe')) { if (core.hasItem('pickaxe')) {
@ -562,7 +562,7 @@ gameKey
} }
}) })
.realize('skill3', () => { .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.learnedSkill(HeroSkill.Shield)) return;
if (HeroSkill.getAutoSkill()) { if (HeroSkill.getAutoSkill()) {
tip('error', '已开启自动切换技能!'); tip('error', '已开启自动切换技能!');

View File

@ -8,7 +8,6 @@ import {
UI, UI,
UiController UiController
} from '@motajs/legacy-ui'; } from '@motajs/legacy-ui';
import { bgmController, soundPlayer } from '@/module';
import settingsText from '../data/settings.json'; import settingsText from '../data/settings.json';
//#region legacy-ui //#region legacy-ui
@ -47,7 +46,7 @@ fixedUi.register(
); );
fixedUi.showAll(); fixedUi.showAll();
const hook = Mota.require('var', 'hook'); const { hook } = Mota.require('@user/data-base');
hook.once('mounted', () => { hook.once('mounted', () => {
const ui = document.getElementById('ui-main')!; const ui = document.getElementById('ui-main')!;
const fixed = document.getElementById('ui-fixed')!; const fixed = document.getElementById('ui-fixed')!;
@ -143,7 +142,7 @@ function handleActionSetting<T extends number | boolean>(
) { ) {
if (key === 'autoSkill') { if (key === 'autoSkill') {
// 自动切换技能 // 自动切换技能
const HeroSkill = Mota.require('module', 'Mechanism').HeroSkill; const HeroSkill = Mota.require('@user/data-state').HeroSkill;
HeroSkill.setAutoSkill(n as boolean); HeroSkill.setAutoSkill(n as boolean);
core.status.route.push(`set:autoSkill:${n}`); core.status.route.push(`set:autoSkill:${n}`);
} }
@ -154,6 +153,7 @@ function handleAudioSetting<T extends number | boolean>(
n: T, n: T,
_o: T _o: T
) { ) {
const { bgmController, soundPlayer } = Mota.require('@user/client-modules');
if (key === 'bgmEnabled') { if (key === 'bgmEnabled') {
bgmController.setEnabled(n as boolean); bgmController.setEnabled(n as boolean);
core.checkBgm(); core.checkBgm();
@ -261,7 +261,7 @@ mainSetting
.register('tips', '小贴士', true, COM.Boolean) .register('tips', '小贴士', true, COM.Boolean)
); );
const loading = Mota.require('var', 'loading'); const { loading } = Mota.require('@user/data-base');
loading.once('coreInit', () => { loading.once('coreInit', () => {
mainSetting.reset({ mainSetting.reset({
'screen.fullscreen': !!document.fullscreenElement, 'screen.fullscreen': !!document.fullscreenElement,

View File

@ -61,7 +61,7 @@ export function getNowStatus(nowEquip?: Equip, onCol: boolean = false) {
'hpmax', 'hpmax',
'money' 'money'
] as (keyof SelectType<HeroStatus, number>)[]; ] as (keyof SelectType<HeroStatus, number>)[];
const { getHeroStatusOn } = Mota.requireAll('fn'); const { getHeroStatusOn } = Mota.require('@user/data-state');
return ( return (
<div id="hero-status"> <div id="hero-status">

View File

@ -31,7 +31,7 @@ export function getDetailedEnemy(
const special: [string, string, string][] = [...enemy.info.special] const special: [string, string, string][] = [...enemy.info.special]
.filter(v => !enemy.info.specialHalo?.includes(v)) .filter(v => !enemy.info.specialHalo?.includes(v))
.map(vv => { .map(vv => {
const s = Mota.require('var', 'enemySpecials')[vv]; const s = Mota.require('@user/data-state').specials[vv];
return [ return [
fromFunc(s.name, enemy.info), fromFunc(s.name, enemy.info),
fromFunc(s.desc, enemy.info), fromFunc(s.desc, enemy.info),

View File

@ -519,7 +519,7 @@ export class MinimapDrawer {
ctx.textBaseline = 'middle'; ctx.textBaseline = 'middle';
ctx.font = `3px "normal"`; ctx.font = `3px "normal"`;
ctx.strokeStyle = 'black'; ctx.strokeStyle = 'black';
Mota.require('fn', 'ensureFloorDamage')(floorId); Mota.require('@user/data-state').ensureFloorDamage(floorId);
ctx.fillStyle = 'rgba(0, 0, 0, 0.6)'; ctx.fillStyle = 'rgba(0, 0, 0, 0.6)';
ctx.fillRect(x - 6, y - 2, 12, 4); ctx.fillRect(x - 6, y - 2, 12, 4);
ctx.fillStyle = 'white'; ctx.fillStyle = 'white';

View File

@ -107,6 +107,7 @@ import {
} from '../tools/achievement'; } from '../tools/achievement';
import Scroll from '../components/scroll.vue'; import Scroll from '../components/scroll.vue';
import { isMobile } from '../use'; import { isMobile } from '../use';
import { mainUi } from '../preset';
const props = defineProps<{ const props = defineProps<{
num: number; num: number;
@ -176,7 +177,7 @@ function getAllAchievements(type: AchievementType): ResolvedAchievement[] {
} }
function exit() { function exit() {
Mota.require('var', 'mainUi').close(props.num); mainUi.close(props.num);
} }
</script> </script>

View File

@ -32,13 +32,13 @@
import { onMounted, onUpdated, Ref, ref, watch } from 'vue'; import { onMounted, onUpdated, Ref, ref, watch } from 'vue';
import Box from '../components/box.vue'; import Box from '../components/box.vue';
import { GameUi } from '../controller'; import { GameUi } from '../controller';
import type { DamageEnemy, EnemyInfo } from '@/game/enemy/damage';
import { nextFrame } from '../utils'; import { nextFrame } from '../utils';
import { EnemyInfo, IDamageEnemy } from '@motajs/types';
const props = defineProps<{ const props = defineProps<{
num: number; num: number;
ui: GameUi; ui: GameUi;
enemy: DamageEnemy; enemy: IDamageEnemy;
close: Ref<boolean>; close: Ref<boolean>;
loc: [x: number, y: number]; loc: [x: number, y: number];
}>(); }>();
@ -83,7 +83,7 @@ const special = (() => {
}; };
const show = s.slice(0, 2).map(v => { 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]; return [fromFunc(s.name, enemy.info), s.color];
}); });
if (s.length > 2) show.push(['...', 'white']); if (s.length > 2) show.push(['...', 'white']);

View File

@ -74,7 +74,7 @@ onMounted(async () => {
core._afterLoadResources(props.callback); core._afterLoadResources(props.callback);
logger.log(`Resource load end.`); logger.log(`Resource load end.`);
loadDiv.style.opacity = '0'; loadDiv.style.opacity = '0';
Mota.require('var', 'loading').emit('loaded'); Mota.require('@user/data-base').loading.emit('loaded');
await sleep(1000); await sleep(1000);
fixedUi.close(props.num); fixedUi.close(props.num);
fixedUi.open('start'); fixedUi.open('start');

View File

@ -87,32 +87,31 @@ import { sleep } from 'mutate-animate';
import { gameKey } from '@motajs/system-action'; import { gameKey } from '@motajs/system-action';
import { GameUi } from '../controller'; import { GameUi } from '../controller';
import { mainUi } from '../preset/ui'; import { mainUi } from '../preset/ui';
import type { Chapter } from '@/plugin/game/skillTree';
const props = defineProps<{ const props = defineProps<{
num: number; num: number;
ui: GameUi; ui: GameUi;
}>(); }>();
const skillTree = Mota.Plugin.require('skillTree_g'); const skillTree = Mota.require('@user/legacy-plugin-data');
let canvas: HTMLCanvasElement; let canvas: HTMLCanvasElement;
let ctx: CanvasRenderingContext2D; let ctx: CanvasRenderingContext2D;
const selected = ref(0);
const chapter = ref<Chapter>('chapter1');
const update = ref(false);
const chapterDict = { const chapterDict = {
chapter1: '第一章', chapter1: '第一章',
chapter2: '第二章' chapter2: '第二章'
}; };
const selected = ref(0);
const chapter = ref<keyof typeof chapterDict>('chapter1');
const update = ref(false);
flags.skillTree ??= 0; 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; selected.value = s[chapterList[flags.skillTree]][0].index;
chapter.value = chapterList[flags.skillTree]; chapter.value = chapterList[flags.skillTree];

View File

@ -72,8 +72,6 @@ import { gameKey } from '@motajs/system-action';
import { mainUi } from '../preset/ui'; import { mainUi } from '../preset/ui';
import { mainSetting } from '../preset/ui'; import { mainSetting } from '../preset/ui';
import { mat4 } from 'gl-matrix'; import { mat4 } from 'gl-matrix';
// todo:
import { bgmController } from '@/module';
const props = defineProps<{ const props = defineProps<{
num: number; num: number;
@ -90,7 +88,7 @@ let background: HTMLImageElement;
let buttons: HTMLSpanElement[] = []; let buttons: HTMLSpanElement[] = [];
let played: boolean; let played: boolean = false;
const soundChecked = ref(false); const soundChecked = ref(false);
const fullscreen = ref(!!document.fullscreenElement); const fullscreen = ref(!!document.fullscreenElement);
@ -327,6 +325,7 @@ onMounted(async () => {
resize(); resize();
soundChecked.value = mainSetting.getValue('audio.bgmEnabled', true); soundChecked.value = mainSetting.getValue('audio.bgmEnabled', true);
const { bgmController } = Mota.require('@user/client-modules');
bgmController.play('title.opus'); bgmController.play('title.opus');
start.style.opacity = '1'; start.style.opacity = '1';
@ -425,8 +424,7 @@ onUnmounted(() => {
); );
background-clip: text; background-clip: text;
-webkit-background-clip: text; -webkit-background-clip: text;
text-shadow: text-shadow: 1px 1px 4px rgba(0, 0, 0, 0.5),
1px 1px 4px rgba(0, 0, 0, 0.5),
-1px -1px 3px rgba(255, 255, 255, 0.3), -1px -1px 3px rgba(255, 255, 255, 0.3),
5px 5px 5px rgba(0, 0, 0, 0.4); 5px 5px 5px rgba(0, 0, 0, 0.4);
filter: brightness(1.8); filter: brightness(1.8);
@ -449,17 +447,14 @@ onUnmounted(() => {
position: absolute; position: absolute;
opacity: 0; opacity: 0;
animation: cursor 2.5s linear 0s infinite normal running; animation: cursor 2.5s linear 0s infinite normal running;
transition: transition: left 0.4s ease-out, top 0.4s ease-out,
left 0.4s ease-out,
top 0.4s ease-out,
opacity 1.5s ease-out; opacity 1.5s ease-out;
} }
.start-button { .start-button {
position: relative; position: relative;
font: bold 1.5em 'normal'; font: bold 1.5em 'normal';
text-shadow: text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.4),
1px 1px 2px rgba(0, 0, 0, 0.4),
0px 0px 1px rgba(255, 255, 255, 0.3); 0px 0px 1px rgba(255, 255, 255, 0.3);
background-clip: text; background-clip: text;
-webkit-background-clip: text; -webkit-background-clip: text;

View File

@ -359,8 +359,7 @@ export function spliceBy<T>(arr: T[], from: T): T[] {
} }
export async function triggerFullscreen(full: boolean) { export async function triggerFullscreen(full: boolean) {
if (!Mota.Plugin.inited) return; const { maxGameScale } = Mota.require('@user/data-utils');
const { maxGameScale } = Mota.Plugin.require('utils_g');
if (!!document.fullscreenElement && !full) { if (!!document.fullscreenElement && !full) {
if (window.jsinterface) { if (window.jsinterface) {
window.jsinterface.requestPortrait(); window.jsinterface.requestPortrait();
@ -472,10 +471,10 @@ export function formatSize(size: number) {
return size < 1 << 10 return size < 1 << 10
? `${size.toFixed(2)}B` ? `${size.toFixed(2)}B`
: size < 1 << 20 : size < 1 << 20
? `${(size / (1 << 10)).toFixed(2)}KB` ? `${(size / (1 << 10)).toFixed(2)}KB`
: size < 1 << 30 : size < 1 << 30
? `${(size / (1 << 20)).toFixed(2)}MB` ? `${(size / (1 << 20)).toFixed(2)}MB`
: `${(size / (1 << 30)).toFixed(2)}GB`; : `${(size / (1 << 30)).toFixed(2)}GB`;
} }
let num = 0; let num = 0;

View File

@ -14,7 +14,8 @@ const i = (img: ImageMapKeys) => {
const imageMap: Partial<ImageMap> = {}; const imageMap: Partial<ImageMap> = {};
Mota.require('var', 'loading').once('loaded', () => { const { loading } = Mota.require('@user/data-base');
loading.once('loaded', () => {
[ [
'enemys', 'enemys',
'enemy48', 'enemy48',
@ -91,7 +92,7 @@ class TextureCache {
constructor() { constructor() {
this.material = imageMap as Record<ImageMapKeys, HTMLImageElement>; this.material = imageMap as Record<ImageMapKeys, HTMLImageElement>;
Mota.require('var', 'loading').once('loaded', () => { loading.once('loaded', () => {
const map = maps_90f36752_8815_4be8_b32b_d7fad1d0542e; const map = maps_90f36752_8815_4be8_b32b_d7fad1d0542e;
// @ts-expect-error 无法推导 // @ts-expect-error 无法推导
this.idNumberMap = {}; this.idNumberMap = {};

View File

@ -11,7 +11,7 @@ import { texture } from './cache';
import { sleep } from 'mutate-animate'; import { sleep } from 'mutate-animate';
import { RenderAdapter } from '@motajs/render-core'; 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) => { hook.on('setBlock', (x, y, floor, block) => {
const isNow = floor === core.status.floorId; const isNow = floor === core.status.floorId;

View File

@ -39,7 +39,7 @@ class RenderEmits extends EventEmitter<RenderEvent> {
export const renderEmits = new RenderEmits(); export const renderEmits = new RenderEmits();
Mota.require('var', 'hook').once('reset', () => { Mota.require('@user/data-base').hook.once('reset', () => {
let lastTime = 0; let lastTime = 0;
RenderItem.ticker.add(time => { RenderItem.ticker.add(time => {
if (!core.isPlaying()) return; if (!core.isPlaying()) return;

View File

@ -2,7 +2,6 @@ export * from './animate';
export * from './block'; export * from './block';
export * from './cache'; export * from './cache';
export * from './camera'; export * from './camera';
export * from './damage';
export * from './floor'; export * from './floor';
export * from './frame'; export * from './frame';
export * from './graphics'; export * from './graphics';

View File

@ -292,7 +292,7 @@ export class Icon extends RenderItem<EIconEvent> implements IAnimateFrame {
} }
const num = typeof id === 'number' ? id : texture.idNumberMap[id]; 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) { if (loading.loaded) {
this.setIconRenderable(num); this.setIconRenderable(num);
} else { } else {
@ -500,7 +500,7 @@ export class Winskin extends RenderItem<EWinskinEvent> {
* @param name * @param name
*/ */
setImageByName(name: ImageIds) { setImageByName(name: ImageIds) {
const loading = Mota.require('var', 'loading'); const { loading } = Mota.require('@user/data-base');
if (loading.loaded) { if (loading.loaded) {
const image = core.material.images.images[name]; const image = core.material.images.images[name];
this.setImage(image); this.setImage(image);

View File

@ -346,7 +346,7 @@ adapter.receiveSync('endMove', item => {
item.endMove(); item.endMove();
}); });
const hook = Mota.require('var', 'hook'); const { hook } = Mota.require('@user/data-base');
hook.on('changingFloor', (_, loc) => { hook.on('changingFloor', (_, loc) => {
adapter.all('setPosition', loc.x, loc.y); adapter.all('setPosition', loc.x, loc.y);
}); });

View File

@ -47,7 +47,6 @@ import {
ELayerEvent, ELayerEvent,
ELayerGroupEvent, ELayerGroupEvent,
EAnimateEvent, EAnimateEvent,
EDamageEvent,
EGraphicItemEvent EGraphicItemEvent
} from '@motajs/render-elements'; } from '@motajs/render-elements';
@ -100,7 +99,7 @@ declare module 'vue/jsx-runtime' {
custom: TagDefine<CustomProps, ERenderItemEvent>; custom: TagDefine<CustomProps, ERenderItemEvent>;
layer: TagDefine<LayerProps, ELayerEvent>; layer: TagDefine<LayerProps, ELayerEvent>;
'layer-group': TagDefine<LayerGroupProps, ELayerGroupEvent>; 'layer-group': TagDefine<LayerGroupProps, ELayerGroupEvent>;
damage: TagDefine<DamageProps, EDamageEvent>; damage: TagDefine<DamageProps, ERenderItemEvent>;
animation: TagDefine<AnimateProps, EAnimateEvent>; animation: TagDefine<AnimateProps, EAnimateEvent>;
'g-rect': TagDefine<RectProps, EGraphicItemEvent>; 'g-rect': TagDefine<RectProps, EGraphicItemEvent>;
'g-circle': TagDefine<CirclesProps, EGraphicItemEvent>; 'g-circle': TagDefine<CirclesProps, EGraphicItemEvent>;

View File

@ -17,8 +17,6 @@ import {
Text, Text,
Winskin, Winskin,
Animate, Animate,
Damage,
EDamageEvent,
Layer, Layer,
LayerGroup, LayerGroup,
BezierCurve, BezierCurve,
@ -236,9 +234,6 @@ tagMap.register('layer-group', (_0, _1, props) => {
return l; return l;
} }
}); });
tagMap.register<EDamageEvent, Damage>('damage', (_0, _1, _props) => {
return new Damage();
});
tagMap.register('animation', (_0, _1, _props) => { tagMap.register('animation', (_0, _1, _props) => {
return new Animate(); return new Animate();
}); });

View File

@ -1,3 +1,5 @@
import EventEmitter from 'eventemitter3';
export interface EnemyInfo extends Partial<Omit<Enemy, 'special'>> { export interface EnemyInfo extends Partial<Omit<Enemy, 'special'>> {
atk: number; atk: number;
def: number; def: number;
@ -133,7 +135,12 @@ export interface IDamageEnemy {
getSeckillAtk(): number; getSeckillAtk(): number;
} }
export interface IEnemyCollection { export interface IEnemyCollectionEvent {
calculated: [];
extract: [];
}
export interface IEnemyCollection extends EventEmitter<IEnemyCollectionEvent> {
/** 这个怪物集的地图 id */ /** 这个怪物集的地图 id */
readonly floorId: FloorIds; readonly floorId: FloorIds;
/** 地图宽度 */ /** 地图宽度 */

View File

@ -1,4 +1,4 @@
///<reference path="../../src/types/core.d.ts" /> ///<reference path="../../types/declaration/core.d.ts" />
var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = { var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
events: { events: {
@ -395,6 +395,8 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
} }
}); });
}); });
Mota.require('@user/data-base').hook.emit('loadData');
}, },
updateStatusBar: function () { updateStatusBar: function () {
// 检查等级 // 检查等级

View File

@ -29,7 +29,7 @@ import { onMounted } from 'vue';
import { mainUi, fixedUi } from '@motajs/legacy-ui'; import { mainUi, fixedUi } from '@motajs/legacy-ui';
onMounted(() => { onMounted(() => {
const { hook } = Mota.requireAll('var'); const { hook } = Mota.require('@user/data-base');
hook.emit('mounted'); hook.emit('mounted');
}); });

View File

@ -17,7 +17,6 @@
"noEmit": true, "noEmit": true,
"baseUrl": ".", "baseUrl": ".",
"paths": { "paths": {
"@/*": ["src/*"],
"@motajs/*": ["packages/*/src"], "@motajs/*": ["packages/*/src"],
"@user/*": ["packages-user/*/src"] "@user/*": ["packages-user/*/src"]
} }

View File

@ -51,15 +51,7 @@ export default defineConfig({
base: `./`, base: `./`,
resolve: { resolve: {
alias: [ alias: [
...aliases, ...aliases
{
find: '@',
replacement: resolve(__dirname, './src')
},
{
find: '@ui',
replacement: resolve(__dirname, './src/ui')
}
] ]
}, },
build: { build: {