Переглянути джерело

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

M-0.1.0
Главред | Glavred 4 роки тому
джерело
коміт
6a38207aa4
3 змінених файлів з 0 додано та 499 видалено
  1. +0
    -2
      0000
  2. +0
    -432
      сцена|scene.js
  3. +0
    -65
      сцена|scene.череда

+ 0
- 2
0000 Переглянути файл

@@ -6,8 +6,6 @@ x /интерфейс|ui.js
/интерфейс|ui.череда
x /пуск|run.js
/пуск|run.череда
/сцена|scene.js
/сцена|scene.череда
x /тема|theme.js
/тема|theme.череда
x /функции|functions.js

+ 0
- 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);
}
);
};



+ 0
- 65
сцена|scene.череда Переглянути файл

@@ -1,65 +0,0 @@
пуск модулей маджонга
настроить ThreeJS
встроить отрисовщика ThreeJS
отслеживать изменение размера окна браузера
изменить размер отрисовщика ThreeJS
создать загрузчик GLTF
создать загрузчик текстур
подготовить сцену
загрузить фишку
загрузили фишку
# загрузить раскладку
загрузить отладочную раскладку
разобрать раскладку KMahjongg
разобрали раскладку KMahjongg
задать тему фишек для загрузки
загрузить тему фишек маджонга
загрузили тему фишек маджонга
# вывести факт загрузки темы фишек маджонга
# загрузить текстуру фишки из модуля
#загрузили текстуру фишки из модуля
# подготовить фишку
# отобразить раскладку одной фишкой
# отобразить раскладку последовательно со всеми текстурами
создать материалы фишек отладочной темы
создать узлы фишек
создать группы фишек
задать материалы фишкам по группам
центрировать сцену
отслеживать нажатия мышью
отслеживать нажатия пальцем
исправить отслеживание нажатий на IOS
подготовить выбор фишек
создать материалы выбранных фишек отладочной темы
запустить отрисовку
изменили размер окна браузера
изменить размер отрисовщика ThreeJS
нажали
# вывести координаты нажатия
выбрать фишку в координатах нажатия
выбор фишки
вывести выбранные фишки
окрасить выбранные фишки

#поворот фишки
# отладка
# повернуть фишку

Завантаження…
Відмінити
Зберегти