001    package net.minecraft.src;
002    
003    import cpw.mods.fml.common.Side;
004    import cpw.mods.fml.common.asm.SideOnly;
005    import net.minecraft.client.Minecraft;
006    import org.lwjgl.opengl.GL11;
007    
008    @SideOnly(Side.CLIENT)
009    public class GuiSlider extends GuiButton
010    {
011        /** The value of this slider control. */
012        public float sliderValue = 1.0F;
013    
014        /** Is this slider control being dragged. */
015        public boolean dragging = false;
016    
017        /** Additional ID for this slider control. */
018        private EnumOptions idFloat = null;
019    
020        public GuiSlider(int par1, int par2, int par3, EnumOptions par4EnumOptions, String par5Str, float par6)
021        {
022            super(par1, par2, par3, 150, 20, par5Str);
023            this.idFloat = par4EnumOptions;
024            this.sliderValue = par6;
025        }
026    
027        /**
028         * Returns 0 if the button is disabled, 1 if the mouse is NOT hovering over this button and 2 if it IS hovering over
029         * this button.
030         */
031        protected int getHoverState(boolean par1)
032        {
033            return 0;
034        }
035    
036        /**
037         * Fired when the mouse button is dragged. Equivalent of MouseListener.mouseDragged(MouseEvent e).
038         */
039        protected void mouseDragged(Minecraft par1Minecraft, int par2, int par3)
040        {
041            if (this.drawButton)
042            {
043                if (this.dragging)
044                {
045                    this.sliderValue = (float)(par2 - (this.xPosition + 4)) / (float)(this.width - 8);
046    
047                    if (this.sliderValue < 0.0F)
048                    {
049                        this.sliderValue = 0.0F;
050                    }
051    
052                    if (this.sliderValue > 1.0F)
053                    {
054                        this.sliderValue = 1.0F;
055                    }
056    
057                    par1Minecraft.gameSettings.setOptionFloatValue(this.idFloat, this.sliderValue);
058                    this.displayString = par1Minecraft.gameSettings.getKeyBinding(this.idFloat);
059                }
060    
061                GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
062                this.drawTexturedModalRect(this.xPosition + (int)(this.sliderValue * (float)(this.width - 8)), this.yPosition, 0, 66, 4, 20);
063                this.drawTexturedModalRect(this.xPosition + (int)(this.sliderValue * (float)(this.width - 8)) + 4, this.yPosition, 196, 66, 4, 20);
064            }
065        }
066    
067        /**
068         * Returns true if the mouse has been pressed on this control. Equivalent of MouseListener.mousePressed(MouseEvent
069         * e).
070         */
071        public boolean mousePressed(Minecraft par1Minecraft, int par2, int par3)
072        {
073            if (super.mousePressed(par1Minecraft, par2, par3))
074            {
075                this.sliderValue = (float)(par2 - (this.xPosition + 4)) / (float)(this.width - 8);
076    
077                if (this.sliderValue < 0.0F)
078                {
079                    this.sliderValue = 0.0F;
080                }
081    
082                if (this.sliderValue > 1.0F)
083                {
084                    this.sliderValue = 1.0F;
085                }
086    
087                par1Minecraft.gameSettings.setOptionFloatValue(this.idFloat, this.sliderValue);
088                this.displayString = par1Minecraft.gameSettings.getKeyBinding(this.idFloat);
089                this.dragging = true;
090                return true;
091            }
092            else
093            {
094                return false;
095            }
096        }
097    
098        /**
099         * Fired when the mouse button is released. Equivalent of MouseListener.mouseReleased(MouseEvent e).
100         */
101        public void mouseReleased(int par1, int par2)
102        {
103            this.dragging = false;
104        }
105    }