diff --git a/source/Library/Numeric/Random.cpp b/source/Library/Numeric/Random.cpp index d082adb1..58981c55 100644 --- a/source/Library/Numeric/Random.cpp +++ b/source/Library/Numeric/Random.cpp @@ -82,6 +82,29 @@ SizeT GenerateSeed() return c; } +// ------------------------------------------------------------------------------------------------ +SizeT GenerateSeed2() +{ + struct { + std::clock_t c; + std::time_t t; +#ifdef SQMOD_OS_WINDOWS + int p; +#else + pid_t p; +#endif + } data; + data.c = std::clock(); + data.t = std::time(nullptr); +#ifdef SQMOD_OS_WINDOWS + data.p = _getpid(); +#else + data.p = getpid(); +#endif + // Mangle and return result + return FnvHash(reinterpret_cast< const uint8_t * >(&data), sizeof(data)); +} + // ------------------------------------------------------------------------------------------------ void ReseedRandom() { @@ -382,6 +405,7 @@ void Register_Random(HSQUIRRELVM vm) { RootTable(vm).Bind(_SC("SqRand"), Table(vm) .Func(_SC("GenSeed"), &GenerateSeed) + .Func(_SC("GenSeed2"), &GenerateSeed2) .Overload< void (*)(void) >(_SC("Reseed"), &ReseedRandom) .Overload< void (*)(Uint32) >(_SC("Reseed"), &ReseedRandom) .Overload< void (*)(void) >(_SC("Reseed32"), &ReseedRandom32)