Изменения от Главреда ГитЖС | Changes of GitJS Glavred
This commit is contained in:
6
0000
6
0000
@@ -2,7 +2,9 @@
|
|||||||
1.0.0
|
1.0.0
|
||||||
https://git.opengamestudio.org/mahjong/mahjong-scena
|
https://git.opengamestudio.org/mahjong/mahjong-scena
|
||||||
|
|
||||||
/загрузка|loading.js
|
x /загрузка|loading.js
|
||||||
/загрузка|loading.череда
|
/загрузка|loading.череда
|
||||||
x /пуск|run.js
|
x /пуск|run.js
|
||||||
/пуск|run.череда
|
/пуск|run.череда
|
||||||
|
x /фишки|tiles.js
|
||||||
|
/фишки|tiles.череда
|
||||||
@@ -1,11 +1,12 @@
|
|||||||
|
const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | Mahjong resources";
|
||||||
|
const ИМЯ_ОТЛ_РАСКЛАДКИ = "Отладочные раскладки Маджонга | Mahjong debug layouts";
|
||||||
|
|
||||||
// // // //
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
УведомитьОбОкончанииЗагрузок = мир =>
|
УведомитьОЗагрузкеРесурсовСцены = мир =>
|
||||||
{
|
{
|
||||||
мир.уведомить("окончили загрузки");
|
мир.уведомить("загрузили ресурсы сцены");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
подготовили сцену
|
надо загрузить ресурсы сцены
|
||||||
загрузить фишку
|
загрузить фишку
|
||||||
загрузили фишку
|
загрузили фишку
|
||||||
# загрузить раскладку
|
|
||||||
загрузить отладочную раскладку
|
загрузить отладочную раскладку
|
||||||
разобрать раскладку KMahjongg
|
разобрать раскладку KMahjongg
|
||||||
разобрали раскладку KMahjongg
|
разобрали раскладку KMahjongg
|
||||||
задать отладочную тему фишек для загрузки
|
задать отладочную тему фишек для загрузки
|
||||||
загрузить тему фишек маджонга
|
загрузить тему фишек маджонга
|
||||||
загрузили тему фишек маджонга
|
загрузили тему фишек маджонга
|
||||||
уведомить об окончании загрузок
|
уведомить о загрузке ресурсов сцены
|
||||||
105
пуск|run.js
105
пуск|run.js
@@ -3,6 +3,109 @@
|
|||||||
// // // //
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
ИсправитьОтслеживаниеНажатийНаIOS = мир =>
|
||||||
|
{
|
||||||
|
// https://stackoverflow.com/a/31459240/3404710
|
||||||
|
мир.отрисовщик.domElement.style.cursor = "pointer";
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
ОтслеживатьНажатияПальцем = мир =>
|
||||||
|
{
|
||||||
|
window.addEventListener(
|
||||||
|
"touchstart",
|
||||||
|
function(событие) {
|
||||||
|
var позиция = new THREE.Vector2();
|
||||||
|
позиция.x = (событие.touches[0].clientX / window.innerWidth) * 2 - 1;
|
||||||
|
позиция.y = - (событие.touches[0].clientY / window.innerHeight) * 2 + 1;
|
||||||
|
мир.позицияНажатия = позиция;
|
||||||
|
мир.уведомить("нажали");
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
ОтслеживатьНажатияМышью = мир =>
|
||||||
|
{
|
||||||
|
window.addEventListener(
|
||||||
|
"click",
|
||||||
|
function(событие) {
|
||||||
|
var позиция = new THREE.Vector2();
|
||||||
|
позиция.x = (событие.clientX / window.innerWidth) * 2 - 1;
|
||||||
|
позиция.y = - (событие.clientY / window.innerHeight) * 2 + 1;
|
||||||
|
мир.позицияНажатия = позиция;
|
||||||
|
мир.уведомить("нажали");
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
ЦентрироватьСцену = мир =>
|
||||||
|
{
|
||||||
|
var мин = {
|
||||||
|
"x": 0,
|
||||||
|
"z": 0,
|
||||||
|
};
|
||||||
|
var макс = {
|
||||||
|
"x": 0,
|
||||||
|
"z": 0,
|
||||||
|
};
|
||||||
|
for (var номер in мир.фишки)
|
||||||
|
{
|
||||||
|
const фишка = мир.фишки[номер];
|
||||||
|
if (фишка.position.x < мин.x)
|
||||||
|
{
|
||||||
|
мин.x = фишка.position.x;
|
||||||
|
}
|
||||||
|
if (фишка.position.x > макс.x)
|
||||||
|
{
|
||||||
|
макс.x = фишка.position.x;
|
||||||
|
}
|
||||||
|
if (фишка.position.z < мин.z)
|
||||||
|
{
|
||||||
|
мин.z = фишка.position.z;
|
||||||
|
}
|
||||||
|
if (фишка.position.z > макс.z)
|
||||||
|
{
|
||||||
|
макс.z = фишка.position.z;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
мир.корень.position.x -= (макс.x - мин.x) / 2;
|
||||||
|
мир.корень.position.z -= (макс.z - мин.z) / 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
СоздатьФишкиВСцене = мир =>
|
||||||
|
{
|
||||||
|
мир.уведомить("надо создать фишки в сцене");
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
ЗагрузитьРесурсыСцены = мир =>
|
||||||
|
{
|
||||||
|
мир.уведомить("надо загрузить ресурсы сцены");
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
ПодготовитьСцену = мир =>
|
ПодготовитьСцену = мир =>
|
||||||
{
|
{
|
||||||
var коэффициент = 2;
|
var коэффициент = 2;
|
||||||
@@ -17,8 +120,6 @@
|
|||||||
|
|
||||||
мир.корень = new THREE.Group();
|
мир.корень = new THREE.Group();
|
||||||
мир.сцена.add(мир.корень);
|
мир.сцена.add(мир.корень);
|
||||||
|
|
||||||
мир.уведомить("подготовили сцену");
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,15 @@
|
|||||||
создать загрузчик GLTF
|
создать загрузчик GLTF
|
||||||
создать загрузчик текстур
|
создать загрузчик текстур
|
||||||
подготовить сцену
|
подготовить сцену
|
||||||
|
загрузить ресурсы сцены
|
||||||
|
загрузили ресурсы сцены
|
||||||
|
создать фишки в сцене
|
||||||
|
создали фишки в сцене
|
||||||
|
центрировать сцену
|
||||||
|
отслеживать нажатия мышью
|
||||||
|
отслеживать нажатия пальцем
|
||||||
|
исправить отслеживание нажатий на IOS
|
||||||
запустить отрисовку
|
запустить отрисовку
|
||||||
|
|
||||||
изменили размер окна браузера
|
изменили размер окна браузера
|
||||||
изменить размер отрисовщика ThreeJS
|
изменить размер отрисовщика ThreeJS
|
||||||
180
фишки|tiles.js
Normal file
180
фишки|tiles.js
Normal file
@@ -0,0 +1,180 @@
|
|||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
УведомитьОСозданииФишекВСцене = мир =>
|
||||||
|
{
|
||||||
|
мир.уведомить("создали фишки в сцене");
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
ОкраситьВыбранныеФишки = мир =>
|
||||||
|
{
|
||||||
|
// Очищаем цвета всех фишек.
|
||||||
|
for (var номер in мир.фишки)
|
||||||
|
{
|
||||||
|
var фишка = мир.фишки[номер];
|
||||||
|
var группа = мир.группыФишек[номер];
|
||||||
|
var материал = мир.материалыФишек[группа];
|
||||||
|
фишка.material = материал;
|
||||||
|
}
|
||||||
|
// Окрашиваем выбранные фишки.
|
||||||
|
for (var id in мир.номераВыбранныхФишек)
|
||||||
|
{
|
||||||
|
var номер = мир.номераВыбранныхФишек[id];
|
||||||
|
var фишка = мир.фишки[номер];
|
||||||
|
var группа = мир.группыФишек[номер];
|
||||||
|
var материал = мир.материалыВыбранныхФишек[группа];
|
||||||
|
фишка.material = материал;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
ВывестиВыбранныеФишки = мир =>
|
||||||
|
{
|
||||||
|
var номер = мир.номерВыбраннойФишки;
|
||||||
|
var группа = мир.группыФишек[номер];
|
||||||
|
console.debug(`Выбрали фишку. номер: '${номер}' группа: '${группа}'`);
|
||||||
|
console.debug("Номера выбранных фишек", мир.номераВыбранныхФишек);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
ВыбратьФишкуВКоординатахНажатия = мир =>
|
||||||
|
{
|
||||||
|
мир.ловецНажатий.setFromCamera(мир.позицияНажатия, мир.камера);
|
||||||
|
var пересечения = мир.ловецНажатий.intersectObjects(мир.корень.children);
|
||||||
|
if (пересечения.length)
|
||||||
|
{
|
||||||
|
var фишка = пересечения[0].object;
|
||||||
|
var номер = номерФишки(мир.фишки, фишка.id);
|
||||||
|
if (номер)
|
||||||
|
{
|
||||||
|
мир.номерВыбраннойФишки = номер;
|
||||||
|
мир.номераВыбранныхФишек.push(номер);
|
||||||
|
мир.уведомить("выбор фишки");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
СоздатьМатериалыВыбранныхФишекОтладочнойТемы = мир =>
|
||||||
|
{
|
||||||
|
мир.материалыВыбранныхФишек = [];
|
||||||
|
for (var номер in мир.материалыФишек)
|
||||||
|
{
|
||||||
|
var материал = мир.материалыФишек[номер].clone();
|
||||||
|
материал.color = new THREE.Color(0xff0000);
|
||||||
|
мир.материалыВыбранныхФишек.push(материал);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
ПодготовитьВыборФишек = мир =>
|
||||||
|
{
|
||||||
|
мир.номераВыбранныхФишек = [];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
ЗадатьМатериалыФишкамПоГруппам = мир =>
|
||||||
|
{
|
||||||
|
for (var номер in мир.группыФишек)
|
||||||
|
{
|
||||||
|
var группа = мир.группыФишек[номер];
|
||||||
|
var материал = мир.материалыФишек[группа];
|
||||||
|
фишка = мир.фишки[номер];
|
||||||
|
фишка.material = материал;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
СоздатьГруппыФишек = мир =>
|
||||||
|
{
|
||||||
|
мир.группыФишек = [];
|
||||||
|
const позиции = мир.раскладкаKMahjongg.позиции;
|
||||||
|
var группа = 0;
|
||||||
|
for (var номер in позиции)
|
||||||
|
{
|
||||||
|
мир.группыФишек.push(группа);
|
||||||
|
// Меняем группу каждую пару фишек.
|
||||||
|
if (номер % 2 == 1)
|
||||||
|
{
|
||||||
|
++группа;
|
||||||
|
// Начинаем группы заново, как только они заканчиваются.
|
||||||
|
if (группа >= 42)
|
||||||
|
{
|
||||||
|
группа = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
СоздатьУзлыФишек = мир =>
|
||||||
|
{
|
||||||
|
var границы = мир.фишка.geometry.boundingBox;
|
||||||
|
var размеры = [
|
||||||
|
(границы.max.x - границы.min.x) / 2,
|
||||||
|
(границы.max.z - границы.min.z) / 2,
|
||||||
|
границы.max.y - границы.min.y,
|
||||||
|
];
|
||||||
|
|
||||||
|
const позиции = мир.раскладкаKMahjongg.позиции;
|
||||||
|
мир.фишки = [];
|
||||||
|
for (var номер in позиции)
|
||||||
|
{
|
||||||
|
// Модель.
|
||||||
|
var фишка = мир.фишка.clone();
|
||||||
|
мир.фишки.push(фишка);
|
||||||
|
мир.корень.add(фишка);
|
||||||
|
// Расположение.
|
||||||
|
var позиция = позиции[номер];
|
||||||
|
var слой = позиция[0];
|
||||||
|
var ряд = позиция[1];
|
||||||
|
var столбец = позиция[2];
|
||||||
|
фишка.position.x = столбец * размеры[0];
|
||||||
|
фишка.position.z = ряд * размеры[1];
|
||||||
|
фишка.position.y = слой;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
СоздатьМатериалыФишекОтладочнойТемы = мир =>
|
||||||
|
{
|
||||||
|
мир.материалыФишек = [];
|
||||||
|
var тема = "отладочная|debug";
|
||||||
|
for (var номер = 1; номер <= 42; ++номер)
|
||||||
|
{
|
||||||
|
var текстура = мир.текстурыТемФишек[тема][номер];
|
||||||
|
var материал = new THREE.MeshLambertMaterial({map: текстура});
|
||||||
|
мир.материалыФишек.push(материал);
|
||||||
|
}
|
||||||
|
};
|
||||||
14
фишки|tiles.череда
Normal file
14
фишки|tiles.череда
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
надо создать фишки в сцене
|
||||||
|
создать материалы фишек отладочной темы
|
||||||
|
создать узлы фишек
|
||||||
|
создать группы фишек
|
||||||
|
задать материалы фишкам по группам
|
||||||
|
подготовить выбор фишек
|
||||||
|
создать материалы выбранных фишек отладочной темы
|
||||||
|
уведомить о создании фишек в сцене
|
||||||
|
|
||||||
|
нажали
|
||||||
|
выбрать фишку в координатах нажатия
|
||||||
|
выбор фишки
|
||||||
|
вывести выбранные фишки
|
||||||
|
окрасить выбранные фишки
|
||||||
Reference in New Issue
Block a user