/* * 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)); }
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; }
/* * 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; }
/* * 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); }
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; }