Files
watrbx-game-engine/RobloxHybrid/RobloxHybrid.js
T
2025-09-18 17:55:52 -04:00

14 lines
8.4 KiB
JavaScript

(function() { var require,define;
(function(){var modules={};var requireStack=[];var inProgressModules={};var nativePrefix=function(){var ua=navigator.userAgent.toLowerCase();var isNative=ua.indexOf("hybrid")!=-1;if(isNative){if(ua.indexOf("ipad")!=-1||ua.indexOf("iphone")!=-1)return"iOS";if(ua.indexOf("android")!=-1)return"Android"}return null}();function build(module){var factory=module.factory;var localRequire=require;module.exports=createBaseModule(module);delete module.factory;factory(localRequire,module.exports,module);if(nativePrefix){var nativeModuleID=
module.id+"/Native";var nativeModule=modules[nativeModuleID];if(!nativeModule&&module.options&&module.options.autoGenerateNative)nativeModule=autoGenerateNative(factory,module.options);if(nativeModule){nativeModule.factory(localRequire,module.exports,module);delete nativeModule.factory}var platformModuleID=module.id+"/"+nativePrefix;var platformModule=modules[platformModuleID];if(platformModule){platformModule.factory(localRequire,module.exports,module);delete platformModule.factory}}if(module.exports&&
module.exports.init&&typeof module.exports.init==="function")module.exports.init();return module.exports}function createBaseModule(module){var exports={};exports.isNative=false;exports.supports=function(functionName,callback){if(callback)callback(false)};return exports}function autoGenerateNative(nativeModuleID,options){var generatedFactory=function(require,exports,module){var bridge=require("Bridge");for(var prop in exports)(function(){var currentProp=prop;var func=exports[currentProp];if(func&&
typeof func==="function"){var STRIP_COMMENTS=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;var ARGUMENT_NAMES=/([^\s,]+)/g;var fnStr=func.toString().replace(STRIP_COMMENTS,"");var paramNames=fnStr.slice(fnStr.indexOf("(")+1,fnStr.indexOf(")")).match(ARGUMENT_NAMES);if(paramNames===null)paramNames=[];exports[currentProp]=function(){var callback=null;var parameters={};for(var i=0;i<arguments.length;++i){var paramName=paramNames[i]||""+i;var paramValue=arguments[i];if(typeof paramValue==="function")callback=paramValue;
parameters[paramName]=paramValue}bridge.execute(module.id,currentProp,parameters,callback)}}})()};delete options.autoGenerateNative;return define(nativeModuleID,options,generatedFactory)}require=function(id){if(!modules[id])throw"module "+id+" not found";else if(id in inProgressModules){var cycle=requireStack.slice(inProgressModules[id]).join("->")+"->"+id;throw"Cycle in require graph: "+cycle;}if(modules[id].factory)try{inProgressModules[id]=requireStack.length;requireStack.push(id);return build(modules[id])}finally{delete inProgressModules[id];
requireStack.pop()}return modules[id].exports};define=function(id,options,factory){if(modules[id])throw"module "+id+" already defined";modules[id]={id:id,options:options,factory:factory};return modules[id]};define.remove=function(id){delete modules[id]};define.moduleMap=modules})();define("Utils",{},function(require,exports,module){exports.isMobile=function(){var ua=navigator.userAgent.toLowerCase();var keywords="(iphone;android;midp;240x320;blackberry;netfront;nokia;panasonic;portalmmm;sharp;sie-;sonyericsson;symbian;windows ce;benq;mda;mot-;opera mini;philips;pocket pc;sagem;samsung;htc".split(";");var keyword;for(keyword in keywords)if(-1!=ua.indexOf(keywords[keyword]))return true;return false};exports.isMobileApp=function(){var ua=navigator.userAgent.toLowerCase();return ua.indexOf("hybrid")!=
-1};exports.loadScript=function(scriptURL,callback){var scriptLoaded=false;function onScriptLoaded(){if(!scriptLoaded){scriptLoaded=true;callback()}}var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.type="text/javascript";script.async=true;script.onreadystatechange=function(){if(this.readyState=="complete")onScriptLoaded()};script.onload=onScriptLoaded;script.src=scriptURL;head.appendChild(script)};exports.extend=function(){var F=function(){};return function(Child,
Parent){F.prototype=Parent.prototype;Child.prototype=new F;Child.__super__=Parent.prototype;Child.prototype.constructor=Child}}();exports.createUUID=function(){function createPart(length){var uuidpart="";for(var i=0;i<length;i++){var uuidchar=parseInt(Math.random()*256,10).toString(16);if(uuidchar.length==1)uuidchar="0"+uuidchar;uuidpart+=uuidchar}return uuidpart}return createPart(4)+"-"+createPart(2)+"-"+createPart(2)+"-"+createPart(2)+"-"+createPart(6)}});define("Events",{},function(require,exports,module){function Event(name,params){this.name=name;this.params=params}exports.Slot=function(eventName,sticky){this.eventName=eventName;this.sticky=sticky;var emittedEvent=null;var listeners=[];this.subscribe=function(listener){listeners.push(listener);if(emittedEvent)listener(emittedEvent)};this.unsubscribe=function(listener){var listenersCount=listeners.length;for(var i=0;i<listenersCount;i++){var thisListener=listeners[i];if(thisListener===listener){listeners.splice(i,
1);break}}};this.emit=function(params){var eventInstance=new Event(this.eventName,params);if(this.sticky)emittedEvent=eventInstance;var listenersCount=listeners.length;for(var i=0;i<listenersCount;i++){var listener=listeners[i];if(listener(eventInstance))break}}}});define("Bridge",{},function(require,exports,module){exports.CallbackStatus=Object.freeze({SUCCESS:0,FAILURE:1});exports.execute=function(moduleID,functionName,params,callback){Roblox.Hybrid.Console.log("JS bridge failed to load a native implementation")};exports.nativeCallback=function(callbackID,status,params){Roblox.Hybrid.Console.log("JS bridge failed to load a native implementation")}});
define("Bridge/Native",{},function(require,exports,module){var utils=require("Utils");var callbacks={};exports.isNative=true;exports.registerCallback=function(callback){if(callback){var callbackID=utils.createUUID();callbacks[callbackID]=callback;return callbackID}else return null};exports.nativeCallback=function(callbackID,status,params){var callback=callbacks[callbackID];if(callback!==undefined){delete callbacks[callbackID];callback.apply(null,[status,params])}}});define("Bridge/iOS",{},function(require,exports,module){var execXhr;var requestId=0;var webViewId;var utils=require("Utils");function doNativeRequest(query){if(!webViewId){var ua=navigator.userAgent;webViewId=ua.match(/Hybrid\((.*)\)/i);if(webViewId)webViewId=webViewId[1];else webViewId=utils.createUUID()}if(execXhr&&execXhr.readyState!=4)execXhr=null;execXhr=execXhr||new XMLHttpRequest;execXhr.open("HEAD","rbx_native_exec?"+ +new Date,true);execXhr.setRequestHeader("command",JSON.stringify(query));
execXhr.setRequestHeader("webViewId",webViewId);execXhr.setRequestHeader("requestId",++requestId);execXhr.send(null);if(window.webkit.messageHandlers)window.webkit.messageHandlers.RobloxWKHybrid.postMessage({"webViewId":webViewId,"command":JSON.stringify(query),"requestId":requestId})}exports.execute=function(moduleID,functionName,params,callback){var callbackID=exports.registerCallback(callback);var query={moduleID:moduleID,functionName:functionName,params:params,callbackID:callbackID};doNativeRequest(query)};
exports.getWebViewID=function(){return webViewId}});define("Bridge/Android",{},function(require,exports,module){exports.execute=function(moduleID,functionName,params,callback){var callbackID=exports.registerCallback(callback);var query={moduleID:moduleID,functionName:functionName,params:params,callbackID:callbackID};window.__globalRobloxAndroidBridge__.executeRoblox(JSON.stringify(query))}});define("Social",{autoGenerateNative:true},function(require,exports,module){exports.providers=Object.freeze({FACEBOOK:"facebook",TWITTER:"twitter",GOOGLEPLUS:"googleplus"});exports.presentShareDialog=function(text,link,imageURL,callback){};exports.login=function(options,successCallback,errorCallback){};exports.logout=function(callback){}});define("Game",{autoGenerateNative:true},function(require,exports,module){exports.events=require("Events");exports.startWithPlaceID=function(placeID,callback){};exports.launchPartyForPlaceId=function(placeId,callback){}});define("Chat",{autoGenerateNative:true},function(require,exports,module){exports.events=require("Events");exports.newMessageNotification=function(numUnreadMessages,callback){}});define("RobloxHybrid",{},function(require,exports,module){exports.Utils=require("Utils");exports.Events=require("Events");exports.Bridge=require("Bridge");exports.Game=require("Game");exports.Social=require("Social");exports.Chat=require("Chat")});if(!window.Roblox)window.Roblox={};window.Roblox.Hybrid=require("RobloxHybrid"); })();