// Copyright (c) 2008-2010 Raynaldo (Wildicv) Rivera, Joshua (Dark_Kilauea) Jones
// This file is part of the "cAudio Engine"
// For conditions of distribution and use, see copyright notice in cAudio.h

#ifndef CLISTENER_H_INCLUDED
#define CLISTENER_H_INCLUDED

#include "../include/IListener.h"
#include "../Headers/cMutex.h"

namespace cAudio
{
	class cListener : public IListener
    {
    public:
		cListener() :	Direction(cVector3(0.f, 0.f, -1.f)),
						UpVector(cVector3(0.f, 1.f, 0.f)),
						MasterGain(1.f) {}
		virtual ~cListener() {}

		virtual void setPosition(const cVector3& pos);
		virtual void setDirection(const cVector3& dir);
		virtual void setUpVector(const cVector3& up);
		virtual void setVelocity(const cVector3& vel);
		virtual void setMasterVolume(const float& volume);
		virtual void move(const cVector3& pos);

		virtual cVector3 getPosition(void) const { return Position; }
		virtual cVector3 getDirection(void) const { return Direction; }
		virtual cVector3 getUpVector(void) const { return UpVector; }
		virtual cVector3 getVelocity(void) const { return Velocity; }
		virtual float getMasterVolume(void) const { return MasterGain; }

#ifdef CAUDIO_EFX_ENABLED
		virtual void setMetersPerUnit(const float& meters);
		virtual float getMetersPerUnit(void) const;
#endif

	protected:
		cAudioMutex Mutex;

		cVector3 Position;
		cVector3 Direction;
		cVector3 UpVector;
		cVector3 Velocity;
		float MasterGain;
	private:
    };
}
#endif //! CLISTENER_H_INCLUDED
