/** * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. * All rights reserved. * * The Original Code is: all of this file. * * Contributor(s): Campbell Barton * * ***** END GPL LICENSE BLOCK ***** */ #ifndef _adr_py_init_types_h_ // only process once, #define _adr_py_init_types_h_ // even if multiply included /* Only for Class::Parents */ #include "BL_BlenderShader.h" #include "BL_ShapeActionActuator.h" #include "KX_BlenderMaterial.h" #include "KX_CameraActuator.h" #include "KX_ConstraintActuator.h" #include "KX_ConstraintWrapper.h" #include "KX_GameActuator.h" #include "KX_Light.h" #include "KX_MeshProxy.h" #include "KX_MouseFocusSensor.h" #include "KX_NetworkMessageActuator.h" #include "KX_NetworkMessageSensor.h" #include "KX_ObjectActuator.h" #include "KX_ParentActuator.h" #include "KX_PhysicsObjectWrapper.h" #include "KX_PolyProxy.h" #include "KX_PolygonMaterial.h" #include "KX_PythonSeq.h" #include "KX_SCA_AddObjectActuator.h" #include "KX_SCA_EndObjectActuator.h" #include "KX_SCA_ReplaceMeshActuator.h" #include "KX_SceneActuator.h" #include "KX_StateActuator.h" #include "KX_TrackToActuator.h" #include "KX_VehicleWrapper.h" #include "KX_VertexProxy.h" #include "SCA_2DFilterActuator.h" #include "SCA_ANDController.h" #include "SCA_ActuatorSensor.h" #include "SCA_AlwaysSensor.h" #include "SCA_DelaySensor.h" #include "SCA_JoystickSensor.h" #include "SCA_KeyboardSensor.h" #include "SCA_MouseSensor.h" #include "SCA_NANDController.h" #include "SCA_NORController.h" #include "SCA_ORController.h" #include "SCA_RandomSensor.h" #include "SCA_XNORController.h" #include "SCA_XORController.h" #include "KX_IpoActuator.h" #include "KX_NearSensor.h" #include "KX_RadarSensor.h" #include "KX_RaySensor.h" #include "KX_SCA_DynamicActuator.h" #include "KX_SoundActuator.h" #include "KX_TouchSensor.h" #include "KX_VisibilityActuator.h" #include "SCA_PropertySensor.h" #include "SCA_PythonController.h" #include "SCA_RandomActuator.h" #include "SCA_IController.h" static void PyType_Ready_ADD(PyObject *dict, PyTypeObject *tp, PyAttributeDef *attributes, int init_getset) { PyAttributeDef *attr; if(init_getset) { /* we need to do this for all types before calling PyType_Ready * since they will call the parents PyType_Ready and those might not have initialized vars yet */ //if(tp->tp_base==NULL) // printf("Debug: No Parents - '%s'\n" , tp->tp_name); if(tp->tp_getset==NULL && attributes->m_name) { PyGetSetDef *attr_getset; int attr_tot= 0; for(attr= attributes; attr->m_name; attr++, attr_tot++) {}; tp->tp_getset = attr_getset = reinterpret_cast(PyMem_Malloc((attr_tot+1) * sizeof(PyGetSetDef))); // XXX - Todo, free for(attr= attributes; attr->m_name; attr++, attr_getset++) { attr_getset->name= (char *)attr->m_name; attr_getset->doc= NULL; attr_getset->get= reinterpret_cast(PyObjectPlus::py_get_attrdef); if(attr->m_access==KX_PYATTRIBUTE_RO) attr_getset->set= NULL; else attr_getset->set= reinterpret_cast(PyObjectPlus::py_set_attrdef); attr_getset->closure= reinterpret_cast(attr); } memset(attr_getset, 0, sizeof(PyGetSetDef)); } } else { PyObject *item; PyType_Ready(tp); PyDict_SetItemString(dict, tp->tp_name, reinterpret_cast(tp)); } } #define PyType_Ready_Attr(d, n, i) PyType_Ready_ADD(d, &n::Type, n::Attributes, i) void initPyTypes(void) { /* initPyObjectPlusType(BL_ActionActuator::Parents); ..... */ /* For now just do PyType_Ready */ PyObject *mod= PyModule_New("GameTypes"); PyObject *dict= PyModule_GetDict(mod); PyDict_SetItemString(PySys_GetObject((char *)"modules"), (char *)"GameTypes", mod); Py_DECREF(mod); for(int init_getset= 1; init_getset > -1; init_getset--) { /* run twice, once to init the getsets another to run PyType_Ready */ PyType_Ready_Attr(dict, BL_ActionActuator, init_getset); PyType_Ready_Attr(dict, BL_Shader, init_getset); PyType_Ready_Attr(dict, BL_ShapeActionActuator, init_getset); PyType_Ready_Attr(dict, CListValue, init_getset); PyType_Ready_Attr(dict, CValue, init_getset); PyType_Ready_Attr(dict, KX_BlenderMaterial, init_getset); PyType_Ready_Attr(dict, KX_Camera, init_getset); PyType_Ready_Attr(dict, KX_CameraActuator, init_getset); PyType_Ready_Attr(dict, KX_ConstraintActuator, init_getset); PyType_Ready_Attr(dict, KX_ConstraintWrapper, init_getset); PyType_Ready_Attr(dict, KX_GameActuator, init_getset); PyType_Ready_Attr(dict, KX_GameObject, init_getset); PyType_Ready_Attr(dict, KX_IpoActuator, init_getset); PyType_Ready_Attr(dict, KX_LightObject, init_getset); PyType_Ready_Attr(dict, KX_MeshProxy, init_getset); PyType_Ready_Attr(dict, KX_MouseFocusSensor, init_getset); PyType_Ready_Attr(dict, KX_NearSensor, init_getset); PyType_Ready_Attr(dict, KX_NetworkMessageActuator, init_getset); PyType_Ready_Attr(dict, KX_NetworkMessageSensor, init_getset); PyType_Ready_Attr(dict, KX_ObjectActuator, init_getset); PyType_Ready_Attr(dict, KX_ParentActuator, init_getset); PyType_Ready_Attr(dict, KX_PhysicsObjectWrapper, init_getset); PyType_Ready_Attr(dict, KX_PolyProxy, init_getset); PyType_Ready_Attr(dict, KX_PolygonMaterial, init_getset); PyType_Ready_Attr(dict, KX_RadarSensor, init_getset); PyType_Ready_Attr(dict, KX_RaySensor, init_getset); PyType_Ready_Attr(dict, KX_SCA_AddObjectActuator, init_getset); PyType_Ready_Attr(dict, KX_SCA_DynamicActuator, init_getset); PyType_Ready_Attr(dict, KX_SCA_EndObjectActuator, init_getset); PyType_Ready_Attr(dict, KX_SCA_ReplaceMeshActuator, init_getset); PyType_Ready_Attr(dict, KX_Scene, init_getset); PyType_Ready_Attr(dict, KX_SceneActuator, init_getset); PyType_Ready_Attr(dict, KX_SoundActuator, init_getset); PyType_Ready_Attr(dict, KX_StateActuator, init_getset); PyType_Ready_Attr(dict, KX_TouchSensor, init_getset); PyType_Ready_Attr(dict, KX_TrackToActuator, init_getset); PyType_Ready_Attr(dict, KX_VehicleWrapper, init_getset); PyType_Ready_Attr(dict, KX_VertexProxy, init_getset); PyType_Ready_Attr(dict, KX_VisibilityActuator, init_getset); PyType_Ready_Attr(dict, PyObjectPlus, init_getset); PyType_Ready_Attr(dict, SCA_2DFilterActuator, init_getset); PyType_Ready_Attr(dict, SCA_ANDController, init_getset); PyType_Ready_Attr(dict, SCA_ActuatorSensor, init_getset); PyType_Ready_Attr(dict, SCA_AlwaysSensor, init_getset); PyType_Ready_Attr(dict, SCA_DelaySensor, init_getset); PyType_Ready_Attr(dict, SCA_ILogicBrick, init_getset); PyType_Ready_Attr(dict, SCA_IObject, init_getset); PyType_Ready_Attr(dict, SCA_ISensor, init_getset); PyType_Ready_Attr(dict, SCA_JoystickSensor, init_getset); PyType_Ready_Attr(dict, SCA_KeyboardSensor, init_getset); PyType_Ready_Attr(dict, SCA_MouseSensor, init_getset); PyType_Ready_Attr(dict, SCA_NANDController, init_getset); PyType_Ready_Attr(dict, SCA_NORController, init_getset); PyType_Ready_Attr(dict, SCA_ORController, init_getset); PyType_Ready_Attr(dict, SCA_PropertyActuator, init_getset); PyType_Ready_Attr(dict, SCA_PropertySensor, init_getset); PyType_Ready_Attr(dict, SCA_PythonController, init_getset); PyType_Ready_Attr(dict, SCA_RandomActuator, init_getset); PyType_Ready_Attr(dict, SCA_RandomSensor, init_getset); PyType_Ready_Attr(dict, SCA_XNORController, init_getset); PyType_Ready_Attr(dict, SCA_XORController, init_getset); PyType_Ready_Attr(dict, SCA_IController, init_getset); } /* Normal python type */ PyType_Ready(&KX_PythonSeq_Type); #ifdef USE_MATHUTILS /* Init mathutils callbacks */ KX_GameObject_Mathutils_Callback_Init(); KX_ObjectActuator_Mathutils_Callback_Init(); #endif } #endif