//Class for saving user's progress and preferences function mergeObjects(a, b){ if(b === undefined || b === null){ return a; } else if(a === undefined || a === null){ return b; } for(var v in b){ if (typeof a[v] === 'object') { a[v] = mergeObjects(a[v], b[v]) } else { a[v] = b[v]; } } return a; } function Save(){ this.data = { 'background' : null, 'masturbationTimer' : 20, 'gender' : "male", 'autoFade' : 1, 'cardSuggest' : 2, 'gameDelay' : 3, 'dealAnimation' : 3, 'autoForfeit' : 4, 'autoEnding' : 4, 'male' : { 'name' : '', 'clothing' : [false, false, true, false, true, false, false, true, true, false, false, true, false, false, true, true, false, true], 'size' : 'medium', 'tags' : {}, }, 'female' : { 'name' : '', 'clothing' : [false, false, true, false, true, true, false, true, true, false, false, true, false, false, false, true, false, true], 'size' : 'medium', 'tags' : {}, }, 'endings' : {}, 'askedUsageTracking': false, 'usageTracking': false, }; this.saveCookie = function(){ Cookies.set('save', this.data, {expires: 3652}); }; this.loadCookie = function(){ var cookie = Cookies.get('save'); console.log(this.data); if(cookie !== undefined){ this.data = mergeObjects(this.data, JSON.parse(cookie)); } console.log(this.data); this.loadOptions(); this.loadPlayer(); }; this.loadPlayer = function() { $nameField.val(this.data[players[HUMAN_PLAYER].gender]['name']); changePlayerSize(this.data[players[HUMAN_PLAYER].gender]['size']); selectedChoices = this.data[players[HUMAN_PLAYER].gender]['clothing']; playerTagSelections = this.data[players[HUMAN_PLAYER].gender]['tags']; updateTitleGender(); }; this.loadOptions = function(){ USAGE_TRACKING = this.data['usageTracking']; players[HUMAN_PLAYER].stamina = this.data['masturbationTimer'] || 20; players[HUMAN_PLAYER].gender = this.data['gender']; if (!this.data['background'] || this.data['background'] == 1) { setBackground(defaultBackground); } else { setBackground(this.data['background']); } setAutoFade(this.data['autoFade']); setCardSuggest(this.data['cardSuggest']); setAITurnTime(this.data['gameDelay']); setDealSpeed(this.data['dealAnimation']); setAutoForfeit(this.data['autoForfeit']); setAutoEnding(this.data['autoEnding']); }; this.saveOptions = function(){ this.data['usageTracking'] = USAGE_TRACKING; this.data['masturbationTimer'] = players[HUMAN_PLAYER].stamina; if (selectedBackground != defaultBackground-1) { this.data['background'] = selectedBackground+1; } else { this.data['background'] = null; } this.saveCookie(); }; this.saveIngameOptions = function(){ this.data['autoFade'] = AUTO_FADE?1:2; this.data['cardSuggest'] = CARD_SUGGEST?1:2; switch(GAME_DELAY){ case 0: this.data['gameDelay'] = 1; break; case 400: this.data['gameDelay'] = 2; break; default: case 800: this.data['gameDelay'] = 3; break; case 1200: this.data['gameDelay'] = 4; break; case 1600: this.data['gameDelay'] = 5; } switch(ANIM_TIME){ case 0: this.data['dealAnimation'] = 1; break; case 200: this.data['dealAnimation'] = 2; break; default: case 500: this.data['dealAnimation'] = 3; break; case 1000: this.data['dealAnimation'] = 4; break; } if(!AUTO_FORFEIT){ this.data['autoForfeit'] = 4; } else{ switch(FORFEIT_DELAY){ case 4000: this.data['autoForfeit'] = 1; break; default: case 7500: this.data['autoForfeit'] = 2; break; case 10000: this.data['autoForfeit'] = 3; break; } } if(!AUTO_ENDING){ this.data['autoEnding'] = 4; } else{ switch(ENDING_DELAY){ case 4000: this.data['autoEnding'] = 1; break; default: case 7500: this.data['autoEnding'] = 2; break; case 10000: this.data['autoEnding'] = 3; break; } } this.saveCookie(); }; this.savePlayer = function(){ this.data['gender'] = players[HUMAN_PLAYER].gender; this.data[this.data['gender']]['name'] = $nameField.val(); this.data[this.data['gender']]['size'] = players[HUMAN_PLAYER].size; this.data[this.data['gender']]['clothing'] = selectedChoices.slice(); var tags = {}; for (var key in playerTagSelections) { tags[key] = playerTagSelections[key]; } this.data[this.data['gender']]['tags'] = tags; this.saveCookie(); }; this.hasEnding = function(character, title){ if(this.data.endings[character] !== undefined){ if(this.data.endings[character][title] !== undefined){ return this.data.endings[character][title]; } } return false; } this.addEnding = function(character, title){ if(this.data.endings[character]===undefined){ this.data.endings[character] = {}; } this.data.endings[character][title] = true; this.saveCookie(); //Clear table of endings, so they are loaded agin when player visits gallery allEndings = []; anyEndings = []; maleEndings = []; femaleEndings = []; } } var save = new Save(); function saveOptions(){ save.saveOptions(); }; function saveIngameOptions(){ save.saveIngameOptions(); }