4#include <nw/eft/eft_typeDef.h>
6namespace nw {
namespace eft {
21 Random(u32 seed_0, u32 seed_1, u32 seed_2, u32 seed_3)
33 static const u32 a = 1812433253;
34 mX = (seed ^ (seed >> 30)) * a + 1;
35 mY = (mX ^ (mX >> 30)) * a + 2;
36 mZ = (mY ^ (mY >> 30)) * a + 3;
37 mW = (mZ ^ (mZ >> 30)) * a + 4;
40 void Init(u32 seed_0, u32 seed_1, u32 seed_2, u32 seed_3)
42 if (seed_0 == 0 && seed_1 == 0 && seed_2 == 0 && seed_3 == 0)
56 u32 t = (mX^(mX<<11));
60 mW = (mW^(mW>>19))^(t^(t>>8));
66 return static_cast<u32>(((u64)GetU32() * ceil) >> 32);
71 return GetU32(b - a) + a;
76 return f32(GetU32()) * (1.0f / 4294967296.0f);
81 return GetF32() * ceil;
86 return GetF32(b - a) + a;
91 return GetU32() * (1.0 / 4294967296.0);
96 return GetF64() * ceil;
101 return GetF64(b - a) + a;
106 return (GetU32() & 2) - 1;
111 return static_cast<
bool>(GetU32() & 1);
114 void GetContext(u32* num_0, u32* num_1, u32* num_2, u32* num_3)
const
128static_assert(
sizeof(
Random) == 0x10,
"Random size mismatch");
142 mVec3RndIx = u16(val) >> 0;
143 mNormalizedVec3RndIx = u16(val) >> 16;
153 mRnd = mRnd * 1103515245 + 12345;
159 return f32(GetU32Direct()) * (1.0f / 4294967296.0f);
163
164
165
166
167
168
169
170
174 return GetU32Direct() >> 24;
179 return static_cast<s32>(((u64)GetU32Direct() * val) >> 32);
200static_assert(
sizeof(
PtclRandom) == 8,
"nw::eft::PtclRandom size mismatch");
Definition eft_Random.h:133
u32 GetU32Direct()
Definition eft_Random.h:150
u32 mRnd
Definition eft_Random.h:196
f32 GetF32()
Definition eft_Random.h:157
static Random gRandom
Definition eft_Random.h:198
static nw::math::VEC3 * mVec3Tbl
Definition eft_Random.h:191
s32 GetS32()
Definition eft_Random.h:172
const nw::math::VEC3 & GetVec3()
Definition eft_Random.h:147
static nw::math::VEC3 * mNormalizedVec3Tbl
Definition eft_Random.h:192
s32 GetS32(int val)
Definition eft_Random.h:177
void SetSeed(u32 val)
Definition eft_Random.h:140
@ cNumVec3Tbl
Definition eft_Random.h:187
@ cNumVec3TblMask
Definition eft_Random.h:188
u16 mNormalizedVec3RndIx
Definition eft_Random.h:195
static Random * GetGlobalRandom()
Definition eft_Random.cpp:11
const nw::math::VEC3 & GetNormalizedVec3()
Definition eft_Random.h:148
u16 mVec3RndIx
Definition eft_Random.h:194
static void CreateRandomTbl(Heap *heap)
Definition eft_Random.cpp:16
static void DestroyRandomTbl(Heap *heap)
Definition eft_Random.cpp:36
Definition eft_Random.h:9
s32 GetS32Range(s32 a, s32 b)
Definition eft_Random.h:69
f32 GetF32Range(f32 a, f32 b)
Definition eft_Random.h:84
u32 GetU32(u32 ceil)
Definition eft_Random.h:64
void Init()
Definition eft_Random.h:26
Random(u32 seed)
Definition eft_Random.h:16
u32 mY
Definition eft_Random.h:124
Random()
Definition eft_Random.h:11
int GetSign()
Definition eft_Random.h:104
void Init(u32 seed_0, u32 seed_1, u32 seed_2, u32 seed_3)
Definition eft_Random.h:40
void GetContext(u32 *num_0, u32 *num_1, u32 *num_2, u32 *num_3) const
Definition eft_Random.h:114
void Init(u32 seed)
Definition eft_Random.h:31
Random(u32 seed_0, u32 seed_1, u32 seed_2, u32 seed_3)
Definition eft_Random.h:21
f64 GetF64Range(f64 a, f64 b)
Definition eft_Random.h:99
u32 GetU32()
Definition eft_Random.h:54
u32 mW
Definition eft_Random.h:126
f32 GetF32()
Definition eft_Random.h:74
f32 GetF32(f32 ceil)
Definition eft_Random.h:79
f64 GetF64()
Definition eft_Random.h:89
f64 GetF64(f64 ceil)
Definition eft_Random.h:94
bool GetBool()
Definition eft_Random.h:109
u32 mZ
Definition eft_Random.h:125
u32 mX
Definition eft_Random.h:123
Definition eft_CafeWrapper.cpp:117