/* * mathutil.h * BoE * * Created by Celtic Minstrel on 16/04/09. * */ #pragma once #include #include #include #include // Make sure min and max macros are not defined. // Some Windows headers may define these. #ifdef min #undef min #endif #ifdef max #undef max #endif using std::abs; extern std::mt19937 game_rand; // unique_ran: pass true for get_ran() calls that would break replay compatibility short get_ran(short times, short min, short max, bool use_unique_ran = false); short max(short a,short b); short min(short a,short b); short minmax(short min,short max,short k); int percent(int value, int percentage); short gcd(short a, short b); sf::Time time_in_ticks(int ticks); template inline void move_to_zero(T& val){ if(val < 0) val++; if(val > 0) val--; } template inline T sgn(T val) { return val == 0 ? 0 : std::copysign(1, val); } inline void add_check_overflow(short& val, int how_much) { if(SHRT_MAX - val < how_much){ val = SHRT_MAX; } else val += how_much; }