package com.prupe.mcpatcher.hd;
import com.prupe.mcpatcher.MCLogger;
import net.minecraft.src.TextureAtlasSprite;
public class BorderedTexture extends TextureAtlasSprite {
private static final MCLogger logger = MCLogger.getLogger("Mipmap");
private float minU;
private float maxU;
private float minV;
private float maxV;
private float scaledWidth;
private float scaledHeight;
private int tilesheetWidth;
private int tilesheetHeight;
private int x0;
private int y0;
private String tilesheet;
int border;
public static TextureAtlasSprite create(String tilesheet, String name) {
return (TextureAtlasSprite)(AAHelper.useAAForTexture(tilesheet) ? new BorderedTexture(tilesheet, name) : new TextureAtlasSprite(name));
}
private BorderedTexture(String tilesheet, String name) {
super(name);
this.tilesheet = tilesheet;
}
public void initSprite(int tilesheetWidth, int tilesheetHeight, int x0, int y0, boolean flipped) {
super.initSprite(tilesheetWidth, tilesheetHeight, x0, y0, flipped);
this.tilesheetWidth = tilesheetWidth;
this.tilesheetHeight = tilesheetHeight;
this.x0 = x0;
this.y0 = y0;
this.setBorderWidth(this.border);
}
/**
* Returns the minimum U coordinate to use when rendering with this icon.
*/
public float getMinU() {
return this.minU;
}
/**
* Returns the maximum U coordinate to use when rendering with this icon.
*/
public float getMaxU() {
return this.maxU;
}
/**
* Gets a U coordinate on the icon. 0 returns uMin and 16 returns uMax. Other arguments return in-between values.
*/
public float getInterpolatedU(double u) {
return this.border > 0 ? this.minU + (float)u * this.scaledWidth : super.getInterpolatedU(u);
}
/**
* Returns the minimum V coordinate to use when rendering with this icon.
*/
public float getMinV() {
return this.minV;
}
/**
* Returns the maximum V coordinate to use when rendering with this icon.
*/
public float getMaxV() {
return this.maxV;
}
/**
* Gets a V coordinate on the icon. 0 returns vMin and 16 returns vMax. Other arguments return in-between values.
*/
public float getInterpolatedV(double v) {
return this.border > 0 ? this.minV + (float)v * this.scaledHeight : super.getInterpolatedV(v);
}
public void copyFrom(TextureAtlasSprite stitched) {
if (stitched instanceof BorderedTexture) {
BorderedTexture bordered = (BorderedTexture)stitched;
this.tilesheetWidth = bordered.tilesheetWidth;
this.tilesheetHeight = bordered.tilesheetHeight;
this.x0 = bordered.x0;
this.y0 = bordered.y0;
this.tilesheet = bordered.tilesheet;
this.border = bordered.border;
}
}
void setBorderWidth(int border) {
this.border = border;
int width = this.getIconWidth();
int height = this.getIconHeight();
if (width > 0 && height > 0) {
logger.finer("setBorderWidth(%s, %s, %d): %dx%d -> %dx%d", new Object[] {this.tilesheet, this.getIconName(), Integer.valueOf(border), Integer.valueOf(width - 2 * border), Integer.valueOf(height - 2 * border), Integer.valueOf(width), Integer.valueOf(height)});
if (border > 0) {
this.x0 += border;
this.y0 += border;
width -= 2 * border;
height -= 2 * border;
this.minU = (float)this.x0 / (float)this.tilesheetWidth;
this.maxU = (float)(this.x0 + width) / (float)this.tilesheetWidth;
this.minV = (float)this.y0 / (float)this.tilesheetHeight;
this.maxV = (float)(this.y0 + height) / (float)this.tilesheetHeight;
} else {
this.minU = super.getMinU();
this.maxU = super.getMaxU();
this.minV = super.getMinV();
this.maxV = super.getMaxV();
}
this.scaledWidth = (this.maxU - this.minU) / 16.0F;
this.scaledHeight = (this.maxV - this.minV) / 16.0F;
} else {
this.x0 = this.y0 = 0;
this.minU = this.maxU = this.minV = this.maxV = 0.0F;
this.scaledWidth = this.scaledHeight = 0.0F;
}
}
}