Просмотр исходного кода

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

M-0.1.0
Главред | Glavred 4 лет назад
Родитель
Сommit
b7de06d515
7 измененных файлов: 316 добавлений и 10 удалений
  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 Просмотреть файл

@@ -2,7 +2,9 @@
1.0.0
https://git.opengamestudio.org/mahjong/mahjong-scena

/загрузка|loading.js
x /загрузка|loading.js
/загрузка|loading.череда
x /пуск|run.js
/пуск|run.череда
/пуск|run.череда
x /фишки|tiles.js
/фишки|tiles.череда

+ 4
- 3
загрузка|loading.js Просмотреть файл

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

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

// // // //


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




+ 2
- 3
загрузка|loading.череда Просмотреть файл

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

+ 103
- 2
пуск|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;
@@ -17,8 +120,6 @@
мир.корень = new THREE.Group();
мир.сцена.add(мир.корень);
мир.уведомить("подготовили сцену");
};




+ 9
- 0
пуск|run.череда Просмотреть файл

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

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

+ 180
- 0
фишки|tiles.js Просмотреть файл

@@ -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.череда Просмотреть файл

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

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

Загрузка…
Отмена
Сохранить