|
|
@@ -0,0 +1,495 @@ |
|
|
|
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 }); |
|
|
|
}; |