123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- #ifndef __ccRandom_H_
- #define __ccRandom_H_
- #include <random>
- #include <cstdlib>
- #include "platform/CCPlatformMacros.h"
- NS_CC_BEGIN
- class CC_DLL RandomHelper {
- public:
- template<typename T>
- static T random_real(T min, T max) {
- std::uniform_real_distribution<T> dist(min, max);
- auto &mt = RandomHelper::getEngine();
- return dist(mt);
- }
- template<typename T>
- static T random_int(T min, T max) {
- std::uniform_int_distribution<T> dist(min, max);
- auto &mt = RandomHelper::getEngine();
- return dist(mt);
- }
- private:
- static std::mt19937 &getEngine();
- };
- template<typename T>
- inline T random(T min, T max) {
- return RandomHelper::random_int<T>(min, max);
- }
- template<>
- inline float random(float min, float max) {
- return RandomHelper::random_real(min, max);
- }
- template<>
- inline long double random(long double min, long double max) {
- return RandomHelper::random_real(min, max);
- }
- template<>
- inline double random(double min, double max) {
- return RandomHelper::random_real(min, max);
- }
- inline int random() {
- return cocos2d::random(0, RAND_MAX);
- };
- inline float rand_minus1_1() {
-
-
-
-
- return ((std::rand() / (float)RAND_MAX) * 2) -1;
- };
- inline float rand_0_1() {
-
-
-
-
- return std::rand() / (float)RAND_MAX;
- };
- NS_CC_END
- #endif
|