diff options
-rw-r--r-- | source/gameengine/Ketsji/KX_PythonInit.cpp | 7 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_SoundActuator.cpp | 342 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_SoundActuator.h | 33 | ||||
-rw-r--r-- | source/gameengine/PyDoc/KX_SoundActuator.py | 53 |
4 files changed, 393 insertions, 42 deletions
diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp index e1afde5353a..8b8b62e9310 100644 --- a/source/gameengine/Ketsji/KX_PythonInit.cpp +++ b/source/gameengine/Ketsji/KX_PythonInit.cpp @@ -1147,6 +1147,13 @@ PyObject* initGameLogic(KX_KetsjiEngine *engine, KX_Scene* scene) // quick hack KX_MACRO_addTypesToDict(d, RAS_2DFILTER_INVERT, RAS_2DFilterManager::RAS_2DFILTER_INVERT); KX_MACRO_addTypesToDict(d, RAS_2DFILTER_CUSTOMFILTER, RAS_2DFilterManager::RAS_2DFILTER_CUSTOMFILTER); + KX_MACRO_addTypesToDict(d, KX_SOUNDACT_PLAYSTOP, KX_SoundActuator::KX_SOUNDACT_PLAYSTOP); + KX_MACRO_addTypesToDict(d, KX_SOUNDACT_PLAYEND, KX_SoundActuator::KX_SOUNDACT_PLAYEND); + KX_MACRO_addTypesToDict(d, KX_SOUNDACT_LOOPSTOP, KX_SoundActuator::KX_SOUNDACT_LOOPSTOP); + KX_MACRO_addTypesToDict(d, KX_SOUNDACT_LOOPEND, KX_SoundActuator:: KX_SOUNDACT_LOOPEND); + KX_MACRO_addTypesToDict(d, KX_SOUNDACT_LOOPBIDIRECTIONAL, KX_SoundActuator::KX_SOUNDACT_LOOPBIDIRECTIONAL); + KX_MACRO_addTypesToDict(d, KX_SOUNDACT_LOOPBIDIRECTIONAL_STOP, KX_SoundActuator::KX_SOUNDACT_LOOPBIDIRECTIONAL_STOP); + // Check for errors if (PyErr_Occurred()) diff --git a/source/gameengine/Ketsji/KX_SoundActuator.cpp b/source/gameengine/Ketsji/KX_SoundActuator.cpp index b8d660daa08..ecc3b574079 100644 --- a/source/gameengine/Ketsji/KX_SoundActuator.cpp +++ b/source/gameengine/Ketsji/KX_SoundActuator.cpp @@ -35,6 +35,7 @@ #include "KX_GameObject.h" #include "SND_SoundObject.h" #include "SND_Scene.h" // needed for replication +#include "KX_PyMath.h" // needed for PyObjectFrom() #include <iostream> #ifdef HAVE_CONFIG_H @@ -264,11 +265,9 @@ PyParentObject KX_SoundActuator::Parents[] = { PyMethodDef KX_SoundActuator::Methods[] = { + // Deprecated -----> {"setFilename", (PyCFunction) KX_SoundActuator::sPySetFilename, METH_VARARGS,NULL}, {"getFilename", (PyCFunction) KX_SoundActuator::sPyGetFilename, METH_VARARGS,NULL}, - {"startSound",(PyCFunction) KX_SoundActuator::sPyStartSound,METH_VARARGS,NULL}, - {"pauseSound",(PyCFunction) KX_SoundActuator::sPyPauseSound,METH_VARARGS,NULL}, - {"stopSound",(PyCFunction) KX_SoundActuator::sPyStopSound,METH_VARARGS,NULL}, {"setGain",(PyCFunction) KX_SoundActuator::sPySetGain,METH_VARARGS,NULL}, {"getGain",(PyCFunction) KX_SoundActuator::sPyGetGain,METH_VARARGS,NULL}, {"setPitch",(PyCFunction) KX_SoundActuator::sPySetPitch,METH_VARARGS,NULL}, @@ -282,40 +281,77 @@ PyMethodDef KX_SoundActuator::Methods[] = { {"setOrientation",(PyCFunction) KX_SoundActuator::sPySetOrientation,METH_VARARGS,NULL}, {"setType",(PyCFunction) KX_SoundActuator::sPySetType,METH_VARARGS,NULL}, {"getType",(PyCFunction) KX_SoundActuator::sPyGetType,METH_VARARGS,NULL}, + // <----- + + KX_PYMETHODTABLE_NOARGS(KX_SoundActuator, startSound), + KX_PYMETHODTABLE_NOARGS(KX_SoundActuator, pauseSound), + KX_PYMETHODTABLE_NOARGS(KX_SoundActuator, stopSound), {NULL,NULL,NULL,NULL} //Sentinel }; PyAttributeDef KX_SoundActuator::Attributes[] = { + KX_PYATTRIBUTE_RW_FUNCTION("filename", KX_SoundActuator, pyattr_get_filename, pyattr_set_filename), + KX_PYATTRIBUTE_RW_FUNCTION("volume", KX_SoundActuator, pyattr_get_gain, pyattr_set_gain), + KX_PYATTRIBUTE_RW_FUNCTION("pitch", KX_SoundActuator, pyattr_get_pitch, pyattr_set_pitch), + KX_PYATTRIBUTE_RW_FUNCTION("rollOffFactor", KX_SoundActuator, pyattr_get_rollOffFactor, pyattr_set_rollOffFactor), + KX_PYATTRIBUTE_RW_FUNCTION("looping", KX_SoundActuator, pyattr_get_looping, pyattr_set_looping), + KX_PYATTRIBUTE_RW_FUNCTION("position", KX_SoundActuator, pyattr_get_position, pyattr_set_position), + KX_PYATTRIBUTE_RW_FUNCTION("velocity", KX_SoundActuator, pyattr_get_velocity, pyattr_set_velocity), + KX_PYATTRIBUTE_RW_FUNCTION("orientation", KX_SoundActuator, pyattr_get_orientation, pyattr_set_orientation), + KX_PYATTRIBUTE_ENUM_RW("type",KX_SoundActuator::KX_SOUNDACT_NODEF+1,KX_SoundActuator::KX_SOUNDACT_MAX-1,false,KX_SoundActuator,m_type), { NULL } //Sentinel }; -PyObject* KX_SoundActuator::py_getattro(PyObject *attr) +/* Methods ----------------------------------------------------------------- */ +KX_PYMETHODDEF_DOC_NOARGS(KX_SoundActuator, startSound, +"startSound()\n" +"\tStarts the sound.\n") { - py_getattro_up(SCA_IActuator); -} - - + if (m_soundObject) + // This has no effect if the actuator is not active. + // To start the sound you must activate the actuator. + // This function is to restart the sound. + m_soundObject->StartSound(); + Py_RETURN_NONE; +} -PyObject* KX_SoundActuator::PySetFilename(PyObject* self, PyObject* args, PyObject* kwds) +KX_PYMETHODDEF_DOC_NOARGS(KX_SoundActuator, pauseSound, +"pauseSound()\n" +"\tPauses the sound.\n") { - char *soundName = NULL; - // void *soundPointer = NULL; /*unused*/ - - if (!PyArg_ParseTuple(args, "s", &soundName)) - return NULL; + if (m_soundObject) + // unfortunately, openal does not implement pause correctly, it is equivalent to a stop + m_soundObject->PauseSound(); + Py_RETURN_NONE; +} +KX_PYMETHODDEF_DOC_NOARGS(KX_SoundActuator, stopSound, +"stopSound()\n" +"\tStops the sound.\n") +{ + if (m_soundObject) + m_soundObject->StopSound(); Py_RETURN_NONE; } +/* Atribute setting and getting -------------------------------------------- */ +PyObject* KX_SoundActuator::py_getattro(PyObject *attr) +{ + py_getattro_up(SCA_IActuator); +} +int KX_SoundActuator::py_setattro(PyObject *attr, PyObject* value) { + py_setattro_up(SCA_IActuator); +} -PyObject* KX_SoundActuator::PyGetFilename(PyObject* self, PyObject* args, PyObject* kwds) +PyObject* KX_SoundActuator::pyattr_get_filename(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef) { - if (!m_soundObject) + KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self); + if (!actuator->m_soundObject) { return PyString_FromString(""); } - STR_String objectname = m_soundObject->GetObjectName(); + STR_String objectname = actuator->m_soundObject->GetObjectName(); char* name = objectname.Ptr(); if (!name) { @@ -325,41 +361,264 @@ PyObject* KX_SoundActuator::PyGetFilename(PyObject* self, PyObject* args, PyObje return PyString_FromString(name); } +PyObject* KX_SoundActuator::pyattr_get_gain(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef) +{ + KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self); + float gain = (actuator->m_soundObject) ? actuator->m_soundObject->GetGain() : 1.0f; + PyObject* result = PyFloat_FromDouble(gain); + + return result; +} -PyObject* KX_SoundActuator::PyStartSound(PyObject* self, PyObject* args, PyObject* kwds) +PyObject* KX_SoundActuator::pyattr_get_pitch(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef) { - if (m_soundObject) - // This has no effect if the actuator is not active. - // To start the sound you must activate the actuator. - // This function is to restart the sound. - m_soundObject->StartSound(); - Py_RETURN_NONE; + KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self); + float pitch = (actuator->m_soundObject) ? actuator->m_soundObject->GetPitch() : 1.0; + PyObject* result = PyFloat_FromDouble(pitch); + + return result; +} + +PyObject* KX_SoundActuator::pyattr_get_rollOffFactor(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef) +{ + KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self); + float rollofffactor = (actuator->m_soundObject) ? actuator->m_soundObject->GetRollOffFactor() : 1.0; + PyObject* result = PyFloat_FromDouble(rollofffactor); + + return result; +} + +PyObject* KX_SoundActuator::pyattr_get_looping(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef) +{ + KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self); + int looping = (actuator->m_soundObject) ? actuator->m_soundObject->GetLoopMode() : (int)SND_LOOP_OFF; + PyObject* result = PyInt_FromLong(looping); + + return result; +} + +PyObject* KX_SoundActuator::pyattr_get_position(void * self, const struct KX_PYATTRIBUTE_DEF *attrdef) +{ + KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self); + MT_Vector3 pos(0.0, 0.0, 0.0); + + if (actuator->m_soundObject) + pos = actuator->m_soundObject->GetPosition(); + + PyObject * result = PyObjectFrom(pos); + return result; +} + +PyObject* KX_SoundActuator::pyattr_get_velocity(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef) +{ + KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self); + MT_Vector3 vel; + + if (actuator->m_soundObject) + vel = actuator->m_soundObject->GetVelocity(); + + PyObject * result = PyObjectFrom(vel); + return result; +} + +PyObject* KX_SoundActuator::pyattr_get_orientation(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef) +{ + KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self); + MT_Matrix3x3 ori; + + if (actuator->m_soundObject) + ori = actuator->m_soundObject->GetOrientation(); + + PyObject * result = PyObjectFrom(ori); + return result; +} + +int KX_SoundActuator::pyattr_set_filename(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) +{ + char *soundName = NULL; + KX_SoundActuator * actuator = static_cast<KX_SoundActuator*> (self); + // void *soundPointer = NULL; /*unused*/ + + if (!PyArg_Parse(value, "s", &soundName)) + return 1; + + if (actuator->m_soundObject) { + actuator->m_soundObject->SetObjectName(soundName); + } + + return 0; +} + + +int KX_SoundActuator::pyattr_set_gain(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) +{ + float gain = 1.0; + KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self); + if (!PyArg_Parse(value, "f", &gain)) + return 1; + + if (actuator->m_soundObject) + actuator->m_soundObject->SetGain(gain); + + return 0; } +int KX_SoundActuator::pyattr_set_pitch(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) +{ + float pitch = 1.0; + KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self); + if (!PyArg_Parse(value, "f", &pitch)) + return 1; + + if (actuator->m_soundObject) + actuator->m_soundObject->SetPitch(pitch); + + return 0; +} + +int KX_SoundActuator::pyattr_set_rollOffFactor(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) +{ + KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self); + float rollofffactor = 1.0; + if (!PyArg_Parse(value, "f", &rollofffactor)) + return 1; + + if (actuator->m_soundObject) + actuator->m_soundObject->SetRollOffFactor(rollofffactor); + return 0; +} -PyObject* KX_SoundActuator::PyPauseSound(PyObject* self, PyObject* args, PyObject* kwds) +int KX_SoundActuator::pyattr_set_looping(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) { - if (m_soundObject) - // unfortunately, openal does not implement pause correctly, it is equivalent to a stop - m_soundObject->PauseSound(); - Py_RETURN_NONE; -} + KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self); + int looping = 1; + if (!PyArg_Parse(value, "i", &looping)) + return 1; + + if (actuator->m_soundObject) + actuator->m_soundObject->SetLoopMode(looping); + + return 0; +} +int KX_SoundActuator::pyattr_set_position(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) +{ + float pos[3]; + KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self); -PyObject* KX_SoundActuator::PyStopSound(PyObject* self, PyObject* args, PyObject* kwds) + if (!PyArg_ParseTuple(value, "fff", &pos[0], &pos[1], &pos[2])) + return 1; + + if (actuator->m_soundObject) + actuator->m_soundObject->SetPosition(MT_Vector3(pos)); + + return 0; +} + +int KX_SoundActuator::pyattr_set_velocity(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) { - if (m_soundObject) - m_soundObject->StopSound(); - Py_RETURN_NONE; + float vel[3]; + KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self); + + + if (!PyArg_ParseTuple(value, "fff", &vel[0], &vel[1], &vel[2])) + return 1; + + if (actuator->m_soundObject) + actuator->m_soundObject->SetVelocity(MT_Vector3(vel)); + + return 0; + +} + +int KX_SoundActuator::pyattr_set_orientation(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) +{ + + MT_Matrix3x3 rot; + KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self); + + if (!PySequence_Check(value)) { + PyErr_SetString(PyExc_AttributeError, "'orientation' attribute needs to be a sequence"); + return 1; + } + + if (!actuator->m_soundObject) + return 0; /* Since not having m_soundObject didn't do anything in the old version, + * it probably should be kept that way */ + + if (PyMatTo(value, rot)) + { + actuator->m_soundObject->SetOrientation(rot); + return 0; + } + PyErr_Clear(); + + + if (PySequence_Size(value) == 4) + { + MT_Quaternion qrot; + if (PyVecTo(value, qrot)) + { + rot.setRotation(qrot); + actuator->m_soundObject->SetOrientation(rot); + return 0; + } + return 1; + } + + if (PySequence_Size(value) == 3) + { + MT_Vector3 erot; + if (PyVecTo(value, erot)) + { + rot.setEuler(erot); + actuator->m_soundObject->SetOrientation(rot); + return 0; + } + return 1; + } + + PyErr_SetString(PyExc_AttributeError, "could not set the orientation from a 3x3 matrix, quaternion or euler sequence"); + return 1; + } +// Deprecated -----> +PyObject* KX_SoundActuator::PySetFilename(PyObject* self, PyObject* args, PyObject* kwds) +{ + char *soundName = NULL; + ShowDeprecationWarning("setFilename()", "the filename property"); + // void *soundPointer = NULL; /*unused*/ + + if (!PyArg_ParseTuple(args, "s", &soundName)) + return NULL; + + Py_RETURN_NONE; +} +PyObject* KX_SoundActuator::PyGetFilename(PyObject* self, PyObject* args, PyObject* kwds) +{ + ShowDeprecationWarning("getFilename()", "the filename property"); + if (!m_soundObject) + { + return PyString_FromString(""); + } + STR_String objectname = m_soundObject->GetObjectName(); + char* name = objectname.Ptr(); + + if (!name) { + PyErr_SetString(PyExc_RuntimeError, "Unable to get sound filename"); + return NULL; + } else + return PyString_FromString(name); +} PyObject* KX_SoundActuator::PySetGain(PyObject* self, PyObject* args, PyObject* kwds) { + ShowDeprecationWarning("setGain()", "the volume property"); float gain = 1.0; if (!PyArg_ParseTuple(args, "f", &gain)) return NULL; @@ -374,6 +633,7 @@ PyObject* KX_SoundActuator::PySetGain(PyObject* self, PyObject* args, PyObject* PyObject* KX_SoundActuator::PyGetGain(PyObject* self, PyObject* args, PyObject* kwds) { + ShowDeprecationWarning("getGain()", "the volume property"); float gain = (m_soundObject) ? m_soundObject->GetGain() : 1.0f; PyObject* result = PyFloat_FromDouble(gain); @@ -384,6 +644,7 @@ PyObject* KX_SoundActuator::PyGetGain(PyObject* self, PyObject* args, PyObject* PyObject* KX_SoundActuator::PySetPitch(PyObject* self, PyObject* args, PyObject* kwds) { + ShowDeprecationWarning("setPitch()", "the pitch property"); float pitch = 1.0; if (!PyArg_ParseTuple(args, "f", &pitch)) return NULL; @@ -398,6 +659,7 @@ PyObject* KX_SoundActuator::PySetPitch(PyObject* self, PyObject* args, PyObject* PyObject* KX_SoundActuator::PyGetPitch(PyObject* self, PyObject* args, PyObject* kwds) { + ShowDeprecationWarning("getPitch()", "the pitch property"); float pitch = (m_soundObject) ? m_soundObject->GetPitch() : 1.0; PyObject* result = PyFloat_FromDouble(pitch); @@ -408,6 +670,7 @@ PyObject* KX_SoundActuator::PyGetPitch(PyObject* self, PyObject* args, PyObject* PyObject* KX_SoundActuator::PySetRollOffFactor(PyObject* self, PyObject* args, PyObject* kwds) { + ShowDeprecationWarning("setRollOffFactor()", "the rollOffFactor property"); float rollofffactor = 1.0; if (!PyArg_ParseTuple(args, "f", &rollofffactor)) return NULL; @@ -422,6 +685,7 @@ PyObject* KX_SoundActuator::PySetRollOffFactor(PyObject* self, PyObject* args, P PyObject* KX_SoundActuator::PyGetRollOffFactor(PyObject* self, PyObject* args, PyObject* kwds) { + ShowDeprecationWarning("getRollOffFactor()", "the rollOffFactor property"); float rollofffactor = (m_soundObject) ? m_soundObject->GetRollOffFactor() : 1.0; PyObject* result = PyFloat_FromDouble(rollofffactor); @@ -432,6 +696,7 @@ PyObject* KX_SoundActuator::PyGetRollOffFactor(PyObject* self, PyObject* args, P PyObject* KX_SoundActuator::PySetLooping(PyObject* self, PyObject* args, PyObject* kwds) { + ShowDeprecationWarning("setLooping()", "the looping property"); bool looping = 1; if (!PyArg_ParseTuple(args, "i", &looping)) return NULL; @@ -446,6 +711,7 @@ PyObject* KX_SoundActuator::PySetLooping(PyObject* self, PyObject* args, PyObjec PyObject* KX_SoundActuator::PyGetLooping(PyObject* self, PyObject* args, PyObject* kwds) { + ShowDeprecationWarning("getLooping()", "the looping property"); int looping = (m_soundObject) ? m_soundObject->GetLoopMode() : (int)SND_LOOP_OFF; PyObject* result = PyInt_FromLong(looping); @@ -457,6 +723,7 @@ PyObject* KX_SoundActuator::PyGetLooping(PyObject* self, PyObject* args, PyObjec PyObject* KX_SoundActuator::PySetPosition(PyObject* self, PyObject* args, PyObject* kwds) { MT_Point3 pos; + ShowDeprecationWarning("setPosition()", "the position property"); pos[0] = 0.0; pos[1] = 0.0; pos[2] = 0.0; @@ -475,6 +742,7 @@ PyObject* KX_SoundActuator::PySetPosition(PyObject* self, PyObject* args, PyObje PyObject* KX_SoundActuator::PySetVelocity(PyObject* self, PyObject* args, PyObject* kwds) { MT_Vector3 vel; + ShowDeprecationWarning("setVelocity()", "the velocity property"); vel[0] = 0.0; vel[1] = 0.0; vel[2] = 0.0; @@ -493,6 +761,7 @@ PyObject* KX_SoundActuator::PySetVelocity(PyObject* self, PyObject* args, PyObje PyObject* KX_SoundActuator::PySetOrientation(PyObject* self, PyObject* args, PyObject* kwds) { MT_Matrix3x3 ori; + ShowDeprecationWarning("setOrientation()", "the orientation property"); ori[0][0] = 1.0; ori[0][1] = 0.0; ori[0][2] = 0.0; @@ -515,6 +784,7 @@ PyObject* KX_SoundActuator::PySetOrientation(PyObject* self, PyObject* args, PyO PyObject* KX_SoundActuator::PySetType(PyObject* self, PyObject* args, PyObject* kwds) { int typeArg; + ShowDeprecationWarning("setType()", "the type property"); if (!PyArg_ParseTuple(args, "i", &typeArg)) { return NULL; @@ -530,8 +800,8 @@ PyObject* KX_SoundActuator::PySetType(PyObject* self, PyObject* args, PyObject* PyObject* KX_SoundActuator::PyGetType(PyObject* self, PyObject* args, PyObject* kwds) { + ShowDeprecationWarning("getType()", "the type property"); return PyInt_FromLong(m_type); } - - +// <----- diff --git a/source/gameengine/Ketsji/KX_SoundActuator.h b/source/gameengine/Ketsji/KX_SoundActuator.h index 3e4a4168434..eb18ba9f13e 100644 --- a/source/gameengine/Ketsji/KX_SoundActuator.h +++ b/source/gameengine/Ketsji/KX_SoundActuator.h @@ -80,13 +80,36 @@ public: /* Python interface --------------------------------------------------- */ /* -------------------------------------------------------------------- */ - virtual PyObject* py_getattro(PyObject *attr); + virtual PyObject* py_getattro(PyObject *attr); + virtual int py_setattro(PyObject *attr, PyObject* value); + KX_PYMETHOD_DOC_NOARGS(KX_SoundActuator, startSound); + KX_PYMETHOD_DOC_NOARGS(KX_SoundActuator, pauseSound); + KX_PYMETHOD_DOC_NOARGS(KX_SoundActuator, stopSound); + + static int pyattr_set_filename(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); + static int pyattr_set_gain(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); + static int pyattr_set_pitch(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); + static int pyattr_set_rollOffFactor(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); + static int pyattr_set_looping(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); + static int pyattr_set_position(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); + static int pyattr_set_velocity(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); + static int pyattr_set_orientation(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); + static int pyattr_set_type(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); + + static PyObject* pyattr_get_filename(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); + static PyObject* pyattr_get_gain(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); + static PyObject* pyattr_get_pitch(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); + static PyObject* pyattr_get_looping(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); + static PyObject* pyattr_get_rollOffFactor(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); + static PyObject* pyattr_get_position(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); + static PyObject* pyattr_get_velocity(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); + static PyObject* pyattr_get_orientation(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); + static PyObject* pyattr_get_type(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); + + // Deprecated -----> KX_PYMETHOD(KX_SoundActuator,SetFilename); KX_PYMETHOD(KX_SoundActuator,GetFilename); - KX_PYMETHOD(KX_SoundActuator,StartSound); - KX_PYMETHOD(KX_SoundActuator,PauseSound); - KX_PYMETHOD(KX_SoundActuator,StopSound); KX_PYMETHOD(KX_SoundActuator,SetGain); KX_PYMETHOD(KX_SoundActuator,GetGain); KX_PYMETHOD(KX_SoundActuator,SetPitch); @@ -100,6 +123,8 @@ public: KX_PYMETHOD(KX_SoundActuator,SetOrientation); KX_PYMETHOD(KX_SoundActuator,SetType); KX_PYMETHOD(KX_SoundActuator,GetType); + // <----- + }; #endif //__KX_SOUNDACTUATOR diff --git a/source/gameengine/PyDoc/KX_SoundActuator.py b/source/gameengine/PyDoc/KX_SoundActuator.py index 072af5b816c..383b45e6eb9 100644 --- a/source/gameengine/PyDoc/KX_SoundActuator.py +++ b/source/gameengine/PyDoc/KX_SoundActuator.py @@ -8,17 +8,53 @@ class KX_SoundActuator(SCA_IActuator): The L{startSound()}, L{pauseSound()} and L{stopSound()} do not require the actuator to be activated - they act instantly. + + @ivar filename: Sets the filename of the sound this actuator plays. + @type filename: string + + @ivar volume: Sets the volume (gain) of the sound. + @type volume: float + + @ivar pitch: Sets the pitch of the sound. + @type pitch: float + + @ivar rollOffFactor: Sets the roll off factor. Rolloff defines the rate of attenuation as the sound gets further away. + @type rollOffFactor: float + + @ivar looping: Sets the loop mode of the actuator. + @type looping: integer + + @ivar position: Sets the position of the sound. + @type position: float array + + @ivar velocity: Sets the speed of the sound; The speed of the sound alter the pitch. + @type velocity: float array + + @ivar orientation: Sets the orientation of the sound. When setting the orientation you can + also use quaternion [float,float,float,float] or euler angles [float,float,float] + @type orientation: 3x3 matrix [[float]] + + @ivar type: Sets the operation mode of the actuator. You can use one of the following constant: + KX_SOUNDACT_PLAYSTOP (1) + KX_SOUNDACT_PLAYEND (2) + KX_SOUNDACT_LOOPSTOP (3) + KX_SOUNDACT_LOOPEND (4) + KX_SOUNDACT_LOOPBIDIRECTIONAL (5) + KX_SOUNDACT_LOOPBIDIRECTIONAL_STOP (6) + @type type: integer - @group Play Methods: startSound, pauseSound, stopSound + @group Play Methods: startSound, pauseSound, stopSound. """ def setFilename(filename): """ - Sets the filename of the sound this actuator plays. + DEPRECATED: Use the filename property instead. + Sets the filename of the sound this actuator plays. @type filename: string """ def getFilename(): """ + DEPRECATED: Use the filename property instead. Returns the filename of the sound this actuator plays. @rtype: string @@ -37,6 +73,7 @@ class KX_SoundActuator(SCA_IActuator): """ def setGain(gain): """ + DEPRECATED: Use the volume property instead Sets the gain (volume) of the sound @type gain: float @@ -44,24 +81,28 @@ class KX_SoundActuator(SCA_IActuator): """ def getGain(): """ + DEPRECATED: Use the volume property instead. Gets the gain (volume) of the sound. @rtype: float """ def setPitch(pitch): """ + DEPRECATED: Use the pitch property instead. Sets the pitch of the sound. @type pitch: float """ def getPitch(): """ + DEPRECATED: Use the pitch property instead. Returns the pitch of the sound. @rtype: float """ def setRollOffFactor(rolloff): """ + DEPRECATED: Use the rollOffFactor property instead. Sets the rolloff factor for the sounds. Rolloff defines the rate of attenuation as the sound gets further away. @@ -71,12 +112,14 @@ class KX_SoundActuator(SCA_IActuator): """ def getRollOffFactor(): """ + DEPRECATED: Use the rollOffFactor property instead. Returns the rolloff factor for the sound. @rtype: float """ def setLooping(loop): """ + DEPRECATED: Use the looping property instead. Sets the loop mode of the actuator. @bug: There are no constants defined for this method! @@ -90,12 +133,14 @@ class KX_SoundActuator(SCA_IActuator): """ def getLooping(): """ + DEPRECATED: Use the looping property instead. Returns the current loop mode of the actuator. @rtype: integer """ def setPosition(x, y, z): """ + DEPRECATED: Use the position property instead. Sets the position this sound will come from. @type x: float @@ -107,6 +152,7 @@ class KX_SoundActuator(SCA_IActuator): """ def setVelocity(vx, vy, vz): """ + DEPRECATED: Use the velocity property instead. Sets the velocity this sound is moving at. The sound's pitch is determined from the velocity. @@ -120,6 +166,7 @@ class KX_SoundActuator(SCA_IActuator): """ def setOrientation(o11, o12, o13, o21, o22, o23, o31, o32, o33): """ + DEPRECATED: Use the orientation property instead. Sets the orientation of the sound. The nine parameters specify a rotation matrix:: @@ -130,6 +177,7 @@ class KX_SoundActuator(SCA_IActuator): def setType(mode): """ + DEPRECATED: Use the type property instead. Sets the operation mode of the actuator. @param mode: KX_SOUNDACT_PLAYSTOP, KX_SOUNDACT_PLAYEND, KX_SOUNDACT_LOOPSTOP, KX_SOUNDACT_LOOPEND, KX_SOUNDACT_LOOPBIDIRECTIONAL, KX_SOUNDACT_LOOPBIDIRECTIONAL_STOP @@ -138,6 +186,7 @@ class KX_SoundActuator(SCA_IActuator): def getType(): """ + DEPRECATED: Use the type property instead. Returns the operation mode of the actuator. @rtype: integer |