123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import { reactive, watch } from 'vue'
- import storejs from 'store'
- import { IMusicScore } from '/osmd-extended/src'
- import qs from 'query-string'
- export interface SettingState {
- sett: iSett
- eva: iEva
- }
- /* 基本设置 */
- export type iSett = {
- /** 护眼模式 */
- eyeProtection: boolean
- /** 延迟检测 */
- tuning: boolean
- /** 摄像头 */
- camera: boolean
- /** 摄像头 透明度 */
- opacity: number
- /** 循环播放 */
- loop: boolean
- /** 显示指法 */
- fingering: boolean
- /** 播放频率 */
- hertz: number
- /**曲谱大小 */
- scoreSize: 'small' | 'middle' | 'large'
- /** 曲谱类型 */
- type: IMusicScore
- /** 是否固定调 */
- keySignature: boolean
- /** 自定义每行小节数开关 */
- openCustomNodule: boolean
- /** 自定义每行小节数开关 */
- customNoduleNum: number
- }
- export type IDifficulty = 'BEGINNER' | 'ADVANCED' | 'PERFORMER'
- /* 评测设置 */
- export type iEva = {
- /** 难度 */
- difficulty: IDifficulty
- /** 是否保存到相册 */
- save: boolean
- /** 开启伴奏*/
- mute: boolean
- /** 反应时间MS */
- reactionTimeMs: number
- }
- const search = qs.parse(location.search);
- const saveSetting = storejs.get('setting')
- let initState: SettingState = {
- sett: {
- eyeProtection: false,
- tuning: false,
- camera: false,
- opacity: 70,
- loop: true,
- fingering: true,
- hertz: 442,
- scoreSize: 'middle',
- type: 'staff',
- keySignature: false,
- openCustomNodule: true,
- customNoduleNum: 4,
- },
- eva: {
- difficulty: 'ADVANCED',
- save: false,
- mute: true,
- reactionTimeMs: 0
- },
- }
- if (saveSetting) {
- const customNoduleInfo = JSON.parse(localStorage.getItem('customNoduleInfo')) || []
- const matchMusic = customNoduleInfo.find((n: any) => n.id === search?.id)
- const defaultNum = matchMusic ? matchMusic.customNum : 4
- // 如果有保存的设置,则使用保存的设置
- // 酷乐秀强制440,评测时会重新按照此处配置计算频率
- initState.eva = { ...initState.eva, ...saveSetting.eva }
- initState.sett = { ...initState.sett, ...saveSetting.sett, ...{customNoduleNum: defaultNum} };
- (window as any).sett = initState.sett
- }
- const state: SettingState = reactive(initState)
- watch(state, () => {
- storejs.set('setting', state)
- })
- export default state
|