소스 검색

Linux player project

Ivan Safrin 14 년 전
부모
커밋
a34481c048

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

@@ -1,87 +1,87 @@
-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/Event"
+require "Polycode/Font"
+require "Polycode/Tween"
+require "Polycode/BezierPathTween"
+require "Polycode/QuaternionTween"
+require "Polycode/ScreenEvent"
+require "Polycode/TweenManager"
 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/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/SceneSound"
+require "Polycode/SceneSoundListener"
 require "Polycode/ScreenParticleEmitter"
 require "Polycode/ScreenParticleEmitter"
 require "Polycode/SceneParticleEmitter"
 require "Polycode/SceneParticleEmitter"
 require "Polycode/ParticleEmitter"
 require "Polycode/ParticleEmitter"
-require "Polycode/Perlin"
-require "Polycode/Polygon"
-require "Polycode/Quaternion"
-require "Polycode/QuaternionCurve"
-require "Polycode/Rectangle"
-require "Polycode/Renderer"
-require "Polycode/Resource"
+require "Polycode/Timer"
 require "Polycode/ResourceManager"
 require "Polycode/ResourceManager"
-require "Polycode/Scene"
 require "Polycode/SceneEntity"
 require "Polycode/SceneEntity"
-require "Polycode/SceneLabel"
-require "Polycode/SceneLight"
-require "Polycode/SceneLine"
+require "Polycode/Mesh"
+require "Polycode/VertexBuffer"
+require "Polycode/Shader"
+require "Polycode/ShaderBinding"
+require "Polycode/PolycodeModule"
 require "Polycode/SceneManager"
 require "Polycode/SceneManager"
-require "Polycode/SceneMesh"
-require "Polycode/ScenePrimitive"
-require "Polycode/SceneRenderTexture"
-require "Polycode/SceneSound"
-require "Polycode/SceneSoundListener"
-require "Polycode/Screen"
-require "Polycode/ScreenCurve"
-require "Polycode/ScreenEntity"
-require "Polycode/ScreenEvent"
+require "Polycode/Renderer"
 require "Polycode/ScreenImage"
 require "Polycode/ScreenImage"
-require "Polycode/ScreenLabel"
-require "Polycode/ScreenLine"
-require "Polycode/ScreenManager"
-require "Polycode/ScreenMesh"
-require "Polycode/ScreenShape"
+require "Polycode/ScreenCurve"
+require "Polycode/Color"
 require "Polycode/ScreenSoundListener"
 require "Polycode/ScreenSoundListener"
 require "Polycode/ScreenSound"
 require "Polycode/ScreenSound"
-require "Polycode/ScreenSprite"
-require "Polycode/Shader"
-require "Polycode/ShaderBinding"
+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/SkeletonAnimation"
 require "Polycode/SkeletonAnimation"
 require "Polycode/BoneTrack"
 require "Polycode/BoneTrack"
 require "Polycode/Skeleton"
 require "Polycode/Skeleton"
-require "Polycode/Sound"
-require "Polycode/SoundManager"
-require "Polycode/String"
+require "Polycode/Vector3"
 require "Polycode/Texture"
 require "Polycode/Texture"
-require "Polycode/Timer"
+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/TimerManager"
 require "Polycode/TimerManager"
-require "Polycode/Tween"
-require "Polycode/BezierPathTween"
-require "Polycode/QuaternionTween"
-require "Polycode/TweenManager"
-require "Polycode/Vector2"
-require "Polycode/Vector3"
+require "Polycode/Perlin"
+require "Polycode/ScreenLabel"
+require "Polycode/Polygon"
+require "Polycode/ObjectEntry"
+require "Polycode/SoundManager"
+require "Polycode/Material"
 require "Polycode/Vertex"
 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/Vector2"
+require "Polycode/Bone"
+require "Polycode/SceneLight"
+require "Polycode/Logger"
+require "Polycode/Scene"

BIN
Bindings/Contents/LUA/API/api.pak


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 513 - 470
Bindings/Contents/LUA/Include/PolycodeLUAWrappers.h


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 256 - 857
Bindings/Contents/LUA/Source/PolycodeLUA.cpp


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

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

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

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

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

@@ -4,7 +4,34 @@
 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 [] = {		{"CollisionScene", Physics3D_CollisionScene},
+	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},
 		{"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},
@@ -36,33 +63,6 @@ CoreServices::setInstance(inst);
 		{"PhysicsScene_addCharacterChild", Physics3D_PhysicsScene_addCharacterChild},
 		{"PhysicsScene_addCharacterChild", Physics3D_PhysicsScene_addCharacterChild},
 		{"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},
-		{"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}
 		{NULL, NULL}
 	};
 	};
 	luaL_openlib(L, "Physics3D", physics3dLib, 0);
 	luaL_openlib(L, "Physics3D", physics3dLib, 0);

+ 11 - 0
Player/Build/Linux/Makefile

@@ -0,0 +1,11 @@
+CC=g++
+CFLAGS=-I../../../Release/Linux/Framework/Core/Dependencies/include -I../../../Release/Linux/Framework/Core/Dependencies/include/AL -I../../../Release/Linux/Framework/Core/include -I../../../Release/Linux/Framework/Modules/include -I../../../Release/Linux/Framework/Modules/Dependencies/include -I../../../Release/Linux/Framework/Modules/Dependencies/include/bullet -I../../Contents/Include -I../../../Release/Linux/Framework/Bindings/Lua/Core/include -I../../../Release/Linux/Framework/Core/Dependencies/include/lua5.1
+LDFLAGS=../../../Release/Linux/Framework/Core/lib/libPolycore.a ../../../Release/Linux/Framework/Core/Dependencies/lib/libfreetype.a ../../../Release/Linux/Framework/Core/Dependencies/lib/liblibvorbisfile.a ../../../Release/Linux/Framework/Core/Dependencies/lib/liblibvorbis.a ../../../Release/Linux/Framework/Core/Dependencies/lib/liblibogg.a ../../../Release/Linux/Framework/Core/Dependencies/lib/libopenal.a ../../../Release/Linux/Framework/Core/Dependencies/lib/libphysfs.a ../../../Release/Linux/Framework/Core/Dependencies/lib/libpng15.a ../../../Release/Linux/Framework/Core/Dependencies/lib/libz.a -lGL -lGLU -lSDL ../../../Release/Linux/Framework/Core/Dependencies/lib/liblua5.1.a ../../../Release/Linux/Framework/Bindings/Lua/Core/lib/libPolycodeLua.a
+
+default:
+	$(CC) $(CFLAGS) main.cpp ../../Contents/Source/PolycodePlayer.cpp ../../Contents/Source/PolycodeLinuxPlayer.cpp -o PolycodePlayer $(LDFLAGS)
+	cp ../../../Release/Linux/Framework/Core/Assets/default.pak .
+clean:
+	rm PolycodePlayer
+	rm default.pak
+	

+ 10 - 0
Player/Build/Linux/main.cpp

@@ -0,0 +1,10 @@
+#include "Polycode.h"
+#include "PolycodeView.h"
+#include "PolycodeLinuxPlayer.h"
+
+int main(int argc, char *argv[]) {
+	PolycodeView *view = new PolycodeView("Polycode Player");
+	PolycodeLinuxPlayer *player = new PolycodeLinuxPlayer(view, "main.polyapp", false);
+	player->runPlayer();
+	return 0;
+}

+ 39 - 0
Player/Contents/Include/PolycodeLinuxPlayer.h

@@ -0,0 +1,39 @@
+/*
+Copyright (C) 2011 by Ivan Safrin
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+#pragma once
+
+#include "PolycodeView.h"
+#include "PolycodePlayer.h"
+#include "PolySDLCore.h"
+
+class PolycodeLinuxPlayer : public PolycodePlayer {
+	public:
+		PolycodeLinuxPlayer(PolycodeView *view,String fileName, bool knownArchive);
+		virtual ~PolycodeLinuxPlayer();
+	
+		void createCore();	
+	
+	protected:
+
+		PolycodeView *view;	
+};

+ 35 - 0
Player/Contents/Source/PolycodeLinuxPlayer.cpp

@@ -0,0 +1,35 @@
+/*
+Copyright (C) 2011 by Ivan Safrin
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+#include "PolycodeLinuxPlayer.h"
+
+
+PolycodeLinuxPlayer::PolycodeLinuxPlayer(PolycodeView *view, String fileName, bool knownArchive) : PolycodePlayer(fileName, knownArchive) {
+	this->view = view;
+}
+
+PolycodeLinuxPlayer::~PolycodeLinuxPlayer() {
+	
+}
+
+void PolycodeLinuxPlayer::createCore() {
+	core =  new SDLCore(view, xRes, yRes,  fullScreen, aaLevel, frameRate);	
+}

+ 10 - 0
Player/Contents/Source/PolycodePlayer.cpp

@@ -165,7 +165,12 @@ extern "C" {
 			GetLongPathNameW(_tempPath, tempPath, 4098);
 			GetLongPathNameW(_tempPath, tempPath, 4098);
 			String moduleDestPath = String(tempPath) + String("\\") + moduleName+ String(".dll");
 			String moduleDestPath = String(tempPath) + String("\\") + moduleName+ String(".dll");
 #else
 #else
+
+	#ifdef APPLE
 			String moduleDestPath = String("/tmp/") + moduleName+ String(".dylib");
 			String moduleDestPath = String("/tmp/") + moduleName+ String(".dylib");
+	#else
+			String moduleDestPath = String("/tmp/") + moduleName+ String(".so");
+	#endif
 #endif
 #endif
 			String moduleLoadCall = String("luaopen_") + moduleName;
 			String moduleLoadCall = String("luaopen_") + moduleName;
 			lua_getfield(L, LUA_GLOBALSINDEX, "require");
 			lua_getfield(L, LUA_GLOBALSINDEX, "require");
@@ -357,8 +362,13 @@ void PolycodePlayer::loadFile(const char *fileName) {
 			String moduleFileName = String("__lib/win/") + moduleName+ String(".dll");
 			String moduleFileName = String("__lib/win/") + moduleName+ String(".dll");
 
 
 #else
 #else
+	#ifdef APPLE
 				String moduleFileName = String("__lib/osx/") + moduleName+ String(".dylib");
 				String moduleFileName = String("__lib/osx/") + moduleName+ String(".dylib");
 				String moduleDestPath = String("/tmp/") + moduleName+ String(".dylib");
 				String moduleDestPath = String("/tmp/") + moduleName+ String(".dylib");
+	#else
+				String moduleFileName = String("__lib/linux/") + moduleName+ String(".so");
+				String moduleDestPath = String("/tmp/") + moduleName+ String(".so");
+	#endif
 #endif				
 #endif				
 				OSFILE *inFile = OSBasics::open(moduleFileName, "rb");	
 				OSFILE *inFile = OSBasics::open(moduleFileName, "rb");	
 				if(inFile) {
 				if(inFile) {

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.