#region Using Statements
using System;
using System.Collections;
#endregion
namespace RealmForge.Audio{
/// <summary>
/// Manages audio for RealmForge. The audio sub-system of your choice can be used, OpenAL, DirectX, etc.
/// </summary>
public abstract class AudioManagerBase : IDisposable
{
/// <summary>
/// Provided so that users can override this class's constructor if necessary.
/// </summary>
protected AudioManagerBase()
{
}
#region Fields, Properties
//
// Flag to indicate if Dispose has been run.
private bool disposed = false;
/// <summary>
/// Controls the master volume for all audio.
/// </summary>
public abstract float MasterVolume{get; set;}
#endregion
#region IDisposable Members
/// <summary>
/// Property to determine if this object has already been disposed or not.
/// </summary>
/// <value>True or false, indicating whether or not this object has been disposed.</value>
protected bool Disposed
{
get
{
lock(this) // Assure thread safety
{
return disposed;
}
}
}
/// <summary>
/// Do NOT make Dispose virtual we dont want derived classes overriding this.
/// </summary>
public void Dispose()
{
lock(this) // Assure thread safety
{
if(disposed == false)
{
disposed = true; // Only do this once
Cleanup(); // Call unmanaged cleanup
// Take this object off of the finalization queue
// We dont want finalization to run a second
// (automatic) time when we go away.
GC.SuppressFinalize(this);
}
}
}
/// <summary>
/// Override this method to clean up any unmanaged resources that are allocated.
/// </summary>
protected virtual void Cleanup()
{
// Do cleanup of unmanaged objects here
}
/// <summary>
/// This destructor will run ONLY if Dispose() does NOT get called. Do NOT
/// provide destructors in derived classes it really messes things up!
/// </summary>
~AudioManagerBase()
{
Cleanup();
}
#endregion
}
}
|