12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346 |
- "use strict";
- b4w.register("embed_main", function(exports, require) {
- var m_app = require("app");
- var m_camera_anim = require("camera_anim");
- var m_cfg = require("config");
- var m_cont = require("container");
- var m_ctl = require("controls");
- var m_data = require("data");
- var m_gp_conf = require("gp_conf");
- var m_hmd = require("hmd");
- var m_hmd_conf = require("hmd_conf");
- var m_input = require("input");
- var m_main = require("main");
- var m_scs = require("scenes");
- var m_sfx = require("sfx");
- var m_storage = require("storage");
- var m_version = require("version");
- var BUILT_IN_SCRIPTS_ID = "built_in_scripts";
- var DEFAULT_QUALITY = "HIGH";
- var DEFAULT_STEREO = "NONE";
- var CAMERA_AUTO_ROTATE_SPEED = 0.3;
- var HIDE_MENU_DELAY = 2000;
- var ANIM_ELEM_DELAY = 50;
- var LOGO_SHOW_DELAY = 300;
- var LOGO_HIDE_DELAY = 300;
- var LOGO_CIRCLE_HIDE_DELAY = 300;
- var CAPTION_SHOW_DELAY = 300;
- var CAPTION_HIDE_DELAY = 300;
- var MENU_BUTTON_SHOW_DELAY = 300;
- var PRELOADER_HIDE_DELAY = 300;
- var TWITTER_CHAR = "t";
- var FB_CHAR = "f";
- var GOOGLE_CHAR = "g";
- var VK_CHAR = "v";
- var WEIBO_CHAR = "w";
- var _menu_close_func = null;
- var _is_panel_open_top = false;
- var _is_panel_open_left = false;
- var _is_anim_top = false;
- var _is_anim_left = false;
- var _is_qual_menu_opened = false;
- var _is_stereo_menu_opened = false;
- var _is_help_menu_opened = false;
- var _no_social = false;
- var _socials = [];
- var _is_first_stage = false;
- var _is_second_stage = false;
- var _is_third_stage = false;
- var _circle_container;
- var _preloader_caption;
- var _first_stage;
- var _second_stage;
- var _third_stage;
- var _load_container;
- var _preloader_container;
- var _opened_button;
- var _logo_container;
- var _buttons_container;
- var _quality_buttons_container;
- var _stereo_buttons_container;
- var _help_info_container;
- var _help_button;
- var _hor_button_section;
- var _selected_object;
- var _vec2_tmp = new Float32Array(2);
- var _player_buttons = [
- {type: "simple_button", id: "opened_button", callback: open_menu},
- {type: "simple_button", id: "help_button", callback: open_help},
- {type: "simple_button", id: "close_help", callback: close_help},
- {type: "trigger_button",
- id: "fullscreen_on_button",
- callback: enter_fullscreen,
- replace_button_id: "fullscreen_off_button",
- replace_button_cb: exit_fullscreen},
- {type: "trigger_button",
- id: "pause_button",
- callback: pause_engine,
- replace_button_id: "play_button",
- replace_button_cb: resume_engine},
- {type: "trigger_button",
- id: "auto_rotate_on_button",
- callback: rotate_camera,
- replace_button_id: "auto_rotate_off_button",
- replace_button_cb: stop_camera},
- {type: "trigger_button",
- id: "sound_on_button",
- callback: stop_sound,
- replace_button_id: "sound_off_button",
- replace_button_cb: play_sound},
- {type: "menu_button",
- id: "stereo_buttons_container",
- callback: open_stereo_menu,
- child_buttons_array_id: ["def_mode_button",
- "anag_mode_button",
- "hmd_mode_button"],
- child_buttons_array_cb: [
- function(){change_stereo("NONE")},
- function(){change_stereo("ANAGLYPH")},
- function(){change_stereo("HMD")}]},
- {type: "menu_button",
- id: "quality_buttons_container",
- callback: open_qual_menu,
- child_buttons_array_id: ["low_mode_button",
- "high_mode_button",
- "ultra_mode_button"],
- child_buttons_array_cb: [
- function(){change_quality(m_cfg.P_LOW)},
- function(){change_quality(m_cfg.P_HIGH)},
- function(){change_quality(m_cfg.P_ULTRA)}]}
- ]
- exports.init = function() {
- var is_debug = (m_version.type() == "DEBUG");
- var is_html = b4w.module_check(m_cfg.get("built_in_module_name"));
- var show_fps = false;
- var alpha = false;
- var dds_available = false;
- var min50_available = false;
- var url_params = m_app.get_url_params();
- var min_capabilities = false;
- var pvr_available = false;
- if (url_params && "compressed_textures" in url_params &&
- !is_html && !is_debug) {
- dds_available = true;
- min50_available = true;
- if ("compressed_textures_pvr" in url_params)
- pvr_available = true;
- }
- if (url_params && "show_fps" in url_params)
- show_fps = true;
- if (url_params && "no_social" in url_params)
- _no_social = true;
- if (url_params && "alpha" in url_params)
- alpha = true;
- if (url_params && url_params["load"])
- m_storage.init("b4w_webplayer:" + url_params["load"]);
- else
- m_storage.init("b4w_webplayer:" + window.location.href);
- if (url_params && "min_capabilities" in url_params)
- min_capabilities = true;
- if (url_params && "socials" in url_params) {
- var socials = url_params["socials"].split("");
- _socials = socials.filter(function (value, index, array) {
- return array.indexOf(value) == index;
- })
- }
- set_stereo_config();
- set_quality_config();
- if (!alpha)
- m_cfg.set("background_color", [0.224, 0.224, 0.224, 1.0]);
- // disable physics in HTML version
- m_app.init({
- canvas_container_id: "main_canvas_container",
- callback: init_cb,
- gl_debug: is_debug,
- physics_enabled: !is_html,
- show_fps: show_fps,
- report_init_failure: false,
- console_verbose: is_debug,
- error_purge_elements: ['control_panel'],
- alpha: alpha,
- key_pause_enabled: false,
- fps_elem_id: "fps_container",
- fps_wrapper_id: "fps_wrapper",
- assets_pvr_available: pvr_available,
- assets_dds_available: dds_available,
- assets_min50_available: min50_available,
- min_capabilities: min_capabilities,
- alpha:true,
- background_color:[0,0,0,0]
- })
- }
- function init_cb(canvas_element, success) {
- cache_dom_elems();
- if (!success) {
- display_no_webgl_bg();
- return;
- }
- m_main.pause();
- // add_engine_version();
- check_fullscreen();
- // set_quality_button();
- // set_stereo_button();
- // init_control_buttons();
- // prepare_soc_btns();
- m_gp_conf.update();
- var file = search_file();
- if (!file)
- return;
- anim_logo(file);
- window.addEventListener("resize", on_resize);
- on_resize();
- }
- function prepare_soc_btns() {
- var socials = _socials;
- if (!socials.length)
- return;
- var char_btns_array = [TWITTER_CHAR, FB_CHAR, GOOGLE_CHAR, VK_CHAR, WEIBO_CHAR];
- socials = socials.filter(function(value, index, array) {
- return char_btns_array.indexOf(value) >= 0;
- })
- if (!socials.length)
- return;
- var elem_ids = ["tw_button", "fb_button", "g_button", "vk_button", "weibo_button"];
- var ordered_elem_ids = [];
- var removing_elem_ids = [];
- for (var i = 0; i < socials.length; i++) {
- switch (socials[i]) {
- case TWITTER_CHAR:
- ordered_elem_ids.push("tw_button");
- break;
- case FB_CHAR:
- ordered_elem_ids.push("fb_button");
- break;
- case GOOGLE_CHAR:
- ordered_elem_ids.push("g_button");
- break;
- case VK_CHAR:
- ordered_elem_ids.push("vk_button");
- break;
- case WEIBO_CHAR:
- ordered_elem_ids.push("weibo_button");
- break;
- }
- }
- for (var i = 0; i < elem_ids.length; i++) {
- if (ordered_elem_ids.indexOf(elem_ids[i]) < 0) {
- removing_elem_ids.push(elem_ids[i])
- }
- }
- for (var i = 0; i < removing_elem_ids.length; i++) {
- var elem = document.getElementById(removing_elem_ids[i]);
- elem.parentElement.removeChild(elem);
- }
- var children = document.querySelector("#vert_section_button").children;
- var ar = [];
- ar.slice.call(children).sort(function(a, b) {
- return ordered_elem_ids.indexOf(a.id) - ordered_elem_ids.indexOf(b.id);
- }).forEach(function(next){
- document.querySelector("#vert_section_button").appendChild(next);
- })
- }
- function display_no_webgl_bg() {
- var url_params = m_app.get_url_params(true);
- if (url_params && url_params["fallback_image"]) {
- var image_wrapper = document.createElement("div");
- image_wrapper.className = "image_wrapper";
- document.body.appendChild(image_wrapper);
- _preloader_container.style.display = "none";
- image_wrapper.style.backgroundImage = 'url(' + url_params["fallback_image"] + ')';
- } else if (url_params && url_params["fallback_video"]) {
- var video_wrapper = document.createElement("div");
- var video_elem = document.createElement("video");
- video_wrapper.className = "video_wrapper";
- video_wrapper.appendChild(video_elem);
- video_elem.autoplay = true;
- for (var i = 0; i < url_params["fallback_video"].length; i++) {
- var source = document.createElement("source");
- source.src = url_params["fallback_video"][i];
- video_elem.appendChild(source);
- }
- document.body.appendChild(video_wrapper);
- _preloader_container.style.display = "none";
- } else
- report_app_error("Browser could not initialize WebGL", "For more info visit",
- "https://www.blend4web.com/doc/en/problems_and_solutions.html")
- }
- function cache_dom_elems() {
- _preloader_container = document.querySelector("#preloader_container");
- /* _circle_container = document.querySelector("#circle_container");
- _preloader_caption = document.querySelector("#preloader_caption");
- _first_stage = document.querySelector("#first_stage");
- _second_stage = document.querySelector("#second_stage");
- _third_stage = document.querySelector("#third_stage");
- _load_container = document.querySelector("#load_container");
-
- _opened_button = document.querySelector("#opened_button");
- _logo_container = document.querySelector("#logo_container");
- _buttons_container = document.querySelector("#buttons_container");
- _quality_buttons_container = document.querySelector("#quality_buttons_container");
- _stereo_buttons_container = document.querySelector("#stereo_buttons_container");
- _help_info_container = document.querySelector("#help_info_container");
- _help_button = document.querySelector("#help_button");
- _hor_button_section = document.querySelector("#hor_button_section"); */
- }
- function add_engine_version() {
- var version_cont = document.querySelector("#rel_version");
- var version = m_version.version_str();
- if (version)
- version_cont.innerHTML = m_version.version_str();
- }
- function check_fullscreen() {
- var fullscreen_on_button = document.querySelector("#fullscreen_on_button");
- if (!m_app.check_fullscreen())
- fullscreen_on_button.parentElement.removeChild(fullscreen_on_button);
- }
- function check_autorotate() {
- var autorotate_on_button = document.querySelector("#auto_rotate_on_button");
- if (!m_camera_anim.check_auto_rotate())
- autorotate_on_button.parentElement.removeChild(autorotate_on_button);
- }
- function set_quality_button() {
- var quality = m_storage.get("quality");
- if (!quality || quality == "CUSTOM") {
- quality = DEFAULT_QUALITY;
- m_storage.set("quality", quality);
- }
- _quality_buttons_container.className = "control_panel_button";
- switch (quality) {
- case "LOW":
- _quality_buttons_container.classList.add("low_mode_button");
- break;
- case "HIGH":
- _quality_buttons_container.classList.add("high_mode_button");
- break;
- case "ULTRA":
- _quality_buttons_container.classList.add("ultra_mode_button");
- break;
- }
- }
- function set_stereo_button() {
- var stereo = m_storage.get("stereo") || DEFAULT_STEREO;
- m_storage.set("stereo", stereo);
- _stereo_buttons_container.className = "control_panel_button";
- switch (stereo) {
- case "NONE":
- _stereo_buttons_container.classList.add("def_mode_button");
- break;
- case "ANAGLYPH":
- _stereo_buttons_container.classList.add("anag_mode_button");
- break;
- case "HMD":
- _stereo_buttons_container.classList.add("hmd_mode_button");
- if (m_input.can_use_device(m_input.DEVICE_HMD))
- m_hmd_conf.update();
- break;
- }
- }
- function init_control_buttons() {
- window.oncontextmenu = function(e) {
- e.preventDefault();
- e.stopPropagation();
- return false;
- };
- init_links();
- for (var i = 0; i < _player_buttons.length; i++) {
- var button = _player_buttons[i];
- var elem = document.getElementById(button.id);
- add_hover_class_to_button(elem);
- switch (button.type) {
- case "simple_button":
- if (elem)
- if (is_touch())
- elem.addEventListener("touchend", button.callback);
- else
- elem.addEventListener("mouseup", button.callback);
- break;
- case "menu_button":
- (function(button){
- if (elem)
- if (is_touch())
- elem.addEventListener("touchend", function(e) {
- button.callback(e, button);
- });
- else
- elem.addEventListener("mouseup", function(e) {
- button.callback(e, button);
- });
- })(button);
- break;
- case "trigger_button":
- (function(button){
- if (elem)
- if (is_touch())
- elem.addEventListener("touchend", function(e) {
- button.callback(e);
- });
- else
- elem.addEventListener("mouseup", function(e) {
- button.callback(e);
- });
- })(button);
- break;
- }
- }
- }
- function init_links() {
- var button_links = document.querySelectorAll(".control_panel_button a");
- for (var i = 0; i < button_links.length; i++) {
- var link = button_links[i];
- if (link.hasAttribute("href"))
- link.href += document.location.href;
- add_hover_class_to_button(link.parentNode);
- }
- }
- function search_file() {
- var module_name = m_cfg.get("built_in_module_name");
- if (b4w.module_check(module_name)) {
- var bd = require(module_name);
- var file = bd["data"]["main_file"];
- remove_built_in_scripts();
- return file;
- } else {
- var url_params = m_app.get_url_params();
- //_logo_container.style.display = "block";
- if (url_params && url_params["load"]) {
- file = url_params["load"];
- return file;
- } else {
- report_app_error("Please specify a scene to load",
- "For more info visit",
- "https://www.blend4web.com/doc/en/web_player.html");
- return null;
- }
- }
- }
- function anim_logo(file) {
- /* m_app.css_animate(_logo_container, "opacity", 0, 1, LOGO_SHOW_DELAY, "", "", function() {
- //_preloader_caption.style.display = "block";
- m_app.css_animate(_preloader_caption, "opacity", 0, 1, CAPTION_SHOW_DELAY, "", "", function() {
- m_main.resume();
- m_data.load(file, loaded_callback, preloader_callback, false);
- });
- }) */
- m_main.resume();
- m_data.load(file, loaded_callback, preloader_callback, false);
- }
- function open_help() {
- if (is_anim_in_process())
- return;
- if (is_touch())
- _help_info_container.className = "touch";
- else
- _help_info_container.className = "";
- _help_info_container.style.display = "block";
- _help_button.style.display = "none";
- _is_help_menu_opened = true;
- }
- function close_help(is_cb) {
- if (!_is_help_menu_opened)
- return;
- _help_info_container.style.display = "none";
- _help_button.style.display = "block";
- _is_help_menu_opened = false;
- }
- function get_button_object_from_id(elem_id) {
- for (var i = 0; i < _player_buttons.length; i++)
- if (_player_buttons[i].id == elem_id)
- return _player_buttons[i];
- return null;
- }
- function add_hover_class_to_button(elem) {
- if (!elem)
- return;
- if (is_touch()) {
- elem.addEventListener("touchstart", function() {
- elem.classList.add("hover");
- clear_deferred_close();
- });
- elem.addEventListener("touchend", function() {
- elem.classList.remove("hover");
- deferred_close();
- });
- } else {
- elem.addEventListener("mouseenter", function() {
- elem.classList.add("hover");
- });
- elem.addEventListener("mouseout", function(e) {
- elem.classList.remove("hover");
- });
- }
- }
- function rotate_camera(e) {
- if (is_anim_in_process())
- return;
- if (e)
- var elem = e.target
- else
- var elem = document.querySelector("#auto_rotate_on_button");
- m_camera_anim.auto_rotate(CAMERA_AUTO_ROTATE_SPEED, function(){
- if (elem)
- update_button(elem);
- });
- if (elem)
- update_button(elem);
- if (m_main.is_paused()) {
- resume_engine();
- update_play_pause_button();
- }
- }
- function stop_camera(e) {
- if (is_anim_in_process())
- return;
- m_camera_anim.auto_rotate(CAMERA_AUTO_ROTATE_SPEED);
- if (e)
- update_button(e.target);
- }
- function play_sound(e) {
- if (is_anim_in_process())
- return;
- m_sfx.mute(null, false);
- update_button(e.target);
- }
- function stop_sound(e) {
- if (is_anim_in_process())
- return;
- m_sfx.mute(null, true);
- update_button(e.target);
- }
- function pause_engine(e) {
- if (is_anim_in_process())
- return;
- m_main.pause();
- if (e)
- update_button(e.target);
- if (m_camera_anim.is_auto_rotate()) {
- stop_camera();
- update_auto_rotate_button();
- }
- }
- function resume_engine(e) {
- if (is_anim_in_process())
- return;
- m_main.resume();
- if (e)
- update_button(e.target);
- }
- function enter_fullscreen(e) {
- if (is_anim_in_process())
- return;
- var hmd_device = m_input.get_device_by_type_element(m_input.DEVICE_HMD);
- if (hmd_device &&
- m_input.get_value_param(hmd_device, m_input.HMD_WEBVR_TYPE) ==
- m_input.HMD_WEBVR1)
- m_input.request_fullscreen_hmd();
- else
- m_app.request_fullscreen(document.body, fullscreen_cb, fullscreen_cb);
- }
- function exit_fullscreen() {
- if (is_anim_in_process())
- return;
- m_app.exit_fullscreen();
- }
- function fullscreen_cb(e) {
- if (!check_cursor_position("buttons_container") && _is_anim_left)
- deferred_close();
- var fullscreen_button = document.querySelector("#fullscreen_on_button") ||
- document.querySelector("#fullscreen_off_button");
- if (fullscreen_button)
- update_button(fullscreen_button);
- }
- function update_button(elem) {
- var old_elem_id = elem.id;
- var button = get_button_object_from_id(elem.id);
- var old_callback = button.callback;
- elem.id = button.id = button.replace_button_id;
- button.replace_button_id = old_elem_id;
- if (!check_cursor_position(elem.id))
- elem.classList.remove("hover");
- button.callback = button.replace_button_cb;
- button.replace_button_cb = old_callback;
- }
- function update_play_pause_button() {
- var elem = document.querySelector("#play_button") ||
- document.querySelector("#pause_button");
- if (elem)
- update_button(elem);
- }
- function update_auto_rotate_button() {
- var elem = document.querySelector("#auto_rotate_on_button") ||
- document.querySelector("#auto_rotate_off_button");
- if (elem)
- update_button(elem);
- }
- function check_cursor_position(elem_id) {
- var hover = false;
- if (document.querySelectorAll) {
- var elems = document.querySelectorAll( ":hover" );
- for (var i = 0; i < elems.length; i++) {
- if (elems[i].id == elem_id) {
- hover = true;
- break;
- }
- }
- }
- return hover;
- }
- function close_menu() {
- if (is_anim_in_process())
- return;
- _buttons_container.removeEventListener("mouseleave", deferred_close);
- _buttons_container.removeEventListener("mouseenter", clear_deferred_close);
- document.body.removeEventListener("touchmove", deferred_close);
- close_qual_menu();
- close_stereo_menu();
- var hor_elem = document.querySelector("#help_button");
- var vert_elem = document.querySelector("#vert_section_button").firstElementChild;
- var drop_left = function(elem) {
- _is_anim_left = true;
- m_app.css_animate(elem, "marginRight", 0, -45, ANIM_ELEM_DELAY, "", "px");
- m_app.css_animate(elem, "opacity", 1, 0, ANIM_ELEM_DELAY, "", "", function() {
- if (elem.previousElementSibling && elem.previousElementSibling.id != "opened_button")
- drop_left(elem.previousElementSibling);
- else {
- setTimeout(function() {
- _is_anim_left = false;
- _is_panel_open_left = false;
- check_anim_end();
- _hor_button_section.style.display = "";
- }, 100);
- return;
- }
- });
- }
- var drop_top = function(elem) {
- _is_anim_top = true;
- m_app.css_animate(elem, "marginBottom", 0, -45, ANIM_ELEM_DELAY, "", "px");
- m_app.css_animate(elem, "opacity", 1, 0, ANIM_ELEM_DELAY, "", "", function() {
- if (elem.nextElementSibling && elem.nextElementSibling.id != "opened_button")
- drop_top(elem.nextElementSibling);
- else {
- setTimeout(function() {
- _is_anim_top = false;
- _is_panel_open_top = false;
- check_anim_end();
- }, 100);
- return;
- }
- });
- }
- drop_left(hor_elem);
- if (!_no_social)
- drop_top(vert_elem);
- }
- function open_menu() {
- clear_deferred_close();
- if (is_anim_in_process())
- return;
- disable_opened_button();
- if (is_control_panel_opened()) {
- close_menu();
- return;
- }
- var hor_elem = document.querySelector("#fullscreen_on_button") ||
- document.querySelector("#fullscreen_off_button") ||
- document.querySelector("#quality_buttons_container");
- var vert_elem = document.querySelector("#vert_section_button").lastElementChild;
- var drop_left = function(elem) {
- _is_anim_left = true;
- elem.style.marginRight = "-45px";
- if ((elem.id == "help_button") &&
- _is_help_menu_opened) {
- setTimeout(function() {
- _is_anim_left = false;
- _is_panel_open_left = true;
- check_anim_end();
- }, 100);
- return;
- }
- elem.style.display = "block";
- m_app.css_animate(elem, "marginRight", -45, 0, ANIM_ELEM_DELAY, "", "px", function() {
- if (!elem.nextElementSibling) {
- setTimeout(function() {
- _is_anim_left = false;
- _is_panel_open_left = true;
- check_anim_end();
- }, 100);
- return;
- }
- drop_left(elem.nextElementSibling)
- });
- m_app.css_animate(elem, "opacity", 0, 1, ANIM_ELEM_DELAY, "", "");
- }
- var drop_top = function(elem) {
- _is_anim_top = true;
- elem.style.marginBottom = "-45px";
- elem.style.display = "block";
- m_app.css_animate(elem, "marginBottom", -45, 0, ANIM_ELEM_DELAY, "", "px", function() {
- if (!elem.previousElementSibling) {
- setTimeout(function() {
- _is_anim_top = false;
- _is_panel_open_top = true;
- check_anim_end();
- }, 100);
- return;
- }
- drop_top(elem.previousElementSibling)
- });
- m_app.css_animate(elem, "opacity", 0, 1, ANIM_ELEM_DELAY, "", "");
- }
- _hor_button_section.style.display = "block";
- drop_left(hor_elem);
- if (!_no_social)
- drop_top(vert_elem);
- if (is_touch())
- document.body.addEventListener("touchmove", deferred_close);
- else {
- _buttons_container.addEventListener("mouseleave", deferred_close);
- _buttons_container.addEventListener("mouseenter", clear_deferred_close);
- }
- }
- function check_anim_end() {
- if (!is_anim_in_process()) {
- enable_opened_button();
- if ((!check_cursor_position("buttons_container") &&
- is_control_panel_opened()) ||
- (is_touch() && is_control_panel_opened()))
- deferred_close();
- }
- }
- function is_touch() {
- return !!(("ontouchstart" in window && !isFinite(navigator.maxTouchPoints))
- || navigator.maxTouchPoints)
- }
- function is_anim_in_process() {
- return _is_anim_top || _is_anim_left;
- }
- function is_control_panel_opened() {
- return _is_panel_open_top || _is_panel_open_left;
- }
- function disable_opened_button() {
- if (is_touch())
- _opened_button.removeEventListener("touchend", open_menu);
- else
- _opened_button.removeEventListener("mouseup", open_menu);
- }
- function enable_opened_button() {
- if (is_touch())
- _opened_button.addEventListener("touchend", open_menu);
- else
- _opened_button.addEventListener("mouseup", open_menu);
- }
- function deferred_close(e) {
- if (is_anim_in_process())
- return;
- clear_deferred_close();
- _menu_close_func = setTimeout(close_menu, HIDE_MENU_DELAY);
- }
- function clear_deferred_close() {
- clearTimeout(_menu_close_func);
- }
- function close_qual_menu(e) {
- if (is_anim_in_process())
- return;
- if (!_is_qual_menu_opened)
- return;
- _is_qual_menu_opened = false;
- if (e) {
- e.stopPropagation();
- var active_elem = e.target;
- } else
- var active_elem = document.querySelectorAll(".active_elem_q")[0];
- _quality_buttons_container.style.marginRight = "0px";
- for (var i = 0, child = _quality_buttons_container.children; i < child.length; i++) {
- child[i].style.display = "none";
- child[i].style.opacity = 0;
- }
- _quality_buttons_container.className = "control_panel_button " + active_elem.id;
- }
- function close_stereo_menu(e) {
- if (is_anim_in_process())
- return;
- if (!_is_stereo_menu_opened)
- return;
- _is_stereo_menu_opened = false;
- if (e) {
- e.stopPropagation();
- var active_elem = e.target;
- } else
- var active_elem = document.querySelectorAll(".active_elem_s")[0];
- _stereo_buttons_container.style.marginRight = "0px";
- for (var i = 0, child = _stereo_buttons_container.children; i < child.length; i++) {
- child[i].style.display = "none";
- child[i].style.opacity = 0;
- }
- _stereo_buttons_container.className = "control_panel_button " + active_elem.id;
- }
- function open_qual_menu(e, button) {
- if (is_anim_in_process())
- return;
- close_stereo_menu();
- _is_qual_menu_opened = true;
- _quality_buttons_container.style.marginRight = "-30px";
- var child_id = button.child_buttons_array_id;
- var child_cb = button.child_buttons_array_cb;
- for (var i = 0; i < child_id.length; i++) {
- var child_elem = document.getElementById(child_id[i]);
- if (!_quality_buttons_container.classList.contains(child_id[i]))
- if (is_touch())
- child_elem.addEventListener("touchend", child_cb[i]);
- else
- child_elem.addEventListener("mouseup", child_cb[i]);
- else {
- child_elem.className = "active_elem_q";
- if (is_touch())
- child_elem.addEventListener("touchend", close_qual_menu);
- else
- child_elem.addEventListener("mouseup", close_qual_menu);
- }
- }
- _quality_buttons_container.className = "quality_buttons_container";
- for (var i = 0, child = _quality_buttons_container.children; i < child.length; i++) {
- child[i].style.display = "block";
- child[i].style.opacity = 1;
- }
- }
- function open_stereo_menu(e, button) {
- if (is_anim_in_process())
- return;
- close_qual_menu();
- _is_stereo_menu_opened = true;
- _stereo_buttons_container.style.marginRight = "-30px";
- var child_id = button.child_buttons_array_id;
- var child_cb = button.child_buttons_array_cb;
- for (var i = 0; i < child_id.length; i++) {
- var child_elem = document.getElementById(child_id[i]);
- if (!child_elem)
- continue;
- if (!_stereo_buttons_container.classList.contains(child_id[i]))
- if (is_touch())
- child_elem.addEventListener("touchend", child_cb[i]);
- else
- child_elem.addEventListener("mouseup", child_cb[i]);
- else {
- child_elem.className = "active_elem_s";
- if (is_touch())
- child_elem.addEventListener("touchend", close_stereo_menu);
- else
- child_elem.addEventListener("mouseup", close_stereo_menu);
- }
- }
- var no_hmd = "";
- if (!m_input.can_use_device(m_input.DEVICE_HMD))
- no_hmd = "no_hmd";
- _stereo_buttons_container.className = "stereo_buttons_container " + no_hmd;
- for (var i = 0, child = _stereo_buttons_container.children; i < child.length; i++) {
- child[i].style.display = "block";
- child[i].style.opacity = 1;
- }
- }
- function on_resize() {
- m_cont.resize_to_container();
- }
- function get_selected_object() {
- return _selected_object;
- }
- function set_selected_object(obj) {
- _selected_object = obj;
- }
- function mouse_cb() {
- if (!m_scs.can_select_objects())
- return;
- var canvas_elem = m_cont.get_canvas();
- var mdevice = m_input.get_device_by_type_element(m_input.DEVICE_MOUSE, canvas_elem);
- var loc = m_input.get_vector_param(mdevice, m_input.MOUSE_LOCATION, _vec2_tmp);
- main_canvas_clicked(loc[0], loc[1]);
- }
- function touch_cb(touches) {
- if (!m_scs.can_select_objects())
- return;
- for (var i = 0; i < touches.length; i++)
- main_canvas_clicked(touches[i].clientX, touches[i].clientY);
- }
- function register_canvas_click() {
- var canvas_elem = m_cont.get_canvas();
- var mdevice = m_input.get_device_by_type_element(m_input.DEVICE_MOUSE, canvas_elem);
- if (mdevice)
- m_input.attach_param_cb(mdevice, m_input.MOUSE_DOWN_WHICH, mouse_cb);
- var tdevice = m_input.get_device_by_type_element(m_input.DEVICE_TOUCH, canvas_elem);
- if (tdevice)
- m_input.attach_param_cb(tdevice, m_input.TOUCH_START, touch_cb);
- }
- function main_canvas_clicked(x, y) {
- var prev_obj = get_selected_object();
- if (prev_obj && m_scs.outlining_is_enabled(prev_obj))
- m_scs.clear_outline_anim(prev_obj);
- var obj = m_scs.pick_object(x, y);
- set_selected_object(obj);
- }
- function loaded_callback(data_id, success) {
- if (!success) {
- report_app_error("Could not load the scene",
- "For more info visit",
- "https://www.blend4web.com/doc/en/web_player.html");
- return;
- }
- register_canvas_click();
- check_autorotate();
- m_app.enable_camera_controls();
- m_main.set_render_callback(render_callback);
- on_resize();
- var mouse_move = m_ctl.create_mouse_move_sensor();
- var mouse_click = m_ctl.create_mouse_click_sensor();
- var canvas_cont = m_cont.get_container();
- function move_cb() {
- canvas_cont.className = "move";
- }
- function stop_cb(obj, id, pulse) {
- if (pulse == -1)
- canvas_cont.className = "";
- }
- m_ctl.create_sensor_manifold(null, "MOUSE_MOVE", m_ctl.CT_SHOT,
- [mouse_click, mouse_move], function(s) {return s[0] && s[1]}, move_cb);
- m_ctl.create_sensor_manifold(null, "MOUSE_STOP", m_ctl.CT_TRIGGER,
- [mouse_click], function(s) {return s[0]}, stop_cb);
- var url_params = m_app.get_url_params();
- if (url_params && "autorotate" in url_params)
- rotate_camera();
- var meta_tags = m_scs.get_meta_tags();
- if (meta_tags.title)
- document.title = meta_tags.title;
- // check_hmd();
- }
- function check_hmd() {
- var hmd_mode_button = document.querySelector("#hmd_mode_button");
- if (!m_input.can_use_device(m_input.DEVICE_HMD)) {
- hmd_mode_button.parentElement.removeChild(hmd_mode_button);
- return;
- }
- if (m_cfg.get("stereo") != "HMD")
- return;
- m_hmd.enable_hmd(m_hmd.HMD_ALL_AXES_MOUSE_YAW);
- }
- function preloader_callback(percentage, load_time) {
- /* _preloader_caption.innerHTML = percentage + "%";
- if (percentage < 33) {
- if (!_is_first_stage) {
- _is_first_stage = true
- _circle_container.style.display = "block";
- }
- _first_stage.style.width = percentage * 4.7 + "px";
- _circle_container.style.webkitTransform = 'rotate('+ (percentage * 3.6 - 503) + 'deg)';
- _circle_container.style.transform = 'rotate('+ (percentage * 3.6 - 503) + 'deg)';
- } else if (percentage < 66) {
- if (!_is_second_stage) {
- _is_second_stage = true
- _first_stage.style.width = 142 + "px";
- _second_stage.style.backgroundColor = "#000";
- _second_stage.style.marginTop = "135px";
- }
- if (135 - (percentage - 33) * 4.5 > 0)
- _second_stage.style.marginTop = 135 - (percentage - 33) * 3.5 + "px";
- _circle_container.style.webkitTransform = 'rotate('+ (percentage * 3.6 - 503) + 'deg)';
- _circle_container.style.transform = 'rotate('+ (percentage * 3.6 - 503) + 'deg)';
- } else if (percentage != 100) {
- if (!_is_third_stage) {
- _is_third_stage = true;
- _second_stage.style.marginTop = "0px";
- _third_stage.style.backgroundColor = "#000";
- _third_stage.style.height = "0px";
- }
- if (percentage > 75)
- _third_stage.style.height = (percentage * 0.1) + "px";
- _circle_container.style.webkitTransform = 'rotate('+ (percentage * 3.6 - 503) + 'deg)';
- _circle_container.style.transform = 'rotate('+ (percentage * 3.6 - 503) + 'deg)';
- } */
- if (percentage == 100) {
-
- _preloader_container.parentElement.removeChild(_preloader_container);
-
-
- }
- }
- function extend_objs_props(objs, common_obj) {
- for (var i = objs.length; i--;)
- for (var prop in common_obj)
- objs[i][prop] = common_obj[prop];
- }
- function render_callback(elapsed, current_time) {}
- function remove_built_in_scripts() {
- var scripts = document.getElementById(BUILT_IN_SCRIPTS_ID);
- scripts.parentElement.removeChild(scripts);
- }
- function change_quality(qual) {
- var cur_quality = m_cfg.get("quality");
- if (cur_quality == qual)
- return;
- switch (qual) {
- case m_cfg.P_LOW:
- var quality = "LOW";
- break;
- case m_cfg.P_HIGH:
- var quality = "HIGH";
- break;
- case m_cfg.P_ULTRA:
- var quality = "ULTRA";
- break;
- }
- m_storage.set("quality", quality);
- setTimeout(function() {
- window.location.reload();
- }, 100);
- }
- function change_stereo(stereo) {
- var cur_stereo = m_cfg.get("stereo");
- if (cur_stereo == stereo)
- return;
- m_storage.set("stereo", stereo);
- setTimeout(function() {
- window.location.reload();
- }, 100);
- }
- function set_quality_config() {
- var quality = m_storage.get("quality");
- if (!quality || quality == "CUSTOM") {
- quality = DEFAULT_QUALITY;
- m_storage.set("quality", quality);
- }
- switch (quality) {
- case "LOW":
- var qual = m_cfg.P_LOW;
- break;
- case "HIGH":
- var qual = m_cfg.P_HIGH;
- break;
- case "ULTRA":
- var qual = m_cfg.P_ULTRA;
- break;
- }
- m_cfg.set("quality", qual);
- }
- function set_stereo_config() {
- var stereo = m_storage.get("stereo") || DEFAULT_STEREO;
- m_cfg.set("stereo", stereo);
- }
- function report_app_error(text_message, link_message, link) {
- var error_name = document.querySelector("#error_name");
- var error_info = document.querySelector("#error_info");
- var error_container = document.querySelector("#error_container");
- //_circle_container.style.display = "none";
- error_name.innerHTML = text_message;
- error_info.innerHTML = link_message + " <a href=" + link + ">" + link.replace("https://www.", "") + "</a>";
- error_container.style.display = "block";
- // _logo_container.style.opacity = 1;
- // _logo_container.style.marginTop = "-90px";
- }
- });
- // to allow early built-in module check
- window.addEventListener("load", function() {b4w.require("embed_main").init();});
|