Skip to content

Instantly share code, notes, and snippets.

@mvr
Created April 7, 2009 09:43
Show Gist options
  • Save mvr/91162 to your computer and use it in GitHub Desktop.
Save mvr/91162 to your computer and use it in GitHub Desktop.
#define rb_jgParticleWrap(particle) \
Data_Wrap_Struct(c_jgParticle, NULL, NULL, (particle))
VALUE rb_jgAreaWrap(jgArea *area)
{
VALUE wrappedArea = Data_Wrap_Struct(c_jgArea, NULL, NULL, area);
VALUE *particles = malloc(area->particles->length * sizeof(VALUE));
for(int i = 0; i < area->particles->length; i++)
particles[i] = rb_jgParticleWrap(area->particles->arr[i]);
VALUE particlesArray = rb_ary_new4(area->particles->length, particles);
free(particles);
rb_iv_set(wrappedArea, "particles", particlesArray);
return wrappedArea;
}
VALUE rb_jgCollisionWrap(jgCollision *collision)
{
VALUE wrappedCollision = Data_Wrap_Struct(c_jgCollision, NULL, jgCollisionFree, collision);
rb_iv_set(wrappedCollision, "particle", rb_jgParticleWrap(collision->particle));
rb_iv_set(wrappedCollision, "area", rb_jgAreaWrap(collision->area));
rb_iv_set(wrappedCollision, "area_particle_a", rb_jgParticleWrap(collision->areaParticleA));
rb_iv_set(wrappedCollision, "area_particle_b", rb_jgParticleWrap(collision->areaParticleB));
return wrappedCollision;
}
static VALUE rb_jgWorldCollisions(VALUE self)
{
jgWorld *world = WORLD(self);
VALUE *collisions = malloc(world->collisions->length * sizeof(VALUE));
for(int i = 0; i < world->collisions->length; i++)
collisions[i] = rb_jgCollisionWrap(world->collisions->arr[i]);
return rb_ary_new4(world->collisions->length, collisions);
}
rb_define_method(c_jgWorld, "collisions", rb_jgWorldCollisions, 0);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment