Двач.hk не отвечает.
Вы видите копию треда, сохраненную 13 сентября в 07:54.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Вы видите копию треда, сохраненную 13 сентября в 07:54.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
392 Кб, 650x365
Название рабочее. По сути это вариация игры "тысяча", но с диким хоум рулз, которые я видел только в деревне, где по этим правилам бабушка играла с друзьями.
Делать буду на годоте. Моя первая игра.
Это прямо дневник разработчика, писать сюда буду каждый день.
https://www.youtube.com/watch?v=WjT5sLMD7Kw&list=PLkhDORpHGmvrW7ByiEL-M9JU_rl27QzmI вот по этому тутору иду и делаю сразу.
Делать буду на годоте. Моя первая игра.
Это прямо дневник разработчика, писать сюда буду каждый день.
https://www.youtube.com/watch?v=WjT5sLMD7Kw&list=PLkhDORpHGmvrW7ByiEL-M9JU_rl27QzmI вот по этому тутору иду и делаю сразу.
>>16472
Этот аутист каждый месяц создаёт треды. Типа он начинает создавать свою первую игру. Выдумывает какую-нибудь охуительную историю, а потом забрасывает тред.
Этот аутист каждый месяц создаёт треды. Типа он начинает создавать свою первую игру. Выдумывает какую-нибудь охуительную историю, а потом забрасывает тред.
>>16376 (OP)
Давай, там работы на недельку, если что непонятно спрашивай.
Давай, там работы на недельку, если что непонятно спрашивай.
Меня кстати зовут Duplan.
Это будет мое атмосферное креативное имя.
А вот вам мое репчик: https://github.com/duplan/granny-poker
Начал я с того, что инициализировал гит. Этот проект чисто потыкать, никаких ценных наработок тут не будет. Следующий я уже буду показывать кусками по вашей просьбе.
Я думал, нужно как-то по-хитрому использовать гит, но битард из видео
https://www.youtube.com/watch?v=k0aH_V2GrBs
просто в папке с годот-проектом инициализировал и погнал. Сделаю так и я. Пишите, если можно сделать лучше.
Больше я проебался с тем, чтобы гит не путал мои ssh ключи от работы и от ГЕЙмдев акка.
Вот если что команда:
git config core.sshCommand 'ssh -i ~/.ssh/ваш_приватный_ключ -o IdentitiesOnly=yes'
Карты скачал в первом же попавшемся месте. Рамку взял у чела в асетах.
Этому тутору 3 года и даже синтаксис устарел, так что смотрю критически.
От чела немного сразу пытаюсь, он подгоняет рамку под карту скриптом. Мне это непонятно, нахуй тогда мне редактор и наследование? Но найти как это сделать я не успел, пора спать. Просто у родительского компонента MarginContainer есть абсолютный размер в пикселях (control:layout:transform:size), у спрайта-рамки, нихуя. 2D node: transform и там только скейл. Завтра поглядим, как сделать. Ну хуйня же скриптом задавать, уж статичные объекты я могу заготовить полноценно? Но если редактором не предусмотрены ни глобальный размер для спрайта, ни обращение по скейлу к родителю, то пихуй, задам в скритпе.
Это будет мое атмосферное креативное имя.
А вот вам мое репчик: https://github.com/duplan/granny-poker
Начал я с того, что инициализировал гит. Этот проект чисто потыкать, никаких ценных наработок тут не будет. Следующий я уже буду показывать кусками по вашей просьбе.
Я думал, нужно как-то по-хитрому использовать гит, но битард из видео
https://www.youtube.com/watch?v=k0aH_V2GrBs
просто в папке с годот-проектом инициализировал и погнал. Сделаю так и я. Пишите, если можно сделать лучше.
Больше я проебался с тем, чтобы гит не путал мои ssh ключи от работы и от ГЕЙмдев акка.
Вот если что команда:
git config core.sshCommand 'ssh -i ~/.ssh/ваш_приватный_ключ -o IdentitiesOnly=yes'
Карты скачал в первом же попавшемся месте. Рамку взял у чела в асетах.
Этому тутору 3 года и даже синтаксис устарел, так что смотрю критически.
От чела немного сразу пытаюсь, он подгоняет рамку под карту скриптом. Мне это непонятно, нахуй тогда мне редактор и наследование? Но найти как это сделать я не успел, пора спать. Просто у родительского компонента MarginContainer есть абсолютный размер в пикселях (control:layout:transform:size), у спрайта-рамки, нихуя. 2D node: transform и там только скейл. Завтра поглядим, как сделать. Ну хуйня же скриптом задавать, уж статичные объекты я могу заготовить полноценно? Но если редактором не предусмотрены ни глобальный размер для спрайта, ни обращение по скейлу к родителю, то пихуй, задам в скритпе.
Сразу же все запорол, кек.
Галку не поставил, заголовочек.
>>16730
Пытаюсь уйти
>>16478
У меня явно займет больше, я еще работаю, спрашивать буду каждый день, спасибо.
>>16475
Лол, ну разок да, было, я тогда на юнити хотел эту же игру делать, но отложил. Остальное не я. Но сейчас я не сольюсь, каждый день буду ебашить.
Я кстати нашел правила, почти такие же, но у бабушки упрощенные были, потом скажу, что изменено
https://academypoker.ru/raznovidnosti-pokera/1812-pravila-igry-v-raspisnoj-poker.html
>>16472
Привет, анон. Спасибо, не дропну.
Галку не поставил, заголовочек.
>>16730
>От чела немного сразу пытаюсь
Пытаюсь уйти
>>16478
У меня явно займет больше, я еще работаю, спрашивать буду каждый день, спасибо.
>>16475
Лол, ну разок да, было, я тогда на юнити хотел эту же игру делать, но отложил. Остальное не я. Но сейчас я не сольюсь, каждый день буду ебашить.
Я кстати нашел правила, почти такие же, но у бабушки упрощенные были, потом скажу, что изменено
https://academypoker.ru/raznovidnosti-pokera/1812-pravila-igry-v-raspisnoj-poker.html
>>16472
Привет, анон. Спасибо, не дропну.
Решил делать на юнити))
В годоте редактор какой-то нищий, дебагинг куцый, префабов нет - короче ай.
Вот такой курс купил во карточной игре в триде https://www.udemy.com/course/unity-card-combat/
И на него поглядывая делаю. Вот есть деревянный стол, карта и тетрадка - счет записывать.
Будет от первого лица игра, и в тетрадочку посматривать можно будет.
Ryder поставил, плагины все навернул - есть теперь автокомплит и все дела.
С гитом хз пока, я так понимаю тут не как в годоте, весь проект пушить не принято. Почитаю надосуге про это. Хотите, чтобы я пушил?
В годоте редактор какой-то нищий, дебагинг куцый, префабов нет - короче ай.
Вот такой курс купил во карточной игре в триде https://www.udemy.com/course/unity-card-combat/
И на него поглядывая делаю. Вот есть деревянный стол, карта и тетрадка - счет записывать.
Будет от первого лица игра, и в тетрадочку посматривать можно будет.
Ryder поставил, плагины все навернул - есть теперь автокомплит и все дела.
С гитом хз пока, я так понимаю тут не как в годоте, весь проект пушить не принято. Почитаю надосуге про это. Хотите, чтобы я пушил?
32 Кб, 1280x720
>>17701
Пулин-пушин. Сингин-синкин. Дайвин-даин.
Сегодня ночью гобот придёт и сотрёт твою лицензию
> Хотите, чтобы я пушил?
Пулин-пушин. Сингин-синкин. Дайвин-даин.
Сегодня ночью гобот придёт и сотрёт твою лицензию
Сегодня выходной, получилось поделать побольше. Следую за курсом, адаптируя на ходу под свое.
1. Добавил скриптабл обжекты, которые как я понял, будут типа хранилища переменных для объектов типа карты или счета.
2. Добавил скрипты к счету и карте, которые на старте подставляют нужные значения.
3. Запомнил полезную настройку, где можно выводить на весь экран игру в плеймоде (скрин 1)
4. Запомнил полезную настройку, чтобы закреплять объект в инспеторе (скрин 2)
По туториалу он пока просто меняет текст на своей модельке карты, но я решил сразу прогружать текстурку из скрипта, которая будет браться из скриптабл обжекта.
Тут то меня ждал первый ахуй. У чела я взял модельку карты, там нстроен рендерер и у него несколько материалов и у них я менял текстуру в редакторе, делая из его гоблина свою двойку пик.
Но когда я захотел делать то же в рантайме, я охуел, как геморно менять текстуру у материала, типа брать модель, у неё рендерер, итерироваться по всем материалам, находить нужный и там Material.SetTexture
Но раз через такую жопу надо делать - значит я делал неправильно. Я так понимаю, что обычно меняют спрайт.
И я решил вообще убрать нахуй его модель и сделать свою карту, более простую, типа 2д прямоугольник и у него 2 дочерних объекта с рендерерами с двух сторон приклеено. Долго тупил, почему я не могу свои пнгшки засунуть в рендерер, а потом нашел, что можно импортировать их сразу спрайтами.
И тогда короч сделал как хотел. Но в отличии от его пиздатой модели, у меня рендереры не были настроены, чтобы по размеру текстуру растягивать и я руками рескейлил конский спрайт рубашки и переда карты.
Но зато заработало и в рантайме обновлять спрайт оказалось легко, см скрин 3.
Короче, походу по моделингу нужно будет брать курс отдельно, хз.
Завтра уже поинтереснее будет, больше кодинха, меньше возни в редакторе.
1. Добавил скриптабл обжекты, которые как я понял, будут типа хранилища переменных для объектов типа карты или счета.
2. Добавил скрипты к счету и карте, которые на старте подставляют нужные значения.
3. Запомнил полезную настройку, где можно выводить на весь экран игру в плеймоде (скрин 1)
4. Запомнил полезную настройку, чтобы закреплять объект в инспеторе (скрин 2)
По туториалу он пока просто меняет текст на своей модельке карты, но я решил сразу прогружать текстурку из скрипта, которая будет браться из скриптабл обжекта.
Тут то меня ждал первый ахуй. У чела я взял модельку карты, там нстроен рендерер и у него несколько материалов и у них я менял текстуру в редакторе, делая из его гоблина свою двойку пик.
Но когда я захотел делать то же в рантайме, я охуел, как геморно менять текстуру у материала, типа брать модель, у неё рендерер, итерироваться по всем материалам, находить нужный и там Material.SetTexture
Но раз через такую жопу надо делать - значит я делал неправильно. Я так понимаю, что обычно меняют спрайт.
И я решил вообще убрать нахуй его модель и сделать свою карту, более простую, типа 2д прямоугольник и у него 2 дочерних объекта с рендерерами с двух сторон приклеено. Долго тупил, почему я не могу свои пнгшки засунуть в рендерер, а потом нашел, что можно импортировать их сразу спрайтами.
И тогда короч сделал как хотел. Но в отличии от его пиздатой модели, у меня рендереры не были настроены, чтобы по размеру текстуру растягивать и я руками рескейлил конский спрайт рубашки и переда карты.
Но зато заработало и в рантайме обновлять спрайт оказалось легко, см скрин 3.
Короче, походу по моделингу нужно будет брать курс отдельно, хз.
Завтра уже поинтереснее будет, больше кодинха, меньше возни в редакторе.
Сегодня сделал не так много.
Наметил позиции и начал делать руку, чтобы карты держать. Отметил крайнюю левую и правую точки, чтобы между ними распределять карты. Прикольный трюк узнал, делать этимм невидимым объектам видимый дочерний объект типа сферы, располагать их относительно друг друга и удалять объект, который был чисто ориентиром.
Почитал зачем скриптб обжекты, если можно хранить данные в свойствах моно бихейвиора (лучше по ресурсам, удобнее, между сценами доступно, ССО соблюдается, пушо моно для поведения, скриптбл обжект для даных).
Почитал про List в шарпах. Это получается мутабельная, более прожорливая версия массива.
А на этом все. Завтра в руке буду карты располагать.
Наметил позиции и начал делать руку, чтобы карты держать. Отметил крайнюю левую и правую точки, чтобы между ними распределять карты. Прикольный трюк узнал, делать этимм невидимым объектам видимый дочерний объект типа сферы, располагать их относительно друг друга и удалять объект, который был чисто ориентиром.
Почитал зачем скриптб обжекты, если можно хранить данные в свойствах моно бихейвиора (лучше по ресурсам, удобнее, между сценами доступно, ССО соблюдается, пушо моно для поведения, скриптбл обжект для даных).
Почитал про List в шарпах. Это получается мутабельная, более прожорливая версия массива.
А на этом все. Завтра в руке буду карты располагать.
Сегодня сделал не так много.
Наметил позиции и начал делать руку, чтобы карты держать. Отметил крайнюю левую и правую точки, чтобы между ними распределять карты. Прикольный трюк узнал, делать этимм невидимым объектам видимый дочерний объект типа сферы, располагать их относительно друг друга и удалять объект, который был чисто ориентиром.
Почитал зачем скриптб обжекты, если можно хранить данные в свойствах моно бихейвиора (лучше по ресурсам, удобнее, между сценами доступно, ССО соблюдается, пушо моно для поведения, скриптбл обжект для даных).
Почитал про List в шарпах. Это получается мутабельная, более прожорливая версия массива.
А на этом все. Завтра в руке буду карты располагать.
Наметил позиции и начал делать руку, чтобы карты держать. Отметил крайнюю левую и правую точки, чтобы между ними распределять карты. Прикольный трюк узнал, делать этимм невидимым объектам видимый дочерний объект типа сферы, располагать их относительно друг друга и удалять объект, который был чисто ориентиром.
Почитал зачем скриптб обжекты, если можно хранить данные в свойствах моно бихейвиора (лучше по ресурсам, удобнее, между сценами доступно, ССО соблюдается, пушо моно для поведения, скриптбл обжект для даных).
Почитал про List в шарпах. Это получается мутабельная, более прожорливая версия массива.
А на этом все. Завтра в руке буду карты располагать.
Сегодня промежуточный день (уделить на буднях могу пока час через два, сегодня час), так что сделал немного.
Вот карты в руках расположить нехитрым скриптом. Но он у него корявый, от крайных точек тоже нужны отступы, чтобы они далеко друг от друга так не были, я уж не говорю о том, чтобы угол менять от центра, чтобы типа веерка было. Это я уже сам сделаю когда буду допиливать. Пока так.
Вот карты в руках расположить нехитрым скриптом. Но он у него корявый, от крайных точек тоже нужны отступы, чтобы они далеко друг от друга так не были, я уж не говорю о том, чтобы угол менять от центра, чтобы типа веерка было. Это я уже сам сделаю когда буду допиливать. Пока так.
Сделал (списал с гайда) плавное прилетание карт в руку при помощи покадрового обновления позиции и разворота.
Он использовал перемещение Vector3.lerp(startPos, endPos, moveSpeed Time.DeltaTime) что, как я понял, нетипичное использование этого метода, который подразумевает, что последним аргументом будет отдаваться равномерно уменьшающаяся величина (типа, остаток пути), что обеспечит линейную скорость движения.
Так написано и в доке и нейросеть сказала. Но чел отдавал плюс-минус статичную величину дельтазаданная скорость и этим обеспечил типа плавное подъезжание, движение со скоростью, падающей по обратной экспоненте (хз, как это называется, я гуманитарий). Только по идее тогда карты должны никогда до конца не достичь точки, как в анекдоте с бескнонечным числом математиков где бармен говорит: "а ну пошли нахуй отсюда". Но редактор показывает, что вполне себе доезжают.
Может кто объяснить?
Еще не очень понял, чем это отличается от transform.translate?
И там и там мы подстраиваем скорость под плавную, просто в одном случае двигаеся по направлению, а во втором из точки в точку. Вот и нейросеть что-то такое сказала.
Но в целом похуй на самом деле, я пришел игры делать, а не дрочить матешу, кароч транслэйтом ходит персонаж, лерпом подбирает предметы или ловит самоноводящиеся ракеты))
---
Узнал, что можно мультиселектом перетаскивать в public массив / список в редакторе, а не дрочиться по одной штучке.
Узнал, что можно переключиться (см скрин1) в дебаг мод и видеть приватные переменные в редакторе.
Он использовал перемещение Vector3.lerp(startPos, endPos, moveSpeed Time.DeltaTime) что, как я понял, нетипичное использование этого метода, который подразумевает, что последним аргументом будет отдаваться равномерно уменьшающаяся величина (типа, остаток пути), что обеспечит линейную скорость движения.
Так написано и в доке и нейросеть сказала. Но чел отдавал плюс-минус статичную величину дельтазаданная скорость и этим обеспечил типа плавное подъезжание, движение со скоростью, падающей по обратной экспоненте (хз, как это называется, я гуманитарий). Только по идее тогда карты должны никогда до конца не достичь точки, как в анекдоте с бескнонечным числом математиков где бармен говорит: "а ну пошли нахуй отсюда". Но редактор показывает, что вполне себе доезжают.
Может кто объяснить?
Еще не очень понял, чем это отличается от transform.translate?
И там и там мы подстраиваем скорость под плавную, просто в одном случае двигаеся по направлению, а во втором из точки в точку. Вот и нейросеть что-то такое сказала.
Но в целом похуй на самом деле, я пришел игры делать, а не дрочить матешу, кароч транслэйтом ходит персонаж, лерпом подбирает предметы или ловит самоноводящиеся ракеты))
---
Узнал, что можно мультиселектом перетаскивать в public массив / список в редакторе, а не дрочиться по одной штучке.
Узнал, что можно переключиться (см скрин1) в дебаг мод и видеть приватные переменные в редакторе.
7,3 Мб, mp4,
320x232, 0:20
320x232, 0:20
Сегодня только сделал ховер, что когда мышку наводишь - картишки приподнимаются. У чела их моих уроков примитивная реализация, которая допускает глич, который я записал на видео.
Как его можно избежать? На ум приходят уменьшения или отключения колайдера других карт на время какая-то пока карта выбрана, хз.
Приятно, что юнити дает готовые методы типа onMouseXXX, которые сразу связаны с колайдером. Побольше бы такого, меньше писанины. интересно, что в годоте?
Мини-лайфхак, если поставить на паузу и потом нажать запуск плей мода, а после, подождав, стартануть - не будет статера при запуске.
Как его можно избежать? На ум приходят уменьшения или отключения колайдера других карт на время какая-то пока карта выбрана, хз.
Приятно, что юнити дает готовые методы типа onMouseXXX, которые сразу связаны с колайдером. Побольше бы такого, меньше писанины. интересно, что в годоте?
Мини-лайфхак, если поставить на паузу и потом нажать запуск плей мода, а после, подождав, стартануть - не будет статера при запуске.
Добавил выбор карт из руки и вазюкание их по столу. Он сделан каким-то достаточно сложным путем, где, как я понял по коду, из камеры в сторону курсора проецируется луч и берется место, где он достиг указанного слоя (я на стол добавил слой). И вот в это место я передвигаю карту. И она получается следует за мышкой. См. скрин.
Могу только сказать, что шарпы мне нравятся. не то что гдс Вот как мы передаем переменную в функцию и напрямую знаем, что ее там мутируют т.к там кодовое слово out - это прикольно, это я уважаю.
Но я пока что буду просто брать на вооружение все эти приемы и потом их использовать в разных местах. Вот еще видосик приложил. Ну, такими темпами, за пару лет думаю запилю игруху - ебанетесь)))
Могу только сказать, что шарпы мне нравятся. не то что гдс Вот как мы передаем переменную в функцию и напрямую знаем, что ее там мутируют т.к там кодовое слово out - это прикольно, это я уважаю.
Но я пока что буду просто брать на вооружение все эти приемы и потом их использовать в разных местах. Вот еще видосик приложил. Ну, такими темпами, за пару лет думаю запилю игруху - ебанетесь)))
Плиз вернись на Годот тогда я буду читателем твоего треда.
Ну что сынку помогла тебе твоя юнити?
О, тред не удалили штоле
13,1 Мб, mp4,
640x372, 0:38
640x372, 0:38
Вернулся к проекту и снова ежедневно над ним работаю.
На данный момент есть раздача карт и механики хода.
Пока делал простые абстракции
GameController - это еще в планах, будет что-то типа стейт машины, чтобы хоть где-то применить няшный паттерн. Но пока игры еще нет, то что есть регулирует RoundController.
RoundController - Это синглтон, который шарит за номер раунда (в раунде несколько ходов, это как дураке между отбоями / поинятиями), кто в нем ходит первый, следующий и так далее, кто победил и прочее. Чтобы начать. Чтобы провести ход он просит это сделать другой синглтон - TurnController.
TurnController - Контроллирует ход, в котором каждый игрок играет картой. Выдерживает паузы и передает очередь по игрокам, общается с HandController.
HandController - олицетворяет игрока, всего их 4. Владеет информацией о состоянии руки игрока, расположении веера и т.д. Разрешает делать ход, если приналежит игроку и вызывает (пока не ненаписанный AIController, если принедлежит боту). Для движений и смены статуса вызывает Card. После конца хода просит TurnController передать ход другому игроку, тот, когда обойдет всех - отчитывается RoundController. Я хз, норм ли такая последовательная смена состояний, мб это нубский подход, дальше будет видно.
Card - ну тут понятно, все движения и считывание юзерского ввода на этом классе.
Выделение карты сделал простым шейдером самодельным по гайду. Подсвечивание места куда класть карту делаю sparklesParticleSystem.Play(); / sparklesParticleSystem.Stop(); частицы бесплатные скачал где-то.
Все карты хранятся в одном ScriptableObject, откуда их рандомно тянет RoundController, когда раздает карты.
Карты сделаны из двух прилегающих планок, на одной рубашку, на передней - лицо, текстура которой задается в момент инициализации префаба.
Мне это не очень нравится, под некоторыми углами ебется отображение и можно видеть сквозь рубашку. Это по хорошему надо делать наверное двухсторонним материалом. Но пока как есть так есть. Если кто-то что-то хочет подсказать - пожалуйста.
На данный момент есть раздача карт и механики хода.
Пока делал простые абстракции
GameController - это еще в планах, будет что-то типа стейт машины, чтобы хоть где-то применить няшный паттерн. Но пока игры еще нет, то что есть регулирует RoundController.
RoundController - Это синглтон, который шарит за номер раунда (в раунде несколько ходов, это как дураке между отбоями / поинятиями), кто в нем ходит первый, следующий и так далее, кто победил и прочее. Чтобы начать. Чтобы провести ход он просит это сделать другой синглтон - TurnController.
TurnController - Контроллирует ход, в котором каждый игрок играет картой. Выдерживает паузы и передает очередь по игрокам, общается с HandController.
HandController - олицетворяет игрока, всего их 4. Владеет информацией о состоянии руки игрока, расположении веера и т.д. Разрешает делать ход, если приналежит игроку и вызывает (пока не ненаписанный AIController, если принедлежит боту). Для движений и смены статуса вызывает Card. После конца хода просит TurnController передать ход другому игроку, тот, когда обойдет всех - отчитывается RoundController. Я хз, норм ли такая последовательная смена состояний, мб это нубский подход, дальше будет видно.
Card - ну тут понятно, все движения и считывание юзерского ввода на этом классе.
Выделение карты сделал простым шейдером самодельным по гайду. Подсвечивание места куда класть карту делаю sparklesParticleSystem.Play(); / sparklesParticleSystem.Stop(); частицы бесплатные скачал где-то.
Все карты хранятся в одном ScriptableObject, откуда их рандомно тянет RoundController, когда раздает карты.
Карты сделаны из двух прилегающих планок, на одной рубашку, на передней - лицо, текстура которой задается в момент инициализации префаба.
Мне это не очень нравится, под некоторыми углами ебется отображение и можно видеть сквозь рубашку. Это по хорошему надо делать наверное двухсторонним материалом. Но пока как есть так есть. Если кто-то что-то хочет подсказать - пожалуйста.
13,1 Мб, mp4,
640x372, 0:38
Показать весь текст640x372, 0:38
Вернулся к проекту и снова ежедневно над ним работаю.
На данный момент есть раздача карт и механики хода.
Пока делал простые абстракции
GameController - это еще в планах, будет что-то типа стейт машины, чтобы хоть где-то применить няшный паттерн. Но пока игры еще нет, то что есть регулирует RoundController.
RoundController - Это синглтон, который шарит за номер раунда (в раунде несколько ходов, это как дураке между отбоями / поинятиями), кто в нем ходит первый, следующий и так далее, кто победил и прочее. Чтобы начать. Чтобы провести ход он просит это сделать другой синглтон - TurnController.
TurnController - Контроллирует ход, в котором каждый игрок играет картой. Выдерживает паузы и передает очередь по игрокам, общается с HandController.
HandController - олицетворяет игрока, всего их 4. Владеет информацией о состоянии руки игрока, расположении веера и т.д. Разрешает делать ход, если приналежит игроку и вызывает (пока не ненаписанный AIController, если принедлежит боту). Для движений и смены статуса вызывает Card. После конца хода просит TurnController передать ход другому игроку, тот, когда обойдет всех - отчитывается RoundController. Я хз, норм ли такая последовательная смена состояний, мб это нубский подход, дальше будет видно.
Card - ну тут понятно, все движения и считывание юзерского ввода на этом классе.
Выделение карты сделал простым шейдером самодельным по гайду. Подсвечивание места куда класть карту делаю sparklesParticleSystem.Play(); / sparklesParticleSystem.Stop(); частицы бесплатные скачал где-то.
Все карты хранятся в одном ScriptableObject, откуда их рандомно тянет RoundController, когда раздает карты.
Карты сделаны из двух прилегающих планок, на одной рубашку, на передней - лицо, текстура которой задается в момент инициализации префаба.
Мне это не очень нравится, под некоторыми углами ебется отображение и можно видеть сквозь рубашку. Это по хорошему надо делать наверное двухсторонним материалом. Но пока как есть так есть. Если кто-то что-то хочет подсказать - пожалуйста.
На данный момент есть раздача карт и механики хода.
Пока делал простые абстракции
GameController - это еще в планах, будет что-то типа стейт машины, чтобы хоть где-то применить няшный паттерн. Но пока игры еще нет, то что есть регулирует RoundController.
RoundController - Это синглтон, который шарит за номер раунда (в раунде несколько ходов, это как дураке между отбоями / поинятиями), кто в нем ходит первый, следующий и так далее, кто победил и прочее. Чтобы начать. Чтобы провести ход он просит это сделать другой синглтон - TurnController.
TurnController - Контроллирует ход, в котором каждый игрок играет картой. Выдерживает паузы и передает очередь по игрокам, общается с HandController.
HandController - олицетворяет игрока, всего их 4. Владеет информацией о состоянии руки игрока, расположении веера и т.д. Разрешает делать ход, если приналежит игроку и вызывает (пока не ненаписанный AIController, если принедлежит боту). Для движений и смены статуса вызывает Card. После конца хода просит TurnController передать ход другому игроку, тот, когда обойдет всех - отчитывается RoundController. Я хз, норм ли такая последовательная смена состояний, мб это нубский подход, дальше будет видно.
Card - ну тут понятно, все движения и считывание юзерского ввода на этом классе.
Выделение карты сделал простым шейдером самодельным по гайду. Подсвечивание места куда класть карту делаю sparklesParticleSystem.Play(); / sparklesParticleSystem.Stop(); частицы бесплатные скачал где-то.
Все карты хранятся в одном ScriptableObject, откуда их рандомно тянет RoundController, когда раздает карты.
Карты сделаны из двух прилегающих планок, на одной рубашку, на передней - лицо, текстура которой задается в момент инициализации префаба.
Мне это не очень нравится, под некоторыми углами ебется отображение и можно видеть сквозь рубашку. Это по хорошему надо делать наверное двухсторонним материалом. Но пока как есть так есть. Если кто-то что-то хочет подсказать - пожалуйста.
>>65509
нейминг мое почтение, мне кажется ты сам запутаешься через полгода что у тебя делает КруглыйКонтроллер, а что делает КонтроллерПоворота. Дело конеш твое, но я б уделил больше внимания неймингу.
Я бы игрока назвал Player. В нем можно хранить его очки/деньги и руку с картами, мб какой-то уровень сложности/опытности игрока.
В игороке был бы клас PlayerHand или просто Hand в котром бы хранились карты. "Круглые контроллеры" можно в один синглотон запихнуть и назвать его GameMaster, он будет отвечать за правила игры передавать ход, раздавать карты. В нем конечно тоже надо декомпозировать сущности на какие-то классы для. Ну и вообще Контроллер - слово паразит. Итак понятно, что код что-то там контролирует.
>HandController - олицетворяет игрока
нейминг мое почтение, мне кажется ты сам запутаешься через полгода что у тебя делает КруглыйКонтроллер, а что делает КонтроллерПоворота. Дело конеш твое, но я б уделил больше внимания неймингу.
Я бы игрока назвал Player. В нем можно хранить его очки/деньги и руку с картами, мб какой-то уровень сложности/опытности игрока.
В игороке был бы клас PlayerHand или просто Hand в котром бы хранились карты. "Круглые контроллеры" можно в один синглотон запихнуть и назвать его GameMaster, он будет отвечать за правила игры передавать ход, раздавать карты. В нем конечно тоже надо декомпозировать сущности на какие-то классы для. Ну и вообще Контроллер - слово паразит. Итак понятно, что код что-то там контролирует.
1,8 Мб, 1024x1024
Отдохнем от книг, просто ПОДЕЛЮСЬ СОСТОЯНИЕМ.
Выстраиваю условия для сна. Какое-то время начал страдать от собственных успехов и начал просыпаться часов в 6 или даже раньше и начал приходилось заставлять себя поспать еще, чтобы быть бодрым. В погоне за этой вещью начал намертво закрывать ролеты на окнах, чтобы ни лучика света с утра не проникало. И чето такое себе решение, хотя полная темнота вроде как входит в гигиену сна. Хуже всего, что эти ролеты конечно перекрывали доступ воздуху. И хотя я стал убирать их на время проветривания перед сном - за ночь воздух быстро кончался.
Сегодня я плюнул на все и настеж открыл окно и так спал. Было даже холодно, проснулся я под одеялом... но с каким кайфом. Очень давно такого не было. И даже аппетит был, успел правильно позавтракать до приема сдвг колес, который снижают аппетит.
И сейчас заряжен максимально и те тревожные вещи (потеря работы, внж и прочее), которые иногда кажутся страшными, пока их стоически в голове не отработаешь - сейчас автоматом откидываются, как херня, которая не стоит внимания.
Это я к тому, что как же на наше душевное состояние влияет физическое. Поэтому я стараюсь и буду стараться их балансировать. Я уверен, что если бы Марк Аврелий жил без воздуха и солнечного света, питался дешевыми сосисками, страдал от гиподинамии и задрачивал себе мозг тиктоком - упражняться в стоических принципах ему было бы на порядок труднее, а то и просто невозможно.
По заветам Арсена Маркаряна сильно поменял фокус с самодрочки с ЦЕЛЯМИ и ПОКАЗАТЕЛЯМИ (и грызением себя) на более полюбовные инструменты развития. В частности я говорю про юнити. Арсен предлагает аппелировать к двум абстракциям. Горилле внутри себя (это не он сам придумал, раньше это называли "рептильным мозгом"), которая жаждет простых эволюционных удовольствий, а также внутреннего ребенка.
Горилла не очень умна, но природно проницательна. Она внимательно следит за тем, чтобы твоя деятельность была направленна на классические вещи типа получать и экономить энергию и продолжать род. И если ты будешь пытаться её обойти и закидывать вещи не имеющие быстрого видимого и понятного эффекта (силой заставлять себя бегать по утрам или упахиваться разработкой после работы) -- она сожмет свои пальцы на твоем горле и заставит тебя объесться бургерами и лежать подрачивать. Так что нужно во-первых, прислушиваться к себе, а во-вторых объяснять ей, какие классные последствия несут эти действия и она может пойти на компромисс и дать тебе сил. Ведь силы есть всегда (не говорим про болезни типа депрессии). Ты можешь лежать и думать, как ты запарился, но позвонит кореш позовет куда-то, куда ты хочешь - и вот ты запрыгал-засобирался. Или тебя взяли на работу, или девушка, которая нравится куда-то позвала. Или как боец ММА казалось уже едва ноги переставляет в пятом раунде.. но вдруг срубает противника и выигрывает титул. И начинает скакать по октагону как ебанутый! А откуда силы? Ну это опять же про природу усталости и снова отложим до соответствующей заметки.
И вот, я перестал каждое утро записывать цель "1$ за свою игру до конца года" и стал проще относиться к этой деятельности, по возможности не включая помидоры, чтобы ее делать. Перестал особо раздумывать над тем, сколько я сделал. Стал чаще объяснять горилле, что я получу ресурсы и признание когда что-то выпущу. А если не выпущу - то хоть с друзьями по приколу поиграю. Я даже допустил, что в целом это брошу, если надо будет начать себя заставлять. Потому что если надо себя заставлять - то ты только аллергию на эту деятельность заработаешь, нужно попуститься или вообще искать что-то другое.
И... я стал делать только больше и с бòльшим удовольствием. Прогресс идет как никогда раньше. (что не значит, что я двигаюсь быстро, я двигаюсь быстрее). Я перестал подсознательно трепетать перед сессиями этой деятельности и начинать оттягивать их другими полезными делами. Потому что делать игру мне стало интереснее, чем мыть посуду. Может кто заметил, что я ничего не делал по приложению в выходные. Потому что мне (и даже горилле в кои-то веки) хотелось заниматься геймдевом. А кто я такой, чтобы ей перечить?
Выстраиваю условия для сна. Какое-то время начал страдать от собственных успехов и начал просыпаться часов в 6 или даже раньше и начал приходилось заставлять себя поспать еще, чтобы быть бодрым. В погоне за этой вещью начал намертво закрывать ролеты на окнах, чтобы ни лучика света с утра не проникало. И чето такое себе решение, хотя полная темнота вроде как входит в гигиену сна. Хуже всего, что эти ролеты конечно перекрывали доступ воздуху. И хотя я стал убирать их на время проветривания перед сном - за ночь воздух быстро кончался.
Сегодня я плюнул на все и настеж открыл окно и так спал. Было даже холодно, проснулся я под одеялом... но с каким кайфом. Очень давно такого не было. И даже аппетит был, успел правильно позавтракать до приема сдвг колес, который снижают аппетит.
И сейчас заряжен максимально и те тревожные вещи (потеря работы, внж и прочее), которые иногда кажутся страшными, пока их стоически в голове не отработаешь - сейчас автоматом откидываются, как херня, которая не стоит внимания.
Это я к тому, что как же на наше душевное состояние влияет физическое. Поэтому я стараюсь и буду стараться их балансировать. Я уверен, что если бы Марк Аврелий жил без воздуха и солнечного света, питался дешевыми сосисками, страдал от гиподинамии и задрачивал себе мозг тиктоком - упражняться в стоических принципах ему было бы на порядок труднее, а то и просто невозможно.
По заветам Арсена Маркаряна сильно поменял фокус с самодрочки с ЦЕЛЯМИ и ПОКАЗАТЕЛЯМИ (и грызением себя) на более полюбовные инструменты развития. В частности я говорю про юнити. Арсен предлагает аппелировать к двум абстракциям. Горилле внутри себя (это не он сам придумал, раньше это называли "рептильным мозгом"), которая жаждет простых эволюционных удовольствий, а также внутреннего ребенка.
Горилла не очень умна, но природно проницательна. Она внимательно следит за тем, чтобы твоя деятельность была направленна на классические вещи типа получать и экономить энергию и продолжать род. И если ты будешь пытаться её обойти и закидывать вещи не имеющие быстрого видимого и понятного эффекта (силой заставлять себя бегать по утрам или упахиваться разработкой после работы) -- она сожмет свои пальцы на твоем горле и заставит тебя объесться бургерами и лежать подрачивать. Так что нужно во-первых, прислушиваться к себе, а во-вторых объяснять ей, какие классные последствия несут эти действия и она может пойти на компромисс и дать тебе сил. Ведь силы есть всегда (не говорим про болезни типа депрессии). Ты можешь лежать и думать, как ты запарился, но позвонит кореш позовет куда-то, куда ты хочешь - и вот ты запрыгал-засобирался. Или тебя взяли на работу, или девушка, которая нравится куда-то позвала. Или как боец ММА казалось уже едва ноги переставляет в пятом раунде.. но вдруг срубает противника и выигрывает титул. И начинает скакать по октагону как ебанутый! А откуда силы? Ну это опять же про природу усталости и снова отложим до соответствующей заметки.
И вот, я перестал каждое утро записывать цель "1$ за свою игру до конца года" и стал проще относиться к этой деятельности, по возможности не включая помидоры, чтобы ее делать. Перестал особо раздумывать над тем, сколько я сделал. Стал чаще объяснять горилле, что я получу ресурсы и признание когда что-то выпущу. А если не выпущу - то хоть с друзьями по приколу поиграю. Я даже допустил, что в целом это брошу, если надо будет начать себя заставлять. Потому что если надо себя заставлять - то ты только аллергию на эту деятельность заработаешь, нужно попуститься или вообще искать что-то другое.
И... я стал делать только больше и с бòльшим удовольствием. Прогресс идет как никогда раньше. (что не значит, что я двигаюсь быстро, я двигаюсь быстрее). Я перестал подсознательно трепетать перед сессиями этой деятельности и начинать оттягивать их другими полезными делами. Потому что делать игру мне стало интереснее, чем мыть посуду. Может кто заметил, что я ничего не делал по приложению в выходные. Потому что мне (и даже горилле в кои-то веки) хотелось заниматься геймдевом. А кто я такой, чтобы ей перечить?
1,8 Мб, 1024x1024
Показать весь текстОтдохнем от книг, просто ПОДЕЛЮСЬ СОСТОЯНИЕМ.
Выстраиваю условия для сна. Какое-то время начал страдать от собственных успехов и начал просыпаться часов в 6 или даже раньше и начал приходилось заставлять себя поспать еще, чтобы быть бодрым. В погоне за этой вещью начал намертво закрывать ролеты на окнах, чтобы ни лучика света с утра не проникало. И чето такое себе решение, хотя полная темнота вроде как входит в гигиену сна. Хуже всего, что эти ролеты конечно перекрывали доступ воздуху. И хотя я стал убирать их на время проветривания перед сном - за ночь воздух быстро кончался.
Сегодня я плюнул на все и настеж открыл окно и так спал. Было даже холодно, проснулся я под одеялом... но с каким кайфом. Очень давно такого не было. И даже аппетит был, успел правильно позавтракать до приема сдвг колес, который снижают аппетит.
И сейчас заряжен максимально и те тревожные вещи (потеря работы, внж и прочее), которые иногда кажутся страшными, пока их стоически в голове не отработаешь - сейчас автоматом откидываются, как херня, которая не стоит внимания.
Это я к тому, что как же на наше душевное состояние влияет физическое. Поэтому я стараюсь и буду стараться их балансировать. Я уверен, что если бы Марк Аврелий жил без воздуха и солнечного света, питался дешевыми сосисками, страдал от гиподинамии и задрачивал себе мозг тиктоком - упражняться в стоических принципах ему было бы на порядок труднее, а то и просто невозможно.
По заветам Арсена Маркаряна сильно поменял фокус с самодрочки с ЦЕЛЯМИ и ПОКАЗАТЕЛЯМИ (и грызением себя) на более полюбовные инструменты развития. В частности я говорю про юнити. Арсен предлагает аппелировать к двум абстракциям. Горилле внутри себя (это не он сам придумал, раньше это называли "рептильным мозгом"), которая жаждет простых эволюционных удовольствий, а также внутреннего ребенка.
Горилла не очень умна, но природно проницательна. Она внимательно следит за тем, чтобы твоя деятельность была направленна на классические вещи типа получать и экономить энергию и продолжать род. И если ты будешь пытаться её обойти и закидывать вещи не имеющие быстрого видимого и понятного эффекта (силой заставлять себя бегать по утрам или упахиваться разработкой после работы) -- она сожмет свои пальцы на твоем горле и заставит тебя объесться бургерами и лежать подрачивать. Так что нужно во-первых, прислушиваться к себе, а во-вторых объяснять ей, какие классные последствия несут эти действия и она может пойти на компромисс и дать тебе сил. Ведь силы есть всегда (не говорим про болезни типа депрессии). Ты можешь лежать и думать, как ты запарился, но позвонит кореш позовет куда-то, куда ты хочешь - и вот ты запрыгал-засобирался. Или тебя взяли на работу, или девушка, которая нравится куда-то позвала. Или как боец ММА казалось уже едва ноги переставляет в пятом раунде.. но вдруг срубает противника и выигрывает титул. И начинает скакать по октагону как ебанутый! А откуда силы? Ну это опять же про природу усталости и снова отложим до соответствующей заметки.
И вот, я перестал каждое утро записывать цель "1$ за свою игру до конца года" и стал проще относиться к этой деятельности, по возможности не включая помидоры, чтобы ее делать. Перестал особо раздумывать над тем, сколько я сделал. Стал чаще объяснять горилле, что я получу ресурсы и признание когда что-то выпущу. А если не выпущу - то хоть с друзьями по приколу поиграю. Я даже допустил, что в целом это брошу, если надо будет начать себя заставлять. Потому что если надо себя заставлять - то ты только аллергию на эту деятельность заработаешь, нужно попуститься или вообще искать что-то другое.
И... я стал делать только больше и с бòльшим удовольствием. Прогресс идет как никогда раньше. (что не значит, что я двигаюсь быстро, я двигаюсь быстрее). Я перестал подсознательно трепетать перед сессиями этой деятельности и начинать оттягивать их другими полезными делами. Потому что делать игру мне стало интереснее, чем мыть посуду. Может кто заметил, что я ничего не делал по приложению в выходные. Потому что мне (и даже горилле в кои-то веки) хотелось заниматься геймдевом. А кто я такой, чтобы ей перечить?
Выстраиваю условия для сна. Какое-то время начал страдать от собственных успехов и начал просыпаться часов в 6 или даже раньше и начал приходилось заставлять себя поспать еще, чтобы быть бодрым. В погоне за этой вещью начал намертво закрывать ролеты на окнах, чтобы ни лучика света с утра не проникало. И чето такое себе решение, хотя полная темнота вроде как входит в гигиену сна. Хуже всего, что эти ролеты конечно перекрывали доступ воздуху. И хотя я стал убирать их на время проветривания перед сном - за ночь воздух быстро кончался.
Сегодня я плюнул на все и настеж открыл окно и так спал. Было даже холодно, проснулся я под одеялом... но с каким кайфом. Очень давно такого не было. И даже аппетит был, успел правильно позавтракать до приема сдвг колес, который снижают аппетит.
И сейчас заряжен максимально и те тревожные вещи (потеря работы, внж и прочее), которые иногда кажутся страшными, пока их стоически в голове не отработаешь - сейчас автоматом откидываются, как херня, которая не стоит внимания.
Это я к тому, что как же на наше душевное состояние влияет физическое. Поэтому я стараюсь и буду стараться их балансировать. Я уверен, что если бы Марк Аврелий жил без воздуха и солнечного света, питался дешевыми сосисками, страдал от гиподинамии и задрачивал себе мозг тиктоком - упражняться в стоических принципах ему было бы на порядок труднее, а то и просто невозможно.
По заветам Арсена Маркаряна сильно поменял фокус с самодрочки с ЦЕЛЯМИ и ПОКАЗАТЕЛЯМИ (и грызением себя) на более полюбовные инструменты развития. В частности я говорю про юнити. Арсен предлагает аппелировать к двум абстракциям. Горилле внутри себя (это не он сам придумал, раньше это называли "рептильным мозгом"), которая жаждет простых эволюционных удовольствий, а также внутреннего ребенка.
Горилла не очень умна, но природно проницательна. Она внимательно следит за тем, чтобы твоя деятельность была направленна на классические вещи типа получать и экономить энергию и продолжать род. И если ты будешь пытаться её обойти и закидывать вещи не имеющие быстрого видимого и понятного эффекта (силой заставлять себя бегать по утрам или упахиваться разработкой после работы) -- она сожмет свои пальцы на твоем горле и заставит тебя объесться бургерами и лежать подрачивать. Так что нужно во-первых, прислушиваться к себе, а во-вторых объяснять ей, какие классные последствия несут эти действия и она может пойти на компромисс и дать тебе сил. Ведь силы есть всегда (не говорим про болезни типа депрессии). Ты можешь лежать и думать, как ты запарился, но позвонит кореш позовет куда-то, куда ты хочешь - и вот ты запрыгал-засобирался. Или тебя взяли на работу, или девушка, которая нравится куда-то позвала. Или как боец ММА казалось уже едва ноги переставляет в пятом раунде.. но вдруг срубает противника и выигрывает титул. И начинает скакать по октагону как ебанутый! А откуда силы? Ну это опять же про природу усталости и снова отложим до соответствующей заметки.
И вот, я перестал каждое утро записывать цель "1$ за свою игру до конца года" и стал проще относиться к этой деятельности, по возможности не включая помидоры, чтобы ее делать. Перестал особо раздумывать над тем, сколько я сделал. Стал чаще объяснять горилле, что я получу ресурсы и признание когда что-то выпущу. А если не выпущу - то хоть с друзьями по приколу поиграю. Я даже допустил, что в целом это брошу, если надо будет начать себя заставлять. Потому что если надо себя заставлять - то ты только аллергию на эту деятельность заработаешь, нужно попуститься или вообще искать что-то другое.
И... я стал делать только больше и с бòльшим удовольствием. Прогресс идет как никогда раньше. (что не значит, что я двигаюсь быстро, я двигаюсь быстрее). Я перестал подсознательно трепетать перед сессиями этой деятельности и начинать оттягивать их другими полезными делами. Потому что делать игру мне стало интереснее, чем мыть посуду. Может кто заметил, что я ничего не делал по приложению в выходные. Потому что мне (и даже горилле в кои-то веки) хотелось заниматься геймдевом. А кто я такой, чтобы ей перечить?
26,2 Мб, mp4,
1280x700, 0:34
1280x700, 0:34
Еще раз правила игры
https://www.nashpoker.net/ru/articles/raspisnoy_poker-30/
Пока отошел от обучающего видео и сделал ставки на первый раунд.
Получается GameController работает на event Action и у него нет зависимостей от остальных контроллеров, ему дергают ивенты. Ну это я уже расписывал.
Добавил BiddingController, которому RoundController делегирует этап ставок. Чем более поздний раунд - тем больше карт в раздаче и больше может быть ставка, максы от 0 до 9. В планах порт на телефон, так что я не стал делать ввод с клавиатуры, пока что выбираем кнопками.
Кнопки я делаю универсальные из префаба базовой кнопки. Меняю только хэндлер класс на этапе инициализации. И добавил интерфейс слушания нажатия кнопки на все классы, которые будут ее хендлить. ООП ЕБАТЬ
Получается такой вот контроллер с интерфейсом хэндлера кнопки
public class BiddingController : MonoBehaviour, IButtonClickHandler
И при инициализации кнопки типа
var button = Instantiate(bidButtonPrefab, bidButtonPositions[index]);
button.GetComponentInChildren<TMP_Text>().text = index.ToString();
var buttonListener = button.GetComponent<ButtonListener>(); buttonListener.ClickHandler = BiddingController.instance;
Позиции для кнопок я заранее разметил невидимыми объектами на канве.
Тексты для ставок и выигрышей тоже поразмечал заранее.
Удивился, что в шарпах нет аналога модулей руби. Чтобы тупо вынести методы класса в другой файл, но у них бы доступ к всему интерфейсу класса, будто они в нем и прописаны.
Пришлось делать какую-то компромиссную залупу типа RoundUtility.GetDealerIndex(this)
То есть для получения контекста передается this.
Еще делегаторы какие-то заебные. Чтобы контроллеру ставок не передавать по лишнему разу переменные, которые знает контроллер раундов пришлось делать
public int roundNumber
{
get { return RoundController.instance.roundNumber; }
}
Как-то ебано и будет работать только с синглтонами. Наверное, в шарпах есть что-то получше для делегации.
Но мне в целом поебать если честно, я игру делаю, а не собеседование прохожу)) А собсно сама по себе игровая логика пока простая запускаю по очереди корутины, меняю текст в TMPшках, пишу данные в переменные контроллеров.
На демо видно как все красиво.
https://www.nashpoker.net/ru/articles/raspisnoy_poker-30/
Пока отошел от обучающего видео и сделал ставки на первый раунд.
Получается GameController работает на event Action и у него нет зависимостей от остальных контроллеров, ему дергают ивенты. Ну это я уже расписывал.
Добавил BiddingController, которому RoundController делегирует этап ставок. Чем более поздний раунд - тем больше карт в раздаче и больше может быть ставка, максы от 0 до 9. В планах порт на телефон, так что я не стал делать ввод с клавиатуры, пока что выбираем кнопками.
Кнопки я делаю универсальные из префаба базовой кнопки. Меняю только хэндлер класс на этапе инициализации. И добавил интерфейс слушания нажатия кнопки на все классы, которые будут ее хендлить. ООП ЕБАТЬ
Получается такой вот контроллер с интерфейсом хэндлера кнопки
public class BiddingController : MonoBehaviour, IButtonClickHandler
И при инициализации кнопки типа
var button = Instantiate(bidButtonPrefab, bidButtonPositions[index]);
button.GetComponentInChildren<TMP_Text>().text = index.ToString();
var buttonListener = button.GetComponent<ButtonListener>(); buttonListener.ClickHandler = BiddingController.instance;
Позиции для кнопок я заранее разметил невидимыми объектами на канве.
Тексты для ставок и выигрышей тоже поразмечал заранее.
Удивился, что в шарпах нет аналога модулей руби. Чтобы тупо вынести методы класса в другой файл, но у них бы доступ к всему интерфейсу класса, будто они в нем и прописаны.
Пришлось делать какую-то компромиссную залупу типа RoundUtility.GetDealerIndex(this)
То есть для получения контекста передается this.
Еще делегаторы какие-то заебные. Чтобы контроллеру ставок не передавать по лишнему разу переменные, которые знает контроллер раундов пришлось делать
public int roundNumber
{
get { return RoundController.instance.roundNumber; }
}
Как-то ебано и будет работать только с синглтонами. Наверное, в шарпах есть что-то получше для делегации.
Но мне в целом поебать если честно, я игру делаю, а не собеседование прохожу)) А собсно сама по себе игровая логика пока простая запускаю по очереди корутины, меняю текст в TMPшках, пишу данные в переменные контроллеров.
На демо видно как все красиво.
26,2 Мб, mp4,
1280x700, 0:34
Показать весь текст1280x700, 0:34
Еще раз правила игры
https://www.nashpoker.net/ru/articles/raspisnoy_poker-30/
Пока отошел от обучающего видео и сделал ставки на первый раунд.
Получается GameController работает на event Action и у него нет зависимостей от остальных контроллеров, ему дергают ивенты. Ну это я уже расписывал.
Добавил BiddingController, которому RoundController делегирует этап ставок. Чем более поздний раунд - тем больше карт в раздаче и больше может быть ставка, максы от 0 до 9. В планах порт на телефон, так что я не стал делать ввод с клавиатуры, пока что выбираем кнопками.
Кнопки я делаю универсальные из префаба базовой кнопки. Меняю только хэндлер класс на этапе инициализации. И добавил интерфейс слушания нажатия кнопки на все классы, которые будут ее хендлить. ООП ЕБАТЬ
Получается такой вот контроллер с интерфейсом хэндлера кнопки
public class BiddingController : MonoBehaviour, IButtonClickHandler
И при инициализации кнопки типа
var button = Instantiate(bidButtonPrefab, bidButtonPositions[index]);
button.GetComponentInChildren<TMP_Text>().text = index.ToString();
var buttonListener = button.GetComponent<ButtonListener>(); buttonListener.ClickHandler = BiddingController.instance;
Позиции для кнопок я заранее разметил невидимыми объектами на канве.
Тексты для ставок и выигрышей тоже поразмечал заранее.
Удивился, что в шарпах нет аналога модулей руби. Чтобы тупо вынести методы класса в другой файл, но у них бы доступ к всему интерфейсу класса, будто они в нем и прописаны.
Пришлось делать какую-то компромиссную залупу типа RoundUtility.GetDealerIndex(this)
То есть для получения контекста передается this.
Еще делегаторы какие-то заебные. Чтобы контроллеру ставок не передавать по лишнему разу переменные, которые знает контроллер раундов пришлось делать
public int roundNumber
{
get { return RoundController.instance.roundNumber; }
}
Как-то ебано и будет работать только с синглтонами. Наверное, в шарпах есть что-то получше для делегации.
Но мне в целом поебать если честно, я игру делаю, а не собеседование прохожу)) А собсно сама по себе игровая логика пока простая запускаю по очереди корутины, меняю текст в TMPшках, пишу данные в переменные контроллеров.
На демо видно как все красиво.
https://www.nashpoker.net/ru/articles/raspisnoy_poker-30/
Пока отошел от обучающего видео и сделал ставки на первый раунд.
Получается GameController работает на event Action и у него нет зависимостей от остальных контроллеров, ему дергают ивенты. Ну это я уже расписывал.
Добавил BiddingController, которому RoundController делегирует этап ставок. Чем более поздний раунд - тем больше карт в раздаче и больше может быть ставка, максы от 0 до 9. В планах порт на телефон, так что я не стал делать ввод с клавиатуры, пока что выбираем кнопками.
Кнопки я делаю универсальные из префаба базовой кнопки. Меняю только хэндлер класс на этапе инициализации. И добавил интерфейс слушания нажатия кнопки на все классы, которые будут ее хендлить. ООП ЕБАТЬ
Получается такой вот контроллер с интерфейсом хэндлера кнопки
public class BiddingController : MonoBehaviour, IButtonClickHandler
И при инициализации кнопки типа
var button = Instantiate(bidButtonPrefab, bidButtonPositions[index]);
button.GetComponentInChildren<TMP_Text>().text = index.ToString();
var buttonListener = button.GetComponent<ButtonListener>(); buttonListener.ClickHandler = BiddingController.instance;
Позиции для кнопок я заранее разметил невидимыми объектами на канве.
Тексты для ставок и выигрышей тоже поразмечал заранее.
Удивился, что в шарпах нет аналога модулей руби. Чтобы тупо вынести методы класса в другой файл, но у них бы доступ к всему интерфейсу класса, будто они в нем и прописаны.
Пришлось делать какую-то компромиссную залупу типа RoundUtility.GetDealerIndex(this)
То есть для получения контекста передается this.
Еще делегаторы какие-то заебные. Чтобы контроллеру ставок не передавать по лишнему разу переменные, которые знает контроллер раундов пришлось делать
public int roundNumber
{
get { return RoundController.instance.roundNumber; }
}
Как-то ебано и будет работать только с синглтонами. Наверное, в шарпах есть что-то получше для делегации.
Но мне в целом поебать если честно, я игру делаю, а не собеседование прохожу)) А собсно сама по себе игровая логика пока простая запускаю по очереди корутины, меняю текст в TMPшках, пишу данные в переменные контроллеров.
На демо видно как все красиво.
>>65868
Костяк у меня из гайда, он так неймил. Но вообще от его стиля у меня иде подчеркивает половину когда, так что наверное так не называют скрипты обычно. Я сам из веба, для меня контроллер это вообще пиздец узкая вещь, которая хттп запросы с бизнес-логикой женит.
Но как минимум handController надо дейстительно декомпозировать. Будет Player у которого как минимум есть рука, а есть и голова, где боты будут над ходами думать.
>я б уделил больше внимания неймингу
Костяк у меня из гайда, он так неймил. Но вообще от его стиля у меня иде подчеркивает половину когда, так что наверное так не называют скрипты обычно. Я сам из веба, для меня контроллер это вообще пиздец узкая вещь, которая хттп запросы с бизнес-логикой женит.
Но как минимум handController надо дейстительно декомпозировать. Будет Player у которого как минимум есть рука, а есть и голова, где боты будут над ходами думать.
ты правила все обсоси сначала, используй все комбинации ситуаций, потом уже проект создавай
14 Кб, 240x262
Обновить тред>>68311
Ну вообще да. Контроллер - это некий регулятор - ремапщик, переводчик. Взять-тот же геймпад. Он превращает нажатия кнопок в какой-то евент. Внутри игры тоже может быть класс контроллер который уже ремапит еневты нажатия кнопок в какие-то именованные функции типа идти, стрелять, присесть. Да хоть в тракторе рычаг - тоже своего рода контроллер. Но проблема в том, что это слово все равно очень абстракное, потому что сильно контекстозависимое. В электронике контроллер - это вобще микрокопьютер в одной микрухе со своим процом, памятью, интрефейсами, портами.
Конкретно в твоей игре неплохо бы определиться с предметной областью и назвать её суперчитаемо, чтобы никаких левых трактовок быть прсто не могло. Вот что у нас вообще есть в любой катрочной игре? Карта, Колода, Крупье, Игрок, Стол, Ставка, Бита и.т.д ООП тем и хорош, что оно позволяет называть все вещи своими бытовыми именами. И код становится похож на обычный человеческий текст из понятий: РаздатьКарты(), ВзятьКарту(), сброситьКарту(), СледующийХод()
>Я сам из веба, для меня контроллер это вообще пиздец узкая вещь, которая хттп запросы с бизнес-логикой женит.
Ну вообще да. Контроллер - это некий регулятор - ремапщик, переводчик. Взять-тот же геймпад. Он превращает нажатия кнопок в какой-то евент. Внутри игры тоже может быть класс контроллер который уже ремапит еневты нажатия кнопок в какие-то именованные функции типа идти, стрелять, присесть. Да хоть в тракторе рычаг - тоже своего рода контроллер. Но проблема в том, что это слово все равно очень абстракное, потому что сильно контекстозависимое. В электронике контроллер - это вобще микрокопьютер в одной микрухе со своим процом, памятью, интрефейсами, портами.
Конкретно в твоей игре неплохо бы определиться с предметной областью и назвать её суперчитаемо, чтобы никаких левых трактовок быть прсто не могло. Вот что у нас вообще есть в любой катрочной игре? Карта, Колода, Крупье, Игрок, Стол, Ставка, Бита и.т.д ООП тем и хорош, что оно позволяет называть все вещи своими бытовыми именами. И код становится похож на обычный человеческий текст из понятий: РаздатьКарты(), ВзятьКарту(), сброситьКарту(), СледующийХод()
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 13 сентября в 07:54.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Вы видите копию треда, сохраненную 13 сентября в 07:54.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.