Fix underwater sfx in demos

This commit is contained in:
bibendovsky 2014-08-03 19:32:56 +03:00
parent 924cad6bdf
commit 1a514560da

View file

@ -27,6 +27,7 @@
#include "header/common.h"
#include "../client/sound/header/local.h"
#include "../client/header/client.h"
#if !defined(DEDICATED_ONLY) && defined(USE_OPENAL)
void AL_Underwater();
@ -1265,16 +1266,89 @@ PM_ClampAngles(void)
AngleVectors(pm->viewangles, pml.forward, pml.right, pml.up);
}
void PM_CalculateViewHeightForDemo()
{
if (pm->s.pm_type == PM_GIB)
pm->viewheight = 8;
else {
if ((pm->s.pm_flags & PMF_DUCKED) != 0)
pm->viewheight = -2;
else
pm->viewheight = 22;
}
}
void PM_CalculateWaterLevelForDemo()
{
vec3_t point;
int cont;
float sample1;
float sample2;
point[0] = pml.origin[0];
point[1] = pml.origin[1];
pm->waterlevel = 0;
pm->watertype = 0;
sample2 = pm->viewheight - pm->mins[2];
sample1 = sample2 / 2;
point[2] = pml.origin[2] + pm->mins[2] + 1;
cont = pm->pointcontents(point);
if ((cont & MASK_WATER) != 0) {
pm->watertype = cont;
pm->waterlevel = 1;
point[2] = pml.origin[2] + pm->mins[2] + sample1;
cont = pm->pointcontents(point);
if ((cont & MASK_WATER) != 0) {
pm->waterlevel = 2;
point[2] = pml.origin[2] + pm->mins[2] + sample2;
cont = pm->pointcontents(point);
if ((cont & MASK_WATER) != 0)
pm->waterlevel = 3;
}
}
}
void PM_UpdateUnderwaterSfx()
{
#if !defined(DEDICATED_ONLY)
static int underwater;
#endif
#if !defined(DEDICATED_ONLY)
if ((pm->waterlevel == 3) && !underwater) {
underwater = 1;
snd_is_underwater = 1;
#ifdef USE_OPENAL
if (snd_is_underwater_enabled)
AL_Underwater();
#endif
}
if ((pm->waterlevel < 3) && underwater) {
underwater = 0;
snd_is_underwater = 0;
#ifdef USE_OPENAL
if (snd_is_underwater_enabled)
AL_Overwater();
#endif
}
#endif
}
/*
* Can be called by either the server or the client
*/
void
Pmove(pmove_t *pmove)
{
#if !defined(DEDICATED_ONLY)
static int underwater;
#endif
pm = pmove;
/* clear results */
@ -1320,6 +1394,12 @@ Pmove(pmove_t *pmove)
if (pm->s.pm_type == PM_FREEZE)
{
if (cl.attractloop) {
PM_CalculateViewHeightForDemo();
PM_CalculateWaterLevelForDemo();
PM_UpdateUnderwaterSfx();
}
return; /* no movement at all */
}
@ -1415,27 +1495,7 @@ Pmove(pmove_t *pmove)
/* set groundentity, watertype, and waterlevel for final spot */
PM_CatagorizePosition();
#if !defined(DEDICATED_ONLY)
if ((pm->waterlevel == 3) && !underwater)
{
underwater = 1;
snd_is_underwater = 1;
#ifdef USE_OPENAL
if (snd_is_underwater_enabled)
AL_Underwater();
#endif
}
if (((pm->waterlevel < 3) && underwater))
{
underwater = 0;
snd_is_underwater = 0;
#ifdef USE_OPENAL
if (snd_is_underwater_enabled)
AL_Overwater();
#endif
}
#endif
PM_UpdateUnderwaterSfx();
PM_SnapPosition();
}