- float dx=Sector::current()->player->get_pos().x-position.x;
- float dy=Sector::current()->player->get_pos().y-position.y;
- float distance=sqrt(dx*dx+dy*dy);
+ if (latency-- <= 0) {
+ float px,py;
+ float rx,ry;
+
+ 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:
+ (px<position.x+dimension.x?px:position.x+dimension.x);
+ ry=py<position.y?position.y:
+ (py<position.y+dimension.y?py:position.y+dimension.y);
+
+ // calculate square of distance
+ float sqrdistance=(px-rx)*(px-rx)+(py-ry)*(py-ry);
+ sqrdistance-=distance_bias;
+
+ // inside the bias: full volume (distance 0)
+ if (sqrdistance<0)
+ sqrdistance=0;