#include <math.h>
#include <stdexcept>
#include <iostream>
+#include <limits>
#include "ambient_sound.hpp"
#include "object_factory.hpp"
#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 = 10e99;
+ 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 = 10e99;
+ silence_distance = std::numeric_limits<float>::max();
else
silence_distance = 1/distance_factor;
sound_source->set_gain(0);
sound_source->set_looping(true);
- currentvolume=targetvolume=1e-20;
+ currentvolume=targetvolume=1e-20f;
sound_source->play();
} catch(std::exception& e) {
log_warning << "Couldn't play '" << sample << "': " << e.what() << "" << std::endl;
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:
// rise/fall half life?
currentvolume*=pow(rise,deltat*10);
- currentvolume += 1e-6; // volume is at least 1e-6 (0 would never rise)
+ currentvolume += 1e-6f; // volume is at least 1e-6 (0 would never rise)
if (sound_source != 0) {