Files
SpaceShipProject/src/main/java/com/spaceshipproject/ShipSizing.java
T
gpatruno 94404156d9 first
2026-05-19 15:35:55 +02:00

40 lines
1.6 KiB
Java

package com.spaceshipproject;
/**
* Calcule la taille effective d'un spaceship en fonction de son niveau.
*
* Regle :
* - level 1 = taille de creation
* - chaque level-up alterne +1 sur x puis +1 sur z (x en premier)
* - tous les 4 level-ups : +1 sur y
* - les valeurs sont plafonnees a la taille maximale configuree.
*/
public final class ShipSizing {
private ShipSizing() {}
/** Renvoie [sizeX, sizeY, sizeZ] pour le niveau donne. */
public static int[] sizeForLevel(ConfigManager cfg, int level) {
if (level < 1) level = 1;
int additions = level - 1;
int xAdds = (additions + 1) / 2; // ceil(additions / 2)
int zAdds = additions / 2;
int yAdds = additions / 4;
int sx = clamp(cfg.defaultSizeX() + xAdds, cfg.defaultSizeX(), cfg.maxSizeX());
int sy = clamp(cfg.defaultSizeY() + yAdds, cfg.defaultSizeY(), cfg.maxSizeY());
int sz = clamp(cfg.defaultSizeZ() + zAdds, cfg.defaultSizeZ(), cfg.maxSizeZ());
return new int[]{sx, sy, sz};
}
/** Niveau a partir duquel toutes les dimensions atteignent leur max. */
public static int maxUsefulLevel(ConfigManager cfg) {
int xLevels = (cfg.maxSizeX() - cfg.defaultSizeX()) * 2; // x = ceil(adds/2)
int zLevels = (cfg.maxSizeZ() - cfg.defaultSizeZ()) * 2 + 1; // z = floor(adds/2)
int yLevels = (cfg.maxSizeY() - cfg.defaultSizeY()) * 4;
return 1 + Math.max(Math.max(xLevels, zLevels), yLevels);
}
private static int clamp(int v, int min, int max) { return Math.max(min, Math.min(max, v)); }
}