public void perform(final Context context) {
int BURNED_TREES_VAR = world.program().interfaceGlobals().size() + 1;
int patchCount = world.patches().count();
boolean any = false;
for (int i = 0; i < patchCount; i++) {
Patch patch = world.getPatch(i);
double pcolor = patch.pcolorDouble();
if (pcolor > RED_MINUS_FOUR && pcolor < RED_PLUS_ONE) {
any = true;
break; // in the Logo code, the compiler uses _anywith to get this optimization
}
}
if (!any) {
context.finished = true;
return;
}
for (int i = 0; i < patchCount; i++) {
Patch patch = world.getPatch(i);
// if pcolor = green
if (patch.pcolorDouble() == GREEN) {
// set counts (nsum4 fire)
double counts =
((Double) patch.getPatchNorth().variables[FIRE_VAR]).doubleValue() +
((Double) patch.getPatchSouth().variables[FIRE_VAR]).doubleValue() +
((Double) patch.getPatchEast().variables[FIRE_VAR]).doubleValue() +
((Double) patch.getPatchWest().variables[FIRE_VAR]).doubleValue();
patch.variables[COUNTS_VAR] = Double.valueOf(counts);
}
}
for (int i = 0; i < patchCount; i++) {
Patch patch = world.getPatch(i);
double pcolor = patch.pcolorDouble();
if (pcolor == GREEN) {
if (((Double) patch.variables[COUNTS_VAR]).doubleValue() > 0) {
// set fire 1
patch.variables[FIRE_VAR] = World.ONE;
// set pcolor red
patch.pcolorDoubleUnchecked(BOXED_RED);
// set burned-trees burned-trees + 1
world.observer().variables[BURNED_TREES_VAR] =
Double.valueOf
(((Double) world.observer().variables
[world.program().interfaceGlobals().size()])
.doubleValue() + 1);
}
} else {
if (pcolor > RED_MINUS_FOUR && pcolor < RED_PLUS_ONE) {
// set pcolor pcolor - 0.3
patch.pcolor(pcolor - 0.3);
}
}
}
context.ip = next;
}