Undo revision 23130 which was a merge with 2.5, a messy one because I did something...
[blender.git] / source / gameengine / Ketsji / KX_SCA_AddObjectActuator.cpp
index 099403f..fffb0ac 100644 (file)
@@ -192,7 +192,18 @@ PyTypeObject KX_SCA_AddObjectActuator::Type = {
 };
 
 PyMethodDef KX_SCA_AddObjectActuator::Methods[] = {
+  // ---> deprecated
+  {"setTime", (PyCFunction) KX_SCA_AddObjectActuator::sPySetTime, METH_O, (const char *)SetTime_doc},
+  {"getTime", (PyCFunction) KX_SCA_AddObjectActuator::sPyGetTime, METH_NOARGS, (const char *)GetTime_doc},
+  {"getLinearVelocity", (PyCFunction) KX_SCA_AddObjectActuator::sPyGetLinearVelocity, METH_NOARGS, (const char *)GetLinearVelocity_doc},
+  {"setLinearVelocity", (PyCFunction) KX_SCA_AddObjectActuator::sPySetLinearVelocity, METH_VARARGS, (const char *)SetLinearVelocity_doc},
+  {"getAngularVelocity", (PyCFunction) KX_SCA_AddObjectActuator::sPyGetAngularVelocity, METH_NOARGS, (const char *)GetAngularVelocity_doc},
+  {"setAngularVelocity", (PyCFunction) KX_SCA_AddObjectActuator::sPySetAngularVelocity, METH_VARARGS, (const char *)SetAngularVelocity_doc},
+  {"getLastCreatedObject", (PyCFunction) KX_SCA_AddObjectActuator::sPyGetLastCreatedObject, METH_NOARGS,"getLastCreatedObject() : get the object handle to the last created object\n"},
   {"instantAddObject", (PyCFunction) KX_SCA_AddObjectActuator::sPyInstantAddObject, METH_NOARGS,"instantAddObject() : immediately add object without delay\n"},
+  {"setObject", (PyCFunction) KX_SCA_AddObjectActuator::sPySetObject, METH_O, (const char *)SetObject_doc},
+  {"getObject", (PyCFunction) KX_SCA_AddObjectActuator::sPyGetObject, METH_VARARGS, (const char *)GetObject_doc},
+  
   {NULL,NULL} //Sentinel
 };
 
@@ -242,6 +253,181 @@ PyObject* KX_SCA_AddObjectActuator::pyattr_get_objectLastCreated(void *self, con
                return actuator->m_lastCreatedObject->GetProxy();
 }
 
+/* 1. setObject */
+const char KX_SCA_AddObjectActuator::SetObject_doc[] = 
+"setObject(object)\n"
+"\t- object: KX_GameObject, string or None\n"
+"\tSets the object that will be added. There has to be an object\n"
+"\tof this name. If not, this function does nothing.\n";
+PyObject* KX_SCA_AddObjectActuator::PySetObject(PyObject* value)
+{
+       KX_GameObject *gameobj;
+       
+       ShowDeprecationWarning("setObject()", "the object property");
+       
+       if (!ConvertPythonToGameObject(value, &gameobj, true, "actuator.setObject(value): KX_SCA_AddObjectActuator"))
+               return NULL; // ConvertPythonToGameObject sets the error
+       
+       if (m_OriginalObject != NULL)
+               m_OriginalObject->UnregisterActuator(this);     
+
+       m_OriginalObject = (SCA_IObject*)gameobj;
+       if (m_OriginalObject)
+               m_OriginalObject->RegisterActuator(this);
+       
+       Py_RETURN_NONE;
+}
+
+
+
+/* 2. setTime */
+const char KX_SCA_AddObjectActuator::SetTime_doc[] = 
+"setTime(duration)\n"
+"\t- duration: integer\n"
+"\tSets the lifetime of the object that will be added, in frames. \n"
+"\tIf the duration is negative, it is set to 0.\n";
+
+
+PyObject* KX_SCA_AddObjectActuator::PySetTime(PyObject* value)
+{
+       ShowDeprecationWarning("setTime()", "the time property");
+       int deltatime = PyLong_AsSsize_t(value);
+       if (deltatime==-1 && PyErr_Occurred()) {
+               PyErr_SetString(PyExc_TypeError, "expected an int");
+               return NULL;
+       }
+       
+       m_timeProp = deltatime;
+       if (m_timeProp < 0) m_timeProp = 0;
+       
+       Py_RETURN_NONE;
+}
+
+
+
+/* 3. getTime */
+const char KX_SCA_AddObjectActuator::GetTime_doc[] = 
+"getTime()\n"
+"\tReturns the lifetime of the object that will be added.\n";
+
+
+PyObject* KX_SCA_AddObjectActuator::PyGetTime()
+{
+       ShowDeprecationWarning("getTime()", "the time property");
+       return PyLong_FromSsize_t(m_timeProp);
+}
+
+
+/* 4. getObject */
+const char KX_SCA_AddObjectActuator::GetObject_doc[] = 
+"getObject(name_only = 1)\n"
+"name_only - optional arg, when true will return the KX_GameObject rather then its name\n"
+"\tReturns the name of the object that will be added.\n";
+PyObject* KX_SCA_AddObjectActuator::PyGetObject(PyObject* args)
+{
+       int ret_name_only = 1;
+       
+       ShowDeprecationWarning("getObject()", "the object property");
+       
+       if (!PyArg_ParseTuple(args, "|i:getObject", &ret_name_only))
+               return NULL;
+       
+       if (!m_OriginalObject)
+               Py_RETURN_NONE;
+       
+       if (ret_name_only)
+               return PyUnicode_FromString(m_OriginalObject->GetName().ReadPtr());
+       else
+               return m_OriginalObject->GetProxy();
+}
+
+
+
+/* 5. getLinearVelocity */
+const char KX_SCA_AddObjectActuator::GetLinearVelocity_doc[] = 
+"GetLinearVelocity()\n"
+"\tReturns the linear velocity that will be assigned to \n"
+"\tthe created object.\n";
+
+PyObject* KX_SCA_AddObjectActuator::PyGetLinearVelocity()
+{
+       ShowDeprecationWarning("getLinearVelocity()", "the linearVelocity property");
+       PyObject *retVal = PyList_New(3);
+
+       PyList_SET_ITEM(retVal, 0, PyFloat_FromDouble(m_linear_velocity[0]));
+       PyList_SET_ITEM(retVal, 1, PyFloat_FromDouble(m_linear_velocity[1]));
+       PyList_SET_ITEM(retVal, 2, PyFloat_FromDouble(m_linear_velocity[2]));
+       
+       return retVal;
+}
+
+
+
+/* 6. setLinearVelocity                                                 */
+const char KX_SCA_AddObjectActuator::SetLinearVelocity_doc[] = 
+"setLinearVelocity(vx, vy, vz)\n"
+"\t- vx: float\n"
+"\t- vy: float\n"
+"\t- vz: float\n"
+"\t- local: bool\n"
+"\tAssign this velocity to the created object. \n";
+
+PyObject* KX_SCA_AddObjectActuator::PySetLinearVelocity(PyObject* args)
+{
+       ShowDeprecationWarning("setLinearVelocity()", "the linearVelocity property");
+       
+       float vecArg[3];
+       if (!PyArg_ParseTuple(args, "fff:setLinearVelocity", &vecArg[0], &vecArg[1], &vecArg[2]))
+               return NULL;
+
+       m_linear_velocity[0] = vecArg[0];
+       m_linear_velocity[1] = vecArg[1];
+       m_linear_velocity[2] = vecArg[2];
+       Py_RETURN_NONE;
+}
+
+/* 7. getAngularVelocity */
+const char KX_SCA_AddObjectActuator::GetAngularVelocity_doc[] = 
+"GetAngularVelocity()\n"
+"\tReturns the angular velocity that will be assigned to \n"
+"\tthe created object.\n";
+
+PyObject* KX_SCA_AddObjectActuator::PyGetAngularVelocity()
+{
+       ShowDeprecationWarning("getAngularVelocity()", "the angularVelocity property");
+       PyObject *retVal = PyList_New(3);
+
+       PyList_SET_ITEM(retVal, 0, PyFloat_FromDouble(m_angular_velocity[0]));
+       PyList_SET_ITEM(retVal, 1, PyFloat_FromDouble(m_angular_velocity[1]));
+       PyList_SET_ITEM(retVal, 2, PyFloat_FromDouble(m_angular_velocity[2]));
+       
+       return retVal;
+}
+
+
+
+/* 8. setAngularVelocity                                                 */
+const char KX_SCA_AddObjectActuator::SetAngularVelocity_doc[] = 
+"setAngularVelocity(vx, vy, vz)\n"
+"\t- vx: float\n"
+"\t- vy: float\n"
+"\t- vz: float\n"
+"\t- local: bool\n"
+"\tAssign this angular velocity to the created object. \n";
+
+PyObject* KX_SCA_AddObjectActuator::PySetAngularVelocity(PyObject* args)
+{
+       ShowDeprecationWarning("setAngularVelocity()", "the angularVelocity property");
+       
+       float vecArg[3];
+       if (!PyArg_ParseTuple(args, "fff:setAngularVelocity", &vecArg[0], &vecArg[1], &vecArg[2]))
+               return NULL;
+
+       m_angular_velocity[0] = vecArg[0];
+       m_angular_velocity[1] = vecArg[1];
+       m_angular_velocity[2] = vecArg[2];
+       Py_RETURN_NONE;
+}
 
 void   KX_SCA_AddObjectActuator::InstantAddObject()
 {
@@ -284,3 +470,26 @@ PyObject* KX_SCA_AddObjectActuator::PyInstantAddObject()
 
        Py_RETURN_NONE;
 }
+
+
+
+/* 7. GetLastCreatedObject                                                */
+const char KX_SCA_AddObjectActuator::GetLastCreatedObject_doc[] = 
+"getLastCreatedObject()\n"
+"\tReturn the last created object. \n";
+
+
+PyObject* KX_SCA_AddObjectActuator::PyGetLastCreatedObject()
+{
+       ShowDeprecationWarning("getLastCreatedObject()", "the objectLastCreated property");
+       SCA_IObject* result = this->GetLastCreatedObject();
+       
+       // if result->GetSGNode() is NULL
+       // it means the object has ended, The BGE python api crashes in many places if the object is returned.
+       if (result && (static_cast<KX_GameObject *>(result))->GetSGNode()) 
+       {
+               return result->GetProxy();
+       }
+       // don't return NULL to python anymore, it gives trouble in the scripts
+       Py_RETURN_NONE;
+}