|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588 |
-
-
- // // // //
-
-
- ВывестиКоординатыНажатия = мир =>
- {
- 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(материал);
- }
- };
-
-
- // // // //
-
-
- СоздатьФишкиВСцене = мир =>
- {
- мир.уведомить("надо создать фишки в сцене");
- };
-
-
- // // // //
-
-
- ПодготовитьсяКСозданиюФишекВСцене = мир =>
- {
- мир.уведомить("надо подготовиться к созданию фишек в сцене");
- };
-
|