#include "StdAfx.h"
#include "PythonApplication.h"

PyObject* sndPlaySound2D(PyObject* poSelf, PyObject* poArgs)
{
	char* szFileName;
	if (!PyTuple_GetString(poArgs, 0, &szFileName))
		return Py_BuildException();

	SoundEngine::Instance().PlaySound2D(szFileName);
	return Py_BuildNone();
}

PyObject* sndPlaySound3D(PyObject* poSelf, PyObject* poArgs)
{
	float fx;
	if (!PyTuple_GetFloat(poArgs, 0, &fx))
		return Py_BuildException();
	float fy;
	if (!PyTuple_GetFloat(poArgs, 1, &fy))
		return Py_BuildException();
	float fz;
	if (!PyTuple_GetFloat(poArgs, 2, &fz))
		return Py_BuildException();
	char* szFileName;
	if (!PyTuple_GetString(poArgs, 3, &szFileName))
		return Py_BuildException();

	SoundEngine::Instance().PlaySound3D(szFileName, fx, fy, fz);
	return Py_BuildNone();
}

PyObject* sndFadeInMusic(PyObject* poSelf, PyObject* poArgs)
{
	char* szFileName;
	if (!PyTuple_GetString(poArgs, 0, &szFileName))
		return Py_BuildException();

	SoundEngine::Instance().FadeInMusic(szFileName);
	return Py_BuildNone();
}

PyObject* sndFadeOutMusic(PyObject* poSelf, PyObject* poArgs)
{
	char* szFileName;
	if (!PyTuple_GetString(poArgs, 0, &szFileName))
		return Py_BuildException();

	SoundEngine::Instance().FadeOutMusic(szFileName);
	return Py_BuildNone();
}

PyObject* sndFadeOutAllMusic(PyObject* poSelf, PyObject* poArgs)
{
	SoundEngine::Instance().FadeOutAllMusic();
	return Py_BuildNone();
}

PyObject* sndFadeLimitOutMusic(PyObject* poSelf, PyObject* poArgs)
{
	char* szFileName;
	if (!PyTuple_GetString(poArgs, 0, &szFileName))
		return Py_BuildException();

	float fLimitVolume;
	if (!PyTuple_GetFloat(poArgs, 1, &fLimitVolume))
		return Py_BuildException();

	SoundEngine::Instance().FadeOutMusic(szFileName, fLimitVolume);
	return Py_BuildNone();
}

PyObject* sndStopAllSound(PyObject* poSelf, PyObject* poArgs)
{
	SoundEngine::Instance().StopAllSound3D();
	return Py_BuildNone();
}

PyObject* sndSetMasterVolume(PyObject* poSelf, PyObject* poArgs)
{
	float fVolume;
	if (!PyTuple_GetFloat(poArgs, 0, &fVolume))
		return Py_BuildException();

	SoundEngine::Instance().SetMasterVolume(fVolume);
	return Py_BuildNone();
}

PyObject* sndSetMusicVolume(PyObject* poSelf, PyObject* poArgs)
{
	float fVolume;
	if (!PyTuple_GetFloat(poArgs, 0, &fVolume))
		return Py_BuildException();

	SoundEngine::Instance().SetMusicVolume(fVolume);
	return Py_BuildNone();
}

PyObject* sndSetSoundVolumef(PyObject* poSelf, PyObject* poArgs)
{
	float fVolume;
	if (!PyTuple_GetFloat(poArgs, 0, &fVolume))
		return Py_BuildException();

	SoundEngine::Instance().SetSoundVolume(fVolume);
	return Py_BuildNone();
}

PyObject* sndSetSoundVolume(PyObject* poSelf, PyObject* poArgs)
{
	float volume;
	if (!PyTuple_GetFloat(poArgs, 0, &volume))
		return Py_BuildException();

	SoundEngine::Instance().SetSoundVolume(volume / 100.0f);
	return Py_BuildNone();
}

void initsnd()
{
	static PyMethodDef s_methods[] =
	{
		{ "PlaySound",				sndPlaySound2D,				METH_VARARGS },
		{ "PlaySound3D",			sndPlaySound3D,				METH_VARARGS },
		{ "FadeInMusic",			sndFadeInMusic,				METH_VARARGS },
		{ "FadeOutMusic",			sndFadeOutMusic,			METH_VARARGS },
		{ "FadeOutAllMusic",		sndFadeOutAllMusic,			METH_VARARGS },
		{ "FadeLimitOutMusic",		sndFadeLimitOutMusic,		METH_VARARGS },
		{ "StopAllSound",			sndStopAllSound,			METH_VARARGS },

		{ "SetMasterVolume",		sndSetMasterVolume,			METH_VARARGS },
		{ "SetMusicVolume",			sndSetMusicVolume,			METH_VARARGS },
		{ "SetSoundVolumef",		sndSetSoundVolumef,			METH_VARARGS },
		{ "SetSoundVolume",			sndSetSoundVolume,			METH_VARARGS },
		{ NULL,						NULL,						NULL },
	};

	Py_InitModule("snd", s_methods);
}
