Mesukemo-Hime-no-Kaisuiyoku/js/plugins/GamepadConfig.js

621 lines
20 KiB
JavaScript
Raw Permalink Normal View History

//=============================================================================
// Yanfly Engine Plugins - Gamepad Config
// GamepadConfig.js
// Version: 1.00
//=============================================================================
var Imported = Imported || {};
Imported.GamepadConfig = true;
var Yanfly = Yanfly || {};
Yanfly.GamepadConfig = Yanfly.GamepadConfig || {};
//=============================================================================
/*:
* @plugindesc v1.00 Allows players to adjust their button configuration
* for gamepads.
* @author Yanfly Engine Plugins
*
* @param Command Name
* @desc This is the option name that appears in the main menu.
* @default Gamepad Config
*
* @param Button Name
* @desc This is how a button name will appear in the config menu.
* @default Button %1
*
* @param OK Button
* @desc This is the command name for the OK button.
* @default OK / Talk
*
* @param OK Help
* @desc This is the help description for the OK button.
* @default Used to accept menu actions and talk to people.
*
* @param Cancel Button
* @desc Cancel Button
* @desc This is the command name for the Cancel button.
* @default Cancel
*
* @param Cancel Help
* @desc This is the help description for the Cancel button.
* @default Used to cancel menu actions.
*
* @param Shift Button
* @desc This is the command name for the Shift button.
* @default Dash
*
* @param Shift Help
* @desc This is the help description for the Shift button.
* @default Hold this button to dash on the field.
*
* @param Menu Button
* @desc This is the command name for the Menu button.
* @default Menu
*
* @param Menu Help
* @desc This is the help description for the Menu button.
* @default Access the Main Menu from the field.
*
* @param PageUp Button
* @desc This is the command name for the Page Up button.
* @default Page Up
*
* @param PageUp Help
* @desc This is the help description for the Page Up button.
* @default Use it to quickly scroll up menus.
*
* @param PageDown Button
* @desc This is the command name for the Page Down button.
* @default Page Down
*
* @param PageDown Help
* @desc This is the help description for the Page Down button.
* @default Use it to quickly scroll down menus.
*
* @param Reset Default
* @desc This is the command name to reset the config to default.
* @default Reset to Default
*
* @param Reset Help
* @desc This is the help description for the Reset button.
* @default Returns your controller to default settings.
*
* @param Finish Config
* @desc This is the command name for the finish button.
* @default Finish Configuration
*
* @param Finish Help
* @desc This is the help description for the Finish button.
* @default Are you done configuring your gamepad?
*
* @help
* Adds a "Gamepad Config" option to the Options Menu if a gamepad is detected.
* Players can then adjust the button configuration to their liking and it will
* be loaded automatically each time they play the game. Keep in mind that if
* at any point where a Gamepad is not detected inside of the Option or Gamepad
* Config menu, the game will automatically eject the player out the prevent
* the player from being locked inside.
*/
/*:ja
* @plugindesc ゲームパッド向けにボタンコンフィグを行なうプラグインです
* @author Yanfly Engine Plugins
*
* @param Command Name
* @desc メインメニューに表示されるオプション名を変更できます
* @default Gamepad Config
*
* @param Button Name
* @desc コンフィグメニューでのボタン名の表示方法を変更できます
* @default Button %1
*
* @param OK Button
* @desc OKボタンに対するコマンド名を変更できます
* @default OK / Talk
*
* @param OK Help
* @desc OKボタンに対するヘルプを設定できます
* @default メニューの決定/人に話しかける際に使うボタンです
*
* @param Cancel Button
* @desc キャンセルボタン
* @desc キャンセルボタンに対するコマンド名を変更できます
* @default Cancel
*
* @param Cancel Help
* @desc キャンセルボタンに対するヘルプを設定できます
* @default メニューアクションをキャンセルする際に使うボタンです
*
* @param Shift Button
* @desc シフトボタンに対するコマンド名を変更できます
* @default ダッシュ
*
* @param Shift Help
* @desc シフトボタンに対するヘルプを設定できます
* @default 長押しするとフィールド上をダッシュできます
*
* @param Menu Button
* @desc メニューボタンに対するコマンド名を変更できます
* @default Menu
*
* @param Menu Help
* @desc メニューボタンに対するヘルプを設定できます
* @default フィールドからメインメニューにアクセスします
*
* @param PageUp Button
* @desc ページアップボタンに対するコマンド名を変更できます
* @default Page Up
*
* @param PageUp Help
* @desc ページアップボタンに対するヘルプを設定できます
* @default メニューを素早くスクロールアップできます
*
* @param PageDown Button
* @desc ページダウンボタンに対するコマンド名を変更できます
* @default Page Down
*
* @param PageDown Help
* @desc ページダウンボタンに対するヘルプを設定できます
* @default メニューを素早くスクロールダウンできます
*
* @param Reset Default
* @desc コンフィグをリセットする際のコマンド名を変更できます
* @default Reset to Default
*
* @param Reset Help
* @desc リセットボタンに対するヘルプを設定できます
* @default コントローラコンフィグをデフォルトに戻します
*
* @param Finish Config
* @desc コンフィグを完了する際のコマンド名を変更できます
* @default Finish Configuration
*
* @param Finish Help
* @desc 完了ボタンに対するヘルプを設定できます
* @default ゲームパッドのコンフィグを完了しますか
*
* @help
* ゲームパッドが使用される場合
* "Gamepad Config"をオプションメニューに追加してください
* プレイヤーは好みのコンフィグ設定を行うことができ
* その設定は毎回プレイ時に自動的にロードされます
*
* ゲームパッドがオプションやゲームパッドコンフィグから検出されなくなると
* ゲームは自動的にプレイヤーを排出しゲーム内に閉じ込められることを防ぎます
*
*/
//=============================================================================
//=============================================================================
// Parameter Variables
//=============================================================================
Yanfly.Parameters = PluginManager.parameters('GamepadConfig');
Yanfly.Param = Yanfly.Param || {};
Yanfly.Param.GamepadConfigName = String(Yanfly.Parameters['Command Name']);
Yanfly.Param.GamepadConfigButton = String(Yanfly.Parameters['Button Name']);
Yanfly.Param.GamepadConfigOkTx = String(Yanfly.Parameters['OK Button']);
Yanfly.Param.GamepadConfigOkHelp = String(Yanfly.Parameters['OK Help']);
Yanfly.Param.GamepadConfigCancelTx = String(Yanfly.Parameters['Cancel Button']);
Yanfly.Param.GamepadConfigCancelHelp = String(Yanfly.Parameters['Cancel Help']);
Yanfly.Param.GamepadConfigShiftTx = String(Yanfly.Parameters['Shift Button']);
Yanfly.Param.GamepadConfigShiftHelp = String(Yanfly.Parameters['Shift Help']);
Yanfly.Param.GamepadConfigMenuTx = String(Yanfly.Parameters['Menu Button']);
Yanfly.Param.GamepadConfigMenuHelp = String(Yanfly.Parameters['Menu Help']);
Yanfly.Param.GamepadConfigPgUpTx = String(Yanfly.Parameters['PageUp Button']);
Yanfly.Param.GamepadConfigPgUpHelp = String(Yanfly.Parameters['PageUp Help']);
Yanfly.Param.GamepadConfigPgDnTx = String(Yanfly.Parameters['PageDown Button']);
Yanfly.Param.GamepadConfigPgDnHelp = String(Yanfly.Parameters['PageDown Help']);
Yanfly.Param.GamepadConfigResetTx = String(Yanfly.Parameters['Reset Default']);
Yanfly.Param.GamepadConfigResetHelp = String(Yanfly.Parameters['Reset Help']);
Yanfly.Param.GamepadConfigFinishTx = String(Yanfly.Parameters['Finish Config']);
Yanfly.Param.GamepadConfigFinishHelp = String(Yanfly.Parameters['Finish Help']);
//=============================================================================
// Input
//=============================================================================
Input.getPressedGamepadButton = function() {
if (Yanfly.Param.GamepadTimer > 0) {
Yanfly.Param.GamepadTimer -= 1;
return -1;
}
if (navigator.getGamepads) {
var gamepads = navigator.getGamepads();
if (gamepads) {
for (var i = 0; i < gamepads.length; i++) {
var gamepad = gamepads[i];
if (gamepad && gamepad.connected) {
return this.gamepadButtonId(gamepad);
}
}
}
}
return -1;
};
Input.gamepadButtonId = function(gamepad) {
var buttons = gamepad.buttons;
for (var i = 0; i < buttons.length; i++) {
if (buttons[i].pressed) return i;
}
return -1;
};
Input.getGamepadButton = function(type) {
for (var i = 0; i < 12; ++i) {
if (Input.gamepadMapper[i] === type) return i;
}
return null;
};
Input.isControllerConnected = function() {
if (navigator.getGamepads) {
var gamepads = navigator.getGamepads();
if (gamepads) {
for (var i = 0; i < gamepads.length; i++) {
var gamepad = gamepads[i];
if (gamepad && gamepad.connected) return true;
}
}
}
return false;
};
//=============================================================================
// ConfigManager
//=============================================================================
ConfigManager.gamepadInput = {
0: 'ok',
1: 'cancel',
2: 'shift',
3: 'menu',
4: 'pageup',
5: 'pagedown',
12: 'up',
13: 'down',
14: 'left',
15: 'right',
};
Yanfly.GamepadConfig.ConfigManager_makeData = ConfigManager.makeData;
ConfigManager.makeData = function() {
var config = Yanfly.GamepadConfig.ConfigManager_makeData.call(this);
config.gamepadInput = this.gamepadInput;
return config;
};
Yanfly.GamepadConfig.ConfigManager_applyData = ConfigManager.applyData;
ConfigManager.applyData = function(config) {
Yanfly.GamepadConfig.ConfigManager_applyData.call(this, config);
this.gamepadInput = this.readGamepadConfig(config, 'gamepadInput');
this.applyGamepadConfig();
};
ConfigManager.applyGamepadConfig = function() {
Input.gamepadMapper = this.gamepadInput;
Input.update();
Input.clear();
};
ConfigManager.readGamepadConfig = function(config, name) {
var value = config[name];
if (value !== undefined) {
return value;
} else {
return {
0: 'ok',
1: 'cancel',
2: 'shift',
3: 'menu',
4: 'pageup',
5: 'pagedown',
12: 'up',
13: 'down',
14: 'left',
15: 'right',
};
}
};
//=============================================================================
// Window_MenuCommand
//=============================================================================
Yanfly.GamepadConfig.Window_Options_addGeneralOptions =
Window_Options.prototype.addGeneralOptions;
Window_Options.prototype.addGeneralOptions = function() {
Yanfly.GamepadConfig.Window_Options_addGeneralOptions.call(this);
this.addGameConfigCommand();
};
Window_Options.prototype.addGameConfigCommand = function() {
if (Input.isControllerConnected()) {
this.addCommand(Yanfly.Param.GamepadConfigName, 'gamepadConfig', true);
this._addedController = true;
}
};
Yanfly.GamepadConfig.Window_Options_update =
Window_Options.prototype.update;
Window_Options.prototype.update = function() {
Yanfly.GamepadConfig.Window_Options_update.call(this);
if (this._addedController && !Input.isControllerConnected()) {
this.refresh();
this.height = this.windowHeight();
this.updatePlacement();
}
};
Yanfly.GamepadConfig.Window_Options_drawItem =
Window_Options.prototype.drawItem;
Window_Options.prototype.drawItem = function(index) {
if (this.commandSymbol(index) === 'gamepadConfig') {
var rect = this.itemRectForText(index);
var text = this.commandName(index);
this.resetTextColor();
this.changePaintOpacity(this.isCommandEnabled(index));
this.drawText(text, rect.x, rect.y, rect.width, 'left');
} else {
Yanfly.GamepadConfig.Window_Options_drawItem.call(this, index);
}
};
Yanfly.GamepadConfig.Window_Options_processOk =
Window_Options.prototype.processOk;
Window_Options.prototype.processOk = function() {
if (this.commandSymbol(this.index()) === 'gamepadConfig') {
Window_Command.prototype.processOk.call(this);
} else {
Yanfly.GamepadConfig.Window_Options_processOk.call(this);
}
};
//=============================================================================
// Window_GamepadConfig
//=============================================================================
function Window_GamepadConfig() {
this.initialize.apply(this, arguments);
}
Window_GamepadConfig.prototype = Object.create(Window_Command.prototype);
Window_GamepadConfig.prototype.constructor = Window_GamepadConfig;
Window_GamepadConfig.prototype.initialize = function(helpWindow) {
var wy = helpWindow.height;
Window_Command.prototype.initialize.call(this, 0, wy);
this.setHelpWindow(helpWindow);
this.height = Graphics.boxHeight - wy;
this.refresh();
this.activate();
this.select(0);
};
Window_GamepadConfig.prototype.windowWidth = function() {
return Graphics.boxWidth;
};
Window_GamepadConfig.prototype.makeCommandList = function(index) {
for (var i = 0; i < 6; ++i) {
var text = this.getButtonTypeText(i);
this.addCommand(text, 'button', true);
}
this.addCommand('', 'filler', true);
this.addCommand(this.getButtonTypeText(7), 'reset', true);
this.addCommand(this.getButtonTypeText(8), 'finish', true);
};
Window_GamepadConfig.prototype.drawItem = function(index) {
if (index > 5) {
Window_Command.prototype.drawItem.call(this, index);
} else {
var rect = this.itemRectForText(index);
var align = this.itemTextAlign();
var ww = rect.width / 2;
this.resetTextColor();
this.changePaintOpacity(this.isCommandEnabled(index));
this.drawText(this.commandName(index), rect.x, rect.y, ww, align);
var text = this.getButtonConfig(index);
this.drawText(text, rect.x + ww, rect.y, ww, align);
}
};
Window_GamepadConfig.prototype.getButtonTypeText = function(index) {
if (index === 0) return Yanfly.Param.GamepadConfigOkTx;
if (index === 1) return Yanfly.Param.GamepadConfigCancelTx;
if (index === 2) return Yanfly.Param.GamepadConfigShiftTx;
if (index === 3) return Yanfly.Param.GamepadConfigMenuTx;
if (index === 4) return Yanfly.Param.GamepadConfigPgUpTx;
if (index === 5) return Yanfly.Param.GamepadConfigPgDnTx;
if (index === 7) return Yanfly.Param.GamepadConfigResetTx;
if (index === 8) return Yanfly.Param.GamepadConfigFinishTx;
return '';
};
Window_GamepadConfig.prototype.getButtonConfig = function(index) {
if (index > 5) return '';
var key = this.getButtonKey(index);
var button = Input.getGamepadButton(key);
return Yanfly.Param.GamepadConfigButton.format(button);
};
Window_GamepadConfig.prototype.getButtonKey = function(index) {
if (index === 0) return 'ok';
if (index === 1) return 'cancel';
if (index === 2) return 'shift';
if (index === 3) return 'menu';
if (index === 4) return 'pageup';
if (index === 5) return 'pagedown';
};
Window_GamepadConfig.prototype.itemTextAlign = function() {
return 'center';
};
Window_GamepadConfig.prototype.clearButtonConfig = function(index) {
var rect = this.itemRectForText(index);
rect.x += rect.width / 2;
rect.width /= 2;
this.contents.clearRect(rect.x, rect.y, rect.width, rect.height);
};
Window_GamepadConfig.prototype.updateHelp = function() {
if (!this._helpWindow) return;
switch (this.index()) {
case 0:
this._helpWindow.setText(Yanfly.Param.GamepadConfigOkHelp);
break;
case 1:
this._helpWindow.setText(Yanfly.Param.GamepadConfigCancelHelp);
break;
case 2:
this._helpWindow.setText(Yanfly.Param.GamepadConfigShiftHelp);
break;
case 3:
this._helpWindow.setText(Yanfly.Param.GamepadConfigMenuHelp);
break;
case 4:
this._helpWindow.setText(Yanfly.Param.GamepadConfigPgUpHelp);
break;
case 5:
this._helpWindow.setText(Yanfly.Param.GamepadConfigPgDnHelp);
break;
case 7:
this._helpWindow.setText(Yanfly.Param.GamepadConfigResetHelp);
break;
case 8:
this._helpWindow.setText(Yanfly.Param.GamepadConfigFinishHelp);
break;
default:
this._helpWindow.clear();
break;
}
};
//=============================================================================
// Scene_Options
//=============================================================================
Yanfly.GamepadConfig.Scene_Options_createOptionsWindow =
Scene_Options.prototype.createOptionsWindow;
Scene_Options.prototype.createOptionsWindow = function() {
Yanfly.GamepadConfig.Scene_Options_createOptionsWindow.call(this);
this._optionsWindow.setHandler('gamepadConfig',
this.commandGamepadConfig.bind(this));
};
Scene_Options.prototype.commandGamepadConfig = function() {
SceneManager.push(Scene_GamepadConfig);
};
//=============================================================================
// Scene_GamepadConfig
//=============================================================================
function Scene_GamepadConfig() {
this.initialize.apply(this, arguments);
}
Scene_GamepadConfig.prototype = Object.create(Scene_MenuBase.prototype);
Scene_GamepadConfig.prototype.constructor = Scene_GamepadConfig;
Scene_GamepadConfig.prototype.initialize = function() {
Scene_MenuBase.prototype.initialize.call(this);
};
Scene_GamepadConfig.prototype.create = function() {
Scene_MenuBase.prototype.create.call(this);
this.createHelpWindow();
this.createGamepadConfigWindow();
};
Scene_GamepadConfig.prototype.terminate = function() {
Scene_MenuBase.prototype.terminate.call(this);
ConfigManager.save();
};
Scene_GamepadConfig.prototype.update = function() {
Scene_MenuBase.prototype.update.call(this);
this.updateAttachedController();
this.updateButtonConfig();
this.updateAfterConfig();
};
Scene_GamepadConfig.prototype.updateAttachedController = function() {
if (Input.isControllerConnected()) return;
this.popScene();
};
Scene_GamepadConfig.prototype.createGamepadConfigWindow = function() {
this._configWindow = new Window_GamepadConfig(this._helpWindow);
this._configWindow.setHandler('button', this.commandButton.bind(this));
this._configWindow.setHandler('reset', this.commandReset.bind(this));
this._configWindow.setHandler('finish', this.popScene.bind(this));
this.addWindow(this._configWindow);
};
Scene_GamepadConfig.prototype.commandButton = function() {
var index = this._configWindow.index();
this._configWindow.clearButtonConfig(index);
this._configEnabled = true;
Yanfly.Param.GamepadTimer = 12;
};
Scene_GamepadConfig.prototype.commandReset = function() {
ConfigManager.gamepadInput = {
0: 'ok',
1: 'cancel',
2: 'shift',
3: 'menu',
4: 'pageup',
5: 'pagedown',
12: 'up',
13: 'down',
14: 'left',
15: 'right',
};
ConfigManager.applyGamepadConfig();
this.refreshWindows();
};
Scene_GamepadConfig.prototype.refreshWindows = function() {
this._configWindow.refresh();
this._configWindow.activate();
ConfigManager.save();
};
Scene_GamepadConfig.prototype.updateButtonConfig = function() {
if (!this._configEnabled) return;
var buttonId = Input.getPressedGamepadButton();
if (buttonId > 11) return;
if (buttonId >= 0) this.applyButtonConfig(buttonId);
};
Scene_GamepadConfig.prototype.applyButtonConfig = function(buttonId) {
this._configEnabled = false;
var index = this._configWindow.index();
var newConfig = this._configWindow.getButtonKey(index);
var formerConfig = Input.gamepadMapper[buttonId];
var formerButton = Input.getGamepadButton(newConfig);
ConfigManager.gamepadInput[buttonId] = newConfig;
ConfigManager.gamepadInput[formerButton] = formerConfig;
ConfigManager.applyGamepadConfig();
this._configTimer = 12;
};
Scene_GamepadConfig.prototype.updateAfterConfig = function() {
if (!this._configTimer) return;
if (--this._configTimer > 0) return;
SoundManager.playEquip();
this.refreshWindows();
};
//=============================================================================
// End of File
//=============================================================================