diff --git a/packages-user/client-base/src/index.ts b/packages-user/client-base/src/index.ts
index 865440a..24d06d0 100644
--- a/packages-user/client-base/src/index.ts
+++ b/packages-user/client-base/src/index.ts
@@ -1,9 +1,10 @@
+export * from './components';
+export * from './elements';
+export * from './layout';
+export * from './map';
export * from './material';
export * from './save';
-export * from './types';
-export * from './layout';
export * from './shared';
-export * from './components';
-export * from './elements';
-export * from './map';
+export * from './types';
+export * from './utils';
diff --git a/packages-user/client-modules/src/client.ts b/packages-user/client-modules/src/client.ts
index ce377da..5c33ba4 100644
--- a/packages-user/client-modules/src/client.ts
+++ b/packages-user/client-modules/src/client.ts
@@ -42,7 +42,7 @@ import {
import { IRendererUsing, RendererUsing } from '@motajs/render-vue';
import { IUIController, UIController } from '@motajs/system';
import { createApp } from './render';
-import { LoadSceneUI } from './ui/load';
+import { LoadSceneUI } from '../../../src/client/ui/load';
import { createUIPropsBase } from './ui/func';
export class ClientCore extends CoreState implements IClientCore {
diff --git a/packages-user/client-modules/src/index.ts b/packages-user/client-modules/src/index.ts
index 63723ca..ceb959a 100644
--- a/packages-user/client-modules/src/index.ts
+++ b/packages-user/client-modules/src/index.ts
@@ -10,6 +10,4 @@ export * from './ui';
export * from './client';
export * from './common';
-export * from './core';
-export * from './shared';
export * from './types';
diff --git a/packages-user/client-modules/src/render/action.ts b/packages-user/client-modules/src/render/action.ts
deleted file mode 100644
index 0dd5e9d..0000000
--- a/packages-user/client-modules/src/render/action.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import { gameKey } from '@motajs/system';
-import { POP_BOX_WIDTH, CENTER_LOC, FULL_LOC } from '../shared';
-import {
- saveSave,
- mainUIController,
- saveLoad,
- openSettings,
- openViewMap,
- openReplay,
- openStatistics
-} from '../ui';
-import { ElementLocator } from '@motajs/render';
-
-export function createAction() {
- gameKey
- .realize('save', () => {
- saveSave(mainUIController, FULL_LOC);
- })
- .realize('statistics', () => {
- openStatistics(mainUIController);
- })
- .realize('load', () => {
- saveLoad(mainUIController, FULL_LOC);
- })
- .realize('menu', () => {
- const loc = CENTER_LOC.slice() as ElementLocator;
- loc[2] = POP_BOX_WIDTH;
- openSettings(mainUIController, loc);
- })
- .realize('replay', () => {
- const loc = CENTER_LOC.slice() as ElementLocator;
- loc[2] = POP_BOX_WIDTH;
- openReplay(mainUIController, loc);
- })
- .realize('viewMap', () => {
- openViewMap(mainUIController, FULL_LOC);
- });
-}
diff --git a/packages-user/client-modules/src/render/index.tsx b/packages-user/client-modules/src/render/index.tsx
index 733b8ac..1685f1f 100644
--- a/packages-user/client-modules/src/render/index.tsx
+++ b/packages-user/client-modules/src/render/index.tsx
@@ -1,38 +1,7 @@
-import { Font } from '@motajs/render';
-import { defineComponent } from 'vue';
-import { DEFAULT_FONT, MAIN_HEIGHT, MAIN_WIDTH } from '../shared';
import { createElements } from '@user/client-base';
-import { mainRenderer } from './renderer';
-import { createUI } from '../ui';
-import { createAction } from './action';
-import { sceneController } from './scene';
-import { createWeather } from './weather';
-import { createApp } from './renderer';
-import { LoadSceneUI } from '../ui/load';
-
-export function createGameRenderer() {
- const App = defineComponent(_props => {
- return () => (
-
- {sceneController.render()}
-
- );
- });
-
- mainRenderer.hide();
- createApp(App).mount(mainRenderer);
-
- sceneController.open(LoadSceneUI, {});
- mainRenderer.show();
-}
export function createRender() {
createElements();
- createUI();
- createAction();
- createWeather();
-
- Font.setDefaults(DEFAULT_FONT);
}
export * from './fx';
diff --git a/packages-user/client-modules/src/render/weather/index.ts b/packages-user/client-modules/src/render/weather/index.ts
index bea1963..a43ce88 100644
--- a/packages-user/client-modules/src/render/weather/index.ts
+++ b/packages-user/client-modules/src/render/weather/index.ts
@@ -1,20 +1,3 @@
-import { WeatherController } from './controller';
-import {
- CloudWeather,
- FogWeather,
- RainWeather,
- SnowWeather,
- SunWeather
-} from './presets';
-
-export function createWeather() {
- WeatherController.register('cloud', CloudWeather);
- WeatherController.register('rain', RainWeather);
- WeatherController.register('snow', SnowWeather);
- WeatherController.register('sun', SunWeather);
- WeatherController.register('fog', FogWeather);
-}
-
export * from './presets';
export * from './controller';
export * from './types';
diff --git a/packages-user/client-modules/src/types.ts b/packages-user/client-modules/src/types.ts
index 96f7117..9074c42 100644
--- a/packages-user/client-modules/src/types.ts
+++ b/packages-user/client-modules/src/types.ts
@@ -77,3 +77,8 @@ export interface IClientCore extends IClientSystem {
id: string
): Readonly> | null;
}
+
+export interface IClientCoreExtended {
+ /** 渲染端主对象 */
+ readonly state: IClientCore;
+}
diff --git a/packages-user/client-modules/src/ui/func.ts b/packages-user/client-modules/src/ui/func.ts
index 1a67f11..bd73864 100644
--- a/packages-user/client-modules/src/ui/func.ts
+++ b/packages-user/client-modules/src/ui/func.ts
@@ -5,6 +5,7 @@ import {
UIPropsBaseCreator
} from '@motajs/system';
import { IClientBase, IGameUIPropsBase } from '@user/client-base';
+import { markRaw } from 'vue';
/**
* 创建游戏 UI 基础参数的构造函数
@@ -20,7 +21,7 @@ export function createUIPropsBase(
return {
instance,
controller,
- state
+ state: markRaw(state)
};
};
}
diff --git a/packages-user/client-modules/src/ui/index.ts b/packages-user/client-modules/src/ui/index.ts
index 9c77795..00b35c5 100644
--- a/packages-user/client-modules/src/ui/index.ts
+++ b/packages-user/client-modules/src/ui/index.ts
@@ -1,17 +1,2 @@
-import { createMainController } from './controller';
-
-export function createUI() {
- createMainController();
-}
-
export * from './types';
-export * from './save';
-export * from './statistics';
-export * from './viewmap';
-export * from './controller';
-export * from './background';
export * from './func';
-export * from './main';
-export * from './settings';
-export * from './statusBar';
-export * from './toolbar';
diff --git a/src/bootstrap.ts b/src/bootstrap.ts
index bcf50fd..e0f678e 100644
--- a/src/bootstrap.ts
+++ b/src/bootstrap.ts
@@ -1,7 +1,7 @@
import { WebLoadStarter } from '@motajs/loader';
import { createClientCore } from './client/entry';
import { IClientCore } from '@user/client-modules';
-import { LoadSceneUI } from '../packages-user/client-modules/src/ui/load';
+import { LoadSceneUI } from './client/ui/load';
declare global {
interface Window {
diff --git a/src/constant.ts b/src/client/constant.ts
similarity index 68%
rename from src/constant.ts
rename to src/client/constant.ts
index 4acf010..397eaf2 100644
--- a/src/constant.ts
+++ b/src/client/constant.ts
@@ -1,17 +1,8 @@
-import { FaceGroup } from '@user/data-common';
+import { MAIN_HEIGHT, MAIN_WIDTH } from './ui';
// 本文件是游戏的底层核心配置,如果不懂的话千万不要动
-//#region 数据端配置
-
-/** 数据端核心配置对象,不懂的话就不要动 */
-export const CORE_URL = 'content/core.jsonc';
-/** 勇士的默认朝向组,用于控制勇士的移动,不懂的话就不要动 */
-export const HERO_FACE = FaceGroup.Dir8;
-
-//#endregion
-
-//#region 渲染端配置
+//#region 常规配置
/** 渲染端的渲染画布,不懂的话就不要动 */
export const RENDER_CANVAS = '#render-main';
@@ -22,16 +13,16 @@ export const TILESET_RESERVE = 100000;
/** 一个 Tileset 的图块数量单位,例如 10000 时表示一个 Tileset 会占用 10000 或 10000 的倍数个图块,不懂的话不要动 */
export const TILESET_UNIT = 10000;
-// 关于渲染的其他配置可在 ./client/ui/config.ts 中修改,
+// 关于渲染的其他配置可在 ./ui/constant.ts 中修改,
// 关于高级渲染设置,请参考样板使用文档,那里会进行更详细的讲解。
-/** 渲染器的渲染宽度,默认为地图宽度 416 + 左侧状态栏宽度 180 */
-export const RENDER_WIDTH = 416 + 180;
-/** 渲染器的渲染高度,默认为地图高度 416 */
-export const RENDER_HEIGHT = 416;
+/** 渲染器的渲染宽度,默认为 UI 配置中的整体宽度 */
+export const RENDER_WIDTH = MAIN_WIDTH;
+/** 渲染器的渲染高度,默认为 UI 配置中的整体高度 */
+export const RENDER_HEIGHT = MAIN_HEIGHT;
//#endregion
-//#region 渲染端调试配置
+//#region 调试配置
/**
* 渲染器的激励源是否使用变速器,使用后可以通过 {@link VARIATOR_DEBUG_SPEED} 调整激励源速度,
diff --git a/src/client/entry.ts b/src/client/entry.ts
index f16d83d..ade9680 100644
--- a/src/client/entry.ts
+++ b/src/client/entry.ts
@@ -11,7 +11,7 @@ import {
RENDER_WIDTH,
TILESET_RESERVE,
TILESET_UNIT
-} from '../constant';
+} from './constant';
import { createCoreStateConfig } from '../data/entry';
import { MainClientPlugin } from './initialize';
import { clientPlugins } from './plugin';
diff --git a/src/client/index.ts b/src/client/index.ts
new file mode 100644
index 0000000..9edced4
--- /dev/null
+++ b/src/client/index.ts
@@ -0,0 +1,3 @@
+export * from './constant';
+export * from './entry';
+export * from './initialize';
diff --git a/packages-user/client-modules/src/ui/background.tsx b/src/client/ui/background.tsx
similarity index 93%
rename from packages-user/client-modules/src/ui/background.tsx
rename to src/client/ui/background.tsx
index 7383d58..3639f48 100644
--- a/packages-user/client-modules/src/ui/background.tsx
+++ b/src/client/ui/background.tsx
@@ -5,7 +5,7 @@ import {
} from '@motajs/system';
import { DefaultProps } from '@motajs/render-vue';
import { defineComponent } from 'vue';
-import { MAIN_WIDTH, MAIN_HEIGHT } from '../shared';
+import { MAIN_HEIGHT, MAIN_WIDTH } from './constant';
export interface MainBackgroundProps
extends DefaultProps, IUIDefaultPropsBase {}
diff --git a/packages-user/client-modules/src/ui/book.tsx b/src/client/ui/book.tsx
similarity index 98%
rename from packages-user/client-modules/src/ui/book.tsx
rename to src/client/ui/book.tsx
index 7a01012..e922887 100644
--- a/packages-user/client-modules/src/ui/book.tsx
+++ b/src/client/ui/book.tsx
@@ -7,8 +7,8 @@ import { IEnemyView } from '@user/data-system';
import { IReadonlyEnemy } from '@user/data-base';
import { IEnemyAttr } from '@user/data-common';
import { BookDetailUI } from './bookDetail';
-import { FULL_LOC, MAIN_HEIGHT, MAIN_WIDTH } from '../shared';
-import { IUIPropsBase } from './types';
+import { FULL_LOC, MAIN_HEIGHT, MAIN_WIDTH } from './constant';
+import { IUIPropsBase } from '@user/client-modules';
export interface BookProps extends IUIPropsBase {}
diff --git a/packages-user/client-modules/src/ui/bookDetail.tsx b/src/client/ui/bookDetail.tsx
similarity index 98%
rename from packages-user/client-modules/src/ui/bookDetail.tsx
rename to src/client/ui/bookDetail.tsx
index a935688..e12699c 100644
--- a/packages-user/client-modules/src/ui/bookDetail.tsx
+++ b/src/client/ui/bookDetail.tsx
@@ -6,8 +6,8 @@ import { Scroll, TextContent } from '@user/client-base';
import { IEnemyCritical, IEnemyView, EnemyView } from '@user/data-system';
import { IEnemy, IReadonlyEnemy } from '@user/data-base';
import { IEnemyAttr } from '@user/data-common';
-import { FULL_LOC, MAIN_HEIGHT, MAIN_WIDTH } from '../shared';
-import { IUIPropsBase } from './types';
+import { FULL_LOC, MAIN_HEIGHT, MAIN_WIDTH } from './constant';
+import { IUIPropsBase } from '@user/client-modules';
/** 详情当前展示的属性模式 */
const enum DetailMode {
diff --git a/packages-user/client-modules/src/shared.ts b/src/client/ui/constant.ts
similarity index 52%
rename from packages-user/client-modules/src/shared.ts
rename to src/client/ui/constant.ts
index 2e80c8a..5f66097 100644
--- a/packages-user/client-modules/src/shared.ts
+++ b/src/client/ui/constant.ts
@@ -2,22 +2,20 @@ import { ElementLocator, Font } from '@motajs/render';
// 本文件为 UI 配置文件,你可以修改下面的每个常量来控制 UI 的显示参数,每个常量都有注释说明
-//#region 地图
+//#region 地图配置
-/** 每个格子的默认宽度,现阶段用处不大 */
+/** 每个格子的宽度 */
export const CELL_WIDTH = 32;
-/** 每个格子的默认高度,现阶段用处不大 */
+/** 每个格子的高度 */
export const CELL_HEIGHT = 32;
-/** 每个格子的宽高 */
-export const CELL_SIZE = 32;
/** 地图格子宽度,此处仅影响画面,不影响游戏内逻辑,游戏内逻辑地图大小请在 core.js 中修改 */
export const MAP_BLOCK_WIDTH = 13;
/** 地图格子高度,此处仅影响画面,不影响游戏内逻辑,游戏内逻辑地图大小请在 core.js 中修改 */
export const MAP_BLOCK_HEIGHT = 13;
/** 地图像素宽度 */
-export const MAP_WIDTH = CELL_SIZE * MAP_BLOCK_WIDTH;
+export const MAP_WIDTH = CELL_WIDTH * MAP_BLOCK_WIDTH;
/** 地图像素高度 */
-export const MAP_HEIGHT = CELL_SIZE * MAP_BLOCK_HEIGHT;
+export const MAP_HEIGHT = CELL_HEIGHT * MAP_BLOCK_HEIGHT;
/** 地图宽度的一半 */
export const HALF_MAP_WIDTH = MAP_WIDTH / 2;
/** 地图高度的一半 */
@@ -37,7 +35,7 @@ export const DOOR_ANIMATE_INTERVAL = 50;
//#endregion
-//#region 状态栏
+//#region 状态栏配置
/** 状态栏像素宽度 */
export const STATUS_BAR_WIDTH = 180;
@@ -86,72 +84,3 @@ export const POP_BOX_WIDTH = MAP_WIDTH / 2;
export const DEFAULT_FONT = new Font('Verdana', 16);
//#endregion
-
-//#region 加载界面
-
-/** 加载界面的任务进度条半径 */
-export const LOAD_TASK_RADIUS = Math.min(MAIN_WIDTH, MAIN_HEIGHT) / 6;
-/** 加载界面的字节进度条纵轴位置 */
-export const LOAD_BYTE_HEIGHT = MAIN_HEIGHT / 2 + MAIN_HEIGHT / 4;
-/** 加载界面任务进度条的纵轴位置 */
-export const LOAD_TASK_CENTER_HEIGHT = MAIN_HEIGHT / 2 - MAIN_HEIGHT / 8;
-/** 加载界面字节进度条的长度 */
-export const LOAD_BYTE_LENGTH = MAIN_WIDTH - MAIN_WIDTH / 12;
-/** 加载界面任务进度条的粗细 */
-export const LOAD_TASK_LINE_WIDTH = 6;
-/** 加载界面字节进度条的粗细 */
-export const LOAD_BYTE_LINE_WIDTH = 6;
-/** 已加载部分进度条的颜色 */
-export const LOAD_LOADED_COLOR = '#57ff78';
-/** 未加载部分进度条的颜色 */
-export const LOAD_UNLOADED_COLOR = '#ccc';
-/** 加载界面的文字颜色 */
-export const LOAD_FONT_COLOR = '#fff';
-
-//#endregion
-
-//#region 存档界面
-
-/** 存档缩略图尺寸 */
-export const SAVE_ITEM_SIZE = MAP_BLOCK_WIDTH * 10;
-/** 单个存档上方显示第几号存档的高度 */
-export const SAVE_ITEM_TOP = 24;
-/** 单个存档下方显示这个存档信息的高度 */
-export const SAVE_ITEM_DOWN = 24;
-/** 单个存档高度,包括存档下方的信息 */
-export const SAVE_ITEM_HEIGHT = SAVE_ITEM_SIZE + SAVE_ITEM_TOP + SAVE_ITEM_DOWN;
-/** 存档间距 */
-export const SAVE_INTERVAL = 20;
-/** 存档下巴高度,即下方显示页码和返回按钮的高度 */
-export const SAVE_DOWN_PAD = 30;
-/** 存档页码数,调高并不会影响性能,但是如果玩家存档太多的话会导致存档体积很大 */
-export const SAVE_PAGES = 1000;
-
-//#endregion
-
-//#region 标题界面
-
-/** 标题图 */
-export const TITLE_BACKGROUND_IMAGE = 'bg.jpg';
-
-/** 标题文字中心横坐标 */
-export const TITLE_X = HALF_WIDTH;
-/** 标题文字中心纵坐标 */
-export const TITLE_Y = 100;
-/** 标题文字的填充颜色 */
-export const TITLE_FILL = 'white';
-/** 标题文字的描边颜色 */
-export const TITLE_STROKE = 'black';
-/** 标题文字的描边宽度 */
-export const TITLE_STROKE_WIDTH = 2;
-
-/** 标题界面按钮宽度,如果文字被裁剪可以考虑扩大此值 */
-export const BUTTONS_WIDTH = 160;
-/** 标题界面按钮高度,如果文字被裁剪可以考虑扩大此值 */
-export const BUTTONS_HEIGHT = 200;
-/** 标题界面按钮中心横坐标 */
-export const BUTTONS_X = HALF_WIDTH;
-/** 标题界面按钮左上角纵坐标 */
-export const BUTTONS_Y = MAIN_HEIGHT - BUTTONS_HEIGHT;
-
-//#endregion
diff --git a/packages-user/client-modules/src/ui/equipbox.tsx b/src/client/ui/equipbox.tsx
similarity index 99%
rename from packages-user/client-modules/src/ui/equipbox.tsx
rename to src/client/ui/equipbox.tsx
index 89cd89e..c91030a 100644
--- a/packages-user/client-modules/src/ui/equipbox.tsx
+++ b/src/client/ui/equipbox.tsx
@@ -5,8 +5,8 @@ import { Font } from '@motajs/render';
import { Scroll, TextContent } from '@user/client-base';
import { EquipStatus, IHeroState } from '@user/data-base';
import { IHeroAttr } from '@user/data-common';
-import { FULL_LOC, MAIN_HEIGHT, MAIN_WIDTH } from '../shared';
-import { IUIPropsBase } from './types';
+import { FULL_LOC, MAIN_HEIGHT, MAIN_WIDTH } from './constant';
+import { IUIPropsBase } from '@user/client-modules';
interface IHeroAttrItem {
/** 勇士属性的键名 */
diff --git a/src/client/ui/index.ts b/src/client/ui/index.ts
new file mode 100644
index 0000000..4e39505
--- /dev/null
+++ b/src/client/ui/index.ts
@@ -0,0 +1,16 @@
+export * from './background';
+export * from './book';
+export * from './bookDetail';
+export * from './equipbox';
+export * from './load';
+export * from './main';
+export * from './save';
+export * from './settings';
+export * from './statistics';
+export * from './statusBar';
+export * from './title';
+export * from './toolbar';
+export * from './toolbox';
+export * from './viewmap';
+
+export * from './constant';
diff --git a/packages-user/client-modules/src/ui/load.tsx b/src/client/ui/load.tsx
similarity index 82%
rename from packages-user/client-modules/src/ui/load.tsx
rename to src/client/ui/load.tsx
index d5980c0..c792f44 100644
--- a/packages-user/client-modules/src/ui/load.tsx
+++ b/src/client/ui/load.tsx
@@ -1,26 +1,33 @@
import { DefaultProps } from '@motajs/render-vue';
import { GameUI, SetupComponentOptions } from '@motajs/system';
import { defineComponent } from 'vue';
-import {
- FULL_LOC,
- LOAD_BYTE_HEIGHT,
- LOAD_BYTE_LENGTH,
- LOAD_BYTE_LINE_WIDTH,
- LOAD_FONT_COLOR,
- LOAD_LOADED_COLOR,
- LOAD_TASK_CENTER_HEIGHT,
- LOAD_TASK_LINE_WIDTH,
- LOAD_TASK_RADIUS,
- LOAD_UNLOADED_COLOR,
- MAIN_WIDTH
-} from '../shared';
+import { FULL_LOC, MAIN_HEIGHT, MAIN_WIDTH } from './constant';
import { ElementLocator, Font, MotaOffscreenCanvas2D } from '@motajs/render';
-import { transitioned } from '../render/use';
+import { transitioned } from '../../../packages-user/client-modules/src/render/use';
import { cosh, CurveMode, linear } from '@motajs/animate';
import { clamp } from 'lodash-es';
import { sleep } from '@motajs/common';
import { GameTitleUI } from './title';
-import { IUIPropsBase } from './types';
+import { IUIPropsBase } from '@user/client-modules';
+
+/** 加载界面的任务进度条半径 */
+export const LOAD_TASK_RADIUS = Math.min(MAIN_WIDTH, MAIN_HEIGHT) / 6;
+/** 加载界面的字节进度条纵轴位置 */
+export const LOAD_BYTE_HEIGHT = MAIN_HEIGHT / 2 + MAIN_HEIGHT / 4;
+/** 加载界面任务进度条的纵轴位置 */
+export const LOAD_TASK_CENTER_HEIGHT = MAIN_HEIGHT / 2 - MAIN_HEIGHT / 8;
+/** 加载界面字节进度条的长度 */
+export const LOAD_BYTE_LENGTH = MAIN_WIDTH - MAIN_WIDTH / 12;
+/** 加载界面任务进度条的粗细 */
+export const LOAD_TASK_LINE_WIDTH = 6;
+/** 加载界面字节进度条的粗细 */
+export const LOAD_BYTE_LINE_WIDTH = 6;
+/** 已加载部分进度条的颜色 */
+export const LOAD_LOADED_COLOR = '#57ff78';
+/** 未加载部分进度条的颜色 */
+export const LOAD_UNLOADED_COLOR = '#ccc';
+/** 加载界面的文字颜色 */
+export const LOAD_FONT_COLOR = '#fff';
export interface ILoadProps extends IUIPropsBase, DefaultProps {}
diff --git a/packages-user/client-modules/src/ui/main.tsx b/src/client/ui/main.tsx
similarity index 80%
rename from packages-user/client-modules/src/ui/main.tsx
rename to src/client/ui/main.tsx
index 7a131c7..b7991c2 100644
--- a/packages-user/client-modules/src/ui/main.tsx
+++ b/src/client/ui/main.tsx
@@ -1,9 +1,4 @@
-import {
- Font,
- IActionEvent,
- MotaOffscreenCanvas2D,
- CustomRenderItem
-} from '@motajs/render';
+import { Font, MotaOffscreenCanvas2D, CustomRenderItem } from '@motajs/render';
// import { WeatherController } from '../weather';
import { defineComponent, ref } from 'vue';
import { Textbox, TextboxProps, Tip } from '@user/client-base';
@@ -17,13 +12,10 @@ import {
RIGHT_STATUS_POS,
STATUS_BAR_HEIGHT,
STATUS_BAR_WIDTH
-} from '../shared';
+} from './constant';
import { LeftStatusBar, RightStatusBar } from './statusBar';
-import { state } from '@user/data-state';
-import { mainUIController } from './controller';
import { isNil } from 'lodash-es';
-import { using } from '../render/renderer';
-import { IUIPropsBase } from './types';
+import { IUIPropsBase, using } from '@user/client-modules';
interface MainSceneProps extends IUIPropsBase {}
@@ -98,35 +90,6 @@ const MainScene = defineComponent(props => {
});
};
- //#region 交互监听
-
- /**
- * 对于 registerAction 的 fallback
- */
- const clickMap = (ev: IActionEvent) => {
- const bx = Math.floor(ev.offsetX / 32);
- const by = Math.floor(ev.offsetY / 32);
- core.doRegisteredAction('onup', bx, by, ev.offsetX, ev.offsetY);
- };
-
- /**
- * 对于 registerAction 的 fallback
- */
- const downMap = (ev: IActionEvent) => {
- const bx = Math.floor(ev.offsetX / 32);
- const by = Math.floor(ev.offsetY / 32);
- core.doRegisteredAction('ondown', bx, by, ev.offsetX, ev.offsetY);
- };
-
- /**
- * 对于 registerAction 的 fallback
- */
- const moveMap = (ev: IActionEvent) => {
- const bx = Math.floor(ev.offsetX / 32);
- const by = Math.floor(ev.offsetY / 32);
- core.doRegisteredAction('onmove', bx, by, ev.offsetX, ev.offsetY);
- };
-
return () => (
(props => {
id="map-draw"
loc={[STATUS_BAR_WIDTH, 0, MAP_WIDTH, MAP_HEIGHT]}
zIndex={10}
- onClick={clickMap}
- onDown={downMap}
- onMove={moveMap}
noanti
>
(props => {
>
- {mainUIController.render()}
+ {props.state.mainUIController.render()}
, IUIPropsBase {
loc: ElementLocator;
diff --git a/packages-user/client-modules/src/ui/statistics.tsx b/src/client/ui/statistics.tsx
similarity index 100%
rename from packages-user/client-modules/src/ui/statistics.tsx
rename to src/client/ui/statistics.tsx
diff --git a/packages-user/client-modules/src/ui/statusBar.tsx b/src/client/ui/statusBar.tsx
similarity index 98%
rename from packages-user/client-modules/src/ui/statusBar.tsx
rename to src/client/ui/statusBar.tsx
index 9af6c2c..7e05143 100644
--- a/packages-user/client-modules/src/ui/statusBar.tsx
+++ b/src/client/ui/statusBar.tsx
@@ -7,17 +7,17 @@ import {
reactive,
shallowReactive
} from 'vue';
-import { TextContent, IClientBaseExtended } from '@user/client-base';
+import { TextContent } from '@user/client-base';
import { ElementLocator, Font, ITexture } from '@motajs/render';
import { MixedToolbar, ReplayingStatus } from './toolbar';
import { openViewMap } from './viewmap';
-import { mainUIController } from './controller';
import {
MAIN_HEIGHT,
MAIN_WIDTH,
STATUS_BAR_HEIGHT,
STATUS_BAR_WIDTH
-} from '../shared';
+} from './constant';
+import { IUIPropsBase } from '@user/client-modules';
import { DefaultProps } from '@motajs/render-vue';
export interface ILeftHeroStatus {
@@ -99,7 +99,7 @@ interface KeyLikeInfo {
readonly items: KeyLikeItem[];
}
-interface StatusBarProps extends DefaultProps, IClientBaseExtended {
+interface StatusBarProps extends IUIPropsBase, DefaultProps {
loc: ElementLocator;
hidden: boolean;
}
@@ -446,7 +446,7 @@ export const LeftStatusBar = defineComponent(p => {
* 点击楼层名打开浏览地图
*/
const viewMap = () => {
- openViewMap(mainUIController, [0, 0, MAIN_WIDTH, MAIN_HEIGHT]);
+ openViewMap(p.state.mainUIController, [0, 0, MAIN_WIDTH, MAIN_HEIGHT]);
};
return () => (
diff --git a/packages-user/client-modules/src/ui/title.tsx b/src/client/ui/title.tsx
similarity index 93%
rename from packages-user/client-modules/src/ui/title.tsx
rename to src/client/ui/title.tsx
index 1f48279..8147be5 100644
--- a/packages-user/client-modules/src/ui/title.tsx
+++ b/src/client/ui/title.tsx
@@ -1,37 +1,49 @@
import { DefaultProps } from '@motajs/render-vue';
import { GameUI, SetupComponentOptions } from '@motajs/system';
import { defineComponent, nextTick, onMounted, ref } from 'vue';
-import {
- BUTTONS_HEIGHT,
- BUTTONS_WIDTH,
- BUTTONS_X,
- BUTTONS_Y,
- HALF_HEIGHT,
- HALF_WIDTH,
- MAIN_HEIGHT,
- MAIN_WIDTH,
- TITLE_BACKGROUND_IMAGE,
- TITLE_FILL,
- TITLE_STROKE,
- TITLE_STROKE_WIDTH,
- TITLE_X,
- TITLE_Y
-} from '../shared';
+import { HALF_HEIGHT, HALF_WIDTH, MAIN_HEIGHT, MAIN_WIDTH } from './constant';
import { ElementLocator, Font } from '@motajs/render';
import {
- ITransitionedController,
- transitioned,
- transitionedColor,
- useKey
-} from '../render/use';
-import { ExitFullscreen, Fullscreen, SoundVolume } from '@user/client-base';
-import { mainSetting, triggerFullscreen } from '@motajs/legacy-ui';
+ ExitFullscreen,
+ Fullscreen,
+ SoundVolume,
+ triggerFullscreen
+} from '@user/client-base';
import { saveLoad } from './save';
import { MainSceneUI } from './main';
import { adjustCover } from '@user/client-base';
import { cosh, CurveMode, linear } from '@motajs/animate';
import { sleep } from '@motajs/common';
-import { IUIPropsBase } from './types';
+import {
+ ITransitionedController,
+ IUIPropsBase,
+ transitioned,
+ transitionedColor,
+ useKey
+} from '@user/client-modules';
+
+/** 标题图 */
+export const TITLE_BACKGROUND_IMAGE = 'bg.jpg';
+
+/** 标题文字中心横坐标 */
+export const TITLE_X = HALF_WIDTH;
+/** 标题文字中心纵坐标 */
+export const TITLE_Y = 100;
+/** 标题文字的填充颜色 */
+export const TITLE_FILL = 'white';
+/** 标题文字的描边颜色 */
+export const TITLE_STROKE = 'black';
+/** 标题文字的描边宽度 */
+export const TITLE_STROKE_WIDTH = 2;
+
+/** 标题界面按钮宽度,如果文字被裁剪可以考虑扩大此值 */
+export const BUTTONS_WIDTH = 160;
+/** 标题界面按钮高度,如果文字被裁剪可以考虑扩大此值 */
+export const BUTTONS_HEIGHT = 200;
+/** 标题界面按钮中心横坐标 */
+export const BUTTONS_X = HALF_WIDTH;
+/** 标题界面按钮左上角纵坐标 */
+export const BUTTONS_Y = MAIN_HEIGHT - BUTTONS_HEIGHT;
const enum TitleButton {
StartGame,
diff --git a/packages-user/client-modules/src/ui/toolbar.tsx b/src/client/ui/toolbar.tsx
similarity index 95%
rename from packages-user/client-modules/src/ui/toolbar.tsx
rename to src/client/ui/toolbar.tsx
index ddcd77c..36fb735 100644
--- a/packages-user/client-modules/src/ui/toolbar.tsx
+++ b/src/client/ui/toolbar.tsx
@@ -11,22 +11,20 @@ import {
StepForward,
ViewMapIcon
} from '@user/client-base';
-import { getVitualKeyOnce } from '@motajs/legacy-ui';
import { gameKey, generateKeyboardEvent } from '@motajs/system';
-import { transitioned } from '../render/use';
import { linear } from 'mutate-animate';
import { KeyCode } from '@motajs/client-base';
-import { IClientBaseExtended, Progress } from '@user/client-base';
+import { Progress } from '@user/client-base';
import { generateBinary } from '@motajs/legacy-common';
import { SetupComponentOptions } from '@motajs/system';
import { saveSave, saveLoad } from './save';
-import { mainUIController } from './controller';
-import { MAIN_HEIGHT, FULL_LOC, POP_BOX_WIDTH, CENTER_LOC } from '../shared';
+import { MAIN_HEIGHT, FULL_LOC, POP_BOX_WIDTH, CENTER_LOC } from './constant';
import { openReplay, openSettings } from './settings';
import { openViewMap } from './viewmap';
import { DefaultProps } from '@motajs/render-vue';
+import { IClientCoreExtended, transitioned } from '@user/client-modules';
-interface ToolbarProps extends DefaultProps, IClientBaseExtended {
+interface ToolbarProps extends DefaultProps, IClientCoreExtended {
loc?: ElementLocator;
}
@@ -90,10 +88,10 @@ export const PlayingToolbar = defineComponent<
const tool = () => core.openToolbox(true);
const fly = () => core.useFly(true);
const save = () => {
- saveSave(mainUIController, FULL_LOC);
+ saveSave(props.state.mainUIController, FULL_LOC);
};
const load = () => {
- saveLoad(mainUIController, FULL_LOC);
+ saveLoad(props.state.mainUIController, FULL_LOC);
};
const equip = () => core.openEquipbox(true);
const shop = () => core.openQuickShop(true);
@@ -111,18 +109,18 @@ export const PlayingToolbar = defineComponent<
const redo = () => core.doSL('autoSave', 'reload');
const numpad = () => emit('numpad');
const view = () => {
- openViewMap(mainUIController, FULL_LOC);
+ openViewMap(props.state.mainUIController, FULL_LOC);
};
const replay = () => {
const loc = CENTER_LOC.slice() as ElementLocator;
loc[2] = POP_BOX_WIDTH;
- openReplay(mainUIController, loc);
+ openReplay(props.state.mainUIController, loc);
};
const settings = () => {
const loc = CENTER_LOC.slice() as ElementLocator;
loc[2] = POP_BOX_WIDTH;
loc[3] = MAIN_HEIGHT - 72;
- openSettings(mainUIController, loc);
+ openSettings(props.state.mainUIController, loc);
};
return () => (
@@ -191,7 +189,7 @@ export const ReplayingToolbar = defineComponent(props => {
const speedUp = () => core.speedUpReplay();
const book = () => core.openBook(true);
const save = () => {
- saveSave(mainUIController, FULL_LOC);
+ saveSave(props.state.mainUIController, FULL_LOC);
};
const view = () => {
if (core.isPlaying() && !core.isMoving() && !core.status.lockControl) {
diff --git a/packages-user/client-modules/src/ui/toolbox.tsx b/src/client/ui/toolbox.tsx
similarity index 98%
rename from packages-user/client-modules/src/ui/toolbox.tsx
rename to src/client/ui/toolbox.tsx
index f381330..f556b71 100644
--- a/packages-user/client-modules/src/ui/toolbox.tsx
+++ b/src/client/ui/toolbox.tsx
@@ -4,8 +4,8 @@ import { Font } from '@motajs/render';
import { Scroll, TextContent } from '@user/client-base';
import { IHeroItemState, IHeroState } from '@user/data-base';
import { IHeroAttr } from '@user/data-common';
-import { FULL_LOC, MAIN_HEIGHT, MAIN_WIDTH } from '../shared';
-import { IUIPropsBase } from './types';
+import { FULL_LOC, MAIN_HEIGHT, MAIN_WIDTH } from './constant';
+import { IUIPropsBase } from '@user/client-modules';
export interface ToolBoxProps extends IUIPropsBase {
/** 勇士状态对象 */
diff --git a/packages-user/client-modules/src/ui/viewmap.tsx b/src/client/ui/viewmap.tsx
similarity index 99%
rename from packages-user/client-modules/src/ui/viewmap.tsx
rename to src/client/ui/viewmap.tsx
index 884b03c..de2d33c 100644
--- a/packages-user/client-modules/src/ui/viewmap.tsx
+++ b/src/client/ui/viewmap.tsx
@@ -27,7 +27,6 @@ import { FloorSelector } from '@user/client-base';
import { clamp, mean } from 'lodash-es';
import { StatisticsDataOneFloor } from './statistics';
import { Tip, TipExpose, IGameUIPropsBase } from '@user/client-base';
-import { useKey } from '../render/use';
import {
ENABLE_RIGHT_STATUS_BAR,
FULL_LOC,
@@ -39,7 +38,8 @@ import {
RIGHT_STATUS_POS,
STATUS_BAR_HEIGHT,
STATUS_BAR_WIDTH
-} from '../shared';
+} from './constant';
+import { useKey } from '@user/client-modules';
export interface ViewMapProps extends IUIDefaultPropsBase, BaseProps {
loc: ElementLocator;
diff --git a/src/data.ts b/src/data.ts
index eaf97b8..d7acd06 100644
--- a/src/data.ts
+++ b/src/data.ts
@@ -1,5 +1 @@
-import { createData } from '@user/entry-data';
-
-// 逻辑端入口,仅在录像验证时运行
-
-createData();
+export { createCoreState } from './data/entry';
diff --git a/src/data/constant.ts b/src/data/constant.ts
new file mode 100644
index 0000000..3aa59e9
--- /dev/null
+++ b/src/data/constant.ts
@@ -0,0 +1,8 @@
+import { FaceGroup } from '@user/data-common';
+
+// 本文件是游戏的底层核心配置,如果不懂的话千万不要动
+
+/** 数据端核心配置对象,不懂的话就不要动 */
+export const CORE_URL = 'content/core.jsonc';
+/** 勇士的默认朝向组,用于控制勇士的移动,不懂的话就不要动 */
+export const HERO_FACE = FaceGroup.Dir8;
diff --git a/src/data/entry.ts b/src/data/entry.ts
index 44b455c..bd4d129 100644
--- a/src/data/entry.ts
+++ b/src/data/entry.ts
@@ -1,5 +1,5 @@
import { CoreState, ICoreState, ICoreStateConfig } from '@user/data-state';
-import { CORE_URL, HERO_FACE } from '../constant';
+import { CORE_URL, HERO_FACE } from './constant';
import { ILoadTaskStarter } from '@motajs/loader';
import { MainDataPlugin } from './initialize';
import { dataPlugins } from './plugin';
diff --git a/src/data/index.ts b/src/data/index.ts
new file mode 100644
index 0000000..0cfe242
--- /dev/null
+++ b/src/data/index.ts
@@ -0,0 +1,4 @@
+export * from './constant';
+export * from './entry';
+export * from './initialize';
+export * from './types';
diff --git a/src/main.ts b/src/main.ts
deleted file mode 100644
index aef8d47..0000000
--- a/src/main.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { createApp } from 'vue';
-import './styles.less';
-import { createGame } from '@user/entry-client';
-import App from './App.vue';
-
-// 客户端入口,在玩家游玩时运行
-
-// 创建游戏实例
-createGame();
-createApp(App).mount('#root');
-
-main.init('play');
-main.listen();
diff --git a/src/package.json b/src/package.json
index 8551b4d..15e563e 100644
--- a/src/package.json
+++ b/src/package.json
@@ -2,8 +2,6 @@
"name": "@user/main",
"dependencies": {
"@user/data-common": "workspace:*",
- "@user/data-state": "workspace:*",
- "@user/entry-client": "workspace:*",
- "@user/entry-data": "workspace:*"
+ "@user/data-state": "workspace:*"
}
}