diff --git a/editor-mobile.html b/editor-mobile.html index 4a14c201..1b82c8c0 100644 --- a/editor-mobile.html +++ b/editor-mobile.html @@ -491,7 +491,7 @@ -
请输入文字...
diff --git a/editor.html b/editor.html index 29091d0d..b24b8df0 100644 --- a/editor.html +++ b/editor.html @@ -474,7 +474,7 @@请输入文字...
diff --git a/libs/actions.js b/libs/actions.js index 44574b82..db2a9c06 100644 --- a/libs/actions.js +++ b/libs/actions.js @@ -109,7 +109,7 @@ actions.prototype.checkReplaying = function () { ////// 检查是否在录像播放中,如果是,则停止交互 actions.prototype._sys_checkReplay = function () { - if (this.checkReplaying()) return true; + if (core.actions.checkReplaying()) return true; } ////// 按下某个键时 ////// @@ -127,10 +127,10 @@ actions.prototype._sys_onkeyDown = function (e) { } } core.status.holdingKeys.push(e.keyCode); - this.pressKey(e.keyCode); + core.actions.pressKey(e.keyCode); } else { if (e.keyCode == 17) core.status.ctrlDown = true; - this.keyDown(e.keyCode); + core.actions.keyDown(e.keyCode); } } @@ -140,7 +140,7 @@ actions.prototype.onkeyUp = function (e) { } actions.prototype._sys_onkeyUp_replay = function (e) { - if (this.checkReplaying()) { + if (core.actions.checkReplaying()) { if (e.keyCode == 27) // ESCAPE core.stopReplay(); else if (e.keyCode == 90) // Z @@ -179,10 +179,10 @@ actions.prototype._sys_onkeyUp = function (e) { break; } } - this.keyUp(e.keyCode, e.altKey); + core.actions.keyUp(e.keyCode, e.altKey); } else { if (e.keyCode == 17) core.status.ctrlDown = false; - this.keyUp(e.keyCode, e.altKey); + core.actions.keyUp(e.keyCode, e.altKey); } } @@ -209,32 +209,32 @@ actions.prototype._sys_keyDown_lockControl = function (keyCode) { if (!core.status.lockControl) return false; // Ctrl跳过对话 if (keyCode == 17) { - this.keyDownCtrl(); + core.actions.keyDownCtrl(); return true; } switch (core.status.event.id) { case 'action': - this._keyDownAction(keyCode); + core.actions._keyDownAction(keyCode); break; case 'book': - this._keyDownBook(keyCode); + core.actions._keyDownBook(keyCode); break; case 'fly': - this._keyDownFly(keyCode); + core.actions._keyDownFly(keyCode); break; case 'viewMaps': - this._keyDownViewMaps(keyCode); + core.actions._keyDownViewMaps(keyCode); break; case 'equipbox': - this._keyDownEquipbox(keyCode); + core.actions._keyDownEquipbox(keyCode); break; case 'toolbox': - this._keyDownToolbox(keyCode); + core.actions._keyDownToolbox(keyCode); break; case 'save': case 'load': case 'replayLoad': - this._keyDownSL(keyCode); + core.actions._keyDownSL(keyCode); break; case 'shop': case 'selectShop': @@ -246,10 +246,10 @@ actions.prototype._sys_keyDown_lockControl = function (keyCode) { case 'storageRemove': case 'replay': case 'gameInfo': - this._keyDownChoices(keyCode); + core.actions._keyDownChoices(keyCode); break; case 'cursor': - this._keyDownCursor(keyCode); + core.actions._keyDownCursor(keyCode); break; } return true; @@ -282,7 +282,7 @@ actions.prototype.keyUp = function (keyCode, altKey, fromReplay) { } actions.prototype._sys_keyUp_replay = function (keyCode, altKey, fromReplay) { - if (!fromReplay && this.checkReplaying()) return true; + if (!fromReplay && core.actions.checkReplaying()) return true; } actions.prototype._sys_keyUp_lockControl = function (keyCode, altKey) { @@ -298,10 +298,10 @@ actions.prototype._sys_keyUp_lockControl = function (keyCode, altKey) { ok() && core.drawText(); break; case 'confirmBox': - this._keyUpConfirmBox(keyCode); + core.actions._keyUpConfirmBox(keyCode); break; case 'action': - this._keyUpAction(keyCode); + core.actions._keyUpAction(keyCode); break; case 'about': ok() && core.ui.closePanel(); @@ -310,69 +310,69 @@ actions.prototype._sys_keyUp_lockControl = function (keyCode, altKey) { ok() && core.ui.closePanel(); break; case 'book': - this._keyUpBook(keyCode); + core.actions._keyUpBook(keyCode); break; case 'book-detail': - ok() && this._clickBookDetail(); + ok() && core.actions._clickBookDetail(); break; case 'fly': this._keyUpFly(keyCode); break; case 'viewMaps': - this._keyUpViewMaps(keyCode); + core.actions._keyUpViewMaps(keyCode); break; case 'shop': - this._keyUpShop(keyCode); + core.actions._keyUpShop(keyCode); break; case 'selectShop': - this._keyUpQuickShop(keyCode); + core.actions._keyUpQuickShop(keyCode); break; case 'toolbox': - this._keyUpToolbox(keyCode); + core.actions._keyUpToolbox(keyCode); break; case 'equipbox': - this._keyUpEquipbox(keyCode, altKey); + core.actions._keyUpEquipbox(keyCode, altKey); break; case 'save': case 'load': case 'replayLoad': - this._keyUpSL(keyCode); + core.actions._keyUpSL(keyCode); break; case 'keyBoard': ok() && core.ui.closePanel(); break; case 'switchs': - this._keyUpSwitchs(keyCode); + core.actions._keyUpSwitchs(keyCode); break; case 'settings': - this._keyUpSettings(keyCode); + core.actions._keyUpSettings(keyCode); break; case 'syncSave': - this._keyUpSyncSave(keyCode); + core.actions._keyUpSyncSave(keyCode); break; case 'syncSelect': - this._keyUpSyncSelect(keyCode); + core.actions._keyUpSyncSelect(keyCode); break; case 'localSaveSelect': - this._keyUpLocalSaveSelect(keyCode); + core.actions._keyUpLocalSaveSelect(keyCode); break; case 'storageRemove': - this._keyUpStorageRemove(keyCode); + core.actions._keyUpStorageRemove(keyCode); break; case 'cursor': - this._keyUpCursor(keyCode); + core.actions._keyUpCursor(keyCode); break; case 'replay': - this._keyUpReplay(keyCode); + core.actions._keyUpReplay(keyCode); break; case 'gameInfo': - this._keyUpGameInfo(keyCode); + core.actions._keyUpGameInfo(keyCode); break; case 'centerFly': - this._keyUpCenterFly(keyCode); + core.actions._keyUpCenterFly(keyCode); break; case 'paint': - this._keyUpPaint(keyCode); + core.actions._keyUpPaint(keyCode); break; } return true; @@ -399,7 +399,7 @@ actions.prototype.ondown = function (loc) { actions.prototype._sys_ondown_paint = function (x, y, px, py) { // 画板 if (core.status.played && (core.status.event || {}).id == 'paint') { - this._ondownPaint(px, py); + core.actions._ondownPaint(px, py); return true; } } @@ -418,7 +418,7 @@ actions.prototype._sys_ondown_lockControl = function (x, y, px, py) { core.doAction(); } else { - this.onclick(x, y, []); + core.actions.onclick(x, y, []); } // --- 长按判定 @@ -456,7 +456,7 @@ actions.prototype.onmove = function (loc) { actions.prototype._sys_onmove_paint = function (x, y, px, py) { // 画板 if (core.status.played && (core.status.event || {}).id == 'paint') { - this._onmovePaint(px, py); + core.actions._onmovePaint(px, py); return true; } } @@ -492,7 +492,7 @@ actions.prototype.onup = function () { actions.prototype._sys_onup_paint = function () { // 画板 if (core.status.played && (core.status.event || {}).id == 'paint') { - this._onupPaint(); + core.actions._onupPaint(); return true; } } @@ -525,11 +525,11 @@ actions.prototype._sys_onup = function () { // 长按 if (!core.status.lockControl && stepPostfix.length == 0 && core.status.downTime != null && new Date() - core.status.downTime >= 1000) { - this.longClick(posx, posy); + core.actions.longClick(posx, posy); } else { //posx,posy是寻路的目标点,stepPostfix是后续的移动 - this.onclick(posx, posy, stepPostfix); + core.actions.onclick(posx, posy, stepPostfix); } core.status.downTime = null; return true; @@ -567,75 +567,75 @@ actions.prototype._sys_onclick_lockControl = function (x, y) { if (!core.status.lockControl) return false; switch (core.status.event.id) { case 'centerFly': - this._clickCenterFly(x, y); + core.actions._clickCenterFly(x, y); break; case 'book': - this._clickBook(x, y); + core.actions._clickBook(x, y); break; case 'book-detail': - this._clickBookDetail(x, y); + core.actions._clickBookDetail(x, y); break; case 'fly': - this._clickFly(x, y); + core.actions._clickFly(x, y); break; case 'viewMaps': - this._clickViewMaps(x, y); + core.actions._clickViewMaps(x, y); break; case 'switchs': - this._clickSwitchs(x, y); + core.actions._clickSwitchs(x, y); break; case 'settings': - this._clickSettings(x, y); + core.actions._clickSettings(x, y); break; case 'shop': - this._clickShop(x, y); + core.actions._clickShop(x, y); break; case 'selectShop': - this._clickQuickShop(x, y); + core.actions._clickQuickShop(x, y); break; case 'equipbox': - this._clickEquipbox(x, y); + core.actions._clickEquipbox(x, y); break; case 'toolbox': - this._clickToolbox(x, y); + core.actions._clickToolbox(x, y); break; case 'save': case 'load': case 'replayLoad': - this._clickSL(x, y); + core.actions._clickSL(x, y); break; case 'confirmBox': - this._clickConfirmBox(x, y); + core.actions._clickConfirmBox(x, y); break; case 'keyBoard': - this._clickKeyBoard(x, y); + core.actions._clickKeyBoard(x, y); break; case 'action': - this._clickAction(x, y); + core.actions._clickAction(x, y); break; case 'text': core.drawText(); break; case 'syncSave': - this._clickSyncSave(x, y); + core.actions._clickSyncSave(x, y); break; case 'syncSelect': - this._clickSyncSelect(x, y); + core.actions._clickSyncSelect(x, y); break; case 'localSaveSelect': - this._clickLocalSaveSelect(x, y); + core.actions._clickLocalSaveSelect(x, y); break; case 'storageRemove': - this._clickStorageRemove(x, y); + core.actions._clickStorageRemove(x, y); break; case 'cursor': - this._clickCursor(x, y); + core.actions._clickCursor(x, y); break; case 'replay': - this._clickReplay(x, y); + core.actions._clickReplay(x, y); break; case 'gameInfo': - this._clickGameInfo(x, y); + core.actions._clickGameInfo(x, y); break; case 'about': case 'help': @@ -668,8 +668,8 @@ actions.prototype._sys_onmousewheel = function (direct) { // 楼层飞行器 if (core.status.lockControl && core.status.event.id == 'fly') { - if (direct == 1) core.ui.drawFly(this._getNextFlyFloor(1)); - if (direct == -1) core.ui.drawFly(this._getNextFlyFloor(-1)); + if (direct == 1) core.ui.drawFly(core.actions._getNextFlyFloor(1)); + if (direct == -1) core.ui.drawFly(core.actions._getNextFlyFloor(-1)); return; } @@ -689,8 +689,8 @@ actions.prototype._sys_onmousewheel = function (direct) { // 浏览地图 if (core.status.lockControl && core.status.event.id == 'viewMaps') { - if (direct == 1) this._clickViewMaps(6, 3); - if (direct == -1) this._clickViewMaps(6, 9); + if (direct == 1) core.actions._clickViewMaps(6, 3); + if (direct == -1) core.actions._clickViewMaps(6, 9); return; } @@ -740,7 +740,7 @@ actions.prototype._sys_longClick_lockControl = function (x, y) { // 长按楼传器的箭头可以快速翻页 if (core.status.event.id == 'fly') { if ((x == 10 || x == 11) && (y == 5 || y == 9)) { - this._clickFly(x, y); + core.actions._clickFly(x, y); return true; } } @@ -774,12 +774,12 @@ actions.prototype._sys_longClick = function (x, y, fromEvent) { actions.prototype._selectChoices = function (length, keycode, callback) { var topIndex = 6 - parseInt((length - 1) / 2); if (keycode == 13 || keycode == 32 || keycode == 67) { - callback(6, topIndex + core.status.event.selection); + callback.apply(this, [6, topIndex + core.status.event.selection]); } if (keycode >= 49 && keycode <= 57) { var index = keycode - 49; if (index < length) { - callback(6, topIndex + index); + callback.apply(this, [6, topIndex + index]); } } } @@ -1754,53 +1754,24 @@ actions.prototype._clickSwitchs = function (x, y) { var topIndex = 6 - parseInt((choices.length - 1) / 2); if (y >= topIndex && y < topIndex + choices.length) { var selection = y - topIndex; + core.status.event.selection = selection; switch (selection) { case 0: - core.triggerBgm(); - core.ui.drawSwitchs(); - break; + return this._clickSwitchs_bgm(); case 1: - core.musicStatus.soundStatus = !core.musicStatus.soundStatus; - core.setLocalStorage('soundStatus', core.musicStatus.soundStatus); - core.ui.drawSwitchs(); - break; + return this._clickSwitchs_sound(); case 2: - core.flags.displayEnemyDamage = !core.flags.displayEnemyDamage; - core.updateDamage(); - core.setLocalStorage('enemyDamage', core.flags.displayEnemyDamage); - core.ui.drawSwitchs(); - break; + return this._clickSwitchs_displayEnemyDamage(); case 3: - core.flags.displayCritical = !core.flags.displayCritical; - core.updateDamage(); - core.setLocalStorage('critical', core.flags.displayCritical); - core.ui.drawSwitchs(); - break; + return this._clickSwitchs_displayCritical(); case 4: - core.flags.displayExtraDamage = !core.flags.displayExtraDamage; - core.updateDamage(); - core.setLocalStorage('extraDamage', core.flags.displayExtraDamage); - core.ui.drawSwitchs(); - break; + return this._clickSwitchs_displayExtraDamage(); case 5: - core.platform.useLocalForage = !core.platform.useLocalForage; - core.setLocalStorage('useLocalForage', core.platform.useLocalForage); - core.control.getSaveIndexes(function (indexes) { - core.saves.ids = indexes; - }); - core.ui.drawSwitchs(); - break; + return this._clickSwitchs_localForage(); case 6: - if (core.hasFlag('__noClickMove__')) core.removeFlag('__noClickMove__'); - else core.setFlag('__noClickMove__', true); - core.ui.drawSwitchs(); - break; + return this._clickSwitchs_clickMove(); case 7: - core.platform.extendKeyboard = !core.platform.extendKeyboard; - core.setLocalStorage('extendKeyboard', core.platform.extendKeyboard); - core.updateStatusBar(); - core.ui.drawSwitchs(); - break; + return this._clickSwitchs_ExtendKeyboard(); case 8: core.status.event.selection = 0; core.ui.drawSettings(); @@ -1809,6 +1780,60 @@ actions.prototype._clickSwitchs = function (x, y) { } } +actions.prototype._clickSwitchs_bgm = function () { + core.triggerBgm(); + core.ui.drawSwitchs(); +} + +actions.prototype._clickSwitchs_sound = function () { + core.musicStatus.soundStatus = !core.musicStatus.soundStatus; + core.setLocalStorage('soundStatus', core.musicStatus.soundStatus); + core.ui.drawSwitchs(); +} + +actions.prototype._clickSwitchs_displayEnemyDamage = function () { + core.flags.displayEnemyDamage = !core.flags.displayEnemyDamage; + core.updateDamage(); + core.setLocalStorage('enemyDamage', core.flags.displayEnemyDamage); + core.ui.drawSwitchs(); +} + +actions.prototype._clickSwitchs_displayCritical = function () { + core.flags.displayCritical = !core.flags.displayCritical; + core.updateDamage(); + core.setLocalStorage('critical', core.flags.displayCritical); + core.ui.drawSwitchs(); +} + +actions.prototype._clickSwitchs_displayExtraDamage = function () { + core.flags.displayExtraDamage = !core.flags.displayExtraDamage; + core.updateDamage(); + core.setLocalStorage('extraDamage', core.flags.displayExtraDamage); + core.ui.drawSwitchs(); +} + +actions.prototype._clickSwitchs_localForage = function () { + core.platform.useLocalForage = !core.platform.useLocalForage; + core.setLocalStorage('useLocalForage', core.platform.useLocalForage); + core.control.getSaveIndexes(function (indexes) { + core.saves.ids = indexes; + }); + core.ui.drawSwitchs(); +} + +actions.prototype._clickSwitchs_clickMove = function () { + if (core.hasFlag('__noClickMove__')) core.removeFlag('__noClickMove__'); + else core.setFlag('__noClickMove__', true); + core.ui.drawSwitchs(); +} + +actions.prototype._clickSwitchs_ExtendKeyboard = function () { + core.platform.extendKeyboard = !core.platform.extendKeyboard; + core.setLocalStorage('extendKeyboard', core.platform.extendKeyboard); + core.updateStatusBar(); + core.ui.drawSwitchs(); +} + ////// 系统设置界面时,放开某个键的操作 ////// actions.prototype._keyUpSwitchs = function (keycode) { if (keycode == 27 || keycode == 88) { @@ -1826,7 +1851,7 @@ actions.prototype._clickSettings = function (x, y) { var topIndex = 6 - parseInt((choices.length - 1) / 2); if (y >= topIndex && y < topIndex + choices.length) { var selection = y - topIndex; - + core.status.event.selection = selection; switch (selection) { case 0: core.status.event.selection = 0; @@ -1852,15 +1877,7 @@ actions.prototype._clickSettings = function (x, y) { core.ui.drawGameInfo(); break; case 6: - core.status.event.selection = 1; - core.ui.drawConfirmBox("你确定要返回标题页面吗?", function () { - core.ui.closePanel(); - core.restart(); - }, function () { - core.status.event.selection = 3; - core.ui.drawSettings(); - }); - break; + return core.confirmRestart(true); case 7: core.ui.closePanel(); break; @@ -1885,9 +1902,9 @@ actions.prototype._clickSyncSave = function (x, y) { var topIndex = 6 - parseInt((choices.length - 1) / 2); if (y >= topIndex && y < topIndex + choices.length) { var selection = y - topIndex; + core.status.event.selection = selection; switch (selection) { case 0: - // core.syncSave("save"); core.status.event.selection = 0; core.ui.drawSyncSelect(); break; @@ -1899,65 +1916,11 @@ actions.prototype._clickSyncSave = function (x, y) { core.ui.drawLocalSaveSelect(); break; case 3: - core.readFile(function (obj) { - if (obj.name != core.firstData.name) { - alert("存档和游戏不一致!"); - return; - } - if (obj.version != core.firstData.version) { - alert("游戏版本不一致!"); - return; - } - if (!obj.data) { - alert("无效的存档!"); - return; - } - var data = obj.data; - - if (data instanceof Array) { - core.ui.drawConfirmBox("所有本地存档都将被覆盖,确认?", function () { - for (var i = 1; i <= 5 * (main.savePages || 30); i++) { - if (i <= data.length) { - core.setLocalForage("save" + i, data[i - 1]); - } - else { - if (core.saves.ids[i]) - core.removeLocalForage("save" + i); - } - } - core.ui.closePanel(); - core.drawText("读取成功!\n你的本地所有存档均已被覆盖。"); - }, function () { - core.status.event.selection = 0; - core.ui.drawSyncSave(); - }) - } - else { - // core.setLocalStorage("save"+core.saves.saveIndex, data); - core.setLocalForage("save" + core.saves.saveIndex, data, function () { - core.drawText("同步成功!\n单存档已覆盖至存档" + core.saves.saveIndex); - }) - } - }, function () { - - }); - break; + return this._clickSyncSave_readFile(); case 4: - core.status.event.selection = 0; - core.ui.drawReplay(); - break; + return this._clickSyncSave_replay(); case 5: - if (core.hasFlag('debug')) { - core.drawText("\t[系统提示]调试模式下无法下载录像"); - break; - } - core.download(core.firstData.name + "_" + core.formatDate2(new Date()) + ".h5route", JSON.stringify({ - 'name': core.firstData.name, - 'hard': core.status.hard, - 'seed': core.getFlag('__seed__'), - 'route': core.encodeRoute(core.status.route) - })); - break; + return this._clickSyncSave_download(); case 6: core.status.event.selection = 0; core.ui.drawStorageRemove(); @@ -1972,6 +1935,38 @@ actions.prototype._clickSyncSave = function (x, y) { return; } +actions.prototype._clickSyncSave_readFile = function () { + core.readFile(function (obj) { + if (obj.name != core.firstData.name) return alert("存档和游戏不一致!"); + if (obj.version != core.firstData.version) return alert("游戏版本不一致!"); + if (!obj.data) return alert("无效的存档!"); + core.control._syncLoad_write(obj.data); + }); +} + +actions.prototype._clickSyncSave_replay = function () { + if (core.hasFlag('debug')) { + core.drawText("\t[系统提示]调试模式下无法回放录像"); + } + else { + core.status.event.selection = 0; + core.ui.drawReplay(); + } +} + +actions.prototype._clickSyncSave_download = function () { + if (core.hasFlag('debug')) { + core.drawText("\t[系统提示]调试模式下无法下载录像"); + return; + } + core.download(core.firstData.name + "_" + core.formatDate2() + ".h5route", JSON.stringify({ + 'name': core.firstData.name, + 'hard': core.status.hard, + 'seed': core.getFlag('__seed__'), + 'route': core.encodeRoute(core.status.route) + })); +} + ////// 同步存档界面时,放开某个键的操作 ////// actions.prototype._keyUpSyncSave = function (keycode) { if (keycode == 27 || keycode == 88) { @@ -1990,6 +1985,7 @@ actions.prototype._clickSyncSelect = function (x, y) { var topIndex = 6 - parseInt((choices.length - 1) / 2); if (y >= topIndex && y < topIndex + choices.length) { var selection = y - topIndex; + core.status.event.selection = selection; switch (selection) { case 0: core.syncSave('all'); @@ -2024,6 +2020,7 @@ actions.prototype._clickLocalSaveSelect = function (x, y) { if (y >= topIndex && y < topIndex + choices.length) { var selection = y - topIndex; + core.status.event.selection = selection; if (selection < 2) { core.control.getSaves(selection == 0 ? null : core.saves.saveIndex, function (saves) { if (saves) { @@ -2036,10 +2033,10 @@ actions.prototype._clickLocalSaveSelect = function (x, y) { } }) } - } - core.status.event.selection = 2; - core.ui.drawSyncSave(); + core.status.event.selection = 2; + core.ui.drawSyncSave(); + } } ////// 存档下载界面时,放开某个键的操作 ////// @@ -2061,57 +2058,12 @@ actions.prototype._clickStorageRemove = function (x, y) { if (y >= topIndex && y < topIndex + choices.length) { var selection = y - topIndex; + core.status.event.selection = selection; switch (selection) { case 0: - core.myconfirm("你确定要清除【全部塔】的所有本地存档?\n此行为不可逆!!!", function () { - if (core.platform.useLocalForage) { - core.ui.drawWaiting("正在清空,请稍后..."); - localforage.clear(function () { - core.ui.closePanel(); - core.drawText("\t[操作成功]你的所有存档已被清空。"); - core.saves.saveIndex = 1; - core.removeLocalStorage('saveIndex'); - }); - } - else { - localStorage.clear(); - core.drawText("\t[操作成功]你的所有存档已被清空。"); - core.saves.saveIndex = 1; - core.removeLocalStorage('saveIndex'); - } - }); - break; + return this._clickStorageRemove_all(); case 1: - core.myconfirm("你确定要清除本塔的所有本地存档?\n此行为不可逆!!!", function () { - if (core.platform.useLocalForage) { - core.ui.drawWaiting("正在清空,请稍后..."); - Object.keys(core.saves.ids).forEach(function (v) { - if (v != 0) - core.removeLocalForage("save" + v); - }); - core.removeLocalForage("autoSave", function () { - core.saves.autosave.data = null; - core.saves.autosave.updated = false; - core.ui.closePanel(); - core.drawText("\t[操作成功]当前塔的存档已被清空。"); - core.saves.saveIndex = 1; - core.removeLocalStorage('saveIndex'); - }); - } - else { - Object.keys(core.saves.ids).forEach(function (v) { - if (v != 0) - core.removeLocalStorage("save" + v); - }); - core.removeLocalStorage("autoSave"); - core.saves.autosave.data = null; - core.saves.autosave.updated = false; - core.drawText("\t[操作成功]当前塔的存档已被清空。"); - core.saves.saveIndex = 1; - core.removeLocalStorage('saveIndex'); - } - break; - }); + return this._clickStorageRemove_current(); case 2: core.status.event.selection = 6; core.ui.drawSyncSave(); @@ -2120,6 +2072,52 @@ actions.prototype._clickStorageRemove = function (x, y) { } } +actions.prototype._clickStorageRemove_all = function () { + core.myconfirm("你确定要清除【全部塔】的所有本地存档?\n此行为不可逆!!!", function () { + var done = function () { + core.ui.closePanel(); + core.drawText("\t[操作成功]你的所有存档已被清空。"); + core.saves.saveIndex = 1; + core.removeLocalStorage('saveIndex'); + }; + if (core.platform.useLocalForage) { + core.ui.drawWaiting("正在清空,请稍后..."); + localforage.clear(done); + } + else { + localStorage.clear(); + done(); + } + }); +} + +actions.prototype._clickStorageRemove_current = function () { + core.myconfirm("你确定要清除本塔的所有本地存档?\n此行为不可逆!!!", function () { + var done = function () { + core.saves.autosave.data = null; + core.saves.autosave.updated = false; + core.ui.closePanel(); + core.drawText("\t[操作成功]当前塔的存档已被清空。"); + core.saves.saveIndex = 1; + core.removeLocalStorage('saveIndex'); + } + if (core.platform.useLocalForage) { + core.ui.drawWaiting("正在清空,请稍后..."); + Object.keys(core.saves.ids).forEach(function (v) { + core.removeLocalForage("save" + v); + }); + core.removeLocalForage("autoSave", done); + } + else { + Object.keys(core.saves.ids).forEach(function (v) { + core.removeLocalStorage("save" + v); + }); + core.removeLocalStorage("autoSave"); + done(); + } + }); +} + ////// 存档删除界面时,放开某个键的操作 ////// actions.prototype._keyUpStorageRemove = function (keycode) { if (keycode == 27 || keycode == 88) { @@ -2139,44 +2137,42 @@ actions.prototype._clickReplay = function (x, y) { if (y >= topIndex && y < topIndex + choices.length) { var selection = y - topIndex; + core.status.event.selection = selection; switch (selection) { - case 0: { - core.ui.closePanel(); - core.startGame(core.status.hard, core.getFlag('__seed__'), core.clone(core.status.route)); - break; - } - case 1: { - core.status.event.id = 'replayLoad'; - core.status.event.selection = null; - core.ui.clearLastEvent(); - var saveIndex = core.saves.saveIndex; - var page = parseInt((saveIndex - 1) / 5), offset = saveIndex - 5 * page; - core.ui.drawSLPanel(10 * page + offset); - break; - } - case 2: - core.chooseReplayFile(); - break; - case 3: - if (core.hasFlag('debug')) { - core.drawText("\t[系统提示]调试模式下无法下载录像"); - break; - } - core.download(core.firstData.name + "_" + core.formatDate2(new Date()) + ".h5route", JSON.stringify({ - 'name': core.firstData.name, - 'hard': core.status.hard, - 'seed': core.getFlag('__seed__'), - 'route': core.encodeRoute(core.status.route) - })); - break; - break; - case 4: - core.ui.closePanel(); - break; + case 0: return this._clickReplay_fromBeginning(); + case 1: return this._clickReplay_fromLoad(); + case 2: return core.chooseReplayFile(); + case 3: return this._clickReplay_download(); + case 4: return core.ui.closePanel(); } } } +actions.prototype._clickReplay_fromBeginning = function () { + core.ui.closePanel(); + core.startGame(core.status.hard, core.getFlag('__seed__'), core.clone(core.status.route)); +} + +actions.prototype._clickReplay_fromLoad = function () { + core.status.event.id = 'replayLoad'; + core.status.event.selection = null; + core.ui.clearLastEvent(); + var saveIndex = core.saves.saveIndex; + var page = parseInt((saveIndex - 1) / 5), offset = saveIndex - 5 * page; + core.ui.drawSLPanel(10 * page + offset); +} + +actions.prototype._clickReplay_download = function () { + if (core.hasFlag('debug')) return core.drawText("\t[系统提示]调试模式下无法下载录像"); + core.download(core.firstData.name + "_" + core.formatDate2() + ".h5route", JSON.stringify({ + 'name': core.firstData.name, + 'hard': core.status.hard, + 'seed': core.getFlag('__seed__'), + 'route': core.encodeRoute(core.status.route) + })); + +} + ////// 回放选择界面时,放开某个键的操作 ////// actions.prototype._keyUpReplay = function (keycode) { if (keycode == 27 || keycode == 88) { @@ -2195,41 +2191,14 @@ actions.prototype._clickGameInfo = function (x, y) { if (y >= topIndex && y < topIndex + choices.length) { var selection = y - topIndex; + core.status.event.selection = selection; switch (selection) { - case 0: - core.ui.drawStatistics(); - break; - case 1: - if (core.platform.isPC) - window.open("editor.html", "_blank"); - else { - core.myconfirm("即将离开本塔,跳转至本塔工程页面,确认?", function () { - window.location.href = "editor-mobile.html"; - }); - } - break; - case 2: - if (core.platform.isPC) { - window.open("/score.php?name=" + core.firstData.name + "&num=10", "_blank"); - } - else { - core.myconfirm("即将离开本塔,跳转至本塔评论页面,确认?", function () { - window.location.href = "/score.php?name=" + core.firstData.name + "&num=10"; - }); - } - break; - case 3: - core.ui.drawHelp(); - break; - case 4: - core.ui.drawAbout(); - break; - case 5: - if (core.platform.isPC) - window.open(core.firstData.name + ".zip"); - else - window.location.href = core.firstData.name + ".zip"; - break; + case 0: return core.ui.drawStatistics(); + case 1: return this._clickGameInfo_openProject(); + case 2: return this._clickGameInfo_openComments(); + case 3: return core.ui.drawHelp(); + case 4: return core.ui.drawAbout(); + case 5: return this._clickGameInfo_download(); case 6: core.status.event.selection = 5; core.ui.drawSettings(); @@ -2238,6 +2207,34 @@ actions.prototype._clickGameInfo = function (x, y) { } } +actions.prototype._clickGameInfo_openProject = function () { + if (core.platform.isPC) + window.open("editor.html", "_blank"); + else { + core.myconfirm("即将离开本塔,跳转至本塔工程页面,确认?", function () { + window.location.href = "editor-mobile.html"; + }); + } +} + +actions.prototype._clickGameInfo_openComments = function () { + if (core.platform.isPC) { + window.open("/score.php?name=" + core.firstData.name + "&num=10", "_blank"); + } + else { + core.myconfirm("即将离开本塔,跳转至本塔评论页面,确认?", function () { + window.location.href = "/score.php?name=" + core.firstData.name + "&num=10"; + }); + } +} + +actions.prototype._clickGameInfo_download = function () { + if (core.platform.isPC) + window.open(core.firstData.name + ".zip"); + else + window.location.href = core.firstData.name + ".zip"; +} + ////// 游戏信息界面时,放开某个键的操作 ////// actions.prototype._keyUpGameInfo = function (keycode) { if (keycode == 27 || keycode == 88) { diff --git a/libs/control.js b/libs/control.js index ad0ee9cd..35d52966 100644 --- a/libs/control.js +++ b/libs/control.js @@ -357,6 +357,24 @@ control.prototype.restart = function() { core.playBgm(main.startBgm); } +////// 询问是否需要重新开始 ////// +control.prototype.confirmRestart = function (fromSettings) { + core.status.event.selection = 1; + core.ui.drawConfirmBox("你确定要返回标题页面吗?", function () { + core.ui.closePanel(); + core.restart(); + }, function () { + if (fromSettings) { + core.status.event.selection = 3; + core.ui.drawSettings(); + } + else { + core.ui.closePanel(); + } + }); +} + + ////// 清除游戏状态和数据 ////// control.prototype.clearStatus = function() { // 停止各个Timeout和Interval diff --git a/project/functions.js b/project/functions.js index c8c7ce29..44e416cb 100644 --- a/project/functions.js +++ b/project/functions.js @@ -776,12 +776,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = core.getNextItem(); break; case 82: // R:回放录像 - if (core.hasFlag('debug')) { - core.drawText("\t[系统提示]调试模式下无法回放录像"); - } - else { - core.ui.drawReplay(); - } + core.actions._clickSyncSave_replay(); break; case 33: case 34: // PgUp/PgDn:浏览地图 core.ui.drawMaps(); @@ -796,19 +791,13 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = core.ui.drawHelp(); break; case 78: // N:重新开始 - core.status.event.selection=1; - core.ui.drawConfirmBox("你确定要返回标题页面吗?", function () { - core.ui.closePanel(); - core.restart(); - }, function () { - core.ui.closePanel(); - }); + core.confirmRestart(); break; case 79: // O:查看工程 - window.open(core.platform.isPC?"editor.html":"editor-mobile.html", "_blank"); + core.actions._clickGameInfo_openProject(); break; case 80: // P:游戏主页 - window.open("/score.php?name="+core.firstData.name+"&num=10", "_blank"); + core.actions._clickGameInfo_openComments(); break; case 49: // 快捷键1: 破 if (core.hasItem('pickaxe')) {