[Bf-blender-cvs] [7730391] master: BGE: subclass with more than 1 argument, D1237

Porteries Tristan noreply at git.blender.org
Wed Apr 15 14:03:44 CEST 2015


Commit: 7730391d7425a8581cf16b3a6510acc56108071c
Author: Porteries Tristan
Date:   Wed Apr 15 21:45:43 2015 +1000
Branches: master
https://developer.blender.org/rB7730391d7425a8581cf16b3a6510acc56108071c

BGE: subclass with more than 1 argument, D1237

In the BGE you can't create a subclass with more than 1 argument like : "player = Player(owner, 10)"
I have modified the py_base_new to check only the first argument of args tuple.
Now we can do :

    class Player(types.KX_GameObject):
        def __init__(self, gameobj, life):
            print("create new player :", self, ", life :", life)

    player = Player(own, 50)

===================================================================

M	source/gameengine/Expressions/PyObjectPlus.cpp

===================================================================

diff --git a/source/gameengine/Expressions/PyObjectPlus.cpp b/source/gameengine/Expressions/PyObjectPlus.cpp
index a65d61b..d475152 100644
--- a/source/gameengine/Expressions/PyObjectPlus.cpp
+++ b/source/gameengine/Expressions/PyObjectPlus.cpp
@@ -148,10 +148,15 @@ PyObject *PyObjectPlus::py_base_repr(PyObject *self)			// This should be the ent
 PyObject *PyObjectPlus::py_base_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
 	PyTypeObject *base_type;
-	PyObjectPlus_Proxy *base = NULL;
 
-	if (!PyArg_ParseTuple(args, "O:Base PyObjectPlus", &base))
+	/* one or more args is needed */
+	if (!PyTuple_GET_SIZE(args)) {
+		PyErr_SetString(PyExc_TypeError,
+		                "Expected at least one argument");
 		return NULL;
+	}
+
+	PyObjectPlus_Proxy *base = (PyObjectPlus_Proxy *)PyTuple_GET_ITEM(args, 0);
 
 	/* the 'base' PyObject may be subclassed (multiple times even)
 	 * we need to find the first C++ defined class to check 'type'




More information about the Bf-blender-cvs mailing list