Paranoia2/game_shared/randomrange.h

78 lines
2.2 KiB
C++

/*
randomrange.h - simple class of implementation random values
Copyright (C) 2011 Uncle Mike
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
*/
#ifndef RANDOMRANGE_H
#define RANDOMRANGE_H
#include <vector.h>
#include <stringlib.h>
class RandomRange
{
public:
RandomRange() { m_flMin = m_flMax = 0; m_bDefined = false; }
RandomRange( float fValue ) { m_flMin = m_flMax = fValue; m_bDefined = true; }
RandomRange( float fMin, float fMax) { m_flMin = fMin; m_flMax = fMax; m_bDefined = true; }
RandomRange( const char *szToken )
{
char *mutableToken = new char[Q_strlen(szToken)];
strcpy(mutableToken, szToken);
char *cOneDot = NULL;
m_bDefined = true;
for( char *c = mutableToken; *c; c++ )
{
if( *c == '.' )
{
if( cOneDot != NULL )
{
// found two dots in a row - it's a range
*cOneDot = 0; // null terminate the first number
m_flMin = Q_atof( szToken ); // parse the first number
*cOneDot = '.'; // change it back, just in case
c++;
m_flMax = Q_atof( c ); // parse the second number
return;
}
else cOneDot = c;
}
else cOneDot = NULL;
}
delete[] mutableToken;
// no range, just record the number
m_flMax = m_flMin = Q_atof( szToken );
}
// a simple implementation of RANDOM_FLOAT for now
float Random() { return RANDOM_FLOAT(m_flMin, m_flMax); }
float Random() const { return RANDOM_FLOAT(m_flMin, m_flMax); }
float GetInstance() { return Random(); }
float GetOffset( float fBasis ) { return Random() - fBasis; }
bool IsDefined() { return m_bDefined; }
// array access...
operator float *() { return &m_flMin; }
operator const float *() const { return &m_flMin; }
float m_flMin, m_flMax; // NOTE: should be first so array acess is working correctly
bool m_bDefined;
};
#endif//RANDOMRANGE_H