4 #include "cgmath/cgmath.h"
13 /* used for stringing fixed masses together */
14 struct rsim_mass *next;
22 struct rsim_mass *masses;
24 struct rsim_spring *springs; /* adjacency matrix */
26 struct rsim_rope *next;
30 struct rsim_rope *ropes; /* list of ropes to simulate */
32 cgm_vec3 grav, extforce;
35 float udt; /* microstepping delta (valid if > 0) */
36 float udelta_acc; /* dt leftover accumulator for microstepping */
39 int rsim_init(struct rsim_world *rsim);
40 void rsim_destroy(struct rsim_world *rsim);
42 int rsim_add_rope(struct rsim_world *rsim, struct rsim_rope *rope);
44 void rsim_step(struct rsim_world *rsim, float dt);
46 struct rsim_rope *rsim_alloc_rope(int nmasses);
47 void rsim_free_rope(struct rsim_rope *rope);
48 int rsim_init_rope(struct rsim_rope *rope, int nmasses);
49 void rsim_destroy_rope(struct rsim_rope *rope);
51 #define RSIM_RLEN_DEFAULT (-1.0f)
52 int rsim_set_rope_spring(struct rsim_rope *rope, int ma, int mb, float k, float rlen);
53 int rsim_have_spring(struct rsim_rope *rope, int ma, int mb);
55 int rsim_freeze_rope_mass(struct rsim_rope *rope, struct rsim_mass *m);
56 int rsim_unfreeze_rope_mass(struct rsim_rope *rope, struct rsim_mass *m);
58 #endif /* ROPESIM_H_ */