Compare commits

...

5 Commits

135 changed files with 930 additions and 782 deletions

View File

@ -15,7 +15,6 @@
},
"dependencies": {
"@ant-design/icons-vue": "^6.1.0",
"@emotion/css": "^11.13.0",
"@vueuse/core": "^10.11.1",
"@wasm-audio-decoders/ogg-vorbis": "^0.1.16",
"anon-tokyo": "0.0.0-alpha.0",
@ -25,7 +24,6 @@
"codec-parser": "^2.5.0",
"eventemitter3": "^5.0.1",
"gl-matrix": "^3.4.3",
"gsap": "^3.12.5",
"jszip": "^3.10.1",
"lodash-es": "^4.17.21",
"lz-string": "^1.5.0",
@ -62,6 +60,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",

View File

@ -0,0 +1,6 @@
{
"name": "@motajs/client",
"dependencies": {
"@motajs/render": "workspace:*"
}
}

View File

@ -0,0 +1 @@
export * as Render from '@motajs/render';

View File

@ -0,0 +1,3 @@
{
"name": "@motajs/common"
}

View File

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

View File

@ -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."
}
}

View File

@ -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<number, string>;
const logWarn = logInfo.warn as Record<number, string>;
export interface ILoggerInfo {
error: Record<number, string>;
warn: Record<number, string>;
}
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);

View File

@ -0,0 +1,6 @@
{
"name": "@motajs/legacy-client",
"dependencies": {
"@motajs/common": "workspace:*"
}
}

View File

@ -0,0 +1,6 @@
{
"name": "@motajs/legacy-common",
"dependencies": {
"@motajs/common": "workspace:*"
}
}

View File

@ -1,9 +1,9 @@
import { EventEmitter } from './eventEmitter';
import { EventEmitter } from 'eventemitter3';
interface DisposableEvent<T> {
active: (value: T) => void;
dispose: (value: T) => void;
destroy: () => void;
active: [value: T];
dispose: [value: T];
destroy: [];
}
export class Disposable<T> extends EventEmitter<DisposableEvent<T>> {

View File

@ -1,6 +1,4 @@
function has<T>(value: T): value is NonNullable<T> {
return value !== null && value !== undefined;
}
import { isNil } from 'lodash-es';
export type Callable = (...params: any) => any;
@ -101,7 +99,7 @@ export class EventEmitter<T extends Record<keyof T, Callable> = {}> {
emit(event: string, ...params: any[]): any[] {
this.emitted.add(event);
const events = (this.events[event] ??= []);
if (!!this.emitter[event]) {
if (this.emitter[event]) {
const returns = this.emitter[event]!(events, ...params);
this.events[event] = events.filter(v => !v.once);
return returns;
@ -121,7 +119,7 @@ export class EventEmitter<T extends Record<keyof T, Callable> = {}> {
* @param event
* @param fn
*/
// @ts-ignore
// @ts-expect-error 无法推导
setEmitter<K extends keyof T>(event: K, fn?: EmitFn<T[K]>): void;
setEmitter(event: string, fn?: EmitFn<Callable>): void;
setEmitter(event: string, fn?: EmitFn<Callable>): void {
@ -143,7 +141,7 @@ export class EventEmitter<T extends Record<keyof T, Callable> = {}> {
*/
removeAllListeners(event: string): void;
removeAllListeners(event?: string | keyof T) {
if (has(event)) this.events[event] = [];
if (!isNil(event)) this.events[event] = [];
else this.events = {};
}
}

View File

@ -0,0 +1,4 @@
export * from './patch';
export * from './disposable';
export * from './eventEmitter';
export * from './resource';

View File

@ -1,4 +1,4 @@
import { logger } from '@/core/common/logger';
import { logger } from '@motajs/common';
export const enum PatchClass {
Actions,

View File

@ -1,8 +1,8 @@
import axios, { AxiosRequestConfig, ResponseType } from 'axios';
import { Disposable } from './disposable';
import { logger } from './logger';
import JSZip from 'jszip';
import { EventEmitter } from './eventEmitter';
import { Disposable } from './disposable';
import { logger } from '@motajs/common';
import JSZip from 'jszip';
type ProgressFn = (now: number, total: number) => void;

View File

@ -0,0 +1,6 @@
{
"name": "@motajs/legacy-data",
"dependencies": {
"@motajs/common": "workspace:*"
}
}

View File

@ -0,0 +1,6 @@
{
"name": "@motajs/render-core",
"dependencies": {
"@motajs/common": "workspace:*"
}
}

View File

@ -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函数并不会触发 */

View File

@ -1,4 +1,4 @@
import { MotaOffscreenCanvas2D } from '../fx/canvas2d';
import { MotaOffscreenCanvas2D } from './canvas2d';
import { ActionType, EventProgress, ActionEventMap } from './event';
import {
ERenderItemEvent,

View File

@ -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;

View File

@ -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';

View File

@ -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 {

View File

@ -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,

View File

@ -1,4 +1,4 @@
import { MotaOffscreenCanvas2D } from '../fx/canvas2d';
import { MotaOffscreenCanvas2D } from './canvas2d';
import { EGL2Event, GL2, GL2Program, IGL2ProgramPrefix } from './gl2';
const SHADER_PREFIX: IGL2ProgramPrefix = {

View File

@ -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 {}

View File

@ -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<FloorViewport>('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<FloorViewport>('viewport');
if (!adapter) return;
adapter.sync('enable');
export function isWebGLSupported() {
return gl;
}
export function isWebGL2Supported() {
return gl2;
}
/**

View File

@ -0,0 +1,8 @@
{
"name": "@motajs/render-elements",
"dependencies": {
"@motajs/common": "workspace:*",
"@motajs/render-core": "workspace:*",
"@motajs/render-style": "workspace:*"
}
}

View File

@ -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<LayerGroupAnimate> = new Set();

View File

@ -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();

View File

@ -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<TextureCacheEvent> {
class TextureCache {
tileset!: Record<string, HTMLImageElement>;
material: Record<ImageMapKeys, HTMLImageElement>;
autotile!: AutotileCaches;
@ -92,7 +89,6 @@ class TextureCache extends EventEmitter<TextureCacheEvent> {
characterTurn2: Dir2[] = ['leftup', 'rightup', 'rightdown', 'leftdown'];
constructor() {
super();
this.material = imageMap as Record<ImageMapKeys, HTMLImageElement>;
Mota.require('var', 'loading').once('loaded', () => {

View File

@ -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 {

View File

@ -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];
}

View File

@ -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');

View File

@ -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;

View File

@ -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,

View File

@ -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';

View File

@ -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';

View File

@ -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 {
/** 拓展的唯一标识符 */

View File

@ -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<ETextEvent> {
}
}
export type SizedCanvasImageSource = Exclude<
CanvasImageSource,
VideoFrame | SVGElement
>;
export interface EImageEvent extends ERenderItemEvent {}
export class Image extends RenderItem<EImageEvent> {

View File

@ -0,0 +1,4 @@
export type SizedCanvasImageSource = Exclude<
CanvasImageSource,
VideoFrame | SVGElement
>;

View File

@ -0,0 +1,14 @@
import { RenderAdapter } from '@motajs/render-core';
import { FloorViewport } from './viewport';
export function disableViewport() {
const adapter = RenderAdapter.get<FloorViewport>('viewport');
if (!adapter) return;
adapter.sync('disable');
}
export function enableViewport() {
const adapter = RenderAdapter.get<FloorViewport>('viewport');
if (!adapter) return;
adapter.sync('enable');
}

View File

@ -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';

View File

@ -0,0 +1,6 @@
{
"name": "@motajs/render-style",
"dependencies": {
"@motajs/common": "workspace:*"
}
}

View File

@ -1,4 +1,4 @@
import { logger } from '@/core/common/logger';
import { logger } from '@motajs/common';
export interface IFontConfig {
/** 字体类型 */

View File

@ -0,0 +1,9 @@
{
"name": "@motajs/render-vue",
"dependencies": {
"@motajs/common": "workspace:*",
"@motajs/render-core": "workspace:*",
"@motajs/render-elements": "workspace:*",
"@motajs/render-style": "workspace:*"
}
}

View File

@ -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 EventEmitter.ValidEventTypes> =
T extends string | symbol

View File

@ -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<P, E>;
export * from './elements';
export * from './map';
export * from './props';
export * from './renderer';
export * from './use';

View File

@ -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,

View File

@ -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;

View File

@ -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<P, E>;
export const { createApp, render } = createRenderer<RenderItem, RenderItem>({
patchProp: function (
@ -103,8 +96,3 @@ export const { createApp, render } = createRenderer<RenderItem, RenderItem>({
}
}
});
export * from './elements';
export * from './map';
export * from './props';
export * from './use';

View File

@ -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();

View File

@ -0,0 +1,9 @@
{
"name": "@motajs/render",
"dependencies": {
"@motajs/render-core": "workspace:*",
"@motajs/render-elements": "workspace:*",
"@motajs/render-style": "workspace:*",
"@motajs/render-vue": "workspace:*"
}
}

View File

@ -0,0 +1,4 @@
export * from '@motajs/render-core';
export * from '@motajs/render-elements';
export * from '@motajs/render-style';
export * from '@motajs/render-vue';

View File

@ -0,0 +1,7 @@
{
"name": "@motajs/system-ui",
"dependencies": {
"@motajs/common": "workspace:*",
"@motajs/render": "workspace:*"
}
}

View File

@ -1,6 +1,6 @@
import { defineComponent, VNode } from 'vue';
import { IUIMountable } from './shared';
import { SetupComponentOptions } from '@/module';
import { SetupComponentOptions } from './types';
export interface UIContainerProps {
controller: IUIMountable;

View File

@ -1,4 +1,4 @@
import { logger } from '@/core/common/logger';
import { logger } from '@motajs/common';
import EventEmitter from 'eventemitter3';
import {
IGameUI,

View File

@ -1,5 +1,6 @@
export * from './controller';
export * from './ui';
export * from './shared';
export * from './instance';
export * from './container';
export * from './controller';
export * from './instance';
export * from './shared';
export * from './types';
export * from './ui';

View File

@ -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';

View File

@ -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<any> | DefineComponent;

View File

@ -0,0 +1,12 @@
import { ComponentOptions, EmitsOptions, SlotsType } from 'vue';
export type SetupComponentOptions<
Props extends Record<string, any>,
E extends EmitsOptions = {},
EE extends string = string,
S extends SlotsType = {}
> = Pick<ComponentOptions, 'name' | 'inheritAttrs'> & {
props?: (keyof Props)[];
emits?: E | EE[];
slots?: S;
};

View File

@ -0,0 +1,6 @@
{
"name": "@motajs/system",
"dependencies": {
"@motajs/system-ui": "workspace:*"
}
}

View File

@ -0,0 +1 @@
export * as UI from '@motajs/system-ui';

View File

@ -11,9 +11,6 @@ importers:
'@ant-design/icons-vue':
specifier: ^6.1.0
version: 6.1.0(vue@3.5.13(typescript@5.5.4))
'@emotion/css':
specifier: ^11.13.0
version: 11.13.0
'@vueuse/core':
specifier: ^10.11.1
version: 10.11.1(vue@3.5.13(typescript@5.5.4))
@ -41,9 +38,6 @@ importers:
gl-matrix:
specifier: ^3.4.3
version: 3.4.3
gsap:
specifier: ^3.12.5
version: 3.12.5
jszip:
specifier: ^3.10.1
version: 3.10.1
@ -147,6 +141,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 +187,83 @@ importers:
specifier: ^8.18.0
version: 8.18.0
packages/client:
dependencies:
'@motajs/render':
specifier: workspace:*
version: link:../render
packages/common: {}
packages/render:
dependencies:
'@motajs/render-core':
specifier: workspace:*
version: link:../render-core
'@motajs/render-elements':
specifier: workspace:*
version: link:../render-elements
'@motajs/render-style':
specifier: workspace:*
version: link:../render-style
'@motajs/render-vue':
specifier: workspace:*
version: link:../render-vue
packages/render-core:
dependencies:
'@motajs/common':
specifier: workspace:*
version: link:../common
packages/render-elements:
dependencies:
'@motajs/common':
specifier: workspace:*
version: link:../common
'@motajs/render-core':
specifier: workspace:*
version: link:../render-core
'@motajs/render-style':
specifier: workspace:*
version: link:../render-style
packages/render-style:
dependencies:
'@motajs/common':
specifier: workspace:*
version: link:../common
packages/render-vue:
dependencies:
'@motajs/common':
specifier: workspace:*
version: link:../common
'@motajs/render-core':
specifier: workspace:*
version: link:../render-core
'@motajs/render-elements':
specifier: workspace:*
version: link:../render-elements
'@motajs/render-style':
specifier: workspace:*
version: link:../render-style
packages/system:
dependencies:
'@motajs/system-ui':
specifier: workspace:*
version: link:../system-ui
packages/system-ui:
dependencies:
'@motajs/common':
specifier: workspace:*
version: link:../common
'@motajs/render':
specifier: workspace:*
version: link:../render
packages:
'@algolia/autocomplete-core@1.17.7':
@ -1179,36 +1253,6 @@ packages:
'@eggjs/yauzl@2.11.0':
resolution: {integrity: sha512-Jq+k2fCZJ3i3HShb0nxLUiAgq5pwo8JTT1TrH22JoehZQ0Nm2dvByGIja1NYfNyuE4Tx5/Dns5nVsBN/mlC8yg==}
'@emotion/babel-plugin@11.12.0':
resolution: {integrity: sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==}
'@emotion/cache@11.13.1':
resolution: {integrity: sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==}
'@emotion/css@11.13.0':
resolution: {integrity: sha512-BUk99ylT+YHl+W/HN7nv1RCTkDYmKKqa1qbvM/qLSQEg61gipuBF5Hptk/2/ERmX2DCv0ccuFGhz9i0KSZOqPg==}
'@emotion/hash@0.9.2':
resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==}
'@emotion/memoize@0.9.0':
resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==}
'@emotion/serialize@1.3.0':
resolution: {integrity: sha512-jACuBa9SlYajnpIVXB+XOXnfJHyckDfe6fOpORIM6yhBDlqGuExvDdZYHDQGoDf3bZXGv7tNr+LpLjJqiEQ6EA==}
'@emotion/sheet@1.4.0':
resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==}
'@emotion/unitless@0.9.0':
resolution: {integrity: sha512-TP6GgNZtmtFaFcsOgExdnfxLLpRDla4Q66tnenA9CktvVSdNKDvMVuUah4QvWPIpNjrWsGg3qeGo9a43QooGZQ==}
'@emotion/utils@1.4.0':
resolution: {integrity: sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ==}
'@emotion/weak-memoize@0.4.0':
resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==}
'@esbuild/aix-ppc64@0.21.5':
resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
engines: {node: '>=12'}
@ -1689,6 +1733,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'}
@ -2061,9 +2109,6 @@ packages:
'@types/normalize-package-data@2.4.4':
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
'@types/parse-json@4.0.2':
resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
'@types/resolve@1.20.2':
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
@ -2383,6 +2428,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 +2440,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'}
@ -2445,10 +2498,6 @@ packages:
b3b@0.0.1:
resolution: {integrity: sha512-wWUK79hNEsHN1PTHwHsGYpTNupgaovM39g6374uoIL1gfVSwK2q9flM1DFyvSEYkELRWf5aMGSf7bkGGNSl0Jw==}
babel-plugin-macros@3.1.0:
resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
engines: {node: '>=10', npm: '>=6'}
babel-plugin-polyfill-corejs2@0.4.11:
resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==}
peerDependencies:
@ -2697,10 +2746,6 @@ packages:
core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
cosmiconfig@7.1.0:
resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
engines: {node: '>=10'}
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
@ -2811,6 +2856,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 +2868,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==}
@ -3008,9 +3059,6 @@ packages:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
find-root@1.1.0:
resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
find-up@5.0.0:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
@ -3048,6 +3096,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 +3181,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
@ -3163,9 +3220,6 @@ packages:
graphemer@1.4.0:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
gsap@3.12.5:
resolution: {integrity: sha512-srBfnk4n+Oe/ZnMIOXt3gT605BX9x5+rh/prT2F1SsNJsU1XuMiP0E2aptW481OnonOGACZWBqseH5Z7csHxhQ==}
hard-rejection@2.1.0:
resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==}
engines: {node: '>=6'}
@ -3395,6 +3449,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 +3565,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 +3660,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 +3713,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 +3859,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,9 +3901,9 @@ packages:
path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
path-scurry@2.0.0:
resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
engines: {node: 20 || >=22}
pathe@1.1.2:
resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
@ -4289,6 +4362,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==}
@ -4318,10 +4395,6 @@ packages:
source-map-support@0.5.21:
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
source-map@0.5.7:
resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
engines: {node: '>=0.10.0'}
source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
@ -4373,6 +4446,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 +4463,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'}
@ -4397,9 +4478,6 @@ packages:
strnum@1.0.5:
resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==}
stylis@4.2.0:
resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==}
superjson@2.2.2:
resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==}
engines: {node: '>=16'}
@ -4797,6 +4875,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==}
@ -4826,10 +4912,6 @@ packages:
yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
yaml@1.10.2:
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
engines: {node: '>= 6'}
yargs-parser@20.2.9:
resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
engines: {node: '>=10'}
@ -6062,60 +6144,6 @@ snapshots:
buffer-crc32: 0.2.13
fd-slicer2: 1.2.0
'@emotion/babel-plugin@11.12.0':
dependencies:
'@babel/helper-module-imports': 7.24.7
'@babel/runtime': 7.25.0
'@emotion/hash': 0.9.2
'@emotion/memoize': 0.9.0
'@emotion/serialize': 1.3.0
babel-plugin-macros: 3.1.0
convert-source-map: 1.9.0
escape-string-regexp: 4.0.0
find-root: 1.1.0
source-map: 0.5.7
stylis: 4.2.0
transitivePeerDependencies:
- supports-color
'@emotion/cache@11.13.1':
dependencies:
'@emotion/memoize': 0.9.0
'@emotion/sheet': 1.4.0
'@emotion/utils': 1.4.0
'@emotion/weak-memoize': 0.4.0
stylis: 4.2.0
'@emotion/css@11.13.0':
dependencies:
'@emotion/babel-plugin': 11.12.0
'@emotion/cache': 11.13.1
'@emotion/serialize': 1.3.0
'@emotion/sheet': 1.4.0
'@emotion/utils': 1.4.0
transitivePeerDependencies:
- supports-color
'@emotion/hash@0.9.2': {}
'@emotion/memoize@0.9.0': {}
'@emotion/serialize@1.3.0':
dependencies:
'@emotion/hash': 0.9.2
'@emotion/memoize': 0.9.0
'@emotion/unitless': 0.9.0
'@emotion/utils': 1.4.0
csstype: 3.1.3
'@emotion/sheet@1.4.0': {}
'@emotion/unitless@0.9.0': {}
'@emotion/utils@1.4.0': {}
'@emotion/weak-memoize@0.4.0': {}
'@esbuild/aix-ppc64@0.21.5':
optional: true
@ -6387,6 +6415,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
@ -6757,8 +6794,6 @@ snapshots:
'@types/normalize-package-data@2.4.4': {}
'@types/parse-json@4.0.2': {}
'@types/resolve@1.20.2': {}
'@types/unist@3.0.3': {}
@ -7179,6 +7214,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 +7224,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
@ -7258,12 +7297,6 @@ snapshots:
b3b@0.0.1: {}
babel-plugin-macros@3.1.0:
dependencies:
'@babel/runtime': 7.25.0
cosmiconfig: 7.1.0
resolve: 1.22.8
babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.2):
dependencies:
'@babel/compat-data': 7.25.2
@ -7535,14 +7568,6 @@ snapshots:
core-util-is@1.0.3: {}
cosmiconfig@7.1.0:
dependencies:
'@types/parse-json': 4.0.2
import-fresh: 3.3.0
parse-json: 5.2.0
path-type: 4.0.0
yaml: 1.10.2
cross-spawn@7.0.6:
dependencies:
path-key: 3.1.1
@ -7631,12 +7656,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
@ -7904,8 +7933,6 @@ snapshots:
dependencies:
to-regex-range: 5.0.1
find-root@1.1.0: {}
find-up@5.0.0:
dependencies:
locate-path: 6.0.0
@ -7958,6 +7985,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 +8087,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
@ -8090,8 +8131,6 @@ snapshots:
graphemer@1.4.0: {}
gsap@3.12.5: {}
hard-rejection@2.1.0: {}
has-flag@3.0.0: {}
@ -8289,6 +8328,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 +8439,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 +8560,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 +8618,8 @@ snapshots:
minipass@5.0.0: {}
minipass@7.1.2: {}
minisearch@7.1.1: {}
minizlib@2.1.2:
@ -8724,6 +8775,8 @@ snapshots:
dependencies:
aggregate-error: 3.1.0
package-json-from-dist@1.0.1: {}
pako@1.0.11: {}
pako@2.1.0: {}
@ -8753,7 +8806,10 @@ snapshots:
path-parse@1.0.7: {}
path-type@4.0.0: {}
path-scurry@2.0.0:
dependencies:
lru-cache: 11.0.2
minipass: 7.1.2
pathe@1.1.2: {}
@ -9277,6 +9333,8 @@ snapshots:
signal-exit@3.0.7: {}
signal-exit@4.1.0: {}
simple-yenc@1.0.4: {}
slash@2.0.0: {}
@ -9305,8 +9363,6 @@ snapshots:
buffer-from: 1.1.2
source-map: 0.6.1
source-map@0.5.7: {}
source-map@0.6.1: {}
space-separated-tokens@2.0.2: {}
@ -9352,6 +9408,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 +9431,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
@ -9377,8 +9443,6 @@ snapshots:
strnum@1.0.5: {}
stylis@4.2.0: {}
superjson@2.2.2:
dependencies:
copy-anything: 3.0.5
@ -9827,6 +9891,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: {}
@ -9839,8 +9915,6 @@ snapshots:
yallist@4.0.0: {}
yaml@1.10.2: {}
yargs-parser@20.2.9: {}
yazl@2.5.1:

7
pnpm-workspace.yaml Normal file
View File

@ -0,0 +1,7 @@
packages:
- 'packages/*'
- 'packages/*/*'
ignore:
- 'packages/**/dist'
- 'packages/**/node_modules'

View File

@ -1,75 +0,0 @@
import { EventEmitter } from 'eventemitter3';
interface MonoStoreEvent<T> {
change: [before: T | undefined, after: T | undefined];
}
/**
* 使
*
*/
export class MonoStore<T> extends EventEmitter<MonoStoreEvent<T>> {
list: Map<string, T> = new Map();
using?: T;
usingId?: string;
/**
* 使id的数据
* @param id 使id
*/
use(id: string) {
const before = this.using;
this.using = this.list.get(id);
this.usingId = id;
this.emit('change', before, this.using);
}
static toJSON(data: MonoStore<any>) {
return JSON.stringify({
now: data.usingId,
data: [...data.list]
});
}
static fromJSON<T>(data: string): MonoStore<T> {
const d = JSON.parse(data);
const arr: [string, T][] = d.data;
const store = new MonoStore<T>();
arr.forEach(([key, value]) => {
store.list.set(key, value);
});
if (d.now) store.use(d.now);
return store;
}
}
export namespace SerializeUtils {
interface StructSerializer<T> {
toJSON(data: T): string;
fromJSON(data: string): T;
}
/**
* Map键值对序列化函数使Map作为state使
*/
export const mapSerializer: StructSerializer<Map<any, any>> = {
toJSON(data) {
return JSON.stringify([...data]);
},
fromJSON(data) {
return new Map(JSON.parse(data));
}
};
/**
* Set集合序列化函数使Set作为state使
*/
export const setSerializer: StructSerializer<Set<any>> = {
toJSON(data) {
return JSON.stringify([...data]);
},
fromJSON(data) {
return new Set(JSON.parse(data));
}
};
}

View File

@ -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<AllNumbers> = new Set([660, 661]);

View File

@ -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();

View File

@ -55,26 +55,13 @@ import EnemySpecial from '@/panel/enemySpecial.vue';
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);
@ -87,7 +74,6 @@ Mota.register('class', 'MotaSetting', MotaSetting);
Mota.register('class', 'SettingDisplayer', SettingDisplayer);
Mota.register('class', 'UiController', UiController);
Mota.register('class', 'MComponent', MComponent);
Mota.register('class', 'ResourceController', ResourceController);
Mota.register('class', 'Danmaku', Danmaku);
// ----- 函数注册
Mota.register('fn', 'm', m);
@ -143,21 +129,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
});

View File

@ -1,30 +0,0 @@
import { EventEmitter } from '../common/eventEmitter';
interface ResourceControllerEvent<D = any, T = D> {
add: (uri: string, data: D) => void;
delete: (uri: string, content: T) => void;
}
export abstract class ResourceController<
D,
T = D
> extends EventEmitter<ResourceControllerEvent> {
list: Record<string, T> = {};
/**
*
* @param uri uri
* @param data
*/
abstract add(uri: string, data: D): void;
/**
*
* @param uri uri
*/
remove(uri: string) {
const content = this.list[uri];
delete this.list[uri];
// this.emit(uri, content);
}
}

View File

@ -1,6 +1,6 @@
import BoxAnimate from '@/components/boxAnimate.vue';
import { EventEmitter } from '@/core/common/eventEmitter';
import { logger } from '@/core/common/logger';
import { EventEmitter } from 'eventemitter3';
import { logger } from '@motajs/common';
import { ResponseBase } from '@/core/interface';
import {
deleteWith,
@ -53,9 +53,9 @@ interface PostLikeResponse extends ResponseBase {
}
interface DanmakuEvent {
showStart: (danmaku: Danmaku) => void;
showEnd: (danmaku: Danmaku) => void;
like: (liked: boolean, danmaku: Danmaku) => void;
showStart: [danmaku: Danmaku];
showEnd: [danmaku: Danmaku];
like: [liked: boolean, danmaku: Danmaku];
}
type SpecContentFn = (content: string, type: string) => VNode;

View File

@ -1,4 +1,4 @@
import { EventEmitter, Listener } from '@/core/common/eventEmitter';
import { EventEmitter, Listener } from '@motajs/legacy-common';
import { KeyCode } from '@/plugin/keyCodes';
import { gameKey } from './hotkey';
import { unwarpBinary } from './hotkey';

View File

@ -1,4 +1,4 @@
import { EventEmitter } from '@/core/common/eventEmitter';
import { EventEmitter } from '@motajs/legacy-common';
import { deleteWith, has } from '@/plugin/utils';
import { Component, nextTick, reactive, shallowReactive } from 'vue';
import { fixedUi } from '../init/ui';
@ -11,7 +11,6 @@ import type {
ToolbarItemMap,
ToolbarItemType
} from '../init/toolbar';
import { isMobile } from '@/plugin/use';
interface CustomToolbarEvent {
add: (item: ValueOf<ToolbarItemMap>) => void;

View File

@ -1,8 +1,6 @@
import { Component, shallowReactive } from 'vue';
import { Callable, EventEmitter } from '../../common/eventEmitter';
import { KeyCode } from '@/plugin/keyCodes';
import { EventEmitter } from '@motajs/legacy-common';
import { Hotkey } from './hotkey';
import { generateBinary } from '@/plugin/utils';
interface FocusEvent<T> {
focus: (before: T | null, after: T) => void;

View File

@ -1,5 +1,5 @@
import { FunctionalComponent, reactive } from 'vue';
import { EventEmitter } from '../common/eventEmitter';
import { EventEmitter } from '@motajs/legacy-common';
import { GameStorage } from './storage';
import { has, triggerFullscreen } from '@/plugin/utils';
import { createSettingComponents } from './init/settings';

View File

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

View File

@ -1,13 +1,12 @@
import './system';
import '../plugin/game/index';
import * as damage from './enemy/damage';
import { EventEmitter, IndexedEventEmitter } from '@/core/common/eventEmitter';
import { EventEmitter, IndexedEventEmitter } from '@motajs/legacy-common';
import { specials } from './enemy/special';
import { gameListener, hook, loading } from './game';
import * as battle from './enemy/battle';
import * as hero from './state/hero';
import * as miscMechanism from './mechanism/misc';
import { registerPresetState } from './state/preset';
import { ItemState } from './state/item';
import {
BlockMover,
@ -52,8 +51,6 @@ loading.once('coreInit', () => {
Mota.Plugin.init();
});
registerPresetState();
window.addEventListener('beforeunload', () => {
core.checkAutosave();
});

View File

@ -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';
/**

View File

@ -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';

View File

@ -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';

View File

@ -1,64 +0,0 @@
import { MonoStore } from '@/common/struct';
import { GameState } from './state';
import { Hero, HeroState } from './hero';
export function registerPresetState() {
GameState.register<MonoStore<Hero<any>>>('hero', heroToJSON, heroFromJSON);
}
interface HeroSave {
x: number;
y: number;
floorId: FloorIds;
id: string;
items: [AllIdsOf<'items'>, number][];
state: {
status: any;
buffable: (string | number | symbol)[];
buffMap: [string | number | symbol, number][];
};
}
interface HeroSerializable {
now: string | null;
saves: HeroSave[];
}
function heroToJSON(data: MonoStore<Hero<any>>): string {
const now = data.usingId ?? null;
const saves: HeroSave[] = [...data.list.values()].map(v => {
return {
x: v.x,
y: v.y,
floorId: v.floorId,
id: v.id,
items: [...v.items],
state: {
status: v.state.status,
buffable: [...v.state.buffable],
buffMap: [...v.state.buffMap]
}
};
});
const obj: HeroSerializable = {
now,
saves
};
return JSON.stringify(obj);
}
function heroFromJSON(data: string): MonoStore<Hero<any>> {
const obj: HeroSerializable = JSON.parse(data);
const store = new MonoStore<Hero<any>>();
const saves: [string, Hero<any>][] = obj.saves.map(v => {
const state = new HeroState(v.state.status);
v.state.buffable.forEach(v => state.buffable.add(v));
v.state.buffMap.forEach(v => state.buffMap.set(v[0], v[1]));
const hero = new Hero(v.id, v.x, v.y, v.floorId, state);
v.items.forEach(v => hero.items.set(v[0], v[1]));
return [hero.id, hero];
});
store.list = new Map(saves);
if (obj.now) store.use(obj.now);
return store;
}

View File

@ -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<T> = (data: T) => string;
type FromJSONFunction<T> = (data: string) => T;

View File

@ -1,8 +1,8 @@
import type { Disposable } from '@/core/common/disposable';
import type {
Disposable,
EventEmitter,
IndexedEventEmitter
} from '@/core/common/eventEmitter';
} from '@motajs/legacy-common';
import type { loading } from './game';
import type { Hotkey } from '@/core/main/custom/hotkey';
import type { Keyboard } from '@/core/main/custom/keyboard';
@ -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;

View File

@ -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';

View File

@ -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';

View File

@ -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';

View File

@ -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];

View File

@ -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';

View File

@ -1,4 +1,4 @@
import { Patch, PatchClass } from '@/common/patch';
import { Patch, PatchClass } from '@motajs/legacy-common';
import { audioPlayer, bgmController, soundPlayer } from '../audio';
import { mainSetting } from '@/core/main/setting';
import { sleep } from 'mutate-animate';

View File

@ -1,4 +1,4 @@
import { Patch } from '@/common/patch';
import { Patch } from '@motajs/legacy-common';
import { patchAudio } from './audio';
import { patchWeather } from './weather';
import { patchUI } from './ui';

View File

@ -1,4 +1,4 @@
import { Patch, PatchClass } from '@/common/patch';
import { Patch, PatchClass } from '@motajs/legacy-common';
import { TipStore } from '../render/components/tip';
export function patchUI() {

View File

@ -1,4 +1,4 @@
import { Patch, PatchClass } from '@/common/patch';
import { Patch, PatchClass } from '@motajs/legacy-common';
import { WeatherController } from '../weather';
import { isNil } from 'lodash-es';

View File

@ -1,4 +1,4 @@
import { logger } from '@/core/common/logger';
import { logger } from '@motajs/common';
import EventEmitter from 'eventemitter3';
export interface IStreamController<T = void> {

View File

@ -1,11 +1,11 @@
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';
import { SetupComponentOptions } from './types';
import { TextAlign } from './textboxTyper';
import { Page, PageExpose } from './page';
import { GameUI, IUIMountable } from '@/core/system';
import { GameUI, IUIMountable } from '@motajs/system-ui';
export interface ConfirmBoxProps extends DefaultProps, TextContentProps {
text: string;

View File

@ -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';

View File

@ -4,16 +4,16 @@ 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 { GameUI, IUIMountable } from '@/core/system';
import { logger } from '@motajs/common';
import { GameUI, IUIMountable } from '@motajs/system-ui';
interface ProgressProps extends DefaultProps {
/** 进度条的位置 */

View File

@ -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;

Some files were not shown because too many files have changed in this diff Show More