Prechádzať zdrojové kódy

Update PhysicsWorld

Daniele Bartolini 12 rokov pred
rodič
commit
2baa5c4da7

+ 18 - 3
engine/physics/PhysicsWorld.cpp

@@ -118,9 +118,9 @@ void PhysicsWorld::destroy_actor(ActorId id)
 }
 
 //-----------------------------------------------------------------------------
-ControllerId PhysicsWorld::create_controller(const PhysicsResource* pr)
+ControllerId PhysicsWorld::create_controller(const PhysicsResource* pr, SceneGraph& sg, int32_t node)
 {
-	Controller* controller = CE_NEW(m_controllers_pool, Controller)(pr, m_scene, m_controller_manager);
+	Controller* controller = CE_NEW(m_controllers_pool, Controller)(pr, sg, node, m_scene, m_controller_manager);
 	return m_controllers.create(controller);
 }
 
@@ -163,6 +163,12 @@ void PhysicsWorld::set_gravity(const Vector3& g)
 //-----------------------------------------------------------------------------
 void PhysicsWorld::update()
 {
+	// Apply gravity to controllers
+	for (Controller** cc = m_controllers.begin(); cc != m_controllers.end(); cc++)
+	{
+		(*cc)->move(Vector3(0, -9.81, 0));
+	}
+
 	// Update world pose of the actors
 	for (Actor** aa = m_actors.begin(); aa != m_actors.end(); aa++)
 	{
@@ -186,8 +192,17 @@ void PhysicsWorld::update()
 		const Quaternion rot(tr.q.x, tr.q.y, tr.q.z, tr.q.w);
 
 		Actor* actor = static_cast<Actor*>(active_transforms[i].userData);
-		actor->update(Matrix4x4(rot, pos));
+		if (actor != NULL)
+		{
+			actor->update(Matrix4x4(rot, pos));
+		}
 	}
+
+	// Update controllers
+	for (Controller** cc = m_controllers.begin(); cc != m_controllers.end(); cc++)
+	{
+		(*cc)->update();
+	}	
 }
 
 } // namespace crown

+ 1 - 1
engine/physics/PhysicsWorld.h

@@ -64,7 +64,7 @@ public:
 	ActorId						create_actor(SceneGraph& sg, int32_t node, ActorType::Enum type);
 	void						destroy_actor(ActorId id);
 
-	ControllerId				create_controller(const PhysicsResource* pr);
+	ControllerId				create_controller(const PhysicsResource* pr, SceneGraph& sg, int32_t node);
 	void						destroy_controller(ControllerId id);
 
 	Actor*						lookup_actor(ActorId id);