//============================================================================= // MenuBarAddition.js // ---------------------------------------------------------------------------- // Copyright (c) 2015-2016 Triacontane // This software is released under the MIT License. // http://opensource.org/licenses/mit-license.php // ---------------------------------------------------------------------------- // Version // 1.0.3 2023/09/05 ウィンドウリサイズのコードが古かったので修正 // 1.0.2 2016/06/15 1.0.1の修正が正しく行われていなかったので再修正 // 1.0.1 2016/06/14 YEP_CoreEngine.jsと併用したときにウィンドウ高さ補正が効かなくなる問題を修正 // 1.0.0 2016/06/04 初版 // ---------------------------------------------------------------------------- // [Blog] : http://triacontane.blogspot.jp/ // [Twitter]: https://twitter.com/triacontane/ // [GitHub] : https://github.com/triacontane/ //============================================================================= /*: * @plugindesc メニューバー追加プラグイン * @author トリアコンタン * * @param 伸縮モード切り替え * @desc 伸縮モード切り替え(F3)を追加します。(ON/OFF) * @default ON * * @param 全画面モード切り替え * @desc 全画面モード切り替え(F4)を追加します。(ON/OFF) * @default ON * * @param リロード切り替え * @desc リロード(F5)を追加します。(ON/OFF) * @default ON * * @param 伸縮モード名称 * @desc 伸縮モード切り替えコマンドの表示名です。 * @default 伸縮モード切り替え * * @param 全画面モード名称 * @desc 全画面モード切り替えコマンドの表示名です。 * @default 全画面モード切り替え * * @param リロード名称 * @desc リロードコマンドの表示名です。 * @default リロード * * @param マップ画面のみ有効 * @desc カスタムコマンドがマップ画面でのみ有効になります。(ON/OFF) * @default ON * * @param ウィンドウ高さ加算値 * @desc メニューバー追加によって加算されるウィンドウの高さです。通常は20を指定してください。 * @default 20 * * @param クリックメニュー * @desc クリックメニューからコマンドを実行できます。(-1;無効 0:左 1:ホイール 2:右) * @default 2 * * @param コマンド名称1 * @desc メニューバーに表示されるコマンドの名称です。 * @default * * @param コマンドスイッチ1 * @desc メニューバーの項目を追加したときにONになるスイッチ番号です。 * @default * * @param コマンドキー1 * @desc コマンドのショートカットキーです。(F1~F12) * @default * * @param コマンド名称2 * @desc メニューバーに表示されるコマンドの名称です。 * @default * * @param コマンドスイッチ2 * @desc メニューバーの項目を追加したときにONになるスイッチ番号です。 * @default * * @param コマンドキー2 * @desc コマンドのショートカットキーです。(F1~F12) * @default * * @param コマンド名称3 * @desc メニューバーに表示されるコマンドの名称です。 * @default * * @param コマンドスイッチ3 * @desc メニューバーの項目を追加したときにONになるスイッチ番号です。 * @default * * @param コマンドキー3 * @desc コマンドのショートカットキーです。(F1~F12) * @default * * @param コマンド名称4 * @desc メニューバーに表示されるコマンドの名称です。 * @default * * @param コマンドスイッチ4 * @desc メニューバーの項目を追加したときにONになるスイッチ番号です。 * @default * * @param コマンドキー4 * @desc コマンドのショートカットキーです。(F1~F12) * @default * * @help 画面上にメニューバーを追加します。 * デフォルト機能(F3, F4, F5)のほか、任意の項目を4つまで追加できます。 * クリックすると指定されたスイッチをONにできます。 * * また、マウスクリック(右クリック等)からメニューバーと同様の * コンテキストメニューを呼び出せます。 * * 注意! * このプラグインはローカル実行時のみ動作します。 * * このプラグインにはプラグインコマンドはありません。 * * 利用規約: * 作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等) * についても制限はありません。 * このプラグインはもうあなたのものです。 */ (function() { 'use strict'; var pluginName = 'MenuBarAddition'; // ローカル環境以外では動作しない if (!Utils.isNwjs()) { console.log(pluginName + 'is valid only Nw.js!'); return; } var getParamOther = function(paramNames) { if (!Array.isArray(paramNames)) paramNames = [paramNames]; for (var i = 0; i < paramNames.length; i++) { var name = PluginManager.parameters(pluginName)[paramNames[i]]; if (name) return name; } return null; }; var getParamString = function(paramNames) { var value = getParamOther(paramNames); return value === null ? '' : value; }; var getParamBoolean = function(paramNames) { var value = getParamOther(paramNames); return (value || '').toUpperCase() === 'ON'; }; var getParamNumber = function(paramNames, min, max) { var value = getParamOther(paramNames); if (arguments.length < 2) min = -Infinity; if (arguments.length < 3) max = Infinity; return (parseInt(value, 10) || 0).clamp(min, max); }; //============================================================================= // パラメータの取得と整形 //============================================================================= var paramCommandF3 = getParamBoolean(['CommandF3', '伸縮モード切り替え']); var paramCommandF4 = getParamBoolean(['CommandF4', '全画面モード切り替え']); var paramCommandF5 = getParamBoolean(['CommandF5', 'リロード切り替え']); var paramClickMenu = getParamNumber(['ClickMenu', 'クリックメニュー'], -1); var paramMapOnly = getParamBoolean(['MapOnly', 'マップ画面のみ有効']); var paramWindowHeight = getParamNumber(['WindowHeight', 'ウィンドウ高さ加算値'], 0); var paramCommandF3Name = getParamString(['CommandF3Name', '伸縮モード名称']); var paramCommandF4Name = getParamString(['CommandF4Name', '全画面モード名称']); var paramCommandF5Name = getParamString(['CommandF5Name', 'リロード名称']); var paramCustomCommands = []; for (var i = 1; i < 5; i++) { var name = getParamString(['CommandName' + i, 'コマンド名称' + i]); paramCustomCommands[i] = { name : name, param: getParamNumber(['CommandSwitch' + i, 'コマンドスイッチ' + i], 1), key : getParamString(['CommandKey' + i, 'コマンドキー' + i]), code : 101, valid: !!name, order: i }; } //============================================================================= // ローカル変数 //============================================================================= Input.functionReverseMapper = { F1 : 112, F2 : 113, F3 : 114, F4 : 115, F5 : 116, F6 : 117, F7 : 118, F8 : 119, F9 : 120, F10: 121, F11: 122, F12: 123 }; //============================================================================= // Graphics // プライベートメソッドにアクセスします。 //============================================================================= Graphics.switchFullScreenForMenuBarAddition = function() { this._switchFullScreen(); }; Graphics.switchStretchModeForMenuBarAddition = function() { this._switchStretchMode(); }; //============================================================================= // SceneManager // メニューバーを追加定義します。 //============================================================================= SceneManager.normalMenuCommands = [ {code: 102, key: 'F3', valid: paramCommandF3, name: paramCommandF3Name, order: 0}, {code: 103, key: 'F4', valid: paramCommandF4, name: paramCommandF4Name, order: 0}, {code: 104, key: 'F5', valid: paramCommandF5, name: paramCommandF5Name, order: 0} ]; var _SceneManager_initNwjs = SceneManager.initNwjs; SceneManager.initNwjs = function() { _SceneManager_initNwjs.apply(this, arguments); this._menuCommands = this.getAllMenuCommands(); this.initClickMenu(); this.initMenuBar(); }; SceneManager.initMenuBar = function() { var gui = require('nw.gui'); var win = gui.Window.get(); this._needAdjustScreen = true; var menuBar = new gui.Menu({type: 'menubar'}); if (process.platform === 'darwin') { menuBar.createMacBuiltin('Game', option); } this.addMenuItem(menuBar); win.menu = menuBar; }; var _SceneManager_run = SceneManager.run; SceneManager.run = function(sceneClass) { _SceneManager_run.apply(this, arguments); this.setWindowSizeForMenuBar(); }; SceneManager.setWindowSizeForMenuBar = function() { if (!this._needAdjustScreen) { return; } const gui = require('nw.gui'); const gameWindow = gui.Window.get(); setTimeout(function() { // Fix missing menu bar height var style_height = parseInt(Graphics._canvas.style.height, 10); var height_diff = SceneManager._screenHeight - style_height; if (height_diff !== 0) { gameWindow.moveBy(0, -height_diff); gameWindow.resizeBy(0, height_diff); } }, 100); }; SceneManager.initClickMenu = function() { var gui = require('nw.gui'); this._clickMenu = new gui.Menu(); this.addMenuItem(this._clickMenu); document.addEventListener('mousedown', function(event) { if (event.button === paramClickMenu) { this._clickMenu.popup(event.pageX, event.pageY); } }.bind(this)); }; SceneManager.executeMenuCommand = function(code, param) { var command = this['executeMenuCommand' + code]; if (command) command.call(SceneManager, param); }; SceneManager.executeMenuCommand101 = function(param) { if (!paramMapOnly || this.isCurrentScene(Scene_Map)) { $gameSwitches.setValue(param, true); } }; SceneManager.executeMenuCommand102 = function() { Graphics.switchStretchModeForMenuBarAddition(); }; SceneManager.executeMenuCommand103 = function() { Graphics.switchFullScreenForMenuBarAddition(); }; SceneManager.executeMenuCommand104 = function() { location.reload(); }; SceneManager.isCurrentScene = function(sceneClass) { return this._scene && this._scene.constructor === sceneClass; }; SceneManager.addMenuItem = function(menu) { var gui = require('nw.gui'); this._menuCommands.forEach(function(commandInfo) { if (!commandInfo.valid) return; var menuItem = new gui.MenuItem( {label: commandInfo.name + (commandInfo.key ? '(' + commandInfo.key + ')' : '')} ); menuItem.click = function() { SceneManager.executeMenuCommand(commandInfo.code, commandInfo.param); }; menu.append(menuItem); }); }; SceneManager.getAllMenuCommands = function() { var commands = this.normalMenuCommands.concat(paramCustomCommands); return commands.sort(function(a, b) { if (a.key && b.key) { return Input.functionReverseMapper[a.key] - Input.functionReverseMapper[b.key]; } else if (a.key || b.key) { return a.key ? -1 : 1; } else { return a.order - b.order; } }); }; var _SceneManager_onKeyDown = SceneManager.onKeyDown; SceneManager.onKeyDown = function(event) { _SceneManager_onKeyDown.apply(this, arguments); this.onKeyDownForMenuBarAddition(event); }; SceneManager.onKeyDownForMenuBarAddition = function(event) { paramCustomCommands.some(function(commandInfo) { if (Input.functionReverseMapper[commandInfo.key] === event.keyCode) { this.executeMenuCommand(commandInfo.code, commandInfo.param); return true; } return false; }.bind(this)); }; })();