first
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
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)); }
|
||||
}
|
||||
Reference in New Issue
Block a user