Make sure key and velocity ranges are the first two generators

This commit is contained in:
Chris Robinson
2013-12-21 15:28:46 -08:00
parent ede3c20880
commit 0df5eb90ea
+28
View File
@@ -297,6 +297,34 @@ ALenum ALsfzone_addGenerator(ALsfzone *self, ALenum generator, ALint value)
self->GeneratorsMax = newmax;
}
/* Make sure key range generator is first in the list. */
if(generator == 43/*key range*/ && self->NumGenerators > 0)
{
memmove(&self->Generators[1], &self->Generators[0], self->NumGenerators);
self->Generators[0].Generator = generator;
self->Generators[0].Value = value;
self->NumGenerators++;
return AL_NO_ERROR;
}
/* Make sure velocity range generator is second only to key range. */
if(generator == 44/*vel range*/ && self->NumGenerators > 0)
{
ALsizei base = 0;
if(self->Generators[0].Generator == 43/*key range*/)
base = 1;
if(self->NumGenerators > base)
{
memmove(&self->Generators[base+1], &self->Generators[base], self->NumGenerators-base);
self->Generators[base].Generator = generator;
self->Generators[base].Value = value;
self->NumGenerators++;
return AL_NO_ERROR;
}
}
self->Generators[self->NumGenerators].Generator = generator;
self->Generators[self->NumGenerators].Value = value;
self->NumGenerators++;