PIXI Controls: Add to English version

This commit is contained in:
OleSTEEP 2024-02-08 23:40:50 +03:00
parent 3f88db76b6
commit 562910b1c4
6 changed files with 881 additions and 40 deletions

View file

@ -4204,7 +4204,7 @@ var $plugins = [
},
{
"name": "DisableMouse",
"status": true,
"status": false,
"description": "Disables mouse clicks.",
"parameters":
{}
@ -4230,4 +4230,17 @@ var $plugins = [
"parameters":
{}
},
{
"name": "VND_ONSControls",
"status": true,
"description": "On Screen Controls",
"parameters":
{
"zIndex": 1488,
"gamepadId": "Xbox Wireless Controller (STANDARD GAMEPAD Vendor: 045e Product: 02e0)",
"gamepadIndex": 1,
"buttonsScale": 1.2,
"buttonsOpacity": 0.8
}
},
];

View file

@ -213,7 +213,7 @@ Scene_SplashScreens.prototype.updateSplash = function() {
};
};
if (Input.isTriggered('ok')) {
if (Input.isTriggered('ok') || TouchInput.isTriggered()) {
if (Galv.ASPLASH.splashSkip == 'one') {
this._ticker = this.splash().timer;
this._fadeIn = false;

View file

@ -112,6 +112,8 @@ Scene_OmoriTitleScreen.prototype.create = function () {
// Super Call
Scene_BaseEX.prototype.create.call(this);
// ONSControls
ONSControls.initialize();
this.createFilters();
// Create Background
@ -132,6 +134,7 @@ Scene_OmoriTitleScreen.prototype.create = function () {
this.createGeneralOptionsWindow();
this.createAudioOptionsWindow();
this.createControllerOptionsWindow();
this.createONSControlsOptionsWindow(); // ONSControls Settings
this.createSystemOptionsWindow();
this.createExitPromptWindow();
this.createOptionCategoriesWindow();

View file

@ -0,0 +1,814 @@
// by VienDesu! Poring Team 2024
//=============================================================================
// ** ONSControls
//=============================================================================
class ONSControls {};
//=============================================================================
// * Plugin options
//=============================================================================
ONSControls.options = PluginManager.parameters('VND_ONSControls');
//=============================================================================
// * Controls canvas
//=============================================================================
ONSControls.createCanvas = function() {
const canvas = new PIXI.Application({
width: innerWidth,
height: innerHeight,
autoResize: true,
resolution: devicePixelRatio,
transparent: true
});
document.body.appendChild(canvas.view);
canvas.view.id = "ControlsCanvas";
canvas.view.style.zIndex = this.options.zIndex;
canvas.view.style.position = "absolute";
canvas.view.style.left = 0;
canvas.view.style.right = 0;
canvas.view.style.down = 0;
canvas.view.style.top = 0;
canvas.stage.interactive = true;
var idleInterval = setInterval(ONSControls.playIdleAnimation, 60000);
canvas.stage.on("pointerdown", () => {
this.stopIdleAnimation();
clearInterval(idleInterval);
idleInterval = setInterval(ONSControls.playIdleAnimation, 60000);
})
canvas.vh = (persent) => {
return canvas.screen.height * persent;
}
this._controlsCanvas = canvas;
}
//=============================================================================
// * A/B/X/Y Buttons
//=============================================================================
ONSControls.createButtons = function() {
const container = new PIXI.Container();
const buttons = [
new PIXI.Sprite.fromImage("js/porting/assets/omori_a_button.png"),
new PIXI.Sprite.fromImage("js/porting/assets/omori_x_button.png"),
new PIXI.Sprite.fromImage("js/porting/assets/omori_b_button.png"),
new PIXI.Sprite.fromImage("js/porting/assets/omori_y_button.png")
]
buttons[0].on("pointerdown", (event) => {this.sendEvent(event, "BUTTON_A")})
.on("pointerup", (event) => {this.sendEvent(event, "BUTTON_A")});
buttons[1].on("pointerdown", (event) => {this.sendEvent(event, "BUTTON_X")})
.on("pointerup", (event) => {this.sendEvent(event, "BUTTON_X")});
buttons[2].on("pointerdown", (event) => {this.sendEvent(event, "BUTTON_B")})
.on("pointerup", (event) => {this.sendEvent(event, "BUTTON_B")});
buttons[3].on("pointerdown", (event) => {this.sendEvent(event, "BUTTON_Y")})
.on("pointerup", (event) => {this.sendEvent(event, "BUTTON_Y")});
for (btn of buttons) {
btn.anchor.set(0.5);
container.addChild(btn);
}
this._controlsCanvas.stage.addChild(container);
this._buttonsContainer = container;
}
//=============================================================================
// * DPad Buttons
//=============================================================================
ONSControls.createDPad = function() {
const container = new PIXI.Sprite.fromImage("js/porting/assets/omori_dpad.png");
container.anchor.set(0.5);
container.interactive = true;
container.cursor = "pointer";
container.pressed = false;
container.pressed_button = null;
container.down = function(x, y) {
if (Math.abs(x) > container.width / 2 || Math.abs(y) > container.height / 2) {
return; // Pointer out of dpad, ignoring event
}
var threshold = container.width / 5;
var button;
if (y < -threshold) {
button = "DPAD_UP";
} else if (y > threshold) {
button = "DPAD_DOWN";
}
if (x < -threshold) {
button = "DPAD_LEFT";
} else if (x > threshold) {
button = "DPAD_RIGHT";
}
if (button !== container.pressed_button && button !== undefined) {
if (container.pressed_button !== null) {
ONSControls.sendEvent({type: "pointerup"}, container.pressed_button);
}
container.pressed = true;
container.pressed_button = button;
ONSControls.sendEvent({type: "pointerdown"}, button);
}
}
container.upAll = function() {
container.pressed = false;
container.pressed_button = null;
ONSControls.sendEvent({type: "pointerup"}, "DPAD_RIGHT");
ONSControls.sendEvent({type: "pointerup"}, "DPAD_DOWN");
ONSControls.sendEvent({type: "pointerup"}, "DPAD_UP");
ONSControls.sendEvent({type: "pointerup"}, "DPAD_LEFT");
}
container.on("pointerup", () => {container.upAll();})
container.on("pointerupoutside", () => {container.upAll();})
container.on("pointerdown", (event) => {
var x = event.data.global.x - this._dPadContainer.x;
var y = event.data.global.y - this._dPadContainer.y;
container.down(x, y);
})
container.on("pointermove", (event) => {
if (container.pressed) {
// DPad pressed, set up button
var x = event.data.global.x - this._dPadContainer.x;
var y = event.data.global.y - this._dPadContainer.y;
container.down(x, y);
} else {
// DPad not pressed, clear all buttons
container.upAll();
}
})
this._controlsCanvas.stage.addChild(container);
this._dPadContainer = container;
}
//=============================================================================
// * LB/RB Buttons
//=============================================================================
ONSControls.createBumpers = function() {
const LBsprite = new PIXI.Sprite.fromImage("js/porting/assets/omori_lb_button.png");
const RBsprite = new PIXI.Sprite.fromImage("js/porting/assets/omori_rb_button.png");
LBsprite.anchor.set(0.5);
LBsprite.interactive = true;
LBsprite.on("pointerdown", (event) => {this.sendEvent(event, "BUTTON_LB")})
.on("pointerup", (event) => {this.sendEvent(event, "BUTTON_LB")})
RBsprite.anchor.set(0.5);
RBsprite.interactive = true;
RBsprite.on("pointerdown", (event) => {this.sendEvent(event, "BUTTON_RB")})
.on("pointerup", (event) => {this.sendEvent(event, "BUTTON_RB")})
this._controlsCanvas.stage.addChild(LBsprite);
this._controlsCanvas.stage.addChild(RBsprite);
this._LBsprite = LBsprite;
this._RBsprite = RBsprite;
}
//=============================================================================
// * Show Button
//=============================================================================
ONSControls.createAdditionalButtons = function() {
const showButton = new PIXI.Sprite.fromImage("js/porting/assets/omori_show_button.png");
showButton.anchor.set(0.5);
showButton.interactive = true;
showButton.on("pointerdown", this.toggle)
this._controlsCanvas.stage.addChild(showButton);
this._showButton = showButton;
}
//=============================================================================
// * Check idle animation (spinning buttons)
//=============================================================================
ONSControls.idleAnimation = function() {
ONSControls._buttonsContainer.rotation -= 0.1;
ONSControls._dPadContainer.rotation += 0.1;
ONSControls._LBsprite.rotation += 0.1;
ONSControls._RBsprite.rotation -= 0.1;
ONSControls._showButton.rotation += 0.1;
}
//=============================================================================
// * Check idle animation (spinning buttons)
//=============================================================================
ONSControls.isIdlePlaying = false;
//=============================================================================
// * Play idle animation (spinning buttons)
//=============================================================================
ONSControls.playIdleAnimation = function() {
if (!ONSControls.isIdlePlaying) {
ONSControls.isIdlePlaying = true;
ONSControls._controlsCanvas.ticker.add(ONSControls.idleAnimation);
}
}
//=============================================================================
// * Stop idle animation (spinning buttons)
//=============================================================================
ONSControls.stopIdleAnimation = function() {
ONSControls._controlsCanvas.ticker.remove(ONSControls.idleAnimation);
ONSControls._buttonsContainer.rotation = 0;
ONSControls._dPadContainer.rotation = 0;
ONSControls._LBsprite.rotation = 0;
ONSControls._RBsprite.rotation = 0;
ONSControls._showButton.rotation = 0;
}
//=============================================================================
// * Send event to virtual controller
//=============================================================================
ONSControls.sendEvent = function(event, button) {
const key = VirtualGamepad.keys.find((element) => element.name == button);
if (event.type === "pointerdown") {
console.log(`ONSControls: Pointer down for ${button}`); // Remove in release
}
VirtualGamepad.gamepad.buttons[key.code].pressed = event.type === "pointerdown" ? true : false
}
//=============================================================================
// * Toggle controls
//=============================================================================
ONSControls.toggle = function() {
const elements = [
ONSControls._buttonsContainer, ONSControls._dPadContainer,
ONSControls._LBsprite, ONSControls._RBsprite
]
for (elem of elements) {
if (elem.visible) {
elem.visible = false;
} else {
elem.visible = true;
}
}
}
//=============================================================================
// * Update controls parameters
//=============================================================================
ONSControls.updateButtons = function() {
// Update A/B/X/Y
const buttonsSize = ConfigManager.ONSConfig.buttonsSize;
const container = this._buttonsContainer;
const buttons = container.children;
for (btn of buttons) {
btn.width = buttonsSize;
btn.height = buttonsSize;
btn.interactive = true;
}
buttons[0].y = buttonsSize / 2 + buttonsSize / 4;
buttons[1].x = -(buttonsSize / 2 + buttonsSize / 4);
buttons[2].x = buttonsSize / 2 + buttonsSize / 4;
buttons[3].y = -(buttonsSize / 2 + buttonsSize / 4);
container.width = buttonsSize * 2;
container.height = buttonsSize * 2;
container.alpha = ConfigManager.ONSConfig.buttonsOpacity;
container.position.set(ConfigManager.ONSConfig.buttonsX, ConfigManager.ONSConfig.buttonsY);
// Update DPAD
const dPadSize = ConfigManager.ONSConfig.dPadSize;
const dpadContainer = this._dPadContainer;
dpadContainer.width = dPadSize;
dpadContainer.height = dPadSize;
dpadContainer.alpha = ConfigManager.ONSConfig.buttonsOpacity;
dpadContainer.position.set(ConfigManager.ONSConfig.dPadX, ConfigManager.ONSConfig.dPadY);
// Update LB/RB
const LBsprite = this._LBsprite;
const RBsprite = this._RBsprite;
LBsprite.position.set(ConfigManager.ONSConfig.LBX, ConfigManager.ONSConfig.LBY);
LBsprite.alpha = ConfigManager.ONSConfig.buttonsOpacity;
LBsprite.width = ConfigManager.ONSConfig.bumpersWidth;
LBsprite.height = ConfigManager.ONSConfig.bumpersHeight;
RBsprite.position.set(ConfigManager.ONSConfig.RBX, ConfigManager.ONSConfig.RBY);
RBsprite.alpha = ConfigManager.ONSConfig.buttonsOpacity;
RBsprite.width = ConfigManager.ONSConfig.bumpersWidth;
RBsprite.height = ConfigManager.ONSConfig.bumpersHeight;
// Update additional
const showButton = this._showButton;
showButton.position.set(ConfigManager.ONSConfig.showX, ConfigManager.ONSConfig.showY);
showButton.width = ConfigManager.ONSConfig.additonalSize;
showButton.height = ConfigManager.ONSConfig.additonalSize;
showButton.alpha = ConfigManager.ONSConfig.buttonsOpacity;
console.log("ONSControls: Controls updated");
}
ONSControls.disableTouch = function() {
TouchInput.update = function() {return;};
}
//=============================================================================
// ** VirtualGamepad
//=============================================================================
class VirtualGamepad {};
//=============================================================================
// * Virtual gamepad mapping
//=============================================================================
VirtualGamepad.keys = [
{name: "BUTTON_A", code: 0},
{name: "BUTTON_B", code: 1},
{name: "BUTTON_X", code: 2},
{name: "BUTTON_Y", code: 3},
{name: "BUTTON_LB", code: 4},
{name: "BUTTON_RB", code: 5},
{name: "BUTTON_LT", code: 6},
{name: "BUTTON_RT", code: 7},
{name: "BUTTON_SELECT", code: 8},
{name: "BUTTON_START", code: 9},
{name: "DPAD_UP", code: 12},
{name: "DPAD_DOWN", code: 13},
{name: "DPAD_LEFT", code: 14},
{name: "DPAD_RIGHT", code: 15},
{name: "BACK", code: 16}
]
//=============================================================================
// * Define gamepad
//=============================================================================
VirtualGamepad.gamepad = {
id: ONSControls.options.gamepadId || 'builtin',
index: ONSControls.options.gamepadIndex || 0,
connected: true,
timestamp: Math.floor(Date.now() / 1000),
mapping: "standard",
axes: [0, 0, 0, 0],
buttons: Array.apply(0, Array(17)).map(function () {
return {
pressed: false,
touched: false,
value: 0
};
})
}
//=============================================================================
// * Replace first gamepad with virtual
//=============================================================================
VirtualGamepad.replaceNavigator = function() {
var gamepads = navigator.getGamepads();
navigator.getGamepads = function() {
var index = ONSControls.options.gamepadIndex;
gamepads[index] = VirtualGamepad.gamepad;
return gamepads;
}
}
//=============================================================================
// * Connect virtual gamepad
//=============================================================================
VirtualGamepad.originalNavigator = navigator.getGamepads;
VirtualGamepad.connect = function () {
this.replaceNavigator();
const event = new Event("gamepadconnected");
event.gamepad = this.gamepad;
window.dispatchEvent(event);
console.log(`ONSControls: Virtual gamepad connected with index ${this.gamepad.index}`);
}
//=============================================================================
// * Disconnect virtual gamepad
//=============================================================================
VirtualGamepad.disconnect = function () {
const event = new Event("gamepaddisconnected");
this.gamepad.axes = [0, 0, 0, 0];
this.gamepad.buttons = Array.apply(0, Array(17)).map(function () {
return {
pressed: false,
touched: false,
value: 0
};
})
window.dispatchEvent(event);
//VirtualGamepad.originalNavigator.getGamepads.call();
console.log(`ONSControls: Virtual gamepad disconnected with index ${this.gamepad.index}`);
}
//=============================================================================
// ** ConfigManager
//=============================================================================
ONSControls.configManager = function() {
//=============================================================================
// * Class Variables
//=============================================================================
ConfigManager.ONSConfig ||= {};
ConfigManager.ONSConfig.buttonsScale ||= this.options.buttonsScale;
ConfigManager.ONSConfig.buttonsOpacity ||= this.options.buttonsOpacity;
ConfigManager.ONSConfig.controlsOffsetX ||= 32;
ConfigManager.ONSConfig.controlsOffsetY ||= 16;
ConfigManager.ONSConfig.buttonsSize ||= ONSControls._controlsCanvas.vh(0.18) * ConfigManager.ONSConfig.buttonsScale;
ConfigManager.ONSConfig.buttonsX ||= ONSControls._controlsCanvas.screen.width - (ConfigManager.ONSConfig.buttonsSize + ConfigManager.ONSConfig.controlsOffsetX);;
ConfigManager.ONSConfig.buttonsY ||= ONSControls._controlsCanvas.screen.height - (ConfigManager.ONSConfig.buttonsSize + ConfigManager.ONSConfig.controlsOffsetY);
ConfigManager.ONSConfig.dPadSize ||= ONSControls._controlsCanvas.vh(0.36) * ConfigManager.ONSConfig.buttonsScale;
ConfigManager.ONSConfig.dPadX ||= ConfigManager.ONSConfig.dPadSize / 2 + ConfigManager.ONSConfig.controlsOffsetX;
ConfigManager.ONSConfig.dPadY ||= ONSControls._controlsCanvas.screen.height - (ConfigManager.ONSConfig.dPadSize / 2 + ConfigManager.ONSConfig.controlsOffsetY);
ConfigManager.ONSConfig.bumpersOffsetX ||= 16;
ConfigManager.ONSConfig.bumpersOffsetY ||= ONSControls._controlsCanvas.vh(0.30);
ConfigManager.ONSConfig.bumpersWidth ||= ONSControls._controlsCanvas.vh(0.188) * ConfigManager.ONSConfig.buttonsScale;
ConfigManager.ONSConfig.bumpersHeight ||= ONSControls._controlsCanvas.vh(0.12) * ConfigManager.ONSConfig.buttonsScale;
ConfigManager.ONSConfig.LBX ||= ConfigManager.ONSConfig.bumpersOffsetX + ConfigManager.ONSConfig.bumpersWidth / 2;
ConfigManager.ONSConfig.LBY ||= (ConfigManager.ONSConfig.bumpersOffsetY + ConfigManager.ONSConfig.bumpersHeight / 2);
ConfigManager.ONSConfig.RBX ||= ONSControls._controlsCanvas.screen.width - (ConfigManager.ONSConfig.bumpersOffsetX + ConfigManager.ONSConfig.bumpersWidth / 2);
ConfigManager.ONSConfig.RBY ||= (ConfigManager.ONSConfig.bumpersOffsetY + ConfigManager.ONSConfig.bumpersHeight / 2);
ConfigManager.ONSConfig.additionalOffset ||= ONSControls._controlsCanvas.vh(0.03);
ConfigManager.ONSConfig.additonalSize ||= ONSControls._controlsCanvas.vh(0.06) * ConfigManager.ONSConfig.buttonsScale;
ConfigManager.ONSConfig.showX ||= ONSControls._controlsCanvas.screen.width - (ConfigManager.ONSConfig.additonalSize / 2 + ConfigManager.ONSConfig.additionalOffset);
ConfigManager.ONSConfig.showY ||= ONSControls._controlsCanvas.screen.height - (ConfigManager.ONSConfig.additonalSize / 2 + ConfigManager.ONSConfig.additionalOffset);
//=============================================================================
// * Restore defaults
//=============================================================================
var _ConfigManager_restoreDefaultConfig = ConfigManager.restoreDefaultConfig;
ConfigManager.restoreDefaultConfig = function () {
_ConfigManager_restoreDefaultConfig.apply(this, arguments);
const fs = require("fs");j
const path = require('path');
var base = path.dirname(process.mainModule.filename);
base = path.join(base, 'save/');
if (fs.existsSync(base + "config.rpgsave")) { fs.unlinkSync(base + "config.rpgsave"); }
ConfigManager.ONSConfig.buttonsScale = this.options.buttonsScale;
ConfigManager.ONSConfig.buttonsOpacity = this.options.buttonsOpacity;
ConfigManager.ONSConfig.controlsOffsetX = 32;
ConfigManager.ONSConfig.controlsOffsetY = 16;
ConfigManager.ONSConfig.buttonsSize = ONSControls._controlsCanvas.vh(0.18) * ConfigManager.ONSConfig.buttonsScale;
ConfigManager.ONSConfig.buttonsX = ONSControls._controlsCanvas.screen.width - (ConfigManager.ONSConfig.buttonsSize + ConfigManager.ONSConfig.controlsOffsetX);;
ConfigManager.ONSConfig.buttonsY = ONSControls._controlsCanvas.screen.height - (ConfigManager.ONSConfig.buttonsSize + ConfigManager.ONSConfig.controlsOffsetY);
ConfigManager.ONSConfig.dPadSize = ONSControls._controlsCanvas.vh(0.36) * ConfigManager.ONSConfig.buttonsScale;
ConfigManager.ONSConfig.dPadX = ConfigManager.ONSConfig.dPadSize / 2 + ConfigManager.ONSConfig.controlsOffsetX;
ConfigManager.ONSConfig.dPadY = ONSControls._controlsCanvas.screen.height - (ConfigManager.ONSConfig.dPadSize / 2 + ConfigManager.ONSConfig.controlsOffsetY);
ConfigManager.ONSConfig.bumpersOffsetX = 16;
ConfigManager.ONSConfig.bumpersOffsetY = ONSControls._controlsCanvas.vh(0.30);
ConfigManager.ONSConfig.bumpersWidth = ONSControls._controlsCanvas.vh(0.188) * ConfigManager.ONSConfig.buttonsScale;
ConfigManager.ONSConfig.bumpersHeight = ONSControls._controlsCanvas.vh(0.12) * ConfigManager.ONSConfig.buttonsScale;
ConfigManager.ONSConfig.LBX = ConfigManager.ONSConfig.bumpersOffsetX + ConfigManager.ONSConfig.bumpersWidth / 2;
ConfigManager.ONSConfig.LBY = (ConfigManager.ONSConfig.bumpersOffsetY + ConfigManager.ONSConfig.bumpersHeight / 2);
ConfigManager.ONSConfig.RBX = ONSControls._controlsCanvas.screen.width - (ConfigManager.ONSConfig.bumpersOffsetX + ConfigManager.ONSConfig.bumpersWidth / 2);
ConfigManager.ONSConfig.RBY = (ConfigManager.ONSConfig.bumpersOffsetY + ConfigManager.ONSConfig.bumpersHeight / 2);
ConfigManager.ONSConfig.additionalOffset = ONSControls._controlsCanvas.vh(0.03);
ConfigManager.ONSConfig.additonalSize = ONSControls._controlsCanvas.vh(0.06) * ConfigManager.ONSConfig.buttonsScale;
ConfigManager.ONSConfig.showX = ONSControls._controlsCanvas.screen.width - (ConfigManager.ONSConfig.additonalSize / 2 + ConfigManager.ONSConfig.additionalOffset);
ConfigManager.ONSConfig.showY = ONSControls._controlsCanvas.screen.height - (ConfigManager.ONSConfig.additonalSize / 2 + ConfigManager.ONSConfig.additionalOffset);
ConfigManager.applyData(ConfigManager);
let needsRestore = confirm(LanguageManager.languageData().text.System.plugins.optionsMenu.alertMessages["restoreGeneral"]);
if (!!needsRestore) { DataManager._restoreGlobalInfo(); }
}
//=============================================================================
// * Update all controls data
//=============================================================================
ConfigManager.ONSConfig.updateData = function() {
ConfigManager.ONSConfig.buttonsScale = ConfigManager.ONSConfig.buttonsScale;
ConfigManager.ONSConfig.buttonsOpacity = ConfigManager.ONSConfig.buttonsOpacity;
ConfigManager.ONSConfig.controlsOffsetX = ConfigManager.ONSConfig.controlsOffsetX;
ConfigManager.ONSConfig.controlsOffsetY = ConfigManager.ONSConfig.controlsOffsetY;
ConfigManager.ONSConfig.buttonsSize = ONSControls._controlsCanvas.vh(0.18) * ConfigManager.ONSConfig.buttonsScale;
ConfigManager.ONSConfig.buttonsX = ONSControls._controlsCanvas.screen.width - (ConfigManager.ONSConfig.buttonsSize + ConfigManager.ONSConfig.controlsOffsetX);;
ConfigManager.ONSConfig.buttonsY = ONSControls._controlsCanvas.screen.height - (ConfigManager.ONSConfig.buttonsSize + ConfigManager.ONSConfig.controlsOffsetY);
ConfigManager.ONSConfig.dPadSize = ONSControls._controlsCanvas.vh(0.36) * ConfigManager.ONSConfig.buttonsScale;
ConfigManager.ONSConfig.dPadX = ConfigManager.ONSConfig.dPadSize / 2 + ConfigManager.ONSConfig.controlsOffsetX;
ConfigManager.ONSConfig.dPadY = ONSControls._controlsCanvas.screen.height - (ConfigManager.ONSConfig.dPadSize / 2 + ConfigManager.ONSConfig.controlsOffsetY);
ConfigManager.ONSConfig.bumpersOffsetX = ConfigManager.ONSConfig.bumpersOffsetX;
ConfigManager.ONSConfig.bumpersOffsetY = ConfigManager.ONSConfig.bumpersOffsetY;
ConfigManager.ONSConfig.bumpersWidth = ONSControls._controlsCanvas.vh(0.188) * ConfigManager.ONSConfig.buttonsScale;
ConfigManager.ONSConfig.bumpersHeight = ONSControls._controlsCanvas.vh(0.12) * ConfigManager.ONSConfig.buttonsScale;
ConfigManager.ONSConfig.LBX = ConfigManager.ONSConfig.bumpersOffsetX + ConfigManager.ONSConfig.bumpersWidth / 2;
ConfigManager.ONSConfig.LBY = (ConfigManager.ONSConfig.bumpersOffsetY + ConfigManager.ONSConfig.bumpersHeight / 2);
ConfigManager.ONSConfig.RBX = ONSControls._controlsCanvas.screen.width - (ConfigManager.ONSConfig.bumpersOffsetX + ConfigManager.ONSConfig.bumpersWidth / 2);
ConfigManager.ONSConfig.RBY = (ConfigManager.ONSConfig.bumpersOffsetY + ConfigManager.ONSConfig.bumpersHeight / 2);
ConfigManager.ONSConfig.additionalOffset = ConfigManager.ONSConfig.additionalOffset;
ConfigManager.ONSConfig.additonalSize = ONSControls._controlsCanvas.vh(0.06) * ConfigManager.ONSConfig.buttonsScale;
ConfigManager.ONSConfig.showX = ONSControls._controlsCanvas.screen.width - (ConfigManager.ONSConfig.additonalSize / 2 + ConfigManager.ONSConfig.additionalOffset);
ConfigManager.ONSConfig.showY = ONSControls._controlsCanvas.screen.height - (ConfigManager.ONSConfig.additonalSize / 2 + ConfigManager.ONSConfig.additionalOffset);
ONSControls.updateButtons();
}
}
//=============================================================================
// * Original functions
//=============================================================================
var ConfigManager_makeData = ConfigManager.makeData;
var ConfigManager_applyData = ConfigManager.applyData;
//=============================================================================
// * Make Data
//=============================================================================
var _ConfigManager_makeData = ConfigManager.makeData;
ConfigManager.makeData = function () {
var config = _ConfigManager_makeData.apply(this, arguments);
config.ONSConfig = {};
config.ONSConfig.controlsOffsetX = this.ONSConfig.controlsOffsetX;
config.ONSConfig.controlsOffsetY = this.ONSConfig.controlsOffsetY;
config.ONSConfig.buttonsScale = this.ONSConfig.buttonsScale;
config.ONSConfig.buttonsOpacity = this.ONSConfig.buttonsOpacity;
config.ONSConfig.additionalOffset = this.ONSConfig.additionalOffset;
config.ONSConfig.buttonsSize = this.ONSConfig.buttonsSize;
config.ONSConfig.buttonsX = this.ONSConfig.buttonsX;
config.ONSConfig.buttonsY = this.ONSConfig.buttonsY;
config.ONSConfig.dPadSize = this.ONSConfig.dPadSize;
config.ONSConfig.dPadX = this.ONSConfig.dPadX;
config.ONSConfig.dPadY = this.ONSConfig.dPadY;
config.ONSConfig.bumpersWidth = this.ONSConfig.bumpersWidth;
config.ONSConfig.bumpersHeight = this.ONSConfig.bumpersHeight;
config.ONSConfig.bumpersOffsetX = this.ONSConfig.bumpersOffsetX;
config.ONSConfig.bumpersOffsetY = this.ONSConfig.bumpersOffsetY;
config.ONSConfig.LBX = this.ONSConfig.LBX;
config.ONSConfig.LBY = this.ONSConfig.LBY;
config.ONSConfig.RBX = this.ONSConfig.RBX;
config.ONSConfig.RBY = this.ONSConfig.RBY;
config.ONSConfig.additionalOffset = this.ONSConfig.additionalOffset;
config.ONSConfig.additonalSize = this.ONSConfig.additonalSize;
config.ONSConfig.showX = this.ONSConfig.showX;
config.ONSConfig.showY = this.ONSConfig.showY;
return config;
}
//=============================================================================
// * Apply Data
//=============================================================================
var _ConfigManager_applyData = ConfigManager.applyData;
ConfigManager.applyData = function (config) {
_ConfigManager_applyData.apply(this, arguments);
try {
this.ONSConfig = config.ONSConfig;
this.ONSConfig.controlsOffsetX = config.ONSConfig.controlsOffsetX;
this.ONSConfig.controlsOffsetY = config.ONSConfig.controlsOffsetY;
this.ONSConfig.buttonsScale = config.ONSConfig.buttonsScale;
this.ONSConfig.buttonsOpacity = config.ONSConfig.buttonsOpacity;
this.ONSConfig.additionalOffset = config.ONSConfig.additionalOffset;
this.ONSConfig.buttonsSize = config.ONSConfig.buttonsSize;
this.ONSConfig.buttonsX = config.ONSConfig.buttonsX;
this.ONSConfig.buttonsY = config.ONSConfig.buttonsY;
this.ONSConfig.dPadSize = config.ONSConfig.dPadSize;
this.ONSConfig.dPadX = config.ONSConfig.dPadX;
this.ONSConfig.dPadY = config.ONSConfig.dPadY;
this.ONSConfig.bumpersWidth = config.ONSConfig.bumpersWidth;
this.ONSConfig.bumpersHeight = config.ONSConfig.bumpersHeight;
this.ONSConfig.bumpersOffsetX = config.ONSConfig.bumpersOffsetX;
this.ONSConfig.bumpersOffsetY = config.ONSConfig.bumpersOffsetY;
this.ONSConfig.LBX = config.ONSConfig.LBX;
this.ONSConfig.LBY = config.ONSConfig.LBY;
this.ONSConfig.RBX = config.ONSConfig.RBX;
this.ONSConfig.RBY = config.ONSConfig.RBY;
this.ONSConfig.additionalOffset = config.ONSConfig.additionalOffset;
this.ONSConfig.additonalSize = config.ONSConfig.additonalSize;
this.ONSConfig.showX = config.ONSConfig.showX;
this.ONSConfig.showY = config.ONSConfig.showY;
} catch {
console.log("ONSControls loaded in first time, skip config reading.");
}
}
//=============================================================================
// ** Window_OmoMenuOptionsONSControls
//-----------------------------------------------------------------------------
// The window for showing ONSControls options in the OMORI options menu
//=============================================================================
function Window_OmoMenuOptionsONSControls() { this.initialize.apply(this, arguments); }
Window_OmoMenuOptionsONSControls.prototype = Object.create(Window_Selectable.prototype);
Window_OmoMenuOptionsONSControls.prototype.constructor = Window_OmoMenuOptionsONSControls;
//=============================================================================
// * Object Initialization
//=============================================================================
Window_OmoMenuOptionsONSControls.prototype.initialize = function () {
// Make Options List
this.makeOptionsList();
// Super Call
Window_Selectable.prototype.initialize.call(this, 0, 0, this.windowWidth(), this.windowHeight());
// Create Option Bars
this.createOptionBars();
this.select(0);
// Refresh
this.refresh();
};
//=============================================================================
// * Settings
//=============================================================================
Window_OmoMenuOptionsONSControls.prototype.isUsingCustomCursorRectSprite = function () { return true; };
Window_OmoMenuOptionsONSControls.prototype.standardPadding = function () { return 8; }
Window_OmoMenuOptionsONSControls.prototype.windowWidth = function () { return Graphics.width - 20; };
Window_OmoMenuOptionsONSControls.prototype.windowHeight = function () { return 318; }
Window_OmoMenuOptionsONSControls.prototype.maxItems = function () { return this._optionsList.length; };
Window_OmoMenuOptionsONSControls.prototype.maxCols = function () { return 1; };
Window_OmoMenuOptionsONSControls.prototype.itemHeight = function () { return 75; };
Window_OmoMenuOptionsONSControls.prototype.spacing = function () { return 5; };
Window_OmoMenuOptionsONSControls.prototype.customCursorRectXOffset = function () { return 15; }
Window_OmoMenuOptionsONSControls.prototype.customCursorRectYOffset = function () { return -18; }
//=============================================================================
// * Height
//=============================================================================
Object.defineProperty(Window_OmoMenuOptionsONSControls.prototype, 'height', {
get: function () { return this._height; },
set: function (value) {
this._height = value;
this._refreshAllParts();
// If Option Sprites Exist
if (this._optionSprites) {
for (var i = 0; i < this._optionSprites.length; i++) {
var sprite = this._optionSprites[i];
sprite.visible = value >= (sprite.y + sprite.height)
};
}
},
configurable: true
});
//=============================================================================
// * Create Option Bars
//=============================================================================
Window_OmoMenuOptionsONSControls.prototype.createOptionBars = function () {
// Initialize Option Sprites
this._optionSprites = [];
// Create Bitmap
var bitmap = new Bitmap(400, 40);
// Iterate from 0 to 100
for (var i = 0; i < 100; i++) {
var x = (i + 4) + (i % 2);;
var x = (i * 4);
bitmap.fillRect(x, 0, 2, 20, 'rgba(100, 100, 100, 1)');
bitmap.fillRect(x, 20, 2, 20, 'rgba(255, 255, 255, 1)');
};
// Create Sprites
for (var i = 0; i < 8; i++) {
var sprite = new Sprite(bitmap);
var index = Math.floor(i / 2);
var rect = this.itemRect(index);
sprite.x = rect.x + 60;
sprite.y = rect.y + 50;
// sprite.y += (i % 2) * 20;
sprite.setFrame(0, (i % 2) * 20, bitmap.width, 20);
this._optionSprites.push(sprite);
this.addChild(sprite);
};
};
//=============================================================================
// * Make Options List
//=============================================================================
Window_OmoMenuOptionsONSControls.prototype.makeOptionsList = function () {
// Get Text
//var text = LanguageManager.getPluginText('optionsMenu', 'audio');
var text = {
buttonsScale: {help: "Change on-screen controls scale.", text: "CONTROLS SCALE", persent: true, maxValue: 500},
buttonsOpacity: {help: "Change on-screen controls opacity.", text: "CONTROLS OPACITY", persent: true, maxValue: 100},
bumpersOffsetX: {help: "Change x coordinate offset of LB/RB.", text: "LB/RB X OFFSET", persent: false, maxValue: 500},
bumpersOffsetY: {help: "Change y coordinate offset of LB/RB.", text: "LB/RB Y OFFSET", persent: false, maxValue: 500}
}
// Get Config
var config = ConfigManager;
// Get Options
var options = Object.keys(text);
// Initialize Options List
this._optionsList = [];
// Go Through Options
for (var i = 0; i < options.length; i++) {
// Get Name
var name = options[i];
// Get Data
var data = text[name];
// Add Option
if (data.persent) {
this._optionsList.push({ header: data.text + ':', config: name, option: ConfigManager.ONSConfig[name] * 100, helpText: data.help, persent: data.persent, maxValue: data.maxValue });
} else {
this._optionsList.push({ header: data.text + ':', config: name, option: ConfigManager.ONSConfig[name], helpText: data.help, persent: data.persent, maxValue: data.maxValue });
}
};
}
//=============================================================================
// * Draw Item
//=============================================================================
Window_OmoMenuOptionsONSControls.prototype.drawItem = function (index) {
// Get Item Rect
var rect = this.itemRect(index);
// Get Data
var data = this._optionsList[index];
// If Data Exists
if (data) {
// Draw Header
this.contents.drawText(data.header, rect.x + 50, rect.y, rect.width, 24);
// Update option bar
this.updateOptionBar(index, data.option, data.persent);
};
};
//=============================================================================
// * Call Update Help
//=============================================================================
Window_OmoMenuOptionsONSControls.prototype.callUpdateHelp = function () {
// Run Original Function
Window_Selectable.prototype.callUpdateHelp.call(this);
// If Help Window Exist
if (this._helpWindow) {
this._helpWindow.setText(this._optionsList[this.index()].helpText);
};
};
//=============================================================================
// * Cursor Right
//=============================================================================
Window_OmoMenuOptionsONSControls.prototype.cursorRight = function (wrap) {
// Super Call
Window_Selectable.prototype.cursorRight.call(this, wrap);
// Get Data
var data = this._optionsList[this.index()];
// Get Data
if (data) {
var rate = Input.isLongPressed('right') ? 5 : 5
data.option = Math.min(data.option + rate, data.maxValue);
this.updateOptionBar(this.index(), data.option, data.persent);
};
};
//=============================================================================
// * Cursor Left
//=============================================================================
Window_OmoMenuOptionsONSControls.prototype.cursorLeft = function (wrap) {
// Super Call
Window_Selectable.prototype.cursorLeft.call(this, wrap);
// Get Data
var data = this._optionsList[this.index()];
// Get Data
if (data) {
var rate = Input.isLongPressed('left') ? 5 : 5
data.option = Math.max(data.option - rate, 0);
this.updateOptionBar(this.index(), data.option, data.persent);
};
};
//=============================================================================
// * Cursor Left
//=============================================================================
Window_OmoMenuOptionsONSControls.prototype.updateOptionBar = function (index, option, persent) {
// Get Data
var data = this._optionsList[index];
// Get Back and Front Sprite
var front = this._optionSprites[(index * 2) + 1];
front._frame.width = option / (data.maxValue / 100) * 4;
front._refresh();
// Get Itm Rect
var rect = this.itemRect(index);
rect.x += 415; rect.y += 27; rect.width = 100; rect.height = 40;
this.contents.clearRect(rect.x, rect.y, rect.width, rect.height);
if (persent) {
this.contents.drawText(option + '%', rect.x, rect.y, rect.width, rect.height, 'right');
// Set Option
ConfigManager.ONSConfig[data.config] = option / 100;
} else {
this.contents.drawText(Math.round(option) + 'px', rect.x, rect.y, rect.width, rect.height, 'right');
// Set Option
ConfigManager.ONSConfig[data.config] = option;
}
ConfigManager.ONSConfig.updateData();
};
//=============================================================================
// * Add to options menus
//=============================================================================
Window_OmoMenuOptionsONSControls.prototype.add = function () {
Scene_OmoMenuOptions.prototype.createONSControlsOptionsWindow = function () {
// Create ONSControls Options Window
this._onscontrolsOptionsWindow = new Window_OmoMenuOptionsONSControls();
this._onscontrolsOptionsWindow.x = 10;
this._onscontrolsOptionsWindow.y = 10;
this._onscontrolsOptionsWindow.setHandler('cancel', this.onOptionWindowCancel.bind(this));
this._onscontrolsOptionsWindow.height = 0;
this._onscontrolsOptionsWindow.visible = false;
this.addChild(this._onscontrolsOptionsWindow);
};
Scene_OmoMenuOptions.prototype.optionWindows = function () {
return [this._generalOptionsWindow, this._audioOptionsWindow, this._controlOptionsWindow, this._onscontrolsOptionsWindow, this._systemOptionsWindow]
}
Scene_OmoriTitleScreen.prototype.createONSControlsOptionsWindow = function () {
// Create Audio Options Window
this._onscontrolsOptionsWindow = new Window_OmoMenuOptionsONSControls();
this._onscontrolsOptionsWindow.setHandler('cancel', this.onOptionWindowCancel.bind(this));
this._onscontrolsOptionsWindow.visible = false;
this._optionsWindowsContainer.addChild(this._onscontrolsOptionsWindow);
};
Scene_OmoriTitleScreen.prototype.optionWindows = function () {
return [this._generalOptionsWindow, this._audioOptionsWindow, this._controlOptionsWindow, this._onscontrolsOptionsWindow, this._systemOptionsWindow]
}
Scene_OmoMenuOptions.prototype.create = function () {
// Super Call
Scene_OmoMenuBase.prototype.create.call(this);
this.createHelpWindow();
this.createStatusWindows();
this.createGoldWindow();
this.createGeneralOptionsWindow();
this.createAudioOptionsWindow();
this.createControllerOptionsWindow();
this.createONSControlsOptionsWindow();
this.createSystemOptionsWindow();
this.createOptionCategoriesWindow();
// this.createHelpWindow();
this.createCommandWindow();
this.createExitPromptWindow();
};
Window_OmoMenuOptionsCategory.prototype.standardPadding = function () { return 7; }
Window_OmoMenuOptionsCategory.prototype.maxCols = function () { return 5; };
Window_OmoMenuOptionsCategory.prototype.makeCommandList = function () {
const localization = LanguageManager.getMessageData("XX_BLUE.Omori_Mainmenu_Sceneoptions").commands
this.addCommand(localization[0], 'ok');
this.addCommand(localization[1], 'ok');
// this.addCommand('GAMEPLAY', 'ok');
this.addCommand(localization[2], 'ok');
this.addCommand("ONSControls", 'ok');
this.addCommand(localization[3], 'ok');
};
}
//=============================================================================
// * Plugin init
//=============================================================================
ONSControls.initialize = function() {
console.log("ONSControls: Initialized");
this.createCanvas();
this.configManager();
this.createButtons();
this.createDPad();
this.createBumpers();
this.createAdditionalButtons();
this.updateButtons();
this.disableTouch();
VirtualGamepad.connect();
Window_OmoMenuOptionsONSControls.prototype.add();
}

View file

@ -50,10 +50,6 @@ Graphics.printLoadingError = function (url) {
}
};
Graphics._switchFPSMeter = function() {
};
Graphics._switchFullScreen = function () {
this._requestFullScreen();
};
@ -97,10 +93,6 @@ Input._setupEventHandlers = function () {
document.addEventListener('keyup', this._onKeyUp.bind(this));
};
TouchInput.update = function () {
return;
};
//=============================================================================
// * Patches for rpg_managers
//=============================================================================

View file

@ -66,6 +66,24 @@ function create_fps_button() {
}
}
function create_new_controls() {
// Remove in release
const NewBtn = document.createElement("div");
NewBtn.className = "new-button";
document.body.appendChild(NewBtn);
NewBtn.addEventListener("pointerdown", () => {
var controls_canvas = document.getElementById("ControlsCanvas");
if (controls_canvas === null) {
document.getElementById("show-gamepad").remove();
ONSControls.initialize();
} else {
controls_canvas.remove();
create_show_button();
}
});
}
function create_dpad_buttons() {
// Скуфting elements
const DivDMain = document.createElement("div");
@ -283,36 +301,37 @@ function setupKey(id, key, keyCode) {
window.addEventListener('load', () => {
create_fps_button(); // Remove in release
if (navigator.getGamepads().length == 0) {
create_control_buttons();
create_dpad_buttons();
create_show_button();
create_switch_button();
setupButtons();
setupDpad();
}
// create_new_controls(); // Remove in release
// if (navigator.getGamepads().length == 0) {
// create_control_buttons();
// create_dpad_buttons();
// create_show_button();
// create_switch_button();
// setupButtons();
// setupDpad();
// }
});
window.addEventListener('gamepadconnected', () => {
var DivBMain = document.getElementById("gamepad-div");
var DivB_LB = document.getElementById("buttonW");
var DivB_RB = document.getElementById("buttonQ");
var DivDMain = document.getElementById("dpad-div");
var DivJoy = document.getElementById("joyDiv");
var ShowB = document.getElementById("switch");
// window.addEventListener('gamepadconnected', () => {
// var DivBMain = document.getElementById("gamepad-div");
// var DivB_LB = document.getElementById("buttonW");
// var DivB_RB = document.getElementById("buttonQ");
// var DivDMain = document.getElementById("dpad-div");
// var DivJoy = document.getElementById("joyDiv");
// var ShowB = document.getElementById("switch");
if (DivBMain !== null) {
DivBMain.remove();
DivB_LB.remove();
DivB_RB.remove();
ShowB.remove();
switch (currentControlElement) {
case "dpad":
DivDMain.remove();
break;
case "joystick":
DivJoy.remove();
break;
}
}
});
// if (DivBMain !== null) {
// DivBMain.remove();
// DivB_LB.remove();
// DivB_RB.remove();
// ShowB.remove();
// switch (currentControlElement) {
// case "dpad":
// DivDMain.remove();
// break;
// case "joystick":
// DivJoy.remove();
// break;
// }
// }
// });