From 574d765c699148b9a920bebf64fedbec13b0493e Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Tue, 19 Aug 2025 15:06:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B5=8F=E8=A7=88=E5=9C=B0=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client-modules/src/action/hotkey.ts | 66 ++- .../client-modules/src/render/action.ts | 6 +- .../src/render/elements/block.ts | 8 +- .../src/render/elements/layer.ts | 1 + .../client-modules/src/render/ui/index.ts | 1 + .../src/render/ui/statusBar.tsx | 7 + .../client-modules/src/render/ui/title.tsx | 4 +- .../client-modules/src/render/ui/viewmap.tsx | 503 ++++++++++++++++++ packages/render-core/src/canvas2d.ts | 1 - packages/render-core/src/container.ts | 2 +- packages/render-core/src/render.ts | 10 +- packages/render-elements/src/misc.ts | 4 +- packages/render-vue/src/renderer.ts | 2 +- packages/system-action/src/hotkey.ts | 7 + public/project/items.js | 28 +- 15 files changed, 615 insertions(+), 35 deletions(-) create mode 100644 packages-user/client-modules/src/render/ui/viewmap.tsx diff --git a/packages-user/client-modules/src/action/hotkey.ts b/packages-user/client-modules/src/action/hotkey.ts index 37c919e..a52844d 100644 --- a/packages-user/client-modules/src/action/hotkey.ts +++ b/packages-user/client-modules/src/action/hotkey.ts @@ -434,36 +434,85 @@ gameKey defaults: KeyCode.PageUp }) // #region 存档界面 - .group('@ui_save', 'save') + .group('@ui_save', '存档界面') .register({ id: '@save_pageUp', - name: '存档向后翻页', + name: '向后翻页', defaults: KeyCode.PageUp }) .register({ id: '@save_pageDown', - name: '存档向前翻页', + name: '向前翻页', defaults: KeyCode.PageDown }) .register({ id: '@save_up', - name: '存档选择框向上', + name: '选择框向上', defaults: KeyCode.UpArrow }) .register({ id: '@save_down', - name: '存档选择框向下', + name: '选择框向下', defaults: KeyCode.DownArrow }) .register({ id: '@save_left', - name: '存档选择框向左', + name: '选择框向左', defaults: KeyCode.LeftArrow }) .register({ id: '@save_right', - name: '存档选择框向右', + name: '选择框向右', defaults: KeyCode.RightArrow + }) + //#region 浏览地图 + .group('@ui_viewMap', '浏览地图') + .register({ + id: '@viewMap_up_1', + name: '下一层地图_1', + defaults: KeyCode.UpArrow + }) + .register({ + id: '@viewMap_up_2', + name: '下一层地图_2', + defaults: KeyCode.PageUp + }) + .register({ + id: '@viewMap_down_1', + name: '上一层地图_1', + defaults: KeyCode.DownArrow + }) + .register({ + id: '@viewMap_down_2', + name: '上一层地图_2', + defaults: KeyCode.PageDown + }) + .register({ + id: '@viewMap_up_ten', + name: '下十层地图', + defaults: KeyCode.UpArrow, + ctrl: true + }) + .register({ + id: '@viewMap_down_ten', + name: '上十层地图', + defaults: KeyCode.DownArrow, + ctrl: true + }) + .register({ + id: '@viewMap_book', + name: '怪物手册', + defaults: KeyCode.KeyX + }) + .register({ + id: '@viewMap_fly', + name: '传送至', + defaults: KeyCode.KeyG + }) + .register({ + id: '@viewMap_reset', + name: '重置视角', + defaults: KeyCode.KeyR }); // #endregion @@ -492,9 +541,6 @@ gameKey .realize('shop', () => { core.openQuickShop(true); }) - .realize('viewMap', () => { - core.ui._drawViewMaps(); - }) .realize('skillTree', () => { core.useItem('skill1', true); }) diff --git a/packages-user/client-modules/src/render/action.ts b/packages-user/client-modules/src/render/action.ts index 7e022f2..c6d5232 100644 --- a/packages-user/client-modules/src/render/action.ts +++ b/packages-user/client-modules/src/render/action.ts @@ -6,7 +6,8 @@ import { openStatistics, saveLoad, openSettings, - ReplaySettingsUI + ReplaySettingsUI, + openViewMap } from './ui'; export function createAction() { @@ -27,5 +28,8 @@ export function createAction() { mainUIController.open(ReplaySettingsUI, { loc: [420, 240, void 0, void 0, 0.5, 0.5] }); + }) + .realize('viewMap', () => { + openViewMap(mainUIController, [0, 0, MAIN_WIDTH, MAIN_HEIGHT]); }); } diff --git a/packages-user/client-modules/src/render/elements/block.ts b/packages-user/client-modules/src/render/elements/block.ts index c1820f0..4ec87d0 100644 --- a/packages-user/client-modules/src/render/elements/block.ts +++ b/packages-user/client-modules/src/render/elements/block.ts @@ -37,6 +37,8 @@ export class BlockCacher< width: number; /** 区域高度 */ height: number; + /** 区域面积 */ + area: number = 0; /** 分块大小 */ blockSize: number; /** 分块信息 */ @@ -116,6 +118,7 @@ export class BlockCacher< restWidth: this.width % this.blockSize, restHeight: this.height % this.blockSize }; + this.area = this.blockData.width * this.blockData.height; this.emit('split'); } @@ -303,7 +306,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 {} } diff --git a/packages-user/client-modules/src/render/elements/layer.ts b/packages-user/client-modules/src/render/elements/layer.ts index fe2bc12..d92d347 100644 --- a/packages-user/client-modules/src/render/elements/layer.ts +++ b/packages-user/client-modules/src/render/elements/layer.ts @@ -1132,6 +1132,7 @@ export class Layer extends Container { const length = this.backImage.length; const img = this.backImage[frame % length]; need.forEach(index => { + if (index >= this.block.area || index < 0) return; const x = index % width; const y = Math.floor(index / width); const sx = x * blockSize; diff --git a/packages-user/client-modules/src/render/ui/index.ts b/packages-user/client-modules/src/render/ui/index.ts index ee04a2d..67db8c2 100644 --- a/packages-user/client-modules/src/render/ui/index.ts +++ b/packages-user/client-modules/src/render/ui/index.ts @@ -11,3 +11,4 @@ export * from './settings'; export * from './statistics'; export * from './statusBar'; export * from './toolbar'; +export * from './viewmap'; diff --git a/packages-user/client-modules/src/render/ui/statusBar.tsx b/packages-user/client-modules/src/render/ui/statusBar.tsx index cb9f680..9168100 100644 --- a/packages-user/client-modules/src/render/ui/statusBar.tsx +++ b/packages-user/client-modules/src/render/ui/statusBar.tsx @@ -19,6 +19,8 @@ import { ReplayingToolbar } from './toolbar'; import { HeroSkill } from '@user/data-state'; +import { openViewMap } from './viewmap'; +import { mainUIController } from './controller'; export interface ILeftHeroStatus { hp: number; @@ -98,6 +100,10 @@ export const LeftStatusBar = defineComponent>( return [per * (n + 1), keyY, void 0, void 0, 0.5, 0.5]; }; + const viewMap = () => { + openViewMap(mainUIController, [0, 0, 840, 480]); + }; + return () => { return (