- const int num_ropes = 4;
- const int num_rope_objects = 4;
- const int num_objects = num_ropes * num_rope_objects;
- const int num_strings = num_ropes * (num_rope_objects - 1) +
- (num_ropes - 1) * num_rope_objects;
- const int string_length = 20;
- const int rope_offset = 20;
- double x, y;
- int i, j, index, string_index;
-
- memset (model, 0, sizeof *model);
- model->objects = g_new (Object, num_objects);
- model->num_objects = num_objects;
- model->strings = g_new (String, num_strings);
- model->num_strings = num_strings;
- model->offsets = g_new (Offset, 1);
- model->num_offsets = 1;
- model_init_polygons (model);
-
- model->offsets[0].num_objects = num_ropes;
- model->offsets[0].objects = g_new (Object *, num_ropes);
- model->offsets[0].dx = rope_offset;
- model->offsets[0].dy = 0;
-
- for (i = 0; i < num_ropes; i++) {
- for (j = 0; j < num_rope_objects; j++) {
- x = 200 + i * rope_offset;
- y = 40 + j * string_length;
- index = i * num_rope_objects + j;
- model->objects[index].position.x = x;
- model->objects[index].position.y = y;
- model->objects[index].previous_position.x = x;
- model->objects[index].previous_position.y = y;
- model->objects[index].mass = 1;
-
- if (i + 1 < num_ropes) {
- string_index = i * num_rope_objects + j;
- model->strings[string_index].a = &model->objects[index];
- model->strings[string_index].b = &model->objects[index + num_rope_objects];
- model->strings[string_index].length = string_length;
- }
-
- if (j + 1 < num_rope_objects) {
- string_index =
- (num_ropes - 1) * num_rope_objects + i * (num_rope_objects - 1) + j;
- model->strings[string_index].a = &model->objects[index];
- model->strings[string_index].b = &model->objects[index + 1];
- model->strings[string_index].length = string_length;
- }
- }
-
- model->offsets[0].objects[i] = &model->objects[i * num_rope_objects];
- }
-
- model->anchor_object = NULL;
+ const int num_ropes = 8;
+ const int num_rope_objects = 8;
+ const int num_objects = num_ropes * num_rope_objects;
+ const int num_strings = num_ropes * (num_rope_objects - 1) +
+ (num_ropes - 1) * num_rope_objects;
+ const int string_length = 20;
+ const int rope_offset = 20;
+ Object *object;
+ String *string;
+ int i, j;
+
+ memset (model, 0, sizeof *model);
+ model->objects = g_new (Object, num_objects);
+ model->num_objects = num_objects;
+ model->strings = g_new (String, num_strings);
+ model->num_strings = num_strings;
+ model->offsets = g_new (Offset, 1);
+ model->num_offsets = 1;
+ model_init_polygons (model);
+
+ model->offsets[0].num_objects = num_ropes;
+ model->offsets[0].objects = g_new (Object *, num_ropes);
+ model->offsets[0].dx = rope_offset;
+ model->offsets[0].dy = 0;
+
+ object = model->objects;
+ string = model->strings;
+ for (i = 0; i < num_ropes; i++) {
+ for (j = 0; j < num_rope_objects; j++) {
+ object_init (object, 200 + i * rope_offset, 40 + j * string_length, 1);
+
+ if (i + 1 < num_ropes)
+ string_init (string++,
+ object, object + num_rope_objects, string_length);
+ if (j + 1 < num_rope_objects)
+ string_init (string++, object, object + 1, string_length);
+ object++;
+ }
+
+ model->offsets[0].objects[i] = &model->objects[i * num_rope_objects];
+ }