chicken_dy/Assets/WebGLTemplates/WXTemplate2020/index.html

860 lines
24 KiB
HTML

<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width,height=device-height,inital-scale=1.0,maximum-scale=1.0,user-scalable=no" />
<title>Unity WebGL Player | {{{ PRODUCT_NAME }}}</title>
<style>
*{border:0;margin:0;padding:0}
</style>
</head>
<body>
<div id="unity-container" class="unity-desktop">
<canvas id="unity-canvas" width=960 height=600 style="width:960px;height:600px;"></canvas>
<div id="unity-loading-bar">
<div id="unity-logo"></div>
<div id="unity-progress-bar-empty">
<div id="unity-progress-bar-full"></div>
</div>
</div>
<div id="unity-mobile-warning" style="display:none;">
WebGL builds are not supported on mobile devices.
</div>
<div id="unity-footer" style="display:none;">
<div id="unity-webgl-logo"></div>
<div id="unity-fullscreen-button"></div>
<div id="unity-build-title">2021</div>
</div>
</div>
<script>
var buildUrl = "Build";
var loaderUrl = buildUrl + "/{{{ LOADER_FILENAME }}}";
var config = {
dataUrl: buildUrl + "/{{{ DATA_FILENAME }}}",
frameworkUrl: buildUrl + "/{{{ FRAMEWORK_FILENAME }}}",
codeUrl: buildUrl + "/{{{ CODE_FILENAME }}}",
symbolsUrl: buildUrl + "/{{{ SYMBOLS_FILENAME }}}",
streamingAssetsUrl: "StreamingAssets",
companyName: "{{{ COMPANY_NAME }}}",
productName: "{{{ PRODUCT_NAME }}}",
productVersion: "{{{ PRODUCT_VERSION }}}",
};
</script>
<script>
document.addEventListener('DOMContentLoaded',function(){
var container = document.querySelector("#unity-container");
var canvas = document.querySelector("#unity-canvas");
var loadingBar = document.querySelector("#unity-loading-bar");
var progressBarFull = document.querySelector("#unity-progress-bar-full");
var fullscreenButton = document.querySelector("#unity-fullscreen-button");
var mobileWarning = document.querySelector("#unity-mobile-warning");
window.canvas = canvas;
// By default Unity keeps WebGL canvas render target size matched with
// the DOM size of the canvas element (scaled by window.devicePixelRatio)
// Set this to false if you want to decouple this synchronization from
// happening inside the engine, and you would instead like to size up
// the canvas DOM size and WebGL render target sizes yourself.
// config.matchWebGLToCanvasSize = false;
loadingBar.style.display = "block";
var script = document.createElement("script");
script.src = loaderUrl;
script.onload = () => {
createUnityInstance(canvas, config, (progress) => {
progressBarFull.style.width = 100 * progress + "%";
}).then((unityInstance) => {
loadingBar.style.display = "none";
fullscreenButton.onclick = () => {
unityInstance.SetFullscreen(1);
};
gameInstance = unityInstance;
}).catch((message) => {
alert(message);
});
};
document.body.appendChild(script);
canvas.style.width = window.innerWidth+"px";
canvas.style.height = window.innerHeight+"px";
});
</script>
<script>
var storage = {};
function getStorageValue(key, defaultValue){
var v = storage[key];
if(v === null){
return defaultValue;
}
if(typeof v!== 'undefined'){
return v;
}
return defaultValue;
}
var WXWASMSDK = {
WXInitializeSDK(){
gameInstance.SendMessage("WXSDKManagerHandler",'Inited', 200);
},
VibrateShort: function (s, f, c) {},
VibrateLong: function (s, f, c) {},
WXStorageSetIntSync: function (key, value) {
storage[key] = value;
},
WXStorageGetIntSync: function (key, defaultValue) {
return getStorageValue(key, defaultValue);
},
WXStorageSetFloatSync: function (key, value) {
storage[key] = value;
},
WXStorageGetFloatSync: function (key, defaultValue) {
return getStorageValue(key, defaultValue);
},
WXStorageSetStringSync: function (key, value) {
storage[key] = value;
},
WXStorageGetStringSync: function (key, defaultValue) {
return getStorageValue(key, defaultValue || '');
},
WXStorageDeleteAllSync: function () {
storage = {};
},
WXStorageDeleteKeySync: function (key) {
delete storage[key];
},
WXStorageHasKeySync: function (key) {
return typeof storage[key] === 'undefined';
},
WXLogin: function (s, f, c) {},
WXCheckSession: function (s, f, c) {},
WXAuthorize: function (scope, s, f, c) {},
WXGetUserInfo: function (withCredentials, lang, s, f, c) {},
WXGetSystemLanguage: function(){},
WXGetSystemInfo: function(s,f,c){},
WXGetSystemInfoSync: function(){
return "";
},
WXGetAccountInfoSync: function(){
return '{"miniProgramRaw": "{}", "pluginRaw": "{}"}';
},
WXCreateUserInfoButton: function(x, y, width, height, lang, withCredentials){},
WXUserInfoButtonShow: function(id){},
WXUserInfoButtonDestroy: function(id){},
WXUserInfoButtonHide: function(id){},
WXUserInfoButtonOffTap: function(id){},
WXUserInfoButtonOnTap: function(id){},
WXUpdateShareMenu: function ( conf, s, f, c) {},
WXShowShareMenu: function ( conf, s, f, c) {},
WXHideShareMenu: function ( conf, s, f, c) {},
WXShareAppMessage: function ( conf ) {},
WXSetMessageToFriendQuery: function (num ) {},
WXOnShareAppMessage: function (conf,isPromise) {},
WXOnShareAppMessageResolve: function ( conf ) {},
WXOnShareTimeline: function ( conf, needCallback ) {},
WXOnAddToFavorites: function ( conf, needCallback ) {},
WXOffShareTimeline: function ( ) {},
WXOffShareAppMessage: function ( ) {},
WXOffAddToFavorites: function ( ) {},
WXGetShareInfo: function (conf, s, f, c) {},
WXAuthPrivateMessage: function (conf, s, f, c) {},
WXCreateBannerAd: function (conf) {
return Math.random().toString(32);
},
WXCreateRewardedVideoAd: function (conf) {
return Math.random().toString(32);
},
WXCreateInterstitialAd: function (conf) {
return Math.random().toString(32);
},
WXCreateGridAd: function (conf) {},
WXCreateCustomAd: function (conf) {},
WXADStyleChange: function (id,key,value) {},
WXShowAd: function (id) {},
WXHideAd: function (id) {},
WXADGetStyleValue: function (id,key) {},
WXADDestroy: function (id) {},
WXADLoad: function (id,succ,fail) {},
WXGetLaunchOptionsSync: function () {},
WXToTempFilePathSync: function (conf) {},
WXGetUserDataPath: function () {},
WXWriteFileSync: function (filePath, data, encoding) {},
WXCreateFixedBottomMiddleBannerAd: function (adUnitId, adIntervals, height) {
return Math.random().toString(32);
},
WXReportGameStart:function(){},
WXSetGameStage: function() {},
WXReportGameStageCostTime: function(costTime, extJsonStr) {},
WXReportGameStageError: function(errorType, errStr, extJsonStr) {},
WXWriteLog: function(str) {},
WXWriteWarn: function(str) {},
WXHideLoadingPage: function() {},
WXPreloadConcurrent: function() {},
WXSetUserCloudStorage:function(){},
WXCreateInnerAudioContext:function(){
return Math.random().toString(32);
},
WXInnerAudioContextSetBool:function(){},
WXInnerAudioContextSetString:function(){},
WXInnerAudioContextSetFloat:function(){},
WXInnerAudioContextGetFloat:function(){},
WXInnerAudioContextGetBool:function(){},
WXInnerAudioContextPlay:function(){},
WXInnerAudioContextPause:function(){},
WXInnerAudioContextStop:function(){},
WXInnerAudioContextDestroy:function(){},
WXInnerAudioContextSeek:function(){},
WXInnerAudioContextAddListener:function(id,key){
if(key==="onCanplay"){
setTimeout(function(){
gameInstance.SendMessage("WXSDKManagerHandler",'OnAudioCallback',JSON.stringify({
callbackId:id,
errMsg:key
}));
},100)
}
},
WXInnerAudioContextRemoveListener:function(){},
WXPreDownloadAudios:function(paths,id){
gameInstance.SendMessage("WXSDKManagerHandler",'WXPreDownloadAudiosCallback',JSON.stringify({
callbackId:id.toString(),
errMsg:"0"
}));
},
WXCreateVideo:function(){
return Math.random().toString(32);
},
WXVideoPlay:function(){},
WXVideoAddListener:function(){},
WXVideoDestroy:function(){},
WXVideoExitFullScreen:function(){},
WXVideoPause:function(){},
WXVideoRequestFullScreen:function (){},
WXVideoSeek:function(){},
WXVideoStop:function(){},
WXVideoRemoveListener:function(){},
WXShowOpenData:function(){},
WXDownloadTexture(id,type,callback){
var Infos = {
"Texture":GameGlobal.TextureConfig,
"SpriteAtlas":GameGlobal.SpriteAtlasConfig,
}[type];
if(!Infos[id]){
return console.error(type + "映射id 不存在",id);
}
var path = Infos[id].p;
var cid = type+"_"+id;
if(downloadedTextures[cid]){
if(downloadedTextures[cid].data){
callback();
}else{
console.error(type + "映射id data 不存在!",id);
}
}else if(downloadingTextures[cid]){
downloadingTextures[cid].push(callback);
}else{
downloadingTextures[cid] = [callback];
textureHandler.downloadFile(id,type,GameGlobal.AUDIO_PREFIX.replace(/\/$/,'')+'/'+path.replace(/\\/g,'/'));
}
},
WXShowKeyboard(){},
WXUpdateKeyboard(){},
WXHideKeyboard(){},
WXGetNetworkType(){},
WXCreateGameClubButton() {
return Math.random().toString(32);
},
WXGameClubButtonDestroy() {},
WXGameClubButtonHide() {},
WXGameClubButtonShow() {},
WXGameClubButtonAddListener() {},
WXGameClubButtonRemoveListener() {},
WXNavigateToMiniProgram() {},
WXGameClubButtonSetProperty() {},
WXGameClubStyleChangeInt() {},
WXGameClubStyleChangeStr() {},
WXExitMiniProgram() {},
WXSetKeepScreenOn(){},
WXIsCloudTest(){ return false;},
WXUncaughtException(){},
WX_AddCard(conf, callbackId){
},
WX_AuthPrivateMessage(conf, callbackId){
},
WX_Authorize(conf, callbackId){
},
WX_CheckHandoffEnabled(conf, callbackId){
},
WX_CheckIsUserAdvisedToRest(conf, callbackId){
},
WX_CheckSession(conf, callbackId){
},
WX_ChooseImage(conf, callbackId){
},
WX_CloseBLEConnection(conf, callbackId){
},
WX_CloseBluetoothAdapter(conf, callbackId){
},
WX_CloseSocket(conf, callbackId){
},
WX_CreateBLEConnection(conf, callbackId){
},
WX_CreateBLEPeripheralServer(conf, callbackId){
},
WX_ExitMiniProgram(conf, callbackId){
},
WX_ExitVoIPChat(conf, callbackId){
},
WX_FaceDetect(conf, callbackId){
},
WX_GetAvailableAudioSources(conf, callbackId){
},
WX_GetBLEDeviceCharacteristics(conf, callbackId){
},
WX_GetBLEDeviceRSSI(conf, callbackId){
},
WX_GetBLEDeviceServices(conf, callbackId){
},
WX_GetBLEMTU(conf, callbackId){
},
WX_GetBatteryInfo(conf, callbackId){
},
WX_GetBeacons(conf, callbackId){
},
WX_GetBluetoothAdapterState(conf, callbackId){
},
WX_GetBluetoothDevices(conf, callbackId){
},
WX_GetChannelsLiveInfo(conf, callbackId){
},
WX_GetChannelsLiveNoticeInfo(conf, callbackId){
},
WX_GetClipboardData(conf, callbackId){
},
WX_GetConnectedBluetoothDevices(conf, callbackId){
},
WX_GetExtConfig(conf, callbackId){
},
WX_GetFileInfo(conf, callbackId){
},
WX_GetFriendCloudStorage(conf, callbackId){
},
WX_GetGroupCloudStorage(conf, callbackId){
},
WX_GetGroupEnterInfo(conf, callbackId){
},
WX_GetGroupInfo(conf, callbackId){
},
WX_GetLocalIPAddress(conf, callbackId){
},
WX_GetLocation(conf, callbackId){
},
WX_GetNetworkType(conf, callbackId){
},
WX_GetPotentialFriendList(conf, callbackId){
},
WX_GetScreenBrightness(conf, callbackId){
},
WX_GetSetting(conf, callbackId){
},
WX_GetShareInfo(conf, callbackId){
},
WX_GetStorageInfo(conf, callbackId){
},
WX_GetSystemInfo(conf, callbackId){
},
WX_GetSystemInfoAsync(conf, callbackId){
},
WX_GetUserCloudStorage(conf, callbackId){
},
WX_GetUserCloudStorageKeys(conf, callbackId){
},
WX_GetUserInfo(conf, callbackId){
},
WX_GetUserInteractiveStorage(conf, callbackId){
},
WX_GetWeRunData(conf, callbackId){
},
WX_HideKeyboard(conf, callbackId){
},
WX_HideLoading(conf, callbackId){
},
WX_HideShareMenu(conf, callbackId){
},
WX_HideToast(conf, callbackId){
},
WX_InitFaceDetect(conf, callbackId){
},
WX_IsBluetoothDevicePaired(conf, callbackId){
},
WX_JoinVoIPChat(conf, callbackId){
},
WX_Login(conf, callbackId){
},
WX_MakeBluetoothPair(conf, callbackId){
},
WX_ModifyFriendInteractiveStorage(conf, callbackId){
},
WX_NavigateToMiniProgram(conf, callbackId){
},
WX_NotifyBLECharacteristicValueChange(conf, callbackId){
},
WX_OpenBluetoothAdapter(conf, callbackId){
},
WX_OpenCard(conf, callbackId){
},
WX_OpenChannelsActivity(conf, callbackId){
},
WX_OpenChannelsEvent(conf, callbackId){
},
WX_OpenChannelsLive(conf, callbackId){
},
WX_OpenChannelsUserProfile(conf, callbackId){
},
WX_OpenCustomerServiceConversation(conf, callbackId){
},
WX_OpenSetting(conf, callbackId){
},
WX_PreviewImage(conf, callbackId){
},
WX_PreviewMedia(conf, callbackId){
},
WX_ReadBLECharacteristicValue(conf, callbackId){
},
WX_RemoveStorage(conf, callbackId){
},
WX_RemoveUserCloudStorage(conf, callbackId){
},
WX_RequestMidasFriendPayment(conf, callbackId){
},
WX_RequestMidasPayment(conf, callbackId){
},
WX_RequestSubscribeMessage(conf, callbackId){
},
WX_RequestSubscribeSystemMessage(conf, callbackId){
},
WX_SaveFileToDisk(conf, callbackId){
},
WX_SaveImageToPhotosAlbum(conf, callbackId){
},
WX_ScanCode(conf, callbackId){
},
WX_SendSocketMessage(conf, callbackId){
},
WX_SetBLEMTU(conf, callbackId){
},
WX_SetClipboardData(conf, callbackId){
},
WX_SetEnableDebug(conf, callbackId){
},
WX_SetInnerAudioOption(conf, callbackId){
},
WX_SetKeepScreenOn(conf, callbackId){
},
WX_SetMenuStyle(conf, callbackId){
},
WX_SetScreenBrightness(conf, callbackId){
},
WX_SetStatusBarStyle(conf, callbackId){
},
WX_SetUserCloudStorage(conf, callbackId){
},
WX_ShareMessageToFriend(conf, callbackId){
},
WX_ShowActionSheet(conf, callbackId){
},
WX_ShowKeyboard(conf, callbackId){
},
WX_ShowLoading(conf, callbackId){
},
WX_ShowModal(conf, callbackId){
},
WX_ShowShareImageMenu(conf, callbackId){
},
WX_ShowShareMenu(conf, callbackId){
},
WX_ShowToast(conf, callbackId){
},
WX_StartAccelerometer(conf, callbackId){
},
WX_StartBeaconDiscovery(conf, callbackId){
},
WX_StartBluetoothDevicesDiscovery(conf, callbackId){
},
WX_StartCompass(conf, callbackId){
},
WX_StartDeviceMotionListening(conf, callbackId){
},
WX_StartGyroscope(conf, callbackId){
},
WX_StopAccelerometer(conf, callbackId){
},
WX_StopBeaconDiscovery(conf, callbackId){
},
WX_StopBluetoothDevicesDiscovery(conf, callbackId){
},
WX_StopCompass(conf, callbackId){
},
WX_StopDeviceMotionListening(conf, callbackId){
},
WX_StopFaceDetect(conf, callbackId){
},
WX_StopGyroscope(conf, callbackId){
},
WX_UpdateKeyboard(conf, callbackId){
},
WX_UpdateShareMenu(conf, callbackId){
},
WX_UpdateVoIPChatMuteConfig(conf, callbackId){
},
WX_UpdateWeChatApp(conf, callbackId){
},
WX_VibrateLong(conf, callbackId){
},
WX_VibrateShort(conf, callbackId){
},
WX_WriteBLECharacteristicValue(conf, callbackId){
},
WX_StartGameLive(conf, callbackId){
},
WX_CheckGameLiveEnabled(conf, callbackId){
},
WX_GetUserCurrentGameliveInfo(conf, callbackId){
},
WX_GetUserRecentGameLiveInfo(conf, callbackId){
},
WX_GetUserGameLiveDetails(conf, callbackId){
},
WX_OpenChannelsLiveCollection(conf, callbackId){
},
WX_RestartMiniProgram(){
},
WX_RemoveStorageSync(){
},
WX_ReportEvent(){
},
WX_ReportMonitor(){
},
WX_ReportPerformance(){
},
WX_ReportUserBehaviorBranchAnalytics(){
},
WX_ReserveChannelsLive(){
},
WX_RevokeBufferURL(){
},
WX_SetPreferredFramesPerSecond(){
},
WX_SetStorageSync(){
},
WX_ShareAppMessage(){
},
WX_TriggerGC(){
},
WX_StopDownloadTexture(){
},
WX_StarDownloadTexture(){
},
WX_OnAccelerometerChange(){
},
WX_OffAccelerometerChange(){
},
WX_OnAudioInterruptionBegin(){
},
WX_OffAudioInterruptionBegin(){
},
WX_OnAudioInterruptionEnd(){
},
WX_OffAudioInterruptionEnd(){
},
WX_OnBLECharacteristicValueChange(){
},
WX_OffBLECharacteristicValueChange(){
},
WX_OnBLEConnectionStateChange(){
},
WX_OffBLEConnectionStateChange(){
},
WX_OnBLEMTUChange(){
},
WX_OffBLEMTUChange(){
},
WX_OnBLEPeripheralConnectionStateChanged(){
},
WX_OffBLEPeripheralConnectionStateChanged(){
},
WX_OnBeaconServiceChange(){
},
WX_OffBeaconServiceChange(){
},
WX_OnBeaconUpdate(){
},
WX_OffBeaconUpdate(){
},
WX_OnBluetoothAdapterStateChange(){
},
WX_OffBluetoothAdapterStateChange(){
},
WX_OnBluetoothDeviceFound(){
},
WX_OffBluetoothDeviceFound(){
},
WX_OnCompassChange(){
},
WX_OffCompassChange(){
},
WX_OnDeviceMotionChange(){
},
WX_OffDeviceMotionChange(){
},
WX_OnDeviceOrientationChange(){
},
WX_OffDeviceOrientationChange(){
},
WX_OnError(){
},
WX_OffError(){
},
WX_OnGyroscopeChange(){
},
WX_OffGyroscopeChange(){
},
WX_OnHide(){
},
WX_OffHide(){
},
WX_OnInteractiveStorageModified(){
},
WX_OffInteractiveStorageModified(){
},
WX_OnKeyDown(){
},
WX_OffKeyDown(){
},
WX_OnKeyUp(){
},
WX_OffKeyUp(){
},
WX_OnKeyboardComplete(){
},
WX_OffKeyboardComplete(){
},
WX_OnKeyboardConfirm(){
},
WX_OffKeyboardConfirm(){
},
WX_OnKeyboardHeightChange(){
},
WX_OffKeyboardHeightChange(){
},
WX_OnKeyboardInput(){
},
WX_OffKeyboardInput(){
},
WX_OnMemoryWarning(){
},
WX_OffMemoryWarning(){
},
WX_OnMessage(){
},
WX_OffMessage(){
},
WX_OnNetworkStatusChange(){
},
WX_OffNetworkStatusChange(){
},
WX_OnNetworkWeakChange(){
},
WX_OffNetworkWeakChange(){
},
WX_OnShareMessageToFriend(){
},
WX_OffShareMessageToFriend(){
},
WX_OnShow(){
},
WX_OffShow(){
},
WX_OnSocketClose(){
},
WX_OffSocketClose(){
},
WX_OnSocketError(){
},
WX_OffSocketError(){
},
WX_OnSocketMessage(){
},
WX_OffSocketMessage(){
},
WX_OnSocketOpen(){
},
WX_OffSocketOpen(){
},
WX_OnTouchCancel(){
},
WX_OffTouchCancel(){
},
WX_OnTouchEnd(){
},
WX_OffTouchEnd(){
},
WX_OnTouchMove(){
},
WX_OffTouchMove(){
},
WX_OnTouchStart(){
},
WX_OffTouchStart(){
},
WX_OnUnhandledRejection(){
},
WX_OffUnhandledRejection(){
},
WX_OnUserCaptureScreen(){
},
WX_OffUserCaptureScreen(){
},
WX_OnVoIPChatInterrupted(){
},
WX_OffVoIPChatInterrupted(){
},
WX_OnVoIPChatMembersChanged(){
},
WX_OffVoIPChatMembersChanged(){
},
WX_OnVoIPChatSpeakersChanged(){
},
WX_OffVoIPChatSpeakersChanged(){
},
WX_OnVoIPChatStateChanged(){
},
WX_OffVoIPChatStateChanged(){
},
WX_OnWindowResize(){
},
WX_OffWindowResize(){
},
WX_OnAddToFavorites(){
},
WX_OnAddToFavorites_Resolve(conf){
},
WX_OffAddToFavorites(){
},
WX_OnCopyUrl(){
},
WX_OnCopyUrl_Resolve(conf){
},
WX_OffCopyUrl(){
},
WX_OnHandoff(){
},
WX_OnHandoff_Resolve(conf){
},
WX_OffHandoff(){
},
WX_OnShareTimeline(){
},
WX_OnShareTimeline_Resolve(conf){
},
WX_OffShareTimeline(){
},
WX_OnGameLiveStateChange(){
},
WX_OnGameLiveStateChange_Resolve(conf){
},
WX_OffGameLiveStateChange(){
},
WX_SetHandoffQuery(query){
return "";
},
WX_GetAccountInfoSync(){
return JSON.stringify({});
},
WX_GetBatteryInfoSync(){
return JSON.stringify({});
},
WX_GetEnterOptionsSync(){
return JSON.stringify({});
},
WX_GetExptInfoSync(keys){
return JSON.stringify({});
},
WX_GetExtConfigSync(){
return JSON.stringify({});
},
WX_GetLaunchOptionsSync(){
return JSON.stringify({});
},
WX_GetMenuButtonBoundingClientRect(){
return JSON.stringify({});
},
WX_GetStorageInfoSync(){
return JSON.stringify({});
},
WX_GetSystemInfoSync(){
return JSON.stringify({});
},
WX_SetCursor(path,x,y){
return "";
},
WX_SetMessageToFriendQuery(option){
return "";
},
WX_GetTextLineHeight(option){
return "";
},
WX_LoadFont(path){
return "";
},
WX_GetGameLiveState(){
return JSON.stringify({});
},
};
var downloadedTextures = {};
var downloadingTextures = {};
var textureHandler = {
downloadFile(textureId,type,prefix){
var url = prefix+'.png';
var cid = type+"_"+textureId;
var image = new Image();
image.src = url;
image.onload = function () {
downloadedTextures[cid] = {
data:image
};
if(downloadingTextures[cid] instanceof Array){
downloadingTextures[cid].forEach(v=>v());
}else{
downloadingTextures[cid]();
}
delete downloadingTextures[cid];
};
image.onerror = function(){
console.error(url+" 下载失败!");
}
}
};
var GameGlobal = {
TextureConfig:{},
SpriteAtlasConfig:{},
DownloadedTextures: downloadedTextures,
AUDIO_PREFIX:"./Assets/Textures/"
};
window._ScaleRate = 1;
</script>
<script src="./texture-config.js"></script>
</body>
</html>