266 lines
9.0 KiB
JavaScript
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();
|
|
}
|
|
};
|
|
})();
|