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 (