
Un petit souci bien trop abstrait pour mes (très) modestes connaissances :
J'ai créé une petite unité nommée “Bomb” qui, comme son nom l'indique, détruit tout autour du joueur sur une surface de 3x3 cases… Après l'explosion il ne reste qu'un terrain désolé :
field TDarkGround
name 'Terre sombre';
image 'terresombre';
on DoDraw do
begin
inherited;
DissipateGroundNeighbors(Context);
end;
end;
Tout est détruit
sauf l'eau et les murs indestructibles :
field TIndestructibleWall(TWall)
name 'Mur indestructible';
on DoDraw do
begin
inherited;
EditVisualTag := 'X';
end;
end;
Après avoir pas mal galéré avec les histoires de boucles, mon code fonctionne à merveille :
(...)
for I:= -1 to 1 do
for J:= -1 to 1 do
begin
if (Map[Point3D(X+I, Y+J, Z)].Field <> IndestructibleWall) and
(Map[Point3D(X+I, Y+J, Z)].Field <> Water) then
Map[Point3D(X+I, Y+J, Z)].Field := DarkGround;
if Map[Point3D(X+I, Y+J, Z)].Field = Water then
Map[Point3D(X+I, Y+J, Z)] := Water;
end;
(...)
Le gros hic c'est que si dans l'éditeur je veux copier un
IndestructibleWall afin de lui attribuer une autre image de mur, cela ne fonctionne pas : Il est vaporisé par l'explosion !!…
J'ai passé pas mal de temps sur ce truc et suis arrivé à mes fins grâce à de la persévérance et beaucoup de tâtonnements, mais là, j'avoue, je n'ai aucune idée de comment gérer le problème !!!
Une soluce magique ??!…