    001package net.minecraft.client.renderer;
    002
    003import cpw.mods.fml.relauncher.Side;
    004import cpw.mods.fml.relauncher.SideOnly;
    005import net.minecraft.util.Icon;
    006
    007@SideOnly(Side.CLIENT)
    008public class IconFlipped implements Icon
    009{
    010    private final Icon baseIcon;
    011    private final boolean flipU;
    012    private final boolean flipV;
    013
    014    public IconFlipped(Icon par1Icon, boolean par2, boolean par3)
    015    {
    016        this.baseIcon = par1Icon;
    017        this.flipU = par2;
    018        this.flipV = par3;
    019    }
    020
    021    /**
    022     * Returns the X position of this icon on its texture sheet, in pixels.
    023     */
    024    public int getOriginX()
    025    {
    026        return this.baseIcon.getOriginX();
    027    }
    028
    029    /**
    030     * Returns the Y position of this icon on its texture sheet, in pixels.
    031     */
    032    public int getOriginY()
    033    {
    034        return this.baseIcon.getOriginY();
    035    }
    036
    037    /**
    038     * Returns the minimum U coordinate to use when rendering with this icon.
    039     */
    040    public float getMinU()
    041    {
    042        return this.flipU ? this.baseIcon.getMaxU() : this.baseIcon.getMinU();
    043    }
    044
    045    /**
    046     * Returns the maximum U coordinate to use when rendering with this icon.
    047     */
    048    public float getMaxU()
    049    {
    050        return this.flipU ? this.baseIcon.getMinU() : this.baseIcon.getMaxU();
    051    }
    052
    053    /**
    054     * Gets a U coordinate on the icon. 0 returns uMin and 16 returns uMax. Other arguments return in-between values.
    055     */
    056    public float getInterpolatedU(double par1)
    057    {
    058        float f = this.getMaxU() - this.getMinU();
    059        return this.getMinU() + f * ((float)par1 / 16.0F);
    060    }
    061
    062    /**
    063     * Returns the minimum V coordinate to use when rendering with this icon.
    064     */
    065    public float getMinV()
    066    {
    067        return this.flipV ? this.baseIcon.getMinV() : this.baseIcon.getMinV();
    068    }
    069
    070    /**
    071     * Returns the maximum V coordinate to use when rendering with this icon.
    072     */
    073    public float getMaxV()
    074    {
    075        return this.flipV ? this.baseIcon.getMinV() : this.baseIcon.getMaxV();
    076    }
    077
    078    /**
    079     * Gets a V coordinate on the icon. 0 returns vMin and 16 returns vMax. Other arguments return in-between values.
    080     */
    081    public float getInterpolatedV(double par1)
    082    {
    083        float f = this.getMaxV() - this.getMinV();
    084        return this.getMinV() + f * ((float)par1 / 16.0F);
    085    }
    086
    087    public String getIconName()
    088    {
    089        return this.baseIcon.getIconName();
    090    }
    091
    092    /**
    093     * Returns the width of the texture sheet this icon is on, in pixels.
    094     */
    095    public int getSheetWidth()
    096    {
    097        return this.baseIcon.getSheetWidth();
    098    }
    099
    100    /**
    101     * Returns the height of the texture sheet this icon is on, in pixels.
    102     */
    103    public int getSheetHeight()
    104    {
    105        return this.baseIcon.getSheetHeight();
    106    }
    107}