package mekanism.client.render.ctm;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
public class Submap implements ISubmap
{
private final float width, height;
private final float xOffset, yOffset;
private final SubmapNormalized normalized = new SubmapNormalized(this);
public Submap(float w, float h, float x, float y)
{
width = w;
height = h;
xOffset = x;
yOffset = y;
}
@Override
public float getXOffset()
{
return xOffset;
}
@Override
public float getYOffset()
{
return yOffset;
}
@Override
public float getWidth()
{
return width;
}
@Override
public float getHeight()
{
return height;
}
@Override
public float getInterpolatedU(TextureAtlasSprite sprite, float u) {
return sprite.getInterpolatedU(getXOffset() + u / getWidth());
}
@Override
public float getInterpolatedV(TextureAtlasSprite sprite, float v) {
return sprite.getInterpolatedV(getYOffset() + v / getWidth());
}
@Override
public float[] toArray() {
return new float[] { getXOffset(), getYOffset(), getXOffset() + getWidth(), getYOffset() + getHeight() };
}
@Override
public SubmapNormalized normalize() {
return normalized;
}
@Override
public ISubmap relativize() {
return this;
}
private static final float FACTOR = 16f;
private static class SubmapNormalized implements ISubmap
{
private final ISubmap parent;
public SubmapNormalized(ISubmap submap)
{
parent = submap;
}
@Override
public float getXOffset() {
return parent.getXOffset() / FACTOR;
}
@Override
public float getYOffset() {
return parent.getYOffset() / FACTOR;
}
@Override
public float getWidth() {
return parent.getWidth() / FACTOR;
}
@Override
public float getHeight() {
return parent.getHeight() / FACTOR;
}
@Override
public ISubmap relativize() {
return parent;
}
@Override
public ISubmap normalize() {
return this;
}
@Override
public float getInterpolatedU(TextureAtlasSprite sprite, float u) {
return parent.getInterpolatedU(sprite, u);
}
@Override
public float getInterpolatedV(TextureAtlasSprite sprite, float v) {
return parent.getInterpolatedV(sprite, v);
}
@Override
public float[] toArray() {
return parent.toArray();
}
}
}