diff --git a/packages-user/client-modules/src/render/ui/save.tsx b/packages-user/client-modules/src/render/ui/save.tsx index 54d1350..4de1df0 100644 --- a/packages-user/client-modules/src/render/ui/save.tsx +++ b/packages-user/client-modules/src/render/ui/save.tsx @@ -7,10 +7,12 @@ import { SetupComponentOptions, UIComponentProps } from '@motajs/system-ui'; -import { defineComponent, ref } from 'vue'; +import { defineComponent, ref, computed } from 'vue'; import { Background, Page, PageExpose } from '../components'; import { useKey } from '../use'; import { MAP_WIDTH, MAP_HEIGHT } from '../shared'; +import { gameKey } from '@motajs/system-action'; +import { KeyCode } from '@motajs/client-base'; export interface SaveProps extends UIComponentProps, DefaultProps { loc: ElementLocator; @@ -19,6 +21,7 @@ export interface SaveProps extends UIComponentProps, DefaultProps { export interface SaveBtnProps extends DefaultProps { loc: ElementLocator; index: number; + isSelected: boolean; isDelete: boolean; } @@ -37,26 +40,74 @@ const saveProps = { } satisfies SetupComponentOptions; const saveBtnProps = { - props: ['loc', 'index', 'isDelete'] + props: ['loc', 'index', 'isSelected', 'isDelete'] } satisfies SetupComponentOptions; +gameKey + .group('@ui_save', 'save') + .register({ + id: '@ui_save_exit', + name: '退出存档界面', + defaults: KeyCode.KeyS + }) + .register({ + id: '@ui_save_pageUp', + name: '存档向后翻页', + defaults: KeyCode.PageUp + }) + .register({ + id: '@ui_save_pageDown', + name: '存档向前翻页', + defaults: KeyCode.PageDown + }) + .register({ + id: '@ui_save_up', + name: '存档选择框向上', + defaults: KeyCode.UpArrow + }) + .register({ + id: '@ui_save_down', + name: '存档选择框向下', + defaults: KeyCode.DownArrow + }) + .register({ + id: '@ui_save_left', + name: '存档选择框向左', + defaults: KeyCode.LeftArrow + }) + .register({ + id: '@ui_save_right', + name: '存档选择框向右', + defaults: KeyCode.RightArrow + }); + export const SaveBtn = defineComponent(props => { const w = props.loc[2] ?? 200; - const text = props.index === -1 ? '自动存档' : `存档${props.index + 1}`; const font = new Font('normal', 18); + const text = computed(() => + props.index === -1 ? '自动存档' : `存档${props.index + 1}` + ); + const lineWidth = computed(() => (props.isSelected ? 2 : 1)); return () => ( ( // onEmit 事件在点击存档或按键确认时触发 // 存读档执行函数在 ../../utils/saves.ts + const [row, column] = [2, 3]; /** 除自动存档外,每一页容纳的存档数量 */ - const pageCap = 5; + const pageCap = row * column - 1; const font = new Font('normal', 18); const isDelete = ref(false); const pageRef = ref(); - - // 参考 ../../action/hotkey.ts 中的按键定义 - const [key] = useKey(); - key.realize('confirm', () => {}); - key.realize('exit', () => {}); - // 其他按键自定义,需要新开一个 save 的 group + /** 当前页上被选中的存档的序号 只会是0到5 */ + const pickIndex = ref(1); const emitSave = (index: number) => { if (isDelete.value) emit('delete', index); else emit('emit', index); + pickIndex.value = (index % 5) + 1; }; const wheel = (ev: IWheelEvent) => { @@ -112,6 +161,35 @@ export const Save = defineComponent( props.controller.close(props.instance); }; + // 参考 ../../action/hotkey.ts 中的按键定义 + const [key] = useKey(); + key.realize('confirm', () => { + const currPage = pageRef.value?.now(); + if (currPage == null) return; + emitSave(pageCap * currPage + pickIndex.value); + }) + .realize('exit', exit) + .realize('@ui_save_exit', exit) + .realize('@ui_save_pageUp', () => { + pageRef.value?.movePage(1); + }) + .realize('@ui_save_pageDown', () => { + pageRef.value?.movePage(-1); + }) + .realize('@ui_save_up', () => { + if (pickIndex.value >= row) pickIndex.value -= column; + }) + .realize('@ui_save_down', () => { + if (pickIndex.value <= pageCap - row) pickIndex.value += column; + }) + .realize('@ui_save_left', () => { + if (pickIndex.value > 0) pickIndex.value--; + }) + .realize('@ui_save_right', () => { + if (pickIndex.value < pageCap) pickIndex.value++; + }); + // 其他按键自定义,需要新开一个 save 的 group + return () => ( @@ -126,6 +204,7 @@ export const Save = defineComponent( emitSave(-1)} cursor="pointer" @@ -133,6 +212,7 @@ export const Save = defineComponent( emitSave(page * pageCap)} cursor="pointer" @@ -140,6 +220,7 @@ export const Save = defineComponent( emitSave(page * pageCap + 1)} cursor="pointer" @@ -147,6 +228,7 @@ export const Save = defineComponent( emitSave(page * pageCap + 2)} cursor="pointer" @@ -154,6 +236,7 @@ export const Save = defineComponent( emitSave(page * pageCap + 3)} cursor="pointer" @@ -161,6 +244,7 @@ export const Save = defineComponent( emitSave(page * pageCap + 4)} cursor="pointer"