Class: CP::BB

Inherits:
Object
  • Object
show all
Defined in:
ext/chipmunk/rb_cpBB.c

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'ext/chipmunk/rb_cpBB.c', line 43

static VALUE
rb_cpBBInitialize(int argc, VALUE *argv, VALUE self) {
  VALUE l, b, r, t;
  cpBB *bb = BBGET(self);

  rb_scan_args(argc, argv, "04", &l, &b, &r, &t);
  // initialize as a circle bounds box if ony 2 params
  if (NIL_P(r)) {
    if(NIL_P(l)) { 
       (*bb) = cpBBNew(0, 0, 1, 1); // unit box. 
    } else {
       cpVect * p =  VGET(l);
       (*bb) = cpBBNewForCircle(*p, NUM2DBL(b));
    }   
  } else {
   (*bb)  = cpBBNew(NUM2DBL(l), NUM2DBL(b), NUM2DBL(r), NUM2DBL(t));
  }  
  return self;
}

Instance Method Details

#areaObject



206
207
208
209
# File 'ext/chipmunk/rb_cpBB.c', line 206

static VALUE
rb_cpBBArea(VALUE self) {
  return DBL2NUM(cpBBArea(*BBGET(self)));
}

#bObject



147
148
149
150
# File 'ext/chipmunk/rb_cpBB.c', line 147

static VALUE
rb_cpBBGetB(VALUE self) {
  return rb_float_new(BBGET(self)->b);
}

#b=(val) ⇒ Object



168
169
170
171
172
# File 'ext/chipmunk/rb_cpBB.c', line 168

static VALUE
rb_cpBBSetB(VALUE self, VALUE val) {
  BBGET(self)->b = NUM2DBL(val);
  return val;
}

#clamp_vect(v) ⇒ Object



132
133
134
135
# File 'ext/chipmunk/rb_cpBB.c', line 132

static VALUE
rb_cpBBClampVect(VALUE self, VALUE v) {
  return VNEW(cpBBClampVect(*BBGET(self), *VGET(v)));
}

#contain?(other) ⇒ Boolean

Returns:

  • (Boolean)


93
94
95
96
97
98
99
100
101
102
# File 'ext/chipmunk/rb_cpBB.c', line 93

static VALUE
rb_cpBBcontains(VALUE self, VALUE other) {
  if (rb_class_of(other) == c_cpBB) {
    return rb_cpBBContainsBB(self, other);
  } else if (rb_class_of(other) == c_cpVect) {
    return rb_cpBBContainsVect(self, other);
  }
  rb_raise(rb_eArgError, "contains requires a BB or a Vect2 argument");
  return Qnil;
}

#contain_bb?(other) ⇒ Boolean

static VALUE rb_cpBBintersects(VALUE self, VALUE a, VALUE b) {

cpVect *a, *b;
if(IS_NIL(b)) { // box/box intersect
  return CP_INT_BOOL(cpBBIntersects(*BBGET(self), *BBGET(a)));
}
// If we get here it's a box/segment intersect
a = VGET(va);
b = VGET(vb);
if(a && b) {
  return CP_INT_BOOL(cpBBIntersectsSegment(*BBGET(self), *a, *b));
}
rb_raise(rb_eArgError, "intersects needs 1 Box or 2 Vect2 arguments");
return Qnil;

}

Returns:

  • (Boolean)


81
82
83
84
85
# File 'ext/chipmunk/rb_cpBB.c', line 81

static VALUE
rb_cpBBContainsBB(VALUE self, VALUE other) {
  int value = cpBBContainsBB(*BBGET(self), *BBGET(other));
  return CP_INT_BOOL(value);
}

#contain_vect?(other) ⇒ Boolean

Returns:

  • (Boolean)


87
88
89
90
91
# File 'ext/chipmunk/rb_cpBB.c', line 87

static VALUE
rb_cpBBContainsVect(VALUE self, VALUE other) {
  int value = cpBBContainsVect(*BBGET(self), *VGET(other));
  return CP_INT_BOOL(value);
}

#contains?(other) ⇒ Boolean

containsVect

Returns:

  • (Boolean)


93
94
95
96
97
98
99
100
101
102
# File 'ext/chipmunk/rb_cpBB.c', line 93

static VALUE
rb_cpBBcontains(VALUE self, VALUE other) {
  if (rb_class_of(other) == c_cpBB) {
    return rb_cpBBContainsBB(self, other);
  } else if (rb_class_of(other) == c_cpVect) {
    return rb_cpBBContainsVect(self, other);
  }
  rb_raise(rb_eArgError, "contains requires a BB or a Vect2 argument");
  return Qnil;
}

#contains_bb?(other) ⇒ Boolean

static VALUE rb_cpBBintersects(VALUE self, VALUE a, VALUE b) {

cpVect *a, *b;
if(IS_NIL(b)) { // box/box intersect
  return CP_INT_BOOL(cpBBIntersects(*BBGET(self), *BBGET(a)));
}
// If we get here it's a box/segment intersect
a = VGET(va);
b = VGET(vb);
if(a && b) {
  return CP_INT_BOOL(cpBBIntersectsSegment(*BBGET(self), *a, *b));
}
rb_raise(rb_eArgError, "intersects needs 1 Box or 2 Vect2 arguments");
return Qnil;

}

Returns:

  • (Boolean)


81
82
83
84
85
# File 'ext/chipmunk/rb_cpBB.c', line 81

static VALUE
rb_cpBBContainsBB(VALUE self, VALUE other) {
  int value = cpBBContainsBB(*BBGET(self), *BBGET(other));
  return CP_INT_BOOL(value);
}

#contains_vect?(other) ⇒ Boolean

Returns:

  • (Boolean)


87
88
89
90
91
# File 'ext/chipmunk/rb_cpBB.c', line 87

static VALUE
rb_cpBBContainsVect(VALUE self, VALUE other) {
  int value = cpBBContainsVect(*BBGET(self), *VGET(other));
  return CP_INT_BOOL(value);
}

#expand(other) ⇒ Object



201
202
203
204
# File 'ext/chipmunk/rb_cpBB.c', line 201

static VALUE
rb_cpBBexpand(VALUE self, VALUE other) {
  return BBNEW(cpBBExpand(*BBGET(self), *VGET(other)));
}

#intersect?(*args) ⇒ Boolean

Returns:

  • (Boolean)


116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'ext/chipmunk/rb_cpBB.c', line 116

static VALUE
rb_cpBBintersects(int argc, VALUE *argv, VALUE self) {
  VALUE other, b;

  rb_scan_args(argc, argv, "11", &other, &b);

  if (rb_class_of(other) == c_cpBB) {
    return rb_cpBBIntersectsBB(self, other);
  } else if ((rb_class_of(other) == c_cpVect) && (rb_class_of(b) == c_cpVect)) {
    return rb_cpBBIntersectsSegment(self, other, b);
  }
  rb_raise(rb_eArgError, "contains requires a BB or 2 Vect2 arguments");
  return Qnil;
}

#intersect_bb?(other) ⇒ Boolean

Returns:

  • (Boolean)


104
105
106
107
108
# File 'ext/chipmunk/rb_cpBB.c', line 104

static VALUE
rb_cpBBIntersectsBB(VALUE self, VALUE other) {
  int value = cpBBIntersects(*BBGET(self), *BBGET(other));
  return CP_INT_BOOL(value);
}

#intersect_segment?(a, b) ⇒ Boolean

Returns:

  • (Boolean)


110
111
112
113
114
# File 'ext/chipmunk/rb_cpBB.c', line 110

static VALUE
rb_cpBBIntersectsSegment(VALUE self, VALUE a, VALUE b) {
  int value = cpBBIntersectsSegment(*BBGET(self), *VGET(a), *VGET(b));
  return CP_INT_BOOL(value);
}

#intersects?(*args) ⇒ Boolean

Returns:

  • (Boolean)


116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'ext/chipmunk/rb_cpBB.c', line 116

static VALUE
rb_cpBBintersects(int argc, VALUE *argv, VALUE self) {
  VALUE other, b;

  rb_scan_args(argc, argv, "11", &other, &b);

  if (rb_class_of(other) == c_cpBB) {
    return rb_cpBBIntersectsBB(self, other);
  } else if ((rb_class_of(other) == c_cpVect) && (rb_class_of(b) == c_cpVect)) {
    return rb_cpBBIntersectsSegment(self, other, b);
  }
  rb_raise(rb_eArgError, "contains requires a BB or 2 Vect2 arguments");
  return Qnil;
}

#intersects_bb?(other) ⇒ Boolean

Returns:

  • (Boolean)


104
105
106
107
108
# File 'ext/chipmunk/rb_cpBB.c', line 104

static VALUE
rb_cpBBIntersectsBB(VALUE self, VALUE other) {
  int value = cpBBIntersects(*BBGET(self), *BBGET(other));
  return CP_INT_BOOL(value);
}

#intersects_segment?(a, b) ⇒ Boolean

Returns:

  • (Boolean)


110
111
112
113
114
# File 'ext/chipmunk/rb_cpBB.c', line 110

static VALUE
rb_cpBBIntersectsSegment(VALUE self, VALUE a, VALUE b) {
  int value = cpBBIntersectsSegment(*BBGET(self), *VGET(a), *VGET(b));
  return CP_INT_BOOL(value);
}

#lObject



142
143
144
145
# File 'ext/chipmunk/rb_cpBB.c', line 142

static VALUE
rb_cpBBGetL(VALUE self) {
  return rb_float_new(BBGET(self)->l);
}

#l=(val) ⇒ Object



162
163
164
165
166
# File 'ext/chipmunk/rb_cpBB.c', line 162

static VALUE
rb_cpBBSetL(VALUE self, VALUE val) {
  BBGET(self)->l = NUM2DBL(val);
  return val;
}

#merge(other) ⇒ Object



196
197
198
199
# File 'ext/chipmunk/rb_cpBB.c', line 196

static VALUE
rb_cpBBmerge(VALUE self, VALUE other) {
  return BBNEW(cpBBMerge(*BBGET(self), *BBGET(other)));
}

#merged_area(other) ⇒ Object



211
212
213
214
# File 'ext/chipmunk/rb_cpBB.c', line 211

static VALUE
rb_cpBBMergedArea(VALUE self, VALUE other) {
  return DBL2NUM(cpBBMergedArea(*BBGET(self), *BBGET(other)));
}

#rObject



152
153
154
155
# File 'ext/chipmunk/rb_cpBB.c', line 152

static VALUE
rb_cpBBGetR(VALUE self) {
  return rb_float_new(BBGET(self)->r);
}

#r=(val) ⇒ Object



174
175
176
177
178
# File 'ext/chipmunk/rb_cpBB.c', line 174

static VALUE
rb_cpBBSetR(VALUE self, VALUE val) {
  BBGET(self)->r = NUM2DBL(val);
  return val;
}

#segment_query(va, vb) ⇒ Object

/ Returns the fraction along the segment query the cpBB is hit. Returns INFINITY if it doesn’t hit.



217
218
219
220
221
222
223
224
225
226
227
# File 'ext/chipmunk/rb_cpBB.c', line 217

static VALUE
rb_cpBBSegmentQuery(VALUE self, VALUE va, VALUE vb) {
  cpVect *a, *b;
  a = VGET(va);
  b = VGET(vb);
  if(a && b) {
    return DBL2NUM(cpBBSegmentQuery(*BBGET(self), *a, *b));
  }
  rb_raise(rb_eArgError, "query requires 2 Vect2 arguments");
  return Qnil; 
}

#tObject



157
158
159
160
# File 'ext/chipmunk/rb_cpBB.c', line 157

static VALUE
rb_cpBBGetT(VALUE self) {
  return rb_float_new(BBGET(self)->t);
}

#t=(val) ⇒ Object



180
181
182
183
184
# File 'ext/chipmunk/rb_cpBB.c', line 180

static VALUE
rb_cpBBSetT(VALUE self, VALUE val) {
  BBGET(self)->t = NUM2DBL(val);
  return val;
}

#to_sObject



186
187
188
189
190
191
192
193
194
# File 'ext/chipmunk/rb_cpBB.c', line 186

static VALUE
rb_cpBBToString(VALUE self) {
  char str[256];
  cpBB *bb = BBGET(self);

  sprintf(str, "#<CP::BB:(% .3f, % .3f) -> (% .3f, % .3f)>", bb->l, bb->b, bb->r, bb->t);

  return rb_str_new2(str);
}

#wrap_vect(v) ⇒ Object



137
138
139
140
# File 'ext/chipmunk/rb_cpBB.c', line 137

static VALUE
rb_cpBBWrapVect(VALUE self, VALUE v) {
  return VNEW(cpBBWrapVect(*BBGET(self), *VGET(v)));
}