From 8148971db9771ee459c8953408d37d9ee7387bfc Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Fri, 25 May 2018 16:34:47 +0800 Subject: [PATCH 1/3] set block --- docs/api.md | 4 ++++ libs/core.js | 5 +++++ libs/events.js | 27 ++++++++------------------- libs/maps.js | 24 ++++++++++++++++++++++++ 4 files changed, 41 insertions(+), 19 deletions(-) diff --git a/docs/api.md b/docs/api.md index 92bc289b..fb1b8546 100644 --- a/docs/api.md +++ b/docs/api.md @@ -208,6 +208,10 @@ core.removeBlock(x, y, floorId) 否则将该点设置为禁用,以供以后可能的启用事件。 +core.setBlock(number, x, y, floorId) +改变图块。number为要改变到的图块数字,x和y为坐标,floorId为楼层ID,可忽略表示当前楼层。 + + core.useItem(itemId, callback) 尝试使用某个道具。itemId为道具ID,callback为成功或失败后的回调。 diff --git a/libs/core.js b/libs/core.js index 769249b6..55093bf7 100644 --- a/libs/core.js +++ b/libs/core.js @@ -687,6 +687,11 @@ core.prototype.removeBlockByIds = function (floorId, ids) { core.maps.removeBlockByIds(floorId, ids); } +////// 改变图块 ////// +core.prototype.setBlock = function (number, x, y, floorId) { + core.maps.setBlock(number, x, y, floorId); +} + ////// 添加一个全局动画 ////// core.prototype.addGlobalAnimate = function (block) { core.maps.addGlobalAnimate(block); diff --git a/libs/events.js b/libs/events.js index bd01339e..9a61fc10 100644 --- a/libs/events.js +++ b/libs/events.js @@ -396,24 +396,7 @@ events.prototype.doAction = function() { x=core.calValue(data.loc[0]); y=core.calValue(data.loc[1]); } - var floorId = data.floorId||core.status.floorId; - var originBlock=core.getBlock(x,y,floorId,false); - var block = core.maps.initBlock(x,y,data.number); - core.maps.addInfo(block); - core.maps.addEvent(block,x,y,core.floors[floorId].events[x+","+y]); - core.maps.addChangeFloor(block,x,y,core.floors[floorId].changeFloor[x+","+y]); - if (core.isset(block.event)) { - if (originBlock==null) { - core.status.maps[floorId].blocks.push(block); - } - else { - originBlock.block.id = data.number; - originBlock.block.event = block.event; - } - if (floorId==core.status.floorId) { - core.drawMap(floorId); - } - } + core.setBlock(data.number, x, y, data.floorId); this.doAction(); break; } @@ -872,10 +855,16 @@ events.prototype.openDoor = function (id, x, y, needKey, callback) { core.stopAutomaticRoute(); var speed=30; var doorId = id; - if (!(doorId.substring(doorId.length-4)=="Door")) { + if (doorId.length<4 || doorId.substring(doorId.length-4)!="Door") { doorId=doorId+"Door"; speed=70; } + // 不存在门 + if (!core.isset(core.material.icons.animates[doorId])) { + if (core.isset(callback)) callback(); + return; + } + var key = id.replace("Door", "Key"); if (needKey && (key=="specialKey" || core.isset(core.material.items[key]))) { var key = id.replace("Door", "Key"); diff --git a/libs/maps.js b/libs/maps.js index 2ab284db..0d03cef5 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -774,6 +774,30 @@ maps.prototype.removeBlockByIds = function (floorId, ids) { }); } +////// 改变图块 ////// +maps.prototype.setBlock = function (number, x, y, floorId) { + floorId = floorId || core.status.floorId; + if (!core.isset(number) || !core.isset(x) || !core.isset(y)) return; + + var originBlock=core.getBlock(x,y,floorId,false); + var block = core.maps.initBlock(x,y,number); + core.maps.addInfo(block); + core.maps.addEvent(block,x,y,core.floors[floorId].events[x+","+y]); + core.maps.addChangeFloor(block,x,y,core.floors[floorId].changeFloor[x+","+y]); + if (core.isset(block.event)) { + if (originBlock==null) { + core.status.maps[floorId].blocks.push(block); + } + else { + originBlock.block.id = data.number; + originBlock.block.event = block.event; + } + if (floorId==core.status.floorId) { + core.drawMap(floorId); + } + } +} + ////// 添加一个全局动画 ////// maps.prototype.addGlobalAnimate = function (b) { if (main.mode=='editor' && main.editor.disableGlobalAnimate) return; From c9d1c5482717bc24cdee03da8b938db5fe9d6475 Mon Sep 17 00:00:00 2001 From: oc Date: Fri, 25 May 2018 21:19:17 +0800 Subject: [PATCH 2/3] Update Docs --- docs/api.md | 7 +++---- libs/maps.js | 12 +++++++----- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/docs/api.md b/docs/api.md index fb1b8546..c0814730 100644 --- a/docs/api.md +++ b/docs/api.md @@ -141,9 +141,11 @@ core.js实际上是所有API的入口(路由),核心API的实现在其他 core.nextX() 获得勇士面向的下一个位置的x坐标 + core.nextY() 获得勇士面向的下一个位置的y坐标 + core.openDoor(id, x, y, needKey, callback) [异步] 尝试开门操作。id为目标点的ID,x和y为坐标,needKey表示是否需要使用钥匙,callback为开门完毕后的回调函数。 例如:core.openDoor('yellowDoor', 10, 3, false, function() {console.log("1")}) @@ -274,10 +276,6 @@ core.restart() [异步] 返回标题界面。 -core.updateFg() -更新全地图显伤。包括怪物显伤、临界显示和领域显伤等。 - - ========== core.actions.XXX 和游戏控制相关的函数 ========== actions.js主要用来进行用户交互行为的处理。 所有用户行为,比如按键、点击、滑动等等,都会被此文件接收并进行操作。 @@ -393,6 +391,7 @@ floorId为楼层ID,可忽略为当前楼层。 core.maps.canMoveDirectly(destX, destY) 判断当前能否瞬间移动到某个点。 +该函数如果返回0则不可瞬间移动,大于0则可以瞬间移动,且返回值是跨度(即少走的步数)。 core.maps.removeBlockById(index, floorId) diff --git a/libs/maps.js b/libs/maps.js index 0d03cef5..a0a00e78 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -255,16 +255,18 @@ maps.prototype.canMoveHero = function(x,y,direction,floorId) { ////// 能否瞬间移动 ////// maps.prototype.canMoveDirectly = function (destX,destY) { - if (!core.flags.enableMoveDirectly) return -1; + + // 不可瞬间移动请返回0 + if (!core.flags.enableMoveDirectly) return 0; // 中毒状态:不能 - if (core.hasFlag('poison')) return -1; + if (core.hasFlag('poison')) return 0; var fromX = core.getHeroLoc('x'), fromY = core.getHeroLoc('y'); - if (fromX==destX&&fromY==destY) return -1; + if (fromX==destX&&fromY==destY) return 0; if (core.getBlock(fromX,fromY)!=null||core.status.checkBlock.damage[13*fromX+fromY]>0) - return -1; + return 0; // BFS var visited=[], queue=[]; @@ -283,7 +285,7 @@ maps.prototype.canMoveDirectly = function (destX,destY) { queue.push(13*nx+ny); } } - return -1; + return 0; } maps.prototype.drawBlock = function (block, animate, dx, dy) { From e18cc0a9f8ef4edfca54e050562b6f1af9157ddb Mon Sep 17 00:00:00 2001 From: oc Date: Fri, 25 May 2018 23:00:23 +0800 Subject: [PATCH 3/3] Total Time --- libs/control.js | 4 ++++ libs/events.js | 1 + 2 files changed, 5 insertions(+) diff --git a/libs/control.js b/libs/control.js index e345f6c4..8253b5e7 100644 --- a/libs/control.js +++ b/libs/control.js @@ -63,6 +63,7 @@ control.prototype.setRequestAnimationFrame = function () { if (core.isPlaying() && core.isset(core.status) && core.isset(core.status.hero) && core.isset(core.status.hero.statistics)) { core.status.hero.statistics.totalTime += timestamp-(core.status.hero.statistics.start||timestamp); + core.status.hero.statistics.currTime += timestamp-(core.status.hero.statistics.start||timestamp); core.status.hero.statistics.start=timestamp; } @@ -266,6 +267,7 @@ control.prototype.resetStatus = function(hero, hard, floorId, route, maps) { if (!core.isset(core.status.hero.statistics)) core.status.hero.statistics = { 'totalTime': totalTime, + 'currTime': 0, 'hp': 0, 'battleDamage': 0, 'poisonDamage': 0, @@ -2317,6 +2319,8 @@ control.prototype.updateStatusBar = function () { var statusList = ['hpmax', 'hp', 'atk', 'def', 'mdef', 'money', 'experience']; statusList.forEach(function (item) { + if (core.isset(core.status.hero[item])) + core.status.hero[item] = Math.floor(core.status.hero[item]); core.statusBar[item].innerHTML = core.formatBigNumber(core.getStatus(item)); }); diff --git a/libs/events.js b/libs/events.js index 9a61fc10..78681b6f 100644 --- a/libs/events.js +++ b/libs/events.js @@ -187,6 +187,7 @@ events.prototype.gameOver = function (ending, fromReplay) { formData.append('experience', core.status.hero.experience); formData.append('steps', core.status.hero.steps); formData.append('seed', core.getFlag('seed')); + formData.append('totalTime', Math.floor(core.status.hero.statistics.totalTime)); formData.append('route', core.encodeRoute(core.status.route)); if (main.isCompetition)