From f55e45f855250a5693455fe0f7e13fe0f35c7814 Mon Sep 17 00:00:00 2001 From: Erwin Coumans Date: Mon, 13 Feb 2006 06:28:35 +0000 Subject: more vehicle preparation and some bullet collision detection bugfixes (related to collision margin) --- source/gameengine/Ketsji/KX_VehicleWrapper.cpp | 150 ++++++++++++++++++++++++- 1 file changed, 146 insertions(+), 4 deletions(-) (limited to 'source/gameengine/Ketsji/KX_VehicleWrapper.cpp') diff --git a/source/gameengine/Ketsji/KX_VehicleWrapper.cpp b/source/gameengine/Ketsji/KX_VehicleWrapper.cpp index 299a2d1f180..9745af028d5 100644 --- a/source/gameengine/Ketsji/KX_VehicleWrapper.cpp +++ b/source/gameengine/Ketsji/KX_VehicleWrapper.cpp @@ -4,6 +4,9 @@ #include "KX_VehicleWrapper.h" #include "PHY_IPhysicsEnvironment.h" #include "PHY_IVehicle.h" +#include "KX_PyMath.h" +#include "KX_GameObject.h" +#include "KX_MotionState.h" #ifdef HAVE_CONFIG_H #include @@ -20,6 +23,13 @@ KX_VehicleWrapper::KX_VehicleWrapper( KX_VehicleWrapper::~KX_VehicleWrapper() { + int numMotion = m_motionStates.size(); + for (int i=0;iGetSGNode()); + + MT_Vector3 attachPos,attachDir,attachAxle; + PyVecTo(pylistPos,attachPos); + PyVecTo(pylistDir,attachDir); + PyVecTo(pylistAxleDir,attachAxle); + PHY__Vector3 aPos,aDir,aAxle; + aPos[0] = attachPos[0]; + aPos[1] = attachPos[1]; + aPos[2] = attachPos[2]; + aDir[0] = attachDir[0]; + aDir[1] = attachDir[1]; + aDir[2] = attachDir[2]; + aAxle[0] = attachAxle[0]; + aAxle[1] = attachAxle[1]; + aAxle[2] = attachAxle[2]; + + printf("attempt for addWheel: suspensionRestLength%f wheelRadius %f, hasSteering:%d\n",suspensionRestLength,wheelRadius,hasSteering); + m_vehicle->AddWheel(motionState,aPos,aDir,aAxle,suspensionRestLength,wheelRadius,hasSteering); + + } Py_INCREF(Py_None); return Py_None; } -PyObject* KX_VehicleWrapper::PyGetWheelsTransform(PyObject* self, + +PyObject* KX_VehicleWrapper::PyGetWheelPosition(PyObject* self, PyObject* args, PyObject* kwds) { - assert(0); - return PyInt_FromLong(m_vehicle->GetNumWheels()); + + int wheelIndex; + + if (PyArg_ParseTuple(args,"i",&wheelIndex)) + { + float position[3]; + m_vehicle->GetWheelPosition(wheelIndex,position[0],position[1],position[2]); + MT_Vector3 pos(position[0],position[1],position[2]); + return PyObjectFrom(pos); + } + Py_INCREF(Py_None); + return Py_None; +} + +PyObject* KX_VehicleWrapper::PyGetWheelRotation(PyObject* self, + PyObject* args, + PyObject* kwds) +{ + int wheelIndex; + if (PyArg_ParseTuple(args,"i",&wheelIndex)) + { + return PyFloat_FromDouble(m_vehicle->GetWheelRotation(wheelIndex)); + } + Py_INCREF(Py_None); + return Py_None; +} + +PyObject* KX_VehicleWrapper::PyGetWheelOrientationQuaternion(PyObject* self, + PyObject* args, + PyObject* kwds) +{ + int wheelIndex; + if (PyArg_ParseTuple(args,"i",&wheelIndex)) + { + float orn[4]; + m_vehicle->GetWheelOrientationQuaternion(wheelIndex,orn[0],orn[1],orn[2],orn[3]); + MT_Quaternion quatorn(orn[0],orn[1],orn[2],orn[3]); + MT_Matrix3x3 ornmat(quatorn); + return PyObjectFrom(ornmat); + } + Py_INCREF(Py_None); + return Py_None; + } @@ -57,6 +141,58 @@ PyObject* KX_VehicleWrapper::PyGetConstraintId(PyObject* self, return PyInt_FromLong(m_vehicle->GetUserConstraintId()); } + + +PyObject* KX_VehicleWrapper::PyApplyEngineForce(PyObject* self, + PyObject* args, + PyObject* kwds) +{ + float force; + int wheelIndex; + + if (PyArg_ParseTuple(args,"fi",&force,&wheelIndex)) + { + m_vehicle->ApplyEngineForce(force,wheelIndex); + } + Py_INCREF(Py_None); + return Py_None; +} + + +PyObject* KX_VehicleWrapper::PyApplyBraking(PyObject* self, + PyObject* args, + PyObject* kwds) +{ + float braking; + int wheelIndex; + + if (PyArg_ParseTuple(args,"fi",&braking,&wheelIndex)) + { + m_vehicle->ApplyBraking(braking,wheelIndex); + } + Py_INCREF(Py_None); + return Py_None; +} + + + + +PyObject* KX_VehicleWrapper::PySetSteeringValue(PyObject* self, + PyObject* args, + PyObject* kwds) +{ + float steeringValue; + int wheelIndex; + + if (PyArg_ParseTuple(args,"fi",&steeringValue,&wheelIndex)) + { + m_vehicle->SetSteeringValue(steeringValue,wheelIndex); + } + Py_INCREF(Py_None); + return Py_None; +} + + PyObject* KX_VehicleWrapper::PyGetConstraintType(PyObject* self, PyObject* args, PyObject* kwds) @@ -67,6 +203,7 @@ PyObject* KX_VehicleWrapper::PyGetConstraintType(PyObject* self, + //python specific stuff PyTypeObject KX_VehicleWrapper::Type = { PyObject_HEAD_INIT(&PyType_Type) @@ -130,9 +267,14 @@ int KX_VehicleWrapper::_setattr(const STR_String& attr,PyObject* pyobj) PyMethodDef KX_VehicleWrapper::Methods[] = { {"addWheel",(PyCFunction) KX_VehicleWrapper::sPyAddWheel, METH_VARARGS}, {"getNumWheels",(PyCFunction) KX_VehicleWrapper::sPyGetNumWheels, METH_VARARGS}, - {"getWheelsTransform",(PyCFunction) KX_VehicleWrapper::sPyGetWheelsTransform, METH_VARARGS}, + {"getWheelOrientationQuaternion",(PyCFunction) KX_VehicleWrapper::sPyGetWheelOrientationQuaternion, METH_VARARGS}, + {"getWheelRotation",(PyCFunction) KX_VehicleWrapper::sPyGetWheelRotation, METH_VARARGS}, + {"getWheelPosition",(PyCFunction) KX_VehicleWrapper::sPyGetWheelPosition, METH_VARARGS}, {"getConstraintId",(PyCFunction) KX_VehicleWrapper::sPyGetConstraintId, METH_VARARGS}, {"getConstraintType",(PyCFunction) KX_VehicleWrapper::sPyGetConstraintType, METH_VARARGS}, + {"setSteeringValue",(PyCFunction) KX_VehicleWrapper::sPySetSteeringValue, METH_VARARGS}, + {"applyEngineForce",(PyCFunction) KX_VehicleWrapper::sPyApplyEngineForce, METH_VARARGS}, + {"applyBraking",(PyCFunction) KX_VehicleWrapper::sPyApplyBraking, METH_VARARGS}, {NULL,NULL} //Sentinel }; -- cgit v1.2.3