001package net.minecraft.entity.item;
002
003import cpw.mods.fml.relauncher.Side;
004import cpw.mods.fml.relauncher.SideOnly;
005import net.minecraft.client.audio.SoundManager;
006import net.minecraft.client.entity.EntityPlayerSP;
007import net.minecraft.server.gui.IUpdatePlayerListBox;
008import net.minecraft.util.MathHelper;
009
010@SideOnly(Side.CLIENT)
011public class SoundUpdaterMinecart implements IUpdatePlayerListBox
012{
013    private final SoundManager theSoundManager;
014
015    /** Minecart which sound is being updated. */
016    private final EntityMinecart theMinecart;
017
018    /** The player that is getting the minecart sound updates. */
019    private final EntityPlayerSP thePlayer;
020    private boolean playerSPRidingMinecart = false;
021    private boolean minecartIsDead = false;
022    private boolean minecartIsMoving = false;
023    private boolean silent = false;
024    private float minecartSoundPitch = 0.0F;
025    private float minecartMoveSoundVolume = 0.0F;
026    private float minecartRideSoundVolume = 0.0F;
027    private double minecartSpeed = 0.0D;
028
029    public SoundUpdaterMinecart(SoundManager par1SoundManager, EntityMinecart par2EntityMinecart, EntityPlayerSP par3EntityPlayerSP)
030    {
031        this.theSoundManager = par1SoundManager;
032        this.theMinecart = par2EntityMinecart;
033        this.thePlayer = par3EntityPlayerSP;
034    }
035
036    /**
037     * Updates the JList with a new model.
038     */
039    public void update()
040    {
041        boolean var1 = false;
042        boolean var2 = this.playerSPRidingMinecart;
043        boolean var3 = this.minecartIsDead;
044        boolean var4 = this.minecartIsMoving;
045        float var5 = this.minecartMoveSoundVolume;
046        float var6 = this.minecartSoundPitch;
047        float var7 = this.minecartRideSoundVolume;
048        double var8 = this.minecartSpeed;
049        this.playerSPRidingMinecart = this.thePlayer != null && this.theMinecart.riddenByEntity == this.thePlayer;
050        this.minecartIsDead = this.theMinecart.isDead;
051        this.minecartSpeed = (double)MathHelper.sqrt_double(this.theMinecart.motionX * this.theMinecart.motionX + this.theMinecart.motionZ * this.theMinecart.motionZ);
052        this.minecartIsMoving = this.minecartSpeed >= 0.01D;
053
054        if (var2 && !this.playerSPRidingMinecart)
055        {
056            this.theSoundManager.stopEntitySound(this.thePlayer);
057        }
058
059        if (this.minecartIsDead || !this.silent && this.minecartMoveSoundVolume == 0.0F && this.minecartRideSoundVolume == 0.0F)
060        {
061            if (!var3)
062            {
063                this.theSoundManager.stopEntitySound(this.theMinecart);
064
065                if (var2 || this.playerSPRidingMinecart)
066                {
067                    this.theSoundManager.stopEntitySound(this.thePlayer);
068                }
069            }
070
071            this.silent = true;
072
073            if (this.minecartIsDead)
074            {
075                return;
076            }
077        }
078
079        if (!this.theSoundManager.isEntitySoundPlaying(this.theMinecart) && this.minecartMoveSoundVolume > 0.0F)
080        {
081            this.theSoundManager.playEntitySound("minecart.base", this.theMinecart, this.minecartMoveSoundVolume, this.minecartSoundPitch, false);
082            this.silent = false;
083            var1 = true;
084        }
085
086        if (this.playerSPRidingMinecart && !this.theSoundManager.isEntitySoundPlaying(this.thePlayer) && this.minecartRideSoundVolume > 0.0F)
087        {
088            this.theSoundManager.playEntitySound("minecart.inside", this.thePlayer, this.minecartRideSoundVolume, 1.0F, true);
089            this.silent = false;
090            var1 = true;
091        }
092
093        if (this.minecartIsMoving)
094        {
095            if (this.minecartSoundPitch < 1.0F)
096            {
097                this.minecartSoundPitch += 0.0025F;
098            }
099
100            if (this.minecartSoundPitch > 1.0F)
101            {
102                this.minecartSoundPitch = 1.0F;
103            }
104
105            float var10 = MathHelper.clamp_float((float)this.minecartSpeed, 0.0F, 4.0F) / 4.0F;
106            this.minecartRideSoundVolume = 0.0F + var10 * 0.75F;
107            var10 = MathHelper.clamp_float(var10 * 2.0F, 0.0F, 1.0F);
108            this.minecartMoveSoundVolume = 0.0F + var10 * 0.7F;
109        }
110        else if (var4)
111        {
112            this.minecartMoveSoundVolume = 0.0F;
113            this.minecartSoundPitch = 0.0F;
114            this.minecartRideSoundVolume = 0.0F;
115        }
116
117        if (!this.silent)
118        {
119            if (this.minecartSoundPitch != var6)
120            {
121                this.theSoundManager.setEntitySoundPitch(this.theMinecart, this.minecartSoundPitch);
122            }
123
124            if (this.minecartMoveSoundVolume != var5)
125            {
126                this.theSoundManager.setEntitySoundVolume(this.theMinecart, this.minecartMoveSoundVolume);
127            }
128
129            if (this.minecartRideSoundVolume != var7)
130            {
131                this.theSoundManager.setEntitySoundVolume(this.thePlayer, this.minecartRideSoundVolume);
132            }
133        }
134
135        if (!var1 && (this.minecartMoveSoundVolume > 0.0F || this.minecartRideSoundVolume > 0.0F))
136        {
137            this.theSoundManager.updateSoundLocation(this.theMinecart);
138
139            if (this.playerSPRidingMinecart)
140            {
141                this.theSoundManager.updateSoundLocation(this.thePlayer, this.theMinecart);
142            }
143        }
144        else
145        {
146            if (this.theSoundManager.isEntitySoundPlaying(this.theMinecart))
147            {
148                this.theSoundManager.stopEntitySound(this.theMinecart);
149            }
150
151            if (this.theSoundManager.isEntitySoundPlaying(this.thePlayer))
152            {
153                this.theSoundManager.stopEntitySound(this.thePlayer);
154            }
155        }
156    }
157}