From 8919c05cfff0a87cc89b9eecbfbd3712d4b812d9 Mon Sep 17 00:00:00 2001 From: ShakeFlower Date: Sat, 24 May 2025 16:58:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=87=AA=E5=AE=9A=E4=B9=89=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/CodeMirror/defs.js | 8 +- index.html | 11 +- libs/control.js | 247 +++++++++++++++--------------------- libs/core.js | 3 +- main.js | 219 +++++++++++++++----------------- project/functions.js | 5 +- project/materials/icons.png | Bin 8334 -> 9060 bytes project/plugins.js | 64 ++++++++++ runtime.d.ts | 10 +- 9 files changed, 298 insertions(+), 269 deletions(-) diff --git a/_server/CodeMirror/defs.js b/_server/CodeMirror/defs.js index 0d0d247d..b618fe4e 100644 --- a/_server/CodeMirror/defs.js +++ b/_server/CodeMirror/defs.js @@ -1852,8 +1852,12 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [ "!doc": "当前是否显示状态栏" }, "toolbarBtn": { - "!type": "bool", - "!doc": "当前工具栏是否是1-8的按钮" + "!type": "string", + "!doc": "当前工具栏的按钮种类" + }, + "toolsCount": { + "!type": "number", + "!doc": "当前工具栏的按钮数量" }, }, "bigmap": { diff --git a/index.html b/index.html index a233f02a..03527373 100644 --- a/index.html +++ b/index.html @@ -154,7 +154,7 @@ - + @@ -165,8 +165,15 @@ + + + + + + + - +

diff --git a/libs/control.js b/libs/control.js index a1b91055..97bc0fa6 100644 --- a/libs/control.js +++ b/libs/control.js @@ -1471,6 +1471,7 @@ control.prototype.startReplay = function (list) { core.updateStatusBar(false, true); core.drawTip("开始播放"); this.replay(); + core.setToolbarButton("replay"); } ////// 更改播放状态 ////// @@ -1514,32 +1515,6 @@ control.prototype.stepReplay = function () { core.replay(true); } -////// 拦截录像,在运行到指定步数时暂停 ////// -control.prototype.interceptReplay = function () { - if (!core.isPlaying() || !core.isReplaying()) return; - if (!core.status.replay.pausing) { - core.playSound('操作失败'); - return core.drawTip("请先暂停录像"); - } - if (core.isMoving() || core.status.replay.animate || core.status.event.id) { - core.playSound('操作失败'); - return core.drawTip("请等待当前事件的处理结束"); - } - core.myprompt("请输入一个自然数,这将设置一个临时拦截点,录像将在运行到该步数时自动暂停。设为0将取消该拦截。", null, function (value) { - value = parseInt(value); - if (Number.isNaN(value) || value < 0) { - core.drawFailTip('错误:不合法的输入!'); - return; - } - else if (value === 0) { - core.setFlag('replayValve', null); - } - else { - core.setFlag('replayValve', value); - } - }, () => { }); -} - ////// 加速播放 ////// control.prototype.speedUpReplay = function () { if (!core.isPlaying() || !core.isReplaying()) return; @@ -1585,10 +1560,10 @@ control.prototype.stopReplay = function (force) { core.status.replay.speed = 1.0; core.status.replay.steps = 0; core.status.replay.save = []; - core.setFlag('replayValve', null); core.deleteCanvas('replay'); core.updateStatusBar(false, true); core.drawTip("停止播放并恢复游戏"); + core.setToolbarButton('normal'); } ////// 回退 ////// @@ -1741,11 +1716,6 @@ control.prototype.replay = function (force) { || core.status.replay.animate || core.status.event.id || core.status.replay.failed) return; if (core.status.replay.pausing && !force) return; - const valve = core.getFlag('replayValve', -1); - if (!main.replayChecking && core.status.route.length === valve) { - core.pauseReplay(); // 非线上录像验证时,截停录像。 - core.drawFailTip('录像已运行到指定的暂停点第' + valve + '步,自动暂停。'); - } this._replay_drawProgress(); if (core.status.replay.toReplay.length == 0) return this._replay_finished(); @@ -3244,45 +3214,17 @@ control.prototype.updateStatusBar_update = function () { core.control.noAutoEvents = true; } +/** 切换replay/pause 并刷新工具栏图标的完成度 */ control.prototype._updateStatusBar_setToolboxIcon = function () { if (core.isReplaying()) { - core.statusBar.image.book.src = core.status.replay.pausing ? core.statusBar.icons.play.src : core.statusBar.icons.pause.src; - core.statusBar.image.book.style.opacity = 1; - core.statusBar.image.fly.src = core.statusBar.icons.stop.src; - core.statusBar.image.fly.style.opacity = 1; - core.statusBar.image.toolbox.src = core.statusBar.icons.rewind.src; - core.statusBar.image.keyboard.src = core.statusBar.icons.book.src; - core.statusBar.image.shop.src = core.statusBar.icons.floor.src; - core.statusBar.image.save.src = core.statusBar.icons.speedDown.src; - core.statusBar.image.save.style.opacity = 1; - core.statusBar.image.load.src = core.statusBar.icons.speedUp.src; - core.statusBar.image.settings.src = core.statusBar.icons.save.src; - core.statusBar.image.rollback.src = core.statusBar.icons.single.src; - core.statusBar.image.undoRollback.src = core.statusBar.icons.valve.src; - } - else { - core.statusBar.image.book.src = core.statusBar.icons.book.src; - core.statusBar.image.book.style.opacity = core.hasItem('book') ? 1 : 0.3; - if (!core.flags.equipboxButton) { - core.statusBar.image.fly.src = core.statusBar.icons.fly.src; - core.statusBar.image.fly.style.opacity = core.hasItem('fly') ? 1 : 0.3; - } - else { - core.statusBar.image.fly.src = core.statusBar.icons.equipbox.src; - core.statusBar.image.fly.style.opacity = 1; - } - core.statusBar.image.undoRollback.style.opacity = (core.saves.autosave.data != null - && core.saves.autosave.now < core.saves.autosave.data.length) ? 1 : 0.3; - core.statusBar.image.toolbox.src = core.statusBar.icons.toolbox.src; - core.statusBar.image.keyboard.src = core.statusBar.icons.keyboard.src; - core.statusBar.image.shop.src = core.statusBar.icons.shop.src; - core.statusBar.image.save.src = core.statusBar.icons.save.src; - core.statusBar.image.save.style.opacity = core.hasFlag('__forbidSave__') ? 0.3 : 1; - core.statusBar.image.load.src = core.statusBar.icons.load.src; - core.statusBar.image.settings.src = core.statusBar.icons.settings.src; - core.statusBar.image.rollback.src = core.statusBar.icons.rollback.src; - core.statusBar.image.undoRollback.src = core.statusBar.icons.undoRollback.src; + main.statusBar.image.play.src = core.status.replay.pausing ? core.statusBar.icons.play.src : core.statusBar.icons.pause.src; } + core.statusBar.image.book.style.opacity = core.hasItem('book') ? 1 : 0.3; + core.statusBar.image.fly.style.opacity = core.hasItem('fly') ? 1 : 0.3; + core.statusBar.image.undoRollback.style.opacity = + (core.saves.autosave.data != null && core.saves.autosave.now < core.saves.autosave.data.length) ? 1 : 0.3; + core.statusBar.image.save.style.opacity = core.hasFlag('__forbidSave__') ? 0.3 : 1; + } control.prototype.showStatusBar = function () { @@ -3294,7 +3236,8 @@ control.prototype.showStatusBar = function () { // 显示 for (var i = 0; i < statusItems.length; ++i) statusItems[i].style.opacity = 1; - this.setToolbarButton(false); + core.setToolbarButton(core.domStyle.toolbarBtn); + // this.setToolbarButton(false); core.dom.tools.hard.style.display = 'block'; core.dom.toolBar.style.display = 'block'; } @@ -3314,13 +3257,14 @@ control.prototype.hideStatusBar = function (showToolbox) { // 隐藏 for (var i = 0; i < statusItems.length; ++i) statusItems[i].style.opacity = 0; - if ((!core.domStyle.isVertical && !core.flags.extendToolbar) || !showToolbox) { - for (var i = 0; i < toolItems.length; ++i) - toolItems[i].style.display = 'none'; - } - if (!core.domStyle.isVertical && !core.flags.extendToolbar) { - core.dom.toolBar.style.display = 'none'; - } + if (!showToolbox) core.setToolbarButton('hide'); + // if ((!core.domStyle.isVertical && !core.flags.extendToolbar) || !showToolbox) { + // for (var i = 0; i < toolItems.length; ++i) + // toolItems[i].style.display = 'none'; + // } + // if (!core.domStyle.isVertical && !core.flags.extendToolbar) { + // core.dom.toolBar.style.display = 'none'; + // } } ////// 更新状态栏的勇士图标 ////// @@ -3345,62 +3289,62 @@ control.prototype.updateHeroIcon = function (name) { } ////// 改变工具栏为按钮1-8 ////// -control.prototype.setToolbarButton = function (useButton) { - if (!core.domStyle.showStatusBar) { - // 隐藏状态栏时检查竖屏 - if (!core.domStyle.isVertical && !core.flags.extendToolbar) { - for (var i = 0; i < core.dom.tools.length; ++i) - core.dom.tools[i].style.display = 'none'; - return; - } - if (!core.hasFlag('showToolbox')) return; - else core.dom.tools.hard.style.display = 'block'; - } +// control.prototype.setToolbarButton = function (useButton) { +// if (!core.domStyle.showStatusBar) { +// // 隐藏状态栏时检查竖屏 +// if (!core.domStyle.isVertical && !core.flags.extendToolbar) { +// for (var i = 0; i < core.dom.tools.length; ++i) +// core.dom.tools[i].style.display = 'none'; +// return; +// } +// if (!core.hasFlag('showToolbox')) return; +// else core.dom.tools.hard.style.display = 'block'; +// } - if (useButton == null) useButton = core.domStyle.toolbarBtn; - if ((!core.domStyle.isVertical && !core.flags.extendToolbar) || core.isReplaying()) useButton = false; - core.domStyle.toolbarBtn = useButton; +// if (useButton == null) useButton = core.domStyle.toolbarBtn; +// if ((!core.domStyle.isVertical && !core.flags.extendToolbar) || core.isReplaying()) useButton = false; +// core.domStyle.toolbarBtn = useButton; - if (useButton) { - ["book", "fly", "toolbox", "keyboard", "shop", "save", "load", "settings"].forEach(function (t) { - core.statusBar.image[t].style.display = 'none'; - }); - ["rollback", "undoRollback"].forEach(function (t) { - core.statusBar.image[t].style.display = 'none'; - }); - ["btn1", "btn2", "btn3", "btn4", "btn5", "btn6", "btn7", "btnAlt"].forEach(function (t) { - core.statusBar.image[t].style.display = 'block'; - }) - if (!core.flags.showHard) { - ["btn8", "btn9"].forEach(function (t) { - core.statusBar.image[t].style.display = 'block'; - }); - } - main.statusBar.image.btnAlt.style.filter = core.getLocalStorage('altKey') ? 'sepia(1) contrast(1.5)' : ''; - } - else { - ["btn1", "btn2", "btn3", "btn4", "btn5", "btn6", "btn7", "btnAlt"].forEach(function (t) { - core.statusBar.image[t].style.display = 'none'; - }); - ["btn8", "btn9"].forEach(function (t) { - core.statusBar.image[t].style.display = 'none'; - }); - ["book", "fly", "toolbox", "save", "load", "settings"].forEach(function (t) { - core.statusBar.image[t].style.display = 'block'; - }); - if (core.domStyle.isVertical || core.flags.extendToolbar || !core.flags.showHard) { - core.statusBar.image.shop.style.display = "block"; - } - else core.statusBar.image.shop.style.display = "none"; +// if (useButton) { +// ["book", "fly", "toolbox", "keyboard", "shop", "save", "load", "settings"].forEach(function (t) { +// core.statusBar.image[t].style.display = 'none'; +// }); +// ["rollback", "undoRollback"].forEach(function (t) { +// core.statusBar.image[t].style.display = 'none'; +// }); +// ["btn1", "btn2", "btn3", "btn4", "btn5", "btn6", "btn7", "btnAlt"].forEach(function (t) { +// core.statusBar.image[t].style.display = 'block'; +// }) +// if (!core.flags.showHard) { +// ["btn8", "btn9"].forEach(function (t) { +// core.statusBar.image[t].style.display = 'block'; +// }); +// } +// main.statusBar.image.btnAlt.style.filter = core.getLocalStorage('altKey') ? 'sepia(1) contrast(1.5)' : ''; +// } +// else { +// ["btn1", "btn2", "btn3", "btn4", "btn5", "btn6", "btn7", "btnAlt"].forEach(function (t) { +// core.statusBar.image[t].style.display = 'none'; +// }); +// ["btn8", "btn9"].forEach(function (t) { +// core.statusBar.image[t].style.display = 'none'; +// }); +// ["book", "fly", "toolbox", "save", "load", "settings"].forEach(function (t) { +// core.statusBar.image[t].style.display = 'block'; +// }); +// if (core.domStyle.isVertical || core.flags.extendToolbar || !core.flags.showHard) { +// core.statusBar.image.shop.style.display = "block"; +// } +// else core.statusBar.image.shop.style.display = "none"; - ["rollback", "undoRollback"].forEach(function (t) { - core.statusBar.image[t].style.display = core.flags.showHard ? "none" : "block"; - }); +// ["rollback", "undoRollback"].forEach(function (t) { +// core.statusBar.image[t].style.display = core.flags.showHard ? "none" : "block"; +// }); - core.statusBar.image.keyboard.style.display - = core.domStyle.isVertical || core.flags.extendToolbar ? "block" : "none"; - } -} +// core.statusBar.image.keyboard.style.display +// = core.domStyle.isVertical || core.flags.extendToolbar ? "block" : "none"; +// } +// } ////// ------ resize处理 ------ // @@ -3452,6 +3396,7 @@ control.prototype.unregisterResize = function (name) { this.resizes = this.resizes.filter(function (b) { return b.name != name; }); } +/** 执行所有resize函数 */ control.prototype._doResize = function (obj) { for (var i in this.resizes) { try { @@ -3465,8 +3410,22 @@ control.prototype._doResize = function (obj) { return false; } +/** 执行单个特定名称的resize函数 */ +control.prototype._doOneResize = function (obj, type) { + try { + const currEvent = this.resizes.find((resizeEvent) => resizeEvent.name === type); + if (!currEvent) return; + if (core.doFunc(currEvent.func, this, obj)) return true; + } catch (e) { + console.error(e); + console.error("ERROR in resizes[" + this.resizes[type].name + "]:已自动注销该项。"); + this.unregisterResize(this.resizes[type].name); + } + return false; +} + ////// 屏幕分辨率改变后重新自适应 ////// -control.prototype.resize = function () { +control.prototype.resize = function (type) { if (main.mode == 'editor') return; var clientWidth = main.dom.body.clientWidth, clientHeight = main.dom.body.clientHeight; var CANVAS_WIDTH = core.__PIXELS__, BAR_WIDTH = Math.round(core.__PIXELS__ * 0.31); @@ -3525,16 +3484,12 @@ control.prototype.resize = function () { is15x15: core.__SIZE__ == 15 }; - // 横屏且非底部工具栏,则商店调整到回退按键之前 - if (!core.domStyle.isVertical && !core.flags.extendsToolBar) { - if (core.statusBar.image.shop.nextElementSibling !== core.statusBar.image.rollback) - core.dom.toolBar.insertBefore(core.statusBar.image.shop, core.statusBar.image.rollback); + if (type != null) { + if (type instanceof Array) type.forEach((oneType) => this._doOneResize(obj, oneType)); + else this._doOneResize(obj, type); } - else if (core.statusBar.image.shop.nextElementSibling !== core.statusBar.image.save) - core.dom.toolBar.insertBefore(core.statusBar.image.shop, core.statusBar.image.save); - - this._doResize(obj); - this.setToolbarButton(); + else this._doResize(obj); + // this.setToolbarButton(); core.updateStatusBar(); } @@ -3700,8 +3655,8 @@ control.prototype._resize_status = function (obj) { } } +/** toolBar的样式 */ control.prototype._resize_toolBar = function (obj) { - // toolBar var toolBar = core.dom.toolBar; if (core.domStyle.isVertical) { toolBar.style.left = 0; @@ -3732,6 +3687,7 @@ control.prototype._resize_toolBar = function (obj) { toolBar.style.borderRight = toolBar.style.borderBottom = core.domStyle.isVertical || obj.extendToolbar ? obj.border : ''; toolBar.style.fontSize = 16 * core.domStyle.scale + "px"; + // 本项控制toolBar本身的显示与隐藏 if (!core.domStyle.showStatusBar && !core.domStyle.isVertical && !obj.extendToolbar) { toolBar.style.display = 'none'; } else { @@ -3739,6 +3695,7 @@ control.prototype._resize_toolBar = function (obj) { } } +/** toolBar中各个tools的样式 */ control.prototype._resize_tools = function (obj) { var toolsHeight = 32 * core.domStyle.scale * ((core.domStyle.isVertical || obj.extendToolbar) && !obj.is15x15 ? 0.95 : 1); var toolsMarginLeft; @@ -3754,9 +3711,15 @@ control.prototype._resize_tools = function (obj) { } core.dom.hard.style.lineHeight = toolsHeight + "px"; if (core.domStyle.isVertical || obj.extendToolbar) { - if (core.flags.showHard) core.dom.hard.style.width = obj.outerSize - 9 * toolsMarginLeft - 8.5 * toolsHeight - 22 + "px"; - else { - core.dom.hard.style.width = "15px"; + const toolsCount = core.domStyle.toolsCount; + if (toolsCount <= 8) { + core.dom.hard.style.width = obj.outerSize - (toolsCount + 1) * toolsMarginLeft - (toolsCount + 0.5) * toolsHeight - 22 + "px"; + } + else if (toolsCount === 9) { + core.dom.hard.style.width = obj.outerSize - (toolsCount + 1) * toolsMarginLeft - toolsCount * toolsHeight - 22 + "px"; + } + else { // toolsCount is 10 + core.dom.hard.style.width = obj.outerSize - (toolsCount + 1) * toolsMarginLeft - toolsCount * toolsHeight - 13 + "px"; core.dom.hard.style.marginLeft = "1px"; } } diff --git a/libs/core.js b/libs/core.js index 0fb6e5e8..9f5b3fa5 100644 --- a/libs/core.js +++ b/libs/core.js @@ -97,7 +97,8 @@ function core() { availableScale: [], isVertical: false, showStatusBar: true, - toolbarBtn: false, + toolbarBtn: "normal", + toolsCount: 7, } this.bigmap = { canvas: ["bg", "event", "event2", "fg", "damage"], diff --git a/main.js b/main.js index ed4ca6b3..c1bb2ebf 100644 --- a/main.js +++ b/main.js @@ -109,11 +109,14 @@ function main () { 'book': document.getElementById("img-book"), 'fly': document.getElementById("img-fly"), 'toolbox': document.getElementById("img-toolbox"), + 'equipbox': document.getElementById("img-equipbox"), 'keyboard': document.getElementById("img-keyboard"), 'shop': document.getElementById('img-shop'), 'save': document.getElementById("img-save"), 'load': document.getElementById("img-load"), 'settings': document.getElementById("img-settings"), + 'rollback': document.getElementById("img-rollback"), + 'undoRollback': document.getElementById("img-undoRollback"), 'btn1': document.getElementById("img-btn1"), 'btn2': document.getElementById("img-btn2"), 'btn3': document.getElementById("img-btn3"), @@ -124,10 +127,14 @@ function main () { 'btn8': document.getElementById("img-btn8"), 'btn9': document.getElementById("img-btn9"), 'btnAlt': document.getElementById("img-btnAlt"), - 'rollback': document.getElementById("img-rollback"), - 'undoRollback': document.getElementById("img-undoRollback"), + 'play': document.getElementById("img-play"), + 'pause': document.getElementById("img-pause"), + 'stop': document.getElementById("img-stop"), + 'rewind': document.getElementById("img-rewind"), + 'speedDown': document.getElementById("img-speedDown"), + 'speedUp': document.getElementById("img-speedUp"), 'single': document.getElementById("img-single"), - 'valve': document.getElementById("img-valve"), + 'view': document.getElementById("img-view"), }, 'icons': { 'floor': 0, @@ -171,7 +178,7 @@ function main () { 'rollback': 37, 'undoRollback': 38, 'single': 39, - 'valve': 40, + 'view': 40, }, 'floor': document.getElementById('floor'), 'name': document.getElementById('name'), @@ -633,184 +640,111 @@ main.prototype.listen = function () { console.error(e); } } - + // #region 图标点击事件-常规模式 ////// 点击状态栏中的怪物手册时 ////// main.statusBar.image.book.onclick = function (e) { e.stopPropagation(); - - if (core.isReplaying()) { - core.triggerReplay(); - return; - } - - if (main.core.isPlaying()) - main.core.openBook(true); + if (core.isReplaying()) core.control._replay_book(); + else if (main.core.isPlaying()) main.core.openBook(true); } - ////// 点击状态栏中的楼层传送器/装备栏时 ////// + ////// 点击状态栏中的楼层传送器时 ////// main.statusBar.image.fly.onclick = function (e) { e.stopPropagation(); - - // 播放录像时 - if (core.isReplaying()) { - core.stopReplay(); - return; - } - - if (main.core.isPlaying()) { - if (!main.core.flags.equipboxButton) { - main.core.useFly(true); - } - else { - main.core.openEquipbox(true) - } - } + if (core.isReplaying()) return; + else if (main.core.isPlaying()) main.core.useFly(true); } ////// 点击状态栏中的工具箱时 ////// main.statusBar.image.toolbox.onclick = function (e) { e.stopPropagation(); - - if (core.isReplaying()) { - core.rewindReplay(); - return; - } - - if (main.core.isPlaying()) { - main.core.openToolbox(core.status.event.id != 'equipbox'); - } + if (core.isReplaying()) core.control._replay_toolbox(); + else if (main.core.isPlaying()) main.core.openToolbox(core.status.event.id != 'equipbox'); } ////// 双击状态栏中的工具箱时 ////// main.statusBar.image.toolbox.ondblclick = function (e) { e.stopPropagation(); + if (core.isReplaying()) return; + else if (main.core.isPlaying()) main.core.openEquipbox(true); + } - if (core.isReplaying()) { - return; - } - - if (main.core.isPlaying()) - main.core.openEquipbox(true); - + ////// 点击状态栏中的装备栏图标时 ////// + main.statusBar.image.toolbox.onclick = function (e) { + e.stopPropagation(); + if (core.isReplaying()) core.control._replay_equipbox(); + else if (main.core.isPlaying()) main.core.openEquipbox(core.status.event.id != 'equipbox'); } ////// 点击状态栏中的虚拟键盘时 ////// main.statusBar.image.keyboard.onclick = function (e) { e.stopPropagation(); - - if (core.isReplaying()) { - core.control._replay_book(); - return; - } - - if (main.core.isPlaying()) - main.core.openKeyBoard(true); + if (core.isReplaying()) return; + else if (main.core.isPlaying()) main.core.openKeyBoard(true); } ////// 点击状态栏中的快捷商店时 ////// main.statusBar.image.shop.onclick = function (e) { e.stopPropagation(); - - if (core.isReplaying()) { - core.control._replay_viewMap(); - return; - } - - if (main.core.isPlaying()) - main.core.openQuickShop(true); + if (core.isReplaying()) return; + else if (main.core.isPlaying()) main.core.openQuickShop(true); } ////// 点击金币时也可以开启快捷商店 ////// main.statusBar.image.money.onclick = function (e) { e.stopPropagation(); - - if (main.core.isPlaying()) - main.core.openQuickShop(true); + if (core.isReplaying()) return; + else if (main.core.isPlaying()) main.core.openQuickShop(true); } - ////// 点击楼梯图标也可以浏览地图 ////// - main.statusBar.image.floor.onclick = function (e) { + ////// 楼梯图标代表浏览地图 ////// + main.statusBar.image.view.onclick = function (e) { e.stopPropagation(); - - if (main.core && main.core.isPlaying() && !core.isMoving() && !core.status.lockControl) { - core.ui._drawViewMaps(); + if (main.core && !core.isMoving() && !core.status.lockControl) { + if (core.isReplaying()) core.control._replay_viewMap(); + else if (main.core.isPlaying()) core.ui._drawViewMaps(); } } ////// 点击状态栏中的存档按钮时 ////// main.statusBar.image.save.onclick = function (e) { e.stopPropagation(); - if (core.isReplaying()) { - core.speedDownReplay(); + core.control._replay_SL(); return; } - - if (main.core.isPlaying()) - main.core.save(true); + if (main.core.isPlaying()) main.core.save(true); } ////// 点击状态栏中的读档按钮时 ////// main.statusBar.image.load.onclick = function (e) { e.stopPropagation(); - - if (core.isReplaying()) { - core.speedUpReplay(); - return; - } - - if (main.core.isPlaying()) - main.core.load(true); + if (core.isReplaying()) return; + else if (main.core.isPlaying()) main.core.load(true); } - ////// 点击状态栏中的系统菜单时 ////// + ////// 点击状态栏中的系统设置菜单时 ////// main.statusBar.image.settings.onclick = function (e) { e.stopPropagation(); - - if (core.isReplaying()) { - core.control._replay_SL(); - return; - } - - if (main.core.isPlaying()) - main.core.openSettings(true); + if (core.isReplaying()) return; + if (main.core.isPlaying()) main.core.openSettings(true); } ////// 点击状态栏中的回退菜单时 ////// main.statusBar.image.rollback.onclick = function (e) { e.stopPropagation(); - - // 单步播放录像 - if (core.isReplaying()) { - core.control.stepReplay(); - return; - } - - if (main.core.isPlaying()) - core.doSL("autoSave", "load"); + if (core.isReplaying()) return; + else if (main.core.isPlaying()) core.doSL("autoSave", "load"); } ////// 点击状态栏中的取消回退菜单时 ////// main.statusBar.image.undoRollback.onclick = function (e) { e.stopPropagation(); - - if (core.isReplaying()) { - core.control.interceptReplay(); - return; - } - - if (main.core.isPlaying()) - core.doSL("autoSave", "reload"); + if (core.isReplaying()) return; + else if (main.core.isPlaying()) core.doSL("autoSave", "reload"); } - ////// 点击工具栏时 ////// - main.dom.hard.onclick = function () { - if (core.isReplaying()) - return; - main.core.control.setToolbarButton(!core.domStyle.toolbarBtn); - } - - ////// 手机端的按钮1-7 ////// + // #region 图标点击事件-数字按钮模式 main.statusBar.image.btn1.onclick = function (e) { e.stopPropagation(); main.core.onkeyUp({ "keyCode": 49, "altKey": core.getLocalStorage('altKey') }); @@ -869,6 +803,59 @@ main.prototype.listen = function () { main.statusBar.image.btnAlt.style.filter = 'sepia(1) contrast(1.5)'; } }; + // #endregion + + // #region 图标点击事件-录像模式 + // 录像播放/暂停按钮(同一个) + // play和pause是一体的,根据core.status.replay.pausing决定 + main.statusBar.image.play.onclick = function (e) { + e.stopPropagation(); + if (!core.isReplaying()) return; + core.control.triggerReplay(); + } + + // 录像停止按钮 + main.statusBar.image.stop.onclick = function (e) { + e.stopPropagation(); + if (!core.isReplaying()) return; + core.control.stopReplay(); + } + + // 录像回退按钮 + main.statusBar.image.rewind.onclick = function (e) { + e.stopPropagation(); + if (!core.isReplaying()) return; + core.control.rewindReplay(); + } + + // 录像减速按钮 + main.statusBar.image.speedDown.onclick = function (e) { + e.stopPropagation(); + if (!core.isReplaying()) return; + core.control.speedDownReplay(); + } + + // 录像加速按钮 + main.statusBar.image.speedUp.onclick = function (e) { + e.stopPropagation(); + if (!core.isReplaying()) return; + core.control.speedUpReplay(); + } + + // 录像单步播放按钮 + main.statusBar.image.single.onclick = function (e) { + e.stopPropagation(); + if (!core.isReplaying()) return; + core.control.stepReplay(); + } + // #endregion + + ////// 点击工具栏的难度时 ////// + main.dom.hard.onclick = function () { + if (core.isReplaying()) return; + if (core.domStyle.toolbarBtn === 'normal') main.core.setToolbarButton('num'); + else if (core.domStyle.toolbarBtn === 'num') main.core.setToolbarButton('normal'); + } ////// 点击“开始游戏”时 ////// main.dom.playGame.onclick = function () { diff --git a/project/functions.js b/project/functions.js index 88be9a90..182e325e 100644 --- a/project/functions.js +++ b/project/functions.js @@ -58,9 +58,8 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = core.plugin.checkSkipFuncs(); // 清空自绘道具栏的缓存 core.plugin.clearItemBoxCache(); - - // 清空录像暂停点 - core.setFlag('replayValve', null); + // 设置一次工具栏,统计出元素数量 + core.setToolbarButton('normal'); }, "win": function (reason, norank, noexit) { // 游戏获胜事件 diff --git a/project/materials/icons.png b/project/materials/icons.png index 4c9b08f1da84ee0cce5fd841ab3273ec65ff2f00..88feaec1291a9fcad54dbbeed21e05b6c51c8a32 100644 GIT binary patch literal 9060 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 isVertical() ? ['book', 'fly', 'toolbox', 'keyboard', 'shop', 'save', 'load', 'settings', 'rollback'] : + ['book', 'fly', 'toolbox', 'save', 'load', 'settings'], + num: () => ['btn1', 'btn2', 'btn3', 'btn4', 'btn5', 'btn6', 'btn7', 'btn8', 'btnAlt'], + replay: () => isVertical() ? ['play', 'stop', 'rewind', 'book', 'view', 'speedDown', 'speedUp', 'single'] : + ['play', 'stop', 'rewind', 'speedDown', 'speedUp', 'book'], + hide: () => [], + }; + + function isVertical() { + return core.domStyle.isVertical || core.flags.extendToolbar; + } + + function getToolBarConfig(type) { + return core.getLocalStorage('toorBarConfig' + type, defaultConfig[type]()); + } + this.getToolBarConfig = getToolBarConfig; + + this.setToolBarConfig = function (type, index, value) { + const toolBarConfig = getToolBarConfig(); + if (value == null) toolBarConfig[type].splice(index, 1); + core.setLocalStorage('toorBarConfig', toolBarConfig); + } + + /** + * + * @param {'normal'|'num'|'replay'|'hide'} type + */ + function setToolbarButton(type) { + const currList = getToolBarConfig(type); + if (!currList) return; + const fragment = document.createDocumentFragment(); + for (let i = 0, l = currList.length; i < l; i++) { + const iconId = currList[i]; + const currEle = core.statusBar.image[iconId]; + if (!currEle) continue; + currEle.style.display = 'block'; + fragment.appendChild(currEle); + } + if (type !== "hide") { + core.domStyle.toolbarBtn = type; + } + core.domStyle.toolsCount = currList.length; + fragment.appendChild(core.dom.hard); // 难度一定会显示 因为难度所在位置要用于切换常规模式和数字模式 难度的尺寸是动态决定的 + core.dom.toolBar.innerHTML = ''; + core.dom.toolBar.appendChild(fragment); + core.control.resize('tools'); // 在这里计算难度的尺寸 + } + this.setToolbarButton = setToolbarButton; + }, "setting": function () { // 自绘设置界面 // 请保持本插件在所有插件的最下方 diff --git a/runtime.d.ts b/runtime.d.ts index f077094b..94af9723 100644 --- a/runtime.d.ts +++ b/runtime.d.ts @@ -973,8 +973,10 @@ interface control { /** 注销一个resize函数 */ unregisterResize(name: string): void - /** 屏幕分辨率改变后重新自适应 */ - resize(): void + /** 屏幕分辨率改变后重新自适应 + * @param type 重新设置指定类型的已注册resize事件 + */ + resize(type?:string): void } /**@file events.js将处理所有和事件相关的操作。 */ @@ -3231,7 +3233,8 @@ type CoreMixin = { scale: number, isVertical: boolean, showStatusBar: boolean, - toolbarBtn: boolean, + toolbarBtn: 'normal' | 'num' | 'replay' | 'hide', + toolsCount: number, } readonly bigmap: { canvas: string[], @@ -3256,6 +3259,7 @@ type CoreMixin = { max: number storage: true time: number + now: number updated: boolean } favorite: []