Browse Source

Изменения от Главреда ГитЖС | Changes of GitJS Glavred

M-0.1.0
Главред | Glavred 4 years ago
parent
commit
b7de06d515
7 changed files with 316 additions and 10 deletions
  1. +4
    -2
      0000
  2. +4
    -3
      загрузка|loading.js
  3. +2
    -3
      загрузка|loading.череда
  4. +103
    -2
      пуск|run.js
  5. +9
    -0
      пуск|run.череда
  6. +180
    -0
      фишки|tiles.js
  7. +14
    -0
      фишки|tiles.череда

+ 4
- 2
0000 View File

@@ -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.череда

+ 4
- 3
загрузка|loading.js View File

@@ -1,11 +1,12 @@

const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | Mahjong resources";
const ИМЯ_ОТЛ_РАСКЛАДКИ = "Отладочные раскладки Маджонга | Mahjong debug layouts";


// // // // // // // //




УведомитьОбОкончанииЗагрузок = мир =>
УведомитьОЗагрузкеРесурсовСцены = мир =>
{ {
мир.уведомить("окончили загрузки");
мир.уведомить("загрузили ресурсы сцены");
}; };






+ 2
- 3
загрузка|loading.череда View File

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

+ 103
- 2
пуск|run.js View File

@@ -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(мир.корень);
мир.уведомить("подготовили сцену");
}; };






+ 9
- 0
пуск|run.череда View File

@@ -6,6 +6,15 @@
создать загрузчик GLTF создать загрузчик GLTF
создать загрузчик текстур создать загрузчик текстур
подготовить сцену подготовить сцену
загрузить ресурсы сцены
загрузили ресурсы сцены
создать фишки в сцене
создали фишки в сцене
центрировать сцену
отслеживать нажатия мышью
отслеживать нажатия пальцем
исправить отслеживание нажатий на IOS
запустить отрисовку запустить отрисовку

изменили размер окна браузера изменили размер окна браузера
изменить размер отрисовщика ThreeJS изменить размер отрисовщика ThreeJS

+ 180
- 0
фишки|tiles.js View 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
- 0
фишки|tiles.череда View File

@@ -0,0 +1,14 @@
надо создать фишки в сцене
создать материалы фишек отладочной темы
создать узлы фишек
создать группы фишек
задать материалы фишкам по группам
подготовить выбор фишек
создать материалы выбранных фишек отладочной темы
уведомить о создании фишек в сцене

нажали
выбрать фишку в координатах нажатия
выбор фишки
вывести выбранные фишки
окрасить выбранные фишки

Loading…
Cancel
Save