Sfoglia il codice sorgente

Copy transforms from physics to scene graph

Daniele Bartolini 10 anni fa
parent
commit
796b4c0b7b
1 ha cambiato i file con 44 aggiunte e 3 eliminazioni
  1. 44 3
      src/world/world.cpp

+ 44 - 3
src/world/world.cpp

@@ -219,7 +219,6 @@ void World::update_scene(float dt)
 	Array<Matrix4x4> changed_world(ta);
 	Array<Matrix4x4> changed_world(ta);
 
 
 	_scene_graph->get_changed(changed_units, changed_world);
 	_scene_graph->get_changed(changed_units, changed_world);
-	_scene_graph->clear_changed();
 
 
 	_physics_world->update_actor_world_poses(array::begin(changed_units)
 	_physics_world->update_actor_world_poses(array::begin(changed_units)
 		, array::end(changed_units)
 		, array::end(changed_units)
@@ -228,6 +227,50 @@ void World::update_scene(float dt)
 
 
 	_physics_world->update(dt);
 	_physics_world->update(dt);
 
 
+	// Process physics events
+	EventStream& physics_events = _physics_world->events();
+
+	const uint32_t size = array::size(physics_events);
+	uint32_t read = 0;
+	while (read < size)
+	{
+		event_stream::Header h;
+
+		const char* data = &physics_events[read];
+		const char* ev   = data + sizeof(h);
+
+		h = *(event_stream::Header*)data;
+
+		switch (h.type)
+		{
+			case EventType::PHYSICS_TRANSFORM:
+			{
+				const PhysicsTransformEvent& ptev = *(PhysicsTransformEvent*)ev;
+				const TransformInstance ti = _scene_graph->get(ptev.unit_id);
+				_scene_graph->set_world_pose(ti, ptev.world_tm);
+				break;
+			}
+			case EventType::PHYSICS_COLLISION:
+			{
+				break;
+			}
+			case EventType::PHYSICS_TRIGGER:
+			{
+				break;
+			}
+		}
+
+		read += sizeof(h);
+		read += h.size;
+	}
+	array::clear(physics_events);
+
+	array::clear(changed_units);
+	array::clear(changed_world);
+
+	_scene_graph->get_changed(changed_units, changed_world);
+	_scene_graph->clear_changed();
+
 	_render_world->update_transforms(array::begin(changed_units)
 	_render_world->update_transforms(array::begin(changed_units)
 		, array::end(changed_units)
 		, array::end(changed_units)
 		, array::begin(changed_world)
 		, array::begin(changed_world)
@@ -235,8 +278,6 @@ void World::update_scene(float dt)
 
 
 	_sound_world->update();
 	_sound_world->update();
 
 
-	EventStream& physics_events = _physics_world->events();
-	array::clear(physics_events);
 	array::clear(_events);
 	array::clear(_events);
 }
 }