47 lines
1.4 KiB
C

#ifndef MONS_VEC2_H
#define MONS_VEC2_H
typedef struct mons_vec2 {
float x;
float y;
} mons_vec2;
mons_vec2 mons_vec2_add(mons_vec2 a, mons_vec2 b);
void mons_vec2_add_inplace(mons_vec2 *a, mons_vec2 b);
mons_vec2 mons_vec2_sub(mons_vec2 a, mons_vec2 b);
void mons_vec2_sub_inplace(mons_vec2 *a, mons_vec2 b);
mons_vec2 mons_vec2_mul_f(mons_vec2 a, float b);
mons_vec2 mons_vec2_mul_i(mons_vec2 a, int b);
float mons_vec2_dot(mons_vec2 a, mons_vec2 b);
void mons_vec2_mul_f_inplace(mons_vec2 *a, float b);
void mons_vec2_mul_i_inplace(mons_vec2 *a, int b);
mons_vec2 mons_vec2_div_f(mons_vec2 a, float b);
mons_vec2 mons_vec2_div_i(mons_vec2 a, int b);
void mons_vec2_div_f_inplace(mons_vec2 *a, float b);
void mons_vec2_div_i_inplace(mons_vec2 *a, int b);
float mons_vec2_len(mons_vec2 a);
float mons_vec2_len_squared(mons_vec2 a);
struct mons_vec3 mons_vec2_extend(mons_vec2 a);
int mons_vec2_equal(mons_vec2 a, mons_vec2 b);
mons_vec2 mons_vec2_negate(mons_vec2 a);
void mons_vec2_negate_inplace(mons_vec2 *a);
mons_vec2 mons_vec2_normalize(mons_vec2 a);
void mons_vec2_normalize_inplace(mons_vec2 *a);
#define MONS_VEC2_ZERO (mons_vec2) { 0, 0 }
#define MONS_VEC2_ONE (mons_vec2) { 1, 1 }
#define MONS_VEC2_X (mons_vec2) { 1, 0 }
#define MONS_VEC2_Y (mons_vec2) { 0, 1 }
#define MONS_VEC2_NEG_X (mons_vec2) {-1,0}
#define MONS_VEC2_NEG_Y (mons_vec2) {0,-1}
#endif