{
}
+
+Vector2 Effect::positionDelta(const PhysicsEntity*, float) const
+{
+ return Vector2(0,0);
+}
+Vector2 Effect::velocityDelta(const PhysicsEntity*, float) const
+{
+ return Vector2(0,0);
+}
+Vector2 Effect::forceDelta(const PhysicsEntity*, float) const
+{
+ return Vector2(0,0);
+}
public:
virtual ~Effect();
- virtual Vector2 positionDelta(const PhysicsEntity*, float) const = 0;
- virtual Vector2 velocityDelta(const PhysicsEntity*, float) const = 0;
- virtual Vector2 forceDelta(const PhysicsEntity*, float) const = 0;
+ virtual Vector2 positionDelta(const PhysicsEntity*, float) const;
+ virtual Vector2 velocityDelta(const PhysicsEntity*, float) const;
+ virtual Vector2 forceDelta(const PhysicsEntity*, float) const;
};
#endif // EFFECT_H
}
-Vector2 Gravity::positionDelta(const PhysicsEntity*, float) const
-{
- return Vector2(0, 0);
-}
-
-Vector2 Gravity::velocityDelta(const PhysicsEntity*, float) const
-{
- return Vector2(0, 0);
-}
-
Vector2 Gravity::forceDelta(const PhysicsEntity*, float) const
{
return Vector2(0, 0.001);
Gravity();
~Gravity();
- Vector2 positionDelta(const PhysicsEntity*, float) const;
- Vector2 velocityDelta(const PhysicsEntity*, float) const;
Vector2 forceDelta(const PhysicsEntity*, float) const;
};
#include "../debug.h"
#include "../Entities/PhysicsEntity.h"
+#include "../Entities/Ball.h"
Screen::Screen()
{
}
-Vector2 Screen::positionDelta(const PhysicsEntity*, float) const
-{
- return Vector2(0,0);
-}
-
Vector2 Screen::velocityDelta(const PhysicsEntity* e, float time_step) const
{
const Vector2& pos = e->positionRaw();
Vector2 acc(0,0);
- if(pos.y > 600 && velo.y > 0)
- {
+ float radius = 0;
+ const Ball* b = dynamic_cast<const Ball*>(e);
+ if( b != NULL )
+ radius = b->getRadius();
+
+
+ if(pos.y > 600-radius && velo.y > 0)
acc.y += velo.y * -2;
- }
- if(pos.y < 0 && velo.y < 0)
- {
+ if(pos.y < 0+radius && velo.y < 0)
acc.y += velo.y * -2;
- }
- if(pos.x > 800 && velo.x > 0)
- {
+ if(pos.x > 800-radius && velo.x > 0)
acc.x += velo.x * -2;
- }
- if(pos.x < 0 && velo.x < 0)
- {
+ if(pos.x < 0+radius && velo.x < 0)
acc.x += velo.x * -2;
- }
return acc;
}
-
-Vector2 Screen::forceDelta(const PhysicsEntity*, float) const
-{
- return Vector2(0,0);
-}
Screen();
~Screen();
- Vector2 positionDelta(const PhysicsEntity*, float) const;
Vector2 velocityDelta(const PhysicsEntity*, float) const;
- Vector2 forceDelta(const PhysicsEntity*, float) const;
};
#endif // SCREEN_H
{
glDrawCircle(radius, position, color);
}
+
+float Ball::getRadius() const
+{
+ return radius;
+}
virtual void draw() const;
+ float getRadius() const;
+
protected:
float radius;
const float* color;
ball = new Ball(Vector2(100, 100), 20, cGreen);
- ball->applyImpulse(Vector2(-0.15,0.05)),
+ ball->applyImpulse(Vector2(-0.15,0.55)),
Balls.push(ball);
manager::add(ball);