Files
st/include/System/Random.hpp
T
Yanis 0698c28bb0 Vector improvements (#67)
* clean up math.h and attempt to improve existing vector maths

* fix broken matches and match new stuff
2026-05-24 01:33:53 +02:00

71 lines
1.4 KiB
C++

#pragma once
#include "global.h"
#include "math.hpp"
#include "types.h"
struct Random {
/* 00 */ u16 mRandomValue[4];
/* 08 */ u64 mFactor;
/* 10 */ u64 mAddend;
/* 18 */
/**
* @brief Gets the seed's value
*/
u64 GetRandomValue() {
return *(u64 *) this->mRandomValue;
}
/**
* @brief Updates the seed's value
*/
void UpdateRandomValue() {
*(u64 *) this->mRandomValue = this->mAddend + (this->mFactor * this->GetRandomValue());
}
/**
* @brief Generates a random number as a u16
*/
u16 Next16() {
this->UpdateRandomValue();
return this->GetRandomValue() >> 48;
}
/**
* @brief Generates a random number from 0 (inclusive) to `max` (exclusive) as a u32
*/
u32 Next32(u64 min, u64 max) {
this->UpdateRandomValue();
return (((this->GetRandomValue() >> 32) * (max - min)) >> 32) + min;
}
u16 ConditionalNext16(u32 value) {
this->UpdateRandomValue();
u64 result = this->GetRandomValue() >> 32;
if (value != 0) {
result = (result * value) >> 32;
}
return result;
}
u32 ConditionalNext32(u32 value) {
this->UpdateRandomValue();
u32 result = this->GetRandomValue() >> 32;
if (value != 0) {
return ((u64) result * value) >> 32;
}
return result;
}
void Init();
};
extern Random gRandom;