diff --git a/cphysics.c b/cphysics.c new file mode 100644 index 0000000..9f920e2 --- /dev/null +++ b/cphysics.c @@ -0,0 +1,8 @@ +#include "cphysics.h" + +void gravity(universe_t* univ){ + +} +void magnetism(universe_t* univ){ + +} diff --git a/cphysics.h b/cphysics.h new file mode 100644 index 0000000..80b6944 --- /dev/null +++ b/cphysics.h @@ -0,0 +1,7 @@ +#ifndef CPHYSICS_H_ +#define CPHYSICS_H_ +#include "objects.h" +void gravity(universe_t* univ); +void magnetism(universe_t* univ); +void mechanics(universe_t* univ); +#endif // CPHYSICS_H_ diff --git a/main.c b/main.c index cdea2fe..6d349e9 100644 --- a/main.c +++ b/main.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -130,10 +131,6 @@ bool vec2_is_null(Vector2 v) { return false; } -typedef struct universe { - unsigned int num_bodies; - mass_body_t *bodies; -} universe_t; long long timespec_diff_ns(struct timespec end, struct timespec start) { return (end.tv_sec - start.tv_sec) * 1000000000LL + diff --git a/objects.h b/objects.h new file mode 100644 index 0000000..d194f5c --- /dev/null +++ b/objects.h @@ -0,0 +1,16 @@ +#ifndef OBJECTS_H_ +#define OBJECTS_H_ +#include "vec_util.h" + +typedef struct { + float mass; + float radius; + Vector2 position; + Vector2 speed; +} mass_body_t; + +typedef struct universe { + unsigned int num_bodies; + mass_body_t *bodies; +} universe_t; +#endif // OBJECTS_H_ diff --git a/vec_util.h b/vec_util.h new file mode 100644 index 0000000..dc45509 --- /dev/null +++ b/vec_util.h @@ -0,0 +1,42 @@ +#ifndef VEC_UTIL_H_ +#define VEC_UTIL_H_ +#include +#include +static const Vector2 NULL_VEC2 = {0, 0}; + + + +Vector2 transform_to_center(Vector2 v) { + int width = GetRenderWidth(); + int height = GetRenderHeight(); + Vector2 result = {v.x + width / 2.0, v.y + height / 2.0}; + return result; +} + +Vector2 vec2_sum(const Vector2 *a, const Vector2 *b) { + Vector2 result = {a->x + b->x, a->y + b->y}; + return result; +} +Vector2 vec2_diff(const Vector2 *a, const Vector2 *b) { + Vector2 result = {a->x - b->x, a->y - b->y}; + return result; +} + +float vec2_len(Vector2 v) { return sqrtf(v.x * v.x + v.y * v.y); } + +Vector2 vec2_normalize(const Vector2 v) { + float len = vec2_len(v); + Vector2 result = {v.x / len, v.y / len}; + return result; +} + +Vector2 vec2_scale(const Vector2 *normal, const float len) { + Vector2 result = {len * normal->x, len * normal->y}; + return result; +} + +float vec2_dot(const Vector2 *a, const Vector2 *b) { + return a->x * b->x + a->y * b->y; +} + +#endif // VEC_UTIL_H_