diff --git a/RhythmBullet/Audio/Visualizer/ReflectedHorizontalVisualizer.cs b/RhythmBullet/Audio/Visualizer/ReflectedHorizontalVisualizer.cs index 87c5e59..d084ccc 100644 --- a/RhythmBullet/Audio/Visualizer/ReflectedHorizontalVisualizer.cs +++ b/RhythmBullet/Audio/Visualizer/ReflectedHorizontalVisualizer.cs @@ -5,10 +5,12 @@ using RecrownedAthenaeum.Render; using RecrownedAthenaeum.UI.Modular; using System; -namespace RecrownedAthenaeum.Audio.Visualizer +namespace RhythmBullet.Audio.Visualizer { - internal class HorizontalVisualizer : UIModule + internal class HorizontalVisualizer : UIModule, IDisposable { + bool disposed; + private PrimitiveBatch primitiveBatch; private RectangleRenderer renderer; private const int BAR_COUNT = 70; private const int SMOOTH_RANGE = 3; @@ -27,12 +29,13 @@ namespace RecrownedAthenaeum.Audio.Visualizer binsPerBar = tsp.GetCurrentSpectrum().Length / BAR_COUNT; barValue = new int[BAR_COUNT]; - - renderer = new RectangleRenderer(graphicsDevice, camera2D); + primitiveBatch = new PrimitiveBatch(camera2D); + renderer = new RectangleRenderer(primitiveBatch); } public override void Update(GameTime gameTime) { + if (disposed) throw new ObjectDisposedException(this.Name); UpdateBars((float)gameTime.ElapsedGameTime.TotalSeconds); AverageBars(); base.Update(gameTime); @@ -40,6 +43,7 @@ namespace RecrownedAthenaeum.Audio.Visualizer public override void Draw(SpriteBatch batch) { + if (disposed) throw new ObjectDisposedException(this.Name); for (int i = 0; i < BAR_COUNT; i++) { bar.X = (i * (bar.Width + spaceBetweenBars)) + bounds.X; @@ -98,9 +102,24 @@ namespace RecrownedAthenaeum.Audio.Visualizer } } + public void Dispose() + { + if (disposed) throw new ObjectDisposedException(this.Name); + Dispose(true); + } + + public virtual void Dispose(bool disposing) + { + if (disposing && !disposed) + { + primitiveBatch.Dispose(); + } + disposed = true; + } + ~HorizontalVisualizer() { - renderer.Dispose(); + Dispose(false); } } }