package com.bitfire.uracer.game.debug; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.math.Matrix4; import com.badlogic.gdx.utils.Array; import com.bitfire.uracer.game.debug.DebugHelper.RenderFlags; import com.bitfire.uracer.game.debug.player.DebugMeter; import com.bitfire.uracer.game.logic.gametasks.sounds.effects.PlayerTensiveMusic; import com.bitfire.uracer.game.player.PlayerCar; import com.bitfire.uracer.resources.Art; import com.bitfire.uracer.utils.ColorUtils; import com.bitfire.uracer.utils.SpriteBatchUtils; public class DebugMusicVolumes extends DebugRenderable { private Array<DebugMeter> meters = new Array<DebugMeter>(); private PlayerTensiveMusic tensiveMusic; private Matrix4 idt = new Matrix4(); private float totalVolume; public DebugMusicVolumes (RenderFlags flag, PlayerTensiveMusic tensiveMusic) { super(flag); this.tensiveMusic = tensiveMusic; totalVolume = 0; for (int i = 0; i < PlayerTensiveMusic.NumTracks; i++) { DebugMeter m = new DebugMeter(64, Art.DebugFontHeight); m.setLimits(0, 1); m.setShowLabel(false); meters.add(m); } } @Override public void dispose () { for (DebugMeter m : meters) { m.dispose(); } } @Override public void player (PlayerCar player) { super.player(player); if (hasPlayer) { this.player = player; } } private boolean isActive () { return hasPlayer && tensiveMusic != null; } @Override public void tick () { if (isActive()) { // String dbg = ""; totalVolume = 0; float[] volumes = tensiveMusic.getVolumes(); for (int i = 0; i < tensiveMusic.getVolumes().length; i++) { float v = volumes[i]; meters.get(i).setValue(v); totalVolume += v; // dbg += "[" + ((i == tensiveMusic.getMusicIndex()) ? "*" : " ") + String.format("%02.1f", v) + "] "; } // Gdx.app.log("MusicVolumes", dbg); } } @Override public void renderBatch (SpriteBatch batch) { if (isActive() && meters.size > 0) { Matrix4 prev = batch.getTransformMatrix(); batch.setTransformMatrix(idt); batch.enableBlending(); float prevHeight = 0; int index = 0; int drawx = 275; int drawy = 0; int maxMusicIndex = tensiveMusic.getCurrentMusicIndexLimit(); SpriteBatchUtils.drawString(batch, "music tracks max=" + maxMusicIndex, drawx, drawy); SpriteBatchUtils.drawString(batch, "==================", drawx, drawy + Art.DebugFontHeight); String text; for (DebugMeter m : meters) { int x = drawx, y = drawy + Art.DebugFontHeight * 2; // offset by index y += index * (prevHeight + 1); // compute color float alpha = index > maxMusicIndex ? 0.5f : 1; Color c = ColorUtils.paletteRYG(1.5f - m.getValue() * 1.5f, alpha); { // render track number text = "T" + (index + 1); batch.setColor(1, 1, 1, alpha); SpriteBatchUtils.drawString(batch, text, x, y); batch.setColor(1, 1, 1, 1); // render meter after text int meter_x = x + (text.length() * Art.DebugFontWidth) + 2; m.color.set(c); m.setPosition(meter_x, y); m.render(batch); // render volume numerical value text = String.format("%.02f", m.getValue()); batch.setColor(1, 1, 1, alpha); SpriteBatchUtils.drawString(batch, text, meter_x + m.getWidth() + 2, y); batch.setColor(1, 1, 1, 1); } index++; prevHeight = m.getHeight(); } SpriteBatchUtils.drawString(batch, "total volume = " + String.format("%.02f", totalVolume), drawx, Art.DebugFontHeight * (meters.size + 3)); batch.setTransformMatrix(prev); batch.disableBlending(); } } @Override public void reset () { } }