@@ -6,7 +6,7 @@ x /интерфейс|ui.js | |||
/интерфейс|ui.череда | |||
x /пуск|run.js | |||
/пуск|run.череда | |||
x /раскладка|layout.js | |||
/раскладка|layout.череда | |||
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 ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | Mahjong resources"; | |||
// // // // | |||
ВывестиФактЗагрузкиТемыФишекМаджонга = мир => | |||
{ | |||
console.debug("загрузили темы фишек маджонга"); | |||
}; | |||
// // // // | |||
ЗадатьТемуФишекДляЗагрузки = мир => | |||
{ | |||
мир.темаФишек = "отладочная|debug"; | |||
}; | |||
// // // // | |||
@@ -8,7 +8,14 @@ | |||
подготовить сцену | |||
загрузить фишку | |||
загрузили фишку | |||
загрузить текстуру фишки из модуля | |||
задать тему фишек для загрузки | |||
загрузить тему фишек маджонга | |||
загрузили тему фишек маджонга | |||
вывести факт загрузки темы фишек маджонга | |||
# загрузить текстуру фишки из модуля | |||
загрузили текстуру фишки из модуля | |||
загрузить раскладку | |||
разобрать раскладку KMahjongg | |||
@@ -17,7 +24,6 @@ | |||
отобразить раскладку одной фишкой | |||
центрировать сцену | |||
запустить отрисовку | |||
# запустить таймер поворота фишки | |||
изменили размер окна браузера | |||
изменить размер отрисовщика 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 @@ | |||
надо загрузить тему фишек маджонга | |||
подготовиться к загрузке темы фишек маджонга | |||
загрузить следующую текстуру темы фишек маджонга | |||
загрузили текстуру темы фишек маджонга | |||
проверить наличие всех загруженных текстур темы фишек маджонга | |||
не загрузили текстуру темы фишек маджонга | |||
уведомить о неудачной загрузке темы фишек маджонга | |||
загружены не все текстуры темы фишек маджонга | |||
загрузить следующую текстуру темы фишек маджонга | |||
загружены все текстуры темы фишек маджонга | |||
уведомить об успешной загрузке темы фишек маджонга |