|
|
@@ -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); |
|
|
|
} |
|
|
|
); |
|
|
|
}; |
|
|
|
|
|
|
|
|