mirror of
https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1.git
synced 2026-03-20 15:03:32 +00:00
98 lines
2.3 KiB
C++
Executable File
98 lines
2.3 KiB
C++
Executable File
#ifndef MTH_H__
|
|
#define MTH_H__
|
|
|
|
#include <vector>
|
|
#include <set>
|
|
#include <algorithm>
|
|
|
|
namespace Mth {
|
|
constexpr float PI = 3.1415926535897932384626433832795028841971f; // exactly!
|
|
constexpr float TWO_PI = 2.0f * PI; // exactly!
|
|
constexpr float DEGRAD = PI / 180.0f;
|
|
const float RADDEG = 180.0f / PI;
|
|
|
|
void initMth();
|
|
|
|
float sqrt(float x);
|
|
float invSqrt(float x);
|
|
|
|
int floor(float x);
|
|
|
|
float sin(float x);
|
|
float cos(float x);
|
|
|
|
float atan(float x);
|
|
float atan2(float dy, float dx);
|
|
|
|
float random();
|
|
int random(int n);
|
|
|
|
float abs(float a);
|
|
float Min(float a, float b);
|
|
float Max(float a, float b);
|
|
int abs(int a);
|
|
int Min(int a, int b);
|
|
int Max(int a, int b);
|
|
|
|
int clamp(int v, int low, int high);
|
|
float clamp(float v, float low, float high);
|
|
float lerp(float src, float dst, float alpha);
|
|
int lerp(int src, int dst, float alpha);
|
|
|
|
///@param value The original signed value
|
|
///@param with The (possibly signed) value to "abs-decrease" <value> with
|
|
///@param min The minimum value
|
|
float absDecrease(float value, float with, float min);
|
|
//float absIncrease(float value, float with, float max);
|
|
|
|
float absMax(float a, float b);
|
|
float absMaxSigned(float a, float b);
|
|
|
|
int intFloorDiv(int a, int b);
|
|
};
|
|
|
|
namespace Util
|
|
{
|
|
template <class T>
|
|
int removeAll(std::vector<T>& superset, const std::vector<T>& toRemove) {
|
|
int subSize = (int)toRemove.size();
|
|
int removed = 0;
|
|
|
|
for (int i = 0; i < subSize; ++i) {
|
|
T elem = toRemove[i];
|
|
int size = (int)superset.size();
|
|
for (int j = 0; j < size; ++j) {
|
|
if (elem == superset[j]) {
|
|
superset.erase( superset.begin() + j, superset.begin() + j + 1);
|
|
++removed;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return removed;
|
|
}
|
|
|
|
template <class T>
|
|
bool remove(std::vector<T>& list, const T& instance) {
|
|
typename std::vector<T>::iterator it = std::find(list.begin(), list.end(), instance);
|
|
if (it == list.end())
|
|
return false;
|
|
|
|
list.erase(it);
|
|
return true;
|
|
}
|
|
|
|
// Could perhaps do a template<template ..>
|
|
template <class T>
|
|
bool remove(std::set<T>& list, const T& instance) {
|
|
typename std::set<T>::iterator it = std::find(list.begin(), list.end(), instance);
|
|
if (it == list.end())
|
|
return false;
|
|
|
|
list.erase(it);
|
|
return true;
|
|
}
|
|
};
|
|
|
|
#endif // MTH_H__
|