@@ -6,7 +6,7 @@ x /интерфейс|ui.js | |||||
/интерфейс|ui.череда | /интерфейс|ui.череда | ||||
x /пуск|run.js | x /пуск|run.js | ||||
/пуск|run.череда | /пуск|run.череда | ||||
x /раскладка|layout.js | |||||
/раскладка|layout.череда | |||||
x /сцена|scene.js | x /сцена|scene.js | ||||
/сцена|scene.череда | |||||
/сцена|scene.череда | |||||
x /тема|theme.js | |||||
/тема|theme.череда |
@@ -1,154 +0,0 @@ | |||||
// // // // | |||||
ВывестиПозицииРаскладкиKMahjongg = мир => | |||||
{ | |||||
console.debug("Позиции раскладки KMahjongg НАЧАЛО"); | |||||
const позиции = мир.раскладкаKMahjongg.позиции; | |||||
for (var номер in позиции) { | |||||
const позиция = позиции[номер]; | |||||
console.debug(позиция); | |||||
} | |||||
console.debug("Позиции раскладки KMahjongg КОНЕЦ"); | |||||
}; | |||||
// // // // | |||||
РазобратьПозицииЭлементовРаскладкиKMahjongg = мир => | |||||
{ | |||||
const параметры = мир.раскладкаKMahjongg.параметры; | |||||
const строки = мир.раскладкаKMahjongg.строки; | |||||
var позиции = []; | |||||
for (var номерСлоя = 0; номерСлоя < параметры.глубина; ++номерСлоя) | |||||
{ | |||||
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"); | |||||
}; | |||||
@@ -1,7 +0,0 @@ | |||||
надо разобрать раскладку KMahjongg | |||||
подготовить раскладку KMahjongg к разбору | |||||
разобрать параметры раскладки KMahjongg | |||||
# вывести параметры раскладки KMahjongg | |||||
разобрать позиции элементов раскладки KMahjongg | |||||
# вывести позиции раскладки KMahjongg | |||||
уведомить об окончании разбора раскладки KMahjongg |
@@ -1,6 +1,22 @@ | |||||
const ИМЯ = "ОМ | MB"; | const ИМЯ = "ОМ | MB"; | ||||
const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | Mahjong resources"; | const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | Mahjong resources"; | ||||
// // // // | |||||
ВывестиФактЗагрузкиТемыФишекМаджонга = мир => | |||||
{ | |||||
console.debug("загрузили темы фишек маджонга"); | |||||
}; | |||||
// // // // | |||||
ЗадатьТемуФишекДляЗагрузки = мир => | |||||
{ | |||||
мир.темаФишек = "отладочная|debug"; | |||||
}; | |||||
// // // // | // // // // | ||||
@@ -8,7 +8,14 @@ | |||||
подготовить сцену | подготовить сцену | ||||
загрузить фишку | загрузить фишку | ||||
загрузили фишку | загрузили фишку | ||||
загрузить текстуру фишки из модуля | |||||
задать тему фишек для загрузки | |||||
загрузить тему фишек маджонга | |||||
загрузили тему фишек маджонга | |||||
вывести факт загрузки темы фишек маджонга | |||||
# загрузить текстуру фишки из модуля | |||||
загрузили текстуру фишки из модуля | загрузили текстуру фишки из модуля | ||||
загрузить раскладку | загрузить раскладку | ||||
разобрать раскладку KMahjongg | разобрать раскладку KMahjongg | ||||
@@ -17,7 +24,6 @@ | |||||
отобразить раскладку одной фишкой | отобразить раскладку одной фишкой | ||||
центрировать сцену | центрировать сцену | ||||
запустить отрисовку | запустить отрисовку | ||||
# запустить таймер поворота фишки | |||||
изменили размер окна браузера | изменили размер окна браузера | ||||
изменить размер отрисовщика ThreeJS | изменить размер отрисовщика ThreeJS | ||||
@@ -0,0 +1,93 @@ | |||||
// // // // | |||||
УведомитьОНеудачнойЗагрузкеТемыФишекМаджонга = мир => | |||||
{ | |||||
мир.уведомить("не загрузили тему фишек маджонга"); | |||||
}; | |||||
// // // // | |||||
УведомитьОбУспешнойЗагрузкеТемыФишекМаджонга = мир => | |||||
{ | |||||
мир.уведомить("загрузили тему фишек маджонга"); | |||||
}; | |||||
// // // // | |||||
ПроверитьНаличиеВсехЗагруженныхТекстурТемыФишекМаджонга = мир => | |||||
{ | |||||
if (мир.загрузкаТемыФишек.номер < мир.загрузкаТемыФишек.всего) | |||||
{ | |||||
мир.загрузкаТемыФишек.номер += 1; | |||||
мир.уведомить("загружены не все текстуры темы фишек маджонга"); | |||||
} | |||||
else | |||||
{ | |||||
мир.уведомить("загружены все текстуры темы фишек маджонга"); | |||||
} | |||||
}; | |||||
// // // // | |||||
ЗагрузитьСледующуюТекстуруТемыФишекМаджонга = мир => | |||||
{ | |||||
console.debug("загрузить следующую текстуру темы фишек маджонга"); | |||||
const загрузка = мир.загрузкаТемыФишек; | |||||
var тема = мир.темыФишек[загрузка.имя]; | |||||
var имяМодуляРесурсов = тема["🗿"]; | |||||
var модуль = мир.модули.модульПоИмени(имяМодуляРесурсов); | |||||
var ресурс = тема[загрузка.номер]; | |||||
var содержимое = модуль.содержимое[ресурс]; | |||||
var b64 = base64js.fromByteArray(new Uint8Array(содержимое)); | |||||
// Текстуры ожидаем в формате PNG. | |||||
var адрес = `data:image/png;base64,${b64}`; | |||||
мир.загрузчикТекстур.load( | |||||
адрес, | |||||
function(текстура) { | |||||
текстура.flipY = false; | |||||
мир.текстурыТемФишек[загрузка.имя][загрузка.номер] = текстура; | |||||
мир.уведомить("загрузили текстуру темы фишек маджонга"); | |||||
}, | |||||
null, | |||||
function(error) { | |||||
console.error("ОШИБКА | ERROR", error); | |||||
мир.уведомить("не загрузили текстуру темы фишек маджонга"); | |||||
} | |||||
); | |||||
}; | |||||
// // // // | |||||
ПодготовитьсяКЗагрузкеТемыФишекМаджонга = мир => | |||||
{ | |||||
console.debug("ПодготовитьсяКЗагрузкеТемыФишекМаджонга"); | |||||
мир.загрузкаТемыФишек = { | |||||
"номер": 1, | |||||
"всего": 42, | |||||
"имя": мир.темаФишек, | |||||
}; | |||||
мир.текстурыТемФишек = {}; | |||||
мир.текстурыТемФишек[мир.загрузкаТемыФишек.имя] = {}; | |||||
}; | |||||
// // // // | |||||
ЗагрузитьТемуФишекМаджонга = мир => | |||||
{ | |||||
мир.уведомить("надо загрузить тему фишек маджонга"); | |||||
}; | |||||
@@ -0,0 +1,11 @@ | |||||
надо загрузить тему фишек маджонга | |||||
подготовиться к загрузке темы фишек маджонга | |||||
загрузить следующую текстуру темы фишек маджонга | |||||
загрузили текстуру темы фишек маджонга | |||||
проверить наличие всех загруженных текстур темы фишек маджонга | |||||
не загрузили текстуру темы фишек маджонга | |||||
уведомить о неудачной загрузке темы фишек маджонга | |||||
загружены не все текстуры темы фишек маджонга | |||||
загрузить следующую текстуру темы фишек маджонга | |||||
загружены все текстуры темы фишек маджонга | |||||
уведомить об успешной загрузке темы фишек маджонга |