diff --git a/package.json b/package.json index c96e499..af2134c 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,8 @@ "lines": "tsx script/lines.ts" }, "dependencies": { + "@motajs/render": "workspace:*", + "@motajs/common": "workspace:*", "@ant-design/icons-vue": "^6.1.0", "@emotion/css": "^11.13.0", "@vueuse/core": "^10.11.1", @@ -62,6 +64,7 @@ "fontmin": "^0.9.9", "form-data": "^4.0.0", "fs-extra": "^10.1.0", + "glob": "^11.0.1", "globals": "^15.14.0", "less": "^4.2.0", "postcss-preset-env": "^9.6.0", diff --git a/packages/client/package.json b/packages/client/package.json new file mode 100644 index 0000000..3251874 --- /dev/null +++ b/packages/client/package.json @@ -0,0 +1,6 @@ +{ + "name": "@motajs/render", + "dependencies": { + "@motajs/render": "workspace:*" + } +} \ No newline at end of file diff --git a/packages/client/src/index.ts b/packages/client/src/index.ts new file mode 100644 index 0000000..23e98b3 --- /dev/null +++ b/packages/client/src/index.ts @@ -0,0 +1 @@ +export * as Render from '@motajs/render'; diff --git a/packages/common/package.json b/packages/common/package.json new file mode 100644 index 0000000..70f5d77 --- /dev/null +++ b/packages/common/package.json @@ -0,0 +1,3 @@ +{ + "name": "@motajs/common" +} \ No newline at end of file diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts new file mode 100644 index 0000000..1ff09ef --- /dev/null +++ b/packages/common/src/index.ts @@ -0,0 +1 @@ +export * from './logger'; diff --git a/packages/common/src/logger.json b/packages/common/src/logger.json new file mode 100644 index 0000000..450358d --- /dev/null +++ b/packages/common/src/logger.json @@ -0,0 +1,101 @@ +{ + "error": { + "1": "Unexpected error when posting danmaku. Error info: $1", + "2": "Unexpected loading error in loading resource '$1/$2''. Error info: $3", + "3": "Syntax error in parsing CSS: Unexpected ':'. Col: $1. CSS string: '$2'", + "4": "Syntax error in parsing CSS: Unexpected ';'. Col: $1. CSS string: '$2'", + "5": "Syntax error in parsing CSS: Missing property name after '-'. Col: $1. CSS string: '$2'", + "6": "Syntax error in parsing CSS: Unexpected end of css, expecting ':'. Col: $1. CSS string: '$2'", + "7": "Syntax error in parsing CSS: Unexpected end of css, expecting property value. Col: $1. CSS string: '$2'", + "8": "Post danmaku with not allowed css. Info: $1", + "9": "Cannot initialize shader program. Error info: $1", + "10": "Cannot compile $1 shader. Error info: $2", + "11": "Cache depth cannot larger than 31.", + "12": "Cannot move while status is not 'moving'. Call 'readyMove' first.", + "13": "Cannot compile $1 shader. Error info: $2", + "14": "", + "15": "", + "16": "Cannot find log message for $1 code $2.", + "17": "Cannot use shader program for shader element that does not belong to it.", + "18": "Cannot delete shader program for shader element that does not belong to it.", + "19": "Cannot create MotaRenderer instance for nonexistent canvas.", + "20": "Cannot create render element for tag '$1', since there's no registration for it.", + "21": "Incorrect render prop type is delivered. key: '$1', expected type: '$2', delivered type: '$3'", + "22": "Incorrect props for custom tag. Please ensure you have delivered 'item' prop and other required props.", + "23": "Cannot get reader when fetching '$1'.", + "24": "Cannot decode source type of '$1', since there is no registered decoder for that type.", + "25": "Unknown audio type. Header: '$1'", + "26": "Uncaught error when fetching stream data from '$1'. Error info: $2.", + "1101": "Shadow extension needs 'floor-hero' extension as dependency.", + "1201": "Floor-damage extension needs 'floor-binder' extension as dependency.", + "1301": "Portal extension need 'floor-binder' extension as dependency.", + "1401": "Halo extension needs 'floor-binder' extension as dependency." + }, + "warn": { + "1": "Resource with type of 'none' is loaded.", + "2": "Repeat load of resource '$1/$2'.", + "3": "Unknown danmaku tag: $1", + "4": "Ignored a mismatched ']' in danmaku.", + "5": "Repeat post danmaku.", + "6": "Registered special danmaku element: $1.", + "7": "Unknown special danmaku element: '$1'.", + "8": "Incomplete render data is put. None will be filled to the lacked data.", + "9": "Data transfered is partially (or totally) out of range. Overflowed data will be ignored.", + "10": "Cannot resolve big image of enemy '$1;.", + "11": "Cannot resolve material $1. Material not exists.", + "12": "Cannot mark buffable with a non-number status. Key: '$1'.", + "13": "Cannot set buff of non-number status. Key: '$1'.", + "14": "Cannot add status of non-number status. Key: '$1'.", + "15": "Cannot get item of a non-item block on loc: $1,$2,$3.", + "16": "Override repeated state key: '$1'.", + "17": "Floor-damage extension needs 'floor-binder' extension as dependency.", + "18": "Uncaught error in posting like info for danmaku. Danmaku id: $1.", + "19": "Repeat light id: '$1'.", + "20": "Cannot apply animation to camera operation that does not belong to it.", + "21": "Cannot apply transition to camera operation that does not belong to it.", + "22": "There is already an active camera for delivered render item. Consider using 'Camera.for' or diable the active camera to avoid some exceptions.", + "23": "Render item with id of '$1' has already exists. Please avoid repeat id since it may cause issues when use 'getElementById'.", + "24": "Uniform block can only be used in glsl version es 300.", + "25": "Cannot activate weather since there's no weather with id of '$1'.", + "26": "Cannot set attribute when only element number specified. Use 'pointer' or 'pointerI' instead.", + "27": "Cannot vertex attribute integer point when specified as float. Use 'set' or 'pointer' instead.", + "28": "Redefinition of shader $1: '$2'", + "29": "Cannot define new texture since texture index is larger than max texture count.", + "30": "Cannot use indices named $1 since no definition for it. Please define it in advance.", + "31": "Cannot use indices since the indices instance is not belong to the program.", + "32": "Sub-image exceeds texture dimensions, auto adjusting size.", + "33": "Cannot modify MotaOffscreenCanvas2D that is freezed.", + "34": "Repeated render tag registration: '$1'.", + "35": "Cannot append child on plain render item, please ensure you have overrided 'appendChild' method in your own element.", + "36": "Cannot remove child on plain render item, please ensure you have overrided 'removeChild' method in your own element.", + "37": "Cannot execute 'requestSort' on plain render item, please ensure you have overrided 'requestSort' method in your own element.", + "38": "Using plain text in jsx is strongly not recommended, since you can hardly modify its attributes. Consider using Text element instead.", + "39": "Plain text is not supported outside Text element.", + "40": "Cannot return canvas that is not provided by this pool.", + "41": "Width of text content components must be positive. receive: $1", + "42": "Repeated Textbox id: '$1'.", + "43": "Cannot set icon of '$1', since it does not exists. Please ensure you have delivered correct icon id or number.", + "44": "Unexpected end when loading stream audio, reason: '$1'", + "45": "Audio route with id of '$1' has already existed. New route will override old route.", + "46": "Cannot pipe new StreamReader object when stream is loading.", + "47": "Audio stream decoder for audio type '$1' has already existed.", + "48": "Sample rate in stream audio must be constant.", + "49": "Repeated patch for '$1', key: '$2'.", + "50": "Unknown audio extension name: '$1'", + "51": "Cannot decode sound '$1', since audio file may not supported by 2.b.", + "52": "Cannot play sound '$1', since there is no added data named it.", + "53": "Cannot $1 audio route '$2', since there is not added route named it.", + "54": "Missing start tag for '$1', index: $2.", + "55": "Unchildable tag '$1' should follow with param.", + "56": "Method '$1' has been deprecated. Consider using '$2' instead.", + "57": "Repeated UI controller on item '$1', new controller will not work.", + "58": "Fail to set ellipse round rect, since length of 'ellipse' property should only be 2, 4, 6 or 8. delivered: $1", + "59": "Unknown icon '$1' in parsing text content.", + "60": "Repeated Tip id: '$1'.", + "61": "Unexpected recursive call of $1.update in render function. Please ensure you have to do this, if you do, ignore this warn.", + "62": "Recursive fallback fonts in '$1'.", + "63": "Uncaught promise error in waiting box component. Error reason: $1", + "1001": "Item-detail extension needs 'floor-binder' and 'floor-damage' extension as dependency.", + "1101": "Cannot add new effect to point effect instance, for there's no more reserve space for it. Please increase the max count of the instance." + } +} \ No newline at end of file diff --git a/src/core/common/logger.ts b/packages/common/src/logger.ts similarity index 86% rename from src/core/common/logger.ts rename to packages/common/src/logger.ts index ac28a07..617e294 100644 --- a/src/core/common/logger.ts +++ b/packages/common/src/logger.ts @@ -1,5 +1,5 @@ import { debounce } from 'lodash-es'; -import logInfo from '../../data/logger.json'; +import logInfo from './logger.json'; export const enum LogLevel { /** 输出所有,包括日志 */ @@ -44,13 +44,14 @@ const hideTipText = debounce(() => { logTip.style.display = 'none'; }, 5000); -const nums = new Set(['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']); +const nums = new Set('1234567890'); -const logError = logInfo.error as Record; -const logWarn = logInfo.warn as Record; +export interface ILoggerInfo { + error: Record; + warn: Record; +} export class Logger { - level: LogLevel = LogLevel.LOG; enabled: boolean = true; private catching: boolean = false; @@ -58,9 +59,10 @@ export class Logger { private catchStack: LoggerCatchInfo[][] = []; - constructor(logLevel: LogLevel) { - this.level = logLevel; - } + constructor( + public readonly level: LogLevel, + public readonly info: ILoggerInfo + ) {} private parseInfo(text: string, ...params: string[]) { let pointer = -1; @@ -95,26 +97,18 @@ export class Logger { return str; } - /** - * 设置该日志类的输出等级 - * @param level 要设置为的输出等级 - */ - setLogLevel(level: LogLevel) { - this.level = level; - } - /** * 输出报错信息 * @param code 错误代码,每个错误都应当使用唯一的错误代码 * @param params 参数 */ error(code: number, ...params: string[]) { - const info = logError[code]; + const info = this.info.error[code]; if (!info) { logger.error(16, 'error', code.toString()); return; } - const text = this.parseInfo(logError[code], ...params); + const text = this.parseInfo(info[code], ...params); if (this.catching) { this.catchedInfo.push({ level: LogLevel.ERROR, @@ -139,12 +133,12 @@ export class Logger { * @param text 警告信息 */ warn(code: number, ...params: string[]) { - const info = logWarn[code]; + const info = this.info.warn[code]; if (!info) { logger.error(16, 'warn', code.toString()); return; } - const text = this.parseInfo(logWarn[code], ...params); + const text = this.parseInfo(info[code], ...params); if (this.catching) { this.catchedInfo.push({ level: LogLevel.ERROR, @@ -206,4 +200,4 @@ export class Logger { } } -export const logger = new Logger(LogLevel.LOG); +export const logger = new Logger(LogLevel.LOG, logInfo); diff --git a/packages/render-core/package.json b/packages/render-core/package.json new file mode 100644 index 0000000..c98b2bf --- /dev/null +++ b/packages/render-core/package.json @@ -0,0 +1,6 @@ +{ + "name": "@motajs/render-core", + "dependencies": { + "@motajs/common": "workspace:*" + } +} \ No newline at end of file diff --git a/src/core/render/adapter.ts b/packages/render-core/src/adapter.ts similarity index 100% rename from src/core/render/adapter.ts rename to packages/render-core/src/adapter.ts diff --git a/src/core/fx/canvas2d.ts b/packages/render-core/src/canvas2d.ts similarity index 99% rename from src/core/fx/canvas2d.ts rename to packages/render-core/src/canvas2d.ts index b9faa27..9e7ea0a 100644 --- a/src/core/fx/canvas2d.ts +++ b/packages/render-core/src/canvas2d.ts @@ -1,5 +1,5 @@ import { EventEmitter } from 'eventemitter3'; -import { logger } from '../common/logger'; +import { logger } from '@motajs/common'; interface OffscreenCanvasEvent { /** 当被动触发resize时(例如core.domStyle.scale变化、窗口大小变化)时触发,使用size函数并不会触发 */ diff --git a/src/core/render/container.ts b/packages/render-core/src/container.ts similarity index 98% rename from src/core/render/container.ts rename to packages/render-core/src/container.ts index f11ffe3..3c09793 100644 --- a/src/core/render/container.ts +++ b/packages/render-core/src/container.ts @@ -1,4 +1,4 @@ -import { MotaOffscreenCanvas2D } from '../fx/canvas2d'; +import { MotaOffscreenCanvas2D } from './canvas2d'; import { ActionType, EventProgress, ActionEventMap } from './event'; import { ERenderItemEvent, diff --git a/src/core/render/event.ts b/packages/render-core/src/event.ts similarity index 100% rename from src/core/render/event.ts rename to packages/render-core/src/event.ts diff --git a/src/core/render/gl2.ts b/packages/render-core/src/gl2.ts similarity index 99% rename from src/core/render/gl2.ts rename to packages/render-core/src/gl2.ts index 9d9e2a0..794a46b 100644 --- a/src/core/render/gl2.ts +++ b/packages/render-core/src/gl2.ts @@ -1,9 +1,9 @@ import EventEmitter from 'eventemitter3'; -import { logger } from '../common/logger'; -import { MotaOffscreenCanvas2D } from '../fx/canvas2d'; +import { logger } from '@motajs/common'; +import { MotaOffscreenCanvas2D } from './canvas2d'; import { ERenderItemEvent, RenderItem, RenderItemPosition } from './item'; import { Transform } from './transform'; -import { isWebGL2Supported } from '../fx/webgl'; +import { isWebGL2Supported } from './utils'; export interface IGL2ProgramPrefix { readonly VERTEX: string; diff --git a/src/core/render/index.ts b/packages/render-core/src/index.ts similarity index 60% rename from src/core/render/index.ts rename to packages/render-core/src/index.ts index 9801241..02de53c 100644 --- a/src/core/render/index.ts +++ b/packages/render-core/src/index.ts @@ -1,11 +1,7 @@ -export * from './preset'; -export * from './renderer'; -export * from './style'; export * from './adapter'; -export * from './cache'; -export * from './camera'; +export * from './canvas2d'; export * from './container'; -export * from './frame'; +export * from './event'; export * from './gl2'; export * from './item'; export * from './render'; diff --git a/src/core/render/item.ts b/packages/render-core/src/item.ts similarity index 99% rename from src/core/render/item.ts rename to packages/render-core/src/item.ts index 2869be5..5a71916 100644 --- a/src/core/render/item.ts +++ b/packages/render-core/src/item.ts @@ -1,9 +1,9 @@ import { isNil } from 'lodash-es'; import { EventEmitter } from 'eventemitter3'; -import { MotaOffscreenCanvas2D } from '../fx/canvas2d'; +import { MotaOffscreenCanvas2D } from './canvas2d'; import { Ticker, TickerFn } from 'mutate-animate'; import { ITransformUpdatable, Transform } from './transform'; -import { logger } from '../common/logger'; +import { logger } from '@motajs/common'; import { ElementNamespace, ComponentInternalInstance } from 'vue'; import { transformCanvas } from './utils'; import { diff --git a/src/core/render/render.ts b/packages/render-core/src/render.ts similarity index 99% rename from src/core/render/render.ts rename to packages/render-core/src/render.ts index fb5175f..1627d57 100644 --- a/src/core/render/render.ts +++ b/packages/render-core/src/render.ts @@ -1,5 +1,5 @@ -import { logger } from '../common/logger'; -import { MotaOffscreenCanvas2D } from '../fx/canvas2d'; +import { logger } from '@motajs/common'; +import { MotaOffscreenCanvas2D } from './canvas2d'; import { Container } from './container'; import { ActionType, diff --git a/src/core/render/shader.ts b/packages/render-core/src/shader.ts similarity index 97% rename from src/core/render/shader.ts rename to packages/render-core/src/shader.ts index bc4c8f0..01379a8 100644 --- a/src/core/render/shader.ts +++ b/packages/render-core/src/shader.ts @@ -1,4 +1,4 @@ -import { MotaOffscreenCanvas2D } from '../fx/canvas2d'; +import { MotaOffscreenCanvas2D } from './canvas2d'; import { EGL2Event, GL2, GL2Program, IGL2ProgramPrefix } from './gl2'; const SHADER_PREFIX: IGL2ProgramPrefix = { diff --git a/src/core/render/sprite.ts b/packages/render-core/src/sprite.ts similarity index 96% rename from src/core/render/sprite.ts rename to packages/render-core/src/sprite.ts index 4e41a22..a55877b 100644 --- a/src/core/render/sprite.ts +++ b/packages/render-core/src/sprite.ts @@ -4,7 +4,7 @@ import { RenderItem, RenderItemPosition } from './item'; -import { MotaOffscreenCanvas2D } from '../fx/canvas2d'; +import { MotaOffscreenCanvas2D } from './canvas2d'; import { Transform } from './transform'; export interface ESpriteEvent extends ERenderItemEvent {} diff --git a/src/core/render/transform.ts b/packages/render-core/src/transform.ts similarity index 100% rename from src/core/render/transform.ts rename to packages/render-core/src/transform.ts diff --git a/src/core/render/utils.ts b/packages/render-core/src/utils.ts similarity index 75% rename from src/core/render/utils.ts rename to packages/render-core/src/utils.ts index d3fe8f1..d8d8979 100644 --- a/src/core/render/utils.ts +++ b/packages/render-core/src/utils.ts @@ -1,9 +1,9 @@ import { TimingFn } from 'mutate-animate'; -import { RenderAdapter } from './adapter'; -import { FloorViewport } from './preset/viewport'; +// import { RenderAdapter } from './adapter'; +// import { FloorViewport } from './preset/viewport'; import { JSX } from 'vue/jsx-runtime'; import { DefineComponent, DefineSetupFnComponent } from 'vue'; -import { MotaOffscreenCanvas2D } from '../fx/canvas2d'; +import { MotaOffscreenCanvas2D } from './canvas2d'; import { Transform } from './transform'; export type Props< @@ -31,16 +31,22 @@ export type ElementLocator = [ export type ElementAnchor = [x: number, y: number]; export type ElementScale = [x: number, y: number]; -export function disableViewport() { - const adapter = RenderAdapter.get('viewport'); - if (!adapter) return; - adapter.sync('disable'); +const { gl, gl2 } = checkSupport(); + +function checkSupport() { + const canvas = document.createElement('canvas'); + const canvas2 = document.createElement('canvas'); + const gl = canvas.getContext('webgl'); + const gl2 = canvas2.getContext('webgl2'); + return { gl: !!gl, gl2: !!gl2 }; } -export function enableViewport() { - const adapter = RenderAdapter.get('viewport'); - if (!adapter) return; - adapter.sync('enable'); +export function isWebGLSupported() { + return gl; +} + +export function isWebGL2Supported() { + return gl2; } /** diff --git a/packages/render-elements/package.json b/packages/render-elements/package.json new file mode 100644 index 0000000..3defbdb --- /dev/null +++ b/packages/render-elements/package.json @@ -0,0 +1,8 @@ +{ + "name": "@motajs/render-elements", + "dependencies": { + "@motajs/common": "workspace:*", + "@motajs/render-core": "workspace:*", + "@motajs/render-style": "workspace:*" + } +} \ No newline at end of file diff --git a/src/core/render/preset/animate.ts b/packages/render-elements/src/animate.ts similarity index 96% rename from src/core/render/preset/animate.ts rename to packages/render-elements/src/animate.ts index 87590d3..8a3011f 100644 --- a/src/core/render/preset/animate.ts +++ b/packages/render-elements/src/animate.ts @@ -1,10 +1,13 @@ -import { RenderAdapter } from '../adapter'; +import { + RenderAdapter, + transformCanvas, + ERenderItemEvent, + RenderItem, + Transform, + MotaOffscreenCanvas2D +} from '@motajs/render-core'; import { HeroRenderer } from './hero'; import { ILayerGroupRenderExtends, LayerGroup } from './layer'; -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; -import { ERenderItemEvent, RenderItem } from '../item'; -import { Transform } from '../transform'; -import { transformCanvas } from '../utils'; export class LayerGroupAnimate implements ILayerGroupRenderExtends { static animateList: Set = new Set(); diff --git a/src/core/render/preset/block.ts b/packages/render-elements/src/block.ts similarity index 97% rename from src/core/render/preset/block.ts rename to packages/render-elements/src/block.ts index a014470..dca40a5 100644 --- a/src/core/render/preset/block.ts +++ b/packages/render-elements/src/block.ts @@ -1,9 +1,9 @@ -import { EventEmitter } from '@/core/common/eventEmitter'; -import { logger } from '@/core/common/logger'; -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; +import { EventEmitter } from 'eventemitter3'; +import { logger } from '@motajs/common'; +import { MotaOffscreenCanvas2D } from '@motajs/render-core'; interface BlockCacherEvent { - split: () => void; + split: []; } interface BlockData { @@ -303,7 +303,10 @@ export interface ICanvasCacheItem extends IBlockCacheable { } export class CanvasCacheItem implements ICanvasCacheItem { - constructor(public canvas: MotaOffscreenCanvas2D, public symbol: number) {} + constructor( + public canvas: MotaOffscreenCanvas2D, + public symbol: number + ) {} destroy(): void { this.canvas.delete(); diff --git a/src/core/render/cache.ts b/packages/render-elements/src/cache.ts similarity index 98% rename from src/core/render/cache.ts rename to packages/render-elements/src/cache.ts index b50c140..13e61cf 100644 --- a/src/core/render/cache.ts +++ b/packages/render-elements/src/cache.ts @@ -1,7 +1,6 @@ -import { EventEmitter } from '../common/eventEmitter'; -import { logger } from '../common/logger'; -import { MotaOffscreenCanvas2D } from '../fx/canvas2d'; -import { SizedCanvasImageSource } from './preset/misc'; +import { logger } from '@motajs/common'; +import { MotaOffscreenCanvas2D } from '@motajs/render-core'; +import { SizedCanvasImageSource } from './types'; // 经过测试(https://www.measurethat.net/Benchmarks/Show/30741/1/drawimage-img-vs-canvas-vs-bitmap-cropping-fix-loading) // 得出结论,ImageBitmap和Canvas的绘制性能不如Image,于是直接画Image就行,所以缓存基本上就是存Image @@ -62,9 +61,7 @@ export interface AutotileRenderable extends RenderableDataBase { bigImage: false; } -interface TextureCacheEvent {} - -class TextureCache extends EventEmitter { +class TextureCache { tileset!: Record; material: Record; autotile!: AutotileCaches; @@ -92,7 +89,6 @@ class TextureCache extends EventEmitter { characterTurn2: Dir2[] = ['leftup', 'rightup', 'rightdown', 'leftdown']; constructor() { - super(); this.material = imageMap as Record; Mota.require('var', 'loading').once('loaded', () => { diff --git a/src/core/render/camera.ts b/packages/render-elements/src/camera.ts similarity index 99% rename from src/core/render/camera.ts rename to packages/render-elements/src/camera.ts index 63f254a..125ba53 100644 --- a/src/core/render/camera.ts +++ b/packages/render-elements/src/camera.ts @@ -1,7 +1,6 @@ import { Animation, TimingFn, Transition } from 'mutate-animate'; -import { RenderItem } from './item'; -import { logger } from '../common/logger'; -import { Transform } from './transform'; +import { RenderItem, Transform } from '@motajs/render-core'; +import { logger } from '@motajs/common'; import EventEmitter from 'eventemitter3'; export interface ICameraTranslate { diff --git a/src/core/render/preset/damage.ts b/packages/render-elements/src/damage.ts similarity index 96% rename from src/core/render/preset/damage.ts rename to packages/render-elements/src/damage.ts index c0743ef..b3e0b2b 100644 --- a/src/core/render/preset/damage.ts +++ b/packages/render-elements/src/damage.ts @@ -1,4 +1,13 @@ -import { logger } from '@/core/common/logger'; +import { + ERenderItemEvent, + RenderItem, + MotaOffscreenCanvas2D, + Transform, + transformCanvas +} from '@motajs/render-core'; +import { logger } from '@motajs/common'; +import EventEmitter from 'eventemitter3'; +import { isNil } from 'lodash-es'; import { LayerGroupFloorBinder } from './floor'; import { calNeedRenderOf, @@ -7,21 +16,29 @@ import { LayerGroup } from './layer'; import { BlockCacher, CanvasCacheItem, ICanvasCacheItem } from './block'; +// todo: 改成接口形式 import type { DamageEnemy, EnemyCollection, MapDamage } from '@/game/enemy/damage'; -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; -import { isNil } from 'lodash-es'; -import { getDamageColor } from '@/plugin/utils'; -import { ERenderItemEvent, RenderItem } from '../item'; -import EventEmitter from 'eventemitter3'; -import { Transform } from '../transform'; -import { transformCanvas } from '../utils'; const ensureFloorDamage = Mota.require('fn', 'ensureFloorDamage'); +/** + * 根据伤害大小获取颜色 + * @param damage 伤害大小 + */ +export function getDamageColor(damage: number): string { + if (typeof damage !== 'number') return '#f00'; + if (damage === 0) return '#2f2'; + if (damage < 0) return '#7f7'; + if (damage < core.status.hero.hp / 3) return '#fff'; + if (damage < (core.status.hero.hp * 2) / 3) return '#ff4'; + if (damage < core.status.hero.hp) return '#f93'; + return '#f22'; +} + interface EFloorDamageEvent { update: [floor: FloorIds]; } diff --git a/src/core/render/preset/floor.ts b/packages/render-elements/src/floor.ts similarity index 99% rename from src/core/render/preset/floor.ts rename to packages/render-elements/src/floor.ts index 931cb1f..8339919 100644 --- a/src/core/render/preset/floor.ts +++ b/packages/render-elements/src/floor.ts @@ -7,9 +7,9 @@ import { LayerGroup, LayerMovingRenderable } from './layer'; -import { texture } from '../cache'; +import { texture } from './cache'; import { sleep } from 'mutate-animate'; -import { RenderAdapter } from '../adapter'; +import { RenderAdapter } from '@motajs/render-core'; const hook = Mota.require('var', 'hook'); diff --git a/src/core/render/frame.ts b/packages/render-elements/src/frame.ts similarity index 96% rename from src/core/render/frame.ts rename to packages/render-elements/src/frame.ts index cf356b5..fefd3be 100644 --- a/src/core/render/frame.ts +++ b/packages/render-elements/src/frame.ts @@ -1,5 +1,5 @@ import EventEmitter from 'eventemitter3'; -import { RenderItem } from './item'; +import { RenderItem } from '@motajs/render-core'; export interface IAnimateFrame { updateFrameAnimate(frame: number, time: number): void; diff --git a/src/core/render/preset/graphics.ts b/packages/render-elements/src/graphics.ts similarity index 99% rename from src/core/render/preset/graphics.ts rename to packages/render-elements/src/graphics.ts index 8429642..5ad7854 100644 --- a/src/core/render/preset/graphics.ts +++ b/packages/render-elements/src/graphics.ts @@ -1,8 +1,11 @@ -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; -import { ERenderItemEvent, RenderItem } from '../item'; -import { Transform } from '../transform'; +import { + Transform, + ERenderItemEvent, + RenderItem, + MotaOffscreenCanvas2D +} from '@motajs/render-core'; +import { logger } from '@motajs/common'; import { clamp, isNil } from 'lodash-es'; -import { logger } from '@/core/common/logger'; export type CircleParams = [ cx?: number, diff --git a/src/core/render/preset/hero.ts b/packages/render-elements/src/hero.ts similarity index 98% rename from src/core/render/preset/hero.ts rename to packages/render-elements/src/hero.ts index c7e1650..fe21508 100644 --- a/src/core/render/preset/hero.ts +++ b/packages/render-elements/src/hero.ts @@ -1,9 +1,9 @@ +import { RenderAdapter } from '@motajs/render-core'; +import { logger } from '@motajs/common'; import { ILayerRenderExtends, Layer, LayerMovingRenderable } from './layer'; -import { SizedCanvasImageSource } from './misc'; -import { RenderAdapter } from '../adapter'; -import { logger } from '@/core/common/logger'; +import { SizedCanvasImageSource } from './types'; import EventEmitter from 'eventemitter3'; -import { texture } from '../cache'; +import { texture } from './cache'; import { TimingFn } from 'mutate-animate'; import { isNil } from 'lodash-es'; diff --git a/src/core/render/preset/index.ts b/packages/render-elements/src/index.ts similarity index 64% rename from src/core/render/preset/index.ts rename to packages/render-elements/src/index.ts index 915d9f7..89a9a48 100644 --- a/src/core/render/preset/index.ts +++ b/packages/render-elements/src/index.ts @@ -1,9 +1,14 @@ export * from './animate'; export * from './block'; +export * from './cache'; +export * from './camera'; export * from './damage'; export * from './floor'; +export * from './frame'; +export * from './graphics'; export * from './hero'; export * from './layer'; export * from './misc'; +export * from './types'; +export * from './utils'; export * from './viewport'; -export * from './graphics'; diff --git a/src/core/render/preset/layer.ts b/packages/render-elements/src/layer.ts similarity index 99% rename from src/core/render/preset/layer.ts rename to packages/render-elements/src/layer.ts index 6ea6f15..fe11d13 100644 --- a/src/core/render/preset/layer.ts +++ b/packages/render-elements/src/layer.ts @@ -1,15 +1,18 @@ -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; -import { Container, EContainerEvent } from '../container'; -import { Sprite } from '../sprite'; +import { + Container, + EContainerEvent, + MotaOffscreenCanvas2D, + Sprite, + RenderItem, + Transform, + RenderAdapter +} from '@motajs/render-core'; +import { logger } from '@motajs/common'; import { TimingFn } from 'mutate-animate'; -import { RenderItem } from '../item'; -import { logger } from '@/core/common/logger'; -import { RenderableData, texture } from '../cache'; +import { RenderableData, texture } from './cache'; import { BlockCacher, CanvasCacheItem, ICanvasCacheItem } from './block'; -import { Transform } from '../transform'; import { LayerFloorBinder, LayerGroupFloorBinder } from './floor'; -import { RenderAdapter } from '../adapter'; -import { IAnimateFrame, renderEmits } from '../frame'; +import { IAnimateFrame, renderEmits } from './frame'; export interface ILayerGroupRenderExtends { /** 拓展的唯一标识符 */ diff --git a/src/core/render/preset/misc.ts b/packages/render-elements/src/misc.ts similarity index 96% rename from src/core/render/preset/misc.ts rename to packages/render-elements/src/misc.ts index 3608208..86cc39e 100644 --- a/src/core/render/preset/misc.ts +++ b/packages/render-elements/src/misc.ts @@ -1,12 +1,16 @@ -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; -import { ERenderItemEvent, RenderItem, RenderItemPosition } from '../item'; -import { Transform } from '../transform'; -import { AutotileRenderable, RenderableData } from '../cache'; -import { texture } from '../cache'; +import { + ERenderItemEvent, + RenderItem, + RenderItemPosition, + Transform, + MotaOffscreenCanvas2D +} from '@motajs/render-core'; +import { Font } from '@motajs/render-style'; +import { logger } from '@motajs/common'; import { isNil } from 'lodash-es'; -import { logger } from '@/core/common/logger'; -import { IAnimateFrame, renderEmits } from '../frame'; -import { Font } from '../style/font'; +import { IAnimateFrame, renderEmits } from './frame'; +import { AutotileRenderable, RenderableData, texture } from './cache'; +import { SizedCanvasImageSource } from './types'; /** 文字的安全填充,会填充在文字的上侧和下侧,防止削顶和削底 */ const SAFE_PAD = 1; @@ -158,11 +162,6 @@ export class Text extends RenderItem { } } -export type SizedCanvasImageSource = Exclude< - CanvasImageSource, - VideoFrame | SVGElement ->; - export interface EImageEvent extends ERenderItemEvent {} export class Image extends RenderItem { diff --git a/packages/render-elements/src/types.ts b/packages/render-elements/src/types.ts new file mode 100644 index 0000000..8b6a180 --- /dev/null +++ b/packages/render-elements/src/types.ts @@ -0,0 +1,4 @@ +export type SizedCanvasImageSource = Exclude< + CanvasImageSource, + VideoFrame | SVGElement +>; diff --git a/packages/render-elements/src/utils.ts b/packages/render-elements/src/utils.ts new file mode 100644 index 0000000..952aee1 --- /dev/null +++ b/packages/render-elements/src/utils.ts @@ -0,0 +1,14 @@ +import { RenderAdapter } from '@motajs/render-core'; +import { FloorViewport } from './viewport'; + +export function disableViewport() { + const adapter = RenderAdapter.get('viewport'); + if (!adapter) return; + adapter.sync('disable'); +} + +export function enableViewport() { + const adapter = RenderAdapter.get('viewport'); + if (!adapter) return; + adapter.sync('enable'); +} diff --git a/src/core/render/preset/viewport.ts b/packages/render-elements/src/viewport.ts similarity index 99% rename from src/core/render/preset/viewport.ts rename to packages/render-elements/src/viewport.ts index 1ccadbb..a5828cd 100644 --- a/src/core/render/preset/viewport.ts +++ b/packages/render-elements/src/viewport.ts @@ -1,8 +1,8 @@ +import { RenderAdapter } from '@motajs/render-core'; import { HeroRenderer } from './hero'; import { ILayerGroupRenderExtends, LayerGroup } from './layer'; import { LayerGroupFloorBinder } from './floor'; import { hyper, TimingFn } from 'mutate-animate'; -import { RenderAdapter } from '../adapter'; export class FloorViewport implements ILayerGroupRenderExtends { id: string = 'viewport'; diff --git a/packages/render-style/package.json b/packages/render-style/package.json new file mode 100644 index 0000000..486f3f8 --- /dev/null +++ b/packages/render-style/package.json @@ -0,0 +1,6 @@ +{ + "name": "@motajs/render-style", + "dependencies": { + "@motajs/common": "workspace:*" + } +} \ No newline at end of file diff --git a/src/core/render/style/font.ts b/packages/render-style/src/font.ts similarity index 99% rename from src/core/render/style/font.ts rename to packages/render-style/src/font.ts index 953c2ac..f65c840 100644 --- a/src/core/render/style/font.ts +++ b/packages/render-style/src/font.ts @@ -1,4 +1,4 @@ -import { logger } from '@/core/common/logger'; +import { logger } from '@motajs/common'; export interface IFontConfig { /** 字体类型 */ diff --git a/src/core/render/style/index.ts b/packages/render-style/src/index.ts similarity index 100% rename from src/core/render/style/index.ts rename to packages/render-style/src/index.ts diff --git a/packages/render-vue/package.json b/packages/render-vue/package.json new file mode 100644 index 0000000..78131d0 --- /dev/null +++ b/packages/render-vue/package.json @@ -0,0 +1,9 @@ +{ + "name": "@motajs/render-vue", + "dependencies": { + "@motajs/common": "workspace:*", + "@motajs/render-core": "workspace:*", + "@motajs/render-elements": "workspace:*", + "@motajs/render-style": "workspace:*" + } +} \ No newline at end of file diff --git a/src/core/render/renderer/elements.tsx b/packages/render-vue/src/elements.tsx similarity index 89% rename from src/core/render/renderer/elements.tsx rename to packages/render-vue/src/elements.tsx index c83ec03..5c61d36 100644 --- a/src/core/render/renderer/elements.tsx +++ b/packages/render-vue/src/elements.tsx @@ -32,20 +32,24 @@ import { TextProps, WinskinProps } from './props'; -import { ERenderItemEvent, RenderItem } from '../item'; -import { ESpriteEvent } from '../sprite'; -import { EContainerEvent } from '../container'; +import { + ERenderItemEvent, + RenderItem, + ESpriteEvent, + EContainerEvent, + EShaderEvent +} from '@motajs/render-core'; import { EIconEvent, EImageEvent, ETextEvent, - EWinskinEvent -} from '../preset/misc'; -import { ELayerEvent, ELayerGroupEvent } from '../preset/layer'; -import { EAnimateEvent } from '../preset/animate'; -import { EDamageEvent } from '../preset/damage'; -import { EShaderEvent } from '../shader'; -import { EGraphicItemEvent } from '../preset/graphics'; + EWinskinEvent, + ELayerEvent, + ELayerGroupEvent, + EAnimateEvent, + EDamageEvent, + EGraphicItemEvent +} from '@motajs/render-elements'; export type WrapEventEmitterEvents = T extends string | symbol diff --git a/packages/render-vue/src/index.ts b/packages/render-vue/src/index.ts new file mode 100644 index 0000000..82c35c4 --- /dev/null +++ b/packages/render-vue/src/index.ts @@ -0,0 +1,14 @@ +import { ERenderItemEvent } from '@motajs/render-core'; +import { TagDefine } from './elements'; +import { BaseProps } from './props'; + +export type DefaultProps< + P extends BaseProps = BaseProps, + E extends ERenderItemEvent = ERenderItemEvent +> = TagDefine; + +export * from './elements'; +export * from './map'; +export * from './props'; +export * from './renderer'; +export * from './use'; diff --git a/src/core/render/renderer/map.ts b/packages/render-vue/src/map.ts similarity index 93% rename from src/core/render/renderer/map.ts rename to packages/render-vue/src/map.ts index bd4a981..f3775b5 100644 --- a/src/core/render/renderer/map.ts +++ b/packages/render-vue/src/map.ts @@ -1,20 +1,26 @@ -import { logger } from '@/core/common/logger'; -import { ERenderItemEvent, RenderItem, RenderItemPosition } from '../item'; -import { ElementNamespace, VNodeProps } from 'vue'; -import { Container, ContainerCustom } from '../container'; -import { MotaRenderer } from '../render'; -import { Sprite } from '../sprite'; +import { logger } from '@motajs/common'; +import { + ERenderItemEvent, + RenderItem, + RenderItemPosition, + Container, + ContainerCustom, + MotaRenderer, + Sprite, + Shader +} from '@motajs/render-core'; import { Comment, ETextEvent, Icon, Image, Text, - Winskin -} from '../preset/misc'; -import { Shader } from '../shader'; -import { Animate, Damage, EDamageEvent, Layer, LayerGroup } from '../preset'; -import { + Winskin, + Animate, + Damage, + EDamageEvent, + Layer, + LayerGroup, BezierCurve, Circle, Ellipse, @@ -23,7 +29,8 @@ import { QuadraticCurve, Rect, RectR -} from '../preset/graphics'; +} from '@motajs/render-elements'; +import { ElementNamespace, VNodeProps } from 'vue'; type OnItemCreate< E extends ERenderItemEvent = ERenderItemEvent, diff --git a/src/core/render/renderer/props.ts b/packages/render-vue/src/props.ts similarity index 95% rename from src/core/render/renderer/props.ts rename to packages/render-vue/src/props.ts index 48ad06c..613cea8 100644 --- a/src/core/render/renderer/props.ts +++ b/packages/render-vue/src/props.ts @@ -1,12 +1,17 @@ -import { RenderFunction, RenderItem, RenderItemPosition } from '../item'; -import { Transform } from '../transform'; +import { + RenderFunction, + RenderItem, + RenderItemPosition, + Transform, + ElementAnchor, + ElementLocator, + ElementScale, + CustomContainerRenderFn +} from '@motajs/render-core'; import { FloorLayer, ILayerGroupRenderExtends, - ILayerRenderExtends -} from '../preset/layer'; -import type { EnemyCollection } from '@/game/enemy/damage'; -import { + ILayerRenderExtends, BezierParams, CircleParams, EllipseParams, @@ -15,10 +20,10 @@ import { QuadParams, RectRCircleParams, RectREllipseParams -} from '../preset/graphics'; -import { ElementAnchor, ElementLocator, ElementScale } from '../utils'; -import { CustomContainerRenderFn } from '../container'; -import { Font } from '../style/font'; +} from '@motajs/render-elements'; +import { Font } from '@motajs/render-style'; +// todo: 改成接口 +import type { EnemyCollection } from '@/game/enemy/damage'; export interface CustomProps { _item: (props: BaseProps) => RenderItem; diff --git a/src/core/render/renderer/index.ts b/packages/render-vue/src/renderer.ts similarity index 84% rename from src/core/render/renderer/index.ts rename to packages/render-vue/src/renderer.ts index 579ebc2..fc8fb8b 100644 --- a/src/core/render/renderer/index.ts +++ b/packages/render-vue/src/renderer.ts @@ -1,20 +1,13 @@ +import { logger } from '@motajs/common'; +import { ERenderItemEvent, RenderItem } from '@motajs/render-core'; +import { ETextEvent, Text, Comment } from '@motajs/render-elements'; import { ComponentInternalInstance, createRenderer, ElementNamespace, VNodeProps } from 'vue'; -import { ERenderItemEvent, RenderItem } from '../item'; import { tagMap } from './map'; -import { logger } from '@/core/common/logger'; -import { Comment, ETextEvent, Text } from '../preset/misc'; -import { BaseProps } from './props'; -import { TagDefine } from './elements'; - -export type DefaultProps< - P extends BaseProps = BaseProps, - E extends ERenderItemEvent = ERenderItemEvent -> = TagDefine; export const { createApp, render } = createRenderer({ patchProp: function ( @@ -103,8 +96,3 @@ export const { createApp, render } = createRenderer({ } } }); - -export * from './elements'; -export * from './map'; -export * from './props'; -export * from './use'; diff --git a/src/core/render/renderer/use.ts b/packages/render-vue/src/use.ts similarity index 94% rename from src/core/render/renderer/use.ts rename to packages/render-vue/src/use.ts index 4741de8..17a1988 100644 --- a/src/core/render/renderer/use.ts +++ b/packages/render-vue/src/use.ts @@ -1,7 +1,8 @@ -import { gameKey, Hotkey } from '@/core/main/custom/hotkey'; import { Animation, Ticker, Transition } from 'mutate-animate'; +import { ERenderItemEvent, RenderItem } from '@motajs/render-core'; +// todo: 改为 monorepo +import { gameKey, Hotkey } from '@/core/main/custom/hotkey'; import { onMounted, onUnmounted } from 'vue'; -import { ERenderItemEvent, RenderItem } from '../item'; import EventEmitter from 'eventemitter3'; const ticker = new Ticker(); diff --git a/packages/render/package.json b/packages/render/package.json new file mode 100644 index 0000000..3b9b5be --- /dev/null +++ b/packages/render/package.json @@ -0,0 +1,9 @@ +{ + "name": "@motajs/render", + "dependencies": { + "@motajs/render-core": "workspace:*", + "@motajs/render-elements": "workspace:*", + "@motajs/render-style": "workspace:*", + "@motajs/render-vue": "workspace:*" + } +} \ No newline at end of file diff --git a/packages/render/src/index.ts b/packages/render/src/index.ts new file mode 100644 index 0000000..e929fe4 --- /dev/null +++ b/packages/render/src/index.ts @@ -0,0 +1,4 @@ +export * from '@motajs/render-core'; +export * from '@motajs/render-elements'; +export * from '@motajs/render-style'; +export * from '@motajs/render-vue'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1e22cea..e7c1975 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -147,6 +147,9 @@ importers: fs-extra: specifier: ^10.1.0 version: 10.1.0 + glob: + specifier: ^11.0.1 + version: 11.0.1 globals: specifier: ^15.14.0 version: 15.14.0 @@ -190,6 +193,14 @@ importers: specifier: ^8.18.0 version: 8.18.0 + packages/common: {} + + packages/render-core: + dependencies: + '@motajs/common': + specifier: workspace:* + version: link:../common + packages: '@algolia/autocomplete-core@1.17.7': @@ -1689,6 +1700,10 @@ packages: '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -2383,6 +2398,10 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -2391,6 +2410,10 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + ant-design-vue@3.2.20: resolution: {integrity: sha512-YWpMfGaGoRastIXEYfCoJiaRiDHk4chqtYhlKQM5GqPt6NfvrM1Vg2e60yHtjxlZjed91wCMm0rAmyUr7Hwzdg==} engines: {node: '>=12.22.0'} @@ -2811,6 +2834,9 @@ packages: duplexify@3.7.1: resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + electron-to-chromium@1.5.11: resolution: {integrity: sha512-R1CccCDYqndR25CaXFd6hp/u9RaaMcftMkphmvuepXr5b1vfLkRml6aWVeBhXJ7rbevHkKEMJtz8XqPf7ffmew==} @@ -2820,6 +2846,9 @@ packages: emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} @@ -3048,6 +3077,10 @@ packages: engines: {node: '>=8'} hasBin: true + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} @@ -3129,6 +3162,11 @@ packages: resolution: {integrity: sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==} engines: {node: '>= 0.10'} + glob@11.0.1: + resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==} + engines: {node: 20 || >=22} + hasBin: true + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -3395,6 +3433,10 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + jackspeak@4.1.0: + resolution: {integrity: sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==} + engines: {node: 20 || >=22} + jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} @@ -3507,6 +3549,10 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true + lru-cache@11.0.2: + resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -3598,6 +3644,10 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + minimatch@3.0.8: resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} @@ -3647,6 +3697,10 @@ packages: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + minisearch@7.1.1: resolution: {integrity: sha512-b3YZEYCEH4EdCAtYP7OlDyx7FdPwNzuNwLQ34SfJpM9dlbBZzeXndGavTrC+VCiRWomL21SWfMc6SCKO/U2ZNw==} @@ -3789,6 +3843,9 @@ packages: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} @@ -3828,6 +3885,10 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -4289,6 +4350,10 @@ packages: signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + simple-yenc@1.0.4: resolution: {integrity: sha512-5gvxpSd79e9a3V4QDYUqnqxeD4HGlhCakVpb6gMnDD7lexJggSBJRBO5h52y/iJrdXRilX9UCuDaIJhSWm5OWw==} @@ -4373,6 +4438,10 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -4386,6 +4455,10 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + strip-indent@4.0.0: resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} engines: {node: '>=12'} @@ -4797,6 +4870,14 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -6387,6 +6468,15 @@ snapshots: '@iconify/types@2.0.0': {} + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 @@ -7179,6 +7269,8 @@ snapshots: ansi-regex@5.0.1: {} + ansi-regex@6.1.0: {} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 @@ -7187,6 +7279,8 @@ snapshots: dependencies: color-convert: 2.0.1 + ansi-styles@6.2.1: {} + ant-design-vue@3.2.20(vue@3.5.13(typescript@5.5.4)): dependencies: '@ant-design/colors': 6.0.0 @@ -7631,12 +7725,16 @@ snapshots: readable-stream: 2.3.8 stream-shift: 1.0.3 + eastasianwidth@0.2.0: {} + electron-to-chromium@1.5.11: {} emoji-regex-xs@1.0.0: {} emoji-regex@8.0.0: {} + emoji-regex@9.2.2: {} + encoding@0.1.13: dependencies: iconv-lite: 0.6.3 @@ -7958,6 +8056,11 @@ snapshots: - bluebird - supports-color + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + form-data@4.0.0: dependencies: asynckit: 0.4.0 @@ -8055,6 +8158,15 @@ snapshots: to-absolute-glob: 2.0.2 unique-stream: 2.3.1 + glob@11.0.1: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.1.0 + minimatch: 10.0.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.0 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -8289,6 +8401,10 @@ snapshots: isexe@2.0.0: {} + jackspeak@4.1.0: + dependencies: + '@isaacs/cliui': 8.0.2 + jju@1.4.0: {} js-tokens@4.0.0: {} @@ -8396,6 +8512,8 @@ snapshots: dependencies: js-tokens: 4.0.0 + lru-cache@11.0.2: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -8515,6 +8633,10 @@ snapshots: min-indent@1.0.1: {} + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + minimatch@3.0.8: dependencies: brace-expansion: 1.1.11 @@ -8569,6 +8691,8 @@ snapshots: minipass@5.0.0: {} + minipass@7.1.2: {} + minisearch@7.1.1: {} minizlib@2.1.2: @@ -8724,6 +8848,8 @@ snapshots: dependencies: aggregate-error: 3.1.0 + package-json-from-dist@1.0.1: {} + pako@1.0.11: {} pako@2.1.0: {} @@ -8753,6 +8879,11 @@ snapshots: path-parse@1.0.7: {} + path-scurry@2.0.0: + dependencies: + lru-cache: 11.0.2 + minipass: 7.1.2 + path-type@4.0.0: {} pathe@1.1.2: {} @@ -9277,6 +9408,8 @@ snapshots: signal-exit@3.0.7: {} + signal-exit@4.1.0: {} + simple-yenc@1.0.4: {} slash@2.0.0: {} @@ -9352,6 +9485,12 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -9369,6 +9508,10 @@ snapshots: dependencies: ansi-regex: 5.0.1 + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + strip-indent@4.0.0: dependencies: min-indent: 1.0.1 @@ -9827,6 +9970,18 @@ snapshots: word-wrap@1.2.5: {} + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + wrappy@1.0.2: {} ws@8.18.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..522cec0 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,7 @@ +packages: + - 'packages/*' + - 'packages/*/*' + +ignore: + - 'packages/**/dist' + - 'packages/**/node_modules' diff --git a/src/common/patch.ts b/src/common/patch.ts index 872670b..52c21c9 100644 --- a/src/common/patch.ts +++ b/src/common/patch.ts @@ -1,4 +1,4 @@ -import { logger } from '@/core/common/logger'; +import { logger } from '@motajs/common'; export const enum PatchClass { Actions, diff --git a/src/core/common/resource.ts b/src/core/common/resource.ts index d85448c..851e596 100644 --- a/src/core/common/resource.ts +++ b/src/core/common/resource.ts @@ -1,6 +1,6 @@ import axios, { AxiosRequestConfig, ResponseType } from 'axios'; import { Disposable } from './disposable'; -import { logger } from './logger'; +import { logger } from '@motajs/common'; import JSZip from 'jszip'; import { EventEmitter } from './eventEmitter'; diff --git a/src/core/fx/shadow.ts b/src/core/fx/shadow.ts index 38d7311..93de23c 100644 --- a/src/core/fx/shadow.ts +++ b/src/core/fx/shadow.ts @@ -1,21 +1,17 @@ import { mat4 } from 'gl-matrix'; -import { logger } from '../common/logger'; +import { logger } from '@motajs/common'; import { WebGLColorArray, createProgram, isWebGL2Supported } from './webgl'; -import { ILayerRenderExtends, Layer } from '../render/preset/layer'; -import { HeroRenderer } from '../render/preset/hero'; -import { Sprite } from '../render/sprite'; +import { ILayerRenderExtends, Layer, HeroRenderer, Sprite } from '@motajs/render'; /** * 最大光源数量,必须设置,且光源数不能超过这个值,这个值决定了会预留多少的缓冲区,因此最好尽可能小,同时游戏过程中不可修改 * 这个值越大,对显卡尤其是显存的要求会越大,不过考虑到各种设备的性能差异,不建议超过10 */ const MAX_LIGHT_NUM = 5; -/** 阴影层的Z值 */ -const Z_INDEX = 55; // 我也不知道这个数怎么来的,试出来是这个,别动就行 const FOVY = Math.PI / 2; const ignore: Set = new Set([660, 661]); diff --git a/src/core/fx/webgl.ts b/src/core/fx/webgl.ts index 1666878..8916ffd 100644 --- a/src/core/fx/webgl.ts +++ b/src/core/fx/webgl.ts @@ -1,6 +1,6 @@ import { ensureArray, tip } from '@/plugin/utils'; import { sleep } from 'mutate-animate'; -import { logger } from '../common/logger'; +import { logger } from '@motajs/common'; const { gl, gl2 } = checkSupport(); diff --git a/src/core/index.ts b/src/core/index.ts index 0492c9d..3cc2c60 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -56,25 +56,13 @@ import EnemyTarget from '@/panel/enemyTarget.vue'; import KeyboardPanel from '@/panel/keyboard.vue'; import { MCGenerator } from './main/layout'; import { ResourceController } from './loader/controller'; -import { logger } from './common/logger'; +import { logger } from '@motajs/common'; import { Danmaku } from './main/custom/danmaku'; import * as Shadow from './fx/shadow'; -import { MotaRenderer } from './render/render'; -import { Container } from './render/container'; -import { Sprite } from './render/sprite'; -import { Image, Text } from './render/preset/misc'; -import { RenderItem } from './render/item'; -import { texture } from './render/cache'; -import { RenderAdapter } from './render/adapter'; -import { Layer } from './render/preset/layer'; -import { LayerGroupFloorBinder } from './render/preset/floor'; +import { Render } from '@motajs/client'; import { HeroKeyMover } from './main/action/move'; -import { Camera } from './render/camera'; import * as Animation from 'mutate-animate'; -import './render/index'; -import * as RenderUtils from './render/utils'; import '@/module'; -import { MotaOffscreenCanvas2D } from './fx/canvas2d'; // ----- 类注册 Mota.register('class', 'CustomToolbar', CustomToolbar); @@ -143,21 +131,7 @@ Mota.register('module', 'UIComponents', { Mota.register('module', 'MCGenerator', MCGenerator); Mota.register('module', 'Shadow', Shadow); Mota.register('module', 'Effect', {}); -Mota.register('module', 'Render', { - texture, - MotaRenderer, - Container, - Sprite, - Text, - Image, - RenderItem, - RenderAdapter, - Layer, - LayerGroupFloorBinder, - Camera, - MotaOffscreenCanvas2D, - Utils: RenderUtils -}); +Mota.register('module', 'Render', Render); Mota.register('module', 'Action', { HeroKeyMover }); diff --git a/src/core/main/custom/danmaku.ts b/src/core/main/custom/danmaku.ts index 283cf3c..7de3d09 100644 --- a/src/core/main/custom/danmaku.ts +++ b/src/core/main/custom/danmaku.ts @@ -1,6 +1,6 @@ import BoxAnimate from '@/components/boxAnimate.vue'; import { EventEmitter } from '@/core/common/eventEmitter'; -import { logger } from '@/core/common/logger'; +import { logger } from '@motajs/common'; import { ResponseBase } from '@/core/interface'; import { deleteWith, diff --git a/src/core/system/ui/controller.ts b/src/core/system/ui/controller.ts index 517a494..5d56b70 100644 --- a/src/core/system/ui/controller.ts +++ b/src/core/system/ui/controller.ts @@ -1,4 +1,4 @@ -import { logger } from '@/core/common/logger'; +import { logger } from '@motajs/common'; import EventEmitter from 'eventemitter3'; import { IGameUI, diff --git a/src/core/system/ui/instance.ts b/src/core/system/ui/instance.ts index 530d517..0523cc5 100644 --- a/src/core/system/ui/instance.ts +++ b/src/core/system/ui/instance.ts @@ -1,4 +1,4 @@ -import { Props } from '@/core/render'; +import { Props } from '@motajs/render'; import { IGameUI, IUIInstance, UIComponent, UIProps } from './shared'; import EventEmitter from 'eventemitter3'; import { markRaw, mergeProps } from 'vue'; diff --git a/src/core/system/ui/shared.ts b/src/core/system/ui/shared.ts index 639ea24..523dc5e 100644 --- a/src/core/system/ui/shared.ts +++ b/src/core/system/ui/shared.ts @@ -1,4 +1,4 @@ -import { Props } from '@/core/render'; +import { Props } from '@motajs/render'; import { DefineComponent, DefineSetupFnComponent, Ref, ShallowRef } from 'vue'; export type UIComponent = DefineSetupFnComponent | DefineComponent; diff --git a/src/game/mechanism/misc.ts b/src/game/mechanism/misc.ts index e59eefa..1745e6f 100644 --- a/src/game/mechanism/misc.ts +++ b/src/game/mechanism/misc.ts @@ -1,6 +1,6 @@ import { backDir, has } from '@/plugin/game/utils'; import { loading } from '../game'; -import type { LayerDoorAnimate } from '@/core/render/preset/floor'; +import type { LayerDoorAnimate } from '@motajs/render'; import { getSkillLevel } from '@/plugin/game/skillTree'; /** diff --git a/src/game/state/hero.ts b/src/game/state/hero.ts index 24e197f..01af7b0 100644 --- a/src/game/state/hero.ts +++ b/src/game/state/hero.ts @@ -1,4 +1,4 @@ -import { logger } from '@/core/common/logger'; +import { logger } from '@motajs/common'; import { EventEmitter } from 'eventemitter3'; import { cloneDeep, isNil } from 'lodash-es'; import { ItemState } from './item'; diff --git a/src/game/state/move.ts b/src/game/state/move.ts index bc58e03..0fe1063 100644 --- a/src/game/state/move.ts +++ b/src/game/state/move.ts @@ -1,17 +1,17 @@ import EventEmitter from 'eventemitter3'; import { backDir, checkCanMoveExtended, toDir } from './utils'; import { loading } from '../game'; -import type { RenderAdapter } from '@/core/render/adapter'; -import type { HeroRenderer } from '@/core/render/preset/hero'; -import type { FloorViewport } from '@/core/render/preset/viewport'; -import type { HeroKeyMover } from '@/core/main/action/move'; import type { + RenderAdapter, + HeroRenderer, + FloorViewport, FloorLayer, Layer, LayerGroup, - LayerMovingRenderable -} from '@/core/render/preset/layer'; -import type { LayerFloorBinder } from '@/core/render/preset/floor'; + LayerMovingRenderable, + LayerFloorBinder +} from '@motajs/render'; +import type { HeroKeyMover } from '@/core/main/action/move'; import { BluePalace, MiscData } from '../mechanism/misc'; import { sleep } from 'mutate-animate'; diff --git a/src/game/state/state.ts b/src/game/state/state.ts index 1f2047d..2ba97bc 100644 --- a/src/game/state/state.ts +++ b/src/game/state/state.ts @@ -1,6 +1,6 @@ import { Undoable } from '@/core/interface'; import { EventEmitter } from 'eventemitter3'; -import { logger } from '@/core/common/logger'; +import { logger } from '@motajs/common'; type ToJSONFunction = (data: T) => string; type FromJSONFunction = (data: string) => T; diff --git a/src/game/system.ts b/src/game/system.ts index 0c192e4..0a26f80 100644 --- a/src/game/system.ts +++ b/src/game/system.ts @@ -18,26 +18,15 @@ import type { Ref } from 'vue'; import type * as battle from './enemy/battle'; import type * as hero from './state/hero'; import type * as damage from './enemy/damage'; -import type { Logger } from '@/core/common/logger'; +import type { Logger } from '@motajs/common'; import type { Danmaku } from '@/core/main/custom/danmaku'; import type * as misc from './mechanism/misc'; -import type { texture } from '@/core/render/cache'; -import type { MotaRenderer } from '@/core/render/render'; -import type { Container } from '@/core/render/container'; -import type { Sprite } from '@/core/render/sprite'; -import type { Image, Text } from '@/core/render/preset/misc'; -import type { RenderItem } from '@/core/render/item'; -import type { RenderAdapter } from '@/core/render/adapter'; +import type { Render } from '@motajs/client'; import type { ItemState } from './state/item'; -import type { Layer } from '@/core/render/preset/layer'; -import type { LayerGroupFloorBinder } from '@/core/render/preset/floor'; import type { HeroKeyMover } from '@/core/main/action/move'; import type { BlockMover, HeroMover, ObjectMoverBase } from './state/move'; -import type { Camera } from '@/core/render/camera'; import type * as Animation from 'mutate-animate'; -import type * as RenderUtils from '@/core/render/utils'; import type { WeatherController } from '@/module/weather/weather'; -import type { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; interface ClassInterface { // 渲染进程与游戏进程通用 @@ -100,21 +89,7 @@ interface ModuleInterface { HeroSkill: typeof misc.HeroSkill; }; Effect: {}; - Render: { - texture: typeof texture; - MotaRenderer: typeof MotaRenderer; - Container: typeof Container; - Sprite: typeof Sprite; - Text: typeof Text; - Image: typeof Image; - RenderItem: typeof RenderItem; - RenderAdapter: typeof RenderAdapter; - Layer: typeof Layer; - LayerGroupFloorBinder: typeof LayerGroupFloorBinder; - Camera: typeof Camera; - MotaOffscreenCanvas2D: typeof MotaOffscreenCanvas2D; - Utils: typeof RenderUtils; - }; + Render: typeof Render; State: { ItemState: typeof ItemState; HeroMover: typeof HeroMover; diff --git a/src/module/audio/bgm.ts b/src/module/audio/bgm.ts index 4d176e6..fea850a 100644 --- a/src/module/audio/bgm.ts +++ b/src/module/audio/bgm.ts @@ -1,7 +1,7 @@ import EventEmitter from 'eventemitter3'; import { audioPlayer, AudioPlayer, AudioRoute, AudioStatus } from './player'; import { guessTypeByExt, isAudioSupport } from './support'; -import { logger } from '@/core/common/logger'; +import { logger } from '@motajs/common'; import { StreamLoader } from '../loader'; import { linear, sleep, Transition } from 'mutate-animate'; import { VolumeEffect } from './effect'; diff --git a/src/module/audio/decoder.ts b/src/module/audio/decoder.ts index 829f74d..52d3b78 100644 --- a/src/module/audio/decoder.ts +++ b/src/module/audio/decoder.ts @@ -1,4 +1,4 @@ -import { logger } from '@/core/common/logger'; +import { logger } from '@motajs/common'; import { OggVorbisDecoderWebWorker } from '@wasm-audio-decoders/ogg-vorbis'; import { OggOpusDecoderWebWorker } from 'ogg-opus-decoder'; import { AudioType, isAudioSupport } from './support'; diff --git a/src/module/audio/player.ts b/src/module/audio/player.ts index d65c440..7636a4d 100644 --- a/src/module/audio/player.ts +++ b/src/module/audio/player.ts @@ -15,7 +15,7 @@ import { VolumeEffect } from './effect'; import { isNil } from 'lodash-es'; -import { logger } from '@/core/common/logger'; +import { logger } from '@motajs/common'; import { sleep } from 'mutate-animate'; import { AudioDecoder } from './decoder'; diff --git a/src/module/audio/sound.ts b/src/module/audio/sound.ts index c1c272b..86dfc04 100644 --- a/src/module/audio/sound.ts +++ b/src/module/audio/sound.ts @@ -1,6 +1,6 @@ import EventEmitter from 'eventemitter3'; import { audioPlayer, AudioPlayer } from './player'; -import { logger } from '@/core/common/logger'; +import { logger } from '@motajs/common'; import { VolumeEffect } from './effect'; type LocationArray = [number, number, number]; diff --git a/src/module/audio/source.ts b/src/module/audio/source.ts index 4718d45..bb537fc 100644 --- a/src/module/audio/source.ts +++ b/src/module/audio/source.ts @@ -1,7 +1,7 @@ import EventEmitter from 'eventemitter3'; import { IStreamController, IStreamReader } from '../loader'; import { IAudioInput, IAudioOutput } from './effect'; -import { logger } from '@/core/common/logger'; +import { logger } from '@motajs/common'; import { AudioType } from './support'; import CodecParser, { CodecFrame, MimeType, OggPage } from 'codec-parser'; import { isNil } from 'lodash-es'; diff --git a/src/module/loader/stream.ts b/src/module/loader/stream.ts index 4c7a1f9..3a35f0a 100644 --- a/src/module/loader/stream.ts +++ b/src/module/loader/stream.ts @@ -1,4 +1,4 @@ -import { logger } from '@/core/common/logger'; +import { logger } from '@motajs/common'; import EventEmitter from 'eventemitter3'; export interface IStreamController { diff --git a/src/module/render/components/choices.tsx b/src/module/render/components/choices.tsx index ed05e3b..ad4340f 100644 --- a/src/module/render/components/choices.tsx +++ b/src/module/render/components/choices.tsx @@ -1,4 +1,4 @@ -import { DefaultProps, ElementLocator, Font, useKey } from '@/core/render'; +import { DefaultProps, ElementLocator, Font, useKey } from '@motajs/render'; import { computed, defineComponent, reactive, ref } from 'vue'; import { Background, Selection } from './misc'; import { TextContent, TextContentExpose, TextContentProps } from './textbox'; diff --git a/src/module/render/components/icons.tsx b/src/module/render/components/icons.tsx index 862a5b6..128cddf 100644 --- a/src/module/render/components/icons.tsx +++ b/src/module/render/components/icons.tsx @@ -1,4 +1,4 @@ -import { DefaultProps, ElementLocator, GraphicPropsBase } from '@/core/render'; +import { DefaultProps, ElementLocator, GraphicPropsBase } from '@motajs/render'; import { computed, defineComponent, onMounted, Ref, ref, watch } from 'vue'; import { SetupComponentOptions } from './types'; diff --git a/src/module/render/components/misc.tsx b/src/module/render/components/misc.tsx index d87ad95..3356a23 100644 --- a/src/module/render/components/misc.tsx +++ b/src/module/render/components/misc.tsx @@ -4,15 +4,15 @@ import { onTick, PathProps, Sprite -} from '@/core/render'; +} from '@motajs/render'; import { computed, defineComponent, ref, SetupContext, watch } from 'vue'; import { SetupComponentOptions } from './types'; -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; +import { MotaOffscreenCanvas2D } from '@motajs/render'; import { TextboxProps, TextContent, TextContentProps } from './textbox'; import { Scroll, ScrollExpose, ScrollProps } from './scroll'; import { transitioned } from '../use'; import { hyper } from 'mutate-animate'; -import { logger } from '@/core/common/logger'; +import { logger } from '@motajs/common'; import { GameUI, IUIMountable } from '@/core/system'; interface ProgressProps extends DefaultProps { diff --git a/src/module/render/components/page.tsx b/src/module/render/components/page.tsx index a420371..46a5ec0 100644 --- a/src/module/render/components/page.tsx +++ b/src/module/render/components/page.tsx @@ -10,7 +10,7 @@ import { } from 'vue'; import { SetupComponentOptions } from './types'; import { clamp } from 'lodash-es'; -import { DefaultProps, ElementLocator, Font } from '@/core/render'; +import { DefaultProps, ElementLocator, Font } from '@motajs/render'; /** 圆角矩形页码距离容器的边框大小,与 pageSize 相乘 */ const RECT_PAD = 0.1; diff --git a/src/module/render/components/scroll.tsx b/src/module/render/components/scroll.tsx index 5c94833..7881563 100644 --- a/src/module/render/components/scroll.tsx +++ b/src/module/render/components/scroll.tsx @@ -17,12 +17,14 @@ import { ElementLocator, RenderItem, Sprite, - Transform -} from '@/core/render'; -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; + Transform, + MotaOffscreenCanvas2D, + IActionEvent, + IWheelEvent, + MouseType +} from '@motajs/render'; import { hyper, linear, Transition } from 'mutate-animate'; import { clamp } from 'lodash-es'; -import { IActionEvent, IWheelEvent, MouseType } from '@/core/render/event'; import { transitioned } from '../use'; export const enum ScrollDirection { diff --git a/src/module/render/components/textbox.tsx b/src/module/render/components/textbox.tsx index 8ffac63..3b5ada0 100644 --- a/src/module/render/components/textbox.tsx +++ b/src/module/render/components/textbox.tsx @@ -1,4 +1,11 @@ -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; +import { + ElementLocator, + Font, + Sprite, + DefaultProps, + Text, + MotaOffscreenCanvas2D +} from '@motajs/render'; import { computed, defineComponent, @@ -12,13 +19,10 @@ import { VNode, watch } from 'vue'; -import { logger } from '@/core/common/logger'; -import { Sprite } from '@/core/render/sprite'; -import { DefaultProps } from '@/core/render/renderer'; +import { logger } from '@motajs/common'; import { isNil } from 'lodash-es'; import { SetupComponentOptions } from './types'; import EventEmitter from 'eventemitter3'; -import { Text } from '@/core/render/preset'; import { ITextContentConfig, TextContentTyper, @@ -27,7 +31,6 @@ import { WordBreak, TextAlign } from './textboxTyper'; -import { ElementLocator, Font } from '@/core/render'; export interface TextContentProps extends DefaultProps, diff --git a/src/module/render/components/textboxTyper.ts b/src/module/render/components/textboxTyper.ts index ac0fc9b..50ef18f 100644 --- a/src/module/render/components/textboxTyper.ts +++ b/src/module/render/components/textboxTyper.ts @@ -1,12 +1,12 @@ -import { logger } from '@/core/common/logger'; -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; +import { logger } from '@motajs/common'; import { AutotileRenderable, Font, onTick, RenderableData, - texture -} from '@/core/render'; + texture, + MotaOffscreenCanvas2D +} from '@motajs/render'; import EventEmitter from 'eventemitter3'; import { isNil } from 'lodash-es'; diff --git a/src/module/render/components/tip.tsx b/src/module/render/components/tip.tsx index 201b236..cbb805f 100644 --- a/src/module/render/components/tip.tsx +++ b/src/module/render/components/tip.tsx @@ -1,10 +1,10 @@ -import { DefaultProps, ElementLocator, Font, texture } from '@/core/render'; +import { DefaultProps, ElementLocator, Font, texture } from '@motajs/render'; +import { logger } from '@motajs/common'; import { computed, defineComponent, onUnmounted, ref } from 'vue'; import { SetupComponentOptions } from './types'; import { transitioned } from '../use'; import { hyper } from 'mutate-animate'; import { debounce } from 'lodash-es'; -import { logger } from '@/core/common/logger'; export interface TipProps extends DefaultProps { loc: ElementLocator; diff --git a/src/module/render/index.tsx b/src/module/render/index.tsx index b11ff97..6b966f0 100644 --- a/src/module/render/index.tsx +++ b/src/module/render/index.tsx @@ -1,5 +1,4 @@ -import { MotaRenderer } from '@/core/render'; -import { createApp } from '@/core/render'; +import { MotaRenderer, createApp } from '@motajs/render'; import { defineComponent } from 'vue'; import { UIController } from '@/core/system'; import { mainSceneUI } from './ui/main'; diff --git a/src/module/render/ui/main.tsx b/src/module/render/ui/main.tsx index 0e770c4..a44b5f0 100644 --- a/src/module/render/ui/main.tsx +++ b/src/module/render/ui/main.tsx @@ -10,7 +10,7 @@ import { Props, LayerGroup, Font -} from '@/core/render'; +} from '@motajs/render'; import { WeatherController } from '@/module/weather'; import { FloorChange } from '@/plugin/fallback'; import { LayerGroupFilter } from '@/plugin/fx/gameCanvas'; diff --git a/src/module/render/ui/settings.tsx b/src/module/render/ui/settings.tsx index 83733ee..5ed0f98 100644 --- a/src/module/render/ui/settings.tsx +++ b/src/module/render/ui/settings.tsx @@ -1,4 +1,4 @@ -import { ElementLocator } from '@/core/render'; +import { ElementLocator } from '@motajs/render'; import { GameUI, UIComponentProps } from '@/core/system'; import { defineComponent } from 'vue'; import { diff --git a/src/module/render/ui/statusBar.tsx b/src/module/render/ui/statusBar.tsx index b3486c2..91176d1 100644 --- a/src/module/render/ui/statusBar.tsx +++ b/src/module/render/ui/statusBar.tsx @@ -1,11 +1,16 @@ import { GameUI, UIComponentProps } from '@/core/system'; import { computed, defineComponent, ref, watch } from 'vue'; import { SetupComponentOptions, TextContent } from '../components'; -import { DefaultProps, ElementLocator, Sprite, Font } from '@/core/render'; +import { + DefaultProps, + ElementLocator, + Sprite, + Font, + MotaOffscreenCanvas2D +} from '@motajs/render'; import { transitionedColor } from '../use'; import { linear } from 'mutate-animate'; import { Scroll } from '../components/scroll'; -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; import { getArea, MinimapDrawer } from '@/plugin/ui/fly'; import { NumpadToolbar, diff --git a/src/module/render/ui/toolbar.tsx b/src/module/render/ui/toolbar.tsx index 27e8934..c8f5c65 100644 --- a/src/module/render/ui/toolbar.tsx +++ b/src/module/render/ui/toolbar.tsx @@ -1,4 +1,4 @@ -import { DefaultProps, ElementLocator, Font } from '@/core/render'; +import { DefaultProps, ElementLocator, Font } from '@motajs/render'; import { computed, defineComponent, ref } from 'vue'; import { SetupComponentOptions } from '../components'; import { diff --git a/src/module/weather/rain.ts b/src/module/weather/rain.ts index 995f109..c49761f 100644 --- a/src/module/weather/rain.ts +++ b/src/module/weather/rain.ts @@ -1,8 +1,12 @@ -import { Shader, ShaderProgram } from '@/core/render/shader'; +import { + Shader, + ShaderProgram, + MotaRenderer, + Container, + IShaderUniform, + UniformType +} from '@motajs/render'; import { IWeather } from './weather'; -import { MotaRenderer } from '@/core/render/render'; -import { Container } from '@/core/render/container'; -import { IShaderUniform, UniformType } from '@/core/render/gl2'; const rainVs = /* glsl */ ` in vec2 a_rainVertex; diff --git a/src/module/weather/snow.ts b/src/module/weather/snow.ts index 2924de4..b18991c 100644 --- a/src/module/weather/snow.ts +++ b/src/module/weather/snow.ts @@ -1,10 +1,15 @@ -import { Shader, ShaderProgram } from '@/core/render/shader'; +import { + Shader, + ShaderProgram, + MotaRenderer, + Container, + GL2Program, + IShaderUniform, + UniformType, + Transform, + MotaOffscreenCanvas2D +} from '@motajs/render'; import { IWeather } from './weather'; -import { MotaRenderer } from '@/core/render/render'; -import { Container } from '@/core/render/container'; -import { GL2Program, IShaderUniform, UniformType } from '@/core/render/gl2'; -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; -import { Transform } from '@/core/render/transform'; const snowVs = /* glsl */ ` in vec2 a_snowVertex; diff --git a/src/module/weather/weather.ts b/src/module/weather/weather.ts index 29eca1c..71f7ae8 100644 --- a/src/module/weather/weather.ts +++ b/src/module/weather/weather.ts @@ -1,5 +1,5 @@ -import { logger } from '@/core/common/logger'; -import { RenderItem } from '@/core/render'; +import { logger } from '@motajs/common'; +import { RenderItem } from '@motajs/render'; import { Ticker } from 'mutate-animate'; export interface IWeather { diff --git a/src/plugin/boss/barrage.ts b/src/plugin/boss/barrage.ts index c98b834..ee22b41 100644 --- a/src/plugin/boss/barrage.ts +++ b/src/plugin/boss/barrage.ts @@ -1,6 +1,9 @@ -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; -import { RenderItem, RenderItemPosition } from '@/core/render/item'; -import { Transform } from '@/core/render/transform'; +import { + MotaOffscreenCanvas2D, + RenderItem, + RenderItemPosition, + Transform +} from '@motajs/render'; import { IStateDamageable } from '@/game/state/interface'; import EventEmitter from 'eventemitter3'; import { Ticker } from 'mutate-animate'; diff --git a/src/plugin/boss/palaceBoss.ts b/src/plugin/boss/palaceBoss.ts index 013f415..d816f92 100644 --- a/src/plugin/boss/palaceBoss.ts +++ b/src/plugin/boss/palaceBoss.ts @@ -1,15 +1,14 @@ import { IStateDamageable } from '@/game/state/interface'; import { BarrageBoss, BossSprite, Hitbox } from './barrage'; -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; import { Container, - HeroRenderer, LayerGroup, MotaRenderer, RenderItem, Shader, - Transform -} from '@/core/render'; + Transform, + MotaOffscreenCanvas2D +} from '@motajs/render'; import { Pop } from '../fx/pop'; import { SplittableBall } from './palaceBossProjectile'; import { PointEffect } from '../fx/pointShader'; diff --git a/src/plugin/boss/palaceBossProjectile.ts b/src/plugin/boss/palaceBossProjectile.ts index 5df329a..5927552 100644 --- a/src/plugin/boss/palaceBossProjectile.ts +++ b/src/plugin/boss/palaceBossProjectile.ts @@ -1,5 +1,4 @@ -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; -import { Transform } from '@/core/render'; +import { Transform, MotaOffscreenCanvas2D } from '@motajs/render'; import { IStateDamageable } from '@/game/state/interface'; import { Hitbox, Projectile } from './barrage'; import type { PalaceBoss } from './palaceBoss'; @@ -223,7 +222,7 @@ export class SplittableBall extends Projectile { } } - ai(boss: PalaceBoss, time: number, frame: number, dt: number): void { + ai(boss: PalaceBoss, time: number, _frame: number, dt: number): void { if (this.splitData?.split) { if (time > this.splitData.time) { this.split(boss); @@ -256,7 +255,7 @@ export class SplittableBall extends Projectile { this.setPosition(x + this.vx * p, y + this.vy * p); } - render(canvas: MotaOffscreenCanvas2D, transform: Transform): void { + render(canvas: MotaOffscreenCanvas2D, _transform: Transform): void { if (!this.color) return; const texture = SplittableBall.ball.get(this.color); if (!texture) return; diff --git a/src/plugin/boss/towerBoss.ts b/src/plugin/boss/towerBoss.ts index 95bbd1b..cf267d0 100644 --- a/src/plugin/boss/towerBoss.ts +++ b/src/plugin/boss/towerBoss.ts @@ -1,12 +1,15 @@ -import { Shader } from '@/core/render/shader'; +import { + Shader, + MotaRenderer, + LayerGroup, + RenderItem, + MotaOffscreenCanvas2D, + Container, + HeroRenderer +} from '@motajs/render'; import { PointEffect } from '../fx/pointShader'; import { BarrageBoss, BossSprite, Hitbox } from './barrage'; -import { MotaRenderer } from '@/core/render/render'; -import { LayerGroup } from '@/core/render/preset/layer'; -import { RenderItem } from '@/core/render/item'; -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; import { Animation, hyper, power, sleep, Transition } from 'mutate-animate'; -import { Container } from '@/core/render/container'; import { ArrowProjectile, AttackProjectile, @@ -19,7 +22,6 @@ import { ThunderProjectile } from './towerBossProjectile'; import { IStateDamageable } from '@/game/state/interface'; -import { HeroRenderer } from '@/core/render/preset/hero'; import { Pop } from '../fx/pop'; import { WeatherController } from '@/module'; diff --git a/src/plugin/boss/towerBossProjectile.ts b/src/plugin/boss/towerBossProjectile.ts index bafdca2..3c046b1 100644 --- a/src/plugin/boss/towerBossProjectile.ts +++ b/src/plugin/boss/towerBossProjectile.ts @@ -1,7 +1,6 @@ import { hyper, power, TimingFn } from 'mutate-animate'; import { Hitbox, Projectile } from './barrage'; -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; -import { Transform } from '@/core/render/transform'; +import { MotaOffscreenCanvas2D, Transform } from '@motajs/render'; import type { TowerBoss } from './towerBoss'; import { IStateDamageable } from '@/game/state/interface'; import { PointEffect, PointEffectType } from '../fx/pointShader'; diff --git a/src/plugin/chase/chase.ts b/src/plugin/chase/chase.ts index 38e9906..edcff02 100644 --- a/src/plugin/chase/chase.ts +++ b/src/plugin/chase/chase.ts @@ -1,11 +1,14 @@ -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; -import { CameraAnimation } from '@/core/render/camera'; -import { Container } from '@/core/render/container'; -import { LayerGroup } from '@/core/render/preset/layer'; -import { MotaRenderer } from '@/core/render/render'; -import { Shader } from '@/core/render/shader'; -import { Sprite } from '@/core/render/sprite'; -import { disableViewport, enableViewport } from '@/core/render/utils'; +import { MotaOffscreenCanvas2D } from '@motajs/render'; +import { + CameraAnimation, + Container, + LayerGroup, + MotaRenderer, + Shader, + Sprite, + disableViewport, + enableViewport +} from '@motajs/render'; import type { HeroMover, MoveStep } from '@/game/state/move'; import EventEmitter from 'eventemitter3'; diff --git a/src/plugin/chase/chase1.ts b/src/plugin/chase/chase1.ts index 1c25a6b..3cbae34 100644 --- a/src/plugin/chase/chase1.ts +++ b/src/plugin/chase/chase1.ts @@ -1,10 +1,14 @@ import { Animation, hyper, linear, power, sleep } from 'mutate-animate'; import { Chase, ChaseData, IChaseController } from './chase'; import { completeAchievement } from '../ui/achievement'; -import { Camera, CameraAnimation, ICameraScale } from '@/core/render/camera'; -import { LayerGroup } from '@/core/render/preset/layer'; -import { MotaRenderer } from '@/core/render/render'; -import { Sprite } from '@/core/render/sprite'; +import { + Camera, + CameraAnimation, + ICameraScale, + LayerGroup, + MotaRenderer, + Sprite +} from '@motajs/render'; import { PointEffect, PointEffectType } from '../fx/pointShader'; import { bgmController } from '@/module'; diff --git a/src/plugin/fallback.ts b/src/plugin/fallback.ts index d113d4e..91d889e 100644 --- a/src/plugin/fallback.ts +++ b/src/plugin/fallback.ts @@ -1,7 +1,10 @@ -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; -import { wrapInstancedComponent } from '@/core/render'; -import { RenderItem, RenderItemPosition } from '@/core/render/item'; -import { Transform } from '@/core/render/transform'; +import { + wrapInstancedComponent, + MotaOffscreenCanvas2D, + RenderItem, + RenderItemPosition, + Transform +} from '@motajs/render'; // 渲染端的向后兼容用,会充当两个版本间过渡的作用 class Change extends RenderItem { diff --git a/src/plugin/fx/gameCanvas.ts b/src/plugin/fx/gameCanvas.ts index 71837ea..9c398ef 100644 --- a/src/plugin/fx/gameCanvas.ts +++ b/src/plugin/fx/gameCanvas.ts @@ -1,9 +1,9 @@ -import { logger } from '@/core/common/logger'; -import { LayerGroupFloorBinder } from '@/core/render/preset/floor'; +import { logger } from '@motajs/common'; import { + LayerGroupFloorBinder, ILayerGroupRenderExtends, LayerGroup -} from '@/core/render/preset/layer'; +} from '@motajs/render'; const filterMap: [FloorIds[], string][] = []; diff --git a/src/plugin/fx/halo.ts b/src/plugin/fx/halo.ts index ea880f0..12de163 100644 --- a/src/plugin/fx/halo.ts +++ b/src/plugin/fx/halo.ts @@ -1,13 +1,13 @@ -import { logger } from '@/core/common/logger'; -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; +import { logger } from '@motajs/common'; +import { MotaOffscreenCanvas2D } from '@motajs/render'; import { mainSetting } from '@/core/main/setting'; -import { LayerGroupFloorBinder } from '@/core/render/preset/floor'; import { + LayerGroupFloorBinder, ILayerGroupRenderExtends, - LayerGroup -} from '@/core/render/preset/layer'; -import { Sprite } from '@/core/render/sprite'; -import { Transform } from '@/core/render/transform'; + LayerGroup, + Sprite, + Transform +} from '@motajs/render'; const gameListener = Mota.require('var', 'gameListener'); diff --git a/src/plugin/fx/itemDetail.ts b/src/plugin/fx/itemDetail.ts index e24178f..22810f2 100644 --- a/src/plugin/fx/itemDetail.ts +++ b/src/plugin/fx/itemDetail.ts @@ -1,15 +1,13 @@ -import { logger } from '@/core/common/logger'; +import { logger } from '@motajs/common'; import { mainSetting } from '@/core/main/setting'; import { Damage, DamageRenderable, - FloorDamageExtends -} from '@/core/render/preset/damage'; -import { LayerGroupFloorBinder } from '@/core/render/preset/floor'; -import { + FloorDamageExtends, + LayerGroupFloorBinder, ILayerGroupRenderExtends, LayerGroup -} from '@/core/render/preset/layer'; +} from '@motajs/render'; interface ItemDetailData { x: number; diff --git a/src/plugin/fx/pointShader.ts b/src/plugin/fx/pointShader.ts index ea759b3..72bdded 100644 --- a/src/plugin/fx/pointShader.ts +++ b/src/plugin/fx/pointShader.ts @@ -1,7 +1,5 @@ -import { logger } from '@/core/common/logger'; -import { UniformType } from '@/core/render/gl2'; -import { Shader, ShaderProgram } from '@/core/render/shader'; -import { Transform } from '@/core/render/transform'; +import { logger } from '@motajs/common'; +import { UniformType, Shader, ShaderProgram, Transform } from '@motajs/render'; export const enum PointEffectType { /** diff --git a/src/plugin/fx/pop.ts b/src/plugin/fx/pop.ts index f2c9fba..e1ca2ee 100644 --- a/src/plugin/fx/pop.ts +++ b/src/plugin/fx/pop.ts @@ -1,7 +1,11 @@ -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; -import { wrapInstancedComponent } from '@/core/render'; -import { RenderItem, RenderItemPosition } from '@/core/render/item'; -import { Transform } from '@/core/render/transform'; +import { + wrapInstancedComponent, + RenderItem, + RenderItemPosition, + Transform, + MotaOffscreenCanvas2D +} from '@motajs/render'; + import { TimingFn } from 'mutate-animate'; interface PopData { @@ -61,7 +65,7 @@ export class Pop extends RenderItem { protected render( canvas: MotaOffscreenCanvas2D, - transform: Transform + _transform: Transform ): void { const ctx = canvas.ctx; const toDelete = new Set(); diff --git a/src/plugin/fx/portal.ts b/src/plugin/fx/portal.ts index bfcafc3..28c611d 100644 --- a/src/plugin/fx/portal.ts +++ b/src/plugin/fx/portal.ts @@ -1,12 +1,12 @@ -import { logger } from '@/core/common/logger'; -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; +import { logger } from '@motajs/common'; +import { MotaOffscreenCanvas2D } from '@motajs/render'; import { mainSetting, MotaSettingItem } from '@/core/main/setting'; -import { LayerGroupFloorBinder } from '@/core/render/preset/floor'; import { + LayerGroupFloorBinder, ILayerGroupRenderExtends, - LayerGroup -} from '@/core/render/preset/layer'; -import { Sprite } from '@/core/render/sprite'; + LayerGroup, + Sprite +} from '@motajs/render'; import type { BluePalace } from '@/game/mechanism/misc'; /** 最大粒子数 */ diff --git a/src/plugin/fx/shadow.ts b/src/plugin/fx/shadow.ts deleted file mode 100644 index c2e7a6e..0000000 --- a/src/plugin/fx/shadow.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; -import { GL2, GL2Program } from '@/core/render/gl2'; -import { Transform } from '@/core/render/transform'; - -const MAX_COUNT = 5; - -export class ShadowEffect extends GL2 { - protected preDraw( - canvas: MotaOffscreenCanvas2D, - transform: Transform, - gl: WebGL2RenderingContext, - program: GL2Program - ): boolean { - throw new Error('Method not implemented.'); - } - - protected postDraw( - canvas: MotaOffscreenCanvas2D, - transform: Transform, - gl: WebGL2RenderingContext, - program: GL2Program - ): void { - throw new Error('Method not implemented.'); - } -} - -class ShadowProgam extends GL2Program {} diff --git a/src/plugin/game/fallback.ts b/src/plugin/game/fallback.ts index 54896ea..30c52d2 100644 --- a/src/plugin/game/fallback.ts +++ b/src/plugin/game/fallback.ts @@ -1,19 +1,15 @@ -import type { RenderAdapter } from '@/core/render/adapter'; -import type { LayerGroupAnimate } from '@/core/render/preset/animate'; import type { + RenderAdapter, LayerDoorAnimate, - LayerFloorBinder -} from '@/core/render/preset/floor'; -import type { HeroRenderer } from '@/core/render/preset/hero'; -import type { Layer, LayerGroup } from '@/core/render/preset/layer'; + LayerGroupAnimate, + LayerFloorBinder, + HeroRenderer, + Layer, + LayerGroup, + FloorViewport +} from '@motajs/render'; import type { TimingFn } from 'mutate-animate'; -import { - BlockMover, - heroMoveCollection, - IMoveController, - MoveStep -} from '@/game/state/move'; -import type { FloorViewport } from '@/core/render/preset/viewport'; +import { BlockMover, heroMoveCollection, MoveStep } from '@/game/state/move'; // 向后兼容用,会充当两个版本间过渡的作用 diff --git a/src/plugin/loopMap.ts b/src/plugin/loopMap.ts index 3f3d533..10c3fd6 100644 --- a/src/plugin/loopMap.ts +++ b/src/plugin/loopMap.ts @@ -1,10 +1,12 @@ -import { Container } from '@/core/render/container'; -import { FloorDamageExtends } from '@/core/render/preset/damage'; -import { LayerGroupFloorBinder } from '@/core/render/preset/floor'; -import { FloorLayer, LayerGroup } from '@/core/render/preset/layer'; -import { FloorViewport } from '@/core/render/preset/viewport'; -import { MotaRenderer } from '@/core/render/render'; -import { Transform } from '@/core/render/transform'; +import { + Container, + FloorDamageExtends, + LayerGroupFloorBinder, + FloorLayer, + LayerGroup, + FloorViewport, + MotaRenderer +} from '@motajs/render'; import { FloorItemDetail } from '@/plugin/fx/itemDetail'; const loopMaps = Mota.require('module', 'Mechanism').MiscData.loopMaps; diff --git a/src/plugin/utils.ts b/src/plugin/utils.ts index f4b534e..8ef9884 100644 --- a/src/plugin/utils.ts +++ b/src/plugin/utils.ts @@ -9,7 +9,7 @@ import { decompressFromBase64 } from 'lz-string'; import { Keyboard, KeyboardEmits } from '@/core/main/custom/keyboard'; import { fixedUi, mainUi } from '@/core/main/init/ui'; import { isAssist } from '@/core/main/custom/hotkey'; -import { logger } from '@/core/common/logger'; +import { logger } from '@motajs/common'; type CanParseCss = keyof { [P in keyof CSSStyleDeclaration as CSSStyleDeclaration[P] extends string diff --git a/src/ui/danmakuEditor.vue b/src/ui/danmakuEditor.vue index ae778bd..9a4e038 100644 --- a/src/ui/danmakuEditor.vue +++ b/src/ui/danmakuEditor.vue @@ -77,7 +77,7 @@ @click="addIcon(icon as AllIds)" > { + const packageName = path.basename(path.dirname(srcPath)); + return { + find: `@motajs/${packageName}`, + replacement: path.resolve(__dirname, srcPath), + }; +}); + // https://vitejs.dev/config/ export default defineConfig({ plugins: [ @@ -36,6 +45,7 @@ export default defineConfig({ base: `./`, resolve: { alias: { + ...aliases, '@': resolve(__dirname, './src'), '@ui': resolve(__dirname, './src/ui') }