blob: 51b1b3c0b4020e5f1ba43c06d86d0feed41a221c [file] [log] [blame] [raw]
package mekanism.client.sound;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public abstract class PlayerSound extends MekSound implements IResettableSound
{
public EntityPlayer player;
boolean beginFadeOut;
boolean donePlaying = true;
int ticks = 0;
int fadeIn;
int fadeOut;
float baseVolume = 0.3F;
public PlayerSound(EntityPlayer p, ResourceLocation location)
{
super(location, 0.3F, 1, true, 0, (float)p.posX, (float)p.posY, (float)p.posZ, AttenuationType.LINEAR);
player = p;
}
@Override
public float getXPosF()
{
return (float)player.posX;
}
@Override
public float getYPosF()
{
return (float)player.posY;
}
@Override
public float getZPosF()
{
return (float)player.posZ;
}
public PlayerSound setFadeIn(int fade)
{
fadeIn = Math.max(0, fade);
return this;
}
public PlayerSound setFadeOut(int fade)
{
fadeOut = Math.max(0, fade);
return this;
}
public float getFadeInMultiplier()
{
return ticks >= fadeIn ? 1 : (ticks / (float)fadeIn);
}
public float getFadeOutMultiplier()
{
return ticks >= fadeOut ? 0 : ((fadeOut - ticks) / (float)fadeOut);
}
@Override
public void update()
{
if(!beginFadeOut)
{
if(ticks < fadeIn)
{
ticks++;
}
if(!shouldPlaySound())
{
beginFadeOut = true;
ticks = 0;
}
}
else {
ticks++;
}
float multiplier = beginFadeOut ? getFadeOutMultiplier() : getFadeInMultiplier();
volume = baseVolume * multiplier;
if(multiplier <= 0)
{
donePlaying = true;
}
}
@Override
public boolean isDonePlaying()
{
return donePlaying;
}
public abstract boolean shouldPlaySound();
@Override
public void reset()
{
donePlaying = false;
beginFadeOut = false;
volume = baseVolume;
ticks = 0;
}
}