diff options
| author | arngo <[email protected]> | 2022-11-09 19:25:39 -0500 |
|---|---|---|
| committer | arngo <[email protected]> | 2022-11-09 19:25:39 -0500 |
| commit | 1a828584a93918e5e2ed5e7d218d00dc50922ae0 (patch) | |
| tree | 39211689618f5812c52d507a63f1867d514d29ee | |
| parent | a9649b97ddfb0b39f8b3c27b14a7d855b1e824fa (diff) | |
| download | orbital_game-1a828584a93918e5e2ed5e7d218d00dc50922ae0.tar.gz orbital_game-1a828584a93918e5e2ed5e7d218d00dc50922ae0.zip | |
add classes for kinematic and dynamic body
each class has a static unordered_set that stores references to each
object created
| -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); } |
