Forráskód Böngészése

update Lua bindings

mikymod 12 éve
szülő
commit
a4dc1ebf92
3 módosított fájl, 58 hozzáadás és 0 törlés
  1. 13 0
      engine/lua/LuaActor.cpp
  2. 26 0
      engine/lua/LuaPhysicsWorld.cpp
  3. 19 0
      engine/lua/LuaRaycast.cpp

+ 13 - 0
engine/lua/LuaActor.cpp

@@ -296,6 +296,18 @@ CE_EXPORT int actor_wake_up(lua_State* L)
 	return 0;
 }
 
+CE_EXPORT int actor_unit(lua_State* L)
+{
+	LuaStack stack(L);
+
+	Actor* actor = stack.get_actor(1);
+
+	Unit* unit = actor->unit();
+
+	stack.push_unit(unit);
+	return 1;
+}
+
 //-----------------------------------------------------------------------------
 void load_actor(LuaEnvironment& env)
 {
@@ -322,6 +334,7 @@ void load_actor(LuaEnvironment& env)
 	env.load_module_function("Actor", "push",					actor_push);
 	env.load_module_function("Actor", "is_sleeping",			actor_is_sleeping);
 	env.load_module_function("Actor", "wake_up",				actor_wake_up);
+	env.load_module_function("Actor", "unit",					actor_unit);
 }
 
 } // namespace crown

+ 26 - 0
engine/lua/LuaPhysicsWorld.cpp

@@ -93,6 +93,31 @@ CE_EXPORT int physics_world_overlap_test(lua_State* L)
 	return 0;
 }
 
+//-----------------------------------------------------------------------------
+CE_EXPORT int physics_world_sync_overlap_test(lua_State* L)
+{
+	LuaStack stack(L);
+
+	PhysicsWorld* world = stack.get_physics_world(1);
+	const char* callback = stack.get_string(2);
+	int mode = stack.get_int(3);
+	int filter = stack.get_int(4);
+	int shape_type = stack.get_int(5);
+	Vector3 pos = stack.get_vector3(6);
+	Quaternion rot = stack.get_quaternion(7);
+	Vector3 size = stack.get_vector3(8);
+
+	Actor* actor = world->sync_overlap_test(callback, (SceneQueryMode::Enum) mode, (SceneQueryFilter::Enum) filter,
+										(ShapeType::Enum) shape_type, pos, rot, size);
+
+	if (actor)
+		stack.push_actor(actor);
+	else
+		stack.push_nil();
+	
+	return 1;
+}
+
 //-----------------------------------------------------------------------------
 void load_physics_world(LuaEnvironment& env)
 {
@@ -100,6 +125,7 @@ void load_physics_world(LuaEnvironment& env)
 	env.load_module_function("PhysicsWorld", "set_gravity",		physics_world_set_gravity);
 	env.load_module_function("PhysicsWorld", "make_raycast",	physics_world_make_raycast);
 	env.load_module_function("PhysicsWorld", "overlap_test",	physics_world_overlap_test);
+	env.load_module_function("PhysicsWorld", "sync_overlap_test",	physics_world_sync_overlap_test);
 }
 
 } // namespace crown

+ 19 - 0
engine/lua/LuaRaycast.cpp

@@ -46,10 +46,29 @@ CE_EXPORT int raycast_cast(lua_State* L)
 	return 0;
 }
 
+//-----------------------------------------------------------------------------
+CE_EXPORT int raycast_sync_cast(lua_State* L)
+{
+	LuaStack stack(L);
+
+	Raycast* raycast = stack.get_raycast(1);
+	Vector3 from = stack.get_vector3(2);
+	Vector3 dir = stack.get_vector3(3);
+	float length = stack.get_float(4);
+	
+	Actor* actor = raycast->sync_cast(from, dir, length);
+
+	if (actor) stack.push_actor(actor);
+	else stack.push_nil();
+
+	return 1;
+}
+
 //-----------------------------------------------------------------------------
 void load_raycast(LuaEnvironment& env)
 {
 	env.load_module_function("Raycast", "cast",	raycast_cast);
+	env.load_module_function("Raycast", "sync_cast", raycast_sync_cast);
 
 	env.load_module_enum("Raycast", "CLOSEST",	SceneQueryMode::CLOSEST);
 	env.load_module_enum("Raycast", "ANY",		SceneQueryMode::ANY);