I’m writing a 2D game engine using C++ and SDL2 and started implementing a rigidbody component similar to that of unity to my gameobjects. I have a method in the rigidbody class called AddForce which takes a 2D vector force as a parameter and calculates the velocity vector using F = M*A, I use this function to move the character left and right using the keyboard arrows. Now my question is, how do I manage the gravity with this and how do I calculate the resultant force of the gravity and the force applied when pressing either keyboard arrows. Here is the rigidbody class.
#ifndef RIGIDBODY_H #define RIGIDBODY_H //Game engine libraries #include "gameEngine/Game.h" #include "gameEngine/GameObject.h" #include "gameEngine/Component.h" #include "gameEngine/components/Transform.h" //GlM library #include "glm/glm.hpp" class RigidBody : public Component { private: Transform* m_transfrom; private: float m_mass; float m_acceleration; glm::vec2 m_forceApplied; glm::vec2 m_velocity; private: float m_deltaTime; public: RigidBody(float mass) { m_name = "RigidBody"; m_mass = mass; m_acceleration = 0; m_forceApplied = glm::vec2(0,0); m_velocity = glm::vec2(0,0); } public: void AddForce(glm::vec2 force, float deltaTime) { float forceMagnitude; m_deltaTime = deltaTime; m_forceApplied = force; forceMagnitude = glm::length(force); m_acceleration = forceMagnitude / m_mass; } private: glm::vec2 CalculateVelocity() { float velocityMagnitude; static glm::vec2 newVelocity = glm::vec2(0,0); velocityMagnitude = m_acceleration * m_deltaTime; if(m_forceApplied.x != 0 || m_forceApplied.y != 0) newVelocity = glm::normalize(m_forceApplied); else newVelocity = glm::vec2(0,0); newVelocity = newVelocity * velocityMagnitude; return newVelocity; } public: void Initialize() override { m_transfrom = m_owner->GetComponent<Transform>("Transform"); } void Update(Game instance, float deltaTime) override { m_velocity += CalculateVelocity(); m_transfrom->position.x += m_velocity.x * deltaTime; m_transfrom->position.y += m_velocity.y * deltaTime; } void Render() override { } }; #endif