Codi Alumnes 2 Java 3 - Funcio addTRtoAtlas

per Jordi Farrero darrera modificació 2020-03-25T14:52:34+01:00

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;

}

}