UNPKG

react-unity-webgl

Version:

React Unity WebGL provides a modern solution for embedding Unity WebGL builds in your React Application while providing advanced APIs for two way communication and interaction between Unity and React.

100 lines (99 loc) 6.12 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.useUnityInstance = void 0; var react_1 = require("react"); var unity_loader_status_1 = require("../enums/unity-loader-status"); var is_browser_environment_1 = require("../constants/is-browser-environment"); /** * Creates a Unity Instance. * @param unityLoaderStatus The loader status. * @param htmlCanvasElement A reference to the html canvas element. * @param unityArguments The Unity instance arguments. * @param unityProvider The Unity provider. * @returns the Unity Instance among with the status of the Unity Instance. */ var useUnityInstance = function (unityLoaderStatus, htmlCanvasElement, unityArguments, unityProvider) { // Effect invoked when the Unity Loader status or canvas reference changes. (0, react_1.useEffect)(function () { (function () { return __awaiter(void 0, void 0, void 0, function () { var unityInstance, error_1; return __generator(this, function (_a) { switch (_a.label) { case 0: // It is possible for the application being rendered server side. In // this scenario, the window is not available. We can't create the // Unity Instance in this case. if (is_browser_environment_1.isBrowserEnvironment === false) { return [2 /*return*/]; } if (unityLoaderStatus !== unity_loader_status_1.UnityLoaderStatus.Loaded || htmlCanvasElement === null) { // If the loader is not loaded, or the canvas is not available, // we can't create the Unity instance yet. In case of a fresh load, // we'll clear the initialisation error as well. unityProvider.setUnityInstance(null); unityProvider.setInitialisationError(null); return [2 /*return*/]; } _a.label = 1; case 1: _a.trys.push([1, 3, , 4]); return [4 /*yield*/, window.createUnityInstance(htmlCanvasElement, unityArguments, unityProvider.setLoadingProgression)]; case 2: unityInstance = _a.sent(); // When the Unity Instance is created, its reference is stored in the // state while the error state is cleared. unityProvider.setUnityInstance(unityInstance); unityProvider.setInitialisationError(null); return [3 /*break*/, 4]; case 3: error_1 = _a.sent(); // When the Unity Instance catches due to a fail during the creation, // the Unity Instnace reference will be cleared while the error is // placed into the state. unityProvider.setUnityInstance(null); unityProvider.setInitialisationError(error_1); return [3 /*break*/, 4]; case 4: return [2 /*return*/]; } }); }); })(); }, [unityLoaderStatus, htmlCanvasElement, unityArguments, unityProvider]); }; exports.useUnityInstance = useUnityInstance;