#ifndef PHYSICS_HH
#define PHYSICS_HH
#include "Vector.hh"
#include <ClanLib/core.h>
const uint16_t PHYSICS_TICK_MS = 50;
const uint16_t PHYSICS_WORLD_WIDTH = 800;
const uint16_t PHYSICS_WORLD_HEIGHT = 600;
const Vector GRAVITY_FORCE(0,-1);
// forward-declare
class PhysicsObject;
class PhysicsWorld {
private:
CL_Timer tick_timer;
protected:
std::vector<PhysicsObject*> objects;
Vector dimensions;
CL_SlotContainer slots;
PhysicsWorld (Vector dimensions);
public:
void addObject (PhysicsObject *object);
void tick (void);
};
class PhysicsObject {
protected:
Vector position;
Vector velocity;
Vector force;
uint16_t mass;
PhysicsObject (uint16_t mass, Vector position, Vector velocity, Vector force);
private:
void updatePosition (void);
protected:
void applyForce (Vector force);
void updatePhysics (Vector position, Vector velocity, Vector force);
public:
Vector getPosition (void);
void tick (void);
};
void tickObject(PhysicsObject* obj);
#endif