فهرست منبع

Better organize unit/sound creation

Daniele Bartolini 12 سال پیش
والد
کامیت
9643885090
2فایلهای تغییر یافته به همراه24 افزوده شده و 13 حذف شده
  1. 20 11
      engine/World.cpp
  2. 4 2
      engine/World.h

+ 20 - 11
engine/World.cpp

@@ -46,9 +46,13 @@ World::World()
 //-----------------------------------------------------------------------------
 UnitId World::spawn_unit(const char* name, const Vector3& pos, const Quaternion& rot)
 {
-	// Fetch resource
 	UnitResource* ur = (UnitResource*) device()->resource_manager()->lookup(UNIT_EXTENSION, name);
+	return spawn_unit(ur, pos, rot);
+}
 
+//-----------------------------------------------------------------------------
+UnitId World::spawn_unit(UnitResource* ur, const Vector3& pos, const Quaternion& rot)
+{
 	// Create a new scene graph
 	SceneGraph* sg = m_scenegraph_manager.create_scene_graph();
 
@@ -163,13 +167,18 @@ void World::destroy_camera(CameraId id)
 //-----------------------------------------------------------------------------
 SoundId World::play_sound(const char* name, const bool loop, const float volume, const Vector3& pos, const float range)
 {
-	SoundResource* sound = (SoundResource*)device()->resource_manager()->lookup(SOUND_EXTENSION, name);
-	SoundRenderer* sr = device()->sound_renderer();
+	SoundResource* sr = (SoundResource*)device()->resource_manager()->lookup(SOUND_EXTENSION, name);
+	return play_sound(sr, loop, volume, pos, range);
+}
 
-	const SoundSourceId source = sr->create_sound_source();
+//-----------------------------------------------------------------------------
+SoundId World::play_sound(SoundResource* sr, bool loop, float volume, const Vector3& pos, float range)
+{
+	SoundRenderer* renderer = device()->sound_renderer();
+	const SoundSourceId source = renderer->create_sound_source();
 
 	Sound s;
-	s.buffer = sound->sound_buffer();
+	s.buffer = sr->sound_buffer();
 	s.source = source;
 	s.world = Matrix4x4(Quaternion::IDENTITY, pos);
 	s.volume = volume;
@@ -179,12 +188,12 @@ SoundId World::play_sound(const char* name, const bool loop, const float volume,
 
 	SoundId id = m_sounds.create(s);
 
-	sr->bind_buffer(s.buffer, s.source);
-	sr->set_sound_loop(s.source, s.loop);
-	sr->set_sound_gain(s.source, s.volume);
-	sr->set_sound_max_distance(s.source, s.range);
-	sr->set_sound_position(s.source, s.world.translation());
-	sr->play_sound(s.source);
+	renderer->bind_buffer(s.buffer, s.source);
+	renderer->set_sound_loop(s.source, s.loop);
+	renderer->set_sound_gain(s.source, s.volume);
+	renderer->set_sound_max_distance(s.source, s.range);
+	renderer->set_sound_position(s.source, s.world.translation());
+	renderer->play_sound(s.source);
 
 	return id;
 }

+ 4 - 2
engine/World.h

@@ -85,7 +85,8 @@ class World
 public:
 										World();
 
-	UnitId								spawn_unit(const char* name, const Vector3& pos = Vector3::ZERO, const Quaternion& rot = Quaternion(Vector3(0, 1, 0), 0.0f));
+	UnitId								spawn_unit(const char* name, const Vector3& pos = Vector3::ZERO, const Quaternion& rot = Quaternion::IDENTITY);
+	UnitId								spawn_unit(UnitResource* ur, const Vector3& pos, const Quaternion& rot);
 	void								destroy_unit(UnitId id);
 
 	uint32_t							num_units() const;
@@ -102,7 +103,8 @@ public:
 	CameraId							create_camera(SceneGraph& sg, int32_t node);
 	void								destroy_camera(CameraId id);
 
-	SoundId								play_sound(const char* name, const bool loop = false, const float volume = 1.0f, const Vector3& pos = Vector3::ZERO, const float range = 50.0f);
+	SoundId								play_sound(const char* name, bool loop = false, float volume = 1.0f, const Vector3& pos = Vector3::ZERO, float range = 50.0f);
+	SoundId								play_sound(SoundResource* sr, bool loop, float volume, const Vector3& pos, float range);
 	void								stop_sound(SoundId sound);
 	void								link_sound(SoundId sound, Unit* unit, int32_t node);
 	void								set_listener(const Vector3& pos, const Vector3& vel, const Vector3& or_up, const Vector3& or_at);