feat:自定义工具栏

This commit is contained in:
ShakeFlower 2025-05-24 16:58:49 +08:00
parent cecb667902
commit 8919c05cff
9 changed files with 298 additions and 269 deletions

View File

@ -1852,8 +1852,12 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [
"!doc": "当前是否显示状态栏" "!doc": "当前是否显示状态栏"
}, },
"toolbarBtn": { "toolbarBtn": {
"!type": "bool", "!type": "string",
"!doc": "当前工具栏是否是1-8的按钮" "!doc": "当前工具栏的按钮种类"
},
"toolsCount": {
"!type": "number",
"!doc": "当前工具栏的按钮数量"
}, },
}, },
"bigmap": { "bigmap": {

View File

@ -154,7 +154,7 @@
<img class="tools" id='img-load'> <img class="tools" id='img-load'>
<img class="tools" id='img-settings'> <img class="tools" id='img-settings'>
<img class="tools" id='img-rollback'> <img class="tools" id='img-rollback'>
<img class="tools" id='img-undoRollback'> <img class="tools" id='img-undoRollback' style='display:none'>
<img class="tools" id='img-btn1' style='display:none'> <img class="tools" id='img-btn1' style='display:none'>
<img class="tools" id='img-btn2' style='display:none'> <img class="tools" id='img-btn2' style='display:none'>
<img class="tools" id='img-btn3' style='display:none'> <img class="tools" id='img-btn3' style='display:none'>
@ -165,8 +165,15 @@
<img class="tools" id='img-btn8' style='display:none'> <img class="tools" id='img-btn8' style='display:none'>
<img class="tools" id='img-btn9' style='display:none'> <img class="tools" id='img-btn9' style='display:none'>
<img class="tools" id='img-btnAlt' style='display:none'> <img class="tools" id='img-btnAlt' style='display:none'>
<img class="tools" id='img-equipbox' style='display:none'>
<img class="tools" id='img-floor' style='display:none'>
<img class="tools" id='img-play' style='display:none'>
<img class="tools" id='img-rewind' style='display:none'>
<img class="tools" id='img-speedDown' style='display:none'>
<img class="tools" id='img-speedUp' style='display:none'>
<img class="tools" id='img-stop' style='display:none'>
<img class="tools" id='img-single' style='display:none'> <img class="tools" id='img-single' style='display:none'>
<img class="tools" id='img-valve' style='display:none'> <img class="tools" id='img-view' style='display:none'>
<p class="statusLabel tools" id="hard"></p> <p class="statusLabel tools" id="hard"></p>
</div> </div>
<div id="gameDraw"> <div id="gameDraw">

View File

@ -1471,6 +1471,7 @@ control.prototype.startReplay = function (list) {
core.updateStatusBar(false, true); core.updateStatusBar(false, true);
core.drawTip("开始播放"); core.drawTip("开始播放");
this.replay(); this.replay();
core.setToolbarButton("replay");
} }
////// 更改播放状态 ////// ////// 更改播放状态 //////
@ -1514,32 +1515,6 @@ control.prototype.stepReplay = function () {
core.replay(true); 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 () { control.prototype.speedUpReplay = function () {
if (!core.isPlaying() || !core.isReplaying()) return; if (!core.isPlaying() || !core.isReplaying()) return;
@ -1585,10 +1560,10 @@ control.prototype.stopReplay = function (force) {
core.status.replay.speed = 1.0; core.status.replay.speed = 1.0;
core.status.replay.steps = 0; core.status.replay.steps = 0;
core.status.replay.save = []; core.status.replay.save = [];
core.setFlag('replayValve', null);
core.deleteCanvas('replay'); core.deleteCanvas('replay');
core.updateStatusBar(false, true); core.updateStatusBar(false, true);
core.drawTip("停止播放并恢复游戏"); 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; || core.status.replay.animate || core.status.event.id || core.status.replay.failed) return;
if (core.status.replay.pausing && !force) 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(); this._replay_drawProgress();
if (core.status.replay.toReplay.length == 0) if (core.status.replay.toReplay.length == 0)
return this._replay_finished(); return this._replay_finished();
@ -3244,45 +3214,17 @@ control.prototype.updateStatusBar_update = function () {
core.control.noAutoEvents = true; core.control.noAutoEvents = true;
} }
/** 切换replay/pause 并刷新工具栏图标的完成度 */
control.prototype._updateStatusBar_setToolboxIcon = function () { control.prototype._updateStatusBar_setToolboxIcon = function () {
if (core.isReplaying()) { if (core.isReplaying()) {
core.statusBar.image.book.src = core.status.replay.pausing ? core.statusBar.icons.play.src : core.statusBar.icons.pause.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 = 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; 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; core.statusBar.image.fly.style.opacity = core.hasItem('fly') ? 1 : 0.3;
} core.statusBar.image.undoRollback.style.opacity =
else { (core.saves.autosave.data != null && core.saves.autosave.now < core.saves.autosave.data.length) ? 1 : 0.3;
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.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;
}
} }
control.prototype.showStatusBar = function () { control.prototype.showStatusBar = function () {
@ -3294,7 +3236,8 @@ control.prototype.showStatusBar = function () {
// 显示 // 显示
for (var i = 0; i < statusItems.length; ++i) for (var i = 0; i < statusItems.length; ++i)
statusItems[i].style.opacity = 1; 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.tools.hard.style.display = 'block';
core.dom.toolBar.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) for (var i = 0; i < statusItems.length; ++i)
statusItems[i].style.opacity = 0; statusItems[i].style.opacity = 0;
if ((!core.domStyle.isVertical && !core.flags.extendToolbar) || !showToolbox) { if (!showToolbox) core.setToolbarButton('hide');
for (var i = 0; i < toolItems.length; ++i) // if ((!core.domStyle.isVertical && !core.flags.extendToolbar) || !showToolbox) {
toolItems[i].style.display = 'none'; // 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 (!core.domStyle.isVertical && !core.flags.extendToolbar) {
} // core.dom.toolBar.style.display = 'none';
// }
} }
////// 更新状态栏的勇士图标 ////// ////// 更新状态栏的勇士图标 //////
@ -3345,62 +3289,62 @@ control.prototype.updateHeroIcon = function (name) {
} }
////// 改变工具栏为按钮1-8 ////// ////// 改变工具栏为按钮1-8 //////
control.prototype.setToolbarButton = function (useButton) { // control.prototype.setToolbarButton = function (useButton) {
if (!core.domStyle.showStatusBar) { // if (!core.domStyle.showStatusBar) {
// 隐藏状态栏时检查竖屏 // // 隐藏状态栏时检查竖屏
if (!core.domStyle.isVertical && !core.flags.extendToolbar) { // if (!core.domStyle.isVertical && !core.flags.extendToolbar) {
for (var i = 0; i < core.dom.tools.length; ++i) // for (var i = 0; i < core.dom.tools.length; ++i)
core.dom.tools[i].style.display = 'none'; // core.dom.tools[i].style.display = 'none';
return; // return;
} // }
if (!core.hasFlag('showToolbox')) return; // if (!core.hasFlag('showToolbox')) return;
else core.dom.tools.hard.style.display = 'block'; // else core.dom.tools.hard.style.display = 'block';
} // }
if (useButton == null) useButton = core.domStyle.toolbarBtn; // if (useButton == null) useButton = core.domStyle.toolbarBtn;
if ((!core.domStyle.isVertical && !core.flags.extendToolbar) || core.isReplaying()) useButton = false; // if ((!core.domStyle.isVertical && !core.flags.extendToolbar) || core.isReplaying()) useButton = false;
core.domStyle.toolbarBtn = useButton; // core.domStyle.toolbarBtn = useButton;
if (useButton) { // if (useButton) {
["book", "fly", "toolbox", "keyboard", "shop", "save", "load", "settings"].forEach(function (t) { // ["book", "fly", "toolbox", "keyboard", "shop", "save", "load", "settings"].forEach(function (t) {
core.statusBar.image[t].style.display = 'none'; // core.statusBar.image[t].style.display = 'none';
}); // });
["rollback", "undoRollback"].forEach(function (t) { // ["rollback", "undoRollback"].forEach(function (t) {
core.statusBar.image[t].style.display = 'none'; // core.statusBar.image[t].style.display = 'none';
}); // });
["btn1", "btn2", "btn3", "btn4", "btn5", "btn6", "btn7", "btnAlt"].forEach(function (t) { // ["btn1", "btn2", "btn3", "btn4", "btn5", "btn6", "btn7", "btnAlt"].forEach(function (t) {
core.statusBar.image[t].style.display = 'block'; // core.statusBar.image[t].style.display = 'block';
}) // })
if (!core.flags.showHard) { // if (!core.flags.showHard) {
["btn8", "btn9"].forEach(function (t) { // ["btn8", "btn9"].forEach(function (t) {
core.statusBar.image[t].style.display = 'block'; // core.statusBar.image[t].style.display = 'block';
}); // });
} // }
main.statusBar.image.btnAlt.style.filter = core.getLocalStorage('altKey') ? 'sepia(1) contrast(1.5)' : ''; // main.statusBar.image.btnAlt.style.filter = core.getLocalStorage('altKey') ? 'sepia(1) contrast(1.5)' : '';
} // }
else { // else {
["btn1", "btn2", "btn3", "btn4", "btn5", "btn6", "btn7", "btnAlt"].forEach(function (t) { // ["btn1", "btn2", "btn3", "btn4", "btn5", "btn6", "btn7", "btnAlt"].forEach(function (t) {
core.statusBar.image[t].style.display = 'none'; // core.statusBar.image[t].style.display = 'none';
}); // });
["btn8", "btn9"].forEach(function (t) { // ["btn8", "btn9"].forEach(function (t) {
core.statusBar.image[t].style.display = 'none'; // core.statusBar.image[t].style.display = 'none';
}); // });
["book", "fly", "toolbox", "save", "load", "settings"].forEach(function (t) { // ["book", "fly", "toolbox", "save", "load", "settings"].forEach(function (t) {
core.statusBar.image[t].style.display = 'block'; // core.statusBar.image[t].style.display = 'block';
}); // });
if (core.domStyle.isVertical || core.flags.extendToolbar || !core.flags.showHard) { // if (core.domStyle.isVertical || core.flags.extendToolbar || !core.flags.showHard) {
core.statusBar.image.shop.style.display = "block"; // core.statusBar.image.shop.style.display = "block";
} // }
else core.statusBar.image.shop.style.display = "none"; // else core.statusBar.image.shop.style.display = "none";
["rollback", "undoRollback"].forEach(function (t) { // ["rollback", "undoRollback"].forEach(function (t) {
core.statusBar.image[t].style.display = core.flags.showHard ? "none" : "block"; // core.statusBar.image[t].style.display = core.flags.showHard ? "none" : "block";
}); // });
core.statusBar.image.keyboard.style.display // core.statusBar.image.keyboard.style.display
= core.domStyle.isVertical || core.flags.extendToolbar ? "block" : "none"; // = core.domStyle.isVertical || core.flags.extendToolbar ? "block" : "none";
} // }
} // }
////// ------ resize处理 ------ // ////// ------ resize处理 ------ //
@ -3452,6 +3396,7 @@ control.prototype.unregisterResize = function (name) {
this.resizes = this.resizes.filter(function (b) { return b.name != name; }); this.resizes = this.resizes.filter(function (b) { return b.name != name; });
} }
/** 执行所有resize函数 */
control.prototype._doResize = function (obj) { control.prototype._doResize = function (obj) {
for (var i in this.resizes) { for (var i in this.resizes) {
try { try {
@ -3465,8 +3410,22 @@ control.prototype._doResize = function (obj) {
return false; 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; if (main.mode == 'editor') return;
var clientWidth = main.dom.body.clientWidth, clientHeight = main.dom.body.clientHeight; var clientWidth = main.dom.body.clientWidth, clientHeight = main.dom.body.clientHeight;
var CANVAS_WIDTH = core.__PIXELS__, BAR_WIDTH = Math.round(core.__PIXELS__ * 0.31); 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 is15x15: core.__SIZE__ == 15
}; };
// 横屏且非底部工具栏,则商店调整到回退按键之前 if (type != null) {
if (!core.domStyle.isVertical && !core.flags.extendsToolBar) { if (type instanceof Array) type.forEach((oneType) => this._doOneResize(obj, oneType));
if (core.statusBar.image.shop.nextElementSibling !== core.statusBar.image.rollback) else this._doOneResize(obj, type);
core.dom.toolBar.insertBefore(core.statusBar.image.shop, core.statusBar.image.rollback);
} }
else if (core.statusBar.image.shop.nextElementSibling !== core.statusBar.image.save) else this._doResize(obj);
core.dom.toolBar.insertBefore(core.statusBar.image.shop, core.statusBar.image.save); // this.setToolbarButton();
this._doResize(obj);
this.setToolbarButton();
core.updateStatusBar(); core.updateStatusBar();
} }
@ -3700,8 +3655,8 @@ control.prototype._resize_status = function (obj) {
} }
} }
/** toolBar的样式 */
control.prototype._resize_toolBar = function (obj) { control.prototype._resize_toolBar = function (obj) {
// toolBar
var toolBar = core.dom.toolBar; var toolBar = core.dom.toolBar;
if (core.domStyle.isVertical) { if (core.domStyle.isVertical) {
toolBar.style.left = 0; 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.borderRight = toolBar.style.borderBottom = core.domStyle.isVertical || obj.extendToolbar ? obj.border : '';
toolBar.style.fontSize = 16 * core.domStyle.scale + "px"; toolBar.style.fontSize = 16 * core.domStyle.scale + "px";
// 本项控制toolBar本身的显示与隐藏
if (!core.domStyle.showStatusBar && !core.domStyle.isVertical && !obj.extendToolbar) { if (!core.domStyle.showStatusBar && !core.domStyle.isVertical && !obj.extendToolbar) {
toolBar.style.display = 'none'; toolBar.style.display = 'none';
} else { } else {
@ -3739,6 +3695,7 @@ control.prototype._resize_toolBar = function (obj) {
} }
} }
/** toolBar中各个tools的样式 */
control.prototype._resize_tools = function (obj) { control.prototype._resize_tools = function (obj) {
var toolsHeight = 32 * core.domStyle.scale * ((core.domStyle.isVertical || obj.extendToolbar) && !obj.is15x15 ? 0.95 : 1); var toolsHeight = 32 * core.domStyle.scale * ((core.domStyle.isVertical || obj.extendToolbar) && !obj.is15x15 ? 0.95 : 1);
var toolsMarginLeft; var toolsMarginLeft;
@ -3754,9 +3711,15 @@ control.prototype._resize_tools = function (obj) {
} }
core.dom.hard.style.lineHeight = toolsHeight + "px"; core.dom.hard.style.lineHeight = toolsHeight + "px";
if (core.domStyle.isVertical || obj.extendToolbar) { if (core.domStyle.isVertical || obj.extendToolbar) {
if (core.flags.showHard) core.dom.hard.style.width = obj.outerSize - 9 * toolsMarginLeft - 8.5 * toolsHeight - 22 + "px"; const toolsCount = core.domStyle.toolsCount;
else { if (toolsCount <= 8) {
core.dom.hard.style.width = "15px"; 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"; core.dom.hard.style.marginLeft = "1px";
} }
} }

View File

@ -97,7 +97,8 @@ function core() {
availableScale: [], availableScale: [],
isVertical: false, isVertical: false,
showStatusBar: true, showStatusBar: true,
toolbarBtn: false, toolbarBtn: "normal",
toolsCount: 7,
} }
this.bigmap = { this.bigmap = {
canvas: ["bg", "event", "event2", "fg", "damage"], canvas: ["bg", "event", "event2", "fg", "damage"],

217
main.js
View File

@ -109,11 +109,14 @@ function main () {
'book': document.getElementById("img-book"), 'book': document.getElementById("img-book"),
'fly': document.getElementById("img-fly"), 'fly': document.getElementById("img-fly"),
'toolbox': document.getElementById("img-toolbox"), 'toolbox': document.getElementById("img-toolbox"),
'equipbox': document.getElementById("img-equipbox"),
'keyboard': document.getElementById("img-keyboard"), 'keyboard': document.getElementById("img-keyboard"),
'shop': document.getElementById('img-shop'), 'shop': document.getElementById('img-shop'),
'save': document.getElementById("img-save"), 'save': document.getElementById("img-save"),
'load': document.getElementById("img-load"), 'load': document.getElementById("img-load"),
'settings': document.getElementById("img-settings"), 'settings': document.getElementById("img-settings"),
'rollback': document.getElementById("img-rollback"),
'undoRollback': document.getElementById("img-undoRollback"),
'btn1': document.getElementById("img-btn1"), 'btn1': document.getElementById("img-btn1"),
'btn2': document.getElementById("img-btn2"), 'btn2': document.getElementById("img-btn2"),
'btn3': document.getElementById("img-btn3"), 'btn3': document.getElementById("img-btn3"),
@ -124,10 +127,14 @@ function main () {
'btn8': document.getElementById("img-btn8"), 'btn8': document.getElementById("img-btn8"),
'btn9': document.getElementById("img-btn9"), 'btn9': document.getElementById("img-btn9"),
'btnAlt': document.getElementById("img-btnAlt"), 'btnAlt': document.getElementById("img-btnAlt"),
'rollback': document.getElementById("img-rollback"), 'play': document.getElementById("img-play"),
'undoRollback': document.getElementById("img-undoRollback"), '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"), 'single': document.getElementById("img-single"),
'valve': document.getElementById("img-valve"), 'view': document.getElementById("img-view"),
}, },
'icons': { 'icons': {
'floor': 0, 'floor': 0,
@ -171,7 +178,7 @@ function main () {
'rollback': 37, 'rollback': 37,
'undoRollback': 38, 'undoRollback': 38,
'single': 39, 'single': 39,
'valve': 40, 'view': 40,
}, },
'floor': document.getElementById('floor'), 'floor': document.getElementById('floor'),
'name': document.getElementById('name'), 'name': document.getElementById('name'),
@ -633,184 +640,111 @@ main.prototype.listen = function () {
console.error(e); console.error(e);
} }
} }
// #region 图标点击事件-常规模式
////// 点击状态栏中的怪物手册时 ////// ////// 点击状态栏中的怪物手册时 //////
main.statusBar.image.book.onclick = function (e) { main.statusBar.image.book.onclick = function (e) {
e.stopPropagation(); e.stopPropagation();
if (core.isReplaying()) core.control._replay_book();
if (core.isReplaying()) { else if (main.core.isPlaying()) main.core.openBook(true);
core.triggerReplay();
return;
} }
if (main.core.isPlaying()) ////// 点击状态栏中的楼层传送器时 //////
main.core.openBook(true);
}
////// 点击状态栏中的楼层传送器/装备栏时 //////
main.statusBar.image.fly.onclick = function (e) { main.statusBar.image.fly.onclick = function (e) {
e.stopPropagation(); e.stopPropagation();
if (core.isReplaying()) return;
// 播放录像时 else if (main.core.isPlaying()) main.core.useFly(true);
if (core.isReplaying()) {
core.stopReplay();
return;
}
if (main.core.isPlaying()) {
if (!main.core.flags.equipboxButton) {
main.core.useFly(true);
}
else {
main.core.openEquipbox(true)
}
}
} }
////// 点击状态栏中的工具箱时 ////// ////// 点击状态栏中的工具箱时 //////
main.statusBar.image.toolbox.onclick = function (e) { main.statusBar.image.toolbox.onclick = function (e) {
e.stopPropagation(); e.stopPropagation();
if (core.isReplaying()) core.control._replay_toolbox();
if (core.isReplaying()) { else if (main.core.isPlaying()) main.core.openToolbox(core.status.event.id != 'equipbox');
core.rewindReplay();
return;
}
if (main.core.isPlaying()) {
main.core.openToolbox(core.status.event.id != 'equipbox');
}
} }
////// 双击状态栏中的工具箱时 ////// ////// 双击状态栏中的工具箱时 //////
main.statusBar.image.toolbox.ondblclick = function (e) { main.statusBar.image.toolbox.ondblclick = function (e) {
e.stopPropagation(); e.stopPropagation();
if (core.isReplaying()) return;
if (core.isReplaying()) { else if (main.core.isPlaying()) main.core.openEquipbox(true);
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) { main.statusBar.image.keyboard.onclick = function (e) {
e.stopPropagation(); e.stopPropagation();
if (core.isReplaying()) return;
if (core.isReplaying()) { else if (main.core.isPlaying()) main.core.openKeyBoard(true);
core.control._replay_book();
return;
}
if (main.core.isPlaying())
main.core.openKeyBoard(true);
} }
////// 点击状态栏中的快捷商店时 ////// ////// 点击状态栏中的快捷商店时 //////
main.statusBar.image.shop.onclick = function (e) { main.statusBar.image.shop.onclick = function (e) {
e.stopPropagation(); e.stopPropagation();
if (core.isReplaying()) return;
if (core.isReplaying()) { else if (main.core.isPlaying()) main.core.openQuickShop(true);
core.control._replay_viewMap();
return;
}
if (main.core.isPlaying())
main.core.openQuickShop(true);
} }
////// 点击金币时也可以开启快捷商店 ////// ////// 点击金币时也可以开启快捷商店 //////
main.statusBar.image.money.onclick = function (e) { main.statusBar.image.money.onclick = function (e) {
e.stopPropagation(); e.stopPropagation();
if (core.isReplaying()) return;
if (main.core.isPlaying()) else if (main.core.isPlaying()) main.core.openQuickShop(true);
main.core.openQuickShop(true);
} }
////// 点击楼梯图标也可以浏览地图 ////// ////// 楼梯图标代表浏览地图 //////
main.statusBar.image.floor.onclick = function (e) { main.statusBar.image.view.onclick = function (e) {
e.stopPropagation(); e.stopPropagation();
if (main.core && !core.isMoving() && !core.status.lockControl) {
if (main.core && main.core.isPlaying() && !core.isMoving() && !core.status.lockControl) { if (core.isReplaying()) core.control._replay_viewMap();
core.ui._drawViewMaps(); else if (main.core.isPlaying()) core.ui._drawViewMaps();
} }
} }
////// 点击状态栏中的存档按钮时 ////// ////// 点击状态栏中的存档按钮时 //////
main.statusBar.image.save.onclick = function (e) { main.statusBar.image.save.onclick = function (e) {
e.stopPropagation(); e.stopPropagation();
if (core.isReplaying()) { if (core.isReplaying()) {
core.speedDownReplay(); core.control._replay_SL();
return; return;
} }
if (main.core.isPlaying()) main.core.save(true);
if (main.core.isPlaying())
main.core.save(true);
} }
////// 点击状态栏中的读档按钮时 ////// ////// 点击状态栏中的读档按钮时 //////
main.statusBar.image.load.onclick = function (e) { main.statusBar.image.load.onclick = function (e) {
e.stopPropagation(); e.stopPropagation();
if (core.isReplaying()) return;
if (core.isReplaying()) { else if (main.core.isPlaying()) main.core.load(true);
core.speedUpReplay();
return;
} }
if (main.core.isPlaying()) ////// 点击状态栏中的系统设置菜单时 //////
main.core.load(true);
}
////// 点击状态栏中的系统菜单时 //////
main.statusBar.image.settings.onclick = function (e) { main.statusBar.image.settings.onclick = function (e) {
e.stopPropagation(); e.stopPropagation();
if (core.isReplaying()) return;
if (core.isReplaying()) { if (main.core.isPlaying()) main.core.openSettings(true);
core.control._replay_SL();
return;
}
if (main.core.isPlaying())
main.core.openSettings(true);
} }
////// 点击状态栏中的回退菜单时 ////// ////// 点击状态栏中的回退菜单时 //////
main.statusBar.image.rollback.onclick = function (e) { main.statusBar.image.rollback.onclick = function (e) {
e.stopPropagation(); e.stopPropagation();
if (core.isReplaying()) return;
// 单步播放录像 else if (main.core.isPlaying()) core.doSL("autoSave", "load");
if (core.isReplaying()) {
core.control.stepReplay();
return;
}
if (main.core.isPlaying())
core.doSL("autoSave", "load");
} }
////// 点击状态栏中的取消回退菜单时 ////// ////// 点击状态栏中的取消回退菜单时 //////
main.statusBar.image.undoRollback.onclick = function (e) { main.statusBar.image.undoRollback.onclick = function (e) {
e.stopPropagation(); e.stopPropagation();
if (core.isReplaying()) return;
if (core.isReplaying()) { else if (main.core.isPlaying()) core.doSL("autoSave", "reload");
core.control.interceptReplay();
return;
} }
if (main.core.isPlaying()) // #region 图标点击事件-数字按钮模式
core.doSL("autoSave", "reload");
}
////// 点击工具栏时 //////
main.dom.hard.onclick = function () {
if (core.isReplaying())
return;
main.core.control.setToolbarButton(!core.domStyle.toolbarBtn);
}
////// 手机端的按钮1-7 //////
main.statusBar.image.btn1.onclick = function (e) { main.statusBar.image.btn1.onclick = function (e) {
e.stopPropagation(); e.stopPropagation();
main.core.onkeyUp({ "keyCode": 49, "altKey": core.getLocalStorage('altKey') }); 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)'; 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 () { main.dom.playGame.onclick = function () {

View File

@ -58,9 +58,8 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
core.plugin.checkSkipFuncs(); core.plugin.checkSkipFuncs();
// 清空自绘道具栏的缓存 // 清空自绘道具栏的缓存
core.plugin.clearItemBoxCache(); core.plugin.clearItemBoxCache();
// 设置一次工具栏,统计出元素数量
// 清空录像暂停点 core.setToolbarButton('normal');
core.setFlag('replayValve', null);
}, },
"win": function (reason, norank, noexit) { "win": function (reason, norank, noexit) {
// 游戏获胜事件 // 游戏获胜事件

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

View File

@ -3770,6 +3770,70 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
}) })
} }
}, },
"customizableToolBar": function () {
// 自定义工具栏显示项
// 本插件需要配合main.js, control.js等的修改
// 新的逻辑如下:
// 函数_updateStatusBar_setToolboxIcon在updateStatusBar中调用仅用于切换录像replay/pause和计算几个图标的透明度
// setToolbarButton根据输入的类型重新向状态栏填入元素
// resize添加一个只刷新工具栏的模式此外resize不调用setToolbarButton相反setToolbarButton后调用resize
// 以下地方调用setToolbarButton: hard的点击事件回放录像的进入/退出事件
// 要注意一点, floor是不能作为toolBar元素的statuBar具有同id元素样式会相互冲突 复制了一个外形一样的图标叫view作为浏览地图按钮
/**
* PC 默认6个键且不需要切入数字键的模式 最多9个键 手机 默认9个键 最多10个键
* normal:普通模式 num:按下数字键切换到的模式 replay:录像模式 opacity:透明度
*/
const defaultConfig = {
normal: () => 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 () { "setting": function () {
// 自绘设置界面 // 自绘设置界面
// 请保持本插件在所有插件的最下方 // 请保持本插件在所有插件的最下方

10
runtime.d.ts vendored
View File

@ -973,8 +973,10 @@ interface control {
/** 注销一个resize函数 */ /** 注销一个resize函数 */
unregisterResize(name: string): void unregisterResize(name: string): void
/** 屏幕分辨率改变后重新自适应 */ /**
resize(): void * @param type resize事件
*/
resize(type?:string): void
} }
/**@file events.js将处理所有和事件相关的操作。 */ /**@file events.js将处理所有和事件相关的操作。 */
@ -3231,7 +3233,8 @@ type CoreMixin = {
scale: number, scale: number,
isVertical: boolean, isVertical: boolean,
showStatusBar: boolean, showStatusBar: boolean,
toolbarBtn: boolean, toolbarBtn: 'normal' | 'num' | 'replay' | 'hide',
toolsCount: number,
} }
readonly bigmap: { readonly bigmap: {
canvas: string[], canvas: string[],
@ -3256,6 +3259,7 @@ type CoreMixin = {
max: number max: number
storage: true storage: true
time: number time: number
now: number
updated: boolean updated: boolean
} }
favorite: [] favorite: []