import type { SettingComponent, SettingComponentProps } from '../setting';
import { Button, InputNumber, Radio } from 'ant-design-vue';
import { mainUi } from './ui';
import { gameKey } from '../custom/hotkey';
interface Components {
Default: SettingComponent;
Boolean: SettingComponent;
Number: SettingComponent;
HotkeySetting: SettingComponent;
ToolbarEditor: SettingComponent;
Radio: (items: string[]) => SettingComponent;
Performance: SettingComponent;
}
export type { Components as SettingDisplayComponents };
export function createSettingComponents() {
const com: Components = {
Default: DefaultSetting,
Boolean: BooleanSetting,
Number: NumberSetting,
HotkeySetting,
ToolbarEditor,
Radio: RadioSetting,
Performance: PerformanceSetting
};
return com;
}
function DefaultSetting(props: SettingComponentProps) {
return (
未知的设置类型
);
}
function BooleanSetting(props: SettingComponentProps) {
const { setting, displayer, item } = props;
const changeValue = () => {
setting.setValue(displayer.selectStack.join('.'), !item.value);
displayer.update();
};
return (
当前 {item.value ? '开启' : '关闭'}
);
}
function NumberSetting(props: SettingComponentProps) {
const { setting, displayer, item } = props;
const changeValue = (value: number) => {
if (typeof value !== 'number') return;
if (value < (item.step?.[0] ?? 0) || value > (item.step?.[1] ?? 100)) {
return;
}
setting.setValue(displayer.selectStack.join('.'), Math.round(value));
displayer.update();
};
return (
修改设置:
changeValue(value as number)}
>
);
}
function RadioSetting(items: string[]) {
return (props: SettingComponentProps) => {
const { setting, displayer, item } = props;
const changeValue = (value: number) => {
if (isNaN(value)) return;
setting.setValue(displayer.selectStack.join('.'), value);
displayer.update();
};
return (
{items.map((v, i) => {
return (
changeValue(i)}
>
{v}
);
})}
);
};
}
function showSpecialSetting(id: string, vBind?: any) {
const ui = mainUi.get(id);
mainUi.showEnd();
ui.once('close', () => {
mainUi.showAll();
});
mainUi.open(id, vBind);
}
function HotkeySetting(props: SettingComponentProps) {
return (
);
}
function ToolbarEditor(props: SettingComponentProps) {
return (
);
}
function PerformanceSetting(props: SettingComponentProps) {
return (
);
}