|
- define([
- 'js/system/client',
- 'ui/factory',
- 'js/rendering/renderer',
- 'js/objects/objects',
- 'js/rendering/effects',
- 'js/rendering/numbers',
- 'js/input',
- 'js/system/events',
- 'js/resources',
- 'js/sound/sound',
- 'js/system/globals',
- 'js/components/components',
- 'ui/templates/online/online',
- 'ui/templates/tooltips/tooltips'
- ], function (
- client,
- uiFactory,
- renderer,
- objects,
- effects,
- numbers,
- input,
- events,
- resources,
- sound,
- globals,
- components
- ) {
- let fnQueueTick = null;
- const getQueueTick = updateMethod => {
- return () => requestAnimationFrame(updateMethod);
- };
-
- const loadLongPress = async () => {
- return new Promise(res => {
- require(['longPress'], res);
- });
- };
-
- return {
- hasFocus: true,
-
- lastRender: 0,
- msPerFrame: ~~(1000 / 60),
-
- init: async function () {
- if (isMobile) {
- $('.ui-container').addClass('mobile');
-
- //If we're on an ios device, we need to load longPress since that polyfills contextmenu for us
- if (_.isIos())
- await loadLongPress();
- }
-
- if (window.location.search.includes('hideMonetization'))
- $('.ui-container').addClass('hideMonetization');
-
- client.init(this.onClientReady.bind(this));
- },
-
- onClientReady: function () {
- client.request({
- module: 'clientConfig',
- method: 'getClientConfig',
- callback: this.onGetClientConfig.bind(this)
- });
- },
-
- onGetClientConfig: async function (config) {
- globals.clientConfig = config;
-
- await resources.init();
- await components.init();
-
- events.emit('onResourcesLoaded');
-
- this.start();
- },
-
- start: function () {
- window.onfocus = this.onFocus.bind(this, true);
- window.onblur = this.onFocus.bind(this, false);
-
- $(window).on('contextmenu', this.onContextMenu.bind(this));
-
- sound.init();
-
- objects.init();
- renderer.init();
- input.init();
-
- numbers.init();
-
- uiFactory.init(null);
-
- fnQueueTick = getQueueTick(this.update.bind(this));
- fnQueueTick();
-
- $('.loader-container').remove();
- },
-
- onFocus: function (hasFocus) {
- //Hack: Later we might want to make it not render when out of focus
- this.hasFocus = true;
-
- if (!hasFocus)
- input.resetKeys();
- },
-
- onContextMenu: function (e) {
- const allowed = ['txtUsername', 'txtPassword'].some(s => $(e.target).hasClass(s));
- if (!allowed) {
- e.preventDefault();
- return false;
- }
- },
-
- update: function () {
- const time = +new Date();
- if (time - this.lastRender < this.msPerFrame - 1) {
- fnQueueTick();
-
- return;
- }
-
- objects.update();
- renderer.update();
- uiFactory.update();
- numbers.update();
-
- renderer.render();
-
- this.lastRender = time;
-
- fnQueueTick();
- }
- };
- });
|