All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.flixel.FlxTileblock Maven / Gradle / Ivy

The newest version!
package org.flixel;

import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.TextureData;

/**
 * This is a basic "environment object" class, used to create simple walls and floors.
 * It can be filled with a random selection of tiles to quickly add detail.
 * 
 * @author Ka Wing Chin
 * @author Thomas Weston
 */
public class FlxTileblock extends FlxSprite
{
	/**
	 * Creates a new FlxBlock object with the specified position and size.
	 * 
	 * @param	X			The X position of the block.
	 * @param	Y			The Y position of the block.
	 * @param	Width		The width of the block.
	 * @param	Height		The height of the block.
	 */
	public FlxTileblock(float X,float Y,int Width,int Height)
	{
		super(X,Y);
		makeGraphic(Width,Height,0,true);
		active = false;
		immovable = true;
		moves = false;
	}

	/**
	 * Fills the block with a randomly arranged selection of graphics from the image provided.
	 * 
	 * @param	TileGraphic		The graphic class that contains the tiles that should fill this block.
	 * @param	TileWidth		The width of a single tile in the graphic.
	 * @param	TileHeight		The height of a single tile in the graphic.
	 * @param	Empties			The number of "empty" tiles to add to the auto-fill algorithm (e.g. 8 tiles + 4 empties = 1/3 of block will be open holes).
	 */
	public FlxTileblock loadTiles(String TileGraphic,int TileWidth,int TileHeight,int Empties)
	{
		if(TileGraphic == null)
			return this;

		//First create a tile brush
		FlxSprite sprite = new FlxSprite().loadGraphic(TileGraphic,true,false,TileWidth,TileHeight);
		int spriteWidth = (int)sprite.width;
		int spriteHeight = (int)sprite.height;
		int total = sprite.getNumFrames() + Empties;

		//Then prep the "canvas" as it were (just doublechecking that the size is on tile boundaries)
		boolean regen = false;
		if(width % sprite.width != 0)
		{
			width = (int)(width/spriteWidth+1)*spriteWidth;
			regen = true;
		}
		if(height % sprite.height != 0)
		{
			height = (int)(height/spriteHeight+1)*spriteHeight;
			regen = true;
		}
		if(regen)
			makeGraphic((int)width,(int)height,0,true);
		else
			this.fill(0);

		TextureData brushTextureData = sprite.framePixels.getTexture().getTextureData();

		if(!brushTextureData.isPrepared())
			brushTextureData.prepare();

		Pixmap brushPixmap = brushTextureData.consumePixmap();

		//Stamp random tiles onto the canvas
		int row = 0;
		int column;
		int destinationX;
		int destinationY = 0;
		int widthInTiles = (int)(width/spriteWidth);
		int heightInTiles = (int)(height/spriteHeight);
		while(row < heightInTiles)
		{
			destinationX = 0;
			column = 0;
			while(column < widthInTiles)
			{
				if(FlxG.random() * total > Empties)
				{
					sprite.randomFrame();
					sprite.drawFrame();
					stamp(brushPixmap,sprite.framePixels.getRegionX(),sprite.framePixels.getRegionY()-sprite.frameHeight,sprite.frameWidth,sprite.frameHeight,destinationX+_pixels.getRegionX(),destinationY+_pixels.getRegionY());
				}
				destinationX += spriteWidth;
				column++;
			}
			destinationY += spriteHeight;
			row++;
		}

		if(brushTextureData.disposePixmap())
			brushPixmap.dispose();

		return this;
	}

	/**
	 * Fills the block with a randomly arranged selection of graphics from the image provided.
	 * 
	 * @param	TileGraphic		The graphic class that contains the tiles that should fill this block.
	 * @param	TileWidth		The width of a single tile in the graphic.
	 * @param	TileHeight		The height of a single tile in the graphic.
	 */
	public FlxTileblock loadTiles(String TileGraphic,int TileWidth,int TileHeight)
	{
		return loadTiles(TileGraphic,TileWidth,TileHeight,0);
	}

	/**
	 * Fills the block with a randomly arranged selection of graphics from the image provided.
	 * 
	 * @param	TileGraphic		The graphic class that contains the tiles that should fill this block.
	 * @param	TileWidth		The width of a single tile in the graphic.
	 */
	public FlxTileblock loadTiles(String TileGraphic,int TileWidth)
	{
		return loadTiles(TileGraphic,TileWidth,0,0);
	}

	/**
	 * Fills the block with a randomly arranged selection of graphics from the image provided.
	 * 
	 * @param	TileGraphic		The graphic class that contains the tiles that should fill this block.
	 */
	public FlxTileblock loadTiles(String TileGraphic)
	{
		return loadTiles(TileGraphic,0,0,0);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy