Răsfoiți Sursa

Fixes for Mac after Linux fixes broke it :(

Ivan Safrin 14 ani în urmă
părinte
comite
1458639f10

+ 68 - 68
Bindings/Contents/LUA/API/Polycode.lua

@@ -1,87 +1,87 @@
-require "Polycode/Event"
-require "Polycode/Font"
-require "Polycode/QuaternionTween"
-require "Polycode/Tween"
-require "Polycode/BezierPathTween"
-require "Polycode/ScreenEvent"
-require "Polycode/TweenManager"
+require "Polycode/OSFILE"
+require "Polycode/OSFileEntry"
+require "Polycode/OSBasics"
+require "Polycode/BezierCurve"
+require "Polycode/Bone"
+require "Polycode/Camera"
+require "Polycode/Color"
+require "Polycode/Config"
 require "Polycode/PolycodeViewBase"
 require "Polycode/PolycodeViewBase"
 require "Polycode/Core"
 require "Polycode/Core"
+require "Polycode/CoreInput"
+require "Polycode/CoreServices"
+require "Polycode/Cubemap"
+require "Polycode/Data"
+require "Polycode/Entity"
+require "Polycode/Event"
+require "Polycode/EventDispatcher"
+require "Polycode/EventHandler"
 require "Polycode/FixedShader"
 require "Polycode/FixedShader"
 require "Polycode/FixedShaderBinding"
 require "Polycode/FixedShaderBinding"
-require "Polycode/SceneSound"
-require "Polycode/SceneSoundListener"
+require "Polycode/Font"
+require "Polycode/FontManager"
+require "Polycode/Image"
+require "Polycode/InputEvent"
+require "Polycode/Label"
+require "Polycode/Logger"
+require "Polycode/Material"
+require "Polycode/MaterialManager"
+require "Polycode/Matrix4"
+require "Polycode/VertexBuffer"
+require "Polycode/Mesh"
+require "Polycode/PolycodeModule"
+require "Polycode/ObjectEntry"
+require "Polycode/Particle"
 require "Polycode/ScreenParticleEmitter"
 require "Polycode/ScreenParticleEmitter"
 require "Polycode/SceneParticleEmitter"
 require "Polycode/SceneParticleEmitter"
 require "Polycode/ParticleEmitter"
 require "Polycode/ParticleEmitter"
-require "Polycode/Timer"
+require "Polycode/Perlin"
+require "Polycode/Polygon"
+require "Polycode/Quaternion"
+require "Polycode/QuaternionCurve"
+require "Polycode/Rectangle"
+require "Polycode/Renderer"
+require "Polycode/Resource"
 require "Polycode/ResourceManager"
 require "Polycode/ResourceManager"
+require "Polycode/Scene"
 require "Polycode/SceneEntity"
 require "Polycode/SceneEntity"
-require "Polycode/VertexBuffer"
-require "Polycode/Mesh"
-require "Polycode/Shader"
-require "Polycode/ShaderBinding"
-require "Polycode/PolycodeModule"
+require "Polycode/SceneLabel"
+require "Polycode/SceneLight"
+require "Polycode/SceneLine"
 require "Polycode/SceneManager"
 require "Polycode/SceneManager"
-require "Polycode/Renderer"
-require "Polycode/ScreenImage"
+require "Polycode/SceneMesh"
+require "Polycode/ScenePrimitive"
+require "Polycode/SceneRenderTexture"
+require "Polycode/SceneSound"
+require "Polycode/SceneSoundListener"
+require "Polycode/Screen"
 require "Polycode/ScreenCurve"
 require "Polycode/ScreenCurve"
-require "Polycode/Color"
-require "Polycode/ScreenSoundListener"
-require "Polycode/ScreenSound"
+require "Polycode/ScreenEntity"
+require "Polycode/ScreenEvent"
+require "Polycode/ScreenImage"
+require "Polycode/ScreenLabel"
+require "Polycode/ScreenLine"
+require "Polycode/ScreenManager"
 require "Polycode/ScreenMesh"
 require "Polycode/ScreenMesh"
 require "Polycode/ScreenShape"
 require "Polycode/ScreenShape"
-require "Polycode/Image"
-require "Polycode/CoreInput"
-require "Polycode/Cubemap"
-require "Polycode/MaterialManager"
-require "Polycode/Sound"
-require "Polycode/ScenePrimitive"
-require "Polycode/String"
-require "Polycode/SceneLine"
-require "Polycode/QuaternionCurve"
-require "Polycode/Matrix4"
+require "Polycode/ScreenSoundListener"
+require "Polycode/ScreenSound"
+require "Polycode/ScreenSprite"
+require "Polycode/Shader"
+require "Polycode/ShaderBinding"
 require "Polycode/SkeletonAnimation"
 require "Polycode/SkeletonAnimation"
 require "Polycode/Skeleton"
 require "Polycode/Skeleton"
 require "Polycode/BoneTrack"
 require "Polycode/BoneTrack"
-require "Polycode/Vector3"
+require "Polycode/Sound"
+require "Polycode/SoundManager"
+require "Polycode/String"
 require "Polycode/Texture"
 require "Polycode/Texture"
-require "Polycode/Label"
-require "Polycode/SceneLabel"
-require "Polycode/EventDispatcher"
-require "Polycode/Particle"
-require "Polycode/EventHandler"
-require "Polycode/ScreenManager"
-require "Polycode/Config"
-require "Polycode/OSFILE"
-require "Polycode/OSFileEntry"
-require "Polycode/OSBasics"
-require "Polycode/ScreenEntity"
+require "Polycode/Timer"
 require "Polycode/TimerManager"
 require "Polycode/TimerManager"
-require "Polycode/Perlin"
-require "Polycode/ScreenLabel"
-require "Polycode/Polygon"
-require "Polycode/ObjectEntry"
-require "Polycode/SoundManager"
-require "Polycode/Material"
-require "Polycode/Vertex"
-require "Polycode/Rectangle"
-require "Polycode/SceneMesh"
-require "Polycode/Quaternion"
-require "Polycode/Data"
-require "Polycode/Entity"
-require "Polycode/FontManager"
-require "Polycode/SceneRenderTexture"
-require "Polycode/ScreenLine"
-require "Polycode/CoreServices"
-require "Polycode/ScreenSprite"
-require "Polycode/Resource"
-require "Polycode/Screen"
-require "Polycode/Camera"
-require "Polycode/InputEvent"
-require "Polycode/BezierCurve"
+require "Polycode/QuaternionTween"
+require "Polycode/Tween"
+require "Polycode/BezierPathTween"
+require "Polycode/TweenManager"
 require "Polycode/Vector2"
 require "Polycode/Vector2"
-require "Polycode/Bone"
-require "Polycode/SceneLight"
-require "Polycode/Logger"
-require "Polycode/Scene"
+require "Polycode/Vector3"
+require "Polycode/Vertex"

Fișier diff suprimat deoarece este prea mare
+ 540 - 662
Bindings/Contents/LUA/Include/PolycodeLUAWrappers.h


Fișier diff suprimat deoarece este prea mare
+ 473 - 638
Bindings/Contents/LUA/Source/PolycodeLUA.cpp


+ 18 - 7
Modules/Bindings/2DPhysics/CMakeLists.txt

@@ -29,13 +29,23 @@ SET(CMAKE_DEBUG_POSTFIX "_d")
 
 
 SET_TARGET_PROPERTIES(Physics2D PROPERTIES PREFIX "")
 SET_TARGET_PROPERTIES(Physics2D PROPERTIES PREFIX "")
 
 
-
-IF(MSVC)
-ELSEIF(APPLE)
-    SET(EXTRA_LIBS "-framework Cocoa" "-frameword IOKit")
-ELSE(MSVC)
-ENDIF(MSVC)
-
+IF(APPLE)
+TARGET_LINK_LIBRARIES(Physics2D
+	Polycore
+	${LUA_LIBRARY}
+	${BOX2D_RELEASE_LIBRARY}
+	"-framework Cocoa"
+	"-framework IOKit"
+        ${OPENGL_LIBRARIES}
+        ${OPENAL_LIBRARY}
+        ${PNG_LIBRARIES}
+        ${FREETYPE_LIBRARIES}
+        ${PHYSFS_LIBRARY}
+        ${OGG_LIBRARIES}
+        ${VORBIS_LIBRARIES}
+        ${VORBISFILE_LIBRARIES}
+        ${EXTRA_LIBS})
+ELSE(APPLE)
 TARGET_LINK_LIBRARIES(Physics2D
 TARGET_LINK_LIBRARIES(Physics2D
 	Polycore
 	Polycore
 	${LUA_LIBRARY}
 	${LUA_LIBRARY}
@@ -49,6 +59,7 @@ TARGET_LINK_LIBRARIES(Physics2D
         ${VORBIS_LIBRARIES}
         ${VORBIS_LIBRARIES}
         ${VORBISFILE_LIBRARIES}
         ${VORBISFILE_LIBRARIES}
         ${EXTRA_LIBS})
         ${EXTRA_LIBS})
+ENDIF(APPLE)
 
 
 IF(POLYCODE_INSTALL_FRAMEWORK)
 IF(POLYCODE_INSTALL_FRAMEWORK)
     
     

+ 3 - 3
Modules/Bindings/3DPhysics/API/Physics3D.lua

@@ -1,6 +1,6 @@
-require "Physics3D/PhysicsSceneEntity"
-require "Physics3D/PhysicsVehicle"
-require "Physics3D/PhysicsCharacter"
 require "Physics3D/CollisionScene"
 require "Physics3D/CollisionScene"
 require "Physics3D/CollisionSceneEntity"
 require "Physics3D/CollisionSceneEntity"
 require "Physics3D/PhysicsScene"
 require "Physics3D/PhysicsScene"
+require "Physics3D/PhysicsSceneEntity"
+require "Physics3D/PhysicsVehicle"
+require "Physics3D/PhysicsCharacter"

+ 20 - 6
Modules/Bindings/3DPhysics/CMakeLists.txt

@@ -35,12 +35,23 @@ SET(CMAKE_DEBUG_POSTFIX "_d")
 
 
 SET_TARGET_PROPERTIES(Physics3D PROPERTIES PREFIX "")
 SET_TARGET_PROPERTIES(Physics3D PROPERTIES PREFIX "")
 
 
-IF(MSVC)
-ELSEIF(APPLE)
-    SET(EXTRA_LIBS "-framework Cocoa" "-frameword IOKit")
-ELSE(MSVC)
-ENDIF(MSVC)
-
+IF(APPLE)
+TARGET_LINK_LIBRARIES(Physics3D
+	Polycore
+	${LUA_LIBRARY}
+	${BULLET_LIBRARIES}
+	"-framework Cocoa"
+	"-framework IOKit"
+        ${OPENGL_LIBRARIES}
+        ${OPENAL_LIBRARY}
+        ${PNG_LIBRARIES}
+        ${FREETYPE_LIBRARIES}
+        ${PHYSFS_LIBRARY}
+        ${OGG_LIBRARIES}
+        ${VORBIS_LIBRARIES}
+        ${VORBISFILE_LIBRARIES}
+        ${EXTRA_LIBS})
+ELSE(APPLE)
 TARGET_LINK_LIBRARIES(Physics3D
 TARGET_LINK_LIBRARIES(Physics3D
 	Polycore
 	Polycore
 	${LUA_LIBRARY}
 	${LUA_LIBRARY}
@@ -55,6 +66,9 @@ TARGET_LINK_LIBRARIES(Physics3D
         ${VORBISFILE_LIBRARIES}
         ${VORBISFILE_LIBRARIES}
         ${EXTRA_LIBS})
         ${EXTRA_LIBS})
 
 
+ENDIF(APPLE)
+
+
 IF(POLYCODE_INSTALL_FRAMEWORK)
 IF(POLYCODE_INSTALL_FRAMEWORK)
     
     
     # install headers
     # install headers

+ 489 - 489
Modules/Bindings/3DPhysics/Include/Physics3DLUAWrappers.h

@@ -9,55 +9,39 @@ extern "C" {
 } // extern "C" 
 } // extern "C" 
 
 
 #include "Polycode3DPhysics.h"
 #include "Polycode3DPhysics.h"
-#include "PolyPhysicsSceneEntity.h"
 #include "PolyCollisionScene.h"
 #include "PolyCollisionScene.h"
 #include "PolyCollisionSceneEntity.h"
 #include "PolyCollisionSceneEntity.h"
 #include "PolyPhysicsScene.h"
 #include "PolyPhysicsScene.h"
+#include "PolyPhysicsSceneEntity.h"
 
 
 namespace Polycode {
 namespace Polycode {
 
 
-static int Physics3D_PhysicsSceneEntity_get_enabled(lua_State *L) {
-	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsSceneEntity *inst = (PhysicsSceneEntity*)lua_topointer(L, 1);
-	lua_pushboolean(L, inst->enabled);
+static int Physics3D_CollisionScene(lua_State *L) {
+	CollisionScene *inst = new CollisionScene();
+	lua_pushlightuserdata(L, (void*)inst);
 	return 1;
 	return 1;
 }
 }
 
 
-static int Physics3D_PhysicsSceneEntity_set_enabled(lua_State *L) {
+static int Physics3D_CollisionScene_initCollisionScene(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsSceneEntity *inst = (PhysicsSceneEntity*)lua_topointer(L, 1);
-	bool param = lua_toboolean(L, 2);
-	inst->enabled = param;
+	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	inst->initCollisionScene();
 	return 0;
 	return 0;
 }
 }
 
 
-static int Physics3D_PhysicsSceneEntity(lua_State *L) {
-	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	SceneEntity* entity = (SceneEntity*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TNUMBER);
-	int type = lua_tointeger(L, 2);
-	luaL_checktype(L, 3, LUA_TNUMBER);
-	Number mass = lua_tonumber(L, 3);
-	luaL_checktype(L, 4, LUA_TNUMBER);
-	Number friction = lua_tonumber(L, 4);
-	luaL_checktype(L, 5, LUA_TNUMBER);
-	Number restitution = lua_tonumber(L, 5);
-	PhysicsSceneEntity *inst = new PhysicsSceneEntity(entity, type, mass, friction, restitution);
-	lua_pushlightuserdata(L, (void*)inst);
-	return 1;
-}
-
-static int Physics3D_PhysicsSceneEntity_Update(lua_State *L) {
+static int Physics3D_CollisionScene_Update(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsSceneEntity *inst = (PhysicsSceneEntity*)lua_topointer(L, 1);
+	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
 	inst->Update();
 	inst->Update();
 	return 0;
 	return 0;
 }
 }
 
 
-static int Physics3D_PhysicsSceneEntity_getSceneEntity(lua_State *L) {
+static int Physics3D_CollisionScene_getCollisionEntityByObject(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsSceneEntity *inst = (PhysicsSceneEntity*)lua_topointer(L, 1);
-	void *ptrRetVal = (void*)inst->getSceneEntity();
+	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
+	btCollisionObject* collisionObject = (btCollisionObject*)lua_topointer(L, 2);
+	void *ptrRetVal = (void*)inst->getCollisionEntityByObject(collisionObject);
 	if(ptrRetVal == NULL) {
 	if(ptrRetVal == NULL) {
 		lua_pushnil(L);
 		lua_pushnil(L);
 	} else {
 	} else {
@@ -66,270 +50,231 @@ static int Physics3D_PhysicsSceneEntity_getSceneEntity(lua_State *L) {
 	return 1;
 	return 1;
 }
 }
 
 
-static int Physics3D_PhysicsSceneEntity_setFriction(lua_State *L) {
+static int Physics3D_CollisionScene_getFirstEntityInRay(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsSceneEntity *inst = (PhysicsSceneEntity*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TNUMBER);
-	Number friction = lua_tonumber(L, 2);
-	inst->setFriction(friction);
+	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
+	Vector3 origin = *(Vector3*)lua_topointer(L, 2);
+	luaL_checktype(L, 3, LUA_TLIGHTUSERDATA);
+	Vector3 dest = *(Vector3*)lua_topointer(L, 3);
+	RayTestResult *retInst = new RayTestResult();
+	*retInst = inst->getFirstEntityInRay(origin, dest);
+	lua_pushlightuserdata(L, retInst);
+	return 1;
+}
+
+static int Physics3D_CollisionScene_enableCollision(lua_State *L) {
+	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
+	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
+	SceneEntity* entity = (SceneEntity*)lua_topointer(L, 2);
+	luaL_checktype(L, 3, LUA_TBOOLEAN);
+	bool val = lua_toboolean(L, 3);
+	inst->enableCollision(entity, val);
 	return 0;
 	return 0;
 }
 }
 
 
-static int Physics3D_PhysicsSceneEntity_getType(lua_State *L) {
+static int Physics3D_CollisionScene_getCollisionByScreenEntity(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsSceneEntity *inst = (PhysicsSceneEntity*)lua_topointer(L, 1);
-	lua_pushinteger(L, inst->getType());
+	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
+	SceneEntity* ent = (SceneEntity*)lua_topointer(L, 2);
+	void *ptrRetVal = (void*)inst->getCollisionByScreenEntity(ent);
+	if(ptrRetVal == NULL) {
+		lua_pushnil(L);
+	} else {
+		lua_pushlightuserdata(L, ptrRetVal);
+	}
 	return 1;
 	return 1;
 }
 }
 
 
-static int Physics3D_delete_PhysicsSceneEntity(lua_State *L) {
+static int Physics3D_CollisionScene_testCollision(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsSceneEntity *inst = (PhysicsSceneEntity*)lua_topointer(L, 1);
-	delete inst;
-	return 0;
+	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
+	SceneEntity* ent1 = (SceneEntity*)lua_topointer(L, 2);
+	luaL_checktype(L, 3, LUA_TLIGHTUSERDATA);
+	SceneEntity* ent2 = (SceneEntity*)lua_topointer(L, 3);
+	CollisionResult *retInst = new CollisionResult();
+	*retInst = inst->testCollision(ent1, ent2);
+	lua_pushlightuserdata(L, retInst);
+	return 1;
 }
 }
 
 
-static int Physics3D_PhysicsVehicle_get_tuning(lua_State *L) {
+static int Physics3D_CollisionScene_testCollisionOnCollisionChild(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsVehicle *inst = (PhysicsVehicle*)lua_topointer(L, 1);
-	lua_pushlightuserdata(L, &inst->tuning);
+	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
+	CollisionSceneEntity* cEnt1 = (CollisionSceneEntity*)lua_topointer(L, 2);
+	luaL_checktype(L, 3, LUA_TLIGHTUSERDATA);
+	CollisionSceneEntity* cEnt2 = (CollisionSceneEntity*)lua_topointer(L, 3);
+	CollisionResult *retInst = new CollisionResult();
+	*retInst = inst->testCollisionOnCollisionChild(cEnt1, cEnt2);
+	lua_pushlightuserdata(L, retInst);
 	return 1;
 	return 1;
 }
 }
 
 
-static int Physics3D_PhysicsVehicle(lua_State *L) {
+static int Physics3D_CollisionScene_testCollisionOnCollisionChild_Convex(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	SceneEntity* entity = (SceneEntity*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TNUMBER);
-	Number mass = lua_tonumber(L, 2);
-	luaL_checktype(L, 3, LUA_TNUMBER);
-	Number friction = lua_tonumber(L, 3);
-	luaL_checktype(L, 4, LUA_TLIGHTUSERDATA);
-	btDefaultVehicleRaycaster* rayCaster = (btDefaultVehicleRaycaster*)lua_topointer(L, 4);
-	PhysicsVehicle *inst = new PhysicsVehicle(entity, mass, friction, rayCaster);
-	lua_pushlightuserdata(L, (void*)inst);
+	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
+	CollisionSceneEntity* cEnt1 = (CollisionSceneEntity*)lua_topointer(L, 2);
+	luaL_checktype(L, 3, LUA_TLIGHTUSERDATA);
+	CollisionSceneEntity* cEnt2 = (CollisionSceneEntity*)lua_topointer(L, 3);
+	CollisionResult *retInst = new CollisionResult();
+	*retInst = inst->testCollisionOnCollisionChild_Convex(cEnt1, cEnt2);
+	lua_pushlightuserdata(L, retInst);
 	return 1;
 	return 1;
 }
 }
 
 
-static int Physics3D_PhysicsVehicle_addWheel(lua_State *L) {
+static int Physics3D_CollisionScene_stopTrackingCollision(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsVehicle *inst = (PhysicsVehicle*)lua_topointer(L, 1);
+	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
 	SceneEntity* entity = (SceneEntity*)lua_topointer(L, 2);
 	SceneEntity* entity = (SceneEntity*)lua_topointer(L, 2);
-	luaL_checktype(L, 3, LUA_TLIGHTUSERDATA);
-	Vector3 connection = *(Vector3*)lua_topointer(L, 3);
-	luaL_checktype(L, 4, LUA_TLIGHTUSERDATA);
-	Vector3 direction = *(Vector3*)lua_topointer(L, 4);
-	luaL_checktype(L, 5, LUA_TLIGHTUSERDATA);
-	Vector3 axle = *(Vector3*)lua_topointer(L, 5);
-	luaL_checktype(L, 6, LUA_TNUMBER);
-	Number suspentionRestLength = lua_tonumber(L, 6);
-	luaL_checktype(L, 7, LUA_TNUMBER);
-	Number wheelRadius = lua_tonumber(L, 7);
-	luaL_checktype(L, 8, LUA_TBOOLEAN);
-	bool isFrontWheel = lua_toboolean(L, 8);
-	Number suspensionStiffness;
-	if(lua_isnumber(L, 9)) {
-		suspensionStiffness = lua_tonumber(L, 9);
+	inst->stopTrackingCollision(entity);
+	return 0;
+}
+
+static int Physics3D_CollisionScene_addCollisionChild(lua_State *L) {
+	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
+	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
+	SceneEntity* newEntity = (SceneEntity*)lua_topointer(L, 2);
+	int type;
+	if(lua_isnumber(L, 3)) {
+		type = lua_tointeger(L, 3);
 	} else {
 	} else {
-		suspensionStiffness = 20.0f;
+		type = 0;
 	}
 	}
-	Number suspensionDamping;
-	if(lua_isnumber(L, 10)) {
-		suspensionDamping = lua_tonumber(L, 10);
+	int group;
+	if(lua_isnumber(L, 4)) {
+		group = lua_tointeger(L, 4);
 	} else {
 	} else {
-		suspensionDamping = 1.0f;
+		group = 1;
 	}
 	}
-	Number suspensionCompression;
-	if(lua_isnumber(L, 11)) {
-		suspensionCompression = lua_tonumber(L, 11);
+	void *ptrRetVal = (void*)inst->addCollisionChild(newEntity, type, group);
+	if(ptrRetVal == NULL) {
+		lua_pushnil(L);
 	} else {
 	} else {
-		suspensionCompression = 4.0f;
+		lua_pushlightuserdata(L, ptrRetVal);
 	}
 	}
-	Number wheelFriction;
-	if(lua_isnumber(L, 12)) {
-		wheelFriction = lua_tonumber(L, 12);
+	return 1;
+}
+
+static int Physics3D_CollisionScene_trackCollision(lua_State *L) {
+	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
+	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
+	SceneEntity* newEntity = (SceneEntity*)lua_topointer(L, 2);
+	int type;
+	if(lua_isnumber(L, 3)) {
+		type = lua_tointeger(L, 3);
 	} else {
 	} else {
-		wheelFriction = 10000.0f;
+		type = 0;
 	}
 	}
-	Number rollInfluence;
-	if(lua_isnumber(L, 13)) {
-		rollInfluence = lua_tonumber(L, 13);
+	int group;
+	if(lua_isnumber(L, 4)) {
+		group = lua_tointeger(L, 4);
 	} else {
 	} else {
-		rollInfluence = 0.5f;
+		group = 1;
 	}
 	}
-	inst->addWheel(entity, connection, direction, axle, suspentionRestLength, wheelRadius, isFrontWheel, suspensionStiffness, suspensionDamping, suspensionCompression, wheelFriction, rollInfluence);
-	return 0;
+	void *ptrRetVal = (void*)inst->trackCollision(newEntity, type, group);
+	if(ptrRetVal == NULL) {
+		lua_pushnil(L);
+	} else {
+		lua_pushlightuserdata(L, ptrRetVal);
+	}
+	return 1;
 }
 }
 
 
-static int Physics3D_PhysicsVehicle_applyEngineForce(lua_State *L) {
+static int Physics3D_CollisionScene_removeCollision(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsVehicle *inst = (PhysicsVehicle*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TNUMBER);
-	Number force = lua_tonumber(L, 2);
-	luaL_checktype(L, 3, LUA_TNUMBER);
-	unsigned int wheelIndex = lua_tointeger(L, 3);
-	inst->applyEngineForce(force, wheelIndex);
+	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
+	SceneEntity* entity = (SceneEntity*)lua_topointer(L, 2);
+	inst->removeCollision(entity);
 	return 0;
 	return 0;
 }
 }
 
 
-static int Physics3D_PhysicsVehicle_setSteeringValue(lua_State *L) {
+static int Physics3D_CollisionScene_adjustForCollision(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsVehicle *inst = (PhysicsVehicle*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TNUMBER);
-	Number value = lua_tonumber(L, 2);
-	luaL_checktype(L, 3, LUA_TNUMBER);
-	unsigned int wheelIndex = lua_tointeger(L, 3);
-	inst->setSteeringValue(value, wheelIndex);
+	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
+	CollisionSceneEntity* collisionEntity = (CollisionSceneEntity*)lua_topointer(L, 2);
+	inst->adjustForCollision(collisionEntity);
 	return 0;
 	return 0;
 }
 }
 
 
-static int Physics3D_PhysicsVehicle_setBrake(lua_State *L) {
+static int Physics3D_delete_CollisionScene(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsVehicle *inst = (PhysicsVehicle*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TNUMBER);
-	Number value = lua_tonumber(L, 2);
-	luaL_checktype(L, 3, LUA_TNUMBER);
-	unsigned int wheelIndex = lua_tointeger(L, 3);
-	inst->setBrake(value, wheelIndex);
+	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	delete inst;
 	return 0;
 	return 0;
 }
 }
 
 
-static int Physics3D_PhysicsVehicle_warpVehicle(lua_State *L) {
+static int Physics3D_CollisionSceneEntity_get_lastPosition(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsVehicle *inst = (PhysicsVehicle*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
-	Vector3 position = *(Vector3*)lua_topointer(L, 2);
-	inst->warpVehicle(position);
-	return 0;
+	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
+	lua_pushlightuserdata(L, &inst->lastPosition);
+	return 1;
 }
 }
 
 
-static int Physics3D_PhysicsVehicle_Update(lua_State *L) {
+static int Physics3D_CollisionSceneEntity_get_enabled(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsVehicle *inst = (PhysicsVehicle*)lua_topointer(L, 1);
-	inst->Update();
-	return 0;
+	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
+	lua_pushboolean(L, inst->enabled);
+	return 1;
 }
 }
 
 
-static int Physics3D_delete_PhysicsVehicle(lua_State *L) {
+static int Physics3D_CollisionSceneEntity_set_enabled(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsVehicle *inst = (PhysicsVehicle*)lua_topointer(L, 1);
-	delete inst;
+	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
+	bool param = lua_toboolean(L, 2);
+	inst->enabled = param;
 	return 0;
 	return 0;
 }
 }
 
 
-static int Physics3D_PhysicsCharacter(lua_State *L) {
+static int Physics3D_CollisionSceneEntity(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	SceneEntity* entity = (SceneEntity*)lua_topointer(L, 1);
 	SceneEntity* entity = (SceneEntity*)lua_topointer(L, 1);
 	luaL_checktype(L, 2, LUA_TNUMBER);
 	luaL_checktype(L, 2, LUA_TNUMBER);
-	Number mass = lua_tonumber(L, 2);
-	luaL_checktype(L, 3, LUA_TNUMBER);
-	Number friction = lua_tonumber(L, 3);
-	luaL_checktype(L, 4, LUA_TNUMBER);
-	Number stepSize = lua_tonumber(L, 4);
-	PhysicsCharacter *inst = new PhysicsCharacter(entity, mass, friction, stepSize);
+	int type = lua_tointeger(L, 2);
+	CollisionSceneEntity *inst = new CollisionSceneEntity(entity, type);
 	lua_pushlightuserdata(L, (void*)inst);
 	lua_pushlightuserdata(L, (void*)inst);
 	return 1;
 	return 1;
 }
 }
 
 
-static int Physics3D_PhysicsCharacter_Update(lua_State *L) {
-	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
-	inst->Update();
-	return 0;
-}
-
-static int Physics3D_PhysicsCharacter_setWalkDirection(lua_State *L) {
-	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
-	Vector3 direction = *(Vector3*)lua_topointer(L, 2);
-	inst->setWalkDirection(direction);
-	return 0;
-}
-
-static int Physics3D_PhysicsCharacter_jump(lua_State *L) {
-	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
-	inst->jump();
-	return 0;
-}
-
-static int Physics3D_PhysicsCharacter_warpCharacter(lua_State *L) {
-	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
-	Vector3 position = *(Vector3*)lua_topointer(L, 2);
-	inst->warpCharacter(position);
-	return 0;
-}
-
-static int Physics3D_PhysicsCharacter_setJumpSpeed(lua_State *L) {
-	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TNUMBER);
-	Number jumpSpeed = lua_tonumber(L, 2);
-	inst->setJumpSpeed(jumpSpeed);
-	return 0;
-}
-
-static int Physics3D_PhysicsCharacter_setFallSpeed(lua_State *L) {
-	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TNUMBER);
-	Number fallSpeed = lua_tonumber(L, 2);
-	inst->setFallSpeed(fallSpeed);
-	return 0;
-}
-
-static int Physics3D_PhysicsCharacter_setMaxJumpHeight(lua_State *L) {
-	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TNUMBER);
-	Number maxJumpHeight = lua_tonumber(L, 2);
-	inst->setMaxJumpHeight(maxJumpHeight);
-	return 0;
-}
-
-static int Physics3D_PhysicsCharacter_onGround(lua_State *L) {
+static int Physics3D_CollisionSceneEntity_getSceneEntity(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
-	lua_pushboolean(L, inst->onGround());
+	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
+	void *ptrRetVal = (void*)inst->getSceneEntity();
+	if(ptrRetVal == NULL) {
+		lua_pushnil(L);
+	} else {
+		lua_pushlightuserdata(L, ptrRetVal);
+	}
 	return 1;
 	return 1;
 }
 }
 
 
-static int Physics3D_delete_PhysicsCharacter(lua_State *L) {
+static int Physics3D_CollisionSceneEntity_getType(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
-	delete inst;
-	return 0;
-}
-
-static int Physics3D_CollisionScene(lua_State *L) {
-	CollisionScene *inst = new CollisionScene();
-	lua_pushlightuserdata(L, (void*)inst);
+	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
+	lua_pushinteger(L, inst->getType());
 	return 1;
 	return 1;
 }
 }
 
 
-static int Physics3D_CollisionScene_initCollisionScene(lua_State *L) {
-	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
-	inst->initCollisionScene();
-	return 0;
-}
-
-static int Physics3D_CollisionScene_Update(lua_State *L) {
+static int Physics3D_CollisionSceneEntity_Update(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
 	inst->Update();
 	inst->Update();
 	return 0;
 	return 0;
 }
 }
 
 
-static int Physics3D_CollisionScene_getCollisionEntityByObject(lua_State *L) {
+static int Physics3D_CollisionSceneEntity_getConvexShape(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
-	btCollisionObject* collisionObject = (btCollisionObject*)lua_topointer(L, 2);
-	void *ptrRetVal = (void*)inst->getCollisionEntityByObject(collisionObject);
+	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
+	void *ptrRetVal = (void*)inst->getConvexShape();
 	if(ptrRetVal == NULL) {
 	if(ptrRetVal == NULL) {
 		lua_pushnil(L);
 		lua_pushnil(L);
 	} else {
 	} else {
@@ -338,36 +283,14 @@ static int Physics3D_CollisionScene_getCollisionEntityByObject(lua_State *L) {
 	return 1;
 	return 1;
 }
 }
 
 
-static int Physics3D_CollisionScene_getFirstEntityInRay(lua_State *L) {
-	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
-	Vector3 origin = *(Vector3*)lua_topointer(L, 2);
-	luaL_checktype(L, 3, LUA_TLIGHTUSERDATA);
-	Vector3 dest = *(Vector3*)lua_topointer(L, 3);
-	RayTestResult *retInst = new RayTestResult();
-	*retInst = inst->getFirstEntityInRay(origin, dest);
-	lua_pushlightuserdata(L, retInst);
-	return 1;
-}
-
-static int Physics3D_CollisionScene_enableCollision(lua_State *L) {
+static int Physics3D_CollisionSceneEntity_createCollisionShape(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
 	SceneEntity* entity = (SceneEntity*)lua_topointer(L, 2);
 	SceneEntity* entity = (SceneEntity*)lua_topointer(L, 2);
-	luaL_checktype(L, 3, LUA_TBOOLEAN);
-	bool val = lua_toboolean(L, 3);
-	inst->enableCollision(entity, val);
-	return 0;
-}
-
-static int Physics3D_CollisionScene_getCollisionByScreenEntity(lua_State *L) {
-	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
-	SceneEntity* ent = (SceneEntity*)lua_topointer(L, 2);
-	void *ptrRetVal = (void*)inst->getCollisionByScreenEntity(ent);
+	luaL_checktype(L, 3, LUA_TNUMBER);
+	int type = lua_tointeger(L, 3);
+	void *ptrRetVal = (void*)inst->createCollisionShape(entity, type);
 	if(ptrRetVal == NULL) {
 	if(ptrRetVal == NULL) {
 		lua_pushnil(L);
 		lua_pushnil(L);
 	} else {
 	} else {
@@ -376,57 +299,52 @@ static int Physics3D_CollisionScene_getCollisionByScreenEntity(lua_State *L) {
 	return 1;
 	return 1;
 }
 }
 
 
-static int Physics3D_CollisionScene_testCollision(lua_State *L) {
+static int Physics3D_delete_CollisionSceneEntity(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
-	SceneEntity* ent1 = (SceneEntity*)lua_topointer(L, 2);
-	luaL_checktype(L, 3, LUA_TLIGHTUSERDATA);
-	SceneEntity* ent2 = (SceneEntity*)lua_topointer(L, 3);
-	CollisionResult *retInst = new CollisionResult();
-	*retInst = inst->testCollision(ent1, ent2);
-	lua_pushlightuserdata(L, retInst);
+	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
+	delete inst;
+	return 0;
+}
+
+static int Physics3D_PhysicsScene(lua_State *L) {
+	PhysicsScene *inst = new PhysicsScene();
+	lua_pushlightuserdata(L, (void*)inst);
 	return 1;
 	return 1;
 }
 }
 
 
-static int Physics3D_CollisionScene_testCollisionOnCollisionChild(lua_State *L) {
+static int Physics3D_PhysicsScene_Update(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
-	CollisionSceneEntity* cEnt1 = (CollisionSceneEntity*)lua_topointer(L, 2);
-	luaL_checktype(L, 3, LUA_TLIGHTUSERDATA);
-	CollisionSceneEntity* cEnt2 = (CollisionSceneEntity*)lua_topointer(L, 3);
-	CollisionResult *retInst = new CollisionResult();
-	*retInst = inst->testCollisionOnCollisionChild(cEnt1, cEnt2);
-	lua_pushlightuserdata(L, retInst);
-	return 1;
+	PhysicsScene *inst = (PhysicsScene*)lua_topointer(L, 1);
+	inst->Update();
+	return 0;
 }
 }
 
 
-static int Physics3D_CollisionScene_testCollisionOnCollisionChild_Convex(lua_State *L) {
+static int Physics3D_PhysicsScene_removePhysicsChild(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	PhysicsScene *inst = (PhysicsScene*)lua_topointer(L, 1);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
-	CollisionSceneEntity* cEnt1 = (CollisionSceneEntity*)lua_topointer(L, 2);
-	luaL_checktype(L, 3, LUA_TLIGHTUSERDATA);
-	CollisionSceneEntity* cEnt2 = (CollisionSceneEntity*)lua_topointer(L, 3);
-	CollisionResult *retInst = new CollisionResult();
-	*retInst = inst->testCollisionOnCollisionChild_Convex(cEnt1, cEnt2);
-	lua_pushlightuserdata(L, retInst);
-	return 1;
+	SceneEntity* entity = (SceneEntity*)lua_topointer(L, 2);
+	inst->removePhysicsChild(entity);
+	return 0;
 }
 }
 
 
-static int Physics3D_CollisionScene_stopTrackingCollision(lua_State *L) {
+static int Physics3D_PhysicsScene_getPhysicsEntityBySceneEntity(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	PhysicsScene *inst = (PhysicsScene*)lua_topointer(L, 1);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
 	SceneEntity* entity = (SceneEntity*)lua_topointer(L, 2);
 	SceneEntity* entity = (SceneEntity*)lua_topointer(L, 2);
-	inst->stopTrackingCollision(entity);
-	return 0;
+	void *ptrRetVal = (void*)inst->getPhysicsEntityBySceneEntity(entity);
+	if(ptrRetVal == NULL) {
+		lua_pushnil(L);
+	} else {
+		lua_pushlightuserdata(L, ptrRetVal);
+	}
+	return 1;
 }
 }
 
 
-static int Physics3D_CollisionScene_addCollisionChild(lua_State *L) {
+static int Physics3D_PhysicsScene_addPhysicsChild(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	PhysicsScene *inst = (PhysicsScene*)lua_topointer(L, 1);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
 	SceneEntity* newEntity = (SceneEntity*)lua_topointer(L, 2);
 	SceneEntity* newEntity = (SceneEntity*)lua_topointer(L, 2);
 	int type;
 	int type;
@@ -435,13 +353,31 @@ static int Physics3D_CollisionScene_addCollisionChild(lua_State *L) {
 	} else {
 	} else {
 		type = 0;
 		type = 0;
 	}
 	}
-	int group;
+	Number mass;
 	if(lua_isnumber(L, 4)) {
 	if(lua_isnumber(L, 4)) {
-		group = lua_tointeger(L, 4);
+		mass = lua_tonumber(L, 4);
+	} else {
+		mass = 0.0f;
+	}
+	Number friction;
+	if(lua_isnumber(L, 5)) {
+		friction = lua_tonumber(L, 5);
+	} else {
+		friction = 1;
+	}
+	Number restitution;
+	if(lua_isnumber(L, 6)) {
+		restitution = lua_tonumber(L, 6);
+	} else {
+		restitution = 0;
+	}
+	int group;
+	if(lua_isnumber(L, 7)) {
+		group = lua_tointeger(L, 7);
 	} else {
 	} else {
 		group = 1;
 		group = 1;
 	}
 	}
-	void *ptrRetVal = (void*)inst->addCollisionChild(newEntity, type, group);
+	void *ptrRetVal = (void*)inst->addPhysicsChild(newEntity, type, mass, friction, restitution, group);
 	if(ptrRetVal == NULL) {
 	if(ptrRetVal == NULL) {
 		lua_pushnil(L);
 		lua_pushnil(L);
 	} else {
 	} else {
@@ -450,9 +386,9 @@ static int Physics3D_CollisionScene_addCollisionChild(lua_State *L) {
 	return 1;
 	return 1;
 }
 }
 
 
-static int Physics3D_CollisionScene_trackCollision(lua_State *L) {
+static int Physics3D_PhysicsScene_trackPhysicsChild(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	PhysicsScene *inst = (PhysicsScene*)lua_topointer(L, 1);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
 	SceneEntity* newEntity = (SceneEntity*)lua_topointer(L, 2);
 	SceneEntity* newEntity = (SceneEntity*)lua_topointer(L, 2);
 	int type;
 	int type;
@@ -461,81 +397,146 @@ static int Physics3D_CollisionScene_trackCollision(lua_State *L) {
 	} else {
 	} else {
 		type = 0;
 		type = 0;
 	}
 	}
-	int group;
+	Number mass;
 	if(lua_isnumber(L, 4)) {
 	if(lua_isnumber(L, 4)) {
-		group = lua_tointeger(L, 4);
+		mass = lua_tonumber(L, 4);
 	} else {
 	} else {
-		group = 1;
+		mass = 0.0f;
 	}
 	}
-	void *ptrRetVal = (void*)inst->trackCollision(newEntity, type, group);
-	if(ptrRetVal == NULL) {
-		lua_pushnil(L);
-	} else {
+	Number friction;
+	if(lua_isnumber(L, 5)) {
+		friction = lua_tonumber(L, 5);
+	} else {
+		friction = 1;
+	}
+	Number restitution;
+	if(lua_isnumber(L, 6)) {
+		restitution = lua_tonumber(L, 6);
+	} else {
+		restitution = 0;
+	}
+	int group;
+	if(lua_isnumber(L, 7)) {
+		group = lua_tointeger(L, 7);
+	} else {
+		group = 1;
+	}
+	void *ptrRetVal = (void*)inst->trackPhysicsChild(newEntity, type, mass, friction, restitution, group);
+	if(ptrRetVal == NULL) {
+		lua_pushnil(L);
+	} else {
 		lua_pushlightuserdata(L, ptrRetVal);
 		lua_pushlightuserdata(L, ptrRetVal);
 	}
 	}
 	return 1;
 	return 1;
 }
 }
 
 
-static int Physics3D_CollisionScene_removeCollision(lua_State *L) {
+static int Physics3D_PhysicsScene_addCharacterChild(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	PhysicsScene *inst = (PhysicsScene*)lua_topointer(L, 1);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
-	SceneEntity* entity = (SceneEntity*)lua_topointer(L, 2);
-	inst->removeCollision(entity);
-	return 0;
+	SceneEntity* newEntity = (SceneEntity*)lua_topointer(L, 2);
+	luaL_checktype(L, 3, LUA_TNUMBER);
+	Number mass = lua_tonumber(L, 3);
+	luaL_checktype(L, 4, LUA_TNUMBER);
+	Number friction = lua_tonumber(L, 4);
+	luaL_checktype(L, 5, LUA_TNUMBER);
+	Number stepSize = lua_tonumber(L, 5);
+	int group;
+	if(lua_isnumber(L, 6)) {
+		group = lua_tointeger(L, 6);
+	} else {
+		group = 1;
+	}
+	void *ptrRetVal = (void*)inst->addCharacterChild(newEntity, mass, friction, stepSize, group);
+	if(ptrRetVal == NULL) {
+		lua_pushnil(L);
+	} else {
+		lua_pushlightuserdata(L, ptrRetVal);
+	}
+	return 1;
 }
 }
 
 
-static int Physics3D_CollisionScene_adjustForCollision(lua_State *L) {
+static int Physics3D_PhysicsScene_removeCharacterChild(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	PhysicsScene *inst = (PhysicsScene*)lua_topointer(L, 1);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
-	CollisionSceneEntity* collisionEntity = (CollisionSceneEntity*)lua_topointer(L, 2);
-	inst->adjustForCollision(collisionEntity);
+	PhysicsCharacter* character = (PhysicsCharacter*)lua_topointer(L, 2);
+	inst->removeCharacterChild(character);
 	return 0;
 	return 0;
 }
 }
 
 
-static int Physics3D_delete_CollisionScene(lua_State *L) {
+static int Physics3D_PhysicsScene_addVehicleChild(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
-	delete inst;
-	return 0;
+	PhysicsScene *inst = (PhysicsScene*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
+	SceneEntity* newEntity = (SceneEntity*)lua_topointer(L, 2);
+	luaL_checktype(L, 3, LUA_TNUMBER);
+	Number mass = lua_tonumber(L, 3);
+	luaL_checktype(L, 4, LUA_TNUMBER);
+	Number friction = lua_tonumber(L, 4);
+	int group;
+	if(lua_isnumber(L, 5)) {
+		group = lua_tointeger(L, 5);
+	} else {
+		group = 1;
+	}
+	void *ptrRetVal = (void*)inst->addVehicleChild(newEntity, mass, friction, group);
+	if(ptrRetVal == NULL) {
+		lua_pushnil(L);
+	} else {
+		lua_pushlightuserdata(L, ptrRetVal);
+	}
+	return 1;
 }
 }
 
 
-static int Physics3D_CollisionSceneEntity_get_lastPosition(lua_State *L) {
+static int Physics3D_delete_PhysicsScene(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
-	lua_pushlightuserdata(L, &inst->lastPosition);
-	return 1;
+	PhysicsScene *inst = (PhysicsScene*)lua_topointer(L, 1);
+	delete inst;
+	return 0;
 }
 }
 
 
-static int Physics3D_CollisionSceneEntity_get_enabled(lua_State *L) {
+static int Physics3D_PhysicsSceneEntity_get_enabled(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
+	PhysicsSceneEntity *inst = (PhysicsSceneEntity*)lua_topointer(L, 1);
 	lua_pushboolean(L, inst->enabled);
 	lua_pushboolean(L, inst->enabled);
 	return 1;
 	return 1;
 }
 }
 
 
-static int Physics3D_CollisionSceneEntity_set_enabled(lua_State *L) {
+static int Physics3D_PhysicsSceneEntity_set_enabled(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
+	PhysicsSceneEntity *inst = (PhysicsSceneEntity*)lua_topointer(L, 1);
 	bool param = lua_toboolean(L, 2);
 	bool param = lua_toboolean(L, 2);
 	inst->enabled = param;
 	inst->enabled = param;
 	return 0;
 	return 0;
 }
 }
 
 
-static int Physics3D_CollisionSceneEntity(lua_State *L) {
+static int Physics3D_PhysicsSceneEntity(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	SceneEntity* entity = (SceneEntity*)lua_topointer(L, 1);
 	SceneEntity* entity = (SceneEntity*)lua_topointer(L, 1);
 	luaL_checktype(L, 2, LUA_TNUMBER);
 	luaL_checktype(L, 2, LUA_TNUMBER);
 	int type = lua_tointeger(L, 2);
 	int type = lua_tointeger(L, 2);
-	CollisionSceneEntity *inst = new CollisionSceneEntity(entity, type);
+	luaL_checktype(L, 3, LUA_TNUMBER);
+	Number mass = lua_tonumber(L, 3);
+	luaL_checktype(L, 4, LUA_TNUMBER);
+	Number friction = lua_tonumber(L, 4);
+	luaL_checktype(L, 5, LUA_TNUMBER);
+	Number restitution = lua_tonumber(L, 5);
+	PhysicsSceneEntity *inst = new PhysicsSceneEntity(entity, type, mass, friction, restitution);
 	lua_pushlightuserdata(L, (void*)inst);
 	lua_pushlightuserdata(L, (void*)inst);
 	return 1;
 	return 1;
 }
 }
 
 
-static int Physics3D_CollisionSceneEntity_getSceneEntity(lua_State *L) {
+static int Physics3D_PhysicsSceneEntity_Update(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
+	PhysicsSceneEntity *inst = (PhysicsSceneEntity*)lua_topointer(L, 1);
+	inst->Update();
+	return 0;
+}
+
+static int Physics3D_PhysicsSceneEntity_getSceneEntity(lua_State *L) {
+	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
+	PhysicsSceneEntity *inst = (PhysicsSceneEntity*)lua_topointer(L, 1);
 	void *ptrRetVal = (void*)inst->getSceneEntity();
 	void *ptrRetVal = (void*)inst->getSceneEntity();
 	if(ptrRetVal == NULL) {
 	if(ptrRetVal == NULL) {
 		lua_pushnil(L);
 		lua_pushnil(L);
@@ -545,241 +546,240 @@ static int Physics3D_CollisionSceneEntity_getSceneEntity(lua_State *L) {
 	return 1;
 	return 1;
 }
 }
 
 
-static int Physics3D_CollisionSceneEntity_getType(lua_State *L) {
+static int Physics3D_PhysicsSceneEntity_setFriction(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
+	PhysicsSceneEntity *inst = (PhysicsSceneEntity*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TNUMBER);
+	Number friction = lua_tonumber(L, 2);
+	inst->setFriction(friction);
+	return 0;
+}
+
+static int Physics3D_PhysicsSceneEntity_getType(lua_State *L) {
+	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
+	PhysicsSceneEntity *inst = (PhysicsSceneEntity*)lua_topointer(L, 1);
 	lua_pushinteger(L, inst->getType());
 	lua_pushinteger(L, inst->getType());
 	return 1;
 	return 1;
 }
 }
 
 
-static int Physics3D_CollisionSceneEntity_Update(lua_State *L) {
+static int Physics3D_delete_PhysicsSceneEntity(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
-	inst->Update();
+	PhysicsSceneEntity *inst = (PhysicsSceneEntity*)lua_topointer(L, 1);
+	delete inst;
 	return 0;
 	return 0;
 }
 }
 
 
-static int Physics3D_CollisionSceneEntity_getConvexShape(lua_State *L) {
+static int Physics3D_PhysicsVehicle_get_tuning(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
-	void *ptrRetVal = (void*)inst->getConvexShape();
-	if(ptrRetVal == NULL) {
-		lua_pushnil(L);
-	} else {
-		lua_pushlightuserdata(L, ptrRetVal);
-	}
+	PhysicsVehicle *inst = (PhysicsVehicle*)lua_topointer(L, 1);
+	lua_pushlightuserdata(L, &inst->tuning);
 	return 1;
 	return 1;
 }
 }
 
 
-static int Physics3D_CollisionSceneEntity_createCollisionShape(lua_State *L) {
+static int Physics3D_PhysicsVehicle(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
+	SceneEntity* entity = (SceneEntity*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TNUMBER);
+	Number mass = lua_tonumber(L, 2);
+	luaL_checktype(L, 3, LUA_TNUMBER);
+	Number friction = lua_tonumber(L, 3);
+	luaL_checktype(L, 4, LUA_TLIGHTUSERDATA);
+	btDefaultVehicleRaycaster* rayCaster = (btDefaultVehicleRaycaster*)lua_topointer(L, 4);
+	PhysicsVehicle *inst = new PhysicsVehicle(entity, mass, friction, rayCaster);
+	lua_pushlightuserdata(L, (void*)inst);
+	return 1;
+}
+
+static int Physics3D_PhysicsVehicle_addWheel(lua_State *L) {
+	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
+	PhysicsVehicle *inst = (PhysicsVehicle*)lua_topointer(L, 1);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
 	SceneEntity* entity = (SceneEntity*)lua_topointer(L, 2);
 	SceneEntity* entity = (SceneEntity*)lua_topointer(L, 2);
-	luaL_checktype(L, 3, LUA_TNUMBER);
-	int type = lua_tointeger(L, 3);
-	void *ptrRetVal = (void*)inst->createCollisionShape(entity, type);
-	if(ptrRetVal == NULL) {
-		lua_pushnil(L);
+	luaL_checktype(L, 3, LUA_TLIGHTUSERDATA);
+	Vector3 connection = *(Vector3*)lua_topointer(L, 3);
+	luaL_checktype(L, 4, LUA_TLIGHTUSERDATA);
+	Vector3 direction = *(Vector3*)lua_topointer(L, 4);
+	luaL_checktype(L, 5, LUA_TLIGHTUSERDATA);
+	Vector3 axle = *(Vector3*)lua_topointer(L, 5);
+	luaL_checktype(L, 6, LUA_TNUMBER);
+	Number suspentionRestLength = lua_tonumber(L, 6);
+	luaL_checktype(L, 7, LUA_TNUMBER);
+	Number wheelRadius = lua_tonumber(L, 7);
+	luaL_checktype(L, 8, LUA_TBOOLEAN);
+	bool isFrontWheel = lua_toboolean(L, 8);
+	Number suspensionStiffness;
+	if(lua_isnumber(L, 9)) {
+		suspensionStiffness = lua_tonumber(L, 9);
 	} else {
 	} else {
-		lua_pushlightuserdata(L, ptrRetVal);
+		suspensionStiffness = 20.0f;
 	}
 	}
-	return 1;
+	Number suspensionDamping;
+	if(lua_isnumber(L, 10)) {
+		suspensionDamping = lua_tonumber(L, 10);
+	} else {
+		suspensionDamping = 1.0f;
+	}
+	Number suspensionCompression;
+	if(lua_isnumber(L, 11)) {
+		suspensionCompression = lua_tonumber(L, 11);
+	} else {
+		suspensionCompression = 4.0f;
+	}
+	Number wheelFriction;
+	if(lua_isnumber(L, 12)) {
+		wheelFriction = lua_tonumber(L, 12);
+	} else {
+		wheelFriction = 10000.0f;
+	}
+	Number rollInfluence;
+	if(lua_isnumber(L, 13)) {
+		rollInfluence = lua_tonumber(L, 13);
+	} else {
+		rollInfluence = 0.5f;
+	}
+	inst->addWheel(entity, connection, direction, axle, suspentionRestLength, wheelRadius, isFrontWheel, suspensionStiffness, suspensionDamping, suspensionCompression, wheelFriction, rollInfluence);
+	return 0;
 }
 }
 
 
-static int Physics3D_delete_CollisionSceneEntity(lua_State *L) {
+static int Physics3D_PhysicsVehicle_applyEngineForce(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
+	PhysicsVehicle *inst = (PhysicsVehicle*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TNUMBER);
+	Number force = lua_tonumber(L, 2);
+	luaL_checktype(L, 3, LUA_TNUMBER);
+	unsigned int wheelIndex = lua_tointeger(L, 3);
+	inst->applyEngineForce(force, wheelIndex);
+	return 0;
+}
+
+static int Physics3D_PhysicsVehicle_setSteeringValue(lua_State *L) {
+	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
+	PhysicsVehicle *inst = (PhysicsVehicle*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TNUMBER);
+	Number value = lua_tonumber(L, 2);
+	luaL_checktype(L, 3, LUA_TNUMBER);
+	unsigned int wheelIndex = lua_tointeger(L, 3);
+	inst->setSteeringValue(value, wheelIndex);
+	return 0;
+}
+
+static int Physics3D_PhysicsVehicle_setBrake(lua_State *L) {
+	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
+	PhysicsVehicle *inst = (PhysicsVehicle*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TNUMBER);
+	Number value = lua_tonumber(L, 2);
+	luaL_checktype(L, 3, LUA_TNUMBER);
+	unsigned int wheelIndex = lua_tointeger(L, 3);
+	inst->setBrake(value, wheelIndex);
+	return 0;
+}
+
+static int Physics3D_PhysicsVehicle_warpVehicle(lua_State *L) {
+	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
+	PhysicsVehicle *inst = (PhysicsVehicle*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
+	Vector3 position = *(Vector3*)lua_topointer(L, 2);
+	inst->warpVehicle(position);
+	return 0;
+}
+
+static int Physics3D_PhysicsVehicle_Update(lua_State *L) {
+	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
+	PhysicsVehicle *inst = (PhysicsVehicle*)lua_topointer(L, 1);
+	inst->Update();
+	return 0;
+}
+
+static int Physics3D_delete_PhysicsVehicle(lua_State *L) {
+	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
+	PhysicsVehicle *inst = (PhysicsVehicle*)lua_topointer(L, 1);
 	delete inst;
 	delete inst;
 	return 0;
 	return 0;
 }
 }
 
 
-static int Physics3D_PhysicsScene(lua_State *L) {
-	PhysicsScene *inst = new PhysicsScene();
+static int Physics3D_PhysicsCharacter(lua_State *L) {
+	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
+	SceneEntity* entity = (SceneEntity*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TNUMBER);
+	Number mass = lua_tonumber(L, 2);
+	luaL_checktype(L, 3, LUA_TNUMBER);
+	Number friction = lua_tonumber(L, 3);
+	luaL_checktype(L, 4, LUA_TNUMBER);
+	Number stepSize = lua_tonumber(L, 4);
+	PhysicsCharacter *inst = new PhysicsCharacter(entity, mass, friction, stepSize);
 	lua_pushlightuserdata(L, (void*)inst);
 	lua_pushlightuserdata(L, (void*)inst);
 	return 1;
 	return 1;
 }
 }
 
 
-static int Physics3D_PhysicsScene_Update(lua_State *L) {
+static int Physics3D_PhysicsCharacter_Update(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsScene *inst = (PhysicsScene*)lua_topointer(L, 1);
+	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
 	inst->Update();
 	inst->Update();
 	return 0;
 	return 0;
 }
 }
 
 
-static int Physics3D_PhysicsScene_removePhysicsChild(lua_State *L) {
+static int Physics3D_PhysicsCharacter_setWalkDirection(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsScene *inst = (PhysicsScene*)lua_topointer(L, 1);
+	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
-	SceneEntity* entity = (SceneEntity*)lua_topointer(L, 2);
-	inst->removePhysicsChild(entity);
+	Vector3 direction = *(Vector3*)lua_topointer(L, 2);
+	inst->setWalkDirection(direction);
 	return 0;
 	return 0;
 }
 }
 
 
-static int Physics3D_PhysicsScene_getPhysicsEntityBySceneEntity(lua_State *L) {
+static int Physics3D_PhysicsCharacter_jump(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsScene *inst = (PhysicsScene*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
-	SceneEntity* entity = (SceneEntity*)lua_topointer(L, 2);
-	void *ptrRetVal = (void*)inst->getPhysicsEntityBySceneEntity(entity);
-	if(ptrRetVal == NULL) {
-		lua_pushnil(L);
-	} else {
-		lua_pushlightuserdata(L, ptrRetVal);
-	}
-	return 1;
+	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
+	inst->jump();
+	return 0;
 }
 }
 
 
-static int Physics3D_PhysicsScene_addPhysicsChild(lua_State *L) {
+static int Physics3D_PhysicsCharacter_warpCharacter(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsScene *inst = (PhysicsScene*)lua_topointer(L, 1);
+	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
-	SceneEntity* newEntity = (SceneEntity*)lua_topointer(L, 2);
-	int type;
-	if(lua_isnumber(L, 3)) {
-		type = lua_tointeger(L, 3);
-	} else {
-		type = 0;
-	}
-	Number mass;
-	if(lua_isnumber(L, 4)) {
-		mass = lua_tonumber(L, 4);
-	} else {
-		mass = 0.0f;
-	}
-	Number friction;
-	if(lua_isnumber(L, 5)) {
-		friction = lua_tonumber(L, 5);
-	} else {
-		friction = 1;
-	}
-	Number restitution;
-	if(lua_isnumber(L, 6)) {
-		restitution = lua_tonumber(L, 6);
-	} else {
-		restitution = 0;
-	}
-	int group;
-	if(lua_isnumber(L, 7)) {
-		group = lua_tointeger(L, 7);
-	} else {
-		group = 1;
-	}
-	void *ptrRetVal = (void*)inst->addPhysicsChild(newEntity, type, mass, friction, restitution, group);
-	if(ptrRetVal == NULL) {
-		lua_pushnil(L);
-	} else {
-		lua_pushlightuserdata(L, ptrRetVal);
-	}
-	return 1;
+	Vector3 position = *(Vector3*)lua_topointer(L, 2);
+	inst->warpCharacter(position);
+	return 0;
 }
 }
 
 
-static int Physics3D_PhysicsScene_trackPhysicsChild(lua_State *L) {
+static int Physics3D_PhysicsCharacter_setJumpSpeed(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsScene *inst = (PhysicsScene*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
-	SceneEntity* newEntity = (SceneEntity*)lua_topointer(L, 2);
-	int type;
-	if(lua_isnumber(L, 3)) {
-		type = lua_tointeger(L, 3);
-	} else {
-		type = 0;
-	}
-	Number mass;
-	if(lua_isnumber(L, 4)) {
-		mass = lua_tonumber(L, 4);
-	} else {
-		mass = 0.0f;
-	}
-	Number friction;
-	if(lua_isnumber(L, 5)) {
-		friction = lua_tonumber(L, 5);
-	} else {
-		friction = 1;
-	}
-	Number restitution;
-	if(lua_isnumber(L, 6)) {
-		restitution = lua_tonumber(L, 6);
-	} else {
-		restitution = 0;
-	}
-	int group;
-	if(lua_isnumber(L, 7)) {
-		group = lua_tointeger(L, 7);
-	} else {
-		group = 1;
-	}
-	void *ptrRetVal = (void*)inst->trackPhysicsChild(newEntity, type, mass, friction, restitution, group);
-	if(ptrRetVal == NULL) {
-		lua_pushnil(L);
-	} else {
-		lua_pushlightuserdata(L, ptrRetVal);
-	}
-	return 1;
+	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TNUMBER);
+	Number jumpSpeed = lua_tonumber(L, 2);
+	inst->setJumpSpeed(jumpSpeed);
+	return 0;
 }
 }
 
 
-static int Physics3D_PhysicsScene_addCharacterChild(lua_State *L) {
+static int Physics3D_PhysicsCharacter_setFallSpeed(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsScene *inst = (PhysicsScene*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
-	SceneEntity* newEntity = (SceneEntity*)lua_topointer(L, 2);
-	luaL_checktype(L, 3, LUA_TNUMBER);
-	Number mass = lua_tonumber(L, 3);
-	luaL_checktype(L, 4, LUA_TNUMBER);
-	Number friction = lua_tonumber(L, 4);
-	luaL_checktype(L, 5, LUA_TNUMBER);
-	Number stepSize = lua_tonumber(L, 5);
-	int group;
-	if(lua_isnumber(L, 6)) {
-		group = lua_tointeger(L, 6);
-	} else {
-		group = 1;
-	}
-	void *ptrRetVal = (void*)inst->addCharacterChild(newEntity, mass, friction, stepSize, group);
-	if(ptrRetVal == NULL) {
-		lua_pushnil(L);
-	} else {
-		lua_pushlightuserdata(L, ptrRetVal);
-	}
-	return 1;
+	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TNUMBER);
+	Number fallSpeed = lua_tonumber(L, 2);
+	inst->setFallSpeed(fallSpeed);
+	return 0;
 }
 }
 
 
-static int Physics3D_PhysicsScene_removeCharacterChild(lua_State *L) {
+static int Physics3D_PhysicsCharacter_setMaxJumpHeight(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsScene *inst = (PhysicsScene*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
-	PhysicsCharacter* character = (PhysicsCharacter*)lua_topointer(L, 2);
-	inst->removeCharacterChild(character);
+	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TNUMBER);
+	Number maxJumpHeight = lua_tonumber(L, 2);
+	inst->setMaxJumpHeight(maxJumpHeight);
 	return 0;
 	return 0;
 }
 }
 
 
-static int Physics3D_PhysicsScene_addVehicleChild(lua_State *L) {
+static int Physics3D_PhysicsCharacter_onGround(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsScene *inst = (PhysicsScene*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
-	SceneEntity* newEntity = (SceneEntity*)lua_topointer(L, 2);
-	luaL_checktype(L, 3, LUA_TNUMBER);
-	Number mass = lua_tonumber(L, 3);
-	luaL_checktype(L, 4, LUA_TNUMBER);
-	Number friction = lua_tonumber(L, 4);
-	int group;
-	if(lua_isnumber(L, 5)) {
-		group = lua_tointeger(L, 5);
-	} else {
-		group = 1;
-	}
-	void *ptrRetVal = (void*)inst->addVehicleChild(newEntity, mass, friction, group);
-	if(ptrRetVal == NULL) {
-		lua_pushnil(L);
-	} else {
-		lua_pushlightuserdata(L, ptrRetVal);
-	}
+	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
+	lua_pushboolean(L, inst->onGround());
 	return 1;
 	return 1;
 }
 }
 
 
-static int Physics3D_delete_PhysicsScene(lua_State *L) {
+static int Physics3D_delete_PhysicsCharacter(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsScene *inst = (PhysicsScene*)lua_topointer(L, 1);
+	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
 	delete inst;
 	delete inst;
 	return 0;
 	return 0;
 }
 }

+ 28 - 28
Modules/Bindings/3DPhysics/Source/Physics3DLUA.cpp

@@ -7,34 +7,7 @@ using namespace Polycode;
 int luaopen_Physics3D(lua_State *L) {
 int luaopen_Physics3D(lua_State *L) {
 CoreServices *inst = (CoreServices*)lua_topointer(L, 1);
 CoreServices *inst = (CoreServices*)lua_topointer(L, 1);
 CoreServices::setInstance(inst);
 CoreServices::setInstance(inst);
-	static const struct luaL_reg physics3dLib [] = {		{"PhysicsSceneEntity_get_enabled", Physics3D_PhysicsSceneEntity_get_enabled},
-		{"PhysicsSceneEntity_set_enabled", Physics3D_PhysicsSceneEntity_set_enabled},
-		{"PhysicsSceneEntity", Physics3D_PhysicsSceneEntity},
-		{"PhysicsSceneEntity_Update", Physics3D_PhysicsSceneEntity_Update},
-		{"PhysicsSceneEntity_getSceneEntity", Physics3D_PhysicsSceneEntity_getSceneEntity},
-		{"PhysicsSceneEntity_setFriction", Physics3D_PhysicsSceneEntity_setFriction},
-		{"PhysicsSceneEntity_getType", Physics3D_PhysicsSceneEntity_getType},
-		{"delete_PhysicsSceneEntity", Physics3D_delete_PhysicsSceneEntity},
-		{"PhysicsVehicle_get_tuning", Physics3D_PhysicsVehicle_get_tuning},
-		{"PhysicsVehicle", Physics3D_PhysicsVehicle},
-		{"PhysicsVehicle_addWheel", Physics3D_PhysicsVehicle_addWheel},
-		{"PhysicsVehicle_applyEngineForce", Physics3D_PhysicsVehicle_applyEngineForce},
-		{"PhysicsVehicle_setSteeringValue", Physics3D_PhysicsVehicle_setSteeringValue},
-		{"PhysicsVehicle_setBrake", Physics3D_PhysicsVehicle_setBrake},
-		{"PhysicsVehicle_warpVehicle", Physics3D_PhysicsVehicle_warpVehicle},
-		{"PhysicsVehicle_Update", Physics3D_PhysicsVehicle_Update},
-		{"delete_PhysicsVehicle", Physics3D_delete_PhysicsVehicle},
-		{"PhysicsCharacter", Physics3D_PhysicsCharacter},
-		{"PhysicsCharacter_Update", Physics3D_PhysicsCharacter_Update},
-		{"PhysicsCharacter_setWalkDirection", Physics3D_PhysicsCharacter_setWalkDirection},
-		{"PhysicsCharacter_jump", Physics3D_PhysicsCharacter_jump},
-		{"PhysicsCharacter_warpCharacter", Physics3D_PhysicsCharacter_warpCharacter},
-		{"PhysicsCharacter_setJumpSpeed", Physics3D_PhysicsCharacter_setJumpSpeed},
-		{"PhysicsCharacter_setFallSpeed", Physics3D_PhysicsCharacter_setFallSpeed},
-		{"PhysicsCharacter_setMaxJumpHeight", Physics3D_PhysicsCharacter_setMaxJumpHeight},
-		{"PhysicsCharacter_onGround", Physics3D_PhysicsCharacter_onGround},
-		{"delete_PhysicsCharacter", Physics3D_delete_PhysicsCharacter},
-		{"CollisionScene", Physics3D_CollisionScene},
+	static const struct luaL_reg physics3dLib [] = {		{"CollisionScene", Physics3D_CollisionScene},
 		{"CollisionScene_initCollisionScene", Physics3D_CollisionScene_initCollisionScene},
 		{"CollisionScene_initCollisionScene", Physics3D_CollisionScene_initCollisionScene},
 		{"CollisionScene_Update", Physics3D_CollisionScene_Update},
 		{"CollisionScene_Update", Physics3D_CollisionScene_Update},
 		{"CollisionScene_getCollisionEntityByObject", Physics3D_CollisionScene_getCollisionEntityByObject},
 		{"CollisionScene_getCollisionEntityByObject", Physics3D_CollisionScene_getCollisionEntityByObject},
@@ -70,6 +43,33 @@ CoreServices::setInstance(inst);
 		{"PhysicsScene_removeCharacterChild", Physics3D_PhysicsScene_removeCharacterChild},
 		{"PhysicsScene_removeCharacterChild", Physics3D_PhysicsScene_removeCharacterChild},
 		{"PhysicsScene_addVehicleChild", Physics3D_PhysicsScene_addVehicleChild},
 		{"PhysicsScene_addVehicleChild", Physics3D_PhysicsScene_addVehicleChild},
 		{"delete_PhysicsScene", Physics3D_delete_PhysicsScene},
 		{"delete_PhysicsScene", Physics3D_delete_PhysicsScene},
+		{"PhysicsSceneEntity_get_enabled", Physics3D_PhysicsSceneEntity_get_enabled},
+		{"PhysicsSceneEntity_set_enabled", Physics3D_PhysicsSceneEntity_set_enabled},
+		{"PhysicsSceneEntity", Physics3D_PhysicsSceneEntity},
+		{"PhysicsSceneEntity_Update", Physics3D_PhysicsSceneEntity_Update},
+		{"PhysicsSceneEntity_getSceneEntity", Physics3D_PhysicsSceneEntity_getSceneEntity},
+		{"PhysicsSceneEntity_setFriction", Physics3D_PhysicsSceneEntity_setFriction},
+		{"PhysicsSceneEntity_getType", Physics3D_PhysicsSceneEntity_getType},
+		{"delete_PhysicsSceneEntity", Physics3D_delete_PhysicsSceneEntity},
+		{"PhysicsVehicle_get_tuning", Physics3D_PhysicsVehicle_get_tuning},
+		{"PhysicsVehicle", Physics3D_PhysicsVehicle},
+		{"PhysicsVehicle_addWheel", Physics3D_PhysicsVehicle_addWheel},
+		{"PhysicsVehicle_applyEngineForce", Physics3D_PhysicsVehicle_applyEngineForce},
+		{"PhysicsVehicle_setSteeringValue", Physics3D_PhysicsVehicle_setSteeringValue},
+		{"PhysicsVehicle_setBrake", Physics3D_PhysicsVehicle_setBrake},
+		{"PhysicsVehicle_warpVehicle", Physics3D_PhysicsVehicle_warpVehicle},
+		{"PhysicsVehicle_Update", Physics3D_PhysicsVehicle_Update},
+		{"delete_PhysicsVehicle", Physics3D_delete_PhysicsVehicle},
+		{"PhysicsCharacter", Physics3D_PhysicsCharacter},
+		{"PhysicsCharacter_Update", Physics3D_PhysicsCharacter_Update},
+		{"PhysicsCharacter_setWalkDirection", Physics3D_PhysicsCharacter_setWalkDirection},
+		{"PhysicsCharacter_jump", Physics3D_PhysicsCharacter_jump},
+		{"PhysicsCharacter_warpCharacter", Physics3D_PhysicsCharacter_warpCharacter},
+		{"PhysicsCharacter_setJumpSpeed", Physics3D_PhysicsCharacter_setJumpSpeed},
+		{"PhysicsCharacter_setFallSpeed", Physics3D_PhysicsCharacter_setFallSpeed},
+		{"PhysicsCharacter_setMaxJumpHeight", Physics3D_PhysicsCharacter_setMaxJumpHeight},
+		{"PhysicsCharacter_onGround", Physics3D_PhysicsCharacter_onGround},
+		{"delete_PhysicsCharacter", Physics3D_delete_PhysicsCharacter},
 		{NULL, NULL}
 		{NULL, NULL}
 	};
 	};
 	luaL_openlib(L, "Physics3D", physics3dLib, 0);
 	luaL_openlib(L, "Physics3D", physics3dLib, 0);

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff