Fichiers
LodeRunner_TotalRecall/lodeRunner.storage.js
T
2014-06-20 16:33:36 +08:00

438 lignes
9.7 KiB
JavaScript

var modernScoreInfo, editScoreInfo;
//=======================
// LOCAL STORAGE SET/GET
//=======================
function setLastPlayMode()
{
var infoObj = { m:playMode, d:playData };
var infoJSON = JSON.stringify(infoObj);
setStorage(STORAGE_LASTPLAY_MODE, infoJSON);
}
function getClassicInfo()
{
var infoJSON;
if(playData == 1) {
infoJSON = getStorage(STORAGE_CLASSIC_INFO1);
levelData = levelData1;
} else {
infoJSON = getStorage(STORAGE_CLASSIC_INFO2);
levelData = levelData2;
}
if(infoJSON == null) {
curScore = 0;
curLevel = maxLevel = 1;
runnerLife = RUNNER_LIFE;
} else {
var infoObj = JSON.parse(infoJSON);
curScore = infoObj.s;
curLevel = infoObj.l;
maxLevel = infoObj.m;
runnerLife = infoObj.r;
}
}
function setClassicInfo()
{
maxLevel = (maxLevel < curLevel)?curLevel:maxLevel;
var infoObj = { s:curScore, l:curLevel, r:runnerLife, m: maxLevel };
var infoJSON = JSON.stringify(infoObj);
if(playData == 1) setStorage(STORAGE_CLASSIC_INFO1, infoJSON);
else setStorage(STORAGE_CLASSIC_INFO2, infoJSON);
}
function clearClassicInfo()
{
if(playData == 1) clearStorage(STORAGE_CLASSIC_INFO1);
else clearStorage(STORAGE_CLASSIC_INFO2);
}
function getModernInfo()
{
var infoJSON;
if(playData == 1) {
infoJSON = getStorage(STORAGE_MODERN_INFO1);
levelData = levelData1;
} else if(playData == 2) {
infoJSON = getStorage(STORAGE_MODERN_INFO2);
levelData = levelData2;
} else {
if(editLevels > 0) {
infoJSON = getStorage(STORAGE_USER_INFO);
levelData = editLevelData;
} else { //no any user created level !
playData = 1;
infoJSON = getStorage(STORAGE_MODERN_INFO1);
levelData = levelData1;
}
}
if(infoJSON == null) {
curScore = 0;
curLevel = 1;
runnerLife = RUNNER_LIFE;
} else {
var infoObj = JSON.parse(infoJSON);
curScore = 0;
curLevel = infoObj.l;
runnerLife = RUNNER_LIFE;
}
getModernScoreInfo();
}
function setModernInfo()
{
var infoObj = { l:curLevel};
var infoJSON = JSON.stringify(infoObj);
switch(playData) {
case 1:
setStorage(STORAGE_MODERN_INFO1, infoJSON);
break;
case 2:
setStorage(STORAGE_MODERN_INFO2, infoJSON);
break;
case 3:
setStorage(STORAGE_USER_INFO, infoJSON); //user created
break;
default:
debug("setModernInfo() design error !");
break;
}
}
function clearModernInfo()
{
switch(playData) {
case 1:
clearStorage(STORAGE_MODERN_INFO1);
break;
case 2:
clearStorage(STORAGE_MODERN_INFO2);
break;
case 3:
clearStorage(STORAGE_USER_INFO);
break;
default:
debug("setModernInfo() design error !");
break;
}
}
function getModernScoreInfo()
{
var infoJSON, levelSize;
switch(playData) {
case 1:
infoJSON = getStorage(STORAGE_MODERN_SCORE_INFO1);
levelSize = levelData.length;
break;
case 2:
infoJSON = getStorage(STORAGE_MODERN_SCORE_INFO2);
levelSize = levelData.length;
break;
case 3:
infoJSON = getStorage(STORAGE_USER_SCORE_INFO); //user created
levelSize = MAX_EDIT_LEVEL;
break;
}
if(infoJSON) {
modernScoreInfo = JSON.parse(infoJSON);
if(modernScoreInfo.length != levelSize) infoJSON = null;
}
if(infoJSON == null) {
modernScoreInfo = [];
for(var i = 0; i < levelSize; i++) modernScoreInfo[i] = -1;
}
}
function setModernScoreInfo()
{
var infoJSON = JSON.stringify(modernScoreInfo);
switch(playData) {
case 1:
setStorage(STORAGE_MODERN_SCORE_INFO1, infoJSON);
break;
case 2:
setStorage(STORAGE_MODERN_SCORE_INFO2, infoJSON);
break;
case 3:
setStorage(STORAGE_USER_SCORE_INFO, infoJSON);
break;
}
}
//=====================
// for edit mode
//=====================
var editLevelData, editLevels = -1, editLevelInfo;
function delEditLevel(level)
{
if(level > editLevels || level< 1) return false;
var delId = editLevelInfo[level-1];
editLevelInfo.splice(level-1,1); //delete id and shift others
editLevelInfo.push(delId); //put the deleted id to last of array
clearStorage(STORAGE_USER_LEVEL+("00"+(delId)).slice(-3));
if(--editLevels <= 0) {
clearEditLevelInfo(); //no edit levels
clearStorage(STORAGE_USER_SCORE_INFO); //clear user score info
initEditLevelInfo();
} else {
setEditLevelInfo();
delUserLevelScore(level);
}
editLevelData.splice(level-1,1);
return true;
}
function addEditLevel(levelMap)
{
if(editLevels >= MAX_EDIT_LEVEL) return false;
setEditLevel(++editLevels, levelMap);
//setStorage(STORAGE_USER_LEVEL+("00"+(editLevelInfo[editLevels])).slice(-3), levelMap);
//editLevelData[editLevels] = levelMap;
//++editLevels;
setEditLevelInfo();
return true;
}
function setEditLevel(level, levelMap)
{
setStorage(STORAGE_USER_LEVEL+("00"+(editLevelInfo[level-1])).slice(-3), levelMap);
editLevelData[level-1] = levelMap;
}
function initEditLevelInfo()
{
editLevels = 0;
editLevelInfo = [];
for(var i = 0; i < MAX_EDIT_LEVEL; i++) {
editLevelInfo[i] = i+1;
}
}
function getEditLevelInfo()
{
var infoJSON, levelMap;
if(editLevels >= 0) return; //just once
infoJSON = getStorage(STORAGE_EDIT_INFO);
editLevelData = [];
if(infoJSON) {
var infoObj = JSON.parse(infoJSON);
editLevels = infoObj.no;
editLevelInfo = infoObj.id;
} else {
initEditLevelInfo();
if(getStorage(STORAGE_FIRST_PLAY) == null) {
createUserDefaultLevel(); //first time, create user default level
}
}
for(var i = 0; i < editLevels; i++) {
levelMap = getStorage(STORAGE_USER_LEVEL + ("00"+(editLevelInfo[i])).slice(-3));
if(levelMap == null || levelMap.length != NO_OF_TILES_X * NO_OF_TILES_Y) {
debug("LOCAL STORAGE: get edit level map failed (" + i + ") !");
editLevels =i;
break;
}
editLevelData[i] = levelMap;
}
curScore = 0;
curLevel = editLevels+1;
runnerLife = RUNNER_LIFE;
}
function setEditLevelInfo()
{
var infoObj = { no:editLevels, id: editLevelInfo};
var infoJSON = JSON.stringify(infoObj);
setStorage(STORAGE_EDIT_INFO, infoJSON);
}
function clearEditLevelInfo()
{
clearStorage(STORAGE_EDIT_INFO);
}
function initNewLevelInfo(testInfo)
{
testInfo.level = editLevels+1;
testInfo.levelMap = "";
testInfo.pass = 0;
testInfo.modified = 0;
for(var i = 0; i < NO_OF_TILES_X * NO_OF_TILES_Y; i++)
testInfo.levelMap += " "; //empty map
}
function compareWithExist(existLevelMap, testLevelMap)
{
for(var i = 0; i < NO_OF_TILES_X * NO_OF_TILES_Y; i++) {
if(existLevelMap.charAt(i) != testLevelMap.charAt(i)) return 1;
}
return 0;
}
function getTestLevel(testInfo)
{
var infoJSON;
if((infoJSON = getStorage(STORAGE_TEST_LEVEL)) == null) {
initNewLevelInfo(testInfo);
} else {
var init = testInfo.level<0?1:0;
var infoObj = JSON.parse(infoJSON);
testInfo.level = infoObj.level;
testInfo.levelMap = infoObj.map;
testInfo.pass = infoObj.pass;
//BEGIN for debug ====================
var i = 0;
for(var y = 0; y < NO_OF_TILES_Y; y++) {
var string = ""
for(var x = 0; x < NO_OF_TILES_X; x++) {
string += testInfo.levelMap[i++];
}
debug('"' + string + '"');
}
//END for debug ====================
if(testInfo.level > editLevels) testInfo.modified = 1;
else {
if(compareWithExist(editLevelData[infoObj.level-1], testInfo.levelMap) == 0) {
if(init) {
//same as exist level, new level
clearTestLevel();
initNewLevelInfo(testInfo);
}
} else {
testInfo.modified = 1;
}
}
}
}
function setTestLevel(testInfo)
{
var infoObj = { level:testInfo.level, map: testInfo.levelMap, pass: testInfo.pass};
var infoJSON = JSON.stringify(infoObj);
setStorage(STORAGE_TEST_LEVEL, infoJSON);
}
function clearTestLevel()
{
clearStorage(STORAGE_TEST_LEVEL);
}
function createUserDefaultLevel()
{
var myDefaultLevel = //Double Happy 2014/05/25
"0-------- ------- ---------0" +
"H & # $ # H" +
"H #######S####### H" +
"H $ # # $ H" +
"H @@@#@@@S@@@#@@@ H" +
"H # # H" +
"H ####### ####### H" +
"H # $ # # $ # H" +
"H #@@#### ####@@# H" +
"H X X H" +
"H @@@#@@@X@@@#@@@ H" +
"H # # H" +
"H ####### ####### H" +
"H # $ # # $ # H" +
"H ####### ####### H" +
"H # # H";
addEditLevel(myDefaultLevel);
}
//=========================
// for debug only
//=========================
function genUserLevel(levels)
{
var levelMap =
" H " +
" &H " +
" ## " +
" " +
" " +
" " +
" " +
" " +
" " +
" " +
" " +
" " +
" " +
" " +
" " +
" " ;
getEditLevelInfo();
while(editLevels > 0) delEditLevel(1); //clear all user level
for(var i = 1; i <= levels; i++) {
var tmpMap = levelMap;
var no = i%5;
var str = "##########";
for(var j = 0; j < no; j++) {
var index = (no+j*2)*NO_OF_TILES_X;
tmpMap = tmpMap.substr(0, index) + str + tmpMap.substr(index+str.length);
}
addEditLevel(tmpMap);
}
}
//=======================================
// BEGIN for set|get|clear localstorage
//=======================================
function setStorage(key, value)
{
if(typeof(window.localStorage) != 'undefined'){
window.localStorage.setItem(key,value);
}
}
function getStorage(key)
{
var value = null;
if(typeof(window.localStorage) != 'undefined'){
value = window.localStorage.getItem(key);
}
return value;
}
function clearStorage(key)
{
if(typeof(window.localStorage) != 'undefined'){
window.localStorage.removeItem(key);
}
}