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 (
); }