示例#1
0
/*
 * Chipmunk2d::ContactPoint#initialize
 * @return [self]
 */
static mrb_value
contact_point_initialize(mrb_state *mrb, mrb_value self)
{
  mrb_iv_set(mrb, self, mrb_intern_lit(mrb, "@point_a"),  mrb_cp_vect_value(mrb, cpv(0, 0)));
  mrb_iv_set(mrb, self, mrb_intern_lit(mrb, "@point_b"),  mrb_cp_vect_value(mrb, cpv(0, 0)));
  mrb_iv_set(mrb, self, mrb_intern_lit(mrb, "@distance"), mrb_float_value(mrb, 0.0));
  return self;
}
/*
 * @param [Integer] i  i-th contact point
 * @return [Chipmunk2d::Vect]
 */
static mrb_value
arbiter_get_normal(mrb_state* mrb, mrb_value self)
{
  cpArbiter* arbiter;
  arbiter = mrb_cp_get_arbiter_ptr(mrb, self);
  return mrb_cp_vect_value(mrb, cpArbiterGetNormal(arbiter));
}
示例#3
0
static mrb_value
mrb_cp_contact_points_value(mrb_state *mrb, cpContactPointSet *contact_point_set)
{
  mrb_value points;
  mrb_value point;
  int i;
  points = mrb_ary_new_capa(mrb, contact_point_set->count);
  for (i = 0; i < contact_point_set->count; ++i) {
    point = mrb_obj_new(mrb, mrb_cp_contact_point_class, 0, NULL);
    mrb_iv_set(mrb, point, mrb_intern_lit(mrb, "@point_a"),  mrb_cp_vect_value(mrb, contact_point_set->points[i].pointA));
    mrb_iv_set(mrb, point, mrb_intern_lit(mrb, "@point_b"),  mrb_cp_vect_value(mrb, contact_point_set->points[i].pointB));
    mrb_iv_set(mrb, point, mrb_intern_lit(mrb, "@distance"), mrb_float_value(mrb, contact_point_set->points[i].distance));
    mrb_ary_set(mrb, points, i, point);
  }
  return points;
}
示例#4
0
/*
 * Chipmunk2d::ContactPointSet#initialize
 */
static mrb_value
contact_point_set_initialize(mrb_state *mrb, mrb_value self)
{
  mrb_iv_set(mrb, self, mrb_intern_lit(mrb, "@count"),  mrb_fixnum_value(0));
  mrb_iv_set(mrb, self, mrb_intern_lit(mrb, "@normal"), mrb_cp_vect_value(mrb, cpv(0, 0)));
  mrb_iv_set(mrb, self, mrb_intern_lit(mrb, "@points"), mrb_ary_new(mrb));
  return self;
}
示例#5
0
/*
 * Chipmunk2d::Mat2x2#transform(vect)
 * @param [Chipmunk2d::Vect] vect
 */
static mrb_value
mat2x2_transform(mrb_state *mrb, mrb_value self)
{
  cpMat2x2 *mat2x2;
  cpVect *vect;
  mrb_get_args(mrb, "d", &vect, &mrb_cp_vect_type);
  mat2x2 = mrb_data_get_ptr(mrb, self, &mrb_cp_mat2x2_type);
  return mrb_cp_vect_value(mrb, cpMat2x2Transform(*mat2x2, *vect));
}
static mrb_value
arbiter_get_surface_velocity(mrb_state* mrb, mrb_value self)
{
  cpArbiter* arbiter;
  cpVect vect;
  arbiter = mrb_cp_get_arbiter_ptr(mrb, self);
  vect = cpArbiterGetSurfaceVelocity(arbiter);
  return mrb_cp_vect_value(mrb, vect);
}
/*
 * @param [Integer] i  i-th contact point
 * @return [Chipmunk2d::Vect]
 */
static mrb_value
arbiter_get_point_b(mrb_state* mrb, mrb_value self)
{
  cpArbiter* arbiter;
  mrb_int i;
  mrb_get_args(mrb, "i", &i);
  arbiter = mrb_cp_get_arbiter_ptr(mrb, self);
  return mrb_cp_vect_value(mrb, cpArbiterGetPointB(arbiter, i));
}
static mrb_value
arbiter_total_impulse(mrb_state* mrb, mrb_value self)
{
  cpArbiter* arbiter;
  cpVect vect;
  arbiter = mrb_cp_get_arbiter_ptr(mrb, self);
  vect = cpArbiterTotalImpulse(arbiter);
  return mrb_cp_vect_value(mrb, vect);
}
/*
 * Chipmunk2d::Transform#vect(vect)
 * @param [Chipmunk2d::Vect] vect
 * @return [Chipmunk2d::Vect]
 */
static mrb_value
transform_vect(mrb_state* mrb, mrb_value self)
{
  cpTransform* transform;
  cpVect* vect;
  mrb_get_args(mrb, "d", &vect, &mrb_cp_vect_type);
  transform = mrb_cp_get_transform_ptr(mrb, self);
  return mrb_cp_vect_value(mrb, cpTransformVect(*transform, *vect));
}
/*
 * Chipmunk2d::SlideJoint#anchor_b
 * @return [Chipmunk2d::Vect]
 */
static mrb_value
slide_joint_get_anchor_b(mrb_state* mrb, mrb_value self)
{
  cpConstraint* constraint;
  cpVect anchor_b;
  Data_Get_Struct(mrb, self, &mrb_cp_constraint_type, constraint);
  anchor_b = cpSlideJointGetAnchorB(constraint);
  return mrb_cp_vect_value(mrb, anchor_b);
}
示例#11
0
mrb_value
mrb_cp_contact_point_set_value(mrb_state *mrb, cpContactPointSet *points)
{
  mrb_value cps;
  cps = mrb_obj_new(mrb, mrb_cp_contact_point_set_class, 0, NULL);
  mrb_iv_set(mrb, cps, mrb_intern_lit(mrb, "@count"), mrb_fixnum_value(points->count));
  mrb_iv_set(mrb, cps, mrb_intern_lit(mrb, "@normal"), mrb_cp_vect_value(mrb, points->normal));
  mrb_iv_set(mrb, cps, mrb_intern_lit(mrb, "@points"), mrb_cp_contact_points_value(mrb, points));
  return cps;
}