DragonNest/Common/Utility/MtRandom.h

84 lines
1.5 KiB
C
Raw Normal View History

2024-12-19 09:48:26 +08:00
#pragma once
struct CMtRandom
{
public:
#ifndef _CLIENT
CMtRandom()
{
m_next = m_state;
m_initf = 0;
m_left = 0;
m_nLockInitf = 0;
m_nLockLeft = 0;
m_nLockSeed = 0;
m_seed = 0;
}
#endif // #ifndef _CLIENT
unsigned long m_state[624]; /* the array for the state vector */
int m_left;
int m_initf;
unsigned long *m_next;
unsigned long m_seed;
enum
{
N = 624,
M = 397,
MATRIX_A = 0x9908b0dfUL,
UMASK = 0x80000000UL,
LMASK = 0x7fffffffUL,
};
void next_state(void);
float genrand_real2(void);
long m_nLockSeed;
int m_nLockLeft;
int m_nLockInitf;
//unsigned long *m_pLockNext;
void LockSeed() {
m_nLockSeed = m_seed;
m_nLockLeft = m_left;
m_nLockInitf = m_initf;
//m_pLockNext = m_next;
}
void UnlockSeed() {
m_seed = m_nLockSeed;
m_left = m_nLockLeft;
m_initf = m_nLockInitf;
//m_next = m_pLockNext;
}
void srand(unsigned long seed);
int rand(void);
int rand(unsigned long range);
// <20><> <20>Լ<EFBFBD><D4BC><EFBFBD> genrand_real2() <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD><EFBFBD>ȭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>.
// rand_float <20>Լ<EFBFBD><D4BC><EFBFBD> <20><>ü <20><><EFBFBD><EFBFBD> <20><>Ź<EFBFBD><EFBFBD>ϴ<EFBFBD>. by kalliste
//float rand(float smallVal, float largeVal);
int rand(int smallVal, int largeVal);
float rand_float(float smallVal, float largeVal);
int GetSeed() { return m_seed; }
};
#ifdef PRE_ADD_MTRANDOM_CLIENT
class CMtRandomLocalUsable : public CMtRandom
{
public:
CMtRandomLocalUsable()
{
memset(&m_state, 0, sizeof(m_state));
m_next = m_state;
m_initf = 0;
m_left = 0;
m_nLockInitf = 0;
m_nLockLeft = 0;
m_nLockSeed = 0;
m_seed = 0;
}
};
#endif