Знаю единственный способ, как в Jass обойти группу боевых единиц:
do {
first = FirstOfGroup(units)
if (first != null) {
...
GroupRemoveUnit(units, first)
}
} while (first == null)
Этот способ очень неудобен, когда группу нужно сохранить (например, пройти по ней несколько раз. Есть другие способы?
Принятый ответ
вроде был на сайте индексатор для групп
ищи, юзай
накидал простой итератор для груп
пример использования
ищи, юзай
накидал простой итератор для груп
пример использования
GroupIterator iterator=GroupIterator.new(units); // создаём итератор для группы units
while (iterator.hasNext()){ // проверяем что ещё есть юниты для перебора
first = iterator.next(); // извлекаем следующего юнита
...
}
iterator.delete(); // удаляем итератор
а вот и сам итератор
код
struct GroupIterator{
private group gr;
static thistype new(group g){
thistype this=thistype.create();
gr=CreateGroup();
bj_groupAddGroupDest = gr;
ForGroup(g, function GroupAddGroupEnum);
return this;
}
boolean hasNext(){
return FirstOfGroup(gr)!=null;
}
unit next(){
unit u=FirstOfGroup(gr);
GroupRemoveUnit(gr, u);
return u;
}
void delete(){
DestroyGroup(gr);
destroy();
}
}
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
ищи, юзай
накидал простой итератор для груп
пример использования