[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19603] trunk/blender/source/gameengine: BGE patch #18350: Add sendMessage() to GameLogic.

Benoit Bolsee benoit.bolsee at online.be
Wed Apr 8 18:57:08 CEST 2009


Revision: 19603
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19603
Author:   ben2610
Date:     2009-04-08 18:57:08 +0200 (Wed, 08 Apr 2009)

Log Message:
-----------
BGE patch #18350: Add sendMessage() to GameLogic. Added sendMessage to both GameLogic and KX_GameObject.

Modified Paths:
--------------
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
    trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
    trunk/blender/source/gameengine/Network/NG_NetworkScene.h
    trunk/blender/source/gameengine/PyDoc/GameLogic.py
    trunk/blender/source/gameengine/PyDoc/KX_GameObject.py

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp	2009-04-08 16:51:35 UTC (rev 19602)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp	2009-04-08 16:57:08 UTC (rev 19603)
@@ -66,6 +66,7 @@
 #include "SCA_IActuator.h"
 #include "SCA_ISensor.h"
 #include "SCA_IController.h"
+#include "NG_NetworkScene.h" //Needed for sendMessage()
 
 #include "PyObjectPlus.h" /* python stuff */
 
@@ -1039,7 +1040,8 @@
 	KX_PYMETHODTABLE(KX_GameObject, rayCast),
 	KX_PYMETHODTABLE_O(KX_GameObject, getDistanceTo),
 	KX_PYMETHODTABLE_O(KX_GameObject, getVectTo),
-	
+	KX_PYMETHODTABLE(KX_GameObject, sendMessage),
+
 	// deprecated
 	{"getPosition", (PyCFunction) KX_GameObject::sPyGetPosition, METH_NOARGS},
 	{"setPosition", (PyCFunction) KX_GameObject::sPySetPosition, METH_O},
@@ -2335,6 +2337,26 @@
 		return Py_BuildValue("OOO", Py_None, Py_None, Py_None);
 }
 
+KX_PYMETHODDEF_DOC_VARARGS(KX_GameObject, sendMessage, 
+						   "sendMessage(subject, [body, to])\n"
+"sends a message in same manner as a message actuator"
+"subject = Subject of the message (string)"
+"body = Message body (string)"
+"to = Name of object to send the message to")
+{
+	char* subject;
+	char* body = "";
+	char* to = "";
+	const STR_String& from = GetName();
+
+	if (!PyArg_ParseTuple(args, "s|sss", &subject, &body, &to))
+		return NULL;
+
+	KX_GetActiveScene()->GetNetworkScene()->SendMessage(to, from, subject, body);
+
+	Py_RETURN_NONE;
+}
+
 /* --------------------------------------------------------------------- 
  * Some stuff taken from the header
  * --------------------------------------------------------------------- */

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.h	2009-04-08 16:51:35 UTC (rev 19602)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.h	2009-04-08 16:57:08 UTC (rev 19603)
@@ -815,7 +815,7 @@
 	KX_PYMETHOD_DOC(KX_GameObject,rayCast);
 	KX_PYMETHOD_DOC_O(KX_GameObject,getDistanceTo);
 	KX_PYMETHOD_DOC_O(KX_GameObject,getVectTo);
-
+	KX_PYMETHOD_DOC_VARARGS(KX_GameObject, sendMessage);
 	/* attributes */
 	static PyObject*	pyattr_get_name(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
 	static PyObject*	pyattr_get_parent(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);

Modified: trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp	2009-04-08 16:51:35 UTC (rev 19602)
+++ trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp	2009-04-08 16:57:08 UTC (rev 19603)
@@ -67,6 +67,8 @@
 #include "KX_Scene.h"
 #include "SND_DeviceManager.h"
 
+#include "NG_NetworkScene.h" //Needed for sendMessage()
+
 #include "BL_Shader.h"
 
 #include "KX_PyMath.h"
@@ -167,7 +169,29 @@
 	return PyString_FromString(expanded);
 }
 
+static char gPySendMessage_doc[] = 
+"sendMessage(subject, [body, to, from])\n\
+sends a message in same manner as a message actuator\
+subject = Subject of the message\
+body = Message body\
+to = Name of object to send the message to\
+from = Name of object to sned the string from";
 
+static PyObject* gPySendMessage(PyObject*, PyObject* args)
+{
+	char* subject;
+	char* body = "";
+	char* to = "";
+	char* from = "";
+
+	if (!PyArg_ParseTuple(args, "s|sss", &subject, &body, &to, &from))
+		return NULL;
+
+	gp_KetsjiScene->GetNetworkScene()->SendMessage(to, from, subject, body);
+
+	Py_RETURN_NONE;
+}
+
 static bool usedsp = false;
 
 // this gets a pointer to an array filled with floats
@@ -436,6 +460,7 @@
 
 static struct PyMethodDef game_methods[] = {
 	{"expandPath", (PyCFunction)gPyExpandPath, METH_VARARGS, (PY_METHODCHAR)gPyExpandPath_doc},
+	{"sendMessage", (PyCFunction)gPySendMessage, METH_VARARGS, (PY_METHODCHAR)gPySendMessage_doc},
 	{"getCurrentController",
 	(PyCFunction) SCA_PythonController::sPyGetCurrentController,
 	METH_NOARGS, (PY_METHODCHAR)SCA_PythonController::sPyGetCurrentController__doc__},

Modified: trunk/blender/source/gameengine/Network/NG_NetworkScene.h
===================================================================
--- trunk/blender/source/gameengine/Network/NG_NetworkScene.h	2009-04-08 16:51:35 UTC (rev 19602)
+++ trunk/blender/source/gameengine/Network/NG_NetworkScene.h	2009-04-08 16:57:08 UTC (rev 19603)
@@ -34,6 +34,11 @@
 #include "STR_HashedString.h"
 #include <vector>
 
+//MSVC defines SendMessage as a win api function, even though we aren't using it
+#ifdef SendMessage
+	#undef SendMessage
+#endif
+
 class NG_NetworkDeviceInterface;
 
 class NG_NetworkScene

Modified: trunk/blender/source/gameengine/PyDoc/GameLogic.py
===================================================================
--- trunk/blender/source/gameengine/PyDoc/GameLogic.py	2009-04-08 16:51:35 UTC (rev 19602)
+++ trunk/blender/source/gameengine/PyDoc/GameLogic.py	2009-04-08 16:57:08 UTC (rev 19603)
@@ -205,6 +205,19 @@
 	@type activate: boolean
 	@param activate: whether to activate or deactivate the given actuator.
 	"""
+def sendMessage(subject, body="", to="", from=""):
+	"""
+	Sends a message.
+	
+	@param subject: The subject of the message
+	@type subject: string
+	@param body: The body of the message (optional)
+	@type body: string
+	@param to: The name of the object to send the message to (optional)
+	@type to: string
+	@param from: The name of the object that the message is coming from (optional)
+	@type from: string
+	"""
 def getRandomFloat():
 	"""
 	Returns a random floating point value in the range [0...1)

Modified: trunk/blender/source/gameengine/PyDoc/KX_GameObject.py
===================================================================
--- trunk/blender/source/gameengine/PyDoc/KX_GameObject.py	2009-04-08 16:51:35 UTC (rev 19602)
+++ trunk/blender/source/gameengine/PyDoc/KX_GameObject.py	2009-04-08 16:57:08 UTC (rev 19603)
@@ -453,3 +453,14 @@
 		@type margin: float
 		@param margin: the collision margin distance in blender units.
 		"""
+	def sendMessage(subject, body="", to=""):
+		"""
+		Sends a message.
+	
+		@param subject: The subject of the message
+		@type subject: string
+		@param body: The body of the message (optional)
+		@type body: string
+		@param to: The name of the object to send the message to (optional)
+		@type to: string
+		"""





More information about the Bf-blender-cvs mailing list