Глупый вопрос. Никогда в программировании не занимался, но хотелось бы самому сделать вещь - нужно чтобы рабочий сам находил участок где можно построить здание.
Тут возникают вопросы:
- Как определить размеры площадки будущего здания? я так понял нужно базу данных делать: на ощупь определять каждое здание, и записывать так? я так и сделать. Сделал так, поставил на карту здание, и мышкой поводил и проверял, где можно строить. Снизу указаны координаты, с помощью них высчитал приблизительные размеры. Получилось что-то на вроде прямоугольника (круг потяжелее высчитать).
- Теперь второй вопрос? А как проверить, что в этом прямоугольном участке можно строить? это надо каждую точку проверить на "можно строить"? я так и сделал два цикла. Вопрос такой - эта хорошая идея? вроде не заметил никаких нагрузок
Еще там от должен быть промежуток между зданием, нужен ли промежуток или без разницы. Просто не все здания могут рядом с друг другом встать (ратуша например с ратушей)
- Есть рабочий, ему нужно построить здание. А как узнать как двигать центр прямоугольника? Это что нужно всю карту перебирать? могу конечно от ближнего раба двигать, только не понимаю как. Обычно строят в центре ратушу (недалеко от стартовой позиции и от рудника), а от центра (ратуши) отсчитываешь и проверяешь есть ли постройки рядом. Рабочие строят плавно, иногда тупят и стоят. Раньше такое делал, но потом удалил, сейчас хочу попробовать еще раз.
была тема также
Принятый ответ
Проблема в том, что, если в этой точке построено здание, то IsTerrainPathable(x, y, PATHING_TYPE_BUILDABILITY) не помогает (это терраин проверяет, а вот то что там построено или нет ему пофиг). Посмотрел в триггерах, есть только текстуры земли - уберспласты (там эти текстурки для здания) - нет функции такой в библиотеке jngp для проверки точки. Пробовал через группу, но там своя заминка (походу выборка ловит тех юнитов, точки которых попали в выборку, а не на целиком. Точно не проверял, но не работает с группой),
Clamp, решил через проверку
if (IssueBuildOrderById(YT, 'hhou', x, y) == false) then если не может построить, значит там здание или что-нибудь еще.
Clamp, помог еще твоя ссылка ExecuteFunc. видимо у меня лимит был, не хотело работать (просто дебаг не отобрал. и раб стоял). Хотя это уже не нужно было
А да слегка подвисает на секунду =(
Урра короче без лагов сделал (версия 3), подредактировать недоработку и будет норм
Clamp, решил через проверку
if (IssueBuildOrderById(YT, 'hhou', x, y) == false) then если не может построить, значит там здание или что-нибудь еще.
Clamp, помог еще твоя ссылка ExecuteFunc. видимо у меня лимит был, не хотело работать (просто дебаг не отобрал. и раб стоял). Хотя это уже не нужно было
А да слегка подвисает на секунду =(
Урра короче без лагов сделал (версия 3), подредактировать недоработку и будет норм
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован MpW
Clamp, решил через проверку
if (IssueBuildOrderById(YT, 'hhou', x, y) == false) then если не может построить, значит там здание или что-нибудь еще.
Clamp, помог еще твоя ссылка ExecuteFunc. видимо у меня лимит был, не хотело работать (просто дебаг не отобрал. и раб стоял). Хотя это уже не нужно было
А да слегка подвисает на секунду =(
Урра короче без лагов сделал (версия 3), подредактировать недоработку и будет норм
Отредактирован MpW
поле редактора "Пути- Карта путей"
возьмем текстуру фермы:
PathTextures\4x4SimpleSolid.tga
у всех обычно в текстурках цифры какие-то приписываются. Означают они пиксели. То есть там картинка 4x4. Это самая минимальная. Пробовал сделать меньше, но потом здание не ставится нормально при строительстве (ставится только через каждые 4 клетки), сделал по-другому, можно взять иконку 4x4, квадрат с 2x2 середину закрасить розовым, края черным).
вот статья
еще цифры означают и реальный игровой размер площадки здания.
например числа 4x4. здесь 4 означает, что 4 квадрата. короче площадь с размером 4 квадрата на 4 квадрата.
1 маленький квадрат = 32x32 (его можно увидеть в редакторе, сетку включите)
площадь 10квадрата x 10 квадрата = 320x320 и так далее
set Rect_32x32[2] = (Rect(0, 0, 64,64)) это не существующий сделал для себя
set Rect_32x32[4] = (Rect(0, 0, 128,128)) площадка фермы и др
set Rect_32x32[8] = (Rect(0, 0, 256, 256)) площадка башни грифона и кузницы и др
set Rect_32x32[10] = (Rect(0, 0, 320, 320)) площадка алтаря, лесопилки и др
set Rect_32x32[12] = (Rect(0, 0, 384, 384)) площадка казармы и др
и так далее
короче берем двигаем центр ректа в предполагаемую точку, проверяем функцией GetPathingRect.
в коде каждые 32 координаты смещения точки проверяется точка. Не хотелось бы проверять через каждую координату, лучше через каждые 32 координаты. Тут сразу же выходит из цикла, если например в точке нельзя строить (или что там по условию).
Берете записываете. Например можно взять поле вот, в этом поле можно записать размер здания. Бесполезно поле для большинства здании.