polly-b-gone/room_force.h
2012-12-14 09:47:48 -08:00

45 lines
1.1 KiB
C++

// -*- C++ -*-
#ifndef MBOSTOCK_ROOM_FORCE_H
#define MBOSTOCK_ROOM_FORCE_H
#include "physics/force.h"
#include "physics/shape.h"
#include "physics/vector.h"
namespace mbostock {
class Particle;
class Shape;
/**
* Defines a force that applies to the player when the player intersects a
* given shape. For example, this can be used to represent a fan blowing on
* the player, which the force of the fan stronger near the fan blades,
* falling off to zero outside of the fan's stream.
*/
class RoomForce : public UnaryForce {
public:
virtual const Shape& shape() const = 0;
};
/**
* A simple room force that applies a constant force within an axis-aligned
* box. More elaborate forces can be approximated by composing multiple (even
* overlapping) constant room forces.
*/
class ConstantRoomForce : public RoomForce {
public:
ConstantRoomForce(const Vector& min, const Vector& max, const Vector& f);
virtual const Shape& shape() const;
virtual Vector force(const Particle& p);
private:
AxisAlignedBox box_;
Vector force_;
};
}
#endif