From e52a8378e8b154ac62485940d10fe20d13b79b28 Mon Sep 17 00:00:00 2001 From: oc Date: Tue, 23 Apr 2019 01:12:43 +0800 Subject: [PATCH] replayRemain --- libs/actions.js | 45 +++++++++++++++++++++----------------- libs/control.js | 57 ++++++++++++++++++++++++++++++------------------- libs/ui.js | 6 +++--- 3 files changed, 63 insertions(+), 45 deletions(-) diff --git a/libs/actions.js b/libs/actions.js index 1596ba47..73f6ac04 100644 --- a/libs/actions.js +++ b/libs/actions.js @@ -245,6 +245,7 @@ actions.prototype._sys_keyDown_lockControl = function (keyCode) { case 'save': case 'load': case 'replayLoad': + case 'replayRemain': this._keyDownSL(keyCode); break; case 'shop': @@ -346,6 +347,7 @@ actions.prototype._sys_keyUp_lockControl = function (keyCode, altKey) { case 'save': case 'load': case 'replayLoad': + case 'replayRemain': this._keyUpSL(keyCode); break; case 'keyBoard': @@ -612,6 +614,7 @@ actions.prototype._sys_onclick_lockControl = function (x, y) { case 'save': case 'load': case 'replayLoad': + case 'replayRemain': this._clickSL(x, y); break; case 'confirmBox': @@ -756,7 +759,7 @@ actions.prototype._sys_longClick_lockControl = function (x, y) { } } // 长按SL快速翻页 - if (["save","load","replayLoad"].indexOf(core.status.event.id) >= 0) { + if (["save","load","replayLoad","replayRemain"].indexOf(core.status.event.id) >= 0) { if ([this.HSIZE-2, this.HSIZE-3, this.HSIZE+2, this.HSIZE+3].indexOf(x) >= 0 && y == this.LAST) { this._clickSL(x, y); return true; @@ -1657,6 +1660,7 @@ actions.prototype._clickSL = function (x, y) { if (core.events.recoverEvents(core.status.event.interval)) return; core.ui.closePanel(); + delete core.status.tempRoute; if (!core.isPlaying()) core.showStartAnimate(true); return; @@ -2031,12 +2035,10 @@ actions.prototype._clickSyncSave = function (x, y) { case 4: return this._clickSyncSave_replay(); case 5: - return this._clickSyncSave_download(); - case 6: core.status.event.selection = 0; core.ui.drawStorageRemove(); break; - case 7: + case 6: core.status.event.selection = 4; core.ui.drawSettings(); break; @@ -2065,19 +2067,6 @@ actions.prototype._clickSyncSave_replay = function () { } } -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) { @@ -2264,9 +2253,10 @@ actions.prototype._clickReplay = function (x, y) { switch (selection) { 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(); + case 2: return this._clickReplay_continueReplay(); + case 3: return core.chooseReplayFile(); + case 4: return this._clickReplay_download(); + case 5: return core.ui.closePanel(); } } } @@ -2285,6 +2275,21 @@ actions.prototype._clickReplay_fromLoad = function () { core.ui.drawSLPanel(10 * page + offset); } +actions.prototype._clickReplay_continueReplay = function () { + core.closePanel(); + core.drawText([ + "\t[接续播放录像]该功能允许你播放\r[yellow]两个存档之间的录像\r,常常用于\r[yellow]区域优化\r。\n" + + "例如,有若干个区,已经全部通关;之后重打一区并进行了优化,则可以对剩余区域直接播放录像而无需全部重打。", + "\t[步骤1]请选择一个存档。\n\r[yellow]该存档的坐标必须和当前勇士坐标完全相同。\r\n将尝试从此处开始回放。", + ], function () { + core.status.event.id = 'replayRemain'; + core.lockControl(); + 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({ diff --git a/libs/control.js b/libs/control.js index 7a549e65..c5f23449 100644 --- a/libs/control.js +++ b/libs/control.js @@ -1059,7 +1059,7 @@ control.prototype.startReplay = function (list) { core.status.replay.pausing=false; core.status.replay.speed=1.0; core.status.replay.toReplay = core.clone(list); - core.status.replay.totalList = core.clone(list); + core.status.replay.totalList = core.status.route.concat(list); core.status.replay.steps = 0; core.status.replay.save = []; core.updateStatusBar(); @@ -1512,8 +1512,9 @@ control.prototype.checkAutosave = function () { control.prototype.doSL = function (id, type) { switch (type) { case 'save': this._doSL_save(id); break; - case 'load': this._doSL_load(id); break; - case 'replayLoad': this._doSL_replayLoad(id); break; + case 'load': this._doSL_load(id, this._doSL_load_afterGet); break; + case 'replayLoad': this._doSL_load(id, this._doSL_replayLoad_afterGet); break; + case 'replayRemain': this._doSL_load(id, this._doSL_replayRemain_afterGet); break; } } @@ -1542,14 +1543,14 @@ control.prototype._doSL_save = function (id) { return; } -control.prototype._doSL_load = function (id) { +control.prototype._doSL_load = function (id, callback) { if (id == 'autoSave' && core.saves.autosave.data != null) { - this._doSL_load_afterGet(id, core.clone(core.saves.autosave.data)); + callback(id, core.clone(core.saves.autosave.data)) } else { core.getLocalForage(id=='autoSave'?id:"save"+id, null, function(data) { if (id == 'autoSave') core.saves.autosave.data = core.clone(data); - core.control._doSL_load_afterGet(id, data); + callback(id, data); }, function(err) { main.log(err); alert("无效的存档"); @@ -1579,22 +1580,6 @@ control.prototype._doSL_load_afterGet = function (id, data) { core.setLocalStorage('saveIndex', core.saves.saveIndex); } }); - -} - -control.prototype._doSL_replayLoad = function (id) { - if (id == 'autoSave' && core.saves.autosave.data != null) { - this._doSL_replayLoad_afterGet(core.clone(core.saves.autosave.data)); - } - else{ - core.getLocalForage(id=='autoSave'?id:"save"+id, null, function(data) { - if (id == 'autoSave') core.saves.autosave.data = core.clone(data); - core.control._doSL_replayLoad_afterGet(id, data); - }, function(err) { - main.log(err); - alert("无效的存档"); - }) - } } control.prototype._doSL_replayLoad_afterGet = function (id, data) { @@ -1613,6 +1598,34 @@ control.prototype._doSL_replayLoad_afterGet = function (id, data) { } +control.prototype._doSL_replayRemain_afterGet = function (id, data) { + if (!data) return core.drawTip("无效的存档"); + + var route = core.decodeRoute(data.route); + if (core.status.tempRoute) { + var remainRoute = core.subarray(route, core.status.tempRoute); + if (remainRoute == null) + return alert("无法接续播放录像!\n该存档必须是前一个选择的存档的后续内容。"); + delete core.status.tempRoute; + core.ui.closePanel(); + core.startReplay(remainRoute); + core.drawTip("接续播放录像"); + return; + } + else if (data.floorId != core.status.floorId || data.hero.loc.x != core.getHeroLoc('x') || data.hero.loc.y != core.getHeroLoc('y')) + return alert("楼层或坐标不一致!"); + + core.status.tempRoute = route; + core.ui.closePanel(); + core.drawText("\t[步骤2]请选择第二个存档。\n\r[yellow]该存档必须是前一个存档的后续。\r\n将尝试播放到此存档。", function () { + core.status.event.id = 'replayRemain'; + core.lockControl(); + var saveIndex = core.saves.saveIndex; + var page = parseInt((saveIndex - 1) / 5), offset = saveIndex - 5 * page; + core.ui.drawSLPanel(10 * page + offset); + }); +} + ////// 同步存档到服务器 ////// control.prototype.syncSave = function (type) { core.ui.drawWaiting("正在同步,请稍后..."); diff --git a/libs/ui.js b/libs/ui.js index 788d92b2..ec4652fc 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -1227,7 +1227,7 @@ ui.prototype.drawQuickShop = function () { ui.prototype.drawSyncSave = function () { core.status.event.id = 'syncSave'; this.drawChoices(null, [ - "同步存档到服务器", "从服务器加载存档", "存档至本地文件", "从本地文件读档", "回放当前录像", "下载当前录像", "清空本地存档", "返回主菜单" + "同步存档到服务器", "从服务器加载存档", "存档至本地文件", "从本地文件读档", "回放和下载录像", "清空本地存档", "返回主菜单" ]); } @@ -1259,7 +1259,7 @@ ui.prototype.drawReplay = function () { core.lockControl(); core.status.event.id = 'replay'; this.drawChoices(null, [ - "从头回放录像", "从存档开始回放", "选择录像文件", "下载当前录像", "返回游戏" + "从头回放录像", "从存档开始回放", "接续播放剩余录像", "选择录像文件", "下载当前录像", "返回游戏" ]); } @@ -2204,7 +2204,7 @@ ui.prototype._drawSLPanel_drawRecords = function (n) { var page = core.status.event.data.page; var offset = core.status.event.data.offset; var u = Math.floor(this.PIXEL/6), size = Math.floor(this.PIXEL/3-20); - var name=core.status.event.id=='save'?"存档":core.status.event.id=='load'?"读档":core.status.event.id=='replayLoad'?"回放":""; + var name=core.status.event.id=='save'?"存档":core.status.event.id=='load'?"读档":"回放"; for (var i = 0; i < (n||6); i++){ var data = core.status.event.ui[i];