Codi Alumnes 2 Java 3 - Funcio addTRtoAtlas
public class game_commons {
private static TextureRegion[][] textures = new TextureRegion[10][10];
private static int numY = 0;
private static final int textureAtlasWidth = 1024;
public static TextureRegion addToTextureAtlas(BitmapTextureAtlas tempTextureAtlas, BaseGameActivity myActivity, String tPath){
// Creamos un Texture Atlas interno para tirar la nueva TextureRegion y poder calcular sus tamaños
BitmapTextureAtlas internalTA = new BitmapTextureAtlas(textureAtlasWidth,textureAtlasWidth,TextureOptions.BILINEAR_PREMULTIPLYALPHA);
TextureRegion temp = BitmapTextureAtlasTextureRegionFactory.createFromAsset(internalTA,myActivity,tPath,0,0);
// Calculamos el width y height de la textura
int currentWidth = temp.getWidth();
int currentHeight = temp.getHeight();
// Posición de la textura
int tX = 0;
int tY = 0;
// Si ya existe alguna textura
if(textures[0][0] != null){
int x = 0, y = 0, actualX = 0, actualY = 0, auxY = 0;
int found = 0;
for(y = 0; y<=numY; y++){ // numY => Numero de filas totales
// Solo entramos si aun no hemos encontrado la posición donde posicionar la textura
if(found == 0){
actualX = 0; // Maxima X (pixels) de las texturas de la fila
auxY = 0; // Maxima Y (pixels) de las texturas de la fila
for(x = 0; textures[y][x] != null; x++){
// Calculamos total X (pixels) de la fila actual
actualX += textures[y][x].getWidth();
// Calculamos maxima Y (pixels) pero NO la aplicamos a la Y maxima
if(auxY < textures[y][x].getHeight()){
auxY = textures[y][x].getHeight();
}
}
// Cabe la textura en la Y actual ?
if((textureAtlasWidth - actualY) > currentHeight && (textureAtlasWidth - actualX) > currentWidth){
textures[y][x] = temp;
found = 1;
}else{
// Si no cabe nos posicionamos en la siguiente fila
actualY += auxY;
}
}
}
// No se ha encontrado espacio en ninguna fila, creamos nueva fila
if(found == 0){
numY++;
textures[numY][0] = temp;
actualX = 0;
}
// Asignamos las coordenadas resultantes
if(actualX > 0) tX = actualX + 1;
if(actualY > 0) tY = actualY + 1;
}else{
// Primera textura
textures[0][0] = temp;
}
// Tiramos el TextureRegion al Texture Atlas
temp = BitmapTextureAtlasTextureRegionFactory.createFromAsset(tempTextureAtlas,myActivity,tPath,tX,tY);
Log.d("MSG","MSG: Siguiente X: "+tX+", Siguiente Y: "+tY+", Dimensiones: "+currentWidth+" x "+currentHeight);
return temp;
}
}