From 1a828584a93918e5e2ed5e7d218d00dc50922ae0 Mon Sep 17 00:00:00 2001 From: arngo <27396817+arngo@users.noreply.github.com> Date: Wed, 9 Nov 2022 19:25:39 -0500 Subject: add classes for kinematic and dynamic body each class has a static unordered_set that stores references to each object created --- src/physics.cpp | 19 +++++++++++++++++++ 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_setDynamicBody::dynamicBodies; + std::unordered_setKinematicBody::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 #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 dynamicBodies; + public: + void apply_force(Vector2 force); + DynamicBody(Vector2 position, Vector2 velocity, float mass); + ~DynamicBody(); + }; + + class KinematicBody : public Body { + private: + static std::unordered_set 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); } -- cgit v1.2.3