package rabbitescape.render;
import java.util.List;
import rabbitescape.render.androidlike.Bitmap;
import rabbitescape.render.androidlike.Canvas;
import rabbitescape.render.androidlike.Paint;
public class Renderer<T extends Bitmap, P extends Paint>
{
public int offsetX;
public int offsetY;
public int tileSize;
private final BitmapCache<T> bitmapCache;
public Renderer(
int offsetX,
int offsetY,
int tileSize,
BitmapCache<T> bitmapCache
)
{
this.offsetX = offsetX;
this.offsetY = offsetY;
this.tileSize = tileSize;
this.bitmapCache = bitmapCache;
}
public void render( Canvas<T, P> canvas, List<Sprite> sprites, P paint )
{
for ( Sprite sprite : sprites )
{
if ( sprite.bitmapName != null )
{
drawSprite( canvas, sprite, paint );
}
}
}
private void drawSprite( Canvas<T, P> canvas, Sprite sprite, P paint )
{
T bitmap = bitmapCache.get( sprite.bitmapName, tileSize );
int left = sprite.offsetX( tileSize )
+ offsetX + ( sprite.tileX * tileSize );
int top = sprite.offsetY( tileSize )
+ offsetY + ( sprite.tileY * tileSize );
int right = left + bitmap.width();
int bottom = top + bitmap.height();
if (
right > 0
&& bottom > 0
&& left < canvas.width()
&& top < canvas.height()
)
{
canvas.drawBitmap( bitmap, left, top, paint );
}
}
public void setOffset( int offsetX, int offsetY )
{
this.offsetX = offsetX;
this.offsetY = offsetY;
}
}