Изменения от Главреда ГитЖС | Changes of GitJS Glavred
This commit is contained in:
2
0000
2
0000
@@ -6,8 +6,6 @@ x /интерфейс|ui.js
|
||||
/интерфейс|ui.череда
|
||||
x /пуск|run.js
|
||||
/пуск|run.череда
|
||||
/сцена|scene.js
|
||||
/сцена|scene.череда
|
||||
x /тема|theme.js
|
||||
/тема|theme.череда
|
||||
x /функции|functions.js
|
||||
432
сцена|scene.js
432
сцена|scene.js
@@ -1,432 +0,0 @@
|
||||
const ИМЯ = "ОМ | MB";
|
||||
const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | Mahjong resources";
|
||||
const ИМЯ_ОТЛ_РАСКЛАДКИ = "Отладочные раскладки Маджонга | Mahjong debug layouts";
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
ОкраситьВыбранныеФишки = мир =>
|
||||
{
|
||||
// Очищаем цвета всех фишек.
|
||||
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(материал);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
ВывестиКоординатыНажатия = мир =>
|
||||
{
|
||||
var п = мир.позицияНажатия;
|
||||
console.debug("нажатие", п.x, п.y);
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
ИсправитьОтслеживаниеНажатийНа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;
|
||||
мир.позицияНажатия = позиция;
|
||||
мир.уведомить("нажали");
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
ЗадатьМатериалыФишкамПоГруппам = мир =>
|
||||
{
|
||||
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 границы = мир.фишка.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 номерМатериала = номер % 42;
|
||||
var материал = мир.материалыФишек[номерМатериала];
|
||||
фишка.material = материал;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
СоздатьМатериалыФишекОтладочнойТемы = мир =>
|
||||
{
|
||||
мир.материалыФишек = [];
|
||||
var тема = "отладочная|debug";
|
||||
for (var номер = 1; номер <= 42; ++номер)
|
||||
{
|
||||
var текстура = мир.текстурыТемФишек[тема][номер];
|
||||
var материал = new THREE.MeshLambertMaterial({map: текстура});
|
||||
мир.материалыФишек.push(материал);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
ВывестиФактЗагрузкиТемыФишекМаджонга = мир =>
|
||||
{
|
||||
console.debug("ВывестиФактЗагрузкиТемыФишекМаджонга");
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
ЦентрироватьСцену = мир =>
|
||||
{
|
||||
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 границы = мир.фишка.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 модуль = мир.модули.модульПоИмени(ИМЯ_МОДУЛЯ_РЕСУРСОВ);
|
||||
//var ресурс = "/cat.layout";
|
||||
var ресурс = "/X_shaped.layout";
|
||||
var содержимое = модуль.содержимое[ресурс];
|
||||
мир.раскладкаKMahjongg = {
|
||||
"содержимое": содержимое,
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
ПовернутьФишку = мир =>
|
||||
{
|
||||
мир.фишка.rotation.x += 0.03;
|
||||
мир.фишка.rotation.y += 0.02;
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
Отладка = мир =>
|
||||
{
|
||||
console.debug("Отладка", Date());
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
ЗапуститьТаймерПоворотаФишки = мир =>
|
||||
{
|
||||
setInterval(
|
||||
function() {
|
||||
мир.уведомить("поворот фишки");
|
||||
},
|
||||
60
|
||||
);
|
||||
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
ПодготовитьФишку = мир =>
|
||||
{
|
||||
var материал = new THREE.MeshLambertMaterial({map: мир.текстураФишки});
|
||||
мир.фишка.material = материал;
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
ЗагрузитьТекстуруФишкиИзМодуля = мир =>
|
||||
{
|
||||
var модуль = мир.модули.модульПоИмени(ИМЯ_МОДУЛЯ_РЕСУРСОВ);
|
||||
var ресурс = "/текстура.png";
|
||||
var содержимое = модуль.содержимое[ресурс];
|
||||
var b64 = base64js.fromByteArray(new Uint8Array(содержимое));
|
||||
var адрес = `data:image/png;base64,${b64}`;
|
||||
мир.загрузчикТекстур.load(
|
||||
адрес,
|
||||
function(текстура) {
|
||||
мир.текстураФишки = текстура;
|
||||
мир.текстураФишки.flipY = false;
|
||||
мир.уведомить("загрузили текстуру фишки из модуля");
|
||||
},
|
||||
null,
|
||||
function(error) {
|
||||
console.error("ОШИБКА | ERROR", error);
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
пуск модулей маджонга
|
||||
настроить ThreeJS
|
||||
встроить отрисовщика ThreeJS
|
||||
отслеживать изменение размера окна браузера
|
||||
изменить размер отрисовщика ThreeJS
|
||||
создать загрузчик GLTF
|
||||
создать загрузчик текстур
|
||||
подготовить сцену
|
||||
|
||||
|
||||
|
||||
|
||||
загрузить фишку
|
||||
загрузили фишку
|
||||
# загрузить раскладку
|
||||
загрузить отладочную раскладку
|
||||
разобрать раскладку KMahjongg
|
||||
разобрали раскладку KMahjongg
|
||||
задать тему фишек для загрузки
|
||||
загрузить тему фишек маджонга
|
||||
загрузили тему фишек маджонга
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# вывести факт загрузки темы фишек маджонга
|
||||
# загрузить текстуру фишки из модуля
|
||||
#загрузили текстуру фишки из модуля
|
||||
# подготовить фишку
|
||||
# отобразить раскладку одной фишкой
|
||||
# отобразить раскладку последовательно со всеми текстурами
|
||||
создать материалы фишек отладочной темы
|
||||
создать узлы фишек
|
||||
создать группы фишек
|
||||
задать материалы фишкам по группам
|
||||
центрировать сцену
|
||||
отслеживать нажатия мышью
|
||||
отслеживать нажатия пальцем
|
||||
исправить отслеживание нажатий на IOS
|
||||
подготовить выбор фишек
|
||||
создать материалы выбранных фишек отладочной темы
|
||||
запустить отрисовку
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
изменили размер окна браузера
|
||||
изменить размер отрисовщика ThreeJS
|
||||
|
||||
нажали
|
||||
# вывести координаты нажатия
|
||||
выбрать фишку в координатах нажатия
|
||||
|
||||
выбор фишки
|
||||
вывести выбранные фишки
|
||||
окрасить выбранные фишки
|
||||
|
||||
#поворот фишки
|
||||
# отладка
|
||||
# повернуть фишку
|
||||
Reference in New Issue
Block a user