// // // // ВывестиКоординатыНажатия = мир => { console.debug("Координаты нажатия:", мир.позицияНажатия.x, мир.позицияНажатия.y); }; // // // // УведомитьОПоражении = мир => { мир.уведомить("поражение"); }; // // // // УведомитьОПобеде = мир => { мир.уведомить("победа"); }; // // // // ВывестиПобеду = мир => { console.debug("ПОБЕДА"); }; // // // // ВывестиПоражение = мир => { console.debug("ПОРАЖЕНИЕ"); }; // // // // ПроверитьНаличиеФишекНаИгровомПоле = мир => { if (Object.keys(мир.индексыФишек).length > 0) { мир.уведомить("фишки на игровом поле присутствуют"); } else { мир.уведомить("фишки на игровом поле отсутствуют"); } }; // // // // ВывестиПрисутствиеХодов = мир => { console.debug("ходы есть"); }; // // // // ВывестиОтсутствиеХодов = мир => { console.debug("ходов нет"); }; // // // // ПроверитьНаличиеХодов = мир => { var номера = мир.доступныеДляВыбораНомераФишек; for (var н0 in номера) { for (var н1 in номера) { // Пропускаем одну и ту же фишку. if (н0 == н1) { continue; } var номер0 = номера[н0]; var номер1 = номера[н1]; var группа0 = мир.группыФишек[номер0]; var группа1 = мир.группыФишек[номер1]; if (группа0 == группа1) { мир.уведомить("ходы присутствуют"); return; } } } мир.уведомить("ходы отсутствуют"); }; // // // // СобратьДоступныеДляВыбораНомераФишек = мир => { мир.доступныеДляВыбораНомераФишек = []; for (индекс in мир.индексыФишек) { if (фишкуМожноВыбрать(мир.индексыФишек, индекс)) { var номер = мир.индексыФишек[индекс]; мир.доступныеДляВыбораНомераФишек.push(номер); } } }; // // // // ЗапуститьПлавноеСкрытиеФишек = мир => { var шаг = 10; var длительность = 200; var прозрачность = 1.0; var дельтаПрозрачности = шаг / длительность; const анимация = setInterval( function() { прозрачность -= дельтаПрозрачности; // Возвращаем прозрачность материалам перед последующим скрытием фишек. // И планируем выход из этой анимации. var выходим = false; if (прозрачность < 0) { прозрачность = 1; выходим = true; } // Выставляем нужную прозрачность. for (var id in мир.номераВыбранныхФишек) { var номер = мир.номераВыбранныхФишек[id]; var фишка = мир.фишки[номер]; фишка.material.opacity = прозрачность; // Указываем на необходимость учитывать прозрачность. фишка.material.transparent = true; } if (выходим) { clearInterval(анимация); мир.уведомить("плавно скрыли фишки"); } }, шаг ); }; // // // // ПроверитьВозможностьПоискаФишки = мир => { if (мир.можноИскатьФишку) { мир.уведомить("можно искать фишку"); } }; // // // // ОтключитьВозможностьПоискаФишки = мир => { мир.можноИскатьФишку = false; }; // // // // ВключитьВозможностьПоискаФишки = мир => { мир.можноИскатьФишку = true; }; // // // / ПростоОбождатьПаруСекунд = мир => { setTimeout( function() { мир.уведомить("плавно скрыли фишки") }, 2000 ); }; // // // // ПлавноСкрытьФишки = мир => { мир.уведомить("надо плавно скрыть фишки"); }; // // // // ОчиститьВыборФишек = мир => { мир.номераВыбранныхФишек = []; }; // // // // ОчиститьИндексыВыбранныхФишек = мир => { const позиции = мир.раскладкаKMahjongg.позиции; for (var id in мир.номераВыбранныхФишек) { var номер = мир.номераВыбранныхФишек[id]; var позиция = позиции[номер]; var индекс = индексПозицииФишки(позиция); delete мир.индексыФишек[индекс]; } }; // // // // СкрытьСовпадающиеФишки = мир => { for (var id in мир.номераВыбранныхФишек) { var номер = мир.номераВыбранныхФишек[id]; // Перемещаем фишку на другой слой для исключения её из: // * цикла отрисовки; // * узлов для выбора нажатием. мир.фишки[номер].layers.set(1); } }; // // // // ОчиститьВыборПервойНайденнойФишки = мир => { мир.номераВыбранныхФишек.shift(); }; // // // // ОчиститьОкрашиваниеПервойНайденнойФишки = мир => { var номер = мир.номераВыбранныхФишек[0]; var фишка = мир.фишки[номер]; var группа = мир.группыФишек[номер]; var материал = мир.материалыФишек[группа]; фишка.material = материал; }; // // // // ВывестиРазличиеФишек = мир => { console.debug("ВывестиРазличиеФишек"); }; // // // // ВывестиСовпадениеФишек = мир => { console.debug("ВывестиСовпадениеФишек"); }; // // // // СравнитьВыбранныеФишки = мир => { var номер0 = мир.номераВыбранныхФишек[0]; var группа0 = мир.группыФишек[номер0]; var номер1 = мир.номераВыбранныхФишек[1]; var группа1 = мир.группыФишек[номер1]; if (группа0 == группа1) { мир.уведомить("фишки совпадают"); } else { мир.уведомить("фишки не совпадают"); } }; // // // // ПроверитьНаличиеДвухВыбранныхФишек = мир => { if (мир.номераВыбранныхФишек.length == 2) { мир.уведомить("выбраны две фишки"); } }; // // // // ОкраситьНайденнуюФишку = мир => { var номер = мир.номерНайденнойФишки; var фишка = мир.фишки[номер]; var группа = мир.группыФишек[номер]; var материал = мир.материалыВыбранныхФишек[группа]; фишка.material = материал; }; // // // // ВывестиВыбраннуюФишку = мир => { var номер = мир.номерНайденнойФишки; var группа = мир.группыФишек[номер]; console.debug(`ВЫБРАЛИ фишку. номер: '${номер}' группа: '${группа}'`); }; // // // // ВыбратьНайденнуюФишку = мир => { мир.номераВыбранныхФишек.push(мир.номерНайденнойФишки); мир.уведомить("выбрали фишку"); }; // // // // ПроверитьДоступностьФишкиДляВыбора = мир => { // Удостоверимся, что это не одна и та же фишка, выбранная дважды. if (мир.номераВыбранныхФишек.length) { var номер = мир.номераВыбранныхФишек[0]; if (номер == мир.номерНайденнойФишки) { return; } } // Проверяем доступность с точки зрения правил Маджонга. var позиция = мир.раскладкаKMahjongg.позиции[мир.номерНайденнойФишки]; var индекс = индексПозицииФишки(позиция); if (фишкуМожноВыбрать(мир.индексыФишек, индекс)) { мир.уведомить("фишка доступна для выбора"); } }; // // // // ВывестиНайденнуюФишку = мир => { var номер = мир.номерНайденнойФишки; var группа = мир.группыФишек[номер]; console.debug(`Нашли фишку. номер: '${номер}' группа: '${группа}'`); }; // // // // НайтиФишкуВКоординатахНажатия = мир => { мир.ловецНажатий.setFromCamera(мир.позицияНажатия, мир.камера); var пересечения = мир.ловецНажатий.intersectObjects(мир.корень.children); if (пересечения.length) { var фишка = пересечения[0].object; var номер = номерФишки(мир.фишки, фишка.id); if (номер) { мир.номерНайденнойФишки = номер; мир.уведомить("нашли фишку в координатах нажатия"); } } }; // // // // ПодготовитьФишкиКВыбору = мир => { мир.номераВыбранныхФишек = []; }; // // // // СоздатьИндексыФишек = мир => { мир.индексыФишек = {}; const позиции = мир.раскладкаKMahjongg.позиции; for (var номер in позиции) { var позиция = позиции[номер]; var индекс = индексПозицииФишки(позиция); мир.индексыФишек[индекс] = номер; }; }; // // // // ЗадатьМатериалыФишкамПоГруппам = мир => { 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, ]; var отступы = [ 0.02, 0.02, ]; const позиции = мир.раскладкаKMahjongg.позиции; мир.фишки = []; for (var номер in позиции) { // Модель. var фишка = мир.фишка.clone(); мир.фишки.push(фишка); мир.корень.add(фишка); // Расположение. var позиция = позиции[номер]; var слой = позиция[0]; var ряд = позиция[1]; var столбец = позиция[2]; фишка.position.x = столбец * (размеры[0] + отступы[0]); фишка.position.z = ряд * (размеры[1] + отступы[1]); фишка.position.y = слой; } }; // // // // ПодготовитьКореньФишек = мир => { if (мир.корень && мир.сцена.children.includes(мир.корень)) { мир.сцена.remove(мир.корень); } мир.корень = new THREE.Group(); мир.сцена.add(мир.корень); }; // // // // СоздатьМатериалыВыбранныхФишекОтладочнойТемы = мир => { мир.материалыВыбранныхФишек = []; for (var номер in мир.материалыФишек) { var материал = мир.материалыФишек[номер].clone(); материал.color = new THREE.Color(0xff0000); мир.материалыВыбранныхФишек.push(материал); } }; // // // // СоздатьМатериалыФишекОтладочнойТемы = мир => { мир.материалыФишек = []; for (var номер = 1; номер <= 42; ++номер) { var текстура = мир.текстурыТемФишек[мир.выбраннаяТема][номер]; var материал = new THREE.MeshLambertMaterial({map: текстура}); мир.материалыФишек.push(материал); } }; // // // // СоздатьФишкиВСцене = мир => { мир.уведомить("надо создать фишки в сцене"); }; // // // // ПодготовитьсяКСозданиюФишекВСцене = мир => { мир.уведомить("надо подготовиться к созданию фишек в сцене"); };