mirror of
https://github.com/motajs/template.git
synced 2026-04-12 15:11:10 +08:00
feat: 动画系统激励源 & refactor: 部分接口变动
This commit is contained in:
parent
5d6f40a469
commit
feb6abb5bb
@ -1,6 +1,7 @@
|
||||
{
|
||||
"name": "@user/client-modules",
|
||||
"dependencies": {
|
||||
"@motajs/animate": "workspace:*",
|
||||
"@motajs/client-base": "workspace:*",
|
||||
"@motajs/common": "workspace:*",
|
||||
"@motajs/render": "workspace:*",
|
||||
|
||||
@ -6,6 +6,7 @@ import {
|
||||
IBlockSplitter,
|
||||
IBlockSplitterConfig
|
||||
} from './types';
|
||||
import { ISearchable8Dir } from '@motajs/common';
|
||||
|
||||
export class BlockSplitter<T> implements IBlockSplitter<T> {
|
||||
blockWidth: number = 0;
|
||||
@ -288,7 +289,7 @@ export class BlockSplitter<T> implements IBlockSplitter<T> {
|
||||
}
|
||||
}
|
||||
|
||||
class SplittedBlockData<T> implements IBlockData<T> {
|
||||
class SplittedBlockData<T> implements IBlockData<T>, ISearchable8Dir {
|
||||
width: number;
|
||||
height: number;
|
||||
x: number;
|
||||
|
||||
@ -0,0 +1,323 @@
|
||||
import { logger } from '@motajs/common';
|
||||
import {
|
||||
IExcitation,
|
||||
IExcitable,
|
||||
IExcitableController,
|
||||
IExcitationVariator,
|
||||
ExcitationCurve,
|
||||
VariatorCurveMode
|
||||
} from './types';
|
||||
import { excited } from './utils';
|
||||
|
||||
/**
|
||||
* IExcitation 抽象基类,管理受激励对象的注册、激励与移除。
|
||||
* 便于拓展不同类型的激励源。
|
||||
*/
|
||||
export abstract class ExcitationBase<T> implements IExcitation<T> {
|
||||
protected readonly excitables: Set<IExcitable<T>> = new Set();
|
||||
protected destroyed: boolean = false;
|
||||
|
||||
/**
|
||||
* 当前激励负载,由子类实现
|
||||
*/
|
||||
abstract payload(): T;
|
||||
|
||||
/**
|
||||
* 激励所有受激励对象
|
||||
*/
|
||||
excite(payload: T): void {
|
||||
this.excitables.forEach(ex => ex.excited(payload));
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加受激励对象
|
||||
*/
|
||||
add(object: IExcitable<T>): IExcitableController<T> | null {
|
||||
if (this.destroyed) {
|
||||
logger.error(48, 'add');
|
||||
return null;
|
||||
}
|
||||
this.excitables.add(object);
|
||||
const controller: IExcitableController<T> = {
|
||||
excitable: object,
|
||||
revoke: () => this.remove(object),
|
||||
excite: (payload: T) => object.excited(payload)
|
||||
};
|
||||
return controller;
|
||||
}
|
||||
|
||||
/**
|
||||
* 移除受激励对象
|
||||
*/
|
||||
remove(object: IExcitable<T>): boolean {
|
||||
if (this.destroyed) {
|
||||
logger.error(48, 'remove');
|
||||
return false;
|
||||
}
|
||||
return this.excitables.delete(object);
|
||||
}
|
||||
|
||||
/**
|
||||
* 摧毁激励源,清理所有引用
|
||||
*/
|
||||
destroy(): void {
|
||||
this.destroyed = true;
|
||||
this.excitables.clear();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 基于 requestAnimationFrame 的激励源
|
||||
* 每帧激励所有对象,payload 为当前时间戳
|
||||
*/
|
||||
export class RafExcitation extends ExcitationBase<number> {
|
||||
private rafId: number = -1;
|
||||
private now: number = 0;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.tick = this.tick.bind(this);
|
||||
this.rafId = requestAnimationFrame(this.tick);
|
||||
}
|
||||
|
||||
payload(): number {
|
||||
return this.now;
|
||||
}
|
||||
|
||||
/**
|
||||
* 每帧对所有激励源激励一次
|
||||
* @param ts 当前时间戳
|
||||
*/
|
||||
private tick(ts: number) {
|
||||
this.now = ts;
|
||||
this.excite(ts);
|
||||
if (!this.destroyed) {
|
||||
this.rafId = requestAnimationFrame(this.tick);
|
||||
} else {
|
||||
this.rafId = -1;
|
||||
}
|
||||
}
|
||||
|
||||
override destroy(): void {
|
||||
if (this.rafId !== -1) {
|
||||
cancelAnimationFrame(this.rafId);
|
||||
this.rafId = -1;
|
||||
}
|
||||
super.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
interface CurveQueue {
|
||||
/** 速率曲线 */
|
||||
curve: ExcitationCurve;
|
||||
/** 变速持续时间 */
|
||||
time: number;
|
||||
/** 变速参考模式 */
|
||||
mode: VariatorCurveMode;
|
||||
/** 兑现 Promise */
|
||||
resolve: () => void;
|
||||
}
|
||||
|
||||
interface CurrentCurve {
|
||||
/** 当前速率曲线 */
|
||||
curve: ExcitationCurve;
|
||||
/** 变速时长 */
|
||||
time: number;
|
||||
/** 变速参考模式 */
|
||||
mode: VariatorCurveMode;
|
||||
/** 起始时间戳 */
|
||||
startTs: number;
|
||||
/** 兑现 Promise */
|
||||
resolve: () => void;
|
||||
}
|
||||
|
||||
/**
|
||||
* 激励源变速器
|
||||
* 可对 payload 为 number 的激励源进行变速处理
|
||||
*/
|
||||
export class ExcitationVariator
|
||||
extends ExcitationBase<number>
|
||||
implements IExcitationVariator
|
||||
{
|
||||
/** 当前绑定的激励源 */
|
||||
source: IExcitation<number> | null = null;
|
||||
/** 当前速度 */
|
||||
speed: number = 1;
|
||||
|
||||
/** 在源中添加的被激励对象的控制器 */
|
||||
private sourceController: IExcitableController<number> | null = null;
|
||||
|
||||
/** 上一次变速时源的参考时间戳 */
|
||||
private sourceTs: number = 0;
|
||||
/** 上一次变速时自身的参考时间戳 */
|
||||
private selfTs: number = 0;
|
||||
/** 当前自身时间戳 */
|
||||
private now: number = 0;
|
||||
|
||||
/** 曲线队列 */
|
||||
private curveQueue: CurveQueue[] = [];
|
||||
/** 当前执行的曲线 */
|
||||
private currentCurve: CurrentCurve | null = null;
|
||||
|
||||
payload(): number {
|
||||
return this.now;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理源的激励,更新自身时间戳并处理曲线逻辑
|
||||
*/
|
||||
excite(payload: number): void {
|
||||
if (!this.source) return;
|
||||
|
||||
// 计算新的自身时间戳
|
||||
const newSelfTs = this.selfTs + (payload - this.sourceTs) * this.speed;
|
||||
this.now = newSelfTs;
|
||||
|
||||
// 处理曲线执行
|
||||
if (this.currentCurve) {
|
||||
// 根据模式计算完成度所用的时间戳
|
||||
const referenceTs =
|
||||
this.currentCurve.mode === VariatorCurveMode.SourceRelated
|
||||
? payload
|
||||
: newSelfTs;
|
||||
const elapsed = referenceTs - this.currentCurve.startTs;
|
||||
|
||||
if (elapsed >= this.currentCurve.time) {
|
||||
// 曲线完成,使用 curve(1) 作为最终速率值
|
||||
this.setSpeed(this.currentCurve.curve(1));
|
||||
this.currentCurve.resolve();
|
||||
|
||||
this.currentCurve = null;
|
||||
|
||||
// 执行下一个曲线
|
||||
if (this.curveQueue.length > 0) {
|
||||
this.startNextCurve();
|
||||
}
|
||||
} else {
|
||||
// 曲线进行中,更新速度
|
||||
const progress = elapsed / this.currentCurve.time;
|
||||
this.setSpeed(this.currentCurve.curve(progress));
|
||||
}
|
||||
}
|
||||
|
||||
// 激励所有受激励对象
|
||||
this.excitables.forEach(ex => ex.excited(newSelfTs));
|
||||
}
|
||||
|
||||
bindExcitation(excitation: IExcitation<number>): void {
|
||||
// 如果已绑定不同的源,先解绑
|
||||
if (this.source !== null && this.source !== excitation) {
|
||||
this.unbindExcitation();
|
||||
}
|
||||
|
||||
if (this.source === excitation) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.source = excitation;
|
||||
this.sourceTs = excitation.payload();
|
||||
this.selfTs = this.sourceTs;
|
||||
this.speed = 1;
|
||||
|
||||
// 创建内部激励对象,将源的激励转发给自身
|
||||
const internalExcitable: IExcitable<number> = excited(payload => {
|
||||
this.excite(payload);
|
||||
});
|
||||
|
||||
this.sourceController = excitation.add(internalExcitable);
|
||||
}
|
||||
|
||||
unbindExcitation(): void {
|
||||
if (this.source === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 取消在源上的绑定
|
||||
if (this.sourceController !== null) {
|
||||
this.sourceController.revoke();
|
||||
this.sourceController = null;
|
||||
}
|
||||
|
||||
// 取消曲线执行
|
||||
this.endAllCurves();
|
||||
|
||||
// 重置状态
|
||||
this.source = null;
|
||||
this.speed = 1;
|
||||
this.sourceTs = 0;
|
||||
this.selfTs = 0;
|
||||
this.now = 0;
|
||||
}
|
||||
|
||||
setSpeed(speed: number): void {
|
||||
if (this.source === null) {
|
||||
logger.error(49, 'set speed');
|
||||
return;
|
||||
}
|
||||
|
||||
// 更新参考时间戳
|
||||
this.sourceTs = this.source.payload();
|
||||
this.selfTs = this.now;
|
||||
this.speed = speed;
|
||||
}
|
||||
|
||||
curveSpeed(
|
||||
curve: ExcitationCurve,
|
||||
time: number,
|
||||
mode: VariatorCurveMode = VariatorCurveMode.SourceRelated
|
||||
): Promise<void> {
|
||||
if (this.source === null) {
|
||||
logger.error(49, 'curve speed');
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
return new Promise<void>(resolve => {
|
||||
this.curveQueue.push({ curve, time, mode, resolve });
|
||||
|
||||
// 如果没有正在执行的曲线,立即开始
|
||||
if (this.currentCurve === null) {
|
||||
this.startNextCurve();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private startNextCurve(): void {
|
||||
if (this.curveQueue.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
const item = this.curveQueue.shift()!;
|
||||
|
||||
// 记录起始时间戳
|
||||
const startTs =
|
||||
item.mode === VariatorCurveMode.SourceRelated
|
||||
? this.source!.payload()
|
||||
: this.now;
|
||||
|
||||
this.currentCurve = {
|
||||
...item,
|
||||
startTs
|
||||
};
|
||||
}
|
||||
|
||||
endAllCurves(): void {
|
||||
if (!this.currentCurve) return;
|
||||
|
||||
if (this.curveQueue.length > 0) {
|
||||
const last = this.curveQueue.at(-1)!;
|
||||
const speed = last.curve(1);
|
||||
this.setSpeed(speed);
|
||||
this.curveQueue = [];
|
||||
this.currentCurve = null;
|
||||
} else {
|
||||
const speed = this.currentCurve.curve(1);
|
||||
this.setSpeed(speed);
|
||||
this.currentCurve = null;
|
||||
}
|
||||
}
|
||||
|
||||
override destroy(): void {
|
||||
this.unbindExcitation();
|
||||
super.destroy();
|
||||
}
|
||||
}
|
||||
@ -1 +1,3 @@
|
||||
export * from './excitation';
|
||||
export * from './types';
|
||||
export * from './utils';
|
||||
|
||||
@ -1,3 +1,24 @@
|
||||
/**
|
||||
* 动画速率曲线,输入时间完成度,输出一个值,时间完成度范围在 `0-1` 之间,而输出值没有范围限制。
|
||||
* 在不同场景下,速率曲线返回值的含义可能不同,有的可能表示动画完成度,有的可能表示绝对的坐标值。
|
||||
*/
|
||||
export type ExcitationCurve = (progress: number) => number;
|
||||
|
||||
/**
|
||||
* 二维动画速率曲线,输入时间完成度,输出两个值。可由两个一维曲线组合而成(本质是参数方程)
|
||||
*/
|
||||
export type ExcitationCurve2D = (progress: number) => [number, number];
|
||||
|
||||
/**
|
||||
* 三维动画速率曲线,输入时间完成度,输出三个值。可由三个一维曲线组合而成(本质是参数方程)
|
||||
*/
|
||||
export type ExcitationCurve3D = (progress: number) => [number, number, number];
|
||||
|
||||
/**
|
||||
* `n` 维动画速率曲线,输入时间完成度,输出三个值。可由 `n` 个一维曲线组合而成(本质是参数方程)
|
||||
*/
|
||||
export type GeneralExcitationCurve = (progress: number) => number[];
|
||||
|
||||
export interface IExcitable<T> {
|
||||
/**
|
||||
* 受到激励源激励
|
||||
@ -39,7 +60,7 @@ export interface IExcitation<T> {
|
||||
* @param object 受激励对象
|
||||
* @returns 受激励对象控制器
|
||||
*/
|
||||
add(object: IExcitable<T>): IExcitableController<T>;
|
||||
add(object: IExcitable<T>): IExcitableController<T> | null;
|
||||
|
||||
/**
|
||||
* 移除一个受激励对象
|
||||
@ -53,3 +74,56 @@ export interface IExcitation<T> {
|
||||
*/
|
||||
destroy(): void;
|
||||
}
|
||||
|
||||
export const enum VariatorCurveMode {
|
||||
/**
|
||||
* 时间相对于激励源,不受变速器当前速度影响
|
||||
*/
|
||||
SourceRelated,
|
||||
|
||||
/**
|
||||
* 时间相对于变速器本身,当变速器本身的速度变慢时,速率曲线的运行速度也变慢
|
||||
*/
|
||||
SelfRelated
|
||||
}
|
||||
|
||||
export interface IExcitationVariator extends IExcitation<number> {
|
||||
/** 变速器当前的速度值 */
|
||||
readonly speed: number;
|
||||
/** 当前绑定的激励源 */
|
||||
readonly source: IExcitation<number> | null;
|
||||
|
||||
/**
|
||||
* 绑定激励源对象,变速器将以此激励源为基础实施变速
|
||||
* @param excitation 绑定的激励源
|
||||
*/
|
||||
bindExcitation(excitation: IExcitation<number>): void;
|
||||
|
||||
/**
|
||||
* 取消绑定当前的激励源
|
||||
*/
|
||||
unbindExcitation(): void;
|
||||
|
||||
/**
|
||||
* 修改激励速度
|
||||
* @param speed 激励速度,值表示当前速度与原速度的比值,1 为原速
|
||||
*/
|
||||
setSpeed(speed: number): void;
|
||||
|
||||
/**
|
||||
* 使用速率曲线来修改激励速度,当有速率曲线在执行时,调用此函数将会加入队列,当上一个曲线结束后立刻执行
|
||||
* @param curve 速率曲线
|
||||
* @param time 速率曲线实施时间
|
||||
* @param mode 速率曲线实施模式
|
||||
*/
|
||||
curveSpeed(
|
||||
curve: ExcitationCurve,
|
||||
time: number,
|
||||
mode?: VariatorCurveMode
|
||||
): Promise<void>;
|
||||
|
||||
/**
|
||||
* 终止当前所有速率曲线的执行,最终速度为队列中最后一个曲线的终止速度
|
||||
*/
|
||||
endAllCurves(): void;
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
export * from './utils';
|
||||
|
||||
export * from './dirtyTracker';
|
||||
export * from './hook';
|
||||
export * from './logger';
|
||||
export * from './utils';
|
||||
export * from './types';
|
||||
|
||||
@ -47,6 +47,8 @@
|
||||
"45": "Cannot add $1 map renderer extension, since $1 already exists for the given state.",
|
||||
"46": "Cannot execute close door action on $1,$2, since the given position is not empty.",
|
||||
"47": "Cannot require text area outside the target map.",
|
||||
"48": "Cannot $1 excitables on destroyed excitation.",
|
||||
"49": "Cannot $1 on variator without excitation binding.",
|
||||
"1201": "Floor-damage extension needs 'floor-binder' extension as dependency."
|
||||
},
|
||||
"warn": {
|
||||
|
||||
2
packages/common/src/utils/index.ts
Normal file
2
packages/common/src/utils/index.ts
Normal file
@ -0,0 +1,2 @@
|
||||
export * from './func';
|
||||
export * from './types';
|
||||
29
packages/common/src/utils/types.ts
Normal file
29
packages/common/src/utils/types.ts
Normal file
@ -0,0 +1,29 @@
|
||||
export interface ISearchable4Dir {
|
||||
/** 获取上侧元素 */
|
||||
up(): ISearchable4Dir | null;
|
||||
/** 获取下侧元素 */
|
||||
down(): ISearchable4Dir | null;
|
||||
/** 获取左侧元素 */
|
||||
left(): ISearchable4Dir | null;
|
||||
/** 获取右侧元素 */
|
||||
right(): ISearchable4Dir | null;
|
||||
}
|
||||
|
||||
export interface ISearchable8Dir {
|
||||
/** 获取上侧元素 */
|
||||
up(): ISearchable8Dir | null;
|
||||
/** 获取下侧元素 */
|
||||
down(): ISearchable8Dir | null;
|
||||
/** 获取左侧元素 */
|
||||
left(): ISearchable8Dir | null;
|
||||
/** 获取右侧元素 */
|
||||
right(): ISearchable8Dir | null;
|
||||
/** 获取左上元素 */
|
||||
leftUp(): ISearchable8Dir | null;
|
||||
/** 获取右上元素 */
|
||||
rightUp(): ISearchable8Dir | null;
|
||||
/** 获取左下元素 */
|
||||
leftDown(): ISearchable8Dir | null;
|
||||
/** 获取右下元素 */
|
||||
rightDown(): ISearchable8Dir | null;
|
||||
}
|
||||
@ -1,41 +1,3 @@
|
||||
{
|
||||
"name": "@motajs/render",
|
||||
"version": "0.1.0",
|
||||
"main": "dist/render.cjs.js",
|
||||
"module": "dist/render.es.js",
|
||||
"types": "dist/render.es.d.ts",
|
||||
"keywords": [
|
||||
"render",
|
||||
"game",
|
||||
"vue",
|
||||
"graphics"
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/motajs/motajs-engine"
|
||||
},
|
||||
"author": {
|
||||
"name": "AncTe",
|
||||
"email": "1319491857@qq.com"
|
||||
},
|
||||
"exports": {
|
||||
".": {
|
||||
"import": "./dist/render.es.js",
|
||||
"require": "./dist/render.cjs.js",
|
||||
"types": "./dist/render.es.d.ts"
|
||||
}
|
||||
},
|
||||
"files": [
|
||||
"dist"
|
||||
],
|
||||
"dependencies": {
|
||||
"eventemitter3": "^5.0.1",
|
||||
"gl-matrix": "^3.4.3",
|
||||
"lodash-es": "^4.17.21",
|
||||
"mutate-animate": "^1.4.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"vue": "^3.5.13"
|
||||
},
|
||||
"license": "LGPL-3.0-only"
|
||||
"name": "@motajs/render"
|
||||
}
|
||||
|
||||
143
pnpm-lock.yaml
143
pnpm-lock.yaml
@ -228,6 +228,9 @@ importers:
|
||||
|
||||
packages-user/client-modules:
|
||||
dependencies:
|
||||
'@motajs/animate':
|
||||
specifier: workspace:*
|
||||
version: link:../../packages/animate
|
||||
'@motajs/client-base':
|
||||
specifier: workspace:*
|
||||
version: link:../../packages/client-base
|
||||
@ -453,23 +456,7 @@ importers:
|
||||
specifier: workspace:*
|
||||
version: link:../system
|
||||
|
||||
packages/render:
|
||||
dependencies:
|
||||
eventemitter3:
|
||||
specifier: ^5.0.1
|
||||
version: 5.0.1
|
||||
gl-matrix:
|
||||
specifier: ^3.4.3
|
||||
version: 3.4.4
|
||||
lodash-es:
|
||||
specifier: ^4.17.21
|
||||
version: 4.17.21
|
||||
mutate-animate:
|
||||
specifier: ^1.4.2
|
||||
version: 1.4.2
|
||||
vue:
|
||||
specifier: ^3.5.13
|
||||
version: 3.5.20(typescript@5.9.3)
|
||||
packages/render: {}
|
||||
|
||||
packages/render-vue:
|
||||
dependencies:
|
||||
@ -2461,27 +2448,15 @@ packages:
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.0.0-0
|
||||
|
||||
'@vue/compiler-core@3.5.20':
|
||||
resolution: {integrity: sha512-8TWXUyiqFd3GmP4JTX9hbiTFRwYHgVL/vr3cqhr4YQ258+9FADwvj7golk2sWNGHR67QgmCZ8gz80nQcMokhwg==}
|
||||
|
||||
'@vue/compiler-core@3.5.29':
|
||||
resolution: {integrity: sha512-cuzPhD8fwRHk8IGfmYaR4eEe4cAyJEL66Ove/WZL7yWNL134nqLddSLwNRIsFlnnW1kK+p8Ck3viFnC0chXCXw==}
|
||||
|
||||
'@vue/compiler-dom@3.5.20':
|
||||
resolution: {integrity: sha512-whB44M59XKjqUEYOMPYU0ijUV0G+4fdrHVKDe32abNdX/kJe1NUEMqsi4cwzXa9kyM9w5S8WqFsrfo1ogtBZGQ==}
|
||||
|
||||
'@vue/compiler-dom@3.5.29':
|
||||
resolution: {integrity: sha512-n0G5o7R3uBVmVxjTIYcz7ovr8sy7QObFG8OQJ3xGCDNhbG60biP/P5KnyY8NLd81OuT1WJflG7N4KWYHaeeaIg==}
|
||||
|
||||
'@vue/compiler-sfc@3.5.20':
|
||||
resolution: {integrity: sha512-SFcxapQc0/feWiSBfkGsa1v4DOrnMAQSYuvDMpEaxbpH5dKbnEM5KobSNSgU+1MbHCl+9ftm7oQWxvwDB6iBfw==}
|
||||
|
||||
'@vue/compiler-sfc@3.5.29':
|
||||
resolution: {integrity: sha512-oJZhN5XJs35Gzr50E82jg2cYdZQ78wEwvRO6Y63TvLVTc+6xICzJHP1UIecdSPPYIbkautNBanDiWYa64QSFIA==}
|
||||
|
||||
'@vue/compiler-ssr@3.5.20':
|
||||
resolution: {integrity: sha512-RSl5XAMc5YFUXpDQi+UQDdVjH9FnEpLDHIALg5J0ITHxkEzJ8uQLlo7CIbjPYqmZtt6w0TsIPbo1izYXwDG7JA==}
|
||||
|
||||
'@vue/compiler-ssr@3.5.29':
|
||||
resolution: {integrity: sha512-Y/ARJZE6fpjzL5GH/phJmsFwx3g6t2KmHKHx5q+MLl2kencADKIrhH5MLF6HHpRMmlRAYBRSvv347Mepf1zVNw==}
|
||||
|
||||
@ -2513,37 +2488,20 @@ packages:
|
||||
typescript:
|
||||
optional: true
|
||||
|
||||
'@vue/reactivity@3.5.20':
|
||||
resolution: {integrity: sha512-hS8l8x4cl1fmZpSQX/NXlqWKARqEsNmfkwOIYqtR2F616NGfsLUm0G6FQBK6uDKUCVyi1YOL8Xmt/RkZcd/jYQ==}
|
||||
|
||||
'@vue/reactivity@3.5.29':
|
||||
resolution: {integrity: sha512-zcrANcrRdcLtmGZETBxWqIkoQei8HaFpZWx/GHKxx79JZsiZ8j1du0VUJtu4eJjgFvU/iKL5lRXFXksVmI+5DA==}
|
||||
|
||||
'@vue/runtime-core@3.5.20':
|
||||
resolution: {integrity: sha512-vyQRiH5uSZlOa+4I/t4Qw/SsD/gbth0SW2J7oMeVlMFMAmsG1rwDD6ok0VMmjXY3eI0iHNSSOBilEDW98PLRKw==}
|
||||
|
||||
'@vue/runtime-core@3.5.29':
|
||||
resolution: {integrity: sha512-8DpW2QfdwIWOLqtsNcds4s+QgwSaHSJY/SUe04LptianUQ/0xi6KVsu/pYVh+HO3NTVvVJjIPL2t6GdeKbS4Lg==}
|
||||
|
||||
'@vue/runtime-dom@3.5.20':
|
||||
resolution: {integrity: sha512-KBHzPld/Djw3im0CQ7tGCpgRedryIn4CcAl047EhFTCCPT2xFf4e8j6WeKLgEEoqPSl9TYqShc3Q6tpWpz/Xgw==}
|
||||
|
||||
'@vue/runtime-dom@3.5.29':
|
||||
resolution: {integrity: sha512-AHvvJEtcY9tw/uk+s/YRLSlxxQnqnAkjqvK25ZiM4CllCZWzElRAoQnCM42m9AHRLNJ6oe2kC5DCgD4AUdlvXg==}
|
||||
|
||||
'@vue/server-renderer@3.5.20':
|
||||
resolution: {integrity: sha512-HthAS0lZJDH21HFJBVNTtx+ULcIbJQRpjSVomVjfyPkFSpCwvsPTA+jIzOaUm3Hrqx36ozBHePztQFg6pj5aKg==}
|
||||
peerDependencies:
|
||||
vue: 3.5.20
|
||||
|
||||
'@vue/server-renderer@3.5.29':
|
||||
resolution: {integrity: sha512-G/1k6WK5MusLlbxSE2YTcqAAezS+VuwHhOvLx2KnQU7G2zCH6KIb+5Wyt6UjMq7a3qPzNEjJXs1hvAxDclQH+g==}
|
||||
peerDependencies:
|
||||
vue: 3.5.29
|
||||
|
||||
'@vue/shared@3.5.20':
|
||||
resolution: {integrity: sha512-SoRGP596KU/ig6TfgkCMbXkr4YJ91n/QSdMuqeP5r3hVIYA3CPHUBCc7Skak0EAKV+5lL4KyIh61VA/pK1CIAA==}
|
||||
|
||||
'@vue/shared@3.5.29':
|
||||
resolution: {integrity: sha512-w7SR0A5zyRByL9XUkCfdLs7t9XOHUyJ67qPGQjOou3p6GvBeBW+AVjUUmlxtZ4PIYaRvE+1LmK44O4uajlZwcg==}
|
||||
|
||||
@ -3213,9 +3171,6 @@ packages:
|
||||
engines: {node: '>=4'}
|
||||
hasBin: true
|
||||
|
||||
csstype@3.1.3:
|
||||
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
|
||||
|
||||
csstype@3.2.3:
|
||||
resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
|
||||
|
||||
@ -3567,10 +3522,6 @@ packages:
|
||||
entities@2.2.0:
|
||||
resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
|
||||
|
||||
entities@4.5.0:
|
||||
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
|
||||
engines: {node: '>=0.12'}
|
||||
|
||||
entities@7.0.1:
|
||||
resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
|
||||
engines: {node: '>=0.12'}
|
||||
@ -3754,9 +3705,6 @@ packages:
|
||||
resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
|
||||
engines: {node: '>=6'}
|
||||
|
||||
eventemitter3@5.0.1:
|
||||
resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
|
||||
|
||||
eventemitter3@5.0.4:
|
||||
resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==}
|
||||
|
||||
@ -4476,9 +4424,6 @@ packages:
|
||||
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
lodash-es@4.17.21:
|
||||
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
|
||||
|
||||
lodash-es@4.17.23:
|
||||
resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==}
|
||||
|
||||
@ -6074,14 +6019,6 @@ packages:
|
||||
peerDependencies:
|
||||
vue: ^3.0.0
|
||||
|
||||
vue@3.5.20:
|
||||
resolution: {integrity: sha512-2sBz0x/wis5TkF1XZ2vH25zWq3G1bFEPOfkBcx2ikowmphoQsPH6X0V3mmPCXA2K1N/XGTnifVyDQP4GfDDeQw==}
|
||||
peerDependencies:
|
||||
typescript: '*'
|
||||
peerDependenciesMeta:
|
||||
typescript:
|
||||
optional: true
|
||||
|
||||
vue@3.5.29:
|
||||
resolution: {integrity: sha512-BZqN4Ze6mDQVNAni0IHeMJ5mwr8VAJ3MQC9FmprRhcBYENw+wOAAjRj8jfmN6FLl0j96OXbR+CjWhmAmM+QGnA==}
|
||||
peerDependencies:
|
||||
@ -8330,14 +8267,6 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@vue/compiler-core@3.5.20':
|
||||
dependencies:
|
||||
'@babel/parser': 7.29.0
|
||||
'@vue/shared': 3.5.20
|
||||
entities: 4.5.0
|
||||
estree-walker: 2.0.2
|
||||
source-map-js: 1.2.1
|
||||
|
||||
'@vue/compiler-core@3.5.29':
|
||||
dependencies:
|
||||
'@babel/parser': 7.29.0
|
||||
@ -8346,28 +8275,11 @@ snapshots:
|
||||
estree-walker: 2.0.2
|
||||
source-map-js: 1.2.1
|
||||
|
||||
'@vue/compiler-dom@3.5.20':
|
||||
dependencies:
|
||||
'@vue/compiler-core': 3.5.20
|
||||
'@vue/shared': 3.5.20
|
||||
|
||||
'@vue/compiler-dom@3.5.29':
|
||||
dependencies:
|
||||
'@vue/compiler-core': 3.5.29
|
||||
'@vue/shared': 3.5.29
|
||||
|
||||
'@vue/compiler-sfc@3.5.20':
|
||||
dependencies:
|
||||
'@babel/parser': 7.29.0
|
||||
'@vue/compiler-core': 3.5.20
|
||||
'@vue/compiler-dom': 3.5.20
|
||||
'@vue/compiler-ssr': 3.5.20
|
||||
'@vue/shared': 3.5.20
|
||||
estree-walker: 2.0.2
|
||||
magic-string: 0.30.21
|
||||
postcss: 8.5.8
|
||||
source-map-js: 1.2.1
|
||||
|
||||
'@vue/compiler-sfc@3.5.29':
|
||||
dependencies:
|
||||
'@babel/parser': 7.29.0
|
||||
@ -8380,11 +8292,6 @@ snapshots:
|
||||
postcss: 8.5.8
|
||||
source-map-js: 1.2.1
|
||||
|
||||
'@vue/compiler-ssr@3.5.20':
|
||||
dependencies:
|
||||
'@vue/compiler-dom': 3.5.20
|
||||
'@vue/shared': 3.5.20
|
||||
|
||||
'@vue/compiler-ssr@3.5.29':
|
||||
dependencies:
|
||||
'@vue/compiler-dom': 3.5.29
|
||||
@ -8439,31 +8346,15 @@ snapshots:
|
||||
optionalDependencies:
|
||||
typescript: 5.9.3
|
||||
|
||||
'@vue/reactivity@3.5.20':
|
||||
dependencies:
|
||||
'@vue/shared': 3.5.20
|
||||
|
||||
'@vue/reactivity@3.5.29':
|
||||
dependencies:
|
||||
'@vue/shared': 3.5.29
|
||||
|
||||
'@vue/runtime-core@3.5.20':
|
||||
dependencies:
|
||||
'@vue/reactivity': 3.5.20
|
||||
'@vue/shared': 3.5.20
|
||||
|
||||
'@vue/runtime-core@3.5.29':
|
||||
dependencies:
|
||||
'@vue/reactivity': 3.5.29
|
||||
'@vue/shared': 3.5.29
|
||||
|
||||
'@vue/runtime-dom@3.5.20':
|
||||
dependencies:
|
||||
'@vue/reactivity': 3.5.20
|
||||
'@vue/runtime-core': 3.5.20
|
||||
'@vue/shared': 3.5.20
|
||||
csstype: 3.1.3
|
||||
|
||||
'@vue/runtime-dom@3.5.29':
|
||||
dependencies:
|
||||
'@vue/reactivity': 3.5.29
|
||||
@ -8471,20 +8362,12 @@ snapshots:
|
||||
'@vue/shared': 3.5.29
|
||||
csstype: 3.2.3
|
||||
|
||||
'@vue/server-renderer@3.5.20(vue@3.5.20(typescript@5.9.3))':
|
||||
dependencies:
|
||||
'@vue/compiler-ssr': 3.5.20
|
||||
'@vue/shared': 3.5.20
|
||||
vue: 3.5.20(typescript@5.9.3)
|
||||
|
||||
'@vue/server-renderer@3.5.29(vue@3.5.29(typescript@5.9.3))':
|
||||
dependencies:
|
||||
'@vue/compiler-ssr': 3.5.29
|
||||
'@vue/shared': 3.5.29
|
||||
vue: 3.5.29(typescript@5.9.3)
|
||||
|
||||
'@vue/shared@3.5.20': {}
|
||||
|
||||
'@vue/shared@3.5.29': {}
|
||||
|
||||
'@vueuse/core@12.8.2(typescript@5.9.3)':
|
||||
@ -9213,8 +9096,6 @@ snapshots:
|
||||
|
||||
cssesc@3.0.0: {}
|
||||
|
||||
csstype@3.1.3: {}
|
||||
|
||||
csstype@3.2.3: {}
|
||||
|
||||
cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.1):
|
||||
@ -9602,8 +9483,6 @@ snapshots:
|
||||
|
||||
entities@2.2.0: {}
|
||||
|
||||
entities@4.5.0: {}
|
||||
|
||||
entities@7.0.1: {}
|
||||
|
||||
env-paths@2.2.1: {}
|
||||
@ -9925,8 +9804,6 @@ snapshots:
|
||||
|
||||
event-target-shim@5.0.1: {}
|
||||
|
||||
eventemitter3@5.0.1: {}
|
||||
|
||||
eventemitter3@5.0.4: {}
|
||||
|
||||
events-universal@1.0.1:
|
||||
@ -10722,8 +10599,6 @@ snapshots:
|
||||
dependencies:
|
||||
p-locate: 5.0.0
|
||||
|
||||
lodash-es@4.17.21: {}
|
||||
|
||||
lodash-es@4.17.23: {}
|
||||
|
||||
lodash.debounce@4.0.8: {}
|
||||
@ -12611,16 +12486,6 @@ snapshots:
|
||||
is-plain-object: 3.0.1
|
||||
vue: 3.5.29(typescript@5.9.3)
|
||||
|
||||
vue@3.5.20(typescript@5.9.3):
|
||||
dependencies:
|
||||
'@vue/compiler-dom': 3.5.20
|
||||
'@vue/compiler-sfc': 3.5.20
|
||||
'@vue/runtime-dom': 3.5.20
|
||||
'@vue/server-renderer': 3.5.20(vue@3.5.20(typescript@5.9.3))
|
||||
'@vue/shared': 3.5.20
|
||||
optionalDependencies:
|
||||
typescript: 5.9.3
|
||||
|
||||
vue@3.5.29(typescript@5.9.3):
|
||||
dependencies:
|
||||
'@vue/compiler-dom': 3.5.29
|
||||
|
||||
@ -1,3 +1,5 @@
|
||||
import { createData } from '@user/entry-data';
|
||||
|
||||
// 逻辑端入口,仅在录像验证时运行
|
||||
|
||||
createData();
|
||||
|
||||
@ -3,6 +3,8 @@ import './styles.less';
|
||||
import { createGame } from '@user/entry-client';
|
||||
import App from './App.vue';
|
||||
|
||||
// 客户端入口,在玩家游玩时运行
|
||||
|
||||
// 创建游戏实例
|
||||
createGame();
|
||||
createApp(App).mount('#root');
|
||||
|
||||
Loading…
Reference in New Issue
Block a user