Every me and every you

Posted by Air


Сделал добычу ресурсов. Осуществляется по средствам шахты, строящейся прямо на месторождениях.
Также здания теперь могут быть выключены/включены, выключенные здания снабжены иконкой, привлекающей внимание. У каждого здания есть кнопка включения/выключения и продажи (Кроме главного штаба). Кнопки, они же действия, могут быть доступными/не доступными и впринципе невозможными, что визуально отображается по средствам фильтров, делающих изображение блёклым/чёрно-белым/светящемся и т.п. конкретный рецепт фильтров подберу потом. Теперь кнопки идут в группах, чтобы они могли по нажатию сделать недоступными не только себя, но и остальных. Впрочем, позже я добавил в кнопки переменную функции, которая должна определять доступность и возвращать список причин недоступности, дабы их можно было подсказать игроку. Функция вызывается в onFrame для всех кнопок.

Становиться понятно, что в интерфейсе много придётся ещё переделать. Панель действия-статы не оправдывает себя. Некоторые действия должны быть доступны проще, например по наведению мышки на здание в всплывающей панельке рядом со зданием. Например включать 10 зданий после того как случайно выключил электростанцию и, соответственно, все, кому нехватило энергии, вырубились - не прикольно.

Расширил добычу электроэнергии. Сделал свои задуманные башенки, "собирающие" электроэнергию с земли пропорционально огорожденной ими площади. Они теперь дают множитель к общей электроэнергии, вырабатываемой статическими источниками.
Когда порылся по поводу алгоритма вычисления наибольшей площади, огорожденной массивом точек, понял, что мягко говоря не туда залез. Алгоритма мягко говоря не придумали. Да и вообще мне фактически был нужен алгоритм, который:
находил абстрактный многоугольник, построенный на точках из данного массива, с длинной ребра не превышающей максимальную и обладающей максимальной площадью из всех возможных таких многоугольников.
Начать с того, что задача просто нахождения площади конкретного многоугольника уже сравнима с написанием игры. Потому что этот многоугольник может оказаться невыпуклым, дырявым и даже не цельным (то есть фактически может оказаться несколькими отдельными многоугольниками).
А ещё надо найти обладающий максимальной площадью среди тех, чьи рёбра не превышают максимум.

В итоге отказался от условия, что вершинами многоугольника могут служить только заданные точки. Допустил, что ими также могут являться пересечения рёбер.

И произнёс волшебное "это не баг, это фича".
Может, можно, конечно, было бы отсечь этот случай, но я забил.
Площадь и многоугольник находятся путём отрисовки всех возможных треугольников с подходящей длинной ребра (пока писал это предложение, заочно нашёл баг: я проверял только 2 длинны ребра из 3 у треугольников) в битмап и подсчёта точек методом брутфорса. Тормозит на 20+ рядом расположенных башен. В игре больше 10 никто не построит.

Во время строительства максимальные длины рёбер и текущий многоугольник визуализируются. Но что-то много тут всего как-то...
Убрал зелёные квадратики при постройке зданий, всё равно они толком ничего не означали и нужны были скорей для дебага, чем для игры.

Ещё разобрал всё по слоям, не сажаю больше никакой фигнина stage, кроме игровых экранов.
Из нереализованного функционала только эфекты на крипах, юниты (может быть, если до них дойдёт), сохранение/загрузка/начало новой игры и вводный гайд. Всё остальное только контент.