refactor: 把渲染系统迁移到 monorepo

This commit is contained in:
unanmed 2025-03-04 22:02:08 +08:00
parent 8cc0c76846
commit 1556e2c3ea
108 changed files with 756 additions and 411 deletions

View File

@ -14,6 +14,8 @@
"lines": "tsx script/lines.ts"
},
"dependencies": {
"@motajs/render": "workspace:*",
"@motajs/common": "workspace:*",
"@ant-design/icons-vue": "^6.1.0",
"@emotion/css": "^11.13.0",
"@vueuse/core": "^10.11.1",
@ -62,6 +64,7 @@
"fontmin": "^0.9.9",
"form-data": "^4.0.0",
"fs-extra": "^10.1.0",
"glob": "^11.0.1",
"globals": "^15.14.0",
"less": "^4.2.0",
"postcss-preset-env": "^9.6.0",

View File

@ -0,0 +1,6 @@
{
"name": "@motajs/render",
"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/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

@ -147,6 +147,9 @@ importers:
fs-extra:
specifier: ^10.1.0
version: 10.1.0
glob:
specifier: ^11.0.1
version: 11.0.1
globals:
specifier: ^15.14.0
version: 15.14.0
@ -190,6 +193,14 @@ importers:
specifier: ^8.18.0
version: 8.18.0
packages/common: {}
packages/render-core:
dependencies:
'@motajs/common':
specifier: workspace:*
version: link:../common
packages:
'@algolia/autocomplete-core@1.17.7':
@ -1689,6 +1700,10 @@ packages:
'@iconify/types@2.0.0':
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
'@isaacs/cliui@8.0.2':
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
'@jridgewell/gen-mapping@0.3.5':
resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
engines: {node: '>=6.0.0'}
@ -2383,6 +2398,10 @@ packages:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
ansi-regex@6.1.0:
resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
engines: {node: '>=12'}
ansi-styles@3.2.1:
resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
engines: {node: '>=4'}
@ -2391,6 +2410,10 @@ packages:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
ansi-styles@6.2.1:
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
engines: {node: '>=12'}
ant-design-vue@3.2.20:
resolution: {integrity: sha512-YWpMfGaGoRastIXEYfCoJiaRiDHk4chqtYhlKQM5GqPt6NfvrM1Vg2e60yHtjxlZjed91wCMm0rAmyUr7Hwzdg==}
engines: {node: '>=12.22.0'}
@ -2811,6 +2834,9 @@ packages:
duplexify@3.7.1:
resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==}
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
electron-to-chromium@1.5.11:
resolution: {integrity: sha512-R1CccCDYqndR25CaXFd6hp/u9RaaMcftMkphmvuepXr5b1vfLkRml6aWVeBhXJ7rbevHkKEMJtz8XqPf7ffmew==}
@ -2820,6 +2846,9 @@ packages:
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
encoding@0.1.13:
resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==}
@ -3048,6 +3077,10 @@ packages:
engines: {node: '>=8'}
hasBin: true
foreground-child@3.3.1:
resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
engines: {node: '>=14'}
form-data@4.0.0:
resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
engines: {node: '>= 6'}
@ -3129,6 +3162,11 @@ packages:
resolution: {integrity: sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==}
engines: {node: '>= 0.10'}
glob@11.0.1:
resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==}
engines: {node: 20 || >=22}
hasBin: true
glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
@ -3395,6 +3433,10 @@ packages:
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
jackspeak@4.1.0:
resolution: {integrity: sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==}
engines: {node: 20 || >=22}
jju@1.4.0:
resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==}
@ -3507,6 +3549,10 @@ packages:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
lru-cache@11.0.2:
resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==}
engines: {node: 20 || >=22}
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
@ -3598,6 +3644,10 @@ packages:
resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
engines: {node: '>=4'}
minimatch@10.0.1:
resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==}
engines: {node: 20 || >=22}
minimatch@3.0.8:
resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==}
@ -3647,6 +3697,10 @@ packages:
resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
engines: {node: '>=8'}
minipass@7.1.2:
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
engines: {node: '>=16 || 14 >=14.17'}
minisearch@7.1.1:
resolution: {integrity: sha512-b3YZEYCEH4EdCAtYP7OlDyx7FdPwNzuNwLQ34SfJpM9dlbBZzeXndGavTrC+VCiRWomL21SWfMc6SCKO/U2ZNw==}
@ -3789,6 +3843,9 @@ packages:
resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
engines: {node: '>=10'}
package-json-from-dist@1.0.1:
resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
pako@1.0.11:
resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
@ -3828,6 +3885,10 @@ packages:
path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
path-scurry@2.0.0:
resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
engines: {node: 20 || >=22}
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
@ -4289,6 +4350,10 @@ packages:
signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
signal-exit@4.1.0:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
simple-yenc@1.0.4:
resolution: {integrity: sha512-5gvxpSd79e9a3V4QDYUqnqxeD4HGlhCakVpb6gMnDD7lexJggSBJRBO5h52y/iJrdXRilX9UCuDaIJhSWm5OWw==}
@ -4373,6 +4438,10 @@ packages:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
string-width@5.1.2:
resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
engines: {node: '>=12'}
string_decoder@1.1.1:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
@ -4386,6 +4455,10 @@ packages:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
strip-ansi@7.1.0:
resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
engines: {node: '>=12'}
strip-indent@4.0.0:
resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==}
engines: {node: '>=12'}
@ -4797,6 +4870,14 @@ packages:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
wrap-ansi@8.1.0:
resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
engines: {node: '>=12'}
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
@ -6387,6 +6468,15 @@ snapshots:
'@iconify/types@2.0.0': {}
'@isaacs/cliui@8.0.2':
dependencies:
string-width: 5.1.2
string-width-cjs: string-width@4.2.3
strip-ansi: 7.1.0
strip-ansi-cjs: strip-ansi@6.0.1
wrap-ansi: 8.1.0
wrap-ansi-cjs: wrap-ansi@7.0.0
'@jridgewell/gen-mapping@0.3.5':
dependencies:
'@jridgewell/set-array': 1.2.1
@ -7179,6 +7269,8 @@ snapshots:
ansi-regex@5.0.1: {}
ansi-regex@6.1.0: {}
ansi-styles@3.2.1:
dependencies:
color-convert: 1.9.3
@ -7187,6 +7279,8 @@ snapshots:
dependencies:
color-convert: 2.0.1
ansi-styles@6.2.1: {}
ant-design-vue@3.2.20(vue@3.5.13(typescript@5.5.4)):
dependencies:
'@ant-design/colors': 6.0.0
@ -7631,12 +7725,16 @@ snapshots:
readable-stream: 2.3.8
stream-shift: 1.0.3
eastasianwidth@0.2.0: {}
electron-to-chromium@1.5.11: {}
emoji-regex-xs@1.0.0: {}
emoji-regex@8.0.0: {}
emoji-regex@9.2.2: {}
encoding@0.1.13:
dependencies:
iconv-lite: 0.6.3
@ -7958,6 +8056,11 @@ snapshots:
- bluebird
- supports-color
foreground-child@3.3.1:
dependencies:
cross-spawn: 7.0.6
signal-exit: 4.1.0
form-data@4.0.0:
dependencies:
asynckit: 0.4.0
@ -8055,6 +8158,15 @@ snapshots:
to-absolute-glob: 2.0.2
unique-stream: 2.3.1
glob@11.0.1:
dependencies:
foreground-child: 3.3.1
jackspeak: 4.1.0
minimatch: 10.0.1
minipass: 7.1.2
package-json-from-dist: 1.0.1
path-scurry: 2.0.0
glob@7.2.3:
dependencies:
fs.realpath: 1.0.0
@ -8289,6 +8401,10 @@ snapshots:
isexe@2.0.0: {}
jackspeak@4.1.0:
dependencies:
'@isaacs/cliui': 8.0.2
jju@1.4.0: {}
js-tokens@4.0.0: {}
@ -8396,6 +8512,8 @@ snapshots:
dependencies:
js-tokens: 4.0.0
lru-cache@11.0.2: {}
lru-cache@5.1.1:
dependencies:
yallist: 3.1.1
@ -8515,6 +8633,10 @@ snapshots:
min-indent@1.0.1: {}
minimatch@10.0.1:
dependencies:
brace-expansion: 2.0.1
minimatch@3.0.8:
dependencies:
brace-expansion: 1.1.11
@ -8569,6 +8691,8 @@ snapshots:
minipass@5.0.0: {}
minipass@7.1.2: {}
minisearch@7.1.1: {}
minizlib@2.1.2:
@ -8724,6 +8848,8 @@ snapshots:
dependencies:
aggregate-error: 3.1.0
package-json-from-dist@1.0.1: {}
pako@1.0.11: {}
pako@2.1.0: {}
@ -8753,6 +8879,11 @@ snapshots:
path-parse@1.0.7: {}
path-scurry@2.0.0:
dependencies:
lru-cache: 11.0.2
minipass: 7.1.2
path-type@4.0.0: {}
pathe@1.1.2: {}
@ -9277,6 +9408,8 @@ snapshots:
signal-exit@3.0.7: {}
signal-exit@4.1.0: {}
simple-yenc@1.0.4: {}
slash@2.0.0: {}
@ -9352,6 +9485,12 @@ snapshots:
is-fullwidth-code-point: 3.0.0
strip-ansi: 6.0.1
string-width@5.1.2:
dependencies:
eastasianwidth: 0.2.0
emoji-regex: 9.2.2
strip-ansi: 7.1.0
string_decoder@1.1.1:
dependencies:
safe-buffer: 5.1.2
@ -9369,6 +9508,10 @@ snapshots:
dependencies:
ansi-regex: 5.0.1
strip-ansi@7.1.0:
dependencies:
ansi-regex: 6.1.0
strip-indent@4.0.0:
dependencies:
min-indent: 1.0.1
@ -9827,6 +9970,18 @@ snapshots:
word-wrap@1.2.5: {}
wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi@8.1.0:
dependencies:
ansi-styles: 6.2.1
string-width: 5.1.2
strip-ansi: 7.1.0
wrappy@1.0.2: {}
ws@8.18.0: {}

7
pnpm-workspace.yaml Normal file
View File

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

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,6 +1,6 @@
import axios, { AxiosRequestConfig, ResponseType } from 'axios';
import { Disposable } from './disposable';
import { logger } from './logger';
import { logger } from '@motajs/common';
import JSZip from 'jszip';
import { EventEmitter } from './eventEmitter';

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

@ -56,25 +56,13 @@ import EnemyTarget from '@/panel/enemyTarget.vue';
import KeyboardPanel from '@/panel/keyboard.vue';
import { MCGenerator } from './main/layout';
import { ResourceController } from './loader/controller';
import { logger } from './common/logger';
import { logger } from '@motajs/common';
import { Danmaku } from './main/custom/danmaku';
import * as Shadow from './fx/shadow';
import { MotaRenderer } from './render/render';
import { Container } from './render/container';
import { Sprite } from './render/sprite';
import { Image, Text } from './render/preset/misc';
import { RenderItem } from './render/item';
import { texture } from './render/cache';
import { RenderAdapter } from './render/adapter';
import { Layer } from './render/preset/layer';
import { LayerGroupFloorBinder } from './render/preset/floor';
import { Render } from '@motajs/client';
import { HeroKeyMover } from './main/action/move';
import { Camera } from './render/camera';
import * as Animation from 'mutate-animate';
import './render/index';
import * as RenderUtils from './render/utils';
import '@/module';
import { MotaOffscreenCanvas2D } from './fx/canvas2d';
// ----- 类注册
Mota.register('class', 'CustomToolbar', CustomToolbar);
@ -143,21 +131,7 @@ Mota.register('module', 'UIComponents', {
Mota.register('module', 'MCGenerator', MCGenerator);
Mota.register('module', 'Shadow', Shadow);
Mota.register('module', 'Effect', {});
Mota.register('module', 'Render', {
texture,
MotaRenderer,
Container,
Sprite,
Text,
Image,
RenderItem,
RenderAdapter,
Layer,
LayerGroupFloorBinder,
Camera,
MotaOffscreenCanvas2D,
Utils: RenderUtils
});
Mota.register('module', 'Render', Render);
Mota.register('module', 'Action', {
HeroKeyMover
});

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 { logger } from '@motajs/common';
import { ResponseBase } from '@/core/interface';
import {
deleteWith,

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

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

@ -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 { logger } from '@/core/common/logger';
import { logger } from '@motajs/common';
import EventEmitter from 'eventemitter3';
export interface IStreamController<T = void> {

View File

@ -1,4 +1,4 @@
import { DefaultProps, ElementLocator, Font, useKey } from '@/core/render';
import { DefaultProps, ElementLocator, Font, useKey } from '@motajs/render';
import { computed, defineComponent, reactive, ref } from 'vue';
import { Background, Selection } from './misc';
import { TextContent, TextContentExpose, TextContentProps } from './textbox';

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,15 +4,15 @@ import {
onTick,
PathProps,
Sprite
} from '@/core/render';
} from '@motajs/render';
import { computed, defineComponent, ref, SetupContext, watch } from 'vue';
import { SetupComponentOptions } from './types';
import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d';
import { MotaOffscreenCanvas2D } from '@motajs/render';
import { TextboxProps, TextContent, TextContentProps } from './textbox';
import { Scroll, ScrollExpose, ScrollProps } from './scroll';
import { transitioned } from '../use';
import { hyper } from 'mutate-animate';
import { logger } from '@/core/common/logger';
import { logger } from '@motajs/common';
import { GameUI, IUIMountable } from '@/core/system';
interface ProgressProps extends DefaultProps {

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;

View File

@ -17,12 +17,14 @@ import {
ElementLocator,
RenderItem,
Sprite,
Transform
} from '@/core/render';
import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d';
Transform,
MotaOffscreenCanvas2D,
IActionEvent,
IWheelEvent,
MouseType
} from '@motajs/render';
import { hyper, linear, Transition } from 'mutate-animate';
import { clamp } from 'lodash-es';
import { IActionEvent, IWheelEvent, MouseType } from '@/core/render/event';
import { transitioned } from '../use';
export const enum ScrollDirection {

View File

@ -1,4 +1,11 @@
import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d';
import {
ElementLocator,
Font,
Sprite,
DefaultProps,
Text,
MotaOffscreenCanvas2D
} from '@motajs/render';
import {
computed,
defineComponent,
@ -12,13 +19,10 @@ import {
VNode,
watch
} from 'vue';
import { logger } from '@/core/common/logger';
import { Sprite } from '@/core/render/sprite';
import { DefaultProps } from '@/core/render/renderer';
import { logger } from '@motajs/common';
import { isNil } from 'lodash-es';
import { SetupComponentOptions } from './types';
import EventEmitter from 'eventemitter3';
import { Text } from '@/core/render/preset';
import {
ITextContentConfig,
TextContentTyper,
@ -27,7 +31,6 @@ import {
WordBreak,
TextAlign
} from './textboxTyper';
import { ElementLocator, Font } from '@/core/render';
export interface TextContentProps
extends DefaultProps,

View File

@ -1,12 +1,12 @@
import { logger } from '@/core/common/logger';
import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d';
import { logger } from '@motajs/common';
import {
AutotileRenderable,
Font,
onTick,
RenderableData,
texture
} from '@/core/render';
texture,
MotaOffscreenCanvas2D
} from '@motajs/render';
import EventEmitter from 'eventemitter3';
import { isNil } from 'lodash-es';

View File

@ -1,10 +1,10 @@
import { DefaultProps, ElementLocator, Font, texture } from '@/core/render';
import { DefaultProps, ElementLocator, Font, texture } from '@motajs/render';
import { logger } from '@motajs/common';
import { computed, defineComponent, onUnmounted, ref } from 'vue';
import { SetupComponentOptions } from './types';
import { transitioned } from '../use';
import { hyper } from 'mutate-animate';
import { debounce } from 'lodash-es';
import { logger } from '@/core/common/logger';
export interface TipProps extends DefaultProps {
loc: ElementLocator;

View File

@ -1,5 +1,4 @@
import { MotaRenderer } from '@/core/render';
import { createApp } from '@/core/render';
import { MotaRenderer, createApp } from '@motajs/render';
import { defineComponent } from 'vue';
import { UIController } from '@/core/system';
import { mainSceneUI } from './ui/main';

View File

@ -10,7 +10,7 @@ import {
Props,
LayerGroup,
Font
} from '@/core/render';
} from '@motajs/render';
import { WeatherController } from '@/module/weather';
import { FloorChange } from '@/plugin/fallback';
import { LayerGroupFilter } from '@/plugin/fx/gameCanvas';

View File

@ -1,4 +1,4 @@
import { ElementLocator } from '@/core/render';
import { ElementLocator } from '@motajs/render';
import { GameUI, UIComponentProps } from '@/core/system';
import { defineComponent } from 'vue';
import {

View File

@ -1,11 +1,16 @@
import { GameUI, UIComponentProps } from '@/core/system';
import { computed, defineComponent, ref, watch } from 'vue';
import { SetupComponentOptions, TextContent } from '../components';
import { DefaultProps, ElementLocator, Sprite, Font } from '@/core/render';
import {
DefaultProps,
ElementLocator,
Sprite,
Font,
MotaOffscreenCanvas2D
} from '@motajs/render';
import { transitionedColor } from '../use';
import { linear } from 'mutate-animate';
import { Scroll } from '../components/scroll';
import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d';
import { getArea, MinimapDrawer } from '@/plugin/ui/fly';
import {
NumpadToolbar,

View File

@ -1,4 +1,4 @@
import { DefaultProps, ElementLocator, Font } from '@/core/render';
import { DefaultProps, ElementLocator, Font } from '@motajs/render';
import { computed, defineComponent, ref } from 'vue';
import { SetupComponentOptions } from '../components';
import {

View File

@ -1,8 +1,12 @@
import { Shader, ShaderProgram } from '@/core/render/shader';
import {
Shader,
ShaderProgram,
MotaRenderer,
Container,
IShaderUniform,
UniformType
} from '@motajs/render';
import { IWeather } from './weather';
import { MotaRenderer } from '@/core/render/render';
import { Container } from '@/core/render/container';
import { IShaderUniform, UniformType } from '@/core/render/gl2';
const rainVs = /* glsl */ `
in vec2 a_rainVertex;

View File

@ -1,10 +1,15 @@
import { Shader, ShaderProgram } from '@/core/render/shader';
import {
Shader,
ShaderProgram,
MotaRenderer,
Container,
GL2Program,
IShaderUniform,
UniformType,
Transform,
MotaOffscreenCanvas2D
} from '@motajs/render';
import { IWeather } from './weather';
import { MotaRenderer } from '@/core/render/render';
import { Container } from '@/core/render/container';
import { GL2Program, IShaderUniform, UniformType } from '@/core/render/gl2';
import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d';
import { Transform } from '@/core/render/transform';
const snowVs = /* glsl */ `
in vec2 a_snowVertex;

View File

@ -1,5 +1,5 @@
import { logger } from '@/core/common/logger';
import { RenderItem } from '@/core/render';
import { logger } from '@motajs/common';
import { RenderItem } from '@motajs/render';
import { Ticker } from 'mutate-animate';
export interface IWeather {

View File

@ -1,6 +1,9 @@
import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d';
import { RenderItem, RenderItemPosition } from '@/core/render/item';
import { Transform } from '@/core/render/transform';
import {
MotaOffscreenCanvas2D,
RenderItem,
RenderItemPosition,
Transform
} from '@motajs/render';
import { IStateDamageable } from '@/game/state/interface';
import EventEmitter from 'eventemitter3';
import { Ticker } from 'mutate-animate';

View File

@ -1,15 +1,14 @@
import { IStateDamageable } from '@/game/state/interface';
import { BarrageBoss, BossSprite, Hitbox } from './barrage';
import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d';
import {
Container,
HeroRenderer,
LayerGroup,
MotaRenderer,
RenderItem,
Shader,
Transform
} from '@/core/render';
Transform,
MotaOffscreenCanvas2D
} from '@motajs/render';
import { Pop } from '../fx/pop';
import { SplittableBall } from './palaceBossProjectile';
import { PointEffect } from '../fx/pointShader';

View File

@ -1,5 +1,4 @@
import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d';
import { Transform } from '@/core/render';
import { Transform, MotaOffscreenCanvas2D } from '@motajs/render';
import { IStateDamageable } from '@/game/state/interface';
import { Hitbox, Projectile } from './barrage';
import type { PalaceBoss } from './palaceBoss';
@ -223,7 +222,7 @@ export class SplittableBall extends Projectile<PalaceBoss> {
}
}
ai(boss: PalaceBoss, time: number, frame: number, dt: number): void {
ai(boss: PalaceBoss, time: number, _frame: number, dt: number): void {
if (this.splitData?.split) {
if (time > this.splitData.time) {
this.split(boss);
@ -256,7 +255,7 @@ export class SplittableBall extends Projectile<PalaceBoss> {
this.setPosition(x + this.vx * p, y + this.vy * p);
}
render(canvas: MotaOffscreenCanvas2D, transform: Transform): void {
render(canvas: MotaOffscreenCanvas2D, _transform: Transform): void {
if (!this.color) return;
const texture = SplittableBall.ball.get(this.color);
if (!texture) return;

View File

@ -1,12 +1,15 @@
import { Shader } from '@/core/render/shader';
import {
Shader,
MotaRenderer,
LayerGroup,
RenderItem,
MotaOffscreenCanvas2D,
Container,
HeroRenderer
} from '@motajs/render';
import { PointEffect } from '../fx/pointShader';
import { BarrageBoss, BossSprite, Hitbox } from './barrage';
import { MotaRenderer } from '@/core/render/render';
import { LayerGroup } from '@/core/render/preset/layer';
import { RenderItem } from '@/core/render/item';
import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d';
import { Animation, hyper, power, sleep, Transition } from 'mutate-animate';
import { Container } from '@/core/render/container';
import {
ArrowProjectile,
AttackProjectile,
@ -19,7 +22,6 @@ import {
ThunderProjectile
} from './towerBossProjectile';
import { IStateDamageable } from '@/game/state/interface';
import { HeroRenderer } from '@/core/render/preset/hero';
import { Pop } from '../fx/pop';
import { WeatherController } from '@/module';

View File

@ -1,7 +1,6 @@
import { hyper, power, TimingFn } from 'mutate-animate';
import { Hitbox, Projectile } from './barrage';
import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d';
import { Transform } from '@/core/render/transform';
import { MotaOffscreenCanvas2D, Transform } from '@motajs/render';
import type { TowerBoss } from './towerBoss';
import { IStateDamageable } from '@/game/state/interface';
import { PointEffect, PointEffectType } from '../fx/pointShader';

View File

@ -1,11 +1,14 @@
import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d';
import { CameraAnimation } from '@/core/render/camera';
import { Container } from '@/core/render/container';
import { LayerGroup } from '@/core/render/preset/layer';
import { MotaRenderer } from '@/core/render/render';
import { Shader } from '@/core/render/shader';
import { Sprite } from '@/core/render/sprite';
import { disableViewport, enableViewport } from '@/core/render/utils';
import { MotaOffscreenCanvas2D } from '@motajs/render';
import {
CameraAnimation,
Container,
LayerGroup,
MotaRenderer,
Shader,
Sprite,
disableViewport,
enableViewport
} from '@motajs/render';
import type { HeroMover, MoveStep } from '@/game/state/move';
import EventEmitter from 'eventemitter3';

View File

@ -1,10 +1,14 @@
import { Animation, hyper, linear, power, sleep } from 'mutate-animate';
import { Chase, ChaseData, IChaseController } from './chase';
import { completeAchievement } from '../ui/achievement';
import { Camera, CameraAnimation, ICameraScale } from '@/core/render/camera';
import { LayerGroup } from '@/core/render/preset/layer';
import { MotaRenderer } from '@/core/render/render';
import { Sprite } from '@/core/render/sprite';
import {
Camera,
CameraAnimation,
ICameraScale,
LayerGroup,
MotaRenderer,
Sprite
} from '@motajs/render';
import { PointEffect, PointEffectType } from '../fx/pointShader';
import { bgmController } from '@/module';

View File

@ -1,7 +1,10 @@
import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d';
import { wrapInstancedComponent } from '@/core/render';
import { RenderItem, RenderItemPosition } from '@/core/render/item';
import { Transform } from '@/core/render/transform';
import {
wrapInstancedComponent,
MotaOffscreenCanvas2D,
RenderItem,
RenderItemPosition,
Transform
} from '@motajs/render';
// 渲染端的向后兼容用,会充当两个版本间过渡的作用
class Change extends RenderItem {

View File

@ -1,9 +1,9 @@
import { logger } from '@/core/common/logger';
import { LayerGroupFloorBinder } from '@/core/render/preset/floor';
import { logger } from '@motajs/common';
import {
LayerGroupFloorBinder,
ILayerGroupRenderExtends,
LayerGroup
} from '@/core/render/preset/layer';
} from '@motajs/render';
const filterMap: [FloorIds[], string][] = [];

View File

@ -1,13 +1,13 @@
import { logger } from '@/core/common/logger';
import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d';
import { logger } from '@motajs/common';
import { MotaOffscreenCanvas2D } from '@motajs/render';
import { mainSetting } from '@/core/main/setting';
import { LayerGroupFloorBinder } from '@/core/render/preset/floor';
import {
LayerGroupFloorBinder,
ILayerGroupRenderExtends,
LayerGroup
} from '@/core/render/preset/layer';
import { Sprite } from '@/core/render/sprite';
import { Transform } from '@/core/render/transform';
LayerGroup,
Sprite,
Transform
} from '@motajs/render';
const gameListener = Mota.require('var', 'gameListener');

View File

@ -1,15 +1,13 @@
import { logger } from '@/core/common/logger';
import { logger } from '@motajs/common';
import { mainSetting } from '@/core/main/setting';
import {
Damage,
DamageRenderable,
FloorDamageExtends
} from '@/core/render/preset/damage';
import { LayerGroupFloorBinder } from '@/core/render/preset/floor';
import {
FloorDamageExtends,
LayerGroupFloorBinder,
ILayerGroupRenderExtends,
LayerGroup
} from '@/core/render/preset/layer';
} from '@motajs/render';
interface ItemDetailData {
x: number;

View File

@ -1,7 +1,5 @@
import { logger } from '@/core/common/logger';
import { UniformType } from '@/core/render/gl2';
import { Shader, ShaderProgram } from '@/core/render/shader';
import { Transform } from '@/core/render/transform';
import { logger } from '@motajs/common';
import { UniformType, Shader, ShaderProgram, Transform } from '@motajs/render';
export const enum PointEffectType {
/**

View File

@ -1,7 +1,11 @@
import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d';
import { wrapInstancedComponent } from '@/core/render';
import { RenderItem, RenderItemPosition } from '@/core/render/item';
import { Transform } from '@/core/render/transform';
import {
wrapInstancedComponent,
RenderItem,
RenderItemPosition,
Transform,
MotaOffscreenCanvas2D
} from '@motajs/render';
import { TimingFn } from 'mutate-animate';
interface PopData {
@ -61,7 +65,7 @@ export class Pop extends RenderItem {
protected render(
canvas: MotaOffscreenCanvas2D,
transform: Transform
_transform: Transform
): void {
const ctx = canvas.ctx;
const toDelete = new Set<PopData>();

View File

@ -1,12 +1,12 @@
import { logger } from '@/core/common/logger';
import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d';
import { logger } from '@motajs/common';
import { MotaOffscreenCanvas2D } from '@motajs/render';
import { mainSetting, MotaSettingItem } from '@/core/main/setting';
import { LayerGroupFloorBinder } from '@/core/render/preset/floor';
import {
LayerGroupFloorBinder,
ILayerGroupRenderExtends,
LayerGroup
} from '@/core/render/preset/layer';
import { Sprite } from '@/core/render/sprite';
LayerGroup,
Sprite
} from '@motajs/render';
import type { BluePalace } from '@/game/mechanism/misc';
/** 最大粒子数 */

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