Revision: 19628
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19628
Author:   ben2610
Date:     2009-04-09 22:40:12 +0200 (Thu, 09 Apr 2009)

Log Message:
-----------
BGE API cleanup: sound actuator.

Modified Paths:
--------------
    trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SoundActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SoundActuator.h
    trunk/blender/source/gameengine/PyDoc/KX_SoundActuator.py

Modified: trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp    2009-04-09 
20:33:39 UTC (rev 19627)
+++ trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp    2009-04-09 
20:40:12 UTC (rev 19628)
@@ -1147,7 +1147,14 @@
        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())
     {

Modified: trunk/blender/source/gameengine/Ketsji/KX_SoundActuator.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_SoundActuator.cpp 2009-04-09 
20:33:39 UTC (rev 19627)
+++ trunk/blender/source/gameengine/Ketsji/KX_SoundActuator.cpp 2009-04-09 
20:40:12 UTC (rev 19628)
@@ -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 @@
 
 
 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 @@
        {"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;
+}         
 
+KX_PYMETHODDEF_DOC_NOARGS(KX_SoundActuator, pauseSound,
+"pauseSound()\n"
+"\tPauses the sound.\n")
+{
+       if (m_soundObject)
+               // unfortunately, openal does not implement pause correctly, it 
is equivalent to a stop
+               m_soundObject->PauseSound();    
+       Py_RETURN_NONE;
+} 
 
-
-PyObject* KX_SoundActuator::PySetFilename(PyObject* self, PyObject* args, 
PyObject* kwds)
+KX_PYMETHODDEF_DOC_NOARGS(KX_SoundActuator, stopSound,
+"stopSound()\n"
+"\tStops the sound.\n")
 {
-       char *soundName = NULL;
-       // void *soundPointer = NULL; /*unused*/
-       
-       if (!PyArg_ParseTuple(args, "s", &soundName))
-               return NULL;
-
+       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 @@
                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);
 

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to