Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
111 changes: 111 additions & 0 deletions include/PhysicsObject.cpp
Original file line number Diff line number Diff line change
@@ -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;
}
55 changes: 50 additions & 5 deletions include/physics_object.h
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
#include <SFML/Graphics.hpp>
#ifndef PHYSICS_OBJECT_H
#define PHYSICS_OBJECT_H

#include <SFML/Graphics.hpp> //pulls in entire graphics system

struct PhysicalAttributes {
float mass;
float angularMass;
float restitution;

float radius;
sf::Color color;
};

Expand All @@ -16,7 +19,7 @@ enum class ShapeID{
};

class PhysicsObject {
private:
protected:
sf::Vector2f position;
sf::Vector2f velocity;
sf::Vector2f acceleration;
Expand All @@ -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;
};
};

#endif