Przeglądaj źródła

add set_kinematic and clear_kinematic

mikymod 12 lat temu
rodzic
commit
d15fb435e2
3 zmienionych plików z 39 dodań i 0 usunięć
  1. 24 0
      engine/lua/LuaActor.cpp
  2. 12 0
      engine/physics/Actor.cpp
  3. 3 0
      engine/physics/Actor.h

+ 24 - 0
engine/lua/LuaActor.cpp

@@ -74,6 +74,28 @@ CE_EXPORT int actor_disable_collision(lua_State* L)
 	return 0;
 }
 
+//-----------------------------------------------------------------------------
+CE_EXPORT int actor_set_kinematic(lua_State* L)
+{
+	LuaStack stack(L);
+	Actor* actor = stack.get_actor(1);
+
+	actor->set_kinematic();
+
+	return 0;
+}
+
+//-----------------------------------------------------------------------------
+CE_EXPORT int actor_clear_kinematic(lua_State* L)
+{
+	LuaStack stack(L);
+	Actor* actor = stack.get_actor(1);
+
+	actor->clear_kinematic();
+
+	return 0;
+}
+
 //-----------------------------------------------------------------------------
 CE_EXPORT int actor_is_static(lua_State* L)
 {
@@ -258,6 +280,8 @@ void load_actor(LuaEnvironment& env)
 	env.load_module_function("Actor", "disable_gravity",		actor_disable_gravity);
 	env.load_module_function("Actor", "enable_collision",		actor_enable_collision);
 	env.load_module_function("Actor", "disable_collision",		actor_disable_collision);
+	env.load_module_function("Actor", "set_kinematic",			actor_set_kinematic);
+	env.load_module_function("Actor", "clear_kinematic",		actor_clear_kinematic);
 	env.load_module_function("Actor", "is_static",				actor_is_static);
 	env.load_module_function("Actor", "is_dynamic",				actor_is_dynamic);
 	env.load_module_function("Actor", "linear_damping",			actor_linear_damping);

+ 12 - 0
engine/physics/Actor.cpp

@@ -241,6 +241,18 @@ void Actor::disable_collision()
 	default_allocator().deallocate(shapes);	
 }
 
+//-----------------------------------------------------------------------------
+void Actor::set_kinematic()
+{
+	static_cast<PxRigidDynamic*>(m_actor)->setRigidDynamicFlag(PxRigidDynamicFlag::eKINEMATIC, true);
+}
+
+//-----------------------------------------------------------------------------
+void Actor::clear_kinematic()
+{
+	static_cast<PxRigidDynamic*>(m_actor)->setRigidDynamicFlag(PxRigidDynamicFlag::eKINEMATIC, false);
+}
+
 //-----------------------------------------------------------------------------
 bool Actor::is_static() const
 {

+ 3 - 0
engine/physics/Actor.h

@@ -62,6 +62,9 @@ struct Actor
 	void				enable_collision();
 	void				disable_collision();
 
+	void				set_kinematic();
+	void				clear_kinematic();
+
 	bool				is_static() const;
 	bool				is_dynamic() const;