Compare commits

...

11 Commits

Author SHA1 Message Date
8ea0353eea Исправить опечатку | Fix typo 2020-10-30 14:25:09 +03:00
65b72ef076 Использовать указатели модулей | Use module pointers 2020-10-30 14:18:37 +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
Главред | Glavred
1d2caf9d74 Изменения от Главреда ГитЖС | Changes of GitJS Glavred 2020-09-22 18:24:16 +03:00
Главред | Glavred
164ddbb896 Изменения от Главреда ГитЖС | Changes of GitJS Glavred 2020-09-22 15:26:37 +03:00
Главред | Glavred
bddc7075a0 Изменения от Главреда ГитЖС | Changes of GitJS Glavred 2020-09-22 15:25:29 +03:00
Главред | Glavred
c29a00c327 Изменения от Главреда ГитЖС | Changes of GitJS Glavred 2020-09-22 15:24:28 +03:00
Главред | Glavred
e10d402ed3 Изменения от Главреда ГитЖС | Changes of GitJS Glavred 2020-09-22 15:23:50 +03:00
Главред | Glavred
bed828e0b8 Изменения от Главреда ГитЖС | Changes of GitJS Glavred 2020-09-22 15:22:34 +03:00
7 changed files with 199 additions and 54 deletions

View File

@@ -1,5 +1,5 @@
const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | Mahjong resources";
const ИМЯ_ОТЛ_РАСКЛАДКИ = "Отладочные раскладки Маджонга | Mahjong debug layouts";
const УКАЗАТЕЛЬ_МОДУЛЯ_РЕСУРСОВ = "https://git.opengamestudio.org/mahjong/mahjong-res/raw/commit/5430b4d62bcc3d60f1e570485ee5cd562b70582d/0000";
const УКАЗАТЕЛЬ_ОТЛ_РАСКЛАДКИ = "https://git.opengamestudio.org/mahjong/mahjong-otl-raskladki-dbg-layouts/raw/commit/2951feab28448266d3446974e781d320ebbed8df/0000";
// // // //
@@ -22,11 +22,21 @@ const ИМЯ_ОТЛ_РАСКЛАДКИ = "Отладочные раскладк
// // // //
ЗагрузитьОтладочнуюРаскладку = мир =>
ЗагрузитьВыбраннуюРаскладку = мир =>
{
var модуль = мир.модули.модульПоИмени(ИМЯ_ОТЛ_РАСКЛАДКИ);
//var ресурс = "/успех|success.layout";
var ресурс = "/провал|failure.layout";
var указательМодуля = УКАЗАТЕЛЬ_МОДУЛЯ_РЕСУРСОВ;
var ресурс = "/X_shaped.layout";
if (мир.выбраннаяРаскладка == "😀")
{
ресурс = "/успех|success.layout";
указательМодуля = УКАЗАТЕЛЬ_ОТЛ_РАСКЛАДКИ;
}
else if (мир.выбраннаяРаскладка == "😭")
{
ресурс = "/провал|failure.layout";
указательМодуля = УКАЗАТЕЛЬ_ОТЛ_РАСКЛАДКИ;
}
var модуль = мир.модули.модульПоУказателю(указательМодуля);
var содержимое = модуль.содержимое[ресурс];
мир.раскладкаKMahjongg = {
"содержимое": содержимое,
@@ -39,7 +49,7 @@ const ИМЯ_ОТЛ_РАСКЛАДКИ = "Отладочные раскладк
ЗагрузитьФишку = мир =>
{
var модуль = мир.модули.модульПоИмени(ИМЯ_МОДУЛЯ_РЕСУРСОВ);
var модуль = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_МОДУЛЯ_РЕСУРСОВ);
var ресурс = "/фишка.gltf";
var адрес = `${window.location.origin}${ресурс}`;
THREE.Cache.enabled = true;

View File

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

View File

@@ -109,7 +109,7 @@
ПодготовитьСцену = мир =>
{
var коэффициент = 2;
var расстояние = 6;
var расстояние = 14;
мир.камера.position.y = расстояние * коэффициент;
мир.камера.position.z = расстояние;
мир.камера.lookAt(new THREE.Vector3(0, 0, 0));

View File

@@ -1,4 +1,4 @@
пуск модулей маджонга
выбрали раскладку
настроить ThreeJS
встроить отрисовщика ThreeJS
отслеживать изменение размера окна браузера

View File

@@ -3,6 +3,123 @@
// // // //
УведомитьОПоражении = мир =>
{
мир.уведомить("поражение");
};
// // // //
УведомитьОПобеде = мир =>
{
мир.уведомить("победа");
};
// // // //
ВывестиПобеду = мир =>
{
console.debug("ПОБЕДА");
};
// // // //
ВывестиПоражение = мир =>
{
console.debug("ПОРАЖЕНИЕ");
};
// // // //
ПроверитьНаличиеФишекНаИгровомПоле = мир =>
{
if (Object.keys(мир.индексыФишек).length > 0)
{
мир.уведомить("фишки на игровом поле присутствуют");
}
else {
мир.уведомить("фишки на игровом поле отсутствуют");
}
};
// // // //
ВывестиПрисутствиеХодов = мир =>
{
console.debug("ходы есть");
};
// // // //
ВывестиОтсутствиеХодов = мир =>
{
console.debug("ходов нет");
};
// // // //
ПроверитьНаличиеХодов = мир =>
{
var номера = мир.доступныеДляВыбораНомераФишек;
for (var н0 in номера)
{
for (var н1 in номера)
{
// Пропускаем одну и ту же фишку.
if (н0 == н1)
{
continue;
}
var номер0 = номера[н0];
var номер1 = номера[н1];
var группа0 = мир.группыФишек[номер0];
var группа1 = мир.группыФишек[номер1];
if (группа0 == группа1)
{
мир.уведомить("ходы присутствуют");
return;
}
}
}
мир.уведомить("ходы отсутствуют");
};
// // // //
СобратьДоступныеДляВыбораНомераФишек = мир =>
{
мир.доступныеДляВыбораНомераФишек = [];
for (индекс in мир.индексыФишек)
{
if (фишкуМожноВыбрать(мир.индексыФишек, индекс))
{
var номер = мир.индексыФишек[индекс];
мир.доступныеДляВыбораНомераФишек.push(номер);
}
}
};
// // // //
ЗапуститьПлавноеСкрытиеФишек = мир =>
{
var шаг = 10;
@@ -11,7 +128,6 @@
var дельтаПрозрачности = шаг / длительность;
const анимация = setInterval(
function() {
const позиции = мир.раскладкаKMahjongg.позиции;
прозрачность -= дельтаПрозрачности;
// Возвращаем прозрачность материалам перед последующим скрытием фишек.
// И планируем выход из этой анимации.
@@ -214,25 +330,6 @@
ОкраситьНайденнуюФишку = мир =>
{
/*
// Очищаем цвета всех фишек.
for (var номер in мир.фишки)
{
var фишка = мир.фишки[номер];
var группа = мир.группыФишек[номер];
var материал = мир.материалыФишек[группа];
фишка.material = материал;
}
// Окрашиваем выбранные фишки.
for (var id in мир.номераВыбранныхФишек)
{
var номер = мир.номераВыбранныхФишек[id];
var фишка = мир.фишки[номер];
var группа = мир.группыФишек[номер];
var материал = мир.материалыВыбранныхФишек[группа];
фишка.material = материал;
}
*/
var номер = мир.номерНайденнойФишки;
var фишка = мир.фишки[номер];
var группа = мир.группыФишек[номер];
@@ -266,25 +363,23 @@
ПроверитьДоступностьФишкиДляВыбора = мир =>
{
// Проверяем заблокированность фишки одновременно с обеих сторон.
var позиция = мир.раскладкаKMahjongg.позиции[мир.номерНайденнойФишки];
var слева = уФишкиЕстьСоседи(мир.индексыФишек, позиция, 0, -2);
var справа = уФишкиЕстьСоседи(мир.индексыФишек, позиция, 0, 2);
if (слева && справа)
// Удостоверимся, что это не одна и та же фишка, выбранная дважды.
if (мир.номераВыбранныхФишек.length)
{
return;
}
// Проверяем заблокированность сверху.
for (var смещениеСтолбца = -1; смещениеСтолбца < 2; ++смещениеСтолбца)
{
if (уФишкиЕстьСоседи(мир.индексыФишек, позиция, 1, смещениеСтолбца))
var номер = мир.номераВыбранныхФишек[0];
if (номер == мир.номерНайденнойФишки)
{
return;
}
}
мир.уведомить("фишка доступна для выбора");
// Проверяем доступность с точки зрения правил Маджонга.
var позиция = мир.раскладкаKMahjongg.позиции[мир.номерНайденнойФишки];
var индекс = индексПозицииФишки(позиция);
if (фишкуМожноВыбрать(мир.индексыФишек, индекс))
{
мир.уведомить("фишка доступна для выбора");
}
};
@@ -316,9 +411,8 @@
for (var номер in позиции)
{
var позиция = позиции[номер];
var фишка = мир.фишки[номер];
var индекс = индексПозицииФишки(позиция);
мир.индексыФишек[индекс] = фишка;
мир.индексыФишек[индекс] = номер;
};
};
@@ -428,7 +522,11 @@
var размеры = [
(границы.max.x - границы.min.x) / 2,
(границы.max.z - границы.min.z) / 2,
границы.max.y - границы.min.y,
//границы.max.y - границы.min.y,
];
var отступы = [
0.02,
0.02,
];
const позиции = мир.раскладкаKMahjongg.позиции;
@@ -444,8 +542,8 @@
var слой = позиция[0];
var ряд = позиция[1];
var столбец = позиция[2];
фишка.position.x = столбец * размеры[0];
фишка.position.z = ряд * размеры[1];
фишка.position.x = столбец * (размеры[0] + отступы[0]);
фишка.position.z = ряд * (размеры[1] + отступы[1]);
фишка.position.y = слой;
}
};

View File

@@ -26,10 +26,10 @@
отключить возможность поиска фишки
сравнить выбранные фишки
фишки совпадают
вывести совпадение фишек
# вывести совпадение фишек
плавно скрыть фишки
фишки не совпадают
вывести различие фишек
# вывести различие фишек
очистить окрашивание первой найденной фишки
очистить выбор первой найденной фишки
включить возможность поиска фишки
@@ -40,4 +40,17 @@
скрыть совпадающие фишки
очистить индексы выбранных фишек
очистить выбор фишек
включить возможность поиска фишки
собрать доступные для выбора номера фишек
проверить наличие ходов
ходы присутствуют
вывести присутствие ходов
включить возможность поиска фишки
ходы отсутствуют
вывести отсутствие ходов
проверить наличие фишек на игровом поле
фишки на игровом поле присутствуют
вывести поражение
уведомить о поражении
фишки на игровом поле отсутствуют
вывести победу
уведомить о победе

View File

@@ -1,5 +1,29 @@
фишкуМожноВыбрать = (индексы, индекс) =>
{
var позиция = позицияИндексаФишки(индекс);
// Проверяем заблокированность фишки одновременно с обеих сторон.
var слева = уФишкиЕстьСоседи(индексы, позиция, 0, -2);
var справа = уФишкиЕстьСоседи(индексы, позиция, 0, 2);
if (слева && справа)
{
return false;
}
// Проверяем заблокированность сверху.
for (var смещениеСтолбца = -1; смещениеСтолбца < 2; ++смещениеСтолбца)
{
if (уФишкиЕстьСоседи(индексы, позиция, 1, смещениеСтолбца))
{
return false;
}
}
return true;
};
// // // //
@@ -26,8 +50,8 @@
позицияИндексаФишки = (индекс) =>
{
const x = индекс / 1000000;
const y = (индекс - x * 1000000) / 1000;
const x = Math.round(индекс / 1000000);
const y = Math.round((индекс - x * 1000000) / 1000);
const z = индекс - x * 1000000 - y * 1000;
return [x, y, z];
};