From 75e5c8538ec2bed7e6da57824566ddeebddd4986 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Wed, 25 Apr 2018 21:16:24 +0800 Subject: [PATCH] replay from save --- libs/actions.js | 95 ++++++++++++++++++++++++++++++++++++++++--------- libs/control.js | 24 +++++++++++++ libs/core.js | 5 +++ libs/ui.js | 18 +++++++--- libs/utils.js | 11 ++++++ 更新说明.txt | 6 ++-- 6 files changed, 136 insertions(+), 23 deletions(-) diff --git a/libs/actions.js b/libs/actions.js index fd89396e..9b35ece8 100644 --- a/libs/actions.js +++ b/libs/actions.js @@ -106,7 +106,7 @@ actions.prototype.keyDown = function(keyCode) { this.keyDownToolbox(keyCode); return; } - if (core.status.event.id=='save' || core.status.event.id=='load') { + if (core.status.event.id=='save' || core.status.event.id=='load' || core.status.event.id=='replayLoad') { this.keyDownSL(keyCode); return; } @@ -138,6 +138,9 @@ actions.prototype.keyDown = function(keyCode) { this.keyDownCursor(keyCode); return; } + if (core.status.event.id=='replay') { + this.keyDownReplay(keyCode); + } return; } if(!core.status.played) { @@ -237,7 +240,7 @@ actions.prototype.keyUp = function(keyCode, fromReplay) { this.keyUpToolbox(keyCode); return; } - if (core.status.event.id=='save' || core.status.event.id=='load') { + if (core.status.event.id=='save' || core.status.event.id=='load' || core.status.event.id=='replayLoad') { this.keyUpSL(keyCode); return; } @@ -269,6 +272,10 @@ actions.prototype.keyUp = function(keyCode, fromReplay) { this.keyUpCursor(keyCode); return; } + if (core.status.event.id=='replay') { + this.keyUpReplay(keyCode); + return; + } return; } @@ -325,19 +332,8 @@ actions.prototype.keyUp = function(keyCode, fromReplay) { core.ui.drawHelp(); break; case 82: // R - if (core.status.heroStop) { - core.ui.drawConfirmBox("确定要回放录像吗?", function () { - core.ui.closePanel(); - var hard=core.status.hard, route=core.clone(core.status.route); - core.resetStatus(core.firstData.hero, hard, core.firstData.floorId, null, core.initStatus.maps); - core.events.setInitData(hard); - core.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function() { - core.startReplay(route); - }, true); - }, function () { - core.ui.closePanel(); - }); - } + if (core.status.heroStop) + core.ui.drawReplay(); break; case 33: case 34: // PAGEUP/PAGEDOWN if (core.status.heroStop) { @@ -606,7 +602,7 @@ actions.prototype.onclick = function (x, y, stepPostfix) { } // 存读档 - if (core.status.event.id == 'save' || core.status.event.id == 'load') { + if (core.status.event.id == 'save' || core.status.event.id == 'load' || core.status.event.id=='replayLoad') { this.clickSL(x,y); return; } @@ -664,6 +660,11 @@ actions.prototype.onclick = function (x, y, stepPostfix) { return; } + if (core.status.event.id == 'replay') { + this.clickReplay(x,y); + return; + } + } ////// 滑动鼠标滚轮时的操作 ////// @@ -1902,6 +1903,68 @@ actions.prototype.keyUpStorageRemove = function (keycode) { } } +////// 回放选择界面时的点击操作 ////// +actions.prototype.clickReplay = function (x, y) { + if (x<5 || x>7) return; + var choices = core.status.event.ui.choices; + + var topIndex = 6 - parseInt((choices.length - 1) / 2); + + if (y>=topIndex && y=1 && x<=11) { diff --git a/libs/control.js b/libs/control.js index 752fb5b2..6e08e974 100644 --- a/libs/control.js +++ b/libs/control.js @@ -1815,6 +1815,30 @@ control.prototype.doSL = function (id, type) { }); return; } + else if (type == 'replayLoad') { + var data = core.getLocalStorage(id=='autoSave'?id:"save"+id, null); + if (!core.isset(data)) { + core.drawTip("无效的存档"); + return; + } + if (data.version != core.firstData.version) { + core.drawTip("存档版本不匹配"); + return; + } + if (data.hard != core.status.hard) { + core.drawTip("游戏难度不匹配!"); + return; + } + var route = core.subarray(core.status.route, core.decodeRoute(data.route)); + if (!core.isset(route)) { + core.drawTip("无法从此存档回放录像"); + return; + } + core.loadData(data, function () { + core.startReplay(route); + core.drawTip("回退到存档节点"); + }); + } } ////// 同步存档到服务器 ////// diff --git a/libs/core.js b/libs/core.js index b78e1087..ca890c7b 100644 --- a/libs/core.js +++ b/libs/core.js @@ -1067,6 +1067,11 @@ core.prototype.isset = function (val) { return core.utils.isset(val); } +////// 获得子数组 ////// +core.prototype.subarray = function (a, b) { + return core.utils.subarray(a, b); +} + ////// 读取一个本地文件内容 ////// core.prototype.readFile = function (success, error, readType) { core.utils.readFile(success, error, readType); diff --git a/libs/ui.js b/libs/ui.js index 4da0595c..3ed574e9 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -1132,6 +1132,14 @@ ui.prototype.drawStorageRemove = function () { ]); } +ui.prototype.drawReplay = function () { + core.lockControl(); + core.status.event.id = 'replay'; + this.drawChoices(null, [ + "从头回放录像", "从存档开始回放", "返回游戏" + ]); +} + ////// 绘制分页 ////// ui.prototype.drawPagination = function (page, totalPage) { @@ -1577,7 +1585,7 @@ ui.prototype.drawSLPanel = function(index) { var strokeColor = '#FFD700'; if (core.status.event.selection) strokeColor = '#FF6A6A'; - var name=core.status.event.id=='save'?"存档":"读档"; + var name=core.status.event.id=='save'?"存档":core.status.event.id=='load'?"读档":core.status.event.id=='replayLoad'?"回放":""; for (var i=0;i<6;i++) { var id=5*page+i; var data=core.getLocalStorage(i==0?"autoSave":"save"+id, null); @@ -1608,9 +1616,11 @@ ui.prototype.drawSLPanel = function(index) { } this.drawPagination(page+1, 30); - if (core.status.event.selection) - core.setFillStyle('ui', '#FF6A6A'); - core.fillText('ui', '删除模式', 48, 403); + if (core.status.event.id == 'save' || core.status.event.id=='load') { + if (core.status.event.selection) + core.setFillStyle('ui', '#FF6A6A'); + core.fillText('ui', '删除模式', 48, 403); + } } diff --git a/libs/utils.js b/libs/utils.js index bfa4cae6..9d11609b 100644 --- a/libs/utils.js +++ b/libs/utils.js @@ -300,6 +300,17 @@ utils.prototype.isset = function (val) { return true } +////// 获得子数组 ////// +utils.prototype.subarray = function (a, b) { + if (!core.isset(a) || !core.isset(b) || !(a instanceof Array) || !(b instanceof Array) || a.length0) { + if (na.shift() != nb.shift()) return null; + } + return na; +} + ////// 读取一个本地文件内容 ////// utils.prototype.readFile = function (success, error, readType) { diff --git a/更新说明.txt b/更新说明.txt index f9f338f8..9143a14a 100644 --- a/更新说明.txt +++ b/更新说明.txt @@ -2,13 +2,13 @@ 改变勇士行走图 √ 楼传器落点设置 √ -录像回放从任意存档点开始 +录像回放从任意存档点开始 √ 录像过程中允许存档 血网显伤 √ 重置当前楼层地图core.resetMap() √ 部分楼层不允许浏览地图 √ -其他细节优化 - +其他细节优化 √ +r ----------------------------------------------------------------------- HTML5魔塔样板V2.1