feat:自定义工具栏
This commit is contained in:
parent
cecb667902
commit
8919c05cff
@ -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": {
|
||||
|
||||
11
index.html
11
index.html
@ -154,7 +154,7 @@
|
||||
<img class="tools" id='img-load'>
|
||||
<img class="tools" id='img-settings'>
|
||||
<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-btn2' 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-btn9' 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-valve' style='display:none'>
|
||||
<img class="tools" id='img-view' style='display:none'>
|
||||
<p class="statusLabel tools" id="hard"></p>
|
||||
</div>
|
||||
<div id="gameDraw">
|
||||
|
||||
247
libs/control.js
247
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";
|
||||
}
|
||||
}
|
||||
|
||||
@ -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"],
|
||||
|
||||
219
main.js
219
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 () {
|
||||
|
||||
@ -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) {
|
||||
// 游戏获胜事件
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 8.8 KiB |
@ -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 () {
|
||||
// 自绘设置界面
|
||||
// 请保持本插件在所有插件的最下方
|
||||
|
||||
10
runtime.d.ts
vendored
10
runtime.d.ts
vendored
@ -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: []
|
||||
|
||||
Loading…
Reference in New Issue
Block a user