Files
Superproject1/js/plugins/ConfigureRootElement.js
T
2023-04-11 22:11:31 +02:00

266 lines
9.0 KiB
JavaScript

//=============================================================================
// ConfigureRootElement.js
// Version: 1.0.0
//----------------------------------------------------------------------------
// Copyright (c) 2016 DeNA
// RPGMV 1.0.0
//=============================================================================
//=============================================================================
/*:
* @plugindesc v1.00 任意のroot要素にゲーム本体の要素を追加できるようにするpluginです
* @author DeNA
*
* @param ---General---
* @default
*
* @param Root Element Id
* @default
*
* @help
* ============================================================================
* Introduction
* ============================================================================
*
* このpluginはgameの要素を追加するroot要素を指定できます。
*
* # ConfigureRootElement.js
*
* ## 使い方
* * GUI上からConfigureRootElement の"Root Element Id"に任意のDOMのidを指定する * ことでゲームが表示される領域をコントロールすることができます。
*
* ## 実装
*
* ### RootElementの指定
* 以下の部分を参照ください。
*
* ```
* var Parameters = PluginManager.parameters('ConfigureRootElement');
* var RootElementId = String(Parameters['Root Element Id']);
* var GAME_ROOT_ELEMENT_NODE_KEY = 'ConfigureRootElement_Root_Element_Node_Key';
* try {
* if (RootElementId) {
* PluginManager.setParameters(GAME_ROOT_ELEMENT_NODE_KEY, document.getElementById(RootElementId));
* } else if (!(PluginManager.parameters(GAME_ROOT_ELEMENT_NODE_KEY) instanceof HTMLElement)) {
* PluginManager.setParameters(GAME_ROOT_ELEMENT_NODE_KEY, document.body);
* }
* } catch (e) {
* console.info('Caution! set default root element, document.body.');
* PluginManager.setParameters(GAME_ROOT_ELEMENT_NODE_KEY, document.body);
* }
* ```
*
* ### 表示位置のコントロール
*
* * rpg_core.jsのGraphicsの以下の関数をオーバーライドすることで表示位置をコントロールしています。(rpg_core.jsに変更が入った場合はご注意ください。)
* * Graphics.pageToCanvasX
* * Graphics._createErrorPrinter
* * Graphics._createCanvas
* * Graphics._createVideo
* * Graphics._createUpperCanvas
* * Graphics._createModeBox
* * Graphics._createFontLoader
* * Graphics._disableTextSelection
* * Graphics._disableContextMenu
* * Graphics._requestFullScreen
*
* ============================================================================
* Changelog
* ============================================================================
*
* Version 1.00:
* - Finished plugin!
*/
//=============================================================================
(function() {
//-----------------------------------------------------------------------------
// setup
var Parameters = PluginManager.parameters('ConfigureRootElement');
var RootElementId = String(Parameters['Root Element Id']);
var GAME_ROOT_ELEMENT_NODE_KEY = 'ConfigureRootElement_Root_Element_Node_Key';
try {
if (RootElementId) {
PluginManager.setParameters(GAME_ROOT_ELEMENT_NODE_KEY, document.getElementById(RootElementId));
} else if (!(PluginManager.parameters(GAME_ROOT_ELEMENT_NODE_KEY) instanceof HTMLElement)) {
PluginManager.setParameters(GAME_ROOT_ELEMENT_NODE_KEY, document.body);
}
} catch (e) {
console.info('Caution! set default root element, document.body.');
PluginManager.setParameters(GAME_ROOT_ELEMENT_NODE_KEY, document.body);
}
//-----------------------------------------------------------------------------
// override Graphics
/**
* Converts an x coordinate on the page to the corresponding
* x coordinate on the canvas area.
*
* @static
* @method pageToCanvasX
* @param {Number} x The x coordinate on the page to be converted
* @return {Number} The x coordinate on the canvas area
*/
Graphics.pageToCanvasX = function(x) {
if (this._canvas) {
var left = this._canvas.getBoundingClientRect().left;
return Math.round((x - left) / this._realScale);
} else {
return 0;
}
};
/**
* @static
* @method _createErrorPrinter
* @private
*/
Graphics._createErrorPrinter = function() {
this._errorPrinter = document.createElement('p');
this._errorPrinter.id = 'ErrorPrinter';
this._updateErrorPrinter();
PluginManager.parameters(GAME_ROOT_ELEMENT_NODE_KEY).appendChild(this._errorPrinter);
};
/**
* @static
* @method _createCanvas
* @private
*/
Graphics._createCanvas = function() {
this._canvas = document.createElement('canvas');
this._canvas.id = 'GameCanvas';
this._updateCanvas();
PluginManager.parameters(GAME_ROOT_ELEMENT_NODE_KEY).appendChild(this._canvas);
};
/**
* @static
* @method _createVideo
* @private
*/
Graphics._createVideo = function() {
this._video = document.createElement('video');
this._video.id = 'GameVideo';
this._video.style.opacity = 0;
this._updateVideo();
PluginManager.parameters(GAME_ROOT_ELEMENT_NODE_KEY).appendChild(this._video);
};
/**
* @static
* @method _createUpperCanvas
* @private
*/
Graphics._createUpperCanvas = function() {
this._upperCanvas = document.createElement('canvas');
this._upperCanvas.id = 'UpperCanvas';
this._updateUpperCanvas();
PluginManager.parameters(GAME_ROOT_ELEMENT_NODE_KEY).appendChild(this._upperCanvas);
};
/**
* @static
* @method _createModeBox
* @private
*/
Graphics._createModeBox = function() {
var box = document.createElement('div');
box.id = 'modeTextBack';
box.style.position = 'absolute';
box.style.left = '5px';
box.style.top = '5px';
box.style.width = '119px';
box.style.height = '58px';
box.style.background = 'rgba(0,0,0,0.2)';
box.style.zIndex = 9;
box.style.opacity = 0;
var text = document.createElement('div');
text.id = 'modeText';
text.style.position = 'absolute';
text.style.left = '0px';
text.style.top = '41px';
text.style.width = '119px';
text.style.fontSize = '12px';
text.style.fontFamily = 'monospace';
text.style.color = 'white';
text.style.textAlign = 'center';
text.style.textShadow = '1px 1px 0 rgba(0,0,0,0.5)';
text.innerHTML = this.isWebGL() ? 'WebGL mode' : 'Canvas mode';
PluginManager.parameters(GAME_ROOT_ELEMENT_NODE_KEY).appendChild(box);
box.appendChild(text);
this._modeBox = box;
};
/**
* @static
* @method _createFontLoader
* @param {String} name
* @private
*/
Graphics._createFontLoader = function(name) {
var div = document.createElement('div');
var text = document.createTextNode('.');
div.style.fontFamily = name;
div.style.fontSize = '0px';
div.style.color = 'transparent';
div.style.position = 'absolute';
div.style.margin = 'auto';
div.style.top = '0px';
div.style.left = '0px';
div.style.width = '1px';
div.style.height = '1px';
div.appendChild(text);
PluginManager.parameters(GAME_ROOT_ELEMENT_NODE_KEY).appendChild(div);
};
/**
* @static
* @method _disableTextSelection
* @private
*/
Graphics._disableTextSelection = function() {
var body = PluginManager.parameters(GAME_ROOT_ELEMENT_NODE_KEY);
body.style.userSelect = 'none';
body.style.webkitUserSelect = 'none';
body.style.msUserSelect = 'none';
body.style.mozUserSelect = 'none';
};
/**
* @static
* @method _disableContextMenu
* @private
*/
Graphics._disableContextMenu = function() {
var elements = PluginManager.parameters(GAME_ROOT_ELEMENT_NODE_KEY).getElementsByTagName('*');
var oncontextmenu = function() { return false; };
for (var i = 0; i < elements.length; i++) {
elements[i].oncontextmenu = oncontextmenu;
}
};
/**
* @static
* @method _requestFullScreen
* @private
*/
Graphics._requestFullScreen = function() {
var element = PluginManager.parameters(GAME_ROOT_ELEMENT_NODE_KEY);
if (element.requestFullScreen) {
element.requestFullScreen();
} else if (element.mozRequestFullScreen) {
element.mozRequestFullScreen();
} else if (element.webkitRequestFullScreen) {
element.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT);
} else if (element.msRequestFullscreen) {
element.msRequestFullscreen();
}
};
})();