You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
7.3 KiB
Plaintext
174 lines
7.3 KiB
Plaintext
1 month ago
|
#if parseInt(EMSCRIPTEN_VERSION.split('.')[0]) < 2 || (parseInt(EMSCRIPTEN_VERSION.split('.')[0]) == 2 && parseInt(EMSCRIPTEN_VERSION.split('.')[1]) < 0) || (parseInt(EMSCRIPTEN_VERSION.split('.')[0]) == 2 && parseInt(EMSCRIPTEN_VERSION.split('.')[1]) == 0 && parseInt(EMSCRIPTEN_VERSION.split('.')[2]) < 3)
|
||
|
#error "ThirdWeb plugin requires building with Emscripten 2.0.3 and Unity 2021.2 or newer. Please update"
|
||
|
#endif
|
||
|
|
||
|
var WebGLWindow = {
|
||
|
WebGLWindowInit : function() {
|
||
|
},
|
||
|
WebGLWindowGetCanvasName: function() {
|
||
|
var elements = document.getElementsByTagName('canvas');
|
||
|
var returnStr = "";
|
||
|
if(elements.length >= 1)
|
||
|
{
|
||
|
returnStr = elements[0].parentNode.id;
|
||
|
// workaround : for WebGLTemplate:Minimal temp! body element not have id!
|
||
|
if(returnStr == '')
|
||
|
{
|
||
|
returnStr = elements[0].parentNode.id = 'WebGLWindow:Canvas:ParentNode';
|
||
|
}
|
||
|
}
|
||
|
var bufferSize = lengthBytesUTF8(returnStr) + 1;
|
||
|
var buffer = _malloc(bufferSize);
|
||
|
stringToUTF8(returnStr, buffer, bufferSize);
|
||
|
return buffer;
|
||
|
},
|
||
|
WebGLWindowOnFocus: function (cb) {
|
||
|
window.addEventListener('focus', function () {
|
||
|
{{{ makeDynCall("v", "cb") }}}();
|
||
|
});
|
||
|
},
|
||
|
WebGLWindowOnBlur: function (cb) {
|
||
|
window.addEventListener('blur', function () {
|
||
|
{{{ makeDynCall("v", "cb") }}}();
|
||
|
});
|
||
|
},
|
||
|
WebGLWindowOnResize: function(cb) {
|
||
|
window.addEventListener('resize', function () {
|
||
|
{{{ makeDynCall("v", "cb") }}}();
|
||
|
});
|
||
|
},
|
||
|
WebGLWindowInjectFullscreen : function () {
|
||
|
document.makeFullscreen = function (id, keepAspectRatio) {
|
||
|
// get fullscreen object
|
||
|
var getFullScreenObject = function () {
|
||
|
var doc = window.document;
|
||
|
var objFullScreen = doc.fullscreenElement || doc.mozFullScreenElement || doc.webkitFullscreenElement || doc.msFullscreenElement;
|
||
|
return (objFullScreen);
|
||
|
}
|
||
|
|
||
|
// handle fullscreen event
|
||
|
var eventFullScreen = function (callback) {
|
||
|
document.addEventListener("fullscreenchange", callback, false);
|
||
|
document.addEventListener("webkitfullscreenchange", callback, false);
|
||
|
document.addEventListener("mozfullscreenchange", callback, false);
|
||
|
document.addEventListener("MSFullscreenChange", callback, false);
|
||
|
}
|
||
|
|
||
|
var removeEventFullScreen = function (callback) {
|
||
|
document.removeEventListener("fullscreenchange", callback, false);
|
||
|
document.removeEventListener("webkitfullscreenchange", callback, false);
|
||
|
document.removeEventListener("mozfullscreenchange", callback, false);
|
||
|
document.removeEventListener("MSFullscreenChange", callback, false);
|
||
|
}
|
||
|
|
||
|
var div = document.createElement("div");
|
||
|
document.body.appendChild(div);
|
||
|
|
||
|
// save canvas size to originSize
|
||
|
var canvas = document.getElementsByTagName('canvas')[0];
|
||
|
var originSize =
|
||
|
{
|
||
|
width : canvas.style.width,
|
||
|
height : canvas.style.height,
|
||
|
};
|
||
|
|
||
|
var fullscreenRoot = document.getElementById(id);
|
||
|
|
||
|
// when build with minimal default template
|
||
|
// the fullscreenRoot is <body>
|
||
|
var isBody = fullscreenRoot.tagName.toLowerCase() == "body";
|
||
|
if(isBody)
|
||
|
{
|
||
|
// swip the id to div
|
||
|
div.id = fullscreenRoot.id;
|
||
|
fullscreenRoot.id = "";
|
||
|
// overwrite the fullscreen root
|
||
|
fullscreenRoot = canvas;
|
||
|
}
|
||
|
|
||
|
var beforeParent = fullscreenRoot.parentNode;
|
||
|
var beforeStyle = window.getComputedStyle(fullscreenRoot);
|
||
|
var beforeWidth = parseInt(beforeStyle.width);
|
||
|
var beforeHeight = parseInt(beforeStyle.height);
|
||
|
|
||
|
// to keep element index after fullscreen
|
||
|
var index = Array.from(beforeParent.children).findIndex(function (v) { return v == fullscreenRoot; });
|
||
|
div.appendChild(fullscreenRoot);
|
||
|
|
||
|
// recv fullscreen function
|
||
|
var fullscreenFunc = function () {
|
||
|
if (getFullScreenObject()) {
|
||
|
if (keepAspectRatio) {
|
||
|
var ratio = Math.min(window.screen.width / beforeWidth, window.screen.height / beforeHeight);
|
||
|
var width = Math.floor(beforeWidth * ratio);
|
||
|
var height = Math.floor(beforeHeight * ratio);
|
||
|
|
||
|
fullscreenRoot.style.width = width + 'px';
|
||
|
fullscreenRoot.style.height = height + 'px';
|
||
|
} else {
|
||
|
fullscreenRoot.style.width = window.screen.width + 'px';
|
||
|
fullscreenRoot.style.height = window.screen.height + 'px';
|
||
|
}
|
||
|
|
||
|
// make canvas size 100% to fix screen size
|
||
|
canvas.style.width = "100%";
|
||
|
canvas.style.height = "100%";
|
||
|
|
||
|
} else {
|
||
|
fullscreenRoot.style.width = beforeWidth + 'px';
|
||
|
fullscreenRoot.style.height = beforeHeight + 'px';
|
||
|
beforeParent.insertBefore(fullscreenRoot, Array.from(beforeParent.children)[index]);
|
||
|
|
||
|
if(isBody)
|
||
|
{
|
||
|
beforeParent.id = div.id;
|
||
|
}
|
||
|
|
||
|
div.parentNode.removeChild(div);
|
||
|
|
||
|
// set canvas size to origin size
|
||
|
canvas.style.width = originSize.width;
|
||
|
canvas.style.height = originSize.height;
|
||
|
|
||
|
// remove this function
|
||
|
removeEventFullScreen(fullscreenFunc);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// listener fullscreen event
|
||
|
eventFullScreen(fullscreenFunc);
|
||
|
|
||
|
if (div.mozRequestFullScreen) div.mozRequestFullScreen();
|
||
|
else if (div.webkitRequestFullScreen) div.webkitRequestFullScreen();
|
||
|
else if (div.msRequestFullscreen) div.msRequestFullscreen();
|
||
|
else if (div.requestFullscreen) div.requestFullscreen();
|
||
|
}
|
||
|
},
|
||
|
MakeFullscreen : function (str) {
|
||
|
document.makeFullscreen(UTF8ToString(str));
|
||
|
},
|
||
|
ExitFullscreen : function() {
|
||
|
// get fullscreen object
|
||
|
var doc = window.document;
|
||
|
var objFullScreen = doc.fullscreenElement || doc.mozFullScreenElement || doc.webkitFullscreenElement || doc.msFullscreenElement;
|
||
|
|
||
|
if (objFullScreen)
|
||
|
{
|
||
|
if (document.exitFullscreen) document.exitFullscreen();
|
||
|
else if (document.msExitFullscreen) document.msExitFullscreen();
|
||
|
else if (document.mozCancelFullScreen) document.mozCancelFullScreen();
|
||
|
else if (document.webkitExitFullscreen) document.webkitExitFullscreen();
|
||
|
}
|
||
|
},
|
||
|
IsFullscreen : function() {
|
||
|
// get fullscreen object
|
||
|
var doc = window.document;
|
||
|
var objFullScreen = doc.fullscreenElement || doc.mozFullScreenElement || doc.webkitFullscreenElement || doc.msFullscreenElement;
|
||
|
|
||
|
// check full screen elemenet is not null!
|
||
|
return objFullScreen != null;
|
||
|
},
|
||
|
}
|
||
|
|
||
|
mergeInto(LibraryManager.library, WebGLWindow);
|