mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-01-19 20:59:37 +08:00
ui初始化
This commit is contained in:
parent
aff4b5a9d0
commit
41e0037bed
@ -130,6 +130,18 @@ export class Hotkey extends EventEmitter<HotkeyEvent> {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从一个按键控制器继承按键信息
|
||||||
|
* @param hotkey 被继承的按键
|
||||||
|
* @param cover 继承时是否覆盖同id的按键
|
||||||
|
*/
|
||||||
|
extend(hotkey: Hotkey, cover: boolean) {
|
||||||
|
Object.values(hotkey.list).forEach(v => {
|
||||||
|
if (v.id in this.list && !cover) return;
|
||||||
|
this.register(v.id, v.name, v);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private ensureKey(key: KeyCode) {
|
private ensureKey(key: KeyCode) {
|
||||||
if (!this.keyMap.has(key)) {
|
if (!this.keyMap.has(key)) {
|
||||||
this.keyMap.set(key, []);
|
this.keyMap.set(key, []);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { Component, reactive } from 'vue';
|
import { Component, shallowReactive } from 'vue';
|
||||||
import { EmitableEvent, EventEmitter } from '../../common/eventEmitter';
|
import { EmitableEvent, EventEmitter } from '../../common/eventEmitter';
|
||||||
import { KeyCode } from '../../../plugin/keyCodes';
|
import { KeyCode } from '../../../plugin/keyCodes';
|
||||||
import { Hotkey } from './hotkey';
|
import { Hotkey } from './hotkey';
|
||||||
@ -21,7 +21,7 @@ export class Focus<T = any> extends EventEmitter<FocusEvent<T>> {
|
|||||||
|
|
||||||
constructor(react?: boolean) {
|
constructor(react?: boolean) {
|
||||||
super();
|
super();
|
||||||
this.stack = react ? reactive([]) : [];
|
this.stack = react ? shallowReactive([]) : [];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -105,6 +105,7 @@ export class Focus<T = any> extends EventEmitter<FocusEvent<T>> {
|
|||||||
this.targets.add(v);
|
this.targets.add(v);
|
||||||
});
|
});
|
||||||
this.emit('register', item);
|
this.emit('register', item);
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -116,6 +117,7 @@ export class Focus<T = any> extends EventEmitter<FocusEvent<T>> {
|
|||||||
this.targets.delete(v);
|
this.targets.delete(v);
|
||||||
});
|
});
|
||||||
this.emit('unregister', item);
|
this.emit('unregister', item);
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,4 +161,22 @@ export class UiController extends Focus<GameUi> {
|
|||||||
emitKey(key: KeyCode, e: KeyboardEvent) {
|
emitKey(key: KeyCode, e: KeyboardEvent) {
|
||||||
this.focused?.hotkey?.emitKey(key, e);
|
this.focused?.hotkey?.emitKey(key, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据id获取到ui
|
||||||
|
* @param id ui的id
|
||||||
|
*/
|
||||||
|
get(id: string) {
|
||||||
|
return [...this.targets.values()].find(v => v.id === id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关闭一个ui,注意在其之后的ui都会同时关闭掉
|
||||||
|
* @param id 要关闭的ui的id
|
||||||
|
*/
|
||||||
|
close(id: string) {
|
||||||
|
const ui = this.stack.find(v => v.id === id);
|
||||||
|
if (!ui) return;
|
||||||
|
this.splice(ui);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
46
src/core/main/init/ui.ts
Normal file
46
src/core/main/init/ui.ts
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
import Book from '../../../ui/book.vue';
|
||||||
|
import Toolbox from '../../../ui/toolbox.vue';
|
||||||
|
import Equipbox from '../../../ui/equipbox.vue';
|
||||||
|
import Settings from '../../../ui/settings.vue';
|
||||||
|
import Desc from '../../../ui/desc.vue';
|
||||||
|
import Skill from '../../../ui/skill.vue';
|
||||||
|
import SkillTree from '../../../ui/skillTree.vue';
|
||||||
|
import Fly from '../../../ui/fly.vue';
|
||||||
|
import FixedDetail from '../../../ui/fixedDetail.vue';
|
||||||
|
import Shop from '../../../ui/shop.vue';
|
||||||
|
import Achievement from '../../../ui/achievement.vue';
|
||||||
|
import Bgm from '../../../ui/bgmList.vue';
|
||||||
|
import { GameUi, UiController } from '../custom/ui';
|
||||||
|
import { Hotkey } from '../custom/hotkey';
|
||||||
|
import { KeyCode } from '../../../plugin/keyCodes';
|
||||||
|
|
||||||
|
export const mainUi = new UiController();
|
||||||
|
mainUi.register(
|
||||||
|
new GameUi('book', Book),
|
||||||
|
new GameUi('toolbox', Toolbox),
|
||||||
|
new GameUi('equipbox', Equipbox),
|
||||||
|
new GameUi('settings', Settings),
|
||||||
|
new GameUi('desc', Desc),
|
||||||
|
new GameUi('skill', Skill),
|
||||||
|
new GameUi('skillTree', SkillTree),
|
||||||
|
new GameUi('fly', Fly),
|
||||||
|
new GameUi('fixedDetail', FixedDetail),
|
||||||
|
new GameUi('shop', Shop),
|
||||||
|
new GameUi('achievement', Achievement),
|
||||||
|
new GameUi('bgm', Bgm)
|
||||||
|
);
|
||||||
|
|
||||||
|
export const exitKey = new Hotkey('exitKey');
|
||||||
|
exitKey
|
||||||
|
.register('exit1', '退出', {
|
||||||
|
defaults: KeyCode.KeyX,
|
||||||
|
func: () => {
|
||||||
|
if (mainUi.focused) mainUi.splice(mainUi.focused);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.register('exit2', '退出', {
|
||||||
|
defaults: KeyCode.Escape,
|
||||||
|
func: () => {
|
||||||
|
if (mainUi.focused) mainUi.splice(mainUi.focused);
|
||||||
|
}
|
||||||
|
});
|
@ -287,6 +287,10 @@ export async function triggerFullscreen(full: boolean) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据布尔值数组转换成一个二进制数
|
||||||
|
* @param arr 要转换的布尔值数组
|
||||||
|
*/
|
||||||
export function generateBinary(arr: boolean[]) {
|
export function generateBinary(arr: boolean[]) {
|
||||||
let num = 0;
|
let num = 0;
|
||||||
arr.forEach((v, i) => {
|
arr.forEach((v, i) => {
|
||||||
|
Loading…
Reference in New Issue
Block a user