Last active
September 19, 2019 21:19
-
-
Save greyelf/55a45f461ded3d90a0cc28412187db0a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Chapel's Harlowe Achievements with Count and Includes | |
see: http://twinery.org/questions/22857/making-achievements-in-harlowe?show=22857 | |
usage: | |
(print: Chapel.achievements.count()) | |
(if: Chapel.achievements.includes("ABCDE"))[ABCDE has been achieved] | |
*/ | |
window.Chapel = window.Chapel || {}; | |
(function () { | |
var storage = window.localStorage || false; | |
var achievementKey = 'tw-achievement'; | |
var achievements = []; | |
function setItem(key, val) { | |
try { | |
if (storage) { | |
storage.setItem(key, JSON.stringify(val)); | |
} else { | |
throw new Error('Local storage is inaccessable.'); | |
} | |
} catch (err) { | |
console.warn(err); | |
alert(err.message); | |
} | |
} | |
function getItem(key) { | |
try { | |
if (storage) { | |
return JSON.parse(storage.getItem(key)); | |
} else { | |
throw new Error('Local storage is inaccessable.'); | |
} | |
} catch (err) { | |
console.warn(err); | |
alert(err.message); | |
} | |
} | |
function removeItem(key) { | |
try { | |
if (storage) { | |
storage.removeItem(key); | |
} else { | |
throw new Error('Local storage is inaccessable.'); | |
} | |
} catch (err) { | |
console.warn(err); | |
alert(err.message); | |
} | |
} | |
function achievementAdd(name) { | |
achievements.push(name); | |
setItem(achievementKey, achievements); | |
} | |
function loadAchievements() { | |
var arr = getItem(achievementKey) || []; | |
achievements = arr; | |
return arr; | |
} | |
function clearAchievements() { | |
achievements = []; | |
removeItem(achievementKey); | |
} | |
function printAchievements(str) { | |
return achievements.join(str || '\n'); | |
} | |
function countAchievements() { | |
return achievements.length; | |
} | |
function includesAchievement(key) { | |
return achievements.includes(key); | |
} | |
Chapel.storage = Chapel.storage || { | |
set: setItem, | |
get: getItem, | |
del: removeItem, | |
} | |
Chapel.achievements = Chapel.achievements || { | |
add: achievementAdd, | |
load: loadAchievements, | |
clear: clearAchievements, | |
print: printAchievements, | |
count: countAchievements, | |
includes: includesAchievement | |
} | |
}()); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment