Browse Source

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

M-0.1.0
Главред | Glavred 3 years ago
parent
commit
72b51ab4d5
5 changed files with 232 additions and 24 deletions
  1. +2
    -0
      0000
  2. +155
    -0
      раскладка|layout.js
  3. +7
    -0
      раскладка|layout.череда
  4. +60
    -19
      сцена|scene.js
  5. +8
    -5
      сцена|scene.череда

+ 2
- 0
0000 View File

@@ -6,5 +6,7 @@ x /интерфейс|ui.js
/интерфейс|ui.череда
x /пуск|run.js
/пуск|run.череда
x /раскладка|layout.js
/раскладка|layout.череда
x /сцена|scene.js
/сцена|scene.череда

+ 155
- 0
раскладка|layout.js View File

@@ -0,0 +1,155 @@


// // // //


ВывестиПозицииРаскладкиKMahjongg = мир =>
{
console.debug("Позиции раскладки KMahjongg НАЧАЛО");
const позиции = мир.раскладкаKMahjongg.позиции;
for (var номер in позиции) {
const позиция = позиции[номер];
console.debug(позиция);
}
console.debug("Позиции раскладки KMahjongg КОНЕЦ");
};


// // // //


РазобратьПозицииЭлементовРаскладкиKMahjongg = мир =>
{
const параметры = мир.раскладкаKMahjongg.параметры;
const строки = мир.раскладкаKMahjongg.строки;
var позиции = [];
for (var номерСлоя = 0; номерСлоя < параметры.глубина; ++номерСлоя)
{
console.debug("cлой", номерСлоя);
for (var ряд = 0; ряд < параметры.высота - 1; ++ряд)
{
for (var столбец = 0; столбец < параметры.ширина - 1; ++столбец)
{
const рядСлоя = ряд + (номерСлоя * параметры.высота);
if (
(строки[рядСлоя][столбец] == '1') &&
(строки[рядСлоя][столбец + 1] == '2') &&
(строки[рядСлоя + 1][столбец] == '4') &&
(строки[рядСлоя + 1][столбец + 1] == '3')
) {
позиции.push([номерСлоя, ряд, столбец]);
}
}
}
}
мир.раскладкаKMahjongg.позиции = позиции;
};


// // // //


ВывестиПараметрыРаскладкиKMahjongg = мир =>
{
console.debug("Параметры раскладки KMahjongg", JSON.stringify(мир.раскладкаKMahjongg.параметры));
};


// // // //


РазобратьПараметрыРаскладкиKMahjongg = мир =>
{
var параметры = {
"ширина": 32,
"высота": 16,
"глубина": 0,
"версия": "1.0",
};
var префиксы = {
"версия": "kmahjongg-layout-v",
"глубина": "d",
"ширина": "w",
"высота": "h",
};
var удалитьЭлементов = 0;
var строки = мир.раскладкаKMahjongg.строки;
for (var номер in строки)
{
var строка = строки[номер];
// Версия.
if (строка.startsWith(префиксы.версия))
{
параметры.версия = строка.substring(префиксы.версия.length);
}
// Глубина.
else if (строка.startsWith(префиксы.глубина))
{
параметры.глубина = строка.substring(префиксы.глубина.length);
}
// Ширина.
else if (строка.startsWith(префиксы.ширина))
{
параметры.ширина = строка.substring(префиксы.ширина.length);
}
// Высота.
else if (строка.startsWith(префиксы.высота))
{
параметры.высота = строка.substring(префиксы.высота.length);
}
else
{
удалитьЭлементов = номер;
break;
}
}
мир.раскладкаKMahjongg.строки.splice(0, удалитьЭлементов);
if (параметры.глубина == 0)
{
параметры.глубина = мир.раскладкаKMahjongg.строки.length / параметры.высота;
}
мир.раскладкаKMahjongg.параметры = параметры;
};


// // // //


ПодготовитьРаскладкуKMahjonggКРазбору = мир =>
{
var строки = мир.раскладкаKMahjongg.содержимое.split(/\n/);
мир.раскладкаKMahjongg.строки = [];
for (var номер in строки)
{
var строка = строки[номер].trim();
// Пропускаем комментарии и пустые строки.
if (строка.startsWith("#") || !строка.length)
{
continue;
}
мир.раскладкаKMahjongg.строки.push(строка);
}
};


// // // //


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


// // // //


РазобратьРаскладкуKMahjongg = мир =>
{
мир.уведомить("надо разобрать раскладку KMahjongg");
};


+ 7
- 0
раскладка|layout.череда View File

@@ -0,0 +1,7 @@
надо разобрать раскладку KMahjongg
подготовить раскладку KMahjongg к разбору
разобрать параметры раскладки KMahjongg
вывести параметры раскладки KMahjongg
разобрать позиции элементов раскладки KMahjongg
вывести позиции раскладки KMahjongg
уведомить об окончании разбора раскладки KMahjongg

+ 60
- 19
сцена|scene.js View File

@@ -1,23 +1,59 @@
const ИМЯ = "ОМ | MB";
const БАЗА = "https://git.opengamestudio.org/mahjong/mahjong-modeli-models/raw/branch/master/";
const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | Mahjong resources";


// // // //


ВключитьКэшированиеРесурсовThreeJSДляЗагрузкиРесурсовИзМодулей = мир =>
ЦентрироватьСцену = мир =>
{
THREE.Cache.enabled = true;
// мир.корень.position
};

// // // //


ОтобразитьРаскладкуОднойФишкой = мир =>
{
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 = слой;

}
};


// // // //


УбратьПереворотТекстурыФишки = мир =>
ЗагрузитьРаскладку = мир =>
{
мир.текстураФишки.flipY = false;
var модуль = мир.модули.модульПоИмени(ИМЯ_МОДУЛЯ_РЕСУРСОВ);
//var ресурс = "/cat.layout";
var ресурс = "/X_shaped.layout";
var содержимое = модуль.содержимое[ресурс];
мир.раскладкаKMahjongg = {
"содержимое": содержимое,
};
};


@@ -26,8 +62,8 @@ const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга |

ПовернутьФишку = мир =>
{
мир.модельФишки.rotation.x += 0.03;
мир.модельФишки.rotation.y += 0.02;
мир.фишка.rotation.x += 0.03;
мир.фишка.rotation.y += 0.02;
};


@@ -61,7 +97,7 @@ const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга |
ПодготовитьСцену = мир =>
{
var коэффициент = 2;
var расстояние = 5;
var расстояние = 20;
мир.камера.position.y = расстояние * коэффициент;
мир.камера.position.z = расстояние;
мир.камера.lookAt(new THREE.Vector3(0, 0, 0));
@@ -69,22 +105,19 @@ const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга |
мир.свет = new THREE.DirectionalLight(0xffffff, 1);
мир.свет.position.set(-0.5, 1, 0.5).normalize();
мир.сцена.add(мир.свет);
мир.корень = new THREE.Group();
мир.сцена.add(мир.корень);
};


// // // //


СоздатьФишку = мир =>
ПодготовитьФишку = мир =>
{
мир.сцена.add(мир.модельФишки);
var материал = new THREE.MeshLambertMaterial({map: мир.текстураФишки});
мир.модельФишки.traverse(function(ребёнок) {
if (ребёнок.isMesh)
{
ребёнок.material = материал;
}
});
мир.фишка.material = материал;
};


@@ -102,6 +135,7 @@ const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга |
адрес,
function(текстура) {
мир.текстураФишки = текстура;
мир.текстураФишки.flipY = false;
мир.уведомить("загрузили текстуру фишки из модуля");
},
null,
@@ -124,17 +158,24 @@ const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга |
// // // //


ЗагрузитьМодельФишки = мир =>
ЗагрузитьФишку = мир =>
{
var модуль = мир.модули.модульПоИмени(ИМЯ_МОДУЛЯ_РЕСУРСОВ);
var ресурс = "/фишка.gltf";
var адрес = `${window.location.origin}${ресурс}`;
THREE.Cache.enabled = true;
THREE.Cache.add(адрес, модуль.содержимое[ресурс]);
мир.загрузчикGLTF.load(
адрес,
function(gltf) {
мир.модельФишки = gltf.scene;
мир.уведомить("загрузили модель фишки");
// Вычленяем Mesh.
gltf.scene.traverse(function(ребёнок) {
if (ребёнок.isMesh)
{
мир.фишка = ребёнок;
}
});
мир.уведомить("загрузили фишку");
},
null,
function(error) {


+ 8
- 5
сцена|scene.череда View File

@@ -5,14 +5,17 @@
изменить размер отрисовщика ThreeJS
создать загрузчик GLTF
создать загрузчик текстур
включить кэширование ресурсов ThreeJS для загрузки ресурсов из модулей
подготовить сцену
загрузить модель фишки
загрузили модель фишки
загрузить фишку
загрузили фишку
загрузить текстуру фишки из модуля
загрузили текстуру фишки из модуля
убрать переворот текстуры фишки
создать фишку
загрузить раскладку
разобрать раскладку KMahjongg
разобрали раскладку KMahjongg
подготовить фишку
отобразить раскладку одной фишкой
центрировать сцену
запустить отрисовку
# запустить таймер поворота фишки
изменили размер окна браузера


Loading…
Cancel
Save