[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19628] trunk/blender/source/gameengine: BGE API cleanup: sound actuator.

Benoit Bolsee benoit.bolsee at online.be
Thu Apr 9 22:40:12 CEST 2009


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. @@




More information about the Bf-blender-cvs mailing list