123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- // random.cpp
- #include "CvGameCoreDLL.h"
- #include "CvRandom.h"
- #include "CvGlobals.h"
- #include "CyArgsList.h"
- #include "CvGameAI.h"
- #define RANDOM_A (1103515245)
- #define RANDOM_C (12345)
- #define RANDOM_SHIFT (16)
- CvRandom::CvRandom()
- {
- reset();
- enableLogs = true;
- }
- CvRandom::~CvRandom()
- {
- uninit();
- }
- void CvRandom::init(unsigned long ulSeed)
- {
- //--------------------------------
- // Init saved data
- reset(ulSeed);
- //--------------------------------
- // Init non-saved data
- }
- void CvRandom::uninit()
- {
- }
- // FUNCTION: reset()
- // Initializes data members that are serialized.
- void CvRandom::reset(unsigned long ulSeed)
- {
- //--------------------------------
- // Uninit class
- uninit();
- m_ulRandomSeed = ulSeed;
- }
- unsigned short CvRandom::get(unsigned short usNum, const TCHAR* pszLog)
- {
- if (pszLog != NULL)
- {
- if (enableLogs && GC.getLogging() && GC.getRandLogging())
- {
- if (GC.getGameINLINE().getTurnSlice() > 0)
- {
- TCHAR szOut[1024];
- sprintf(szOut, "Rand = %d on %d (%s)\n", getSeed(), GC.getGameINLINE().getTurnSlice(), pszLog);
- TCHAR szFileName[1024];
- sprintf(szFileName, "SynchLog - %S.txt", GET_PLAYER(GC.getGameINLINE().getActivePlayer()).getName());
- gDLL->logMsg(szFileName, szOut, false, false);
- }
- }
- }
- m_ulRandomSeed = ((RANDOM_A * m_ulRandomSeed) + RANDOM_C);
- unsigned short us = ((unsigned short)((((m_ulRandomSeed >> RANDOM_SHIFT) & MAX_UNSIGNED_SHORT) * ((unsigned long)usNum)) / (MAX_UNSIGNED_SHORT + 1)));
- return us;
- }
- float CvRandom::getFloat()
- {
- return (((float)(get(MAX_UNSIGNED_SHORT))) / ((float)MAX_UNSIGNED_SHORT));
- }
- void CvRandom::reseed(unsigned long ulNewValue)
- {
- m_ulRandomSeed = ulNewValue;
- }
- unsigned long CvRandom::getSeed()
- {
- return m_ulRandomSeed;
- }
- void CvRandom::read(FDataStreamBase* pStream)
- {
- reset();
- pStream->Read(&m_ulRandomSeed);
- }
- void CvRandom::write(FDataStreamBase* pStream)
- {
- pStream->Write(m_ulRandomSeed);
- }
- void CvRandom::setLogging(bool enabled)
- {
- enableLogs = enabled;
- }
|