diff options
| -rw-r--r-- | src/physics.cpp | 19 | ||||
| -rw-r--r-- | src/physics.hpp | 22 |
2 files changed, 39 insertions, 2 deletions
diff --git a/src/physics.cpp b/src/physics.cpp index b8d4e29..fa9bc38 100644 --- a/src/physics.cpp +++ b/src/physics.cpp @@ -10,9 +10,28 @@ namespace Physics { //force = s_mass * grav //force = s_mass * (grav_const * (r_mass / distance^2)) + std::unordered_set<DynamicBody*>DynamicBody::dynamicBodies; + std::unordered_set<KinematicBody*>KinematicBody::kinematicBodies; + Body::Body(Vector2 position, Vector2 velocity, float mass):position(position), velocity(velocity), mass(mass) { } + DynamicBody::DynamicBody(Vector2 position, Vector2 velocity, float mass):Body(position, velocity, mass) { + dynamicBodies.insert(this); + } + + DynamicBody::~DynamicBody() { + dynamicBodies.erase(this); + } + + KinematicBody::KinematicBody(Vector2 position, Vector2 velocity, float mass):Body(position, velocity, mass) { + kinematicBodies.insert(this); + } + + KinematicBody::~KinematicBody() { + kinematicBodies.erase(this); + } + Body ship = Body((Vector2){200,400}, (Vector2){0,0.5}, 1); Body rock = Body((Vector2){400,400}, (Vector2){0,0}, 50); diff --git a/src/physics.hpp b/src/physics.hpp index e26df15..de6172a 100644 --- a/src/physics.hpp +++ b/src/physics.hpp @@ -1,8 +1,8 @@ #pragma once +#include <unordered_set> #include "raylib.h" namespace Physics { - class Body { public: Vector2 position; @@ -11,10 +11,28 @@ namespace Physics { Body(Vector2 position, Vector2 velocity, float mass); }; + // TODO: replace these hardcoded bodies with dynamic/kinematic bodies in gameplay system extern Body ship;// = Body((Vector2){50,50}, (Vector2){0,1}, 1); extern Body rock;// = Body((Vector2){400,400}, (Vector2){0,0}, 50); + class DynamicBody : public Body { + private: + static std::unordered_set<DynamicBody*> dynamicBodies; + public: + void apply_force(Vector2 force); + DynamicBody(Vector2 position, Vector2 velocity, float mass); + ~DynamicBody(); + }; + + class KinematicBody : public Body { + private: + static std::unordered_set<KinematicBody*> kinematicBodies; + public: + KinematicBody(Vector2 position, Vector2 velocity, float mass); + ~KinematicBody(); + }; + //0.01667 - void step(float deltaTime); + void step(float deltaTime, int times=1); Vector2 get_grav_force(Body body1, Body body2); } |
