Skip to content

Instantly share code, notes, and snippets.

@greyelf
Last active September 19, 2019 21:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save greyelf/55a45f461ded3d90a0cc28412187db0a to your computer and use it in GitHub Desktop.
Save greyelf/55a45f461ded3d90a0cc28412187db0a to your computer and use it in GitHub Desktop.
/*
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