Code
library_once G { constant group G = CreateGroup(); }
scope Trap {
include "cj_types_priv.j";
define {
private PERIOD = .1;
private RADIUS = 200.;
}
private bool Cond(unit u) {
return GetWidgetLife(u) > .405;//Сюда еще можно добавить условие, что юнит - не мина.
}
private constant timer T = CreateTimer();
private unit trap[ ];
private int top = 0;
private void onTimer() {
for (int i = 0; i < top; i++) {
for (unit u; UnitsInRange(GetWidgetX(trap[i]), GetWidgetY(trap[i]), RADIUS) use G) {
if u != trap[i] && Cond(u) {
KillUnit(u);
//Boom!
if --top == 0 { PauseTimer(T); }
else { trap[i] = trap[top]; }
}
}
}
}
public void Add(unit u) {
trap[top++] = u;
if top == 1 { TimerStart(T, PERIOD, true, function onTimer); }
}
public bool Remove(unit u) {
for (int i = 0; i < top; i++) {
if u == trap[i] {
if --top == 0 { PauseTimer(T); }
else { trap[i] = trap[top]; }
return true;
}
}
return false;
}
}