228 lines
6.0 KiB
JavaScript
228 lines
6.0 KiB
JavaScript
|
||
const РЕСУРСЫ = "https://git.opengamestudio.org/PuCOBATEJlb/PECYPCbl/raw/branch/master/0000";
|
||
const ФИШКА = "/фишка.gltf";
|
||
const ТЕМА_ОТЛАДОЧНАЯ = "https://git.opengamestudio.org/MAOH/MAOH_TEMA_OTAK/raw/branch/master/0000";
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
СкрытьПаруВыбранныхФишекПослеЗадержки = мир =>
|
||
{
|
||
setTimeout(
|
||
function() {
|
||
for (var номер in мир.выбранныеФишки)
|
||
{
|
||
var н = мир.выбранныеФишки[номер];
|
||
// Перемещаем фишку на другой слой для исключения её из отрисовки и выбора.
|
||
var ф = мир.фишки[н];
|
||
ф.layers.set(1);
|
||
}
|
||
мир.выбранныеФишки = [];
|
||
},
|
||
100
|
||
);
|
||
}
|
||
|
||
// // // //
|
||
|
||
|
||
СнятьВыделениеСПервойВыбраннойФишки = мир =>
|
||
{
|
||
var н = мир.выбранныеФишки.shift();
|
||
var ф = мир.фишки[н];
|
||
var г = мир.группы[н];
|
||
var м = мир.материалы[г];
|
||
ф.material = м;
|
||
}
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
СравнитьПаруВыбранныхФишек = мир =>
|
||
{
|
||
// Удостоверяемся в наличии двух фишек.
|
||
if (мир.выбранныеФишки.length != 2)
|
||
{
|
||
return;
|
||
}
|
||
var н1 = мир.выбранныеФишки[0];
|
||
var н2 = мир.выбранныеФишки[1];
|
||
var г1 = мир.группы[н1];
|
||
var г2 = мир.группы[н2];
|
||
if (г1 == г2)
|
||
{
|
||
мир.уведомить("выбрали пару фишек одной группы");
|
||
}
|
||
else
|
||
{
|
||
мир.уведомить("выбрали пару фишек разных групп");
|
||
}
|
||
};
|
||
|
||
// // // //
|
||
|
||
|
||
ВыделитьВыбраннуюФишку = мир =>
|
||
{
|
||
var н = мир.выбраннаяФишка;
|
||
var ф = мир.фишки[н];
|
||
var г = мир.группы[н];
|
||
var м = мир.выбранныеМатериалы[г];
|
||
ф.material = м;
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ВыбратьФишку = мир =>
|
||
{
|
||
var номер = мир.выбранныйУзел.userData;
|
||
// Отсекаем выбор одной и той же фишки.
|
||
if (мир.выбраннаяФишка && мир.выбраннаяФишка == номер)
|
||
{
|
||
return;
|
||
}
|
||
мир.выбраннаяФишка = номер;
|
||
мир.выбранныеФишки.push(номер);
|
||
мир.уведомить("выбрали фишку");
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ПодготовитьФишкиКВыбору = мир =>
|
||
{
|
||
мир.выборныеУзлы = мир.фишки;
|
||
мир.выбранныеФишки = [];
|
||
мир.выбраннаяФишка = null;
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
НазначитьФишкамМатериалы = мир =>
|
||
{
|
||
for (var н in мир.фишки)
|
||
{
|
||
var ф = мир.фишки[н];
|
||
var г = мир.группы[н];
|
||
var м = мир.материалы[г];
|
||
ф.material = м;
|
||
}
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
СоздатьГруппы = мир =>
|
||
{
|
||
мир.группы = [];
|
||
var группа = 0;
|
||
for (var номер in мир.фишки)
|
||
{
|
||
мир.группы.push(группа);
|
||
if (номер % 2)
|
||
{
|
||
++группа;
|
||
}
|
||
}
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
СоздатьФишки = мир =>
|
||
{
|
||
мир.фишка = мир.полигональныеСетки[РЕСУРСЫ][ФИШКА];
|
||
мир.фишки = [];
|
||
var позиции = [-2, 0, 2];
|
||
for (var номер in позиции)
|
||
{
|
||
var позиция = позиции[номер];
|
||
var фишка = мир.фишка.clone();
|
||
фишка.userData = номер;
|
||
фишка.position.x = позиция;
|
||
мир.фишки.push(фишка);
|
||
мир.сцена.add(фишка);
|
||
}
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
СоздатьПримерСцены = мир =>
|
||
{
|
||
мир.сцена.background = new THREE.Color(0xFFFFFF);
|
||
мир.камера.position.y = 10;
|
||
мир.камера.position.z = 5;
|
||
мир.камера.lookAt(new THREE.Vector3(0, 0, 0));
|
||
|
||
мир.свет = new THREE.DirectionalLight(0xFFFFFF, 1);
|
||
мир.свет.position.set(-0.5, 1, 0.5).normalize();
|
||
мир.сцена.add(мир.свет);
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
СоздатьМатериалыФишек = мир =>
|
||
{
|
||
мир.материалы = [];
|
||
мир.выбранныеМатериалы = [];
|
||
var текстуры = мир.текстуры[ТЕМА_ОТЛАДОЧНАЯ];
|
||
for (var имя in текстуры)
|
||
{
|
||
var текстура = текстуры[имя];
|
||
var материал = new THREE.MeshLambertMaterial({
|
||
map: текстура,
|
||
color: new THREE.Color(0xAAAAAA),
|
||
});
|
||
мир.материалы.push(материал);
|
||
var выбранныйМатериал = new THREE.MeshLambertMaterial({
|
||
map: текстура,
|
||
color: new THREE.Color(0xFFFFFF),
|
||
});
|
||
мир.выбранныеМатериалы.push(выбранныйМатериал);
|
||
}
|
||
};
|
||
|
||
// // // //
|
||
|
||
|
||
ПодготовитьсяКЗагрузкеРесурсов = мир =>
|
||
{
|
||
мир.полигональныеСетки = {
|
||
[РЕСУРСЫ]: {
|
||
[ФИШКА]: null,
|
||
},
|
||
};
|
||
|
||
мир.текстуры = {
|
||
[ТЕМА_ОТЛАДОЧНАЯ]: { },
|
||
};
|
||
var м = мир.модули.модульПоУказателю(ТЕМА_ОТЛАДОЧНАЯ);
|
||
var файлы = Object.keys(м.структура).sort();
|
||
for (var номер in файлы)
|
||
{
|
||
var файл = файлы[номер];
|
||
мир.текстуры[ТЕМА_ОТЛАДОЧНАЯ][файл] = null;
|
||
}
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
СкрытьКрутилку = мир =>
|
||
{
|
||
document.getElementById("крутилка").style.display = "none";
|
||
}; |