basic gravity working through effects
authorPatrik Gornicz <Gornicz.P@gmail.com>
Fri, 1 Aug 2008 23:03:01 +0000 (19:03 -0400)
committerPatrik Gornicz <Gornicz.P@gmail.com>
Fri, 1 Aug 2008 23:03:01 +0000 (19:03 -0400)
src/Effects/Effect.h
src/Effects/Gravity.cpp
src/Effects/Gravity.h
src/Entities/PhysicsEntity.cpp
src/Entities/PhysicsEntity.h
src/Makefile

index 58c8afa..963ecb2 100644 (file)
@@ -2,7 +2,9 @@
 #define EFFECT_H
 
 #include "../Vector2.h"
-#include "../Entities/PhysicsEntity.h"
+
+//#include "../Entities/PhysicsEntity.h"
+class PhysicsEntity;
 
 /// ***** Header Class *****
 class Effect
index d7852d3..c8394b4 100644 (file)
@@ -9,17 +9,17 @@ Gravity::~Gravity()
 
 }
 
-Vector2 Gravity::positionDelta(const PhysicsEntity*, float)
+Vector2 Gravity::positionDelta(const PhysicsEntity*, float) const
 {
     return Vector2(0, 0);
 }
 
-Vector2 Gravity::velocityDelta(const PhysicsEntity*, float)
+Vector2 Gravity::velocityDelta(const PhysicsEntity*, float) const
 {
     return Vector2(0, 0);
 }
 
-Vector2 Gravity::forceDelta(const PhysicsEntity*, float)
+Vector2 Gravity::forceDelta(const PhysicsEntity*, float) const
 {
-    return Vector2(0, 0.000001);
+    return Vector2(0, 0.001);
 }
index f6dd459..dc04726 100644 (file)
@@ -9,11 +9,11 @@ class Gravity: public Effect
 {
   public:
     Gravity();
-    ~Gravity();
+    virtual ~Gravity();
 
-    Vector2 positionDelta(const PhysicsEntity*, float);
-    Vector2 velocityDelta(const PhysicsEntity*, float);
-    Vector2 forceDelta(const PhysicsEntity*, float);
+    Vector2 positionDelta(const PhysicsEntity*, float) const;
+    Vector2 velocityDelta(const PhysicsEntity*, float) const;
+    Vector2 forceDelta(const PhysicsEntity*, float) const;
 };
 
 #endif // GRAVITY_H
index c48d7d0..727b89f 100644 (file)
@@ -2,16 +2,18 @@
 #include "../debug.h"
 
 #include "../Vector2.h"
+#include "../Effects/Effect.h"
+#include "../Effects/Gravity.h"
 
 /// ***** Public Class Methods *****
 PhysicsEntity::PhysicsEntity(const Vector2& pos)
     : Entity(pos), force(0,0), mass(1), CoR(1)
 {
-
+    g = new Gravity();
 }
 PhysicsEntity::~PhysicsEntity()
 {
-
+    delete g;
 }
 
 void PhysicsEntity::update(float time_step)
@@ -24,12 +26,26 @@ void PhysicsEntity::update(float time_step)
 
 Vector2 PhysicsEntity::positionAt(float time_step) const
 {
-    return force/mass / 2 * time_step * time_step + velocity * time_step + position;
+    Vector2 newPosition = position;
+    Vector2 newVelocity = velocity;
+    Vector2 newForce = force;
+
+    newPosition += g->positionDelta(this, time_step);
+    newVelocity += g->velocityDelta(this, time_step);
+    newForce += g->forceDelta(this, time_step);
+
+    return newForce/mass / 2 * time_step * time_step + newVelocity * time_step + newPosition;
 }
 
 Vector2 PhysicsEntity::velocityAt(float time_step) const
 {
-    return force/mass / 2 * time_step + velocity;
+    Vector2 newForce = force;
+    Vector2 newVelocity = velocity;
+
+    newForce += g->forceDelta(this, time_step);
+    newVelocity += g->velocityDelta(this, time_step);
+
+    return newForce/mass / 2 * time_step + newVelocity;
 }
 
 void PhysicsEntity::applyForce(const Vector2& force)
index dd6455b..4df29b3 100644 (file)
@@ -2,32 +2,35 @@
 #define PHYSICS_H
 
 #include "Entity.h"
+#include "../Effects/Effect.h"
 #include "../Vector2.h"
 
 /// ***** Header Class *****
 class PhysicsEntity: public Entity
 {
-    protected:
-        PhysicsEntity(const Vector2&);
+  protected:
+    PhysicsEntity(const Vector2&);
 
-    public:
-        virtual ~PhysicsEntity();
+  public:
+    virtual ~PhysicsEntity();
 
-        virtual void update(float);
+    virtual void update(float);
 
-        virtual Vector2 positionAt(float) const;
-        virtual Vector2 velocityAt(float) const;
+    virtual Vector2 positionAt(float) const;
+    virtual Vector2 velocityAt(float) const;
 
-        virtual void applyForce(const Vector2&);
-        virtual void applyImpulse(const Vector2&);
+    virtual void applyForce(const Vector2&);
+    virtual void applyImpulse(const Vector2&);
 
-    protected:
-        Vector2 force;
+  protected:
+    Vector2 force;
 
-        float mass;
+    float mass;
 
-        // Coefficient of Restitution
-        float CoR;
+    // Coefficient of Restitution
+    float CoR;
+
+    Effect* g;
 };
 
 #endif // PHYSICS_H
index b7fcb11..6d5b94e 100644 (file)
@@ -119,6 +119,10 @@ git-tar:
 run: all
        ${TARGET}
 
+.PHONY: gdb
+gdb: all
+       gdb ${TARGET}
+
 .PHONY: val
 val: all
        valgrind --leak-check=full ${TARGET}