Jelajahi Sumber

Fixed shadows not displaying properly when objects are moved

Ivan Safrin 14 tahun lalu
induk
melakukan
a25c546297

TEMPAT SAMPAH
Assets/Default asset pack/default.pak


+ 4 - 4
Assets/Default asset pack/default/DefaultShaderShadows.vert

@@ -6,7 +6,7 @@ varying vec4 ShadowCoord0;
 varying vec4 ShadowCoord1;
 uniform mat4 shadowMatrix0;
 uniform mat4 shadowMatrix1;
-
+uniform mat4 modelMatrix;
 
 void main() {
 	normal = gl_NormalMatrix * gl_Normal;
@@ -14,9 +14,9 @@ void main() {
 	pos = gl_ModelViewMatrix * gl_Vertex;
 	rawpos = gl_Vertex;
 	
-	ShadowCoord0 = shadowMatrix0 * gl_Vertex;	
-	ShadowCoord1 = shadowMatrix1 * gl_Vertex;		
-	
+	ShadowCoord0 = shadowMatrix0 * modelMatrix * gl_Vertex;	
+	ShadowCoord1 = shadowMatrix1 * modelMatrix * gl_Vertex;		
+			
     vertexColor = gl_Color;
 	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
 }

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

@@ -1,87 +1,87 @@
-require "Polycode/Event"
-require "Polycode/Font"
-require "Polycode/Tween"
-require "Polycode/BezierPathTween"
-require "Polycode/QuaternionTween"
-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/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/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/Mesh"
+require "Polycode/VertexBuffer"
+require "Polycode/PolycodeModule"
+require "Polycode/ObjectEntry"
+require "Polycode/Particle"
 require "Polycode/ScreenParticleEmitter"
 require "Polycode/SceneParticleEmitter"
 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/Scene"
 require "Polycode/SceneEntity"
-require "Polycode/Mesh"
-require "Polycode/VertexBuffer"
-require "Polycode/Shader"
-require "Polycode/ShaderBinding"
-require "Polycode/PolycodeModule"
+require "Polycode/SceneLabel"
+require "Polycode/SceneLight"
+require "Polycode/SceneLine"
 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/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/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/BoneTrack"
 require "Polycode/Skeleton"
-require "Polycode/Vector3"
+require "Polycode/Sound"
+require "Polycode/SoundManager"
+require "Polycode/String"
 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/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/Tween"
+require "Polycode/BezierPathTween"
+require "Polycode/QuaternionTween"
+require "Polycode/TweenManager"
 require "Polycode/Vector2"
-require "Polycode/Bone"
-require "Polycode/SceneLight"
-require "Polycode/Logger"
-require "Polycode/Scene"
+require "Polycode/Vector3"
+require "Polycode/Vertex"

+ 16 - 0
Bindings/Contents/LUA/API/Polycode/Renderer.lua

@@ -269,6 +269,22 @@ function Renderer:setModelviewMatrix(m)
 	local retVal = Polycore.Renderer_setModelviewMatrix(self.__ptr, m.__ptr)
 end
 
+function Renderer:setCurrentModelMatrix(m)
+	local retVal = Polycore.Renderer_setCurrentModelMatrix(self.__ptr, m.__ptr)
+end
+
+function Renderer:getCurrentModelMatrix()
+	local retVal =  Polycore.Renderer_getCurrentModelMatrix(self.__ptr)
+	if retVal == nil then return nil end
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
 function Renderer:setBlendingMode(bl_endingMode)
 	local retVal = Polycore.Renderer_setBlendingMode(self.__ptr, bl_endingMode)
 end

File diff ditekan karena terlalu besar
+ 470 - 513
Bindings/Contents/LUA/Include/PolycodeLUAWrappers.h


File diff ditekan karena terlalu besar
+ 460 - 629
Bindings/Contents/LUA/Source/PolycodeLUA.cpp


+ 4 - 0
Core/Contents/Include/PolyRenderer.h

@@ -144,6 +144,9 @@ namespace Polycode {
 		virtual void multModelviewMatrix(Matrix4 m) = 0;
 		virtual void setModelviewMatrix(Matrix4 m) = 0;
 		
+		void setCurrentModelMatrix(Matrix4 m) { currentModelMatrix = m; }
+		Matrix4 getCurrentModelMatrix() { return currentModelMatrix; }
+		
 		virtual void setBlendingMode(int blendingMode) = 0;	
 			
 		virtual void applyMaterial(Material *material, ShaderBinding *localOptions, unsigned int shaderIndex) = 0;
@@ -240,6 +243,7 @@ namespace Polycode {
 		vector<LightInfo> getSpotLights() { return spotLights;	}
 		
 	protected:
+		Matrix4 currentModelMatrix;
 		LightSorter sorter;	
 	
 		bool cullingFrontFaces;

+ 2 - 0
Core/Contents/Source/PolyEntity.cpp

@@ -280,8 +280,10 @@ void Entity::transformAndRender() {
 	renderer->pushMatrix();	
 	if(ignoreParentMatrix && parentEntity) {
 		renderer->multModelviewMatrix(parentEntity->getConcatenatedMatrix().inverse());
+		renderer->setCurrentModelMatrix(parentEntity->getConcatenatedMatrix().inverse());
 	}else {
 		renderer->multModelviewMatrix(transformMatrix);
+		renderer->setCurrentModelMatrix(transformMatrix);
 	}
 	renderer->setVertexColor(color.r,color.g,color.b,color.a);
 	if(billboardMode) {

+ 9 - 0
Core/Contents/Source/PolyGLSLShaderModule.cpp

@@ -556,6 +556,15 @@ bool GLSLShaderModule::applyShaderMaterial(Renderer *renderer, Material *materia
 		
 	glEnable(GL_TEXTURE_2D);
 		
+	Matrix4 modelMatrix = renderer->getCurrentModelMatrix();
+	int mloc = glGetUniformLocation(glslShader->shader_id, "modelMatrix");				
+	GLfloat mat[16];
+	for(int z=0; z < 16; z++) {
+		mat[z] = modelMatrix.ml[z];
+	}
+	glUniformMatrix4fv(mloc, 1, false, mat);
+		
+		
 	GLSLShaderBinding *cgBinding = (GLSLShaderBinding*)material->getShaderBinding(shaderIndex);
 	
 	for(int i=0; i < glslShader->vp->params.size(); i++) {

+ 11 - 1
Core/Contents/Source/PolyMesh.cpp

@@ -191,7 +191,17 @@ namespace Polycode {
 					vertex->addBoneAssignment(boneID, weight);
 				}
 				
-				
+				Number totalWeight = 0;				
+				for(int m=0; m < vertex->getNumBoneAssignments(); m++) {
+					BoneAssignment *ba = vertex->getBoneAssignment(m);					
+					totalWeight += ba->weight;
+				}				
+
+				for(int m=0; m < vertex->getNumBoneAssignments(); m++) {
+					BoneAssignment *ba = vertex->getBoneAssignment(m);					
+					ba->weight = ba->weight/totalWeight;
+				}				
+
 				
 				poly->addVertex(vertex);
 			}

+ 4 - 2
Core/Contents/Source/PolySceneMesh.cpp

@@ -141,14 +141,16 @@ void SceneMesh::renderMeshLocally() {
 				
 					Vector3 aPos = vert->restPosition;
 					Vector3 tPos;
-				
+
+					Number mult = 1;					
+/*				
 					Number mult = 0;
 					for(int b =0; b < vert->getNumBoneAssignments(); b++) {
 						BoneAssignment *bas = vert->getBoneAssignment(b);
 						mult += bas->weight;
 					}
 					mult = 1.0f/mult;
-				
+*/				
 					for(int b =0; b < vert->getNumBoneAssignments(); b++) {
 						BoneAssignment *bas = vert->getBoneAssignment(b);
 						Bone *bone = bas->bone;

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

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

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

@@ -9,48 +9,32 @@ extern "C" {
 #include "lualib.h"
 #include "lauxlib.h"
 
-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;
 }
 
-static int Physics3D_PhysicsSceneEntity_set_enabled(lua_State *L) {
+static int Physics3D_CollisionScene_initCollisionScene(lua_State *L) {
 	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;
 }
 
-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);
-	PhysicsSceneEntity *inst = (PhysicsSceneEntity*)lua_topointer(L, 1);
+	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
 	inst->Update();
 	return 0;
 }
 
-static int Physics3D_PhysicsSceneEntity_getSceneEntity(lua_State *L) {
+static int Physics3D_CollisionScene_getCollisionEntityByObject(lua_State *L) {
 	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) {
 		lua_pushnil(L);
 	} else {
@@ -59,270 +43,222 @@ static int Physics3D_PhysicsSceneEntity_getSceneEntity(lua_State *L) {
 	return 1;
 }
 
-static int Physics3D_PhysicsSceneEntity_setFriction(lua_State *L) {
+static int Physics3D_CollisionScene_getFirstEntityInRay(lua_State *L) {
 	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);
-	return 0;
+	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
+	const Vector3 & origin = *( Vector3 *)lua_topointer(L, 2);
+	luaL_checktype(L, 3, LUA_TLIGHTUSERDATA);
+	const 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_PhysicsSceneEntity_getType(lua_State *L) {
+static int Physics3D_CollisionScene_enableCollision(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsSceneEntity *inst = (PhysicsSceneEntity*)lua_topointer(L, 1);
-	lua_pushinteger(L, inst->getType());
-	return 1;
+	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;
 }
 
-static int Physics3D_delete_PhysicsSceneEntity(lua_State *L) {
+static int Physics3D_CollisionScene_getCollisionByScreenEntity(lua_State *L) {
 	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 * 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;
 }
 
-static int Physics3D_PhysicsCharacter(lua_State *L) {
+static int Physics3D_CollisionScene_testCollision(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);
+	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_PhysicsCharacter_Update(lua_State *L) {
+static int Physics3D_CollisionScene_testCollisionOnCollisionChild(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
-	inst->Update();
-	return 0;
+	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;
 }
 
-static int Physics3D_PhysicsCharacter_setWalkDirection(lua_State *L) {
+static int Physics3D_CollisionScene_testCollisionOnCollisionChild_Convex(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
+	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
-	Vector3 direction = *(Vector3*)lua_topointer(L, 2);
-	inst->setWalkDirection(direction);
-	return 0;
+	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;
 }
 
-static int Physics3D_PhysicsCharacter_jump(lua_State *L) {
+static int Physics3D_CollisionScene_stopTrackingCollision(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
-	inst->jump();
+	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
+	SceneEntity * entity = (SceneEntity *)lua_topointer(L, 2);
+	inst->stopTrackingCollision(entity);
 	return 0;
 }
 
-static int Physics3D_PhysicsCharacter_warpCharacter(lua_State *L) {
+static int Physics3D_CollisionScene_addCollisionChild(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
+	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
 	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
-	Vector3 position = *(Vector3*)lua_topointer(L, 2);
-	inst->warpCharacter(position);
-	return 0;
+	SceneEntity * newEntity = (SceneEntity *)lua_topointer(L, 2);
+	int type;
+	if(lua_isnumber(L, 3)) {
+		type = lua_tointeger(L, 3);
+	} else {
+		type = 0;
+	}
+	int group;
+	if(lua_isnumber(L, 4)) {
+		group = lua_tointeger(L, 4);
+	} else {
+		group = 1;
+	}
+	void *ptrRetVal = (void*)inst->addCollisionChild(newEntity, type, group);
+	if(ptrRetVal == NULL) {
+		lua_pushnil(L);
+	} else {
+		lua_pushlightuserdata(L, ptrRetVal);
+	}
+	return 1;
 }
 
-static int Physics3D_PhysicsCharacter_setJumpSpeed(lua_State *L) {
+static int Physics3D_CollisionScene_trackCollision(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;
+	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 {
+		type = 0;
+	}
+	int group;
+	if(lua_isnumber(L, 4)) {
+		group = lua_tointeger(L, 4);
+	} else {
+		group = 1;
+	}
+	void *ptrRetVal = (void*)inst->trackCollision(newEntity, type, group);
+	if(ptrRetVal == NULL) {
+		lua_pushnil(L);
+	} else {
+		lua_pushlightuserdata(L, ptrRetVal);
+	}
+	return 1;
 }
 
-static int Physics3D_PhysicsCharacter_setFallSpeed(lua_State *L) {
+static int Physics3D_CollisionScene_adjustForCollision(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);
+	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;
 }
 
-static int Physics3D_PhysicsCharacter_setMaxJumpHeight(lua_State *L) {
+static int Physics3D_delete_CollisionScene(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);
+	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	delete inst;
 	return 0;
 }
 
-static int Physics3D_PhysicsCharacter_onGround(lua_State *L) {
+static int Physics3D_CollisionSceneEntity_get_lastPosition(lua_State *L) {
 	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);
+	lua_pushlightuserdata(L, &inst->lastPosition);
 	return 1;
 }
 
-static int Physics3D_delete_PhysicsCharacter(lua_State *L) {
+static int Physics3D_CollisionSceneEntity_get_enabled(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
-	delete inst;
-	return 0;
+	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
+	lua_pushboolean(L, inst->enabled);
+	return 1;
 }
 
-static int Physics3D_PhysicsVehicle_get_tuning(lua_State *L) {
+static int Physics3D_CollisionSceneEntity_set_enabled(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsVehicle *inst = (PhysicsVehicle*)lua_topointer(L, 1);
-	lua_pushlightuserdata(L, &inst->tuning);
-	return 1;
+	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
+	bool param = lua_toboolean(L, 2);
+	inst->enabled = param;
+	return 0;
 }
 
-static int Physics3D_PhysicsVehicle(lua_State *L) {
+static int Physics3D_CollisionSceneEntity(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_TLIGHTUSERDATA);
-	btDefaultVehicleRaycaster * rayCaster = (btDefaultVehicleRaycaster *)lua_topointer(L, 4);
-	PhysicsVehicle *inst = new PhysicsVehicle(entity, mass, friction, rayCaster);
+	int type = lua_tointeger(L, 2);
+	CollisionSceneEntity *inst = new CollisionSceneEntity(entity, type);
 	lua_pushlightuserdata(L, (void*)inst);
 	return 1;
 }
 
-static int Physics3D_PhysicsVehicle_addWheel(lua_State *L) {
+static int Physics3D_CollisionSceneEntity_getSceneEntity(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsVehicle *inst = (PhysicsVehicle*)lua_topointer(L, 1);
-	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
-	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);
-	} else {
-		suspensionStiffness = 20.0f;
-	}
-	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);
+	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
+	void *ptrRetVal = (void*)inst->getSceneEntity();
+	if(ptrRetVal == NULL) {
+		lua_pushnil(L);
 	} else {
-		rollInfluence = 0.5f;
+		lua_pushlightuserdata(L, ptrRetVal);
 	}
-	inst->addWheel(entity, connection, direction, axle, suspentionRestLength, wheelRadius, isFrontWheel, suspensionStiffness, suspensionDamping, suspensionCompression, wheelFriction, rollInfluence);
-	return 0;
-}
-
-static int Physics3D_PhysicsVehicle_applyEngineForce(lua_State *L) {
-	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);
-	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;
-	return 0;
-}
-
-static int Physics3D_CollisionScene(lua_State *L) {
-	CollisionScene *inst = new CollisionScene();
-	lua_pushlightuserdata(L, (void*)inst);
 	return 1;
 }
 
-static int Physics3D_CollisionScene_initCollisionScene(lua_State *L) {
+static int Physics3D_CollisionSceneEntity_getType(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
-	inst->initCollisionScene();
-	return 0;
+	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
+	lua_pushinteger(L, inst->getType());
+	return 1;
 }
 
-static int Physics3D_CollisionScene_Update(lua_State *L) {
+static int Physics3D_CollisionSceneEntity_Update(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
 	inst->Update();
 	return 0;
 }
 
-static int Physics3D_CollisionScene_getCollisionEntityByObject(lua_State *L) {
+static int Physics3D_CollisionSceneEntity_getConvexShape(lua_State *L) {
 	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) {
 		lua_pushnil(L);
 	} else {
@@ -331,36 +267,14 @@ static int Physics3D_CollisionScene_getCollisionEntityByObject(lua_State *L) {
 	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);
-	const Vector3 & origin = *( Vector3 *)lua_topointer(L, 2);
-	luaL_checktype(L, 3, LUA_TLIGHTUSERDATA);
-	const 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);
-	CollisionScene *inst = (CollisionScene*)lua_topointer(L, 1);
+	CollisionSceneEntity *inst = (CollisionSceneEntity*)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;
-}
-
-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) {
 		lua_pushnil(L);
 	} else {
@@ -369,57 +283,29 @@ static int Physics3D_CollisionScene_getCollisionByScreenEntity(lua_State *L) {
 	return 1;
 }
 
-static int Physics3D_CollisionScene_testCollision(lua_State *L) {
-	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);
-	return 1;
-}
-
-static int Physics3D_CollisionScene_testCollisionOnCollisionChild(lua_State *L) {
+static int Physics3D_delete_CollisionSceneEntity(lua_State *L) {
 	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;
+	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
+	delete inst;
+	return 0;
 }
 
-static int Physics3D_CollisionScene_testCollisionOnCollisionChild_Convex(lua_State *L) {
-	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_Convex(cEnt1, cEnt2);
-	lua_pushlightuserdata(L, retInst);
+static int Physics3D_PhysicsScene(lua_State *L) {
+	PhysicsScene *inst = new PhysicsScene();
+	lua_pushlightuserdata(L, (void*)inst);
 	return 1;
 }
 
-static int Physics3D_CollisionScene_stopTrackingCollision(lua_State *L) {
+static int Physics3D_PhysicsScene_Update(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);
-	inst->stopTrackingCollision(entity);
+	PhysicsScene *inst = (PhysicsScene*)lua_topointer(L, 1);
+	inst->Update();
 	return 0;
 }
 
-static int Physics3D_CollisionScene_addCollisionChild(lua_State *L) {
+static int Physics3D_PhysicsScene_addPhysicsChild(lua_State *L) {
 	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);
 	SceneEntity * newEntity = (SceneEntity *)lua_topointer(L, 2);
 	int type;
@@ -428,13 +314,31 @@ static int Physics3D_CollisionScene_addCollisionChild(lua_State *L) {
 	} else {
 		type = 0;
 	}
-	int group;
+	Number mass;
 	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 {
 		group = 1;
 	}
-	void *ptrRetVal = (void*)inst->addCollisionChild(newEntity, type, group);
+	void *ptrRetVal = (void*)inst->addPhysicsChild(newEntity, type, mass, friction, restitution, group);
 	if(ptrRetVal == NULL) {
 		lua_pushnil(L);
 	} else {
@@ -443,9 +347,9 @@ static int Physics3D_CollisionScene_addCollisionChild(lua_State *L) {
 	return 1;
 }
 
-static int Physics3D_CollisionScene_trackCollision(lua_State *L) {
+static int Physics3D_PhysicsScene_trackPhysicsChild(lua_State *L) {
 	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);
 	SceneEntity * newEntity = (SceneEntity *)lua_topointer(L, 2);
 	int type;
@@ -454,72 +358,137 @@ static int Physics3D_CollisionScene_trackCollision(lua_State *L) {
 	} else {
 		type = 0;
 	}
-	int group;
+	Number mass;
 	if(lua_isnumber(L, 4)) {
-		group = lua_tointeger(L, 4);
+		mass = lua_tonumber(L, 4);
 	} else {
-		group = 1;
+		mass = 0.0f;
 	}
-	void *ptrRetVal = (void*)inst->trackCollision(newEntity, type, group);
-	if(ptrRetVal == NULL) {
-		lua_pushnil(L);
+	Number friction;
+	if(lua_isnumber(L, 5)) {
+		friction = lua_tonumber(L, 5);
 	} else {
-		lua_pushlightuserdata(L, ptrRetVal);
+		friction = 1;
 	}
-	return 1;
-}
-
-static int Physics3D_CollisionScene_adjustForCollision(lua_State *L) {
-	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	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;
+	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;
 }
 
-static int Physics3D_delete_CollisionScene(lua_State *L) {
+static int Physics3D_PhysicsScene_addCharacterChild(lua_State *L) {
 	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);
+	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_CollisionSceneEntity_get_lastPosition(lua_State *L) {
+static int Physics3D_PhysicsScene_addVehicleChild(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
-	lua_pushlightuserdata(L, &inst->lastPosition);
+	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_enabled(lua_State *L) {
+static int Physics3D_delete_PhysicsScene(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
+	PhysicsScene *inst = (PhysicsScene*)lua_topointer(L, 1);
+	delete inst;
+	return 0;
+}
+
+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);
 	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);
-	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
+	PhysicsSceneEntity *inst = (PhysicsSceneEntity*)lua_topointer(L, 1);
 	bool param = lua_toboolean(L, 2);
 	inst->enabled = param;
 	return 0;
 }
 
-static int Physics3D_CollisionSceneEntity(lua_State *L) {
+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);
-	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);
 	return 1;
 }
 
-static int Physics3D_CollisionSceneEntity_getSceneEntity(lua_State *L) {
+static int Physics3D_PhysicsSceneEntity_Update(lua_State *L) {
 	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();
 	if(ptrRetVal == NULL) {
 		lua_pushnil(L);
@@ -529,209 +498,240 @@ static int Physics3D_CollisionSceneEntity_getSceneEntity(lua_State *L) {
 	return 1;
 }
 
-static int Physics3D_CollisionSceneEntity_getType(lua_State *L) {
+static int Physics3D_PhysicsSceneEntity_setFriction(lua_State *L) {
 	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());
 	return 1;
 }
 
-static int Physics3D_CollisionSceneEntity_Update(lua_State *L) {
+static int Physics3D_delete_PhysicsSceneEntity(lua_State *L) {
 	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;
 }
 
-static int Physics3D_CollisionSceneEntity_getConvexShape(lua_State *L) {
+static int Physics3D_PhysicsCharacter(lua_State *L) {
 	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);
-	}
+	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);
 	return 1;
 }
 
-static int Physics3D_CollisionSceneEntity_createCollisionShape(lua_State *L) {
+static int Physics3D_PhysicsCharacter_Update(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
+	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);
-	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);
-	} else {
-		lua_pushlightuserdata(L, ptrRetVal);
-	}
-	return 1;
+	Vector3 direction = *(Vector3*)lua_topointer(L, 2);
+	inst->setWalkDirection(direction);
+	return 0;
 }
 
-static int Physics3D_delete_CollisionSceneEntity(lua_State *L) {
+static int Physics3D_PhysicsCharacter_jump(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	CollisionSceneEntity *inst = (CollisionSceneEntity*)lua_topointer(L, 1);
-	delete inst;
+	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
+	inst->jump();
 	return 0;
 }
 
-static int Physics3D_PhysicsScene(lua_State *L) {
-	PhysicsScene *inst = new PhysicsScene();
-	lua_pushlightuserdata(L, (void*)inst);
+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) {
+	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
+	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
+	lua_pushboolean(L, inst->onGround());
 	return 1;
 }
 
-static int Physics3D_PhysicsScene_Update(lua_State *L) {
+static int Physics3D_delete_PhysicsCharacter(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsScene *inst = (PhysicsScene*)lua_topointer(L, 1);
-	inst->Update();
+	PhysicsCharacter *inst = (PhysicsCharacter*)lua_topointer(L, 1);
+	delete inst;
 	return 0;
 }
 
-static int Physics3D_PhysicsScene_addPhysicsChild(lua_State *L) {
+static int Physics3D_PhysicsVehicle_get_tuning(lua_State *L) {
 	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->addPhysicsChild(newEntity, type, mass, friction, restitution, group);
-	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;
 }
 
-static int Physics3D_PhysicsScene_trackPhysicsChild(lua_State *L) {
+static int Physics3D_PhysicsVehicle(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsScene *inst = (PhysicsScene*)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);
-	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);
+	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);
 	} else {
-		mass = 0.0f;
+		suspensionStiffness = 20.0f;
 	}
-	Number friction;
-	if(lua_isnumber(L, 5)) {
-		friction = lua_tonumber(L, 5);
+	Number suspensionDamping;
+	if(lua_isnumber(L, 10)) {
+		suspensionDamping = lua_tonumber(L, 10);
 	} else {
-		friction = 1;
+		suspensionDamping = 1.0f;
 	}
-	Number restitution;
-	if(lua_isnumber(L, 6)) {
-		restitution = lua_tonumber(L, 6);
+	Number suspensionCompression;
+	if(lua_isnumber(L, 11)) {
+		suspensionCompression = lua_tonumber(L, 11);
 	} else {
-		restitution = 0;
+		suspensionCompression = 4.0f;
 	}
-	int group;
-	if(lua_isnumber(L, 7)) {
-		group = lua_tointeger(L, 7);
+	Number wheelFriction;
+	if(lua_isnumber(L, 12)) {
+		wheelFriction = lua_tonumber(L, 12);
 	} else {
-		group = 1;
+		wheelFriction = 10000.0f;
 	}
-	void *ptrRetVal = (void*)inst->trackPhysicsChild(newEntity, type, mass, friction, restitution, group);
-	if(ptrRetVal == NULL) {
-		lua_pushnil(L);
+	Number rollInfluence;
+	if(lua_isnumber(L, 13)) {
+		rollInfluence = lua_tonumber(L, 13);
 	} else {
-		lua_pushlightuserdata(L, ptrRetVal);
+		rollInfluence = 0.5f;
 	}
-	return 1;
+	inst->addWheel(entity, connection, direction, axle, suspentionRestLength, wheelRadius, isFrontWheel, suspensionStiffness, suspensionDamping, suspensionCompression, wheelFriction, rollInfluence);
+	return 0;
 }
 
-static int Physics3D_PhysicsScene_addCharacterChild(lua_State *L) {
+static int Physics3D_PhysicsVehicle_applyEngineForce(lua_State *L) {
 	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);
+	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);
-	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;
+	unsigned int wheelIndex = lua_tointeger(L, 3);
+	inst->applyEngineForce(force, wheelIndex);
+	return 0;
 }
 
-static int Physics3D_PhysicsScene_addVehicleChild(lua_State *L) {
+static int Physics3D_PhysicsVehicle_setSteeringValue(lua_State *L) {
 	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);
+	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);
-	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;
+	unsigned int wheelIndex = lua_tointeger(L, 3);
+	inst->setSteeringValue(value, wheelIndex);
+	return 0;
 }
 
-static int Physics3D_delete_PhysicsScene(lua_State *L) {
+static int Physics3D_PhysicsVehicle_setBrake(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
-	PhysicsScene *inst = (PhysicsScene*)lua_topointer(L, 1);
+	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;
 	return 0;
 }

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

@@ -4,34 +4,7 @@
 int luaopen_Physics3D(lua_State *L) {
 CoreServices *inst = (CoreServices*)lua_topointer(L, 1);
 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},
-		{"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},
-		{"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},
-		{"CollisionScene", Physics3D_CollisionScene},
+	static const struct luaL_reg physics3dLib [] = {		{"CollisionScene", Physics3D_CollisionScene},
 		{"CollisionScene_initCollisionScene", Physics3D_CollisionScene_initCollisionScene},
 		{"CollisionScene_Update", Physics3D_CollisionScene_Update},
 		{"CollisionScene_getCollisionEntityByObject", Physics3D_CollisionScene_getCollisionEntityByObject},
@@ -63,6 +36,33 @@ CoreServices::setInstance(inst);
 		{"PhysicsScene_addCharacterChild", Physics3D_PhysicsScene_addCharacterChild},
 		{"PhysicsScene_addVehicleChild", Physics3D_PhysicsScene_addVehicleChild},
 		{"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},
+		{"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},
+		{"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},
 		{NULL, NULL}
 	};
 	luaL_openlib(L, "Physics3D", physics3dLib, 0);

File diff ditekan karena terlalu besar
+ 140 - 149
Player/Build/Mac OS X/Polycode Player.xcodeproj/project.xcworkspace/xcuserdata/ivansafrin.xcuserdatad/UserInterfaceState.xcuserstate


Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini