Merci, et j'ai répondu sur le forum en Anglais, et je réponds ici en Français :
J'ai posé la question sur Stackoverflow, et la réponse a été donnée
ici.
Voici ma fonction qui fonctionne :
Code: Select all
Void PlaceNESW(Integer X, Integer Y, Integer Z, Integer Val)
{
PB("ArenaSimpleBase", X, Y, Z, ::CardinalDirections::North);
declare Boolean ValBitN = ((Val / 1 ) % 2) > 0;
declare Boolean ValBitE = ((Val / 2 ) % 2) > 0;
declare Boolean ValBitS = ((Val / 4 ) % 2) > 0;
declare Boolean ValBitW = ((Val / 8 ) % 2) > 0;
if (ValBitN) {
PB("ArenaSimpleBase", X, Y, Z-1, ::CardinalDirections::North);
}
if (ValBitE) {
PB("ArenaSimpleBase", X, Y, Z-1, ::CardinalDirections::North);
}
if (ValBitS) {
PB("ArenaSimpleBase", X, Y, Z-1, ::CardinalDirections::North);
}
if (ValBitW) {
PB("ArenaSimpleBase", X, Y, Z-1, ::CardinalDirections::North);
}
}
L'objectif est de poser un carré à un endroit, et s'il y a une ouverture vers le nord, poser un carre au nord, une à l'est, poser à l'est etc, mais il faut que la fonction soit ultra courte, et qu'il puisse y avoir plusieurs ouvertures. Donc rien de mieux que des bits.
J'appelle ma fonction ainsi :
Code: Select all
PlaceNESW(25, CoordYBaseSol+2, 27, 15); // NESW
PlaceNESW(25, CoordYBaseSol+2, 25, 1); // N
PlaceNESW(25, CoordYBaseSol+2, 23, 10); // EW