From dd12ebb04da36d6a04b2b6f5c49d9cbfc7357218 Mon Sep 17 00:00:00 2001 From: oc Date: Fri, 15 Mar 2019 23:19:33 +0800 Subject: [PATCH] init, start & gameover --- _docs/personalization.md | 2 +- libs/control.js | 2 +- libs/events.js | 341 +++++++++++++++++---------------------- libs/ui.js | 4 +- project/functions.js | 2 +- 5 files changed, 151 insertions(+), 200 deletions(-) diff --git a/_docs/personalization.md b/_docs/personalization.md index 27276ef1..4831d9b5 100644 --- a/_docs/personalization.md +++ b/_docs/personalization.md @@ -974,7 +974,7 @@ this.getAchievements = function () { - **`flag:textAttribute`**, **`flag:globalAttribute`**, **`flag:globalFlags`**: 当前的剧情文本属性,当前的全局属性,当前的全局开关。 - **`flag:cannotMoveDirectly`**, **`flag:clickMove`**: 当前是否不允许瞬间移动,当前用户是否开启了单击瞬移。 - **`flag:hideStatusBar`**, **`flag:showToolbox`**: 是否隐藏状态栏,是否显示工具栏。 -- **`flag:debug`**, **`flag:consoleOpened`**: 当前是否开启了调试模式,是否开启了控制台。 +- **`flag:debug`**, **`flag:__consoleOpened__`**: 当前是否开启了调试模式,是否开启了控制台。 - **`flag:__seed__`**, **`flag:__rand__`**: 伪随机数生成种子和当前的状态 ========================================================================================== diff --git a/libs/control.js b/libs/control.js index f006e9ef..34e65e69 100644 --- a/libs/control.js +++ b/libs/control.js @@ -297,7 +297,7 @@ control.prototype.setRequestAnimationFrame = function () { // 检查控制台状态 if (core.utils.consoleOpened()) { - core.setFlag('consoleOpened', true); + core.setFlag('__consoleOpened__', true); } window.requestAnimationFrame(draw); diff --git a/libs/events.js b/libs/events.js index 31da99ba..33f1a0ad 100644 --- a/libs/events.js +++ b/libs/events.js @@ -13,103 +13,84 @@ events.prototype._init = function () { } // ------ 初始化,开始和结束 ------ // -/// + +/// 初始化游戏 events.prototype.initGame = function () { return this.eventdata.initGame(); } ////// 游戏开始事件 ////// events.prototype.startGame = function (hard, seed, route, callback) { - main.dom.levelChooseButtons.style.display='none'; main.dom.startButtonGroup.style.display='none'; - var start = function () { - console.log('开始游戏'); - core.resetStatus(core.firstData.hero, hard, null, null, core.initStatus.maps); - var nowLoc = core.clone(core.getHeroLoc()); - core.setHeroLoc('x', -1); - core.setHeroLoc('y', -1); - - if (core.isset(seed)) { - core.setFlag('__seed__', seed); - core.setFlag('__rand__', seed); - } - else core.utils.__init_seed(); - - core.clearMap('all'); - core.deleteAllCanvas(); - core.clearStatusBar(); - - var post_start = function () { - core.ui.closePanel(); - - core.control.triggerStatusBar('show'); - core.dom.musicBtn.style.display = 'none'; - - core.changeFloor(core.firstData.floorId, null, nowLoc, null, function() { - if (core.isset(callback)) callback(); - }); - - setTimeout(function () { - // Upload - var formData = new FormData(); - formData.append('type', 'people'); - formData.append('name', core.firstData.name); - formData.append('version', core.firstData.version); - formData.append('platform', core.platform.isPC?"PC":core.platform.isAndroid?"Android":core.platform.isIOS?"iOS":""); - formData.append('hard', core.encodeBase64(core.status.hard)); - formData.append('hardCode', core.getFlag('hard', 0)); - formData.append('base64', 1); - - core.utils.http("POST", "/games/upload.php", formData); - }) - } - - var real_start = function () { - core.insertAction(core.clone(core.firstData.startText), null, null, function() { - post_start(); - }); - } - - if (core.flags.startUsingCanvas) { - core.control.triggerStatusBar('hide'); - core.dom.musicBtn.style.display = 'block'; - - core.insertAction(core.clone(core.firstData.startCanvas), null, null, function() { - real_start(); - }); - } - else { - core.events.setInitData(hard); - real_start(); - } - - if (core.isset(route)) { - core.startReplay(route); - } - - } - if (main.mode!='play') return; - if (core.flags.startUsingCanvas) { + // 无动画的开始游戏 + if (core.flags.startUsingCanvas || core.isset(route)) { core.dom.startPanel.style.display = 'none'; - start(); - return; - } - - if (core.isset(route)) { - core.dom.startPanel.style.display = 'none'; - start(); + this._startGame_start(hard, seed, route, callback); } else { - core.hideStartAnimate(function() { - start(); - }) + core.hideStartAnimate(function () { + core.events._startGame_start(hard, seed, route, callback); + }); } } +events.prototype._startGame_start = function (hard, seed, route, callback) { + console.log('开始游戏'); + core.resetStatus(core.firstData.hero, hard, null, null, core.initStatus.maps); + var nowLoc = core.clone(core.getHeroLoc()); + core.setHeroLoc('x', -1); + core.setHeroLoc('y', -1); + + if (core.isset(seed)) { + core.setFlag('__seed__', seed); + core.setFlag('__rand__', seed); + } + else core.utils.__init_seed(); + + core.clearMap('all'); + core.deleteAllCanvas(); + core.clearStatusBar(); + + var todo = []; + if (core.flags.startUsingCanvas) { + core.control.triggerStatusBar('hide'); + core.dom.musicBtn.style.display = 'block'; + core.push(todo, core.firstData.startCanvas); + } + core.push(todo, core.firstData.startText); + this.insertAction(todo, null, null, function () { + core.events._startGame_afterStart(nowLoc, callback); + }); + + if (core.isset(route)) core.startReplay(route); +} + +events.prototype._startGame_afterStart = function (nowLoc, callback) { + core.ui.closePanel(); + core.control.triggerStatusBar('show'); + core.dom.musicBtn.style.display = 'none'; + core.changeFloor(core.firstData.floorId, null, nowLoc, null, callback); + this._startGame_upload(); +} + +events.prototype._startGame_upload = function () { + // Upload + var formData = new FormData(); + formData.append('type', 'people'); + formData.append('name', core.firstData.name); + formData.append('version', core.firstData.version); + formData.append('platform', core.platform.isPC?"PC":core.platform.isAndroid?"Android":core.platform.isIOS?"iOS":""); + formData.append('hard', core.encodeBase64(core.status.hard)); + formData.append('hardCode', core.getFlag('hard', 0)); + formData.append('base64', 1); + + core.utils.http("POST", "/games/upload.php", formData); +} + ////// 不同难度分别设置初始属性 ////// events.prototype.setInitData = function (hard) { return this.eventdata.setInitData(hard); @@ -129,7 +110,6 @@ events.prototype.lose = function (reason) { ////// 游戏结束 ////// events.prototype.gameOver = function (ending, fromReplay, norank) { - core.clearMap('all'); core.deleteAllCanvas(); core.dom.gif2.innerHTML = ""; @@ -141,136 +121,107 @@ events.prototype.gameOver = function (ending, fromReplay, norank) { ending += "[比赛]"; } - var askRate = function () { - if (!core.isset(ending)) { - core.restart(); - return; - } + var reason = null; + if (fromReplay) reason = "录像回放完毕!"; + else if (core.hasFlag("debug")) reason = "\t[系统提示]调试模式下无法上传成绩"; + else if (core.hasFlag("__consoleOpened__")) reason = "\t[系统提示]本存档开启过控制台,无法上传成绩"; - core.ui.closePanel(); - core.ui.drawConfirmBox("恭喜通关本塔,你想进行评分吗?", function () { - if (core.platform.isPC) { - window.open("/score.php?name="+core.firstData.name+"&num=10", "_blank"); - core.restart(); - } - else { - window.location.href = "/score.php?name="+core.firstData.name+"&num=10"; - } - }, function () { - core.restart(); - }); + if (reason != null) + core.drawText(reason, core.restart); + else + this._gameOver_confirmUpload(ending, norank); +} +events.prototype._gameOver_confirmUpload = function (ending, norank) { + core.ui.closePanel(); + + if (!core.isset(ending)) { + this._gameOver_confirmDownload(ending); + return; } + core.ui.drawConfirmBox("你想记录你的ID和成绩吗?", function () { + var username = main.isCompetition?"":prompt("请输入你的ID:", core.getCookie('id')||""); + core.events._gameOver_doUpload(username, ending, norank); + }, function () { + if (main.isCompetition) + core.events._gameOver_confirmDownload(ending); + else + core.events._gameOver_doUpload(null, ending, norank); + }) +} - // 下载录像 - var confirmDownload = function () { +events.prototype._gameOver_doUpload = function (username, ending, norank) { + var hp = core.status.hero.hp; + if (!core.isset(username)) hp = 1; + core.ui.closePanel(); + // upload + var formData = new FormData(); + formData.append('type', 'score'); + formData.append('name', core.firstData.name); + formData.append('version', core.firstData.version); + formData.append('platform', core.platform.isPC?"PC":core.platform.isAndroid?"Android":core.platform.isIOS?"iOS":""); + formData.append('hard', core.encodeBase64(core.status.hard)); + formData.append('username', core.encodeBase64(username||"")); + formData.append('ending', core.encodeBase64(ending)); + formData.append('lv', core.status.hero.lv); + formData.append('hp', Math.min(hp, Math.pow(2, 63))); + formData.append('atk', core.status.hero.atk); + formData.append('def', core.status.hero.def); + formData.append('mdef', core.status.hero.mdef); + formData.append('money', core.status.hero.money); + formData.append('experience', core.status.hero.experience); + formData.append('steps', core.status.hero.steps); + formData.append('norank', norank||0); + formData.append('seed', core.getFlag('__seed__')); + formData.append('totalTime', Math.floor(core.status.hero.statistics.totalTime/1000)); + formData.append('route', core.encodeRoute(core.status.route)); + formData.append('base64', 1); - core.ui.closePanel(); - core.ui.drawConfirmBox("你想下载录像吗?", function () { - var obj = { - 'name': core.firstData.name, - 'version': core.firstData.version, - 'hard': core.status.hard, - 'seed': core.getFlag('__seed__'), - 'route': core.encodeRoute(core.status.route) - } - core.download(core.firstData.name+"_"+core.formatDate2(new Date())+".h5route", JSON.stringify(obj)); - // core.restart(); - askRate(); - }, function () { - // core.restart(); - askRate(); - }) + if (main.isCompetition) + core.http("POST", "/games/competition/upload.php", formData); + else + core.http("POST", "/games/upload.php", formData); - } + setTimeout(function() { + core.events._gameOver_confirmDownload(ending); + }, 200); +} - // 上传成绩 - var confirmUpload = function () { - - core.ui.closePanel(); - - if (!core.isset(ending)) { - confirmDownload(); - return; +events.prototype._gameOver_confirmDownload = function (ending) { + core.ui.closePanel(); + core.ui.drawConfirmBox("你想下载录像吗?", function () { + var obj = { + 'name': core.firstData.name, + 'version': core.firstData.version, + 'hard': core.status.hard, + 'seed': core.getFlag('__seed__'), + 'route': core.encodeRoute(core.status.route) } + core.download(core.firstData.name+"_"+core.formatDate2(new Date())+".h5route", JSON.stringify(obj)); + core.events._gameOver_askRate(ending); + }, function () { + core.events._gameOver_askRate(ending); + }); +} - var doUpload = function(username) { - var hp = core.status.hero.hp; - if (username==undefined) hp = 1; - core.ui.closePanel(); - // upload - var formData = new FormData(); - formData.append('type', 'score'); - formData.append('name', core.firstData.name); - formData.append('version', core.firstData.version); - formData.append('platform', core.platform.isPC?"PC":core.platform.isAndroid?"Android":core.platform.isIOS?"iOS":""); - formData.append('hard', core.encodeBase64(core.status.hard)); - formData.append('username', core.encodeBase64(username||"")); - formData.append('ending', core.encodeBase64(ending)); - formData.append('lv', core.status.hero.lv); - formData.append('hp', Math.min(hp, Math.pow(2, 63))); - formData.append('atk', core.status.hero.atk); - formData.append('def', core.status.hero.def); - formData.append('mdef', core.status.hero.mdef); - formData.append('money', core.status.hero.money); - formData.append('experience', core.status.hero.experience); - formData.append('steps', core.status.hero.steps); - formData.append('norank', norank||0); - formData.append('seed', core.getFlag('__seed__')); - formData.append('totalTime', Math.floor(core.status.hero.statistics.totalTime/1000)); - formData.append('route', core.encodeRoute(core.status.route)); - formData.append('base64', 1); - - if (main.isCompetition) - core.http("POST", "/games/competition/upload.php", formData); - else - core.http("POST", "/games/upload.php", formData); - - setTimeout(function() { - confirmDownload(); - }, 150); - } - - core.ui.drawConfirmBox("你想记录你的ID和成绩吗?", function () { - if (main.isCompetition) { - doUpload(""); - } - else { - doUpload(prompt("请输入你的ID:", core.getCookie('id')||"")); - } - }, function () { - if (main.isCompetition) - confirmDownload(); - else - doUpload(undefined); - }) - +events.prototype._gameOver_askRate = function (ending) { + if (!core.isset(ending)) { + core.restart(); return; } - if (fromReplay) { - core.drawText("录像回放完毕!", function () { + core.ui.closePanel(); + core.ui.drawConfirmBox("恭喜通关本塔,你想进行评分吗?", function () { + if (core.platform.isPC) { + window.open("/score.php?name="+core.firstData.name+"&num=10", "_blank"); core.restart(); - }); - } - else { - - if (core.hasFlag('debug')) { - core.drawText("\t[系统提示]调试模式下无法上传成绩", function () { - core.restart(); - }) - } - else if (core.hasFlag('consoleOpened')) { - core.drawText("\t[系统提示]本存档开启过控制台,无法上传成绩", function () { - core.restart(); - }) } else { - confirmUpload(); + window.location.href = "/score.php?name="+core.firstData.name+"&num=10"; } - - } - + }, function () { + core.restart(); + }); } // ------ 系统事件的处理 ------ // diff --git a/libs/ui.js b/libs/ui.js index c242e448..c00865ab 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -2100,7 +2100,7 @@ ui.prototype.drawSLPanel = function(index, refresh) { var v2 = "/"+core.formatBigNumber(data.hero.mdef,true); if (v.length+v2.length<=21) v+=v2; core.fillText('ui', v, (2*i+1)*u, 60+size, '#FFD700', '10px '+globalFont); - core.fillText('ui', core.formatDate(new Date(data.time)), (2*i+1)*u, 73+size, data.hero.flags.consoleOpened?'#FF6A6A':'#FFFFFF'); + core.fillText('ui', core.formatDate(new Date(data.time)), (2*i+1)*u, 73+size, data.hero.flags.__consoleOpened__?'#FF6A6A':'#FFFFFF'); } else { core.fillRect('ui', (2*i+1)*u-size/2, 45, size, size, '#333333', 2); @@ -2120,7 +2120,7 @@ ui.prototype.drawSLPanel = function(index, refresh) { var v2 = "/"+core.formatBigNumber(data.hero.mdef,true); if (v.length+v2.length<=21) v+=v2; core.fillText('ui', v, (2*i-5)*u, 248+size, '#FFD700', '10px '+globalFont); - core.fillText('ui', core.formatDate(new Date(data.time)), (2*i-5)*u, 261+size, data.hero.flags.consoleOpened?'#FF6A6A':'#FFFFFF', '10px '+globalFont); + core.fillText('ui', core.formatDate(new Date(data.time)), (2*i-5)*u, 261+size, data.hero.flags.__consoleOpened__?'#FF6A6A':'#FFFFFF', '10px '+globalFont); } else { core.fillRect('ui', (2*i-5)*u-size/2, 233, size, size, '#333333', 2); diff --git a/project/functions.js b/project/functions.js index 0b5234c1..dead2159 100644 --- a/project/functions.js +++ b/project/functions.js @@ -62,7 +62,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = // 游戏获胜事件 core.ui.closePanel(); var replaying = core.isReplaying(); - core.stopReplay(); + if (replaying) core.stopReplay(); core.waitHeroToStop(function() { core.clearMap('all'); // 清空全地图 core.deleteAllCanvas(); // 删除所有创建的画布