package net.fourbytes.shadow.blocks;
import com.badlogic.gdx.audio.Music;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector2;
import net.fourbytes.shadow.Musics;
import net.fourbytes.shadow.Shadow;
import net.fourbytes.shadow.Sounds;
import net.fourbytes.shadow.systems.ITimeDaySystem;
import net.fourbytes.shadow.utils.Garbage;
public class BlockMusic extends BlockType {
public int slot;
public float radius;
public BlockMusic() {
this(0, 32f);
}
public BlockMusic(int slot, float radius) {
this.slot = slot;
this.radius = radius;
}
@Override
public void init() {
dynamic = false;
blending = false;
tickAlways = true;
tickInView = true;
solid = false;
passSunlight = true;
alpha = 0f;
}
@Override
public void tick(float delta) {
Music musicDay = Musics.playing.get(slot);
Music musicNight = Musics.playing.get(-slot);
Vector2 pos = Garbage.vec2s.getNext();
pos.set(this.pos);
pos.add(rec.width / 2f, rec.height / 2f);
Rectangle vp = Shadow.cam.camrec;
Vector2 origpos = Garbage.vec2s.getNext();
origpos.set(vp.x + vp.width/2f, vp.y + vp.height/2f);
if (Shadow.level != null && Shadow.level.player != null) {
origpos.set(Shadow.level.player.pos);
origpos.add(Shadow.level.player.rec.width/2f, Shadow.level.player.rec.height/2f);
}
float maxdistsq = radius * radius;
float distx = pos.x - origpos.x;
float disty = pos.y - origpos.y;
float distsq = distx * distx + disty * disty;
float vol = 0f;
if (distsq <= maxdistsq) {
vol = 0.5f * MathUtils.cos((float) Math.sqrt(distsq) * (MathUtils.PI / radius)) + 0.5f;
}
float volDay = 1f;
ITimeDaySystem time = layer.level.systems.get(ITimeDaySystem.class);
if (time != null && musicNight != null) {
volDay = 0.5f + 0.7f *
MathUtils.sin(time.getTimeNormalized() * 1.75f * MathUtils.PI + 1.5f * MathUtils.PI);
}
if (musicDay != null) {
musicDay.setVolume(vol * volDay);
}
if (musicNight != null) {
musicNight.setVolume(vol * (1f - volDay));
}
}
@Override
public void preRender() {
}
@Override
public void render() {
}
}