//============================================================================= // 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(); } }; })();