From 33c19a512cd148961438b7facf46f28eafcf7019 Mon Sep 17 00:00:00 2001 From: Kanishka Chakraborty Date: Thu, 12 Feb 2026 05:03:14 +0000 Subject: [PATCH] Fixed all errors and made progress in getter and setter functions --- include/PhysicsObject.cpp | 111 ++++++++++++++++++++++++++++++++++++++ include/physics_object.h | 55 +++++++++++++++++-- 2 files changed, 161 insertions(+), 5 deletions(-) create mode 100644 include/PhysicsObject.cpp diff --git a/include/PhysicsObject.cpp b/include/PhysicsObject.cpp new file mode 100644 index 0000000..90d62d3 --- /dev/null +++ b/include/PhysicsObject.cpp @@ -0,0 +1,111 @@ +#include "physics_object.h" + +//constructor +PhysicsObject::PhysicsObject(const sf::Vector2f& pos, + float mass, + bool isStatic, + ShapeID id) + : position(pos), + velocity(0.f,0.f), + acceleration(0.f,0.f), + angle(0.f), + angularVelocity(0.f), + angularAcceleration(0.f), + ID(id), + is_static(isStatic) +{ + attributes.mass=mass; + attributes.angularMass=1.0f; + attributes.restitution=0.5f; + attributes.radius=0.f; + attributes.color = sf::Color::White; +} +//destructor +PhysicsObject::~PhysicsObject() = default; +//position +sf::Vector2f PhysicsObject::getPosition() const{ + return position; +} +void PhysicsObject::setPosition(const sf::Vector2f& newPosition){ + position=newPosition; +} +//velocity +sf::Vector2f PhysicsObject::getVelocity() const{ + return velocity; +} + +void PhysicsObject::setVelocity(const sf::Vector2f& newVelocity){ + velocity=newVelocity; +} +//acceleration +sf::Vector2f PhysicsObject::getAcceleration() const{ + return acceleration; +} + +void PhysicsObject::setAcceleration(const sf::Vector2f& newAcceleration) +{ + acceleration=newAcceleration; +} +//angle +float PhysicsObject::getAngle() const{ + return angle; +} +void PhysicsObject::setAngle(const float& newAngle){ + angle=newAngle; +} +//angularVelocity +float PhysicsObject::getAngularVelocity() const{ + return angularVelocity; +} +void PhysicsObject::setAngularVelocity(const float& newAngularVelocity){ + angularVelocity=newAngularVelocity; +} +//angularAcceleration +float PhysicsObject::getAngularAcceleration() const{ + return angularAcceleration; +} +void PhysicsObject::setAngularAcceleration(const float& newAngularAcceleration){ + angularAcceleration=newAngularAcceleration; +} +//ID +ShapeID PhysicsObject::getID() const{ + return ID; +} +void PhysicsObject::setID(const ShapeID& newID){ + ID=newID; +} +//is_static +bool PhysicsObject::getIsStatic() const{ + return is_static; +} +void PhysicsObject::setIsStatic(const bool& newIsStatic){ + is_static=newIsStatic; +} +//attributes +PhysicalAttributes PhysicsObject::getAttributes() const{ + return attributes; +} +void PhysicsObject::setAttributes(const PhysicalAttributes& newAttributes){ + attributes=newAttributes; +} + + + + +void PhysicsObject::update(sf::Time dt){ + velocity+=acceleration*dt.asSeconds(); + position+=velocity*dt.asSeconds(); + acceleration = sf::Vector2f(0.f, 0.f); +} + + + +void PhysicsObject::applyForce(const sf::Vector2f& force){ + if (is_static) return; +acceleration+=force/attributes.mass; +} + +void PhysicsObject::applyImpulse(const sf::Vector2f& impulse){ + if (is_static) return; +velocity+=impulse/attributes.mass; +} diff --git a/include/physics_object.h b/include/physics_object.h index 5e1e0b2..71be6fc 100644 --- a/include/physics_object.h +++ b/include/physics_object.h @@ -1,10 +1,13 @@ -#include +#ifndef PHYSICS_OBJECT_H +#define PHYSICS_OBJECT_H + +#include //pulls in entire graphics system struct PhysicalAttributes { float mass; float angularMass; float restitution; - + float radius; sf::Color color; }; @@ -16,7 +19,7 @@ enum class ShapeID{ }; class PhysicsObject { -private: +protected: sf::Vector2f position; sf::Vector2f velocity; sf::Vector2f acceleration; @@ -30,16 +33,58 @@ class PhysicsObject { PhysicalAttributes attributes; public: + //Constructor + PhysicsObject(const sf::Vector2f& pos,float mass, bool isStatic, ShapeID id); + virtual ~PhysicsObject(); + //position + sf::Vector2f getPosition() const; + void setPosition(const sf::Vector2f& newPosition); + //velocity + sf::Vector2f getVelocity() const; + void setVelocity(const sf::Vector2f& newVelocity); + //acceleration + sf::Vector2f getAcceleration() const; + void setAcceleration(const sf::Vector2f& newAcceleration); + //angle + float getAngle() const; + void setAngle(const float& newAngle); + //angular velocity + float getAngularVelocity() const; + void setAngularVelocity(const float& newAngularVelocity); + //angular acceleration + float getAngularAcceleration() const; + void setAngularAcceleration(const float& newAngularAcceleration); + //id + ShapeID getID() const; + void setID(const ShapeID& newID); + //is_static + bool getIsStatic() const; + void setIsStatic(const bool& newIsStatic); + //attributes + PhysicalAttributes getAttributes() const; + void setAttributes(const PhysicalAttributes& newAttributes); // virtual get.set; + + // apply force // apply impulse - + void applyForce(const sf::Vector2f& force); + void applyImpulse(const sf::Vector2f& impulse); // find aabb + //1. Find AABB (Axis Aligned Bounding Box) + //Returns a rectangle representing the object's boundaries + virtual sf::FloatRect getGlobalBounds() const =0; // bool checkCollision(PhysicsObject& other); + // Returns true if this object is touching the 'other' object + virtual bool checkCollision(PhysicsObject& other)=0; // void resolveCollision(PhysicsObject& other); + //Handles the physics bounce/reaction + virtual void resolveCollision(PhysicsObject& other) =0; virtual void update(sf::Time dt) = 0; // do nothing :) virtual void draw(sf::RenderWindow& window) = 0; -}; \ No newline at end of file +}; + +#endif \ No newline at end of file