Compare commits

...

16 Commits

Author SHA1 Message Date
Главред | Glavred
6f22b9dccb Изменения от Главреда ГитЖС | Changes of GitJS Glavred 2020-10-19 16:10:18 +03:00
Главред | Glavred
5e3f0f8a6c Изменения от Главреда ГитЖС | Changes of GitJS Glavred 2020-10-19 15:27:13 +03:00
Главред | Glavred
536550bace Изменения от Главреда ГитЖС | Changes of GitJS Glavred 2020-10-16 19:21:06 +03:00
Главред | Glavred
6fdf234a2c Изменения от Главреда ГитЖС | Changes of GitJS Glavred 2020-10-09 14:12:37 +03:00
Главред | Glavred
7a08280b29 Изменения от Главреда ГитЖС | Changes of GitJS Glavred 2020-10-08 16:55:08 +03:00
Главред | Glavred
d4eb1e7646 Изменения от Главреда ГитЖС | Changes of GitJS Glavred 2020-10-07 16:24:12 +03:00
Главред | Glavred
e7311d492b Изменения от Главреда ГитЖС | Changes of GitJS Glavred 2020-10-07 14:45:58 +03:00
Главред | Glavred
e6e3e7e202 Изменения от Главреда ГитЖС | Changes of GitJS Glavred 2020-09-30 14:43:44 +03:00
Главред | Glavred
10b486d62d Изменения от Главреда ГитЖС | Changes of GitJS Glavred 2020-09-30 14:31:43 +03:00
Главред | Glavred
6f7a8d0151 Изменения от Главреда ГитЖС | Changes of GitJS Glavred 2020-09-29 15:36:46 +03:00
Главред | Glavred
bda0fcacc8 Изменения от Главреда ГитЖС | Changes of GitJS Glavred 2020-09-29 15:35:45 +03:00
Главред | Glavred
6d41301b20 Изменения от Главреда ГитЖС | Changes of GitJS Glavred 2020-09-29 15:02:27 +03:00
Главред | Glavred
de1b2f20cc Изменения от Главреда ГитЖС | Changes of GitJS Glavred 2020-09-28 14:47:49 +03:00
Главред | Glavred
3a1ca7d11e Изменения от Главреда ГитЖС | Changes of GitJS Glavred 2020-09-26 20:47:34 +03:00
Главред | Glavred
f910244315 Изменения от Главреда ГитЖС | Changes of GitJS Glavred 2020-09-24 15:13:30 +03:00
Главред | Glavred
512806be72 Изменения от Главреда ГитЖС | Changes of GitJS Glavred 2020-09-23 13:50:49 +03:00
7 changed files with 297 additions and 120 deletions

View File

@@ -1,5 +1,4 @@
const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | Mahjong resources"; const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | Mahjong resources";
const ИМЯ_ОТЛ_РАСКЛАДКИ = "Отладочные раскладки Маджонга | Mahjong debug layouts";
// // // // // // // //
@@ -13,21 +12,11 @@ const ИМЯ_ОТЛ_РАСКЛАДКИ = "Отладочные раскладк
// // // // // // // //
ЗадатьОтладочнуюТемуФишекДляЗагрузки = мир => ЗагрузитьВыбраннуюРаскладку = мир =>
{ {
мир.темаФишек = "отладочная|debug"; var детали = мир.реестрРаскладок[мир.выбраннаяРаскладка];
}; var модуль = мир.модули.модульПоИмени(детали["🗿"]);
var содержимое = модуль.содержимое[детали["📁"]];
// // // //
ЗагрузитьОтладочнуюРаскладку = мир =>
{
var модуль = мир.модули.модульПоИмени(ИМЯ_ОТЛ_РАСКЛАДКИ);
var ресурс = "/успех|success.layout";
//var ресурс = "/провал|failure.layout";
var содержимое = модуль.содержимое[ресурс];
мир.раскладкаKMahjongg = { мир.раскладкаKMahjongg = {
"содержимое": содержимое, "содержимое": содержимое,
}; };

View File

@@ -1,10 +1,6 @@
надо загрузить ресурсы сцены надо загрузить ресурсы сцены
загрузить фишку загрузить фишку
загрузили фишку загрузили фишку
загрузить отладочную раскладку
разобрать раскладку KMahjongg
разобрали раскладку KMahjongg
задать отладочную тему фишек для загрузки
загрузить тему фишек маджонга загрузить тему фишек маджонга
загрузили тему фишек маджонга загрузили тему фишек маджонга
уведомить о загрузке ресурсов сцены уведомить о загрузке ресурсов сцены

View File

@@ -3,6 +3,75 @@
// // // // // // // //
ВыбратьТемуФишекОтладочную = мир =>
{
мир.выбраннаяТема = "отладочная|debug";
//мир.уведомить("выбрали тему");
};
// // // //
ВыбратьРаскладкуX = мир =>
{
мир.выбраннаяРаскладка = "X_shaped";
мир.уведомить("выбрали раскладку");
};
// // // //
ИзменитьРазмерОтрисовщикаThreeJS = мир =>
{
var ширина = window.innerWidth * мир.масштаб;
var высота = window.innerHeight * мир.масштаб;
мир.камера.aspect = ширина / высота;
мир.камера.updateProjectionMatrix();
мир.отрисовщик.setSize(ширина, высота);
var размер = мир.масштаб * 100;
мир.канва.style = `
max-width: ${размер}%;
max-height: ${размер}%;
width: ${размер}%;
height: ${размер}%;
`;
};
// // // //
ЗадатьОтладочныйМасштаб = мир =>
{
мир.масштаб = 3;
мир.уведомить("изменили масштаб");
};
// // // //
ВключитьОтслеживаниеНажатий = мир =>
{
мир.отслеживатьНажатия = true;
};
// // // //
ОтключитьОтслеживаниеНажатий = мир =>
{
мир.отслеживатьНажатия = false;
};
// // // //
ИсправитьОтслеживаниеНажатийНаIOS = мир => ИсправитьОтслеживаниеНажатийНаIOS = мир =>
{ {
// https://stackoverflow.com/a/31459240/3404710 // https://stackoverflow.com/a/31459240/3404710
@@ -13,35 +82,22 @@
// // // // // // // //
ОтслеживатьНажатияПальцем = мир => ПодготовитьсяКОтслеживаниюНажатий = мир =>
{ {
мир.отслеживатьНажатия = false;
// Палец.
window.addEventListener( window.addEventListener(
"touchstart", "touchstart",
function(событие) { function(событие) {
var позиция = new THREE.Vector2(); сообщитьОНажатии(мир, событие.touches[0]);
позиция.x = (событие.touches[0].clientX / window.innerWidth) * 2 - 1;
позиция.y = - (событие.touches[0].clientY / window.innerHeight) * 2 + 1;
мир.позицияНажатия = позиция;
мир.уведомить("нажали");
} }
); );
// Мышь.
};
// // // //
ОтслеживатьНажатияМышью = мир =>
{
window.addEventListener( window.addEventListener(
"click", "click",
function(событие) { function(событие) {
var позиция = new THREE.Vector2(); сообщитьОНажатии(мир, событие);
позиция.x = (событие.clientX / window.innerWidth) * 2 - 1;
позиция.y = - (событие.clientY / window.innerHeight) * 2 + 1;
мир.позицияНажатия = позиция;
мир.уведомить("нажали");
} }
); );
}; };
@@ -88,9 +144,9 @@
// // // // // // // //
СоздатьФишкиВСцене = мир => РазобратьРаскладкуKMahjongg = мир =>
{ {
мир.уведомить("надо создать фишки в сцене"); мир.раскладкаKMahjongg.позиции = разобратьРаскладкуKMahjongg(мир.раскладкаKMahjongg.содержимое);
}; };
@@ -109,7 +165,7 @@
ПодготовитьСцену = мир => ПодготовитьСцену = мир =>
{ {
var коэффициент = 2; var коэффициент = 2;
var расстояние = 6; var расстояние = 14;
мир.камера.position.y = расстояние * коэффициент; мир.камера.position.y = расстояние * коэффициент;
мир.камера.position.z = расстояние; мир.камера.position.z = расстояние;
мир.камера.lookAt(new THREE.Vector3(0, 0, 0)); мир.камера.lookAt(new THREE.Vector3(0, 0, 0));
@@ -117,9 +173,6 @@
мир.свет = new THREE.DirectionalLight(0xffffff, 1); мир.свет = new THREE.DirectionalLight(0xffffff, 1);
мир.свет.position.set(-0.5, 1, 0.5).normalize(); мир.свет.position.set(-0.5, 1, 0.5).normalize();
мир.сцена.add(мир.свет); мир.сцена.add(мир.свет);
мир.корень = new THREE.Group();
мир.сцена.add(мир.корень);
}; };
@@ -140,3 +193,51 @@
мир.загрузчикGLTF = new THREE.GLTFLoader(); мир.загрузчикGLTF = new THREE.GLTFLoader();
}; };
// // // //
НастроитьThreeJS = мир =>
{
мир.сцена = new THREE.Scene();
мир.сцена.background = new THREE.Color(0xFFFFFF);
мир.камера = new THREE.PerspectiveCamera(45, 1, 0.1, 1000);
мир.ловецНажатий = new THREE.Raycaster();
мир.отрисовщик = new THREE.WebGLRenderer({canvas: мир.канва, antialias: true});
};
// // // //
СоздатьКанвуThreeJS = мир =>
{
мир.канва = document.createElement("canvas");
мир.канва.id = "канва-threejs";
мир.канва.style = `
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
`;
var первый = document.body.firstChild;
if (первый)
{
document.body.insertBefore(мир.канва, первый);
}
else
{
document.body.appendChild(мир.канва);
}
};
// // // //
СоздатьМасштаб = мир =>
{
мир.масштаб = 1;
};

View File

@@ -1,20 +1,29 @@
пуск модулей маджонга пуск модулей маджонга
создать масштаб
создать канву ThreeJS
настроить ThreeJS настроить ThreeJS
встроить отрисовщика ThreeJS
отслеживать изменение размера окна браузера отслеживать изменение размера окна браузера
изменить размер отрисовщика ThreeJS изменить размер отрисовщика ThreeJS
создать загрузчик GLTF создать загрузчик GLTF
создать загрузчик текстур создать загрузчик текстур
подготовить сцену подготовить сцену
загрузить ресурсы сцены подготовиться к отслеживанию нажатий
загрузили ресурсы сцены
создать фишки в сцене
создали фишки в сцене
центрировать сцену
отслеживать нажатия мышью
отслеживать нажатия пальцем
исправить отслеживание нажатий на IOS исправить отслеживание нажатий на IOS
запустить отрисовку запустить отрисовку
выбрать тему фишек отладочную
загрузить ресурсы сцены
загрузили ресурсы сцены
выбрать раскладку X
подготовиться к созданию фишек в сцене
включить отслеживание нажатий
изменили размер окна браузера изменили размер окна браузера
изменить размер отрисовщика ThreeJS изменить размер отрисовщика ThreeJS
изменили масштаб
изменить размер отрисовщика ThreeJS
выбрали раскладку
загрузить выбранную раскладку
разобрать раскладку KMahjongg
создать фишки в сцене
центрировать сцену

View File

@@ -3,6 +3,33 @@
// // // // // // // //
ВывестиКоординатыНажатия = мир =>
{
console.debug("Координаты нажатия:", мир.позицияНажатия.x, мир.позицияНажатия.y);
};
// // // //
УведомитьОПоражении = мир =>
{
мир.уведомить("поражение");
};
// // // //
УведомитьОПобеде = мир =>
{
мир.уведомить("победа");
};
// // // //
ВывестиПобеду = мир => ВывестиПобеду = мир =>
{ {
console.debug("ПОБЕДА"); console.debug("ПОБЕДА");
@@ -92,8 +119,7 @@
{ {
if (фишкуМожноВыбрать(мир.индексыФишек, индекс)) if (фишкуМожноВыбрать(мир.индексыФишек, индекс))
{ {
var фишка = мир.индексыФишек[индекс]; var номер = мир.индексыФишек[индекс];
var номер = номерФишки(мир.фишки, фишка.id);
мир.доступныеДляВыбораНомераФишек.push(номер); мир.доступныеДляВыбораНомераФишек.push(номер);
} }
} }
@@ -331,6 +357,7 @@
console.debug(`ВЫБРАЛИ фишку. номер: '${номер}' группа: '${группа}'`); console.debug(`ВЫБРАЛИ фишку. номер: '${номер}' группа: '${группа}'`);
}; };
// // // // // // // //
@@ -346,6 +373,17 @@
ПроверитьДоступностьФишкиДляВыбора = мир => ПроверитьДоступностьФишкиДляВыбора = мир =>
{ {
// Удостоверимся, что это не одна и та же фишка, выбранная дважды.
if (мир.номераВыбранныхФишек.length)
{
var номер = мир.номераВыбранныхФишек[0];
if (номер == мир.номерНайденнойФишки)
{
return;
}
}
// Проверяем доступность с точки зрения правил Маджонга.
var позиция = мир.раскладкаKMahjongg.позиции[мир.номерНайденнойФишки]; var позиция = мир.раскладкаKMahjongg.позиции[мир.номерНайденнойФишки];
var индекс = индексПозицииФишки(позиция); var индекс = индексПозицииФишки(позиция);
if (фишкуМожноВыбрать(мир.индексыФишек, индекс)) if (фишкуМожноВыбрать(мир.индексыФишек, индекс))
@@ -358,41 +396,6 @@
// // // // // // // //
УведомитьОСозданииФишекВСцене = мир =>
{
мир.уведомить("создали фишки в сцене");
};
// // // //
ПодготовитьФишкиКВыбору = мир =>
{
мир.номераВыбранныхФишек = [];
};
// // // //
СоздатьИндексыФишек = мир =>
{
мир.индексыФишек = {};
const позиции = мир.раскладкаKMahjongg.позиции;
for (var номер in позиции)
{
var позиция = позиции[номер];
var фишка = мир.фишки[номер];
var индекс = индексПозицииФишки(позиция);
мир.индексыФишек[индекс] = фишка;
};
};
// // // //
ВывестиНайденнуюФишку = мир => ВывестиНайденнуюФишку = мир =>
{ {
var номер = мир.номерНайденнойФишки; var номер = мир.номерНайденнойФишки;
@@ -418,31 +421,31 @@
мир.уведомить("нашли фишку в координатах нажатия"); мир.уведомить("нашли фишку в координатах нажатия");
} }
} }
}; };
// // // // // // // //
СоздатьМатериалыВыбранныхФишекОтладочнойТемы = мир => ПодготовитьФишкиКВыбору = мир =>
{ {
мир.материалыВыбранныхФишек = []; мир.номераВыбранныхФишек = [];
for (var номер in мир.материалыФишек)
{
var материал = мир.материалыФишек[номер].clone();
материал.color = new THREE.Color(0xff0000);
мир.материалыВыбранныхФишек.push(материал);
}
}; };
// // // // // // // //
ПодготовитьПоискФишек = мир => СоздатьИндексыФишек = мир =>
{ {
мир.номераНайденныхФишек = []; мир.индексыФишек = {};
const позиции = мир.раскладкаKMahjongg.позиции;
for (var номер in позиции)
{
var позиция = позиции[номер];
var индекс = индексПозицииФишки(позиция);
мир.индексыФишек[индекс] = номер;
};
}; };
@@ -495,7 +498,11 @@
var размеры = [ var размеры = [
(границы.max.x - границы.min.x) / 2, (границы.max.x - границы.min.x) / 2,
(границы.max.z - границы.min.z) / 2, (границы.max.z - границы.min.z) / 2,
границы.max.y - границы.min.y, //границы.max.y - границы.min.y,
];
var отступы = [
0.02,
0.02,
]; ];
const позиции = мир.раскладкаKMahjongg.позиции; const позиции = мир.раскладкаKMahjongg.позиции;
@@ -511,8 +518,8 @@
var слой = позиция[0]; var слой = позиция[0];
var ряд = позиция[1]; var ряд = позиция[1];
var столбец = позиция[2]; var столбец = позиция[2];
фишка.position.x = столбец * размеры[0]; фишка.position.x = столбец * (размеры[0] + отступы[0]);
фишка.position.z = ряд * размеры[1]; фишка.position.z = ряд * (размеры[1] + отступы[1]);
фишка.position.y = слой; фишка.position.y = слой;
} }
}; };
@@ -521,14 +528,61 @@
// // // // // // // //
ПодготовитьКореньФишек = мир =>
{
if (мир.корень && мир.сцена.children.includes(мир.корень))
{
мир.сцена.remove(мир.корень);
}
мир.корень = new THREE.Group();
мир.сцена.add(мир.корень);
};
// // // //
СоздатьМатериалыВыбранныхФишекОтладочнойТемы = мир =>
{
мир.материалыВыбранныхФишек = [];
for (var номер in мир.материалыФишек)
{
var материал = мир.материалыФишек[номер].clone();
материал.color = new THREE.Color(0xff0000);
мир.материалыВыбранныхФишек.push(материал);
}
};
// // // //
СоздатьМатериалыФишекОтладочнойТемы = мир => СоздатьМатериалыФишекОтладочнойТемы = мир =>
{ {
мир.материалыФишек = []; мир.материалыФишек = [];
var тема = "отладочная|debug";
for (var номер = 1; номер <= 42; ++номер) for (var номер = 1; номер <= 42; ++номер)
{ {
var текстура = мир.текстурыТемФишек[тема][номер]; var текстура = мир.текстурыТемФишек[мир.выбраннаяТема][номер];
var материал = new THREE.MeshLambertMaterial({map: текстура}); var материал = new THREE.MeshLambertMaterial({map: текстура});
мир.материалыФишек.push(материал); мир.материалыФишек.push(материал);
} }
}; };
// // // //
СоздатьФишкиВСцене = мир =>
{
мир.уведомить("надо создать фишки в сцене");
};
// // // //
ПодготовитьсяКСозданиюФишекВСцене = мир =>
{
мир.уведомить("надо подготовиться к созданию фишек в сцене");
};

View File

@@ -1,17 +1,20 @@
надо создать фишки в сцене надо подготовиться к созданию фишек в сцене
создать материалы фишек отладочной темы создать материалы фишек отладочной темы
создать материалы выбранных фишек отладочной темы
надо создать фишки в сцене
подготовить корень фишек
создать узлы фишек создать узлы фишек
создать группы фишек создать группы фишек
задать материалы фишкам по группам задать материалы фишкам по группам
создать материалы выбранных фишек отладочной темы
создать индексы фишек создать индексы фишек
подготовить фишки к выбору подготовить фишки к выбору
уведомить о создании фишек в сцене
включить возможность поиска фишки включить возможность поиска фишки
нажали нажали
проверить возможность поиска фишки проверить возможность поиска фишки
можно искать фишку можно искать фишку
# вывести координаты нажатия
найти фишку в координатах нажатия найти фишку в координатах нажатия
нашли фишку в координатах нажатия нашли фишку в координатах нажатия
вывести найденную фишку вывести найденную фишку
@@ -50,5 +53,7 @@
проверить наличие фишек на игровом поле проверить наличие фишек на игровом поле
фишки на игровом поле присутствуют фишки на игровом поле присутствуют
вывести поражение вывести поражение
уведомить о поражении
фишки на игровом поле отсутствуют фишки на игровом поле отсутствуют
вывести победу вывести победу
уведомить о победе

View File

@@ -1,5 +1,28 @@
// // // //
сообщитьОНажатии = (мир, событие) =>
{
if (!мир.отслеживатьНажатия)
{
return;
}
var позиция = new THREE.Vector2();
var ширина = window.innerWidth * мир.масштаб;
var высота = window.innerHeight * мир.масштаб;
позиция.x = ((событие.clientX + window.pageXOffset) / ширина ) * 2 - 1;
позиция.y = - ((событие.clientY + window.pageYOffset) / высота) * 2 + 1;
мир.позицияНажатия = позиция;
мир.уведомить("нажали");
};
// // // //
фишкуМожноВыбрать = (индексы, индекс) => фишкуМожноВыбрать = (индексы, индекс) =>
{ {
var позиция = позицияИндексаФишки(индекс); var позиция = позицияИндексаФишки(индекс);
@@ -50,8 +73,8 @@
позицияИндексаФишки = (индекс) => позицияИндексаФишки = (индекс) =>
{ {
const x = индекс / 1000000; const x = Math.round(индекс / 1000000);
const y = (индекс - x * 1000000) / 1000; const y = Math.round((индекс - x * 1000000) / 1000);
const z = индекс - x * 1000000 - y * 1000; const z = индекс - x * 1000000 - y * 1000;
return [x, y, z]; return [x, y, z];
}; };