98 lines
3.1 KiB
JavaScript
98 lines
3.1 KiB
JavaScript
import { default as ConfigDefault } from '../../Data/SettingsDefault';
|
|
import { default as ConfigData } from '../../Data/SettingsData';
|
|
import { CMOptions } from '../VariablesAndData';
|
|
import save from '../../InitSaveLoad/save';
|
|
import CMLoop from '../../Main/Loop';
|
|
|
|
/** Functions related to saving, loading and restoring all settings */
|
|
|
|
/**
|
|
* This function saves the config of CookieMonster without saving any of the other save-data
|
|
* This allows saving in between the autosave intervals
|
|
* It is called by CM.Config.LoadConfig(), CM.Config.RestoreDefault(), CM.Config.ToggleConfig(),
|
|
* CM.ToggleConfigVolume() and changes in options with type "url", "color" or "numscale"
|
|
*/
|
|
export function SaveConfig() {
|
|
const saveString = b64_to_utf8(
|
|
unescape(localStorage.getItem('CookieClickerGame')).split('!END!')[0],
|
|
);
|
|
const CookieMonsterSave = saveString.match(/CookieMonster.*(;|$)/);
|
|
if (CookieMonsterSave !== null) {
|
|
const newSaveString = saveString.replace(
|
|
CookieMonsterSave[0],
|
|
`CookieMonster:${save()}`,
|
|
);
|
|
localStorage.setItem(
|
|
'CookieClickerGame',
|
|
escape(`${utf8_to_b64(newSaveString)}!END!`),
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* This function loads the config of CookieMonster saved in localStorage and loads it into CMOptions
|
|
* It is called by CM.Main.DelayInit() and CM.Config.RestoreDefault()
|
|
*/
|
|
export function LoadConfig(settings) {
|
|
// This removes cookies left from earlier versions of CookieMonster
|
|
if (typeof localStorage.CMConfig !== 'undefined') {
|
|
delete localStorage.CMConfig;
|
|
}
|
|
if (settings !== undefined) {
|
|
CMOptions = settings;
|
|
|
|
// Check values
|
|
let mod = false;
|
|
for (const i in ConfigDefault) {
|
|
if (typeof CMOptions[i] === 'undefined') {
|
|
mod = true;
|
|
CMOptions[i] = ConfigDefault[i];
|
|
} else if (i !== 'Header' && i !== 'Colors') {
|
|
if (i.indexOf('SoundURL') === -1) {
|
|
if (
|
|
!(CMOptions[i] > -1 && CMOptions[i] < ConfigData[i].label.length)
|
|
) {
|
|
mod = true;
|
|
CMOptions[i] = ConfigDefault[i];
|
|
}
|
|
} else if (typeof CMOptions[i] !== 'string') {
|
|
// Sound URLs
|
|
mod = true;
|
|
CMOptions[i] = ConfigDefault[i];
|
|
}
|
|
} else if (i === 'Header') {
|
|
for (const j in ConfigDefault.Header) {
|
|
if (
|
|
typeof CMOptions[i][j] === 'undefined' ||
|
|
!(CMOptions[i][j] > -1 && CMOptions[i][j] < 2)
|
|
) {
|
|
mod = true;
|
|
CMOptions[i][j] = ConfigDefault[i][j];
|
|
}
|
|
}
|
|
} else {
|
|
// Colors
|
|
for (const j in ConfigDefault.Colors) {
|
|
if (
|
|
typeof CMOptions[i][j] === 'undefined' ||
|
|
typeof CMOptions[i][j] !== 'string'
|
|
) {
|
|
mod = true;
|
|
CMOptions[i][j] = ConfigDefault[i][j];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (mod) SaveConfig();
|
|
CMLoop(); // Do loop once
|
|
for (const i in ConfigDefault) {
|
|
if (i !== 'Header' && typeof ConfigData[i].func !== 'undefined') {
|
|
ConfigData[i].func();
|
|
}
|
|
}
|
|
} else {
|
|
// Default values
|
|
LoadConfig(ConfigDefault);
|
|
}
|
|
}
|