CvRandom.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. // random.cpp
  2. #include "CvGameCoreDLL.h"
  3. #include "CvRandom.h"
  4. #include "CvGlobals.h"
  5. #include "CyArgsList.h"
  6. #include "CvGameAI.h"
  7. #define RANDOM_A (1103515245)
  8. #define RANDOM_C (12345)
  9. #define RANDOM_SHIFT (16)
  10. CvRandom::CvRandom()
  11. {
  12. reset();
  13. enableLogs = true;
  14. }
  15. CvRandom::~CvRandom()
  16. {
  17. uninit();
  18. }
  19. void CvRandom::init(unsigned long ulSeed)
  20. {
  21. //--------------------------------
  22. // Init saved data
  23. reset(ulSeed);
  24. //--------------------------------
  25. // Init non-saved data
  26. }
  27. void CvRandom::uninit()
  28. {
  29. }
  30. // FUNCTION: reset()
  31. // Initializes data members that are serialized.
  32. void CvRandom::reset(unsigned long ulSeed)
  33. {
  34. //--------------------------------
  35. // Uninit class
  36. uninit();
  37. m_ulRandomSeed = ulSeed;
  38. }
  39. unsigned short CvRandom::get(unsigned short usNum, const TCHAR* pszLog)
  40. {
  41. if (pszLog != NULL)
  42. {
  43. if (enableLogs && GC.getLogging() && GC.getRandLogging())
  44. {
  45. if (GC.getGameINLINE().getTurnSlice() > 0)
  46. {
  47. TCHAR szOut[1024];
  48. sprintf(szOut, "Rand = %d on %d (%s)\n", getSeed(), GC.getGameINLINE().getTurnSlice(), pszLog);
  49. TCHAR szFileName[1024];
  50. sprintf(szFileName, "SynchLog - %S.txt", GET_PLAYER(GC.getGameINLINE().getActivePlayer()).getName());
  51. gDLL->logMsg(szFileName, szOut, false, false);
  52. }
  53. }
  54. }
  55. m_ulRandomSeed = ((RANDOM_A * m_ulRandomSeed) + RANDOM_C);
  56. unsigned short us = ((unsigned short)((((m_ulRandomSeed >> RANDOM_SHIFT) & MAX_UNSIGNED_SHORT) * ((unsigned long)usNum)) / (MAX_UNSIGNED_SHORT + 1)));
  57. return us;
  58. }
  59. float CvRandom::getFloat()
  60. {
  61. return (((float)(get(MAX_UNSIGNED_SHORT))) / ((float)MAX_UNSIGNED_SHORT));
  62. }
  63. void CvRandom::reseed(unsigned long ulNewValue)
  64. {
  65. m_ulRandomSeed = ulNewValue;
  66. }
  67. unsigned long CvRandom::getSeed()
  68. {
  69. return m_ulRandomSeed;
  70. }
  71. void CvRandom::read(FDataStreamBase* pStream)
  72. {
  73. reset();
  74. pStream->Read(&m_ulRandomSeed);
  75. }
  76. void CvRandom::write(FDataStreamBase* pStream)
  77. {
  78. pStream->Write(m_ulRandomSeed);
  79. }
  80. void CvRandom::setLogging(bool enabled)
  81. {
  82. enableLogs = enabled;
  83. }