У меня есть регион в котором, в случайной точке спаунятся юниты, но регион полон объектов и юниты бывает попадают спауном в них, соответственно застревают там... Как этого избежать?

Принятый ответ

Работай с real (числа с запятой) вместо регионов, занеси в бд или проверяй условиями нужные координаты и выбирай.
Точка не будет утекать, если хранить одну точку в глобальной переменной и для мгновенных операций перемещать ее и использовать дальше по назначению.
  1. В шапку над триггерами вставляешь этот код:
function RegionInit takes nothing returns nothing
//17/11/2016
    set udg_GL = Location(0.0, 0.0)
    set udg_RegionNumber = GetRandomInt(1, 4) // выбрать количество регионов
    set udg_RegionX1 = GetRectMinX(udg_Region[udg_RegionNumber])
    set udg_RegionY1 = GetRectMinY(udg_Region[udg_RegionNumber])
    set udg_RegionX2 = GetRectMaxX(udg_Region[udg_RegionNumber])
    set udg_RegionY2 = GetRectMaxY(udg_Region[udg_RegionNumber])
endfunction

  1. Создаешь глобальные переменные типа:
    • точка с названием GL
    • регион массив с названием Region
    • целочисленная с названием RegionNumber - для хранения номера выбранного региона
    • реальное число с названиями RegionX1, RegionX2, RegionY1, RegionY1 - для хранения координат выбранного региона
После действий на картинке в инициализацию вставляешь кастом скрипт:
call RegionInit()

  1. Перед каждым созданием юнита вставляешь кастом скрипт:
call MoveLocation(udg_GL, GetRandomReal(udg_RegionX1, udg_RegionX2), GetRandomReal(udg_RegionY1, udg_RegionY2))
В окне действия с созданием юнита используешь свою переменную GL

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
2
20
7 лет назад
2
Либо создаешь в случайной точке разрушаемое с текстурой пути 1х1 или 2х2, а потом спавнишь юнита вместо него.
0
4
7 лет назад
0
Способ #1
Разбить регион на под регионы, чтобы те огибали всякие объекты. Затем эти регионы объединять в единый посредством переменных в триггерах. Если сделать все правильно, то прописанный регион становится единым. Затем уже через триггеры задаешь именно этот регион, который ты слепил из нескольких. Пример показан на приложеном графике.
Огромное спасибо за наглядность!) Первый способ определенно мне подходит, но как слить регионы в триггерах? или код джасса?
1
21
7 лет назад
1
Если регион - прямоугольник, то проще хранить 2 пары координат и создавать юнита в рамках между нижней и верхней, правой и левой точками.
Проверять на проходимость можно с помощью создания предмета в нужной точке и сравнении фактических координат предмета с заданными.
2
21
7 лет назад
Отредактирован Sozidar
2
Но здесь точка утекает.
Загруженные файлы
0
4
7 лет назад
0
Но здесь точка утекает.
Хорошее решение... Но загвоздка - у меня генератор, который помечает случайный 1 регион рабочим, после чего все дальнейшие действия происходят в нем
1
21
7 лет назад
Отредактирован JaBeN_Симфер
1
Работай с real (числа с запятой) вместо регионов, занеси в бд или проверяй условиями нужные координаты и выбирай.
Точка не будет утекать, если хранить одну точку в глобальной переменной и для мгновенных операций перемещать ее и использовать дальше по назначению.
  1. В шапку над триггерами вставляешь этот код:
function RegionInit takes nothing returns nothing
//17/11/2016
    set udg_GL = Location(0.0, 0.0)
    set udg_RegionNumber = GetRandomInt(1, 4) // выбрать количество регионов
    set udg_RegionX1 = GetRectMinX(udg_Region[udg_RegionNumber])
    set udg_RegionY1 = GetRectMinY(udg_Region[udg_RegionNumber])
    set udg_RegionX2 = GetRectMaxX(udg_Region[udg_RegionNumber])
    set udg_RegionY2 = GetRectMaxY(udg_Region[udg_RegionNumber])
endfunction

  1. Создаешь глобальные переменные типа:
    • точка с названием GL
    • регион массив с названием Region
    • целочисленная с названием RegionNumber - для хранения номера выбранного региона
    • реальное число с названиями RegionX1, RegionX2, RegionY1, RegionY1 - для хранения координат выбранного региона
После действий на картинке в инициализацию вставляешь кастом скрипт:
call RegionInit()

  1. Перед каждым созданием юнита вставляешь кастом скрипт:
call MoveLocation(udg_GL, GetRandomReal(udg_RegionX1, udg_RegionX2), GetRandomReal(udg_RegionY1, udg_RegionY2))
В окне действия с созданием юнита используешь свою переменную GL
Принятый ответ
0
4
7 лет назад
0
Работай с real (числа с запятой) вместо регионов, занеси в бд или проверяй условиями нужные координаты и выбирай.
Точка не будет утекать, если хранить одну точку в глобальной переменной и для мгновенных операций перемещать ее и использовать дальше по назначению.
В шапку над триггерами вставляешь этот код:
function RegionInit takes nothing returns nothing
17/11/2016
set udg_GL = Location(0.0, 0.0)
set udg_RegionNumber = GetRandomInt(1, 4) выбрать количество регионов
set udg_RegionX1 = GetRectMinX(udg_Region[udg_RegionNumber])
set udg_RegionY1 = GetRectMinY(udg_Region[udg_RegionNumber])
set udg_RegionX2 = GetRectMaxX(udg_Region[udg_RegionNumber])
set udg_RegionY2 = GetRectMaxY(udg_Region[udg_RegionNumber])
endfunction
Создаешь глобальные переменные типа:
точка с названием GL
регион массив с названием Region
целочисленная с названием RegionNumber - для хранения номера выбранного региона
реальное число с названиями RegionX1, RegionX2, RegionY1, RegionY1 - для хранения координат выбранного региона
После действий на картинке в инициализацию вставляешь кастом скрипт:
call RegionInit()
Перед каждым созданием юнита вставляешь кастом скрипт:
call MoveLocation(udg_GL, GetRandomReal(udg_RegionX1, udg_RegionX2), GetRandomReal(udg_RegionY1, udg_RegionY2))
В окне действия с созданием юнита используешь свою переменную GL
Буду пробовать, спасибо за такой разжеванный ответ!)
Всем спасибо вопрос можно закрывать
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.