From 797f6bef1730dc419721adda56c544bfe63a0027 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D0=BB=D0=B0=D0=B2=D1=80=D0=B5=D0=B4=20=7C=20Glavred?= Date: Fri, 18 Sep 2020 15:05:50 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BE=D1=82=20=D0=93=D0=BB=D0=B0=D0=B2=D1=80?= =?UTF-8?q?=D0=B5=D0=B4=D0=B0=20=D0=93=D0=B8=D1=82=D0=96=D0=A1=20|=20Chang?= =?UTF-8?q?es=20of=20GitJS=20Glavred?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- фишки|tiles.js | 179 +++++++++++++++++++++++++++++----- фишки|tiles.череда | 24 ++++- функции|functions.js | 23 ++++- 3 files changed, 198 insertions(+), 28 deletions(-) diff --git a/фишки|tiles.js b/фишки|tiles.js index 625d06f..0c0c90e 100644 --- a/фишки|tiles.js +++ b/фишки|tiles.js @@ -3,34 +3,83 @@ // // // // -УведомитьОСозданииФишекВСцене = мир => +ОчиститьВыборПервойНайденнойФишки = мир => { - мир.уведомить("создали фишки в сцене"); + мир.номераВыбранныхФишек.shift(); }; // // // // -СоздатьИндексыФишек = мир => +ОчиститьОкрашиваниеПервойНайденнойФишки = мир => { - мир.индексыФишек = {}; - const позиции = мир.раскладкаKMahjongg.позиции; - for (var номер in позиции) + 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) { - var позиция = позиции[номер]; - var фишка = мир.фишки[номер]; - var индекс = индексПозицииФишки(позиция); - мир.индексыФишек[индекс] = фишка; - }; + мир.уведомить("фишки совпадают"); + } + else + { + мир.уведомить("фишки не совпадают"); + } +}; + + +// // // // + + +ПроверитьНаличиеДвухВыбранныхФишек = мир => +{ + if (мир.номераВыбранныхФишек.length == 2) + { + мир.уведомить("выбраны две фишки"); + } }; // // // // -ОкраситьВыбранныеФишки = мир => +ОкраситьНайденнуюФишку = мир => { + /* // Очищаем цвета всех фишек. for (var номер in мир.фишки) { @@ -48,25 +97,112 @@ var материал = мир.материалыВыбранныхФишек[группа]; фишка.material = материал; } + */ + var номер = мир.номерНайденнойФишки; + var фишка = мир.фишки[номер]; + var группа = мир.группыФишек[номер]; + var материал = мир.материалыВыбранныхФишек[группа]; + фишка.material = материал; +}; + + +// // // // + + +ВывестиВыбраннуюФишку = мир => +{ + var номер = мир.номерНайденнойФишки; + var группа = мир.группыФишек[номер]; + console.debug(`ВЫБРАЛИ фишку. номер: '${номер}' группа: '${группа}'`); +}; + +// // // // + + +ВыбратьНайденнуюФишку = мир => +{ + мир.номераВыбранныхФишек.push(мир.номерНайденнойФишки); + мир.уведомить("выбрали фишку"); +}; + + +// // // // + + +ПроверитьДоступностьФишкиДляВыбора = мир => +{ + // Проверяем заблокированность фишки одновременно с обеих сторон. + var позиция = мир.раскладкаKMahjongg.позиции[мир.номерНайденнойФишки]; + var слева = уФишкиЕстьСоседи(мир.индексыФишек, позиция, 0, -2); + var справа = уФишкиЕстьСоседи(мир.индексыФишек, позиция, 0, 2); + if (слева && справа) + { + return; + } + + // Проверяем заблокированность сверху. + for (var смещениеСтолбца = -1; смещениеСтолбца < 2; ++смещениеСтолбца) + { + if (уФишкиЕстьСоседи(мир.индексыФишек, позиция, 1, смещениеСтолбца)) + { + return; + } + } + + мир.уведомить("фишка доступна для выбора"); +}; + + +// // // // + + +УведомитьОСозданииФишекВСцене = мир => +{ + мир.уведомить("создали фишки в сцене"); +}; + + +// // // // + + +ПодготовитьФишкиКВыбору = мир => +{ + мир.номераВыбранныхФишек = []; +}; + + +// // // // + + +СоздатьИндексыФишек = мир => +{ + мир.индексыФишек = {}; + const позиции = мир.раскладкаKMahjongg.позиции; + for (var номер in позиции) + { + var позиция = позиции[номер]; + var фишка = мир.фишки[номер]; + var индекс = индексПозицииФишки(позиция); + мир.индексыФишек[индекс] = фишка; + }; }; // // // // -ВывестиВыбранныеФишки = мир => +ВывестиНайденнуюФишку = мир => { - var номер = мир.номерВыбраннойФишки; + var номер = мир.номерНайденнойФишки; var группа = мир.группыФишек[номер]; - console.debug(`Выбрали фишку. номер: '${номер}' группа: '${группа}'`); - console.debug("Номера выбранных фишек", мир.номераВыбранныхФишек); + console.debug(`Нашли фишку. номер: '${номер}' группа: '${группа}'`); }; // // // // -ВыбратьФишкуВКоординатахНажатия = мир => +НайтиФишкуВКоординатахНажатия = мир => { мир.ловецНажатий.setFromCamera(мир.позицияНажатия, мир.камера); var пересечения = мир.ловецНажатий.intersectObjects(мир.корень.children); @@ -76,9 +212,8 @@ var номер = номерФишки(мир.фишки, фишка.id); if (номер) { - мир.номерВыбраннойФишки = номер; - мир.номераВыбранныхФишек.push(номер); - мир.уведомить("выбор фишки"); + мир.номерНайденнойФишки = номер; + мир.уведомить("нашли фишку в координатах нажатия"); } } @@ -103,9 +238,9 @@ // // // // -ПодготовитьВыборФишек = мир => +ПодготовитьПоискФишек = мир => { - мир.номераВыбранныхФишек = []; + мир.номераНайденныхФишек = []; }; diff --git a/фишки|tiles.череда b/фишки|tiles.череда index 0fbcc82..347d428 100644 --- a/фишки|tiles.череда +++ b/фишки|tiles.череда @@ -3,13 +3,27 @@ создать узлы фишек создать группы фишек задать материалы фишкам по группам - подготовить выбор фишек создать материалы выбранных фишек отладочной темы создать индексы фишек + подготовить фишки к выбору уведомить о создании фишек в сцене нажали - выбрать фишку в координатах нажатия -выбор фишки - вывести выбранные фишки - окрасить выбранные фишки + найти фишку в координатах нажатия +нашли фишку в координатах нажатия + вывести найденную фишку + проверить доступность фишки для выбора +фишка доступна для выбора + выбрать найденную фишку +выбрали фишку + вывести выбранную фишку + окрасить найденную фишку + проверить наличие двух выбранных фишек +выбраны две фишки + сравнить выбранные фишки +фишки совпадают + вывести совпадение фишек +фишки не совпадают + вывести различие фишек + очистить окрашивание первой найденной фишки + очистить выбор первой найденной фишки \ No newline at end of file diff --git a/функции|functions.js b/функции|functions.js index 4b024f6..ccd31a2 100644 --- a/функции|functions.js +++ b/функции|functions.js @@ -3,7 +3,28 @@ // // // // -позицияИндексФишки = (индекс) => +уФишкиЕстьСоседи = (индексы, позиция, смещениеСлоя, смещениеСтолбца) => +{ + for (var смещениеРяда = -1; смещениеРяда < 2; ++смещениеРяда) + { + var позицияСоседа = [ + позиция[0] + смещениеСлоя, + позиция[1] + смещениеРяда, + позиция[2] + смещениеСтолбца, + ]; + var индексСоседа = индексПозицииФишки(позицияСоседа); + if (индексСоседа in индексы) + { + return true; + } + } + return false; +}; + +// // // // + + +позицияИндексаФишки = (индекс) => { const x = индекс / 1000000; const y = (индекс - x * 1000000) / 1000;