nuclear@0: #ifndef CLOTH_H_ nuclear@0: #define CLOTH_H_ nuclear@0: nuclear@0: #include nuclear@0: #include nuclear@0: #include "object.h" nuclear@0: nuclear@0: using namespace gph; nuclear@0: nuclear@0: struct ClothMass { nuclear@0: Vector3 pos, vel; nuclear@0: bool fixed; nuclear@0: }; nuclear@0: nuclear@0: class Cloth { nuclear@0: private: nuclear@0: float mass, elast; // global mass attributes nuclear@0: float spring_k; // spring constant for all springs nuclear@0: Vector3 grav, forces; nuclear@0: nuclear@0: std::vector masses; nuclear@0: std::vector > conn; // spring lengths, <0 means not connected nuclear@0: nuclear@0: std::vector colliders; nuclear@0: nuclear@0: bool find_collision(const Ray &ray, HitPoint *hit) const; nuclear@0: nuclear@0: public: nuclear@0: Cloth(); nuclear@0: nuclear@0: void create_rect(int x, int y, float width, float height); nuclear@0: nuclear@0: void transform(const Matrix4x4 &xform); nuclear@0: nuclear@0: void add_collider(Object *o); nuclear@0: nuclear@0: void step(float dt); nuclear@0: nuclear@0: void draw() const; nuclear@0: }; nuclear@0: nuclear@0: #endif // CLOTH_H_