#include "audio/sound_source.hpp"
#include "log.hpp"
#include "scripting/squirrel_util.hpp"
+#include "object/camera.hpp"
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;
}
// 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;
}
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:
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));
}
}