Package cofh.lib.audio

Source Code of cofh.lib.audio.SoundTile

package cofh.lib.audio;

import net.minecraft.client.audio.ITickableSound;
import net.minecraft.util.ResourceLocation;

public class SoundTile extends SoundBase implements ITickableSound {

  ISoundSource source;
  boolean beginFadeOut;
  boolean donePlaying;
  int ticks = 0;
  int fadeIn = 50;
  int fadeOut = 50;
  float baseVolume = 1.0F;

  public SoundTile(ISoundSource source, String sound, float volume, float pitch, boolean repeat, int repeatDelay, double x, double y, double z) {

    this(source, sound, volume, pitch, repeat, repeatDelay, x, y, z, AttenuationType.LINEAR);
  }

  public SoundTile(ISoundSource source, String sound, float volume, float pitch, boolean repeat, int repeatDelay, double x, double y, double z,
      AttenuationType attenuation) {

    this(source, new ResourceLocation(sound), volume, pitch, repeat, repeatDelay, x, y, z, attenuation);
  }

  public SoundTile(ISoundSource source, ResourceLocation sound, float volume, float pitch, boolean repeat, int repeatDelay, double x, double y, double z) {

    this(source, sound, volume, pitch, repeat, repeatDelay, x, y, z, AttenuationType.LINEAR);
  }

  public SoundTile(ISoundSource source, ResourceLocation sound, float volume, float pitch, boolean repeat, int repeatDelay, double x, double y, double z,
      AttenuationType attenuation) {

    super(sound, volume, pitch, repeat, repeatDelay, x, y, z, attenuation);
    this.source = source;
    this.baseVolume = volume;
  }

  public SoundTile setFadeIn(int fadeIn) {

    this.fadeIn = Math.min(0, fadeIn);
    return this;
  }

  public SoundTile setFadeOut(int fadeOut) {

    this.fadeOut = Math.min(0, fadeOut);
    return this;
  }

  public float getFadeInMultiplier() {

    return ticks >= fadeIn ? 1 : (float) (ticks / (float) fadeIn);
  }

  public float getFadeOutMultiplier() {

    return ticks >= fadeOut ? 0 : (float) ((fadeOut - ticks) / (float) fadeOut);
  }

  /* ITickableSound */
  @Override
  public void update() {

    if (!beginFadeOut) {
      if (ticks < fadeIn) {
        ticks++;
      }
      if (!source.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;
  }

}
TOP

Related Classes of cofh.lib.audio.SoundTile

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.