This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
2020-08-04 13:13:01 -04:00

115 lines
2.3 KiB
C++

#pragma once
#include "includes.h"
// ======================================================
// positioning classes
// ======================================================
// std libs being retarded, just use this
template <typename T>
T clip_number(const T& n, const T& lower, const T& upper) {
return max(lower, min(n, upper));
}
typedef float matrix_t[3][4];
class vec2_t;
class vec3_t {
public:
vec3_t();
vec3_t(vec2_t);
vec3_t(float, float, float);
~vec3_t();
float x, y, z; // 12 bytes total
vec3_t& operator+=(const vec3_t& v) {
x += v.x;
y += v.y;
z += v.z;
return *this;
}
vec3_t& operator-=(const vec3_t& v) {
x -= v.x;
y -= v.y;
z -= v.z;
return *this;
}
vec3_t& operator*=(float v) {
x *= v;
y *= v;
z *= v;
return *this;
}
vec3_t& operator/=(float v) {
x /= v;
y /= v;
z /= v;
return *this;
}
vec3_t operator/(const vec3_t& v) {
return vec3_t{x / v.x, y / v.y, z / v.z};
}
vec3_t operator-(const vec3_t& v) {
return vec3_t{x - v.x, y - v.y, z - v.z};
}
vec3_t operator+(const vec3_t& v) {
return vec3_t{x + v.x, y + v.y, z + v.z};
}
vec3_t operator*(float v) const { return vec3_t{x * v, y * v, z * v}; }
void clamp();
vec3_t normalized();
float normalize_in_place();
void normalize();
float length();
float length_sqr();
vec3_t cross(vec3_t cross);
};
class vec2_t {
public:
vec2_t();
vec2_t(vec3_t);
vec2_t(float, float);
~vec2_t();
float x, y; // 8 bytes total
vec2_t& operator+=(const vec2_t& v) {
x += v.x;
y += v.y;
return *this;
}
vec2_t& operator-=(const vec2_t& v) {
x -= v.x;
y -= v.y;
return *this;
}
vec2_t& operator*=(float v) {
x *= v;
y *= v;
return *this;
}
vec2_t operator-(const vec2_t& v) { return vec2_t{x - v.x, y - v.y}; }
vec2_t operator+(const vec2_t& v) { return vec2_t{x + v.x, y + v.y}; }
vec2_t operator*(float v) const { return vec2_t{x * v, y * v}; }
void clamp();
vec2_t normalized();
void normalize();
float length();
float length_sqr();
};