* Add Airship (regular above-ground theme) and Battle (castle/boss theme) music court...
[supertux.git] / src / object / ambient_sound.cpp
index 5d3a792..8837f91 100644 (file)
@@ -32,6 +32,7 @@
 #include "audio/sound_source.hpp"
 #include "log.hpp"
 #include "scripting/squirrel_util.hpp"
+#include "object/camera.hpp"
 
 AmbientSound::AmbientSound(const lisp::Lisp& lisp)
 {
@@ -76,13 +77,14 @@ AmbientSound::AmbientSound(const lisp::Lisp& lisp)
   // set default silence_distance
 
   if (distance_factor == 0)
-         silence_distance = std::numeric_limits<float>::max();
+          silence_distance = std::numeric_limits<float>::max();
   else
     silence_distance = 1/distance_factor;
 
   lisp.get("silence_distance",silence_distance);
 
   sound_source = 0; // not playing at the beginning
+  sound_manager->preload(sample);
   latency=0;
 }
 
@@ -102,11 +104,12 @@ AmbientSound::AmbientSound(Vector pos, float factor, float bias, float vol, std:
   // set default silence_distance
 
   if (distance_factor == 0)
-         silence_distance = std::numeric_limits<float>::max();
+          silence_distance = std::numeric_limits<float>::max();
   else
     silence_distance = 1/distance_factor;
 
   sound_source = 0; // not playing at the beginning
+  sound_manager->preload(sample);
   latency=0;
 }
 
@@ -152,9 +155,10 @@ AmbientSound::update(float deltat)
     float px,py;
     float rx,ry;
 
-    // Player position
-    px=Sector::current()->player->get_pos().x;
-    py=Sector::current()->player->get_pos().y;
+    if (!Sector::current() || !Sector::current()->camera) return;
+    // Camera position
+    px=Sector::current()->camera->get_center().x;
+    py=Sector::current()->camera->get_center().y;
 
     // Relate to which point in the area
     rx=px<position.x?position.x:
@@ -184,15 +188,15 @@ AmbientSound::update(float deltat)
       sound_source->set_gain(currentvolume*maximumvolume);
 
       if (sqrdistance>=silence_distance && currentvolume<1e-3)
-       stop_playing();
+        stop_playing();
       latency=0;
     } else {
       if (sqrdistance<silence_distance) {
-       start_playing();
-       latency=0;
+        start_playing();
+        latency=0;
       }
       else // set a reasonable latency
-       latency=(int)(0.001/distance_factor);
+        latency=(int)(0.001/distance_factor);
       //(int)(10*((sqrdistance-silence_distance)/silence_distance));
     }
   }