const ТЕМА_ПО_УМОЛЧАНИЮ = "https://git.opengamestudio.org/MAOH/TEMA_M1K/raw/branch/master/0000"; const РАСК_ПО_УМОЛЧАНИЮ = "https://git.opengamestudio.org/MAOH/PACK_M1/raw/branch/master/0000"; // // // // ЦентрироватьОкноВПортретномРежиме = мир => { if (!мир.ориентацияПортретная) { return; } var смещение = (мир.ширинаОкна - window.innerWidth * мир.масштаб) / 2; window.scrollTo(смещение, 0); }; // // // // ЗадатьКоличествоФишекДляОтображения = мир => { var всего = мир.фишкиМаджонга.length; var доступно = Object.keys(мир.индексыФишекМаджонга).length; var убрано = всего - доступно; мир.количествоФишекМаджонга = `${убрано}/${всего}`; }; // // // // УменьшитьМасштаб = мир => { мир.масштаб -= 0.5; if (мир.масштаб < 1) { мир.масштаб = 1; } мир.уведомить("изменили масштаб"); }; // // // // УвеличитьМасштаб = мир => { мир.масштаб += 0.5; мир.уведомить("изменили масштаб"); }; // // // // РазрешитьВыборФишек = мир => { мир.отслеживатьНажатияВРисователе = true; }; // // // // ЗапретитьВыборФишек = мир => { мир.отслеживатьНажатияВРисователе = false; }; // // // // ОбновитьСчётчикКадров = мир => { var время = Math.floor(мир.времяРисования / 1000.0); // Первый вызов. Создаём. if (!мир.счётчикКадров) { var счётчик = document.createElement("div"); счётчик.style = "position: fixed; left: 0; bottom: 0;"; document.body.appendChild(счётчик); мир.счётчикКадров = счётчик; мир.счётчикКадровВремя = время; мир.счётчикКадровРазы = 0; return; } // Последующие вызовы. ++мир.счётчикКадровРазы; if (время - мир.счётчикКадровВремя) { мир.счётчикКадров.innerHTML = мир.счётчикКадровРазы; мир.счётчикКадровВремя = время; мир.счётчикКадровРазы = 0; } }; // // // // ИспользоватьВыбраннуюТему = мир => { var э = мир.списокТем[мир.номерВыбраннойТемыМаджонга]; var файлыТемы = мир.реестрМаджонга["🀄"][э[1]]["📁"]; мир.настройкиМаджонга["🀄/📦"] = э[1]; мир.настройкиМаджонга["🀄/📁"] = файлыТемы[42]; мир.уведомить("изменили настройки маджонга"); }; // // // // ИспользоватьВыбраннуюРаскладку = мир => { var э = мир.списокРаскладок[мир.номерВыбраннойРаскладкиМаджонга]; мир.настройкиМаджонга["📍/📦"] = э[1]; мир.настройкиМаджонга["📍/📁"] = э[0]; мир.уведомить("изменили настройки маджонга"); }; // // // // ВывестиПоражение = мир => { console.debug("ПОРАЖЕНИЕ"); }; // // // // ВывестиПобеду = мир => { console.debug("ПОБЕДА"); }; // // // // ЗадатьФишкуДляВыбора = мир => { var номер = мир.выбранныйУзел.userData; мир.фишкаМаджонгаДляВыбора = номер; } // // // // ПодготовитьФишкиКВыбору = мир => { мир.выборныеУзлы = мир.фишкиСцены; }; // // // // ПодготовитьсяКСозданиюФишек = мир => { var настройки = мир.настройкиМаджонга; var позиции = мир.позицииФишек; var фишки = []; var группа = 0; for (var номер in позиции) { var п = позиции[номер]; фишки.push({ "📍": [п[0], п[1], п[2]], "🚩": группа, }); if (номер % 2) { ++группа; if (группа > 41) { группа = 0; } } }; мир.фишкиМаджонга = фишки; мир.модельФишкиСцены = мир.полигональныеСетки[настройки["🀄/📦"]][настройки["🀄/📁"]]; мир.сцена.add(мир.сценаМаджонга); }; // // // // ПеремешатьПозицииФишек = мир => { var настройки = мир.настройкиМаджонга; var м = мир.модули.модульПоУказателю(настройки["📍/📦"]); var содержимое = м.содержимое[настройки["📍/📁"]]; var было = разобратьРаскладкуKMahjongg(содержимое); var стало = []; // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random#Getting_a_random_integer_between_two_values function getRandomInt(min, max) { min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min) + min); //The maximum is exclusive and the minimum is inclusive } // Перемешиваем. while (было.length) { var н = getRandomInt(0, было.length); стало.push(было[н]); было.splice(н, 1); } мир.позицииФишек = стало; }; // // // // СоздатьФишки = мир => { мир.уведомить("надо создать фишки"); }; // // // // СоздатьМатериалыФишек = мир => { var настройки = мир.настройкиМаджонга; мир.материалыФишекСцены = []; мир.выбранныеМатериалыФишекСцены = []; var текстуры = мир.текстуры[настройки["🀄/📦"]]; for (var имя in текстуры) { var текстура = текстуры[имя]; var материал = new THREE.MeshLambertMaterial({ map: текстура, color: new THREE.Color(0xCCCCCC), }); мир.материалыФишекСцены.push(материал); var выбранныйМатериал = new THREE.MeshLambertMaterial({ map: текстура, color: new THREE.Color(0xFFFFFF), }); мир.выбранныеМатериалыФишекСцены.push(выбранныйМатериал); } }; // // // // ПодготовитьсяКЗагрузкеРесурсов = мир => { var настройки = мир.настройкиМаджонга; мир.полигональныеСетки = { [настройки["🀄/📦"]]: { [настройки["🀄/📁"]]: null, }, }; мир.текстуры = { [настройки["🀄/📦"]]: { }, }; var м = мир.модули.модульПоУказателю(настройки["🀄/📦"]); var файлы = Object.keys(м.структура).sort(); var колво = 42; for (var номер = 0; номер < колво; ++номер) { var файл = файлы[номер]; мир.текстуры[настройки["🀄/📦"]][файл] = null; } }; // // // // ПроверитьНеобходимостьЗагрузкиРесурсов = мир => { var настройки = мир.настройкиМаджонга; if ( мир.полигональныеСетки && настройки["🀄/📦"] in мир.полигональныеСетки && настройки["🀄/📁"] in мир.полигональныеСетки[настройки["🀄/📦"]] && мир.текстуры && настройки["🀄/📦"] in мир.текстуры ) { мир.уведомить("ресурсы не нужно загружать"); } else { мир.уведомить("ресурсы нужно загружать"); } }; // // // // ЗагрузитьМодулиРесурсов = мир => { var указатели = мир.списокМодулейРесурсовДляЗагрузки; var сообщение = "Загрузка модулей ресурсов ⚬ 加载资源模块 ⚬ Loading resource modules"; console.debug(сообщение, указатели); мир.модули.использовали.подписатьРаз(function() { мир.уведомить("загрузили модули ресурсов"); }); мир.модули.использовать(указатели); }; // // // // ПроверитьНеобходимостьЗагрузкиМодулейРесурсов = мир => { if (мир.списокМодулейРесурсовДляЗагрузки.length) { мир.уведомить("модули ресурсов нужно загружать"); } else { мир.уведомить("модули ресурсов не нужно загружать"); } } // // // // ПодготовитьПредставлениеСпискаТем = мир => { var список = мир.списокТем; var названия = []; for (var н in список) { var название = список[н][0]; названия.push(название); } мир.списокТемМаджонга = названия; }; // // // // ПодготовитьСписокТем = мир => { var темы = мир.реестрМаджонга["🀄"]; var список = []; var указатели = Object.keys(темы).sort(); for (var н in указатели) { var указатель = указатели[н]; var м = мир.модули.модульПоУказателю(указатель); список.push([м.имя, указатель]); } мир.списокТем = список; }; // // // // ПодготовитьСписокМодулейРесурсовДляЗагрузки = мир => { var проверить = [ мир.настройкиМаджонга["🀄/📦"], мир.настройкиМаджонга["📍/📦"], ]; var загрузить = []; for (var н in проверить) { var указатель = проверить[н]; var м = мир.модули.модульПоУказателю(указатель); // Модуль не загружен. if (!м.содержимое) { загрузить.push(указатель); } } мир.списокМодулейРесурсовДляЗагрузки = загрузить; }; // // // // ПодготовитьПредставлениеСпискаРаскладок = мир => { var список = мир.списокРаскладок; var названия = []; for (var н in список) { var файл = список[н][0]; var название = файл .substring(1) .replace(".layout", ""); названия.push(название); } мир.списокРаскладокМаджонга = названия; }; // // // // ПодготовитьСписокРаскладок = мир => { var раскладки = мир.реестрМаджонга["📍"]; var список = []; var указатели = Object.keys(раскладки).sort(); for (var н in указатели) { var указатель = указатели[н]; var файлы = раскладки[указатель]["📁"]; for (var номер in файлы) { var файл = файлы[номер]; список.push([файл, указатель]); } } мир.списокРаскладок = список; }; // // // // ЗадатьНастройкиМаджонгаПоУмолчанию = мир => { var файлыТемы = мир.реестрМаджонга["🀄"][ТЕМА_ПО_УМОЛЧАНИЮ]["📁"]; var файлыРаскладок = мир.реестрМаджонга["📍"][РАСК_ПО_УМОЛЧАНИЮ]["📁"]; мир.настройкиМаджонга = { "🀄/📦": ТЕМА_ПО_УМОЛЧАНИЮ, "🀄/📁": файлыТемы[42], "📍/📦": РАСК_ПО_УМОЛЧАНИЮ, "📍/📁": файлыРаскладок[0], } мир.номерВыбраннойРаскладкиМаджонга = 0; мир.номерВыбраннойТемыМаджонга = 0; мир.уведомить("изменили настройки маджонга"); }; // // // // СоздатьПримерСцены = мир => { мир.сцена.background = new THREE.Color(0xFFFFFF); мир.свет = new THREE.DirectionalLight(0xFFFFFF, 1); мир.свет.position.set(-0.5, 1, 0.5).normalize(); мир.сцена.add(мир.свет); }; // // // // ПлавноУбратьСтраницуЗагрузкиИСкрытьКрутилку = мир => { плавноСкрытьИУдалить("экран-загрузки", { "задержка": 0.4 }); плавноСкрыть("крутилка", { "задержка": 0.4 }); };