nuclear@0: #ifndef PARTICLE_H_ nuclear@0: #define PARTICLE_H_ nuclear@0: nuclear@0: #include nuclear@0: #include "vmath/vmath.h" nuclear@0: nuclear@0: class SimWorld; nuclear@0: struct Collision; nuclear@0: nuclear@0: class Particle { nuclear@0: private: nuclear@0: Vector3 forces; nuclear@0: Vector3 pos, velocity; nuclear@0: float rad; nuclear@0: float elast; nuclear@0: float mass; nuclear@0: float friction; nuclear@0: nuclear@0: std::set ignorelist; nuclear@0: nuclear@0: public: nuclear@0: Particle(); nuclear@0: nuclear@0: void add_ignore(const Particle *p); nuclear@0: nuclear@0: void set_radius(float rad); nuclear@0: float get_radius() const; nuclear@0: nuclear@0: void set_mass(float m); nuclear@0: float get_mass() const; nuclear@0: nuclear@0: void set_elasticity(float e); nuclear@0: float get_elasticity() const; nuclear@0: nuclear@0: void set_position(const Vector3 &pos); nuclear@0: void set_velocity(const Vector3 &vel); nuclear@0: nuclear@0: Vector3 &get_position(); nuclear@0: const Vector3 &get_position() const; nuclear@0: Vector3 &get_velocity(); nuclear@0: const Vector3 &get_velocity() const; nuclear@0: nuclear@0: void set_friction(float frict); nuclear@0: float get_friction() const; nuclear@0: nuclear@0: void add_force(const Vector3 &fvec); nuclear@0: nuclear@0: void step(SimWorld *world, float dt); nuclear@0: nuclear@0: bool collision(const Particle *p2, Collision *col) const; nuclear@0: nuclear@0: void draw() const; nuclear@0: nuclear@0: friend class SimWorld; nuclear@0: }; nuclear@0: nuclear@0: #endif // PARTICLE_H_