40 lines
1.6 KiB
Java
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)); }
|
|
}
|