Class: Rubygame::Rect
- Inherits:
-
Array
- Object
- Array
- Rubygame::Rect
- Defined in:
- lib/rubygame/rect.rb,
lib/rubygame/old_rect.rb
Overview
A Rect is a representation of a rectangle, with four core attributes (x offset, y offset, width, and height) and a variety of functions for manipulating and accessing these attributes.
Like all coordinates in Rubygame (and its base library, SDL), x and y offsets are measured from the top-left corner of the screen, with greater y offsets being lower. Thus, specifying the x and y offsets of the Rect is equivalent to setting the location of its top-left corner.
In Rubygame, Rects are used for collision detection and describing the area of a Surface to operate on.
Class Method Summary collapse
-
.new_from_object(object) ⇒ Object
Extract or generate a Rect from the given object, if possible, using the following process:.
Instance Method Summary collapse
-
#bottom ⇒ Object
(also: #b)
Return the y coordinate of the bottom side of the Rect.
-
#bottom=(b) ⇒ Object
(also: #b=)
Set the y coordinate of the bottom side of the Rect by translating the Rect (adjusting the y offset).
-
#bottomleft ⇒ Object
(also: #bl)
Return the x and y coordinates of the bottom-left corner of the Rect.
-
#bottomleft=(bottomleft) ⇒ Object
(also: #bl=)
Set the x and y coordinates of the bottom-left corner of the Rect by translating the Rect (adjusting the x and y offsets).
-
#bottomright ⇒ Object
(also: #br)
Return the x and y coordinates of the bottom-right corner of the Rect.
-
#bottomright=(bottomright) ⇒ Object
(also: #br=)
Set the x and y coordinates of the bottom-right corner of the Rect by translating the Rect (adjusting the x and y offsets).
-
#center ⇒ Object
(also: #c)
Return the x and y coordinates of the center of the Rect.
-
#center=(center) ⇒ Object
(also: #c=)
Set the x and y coordinates of the center of the Rect by translating the Rect (adjusting the x and y offsets).
-
#centerx ⇒ Object
(also: #cx)
Return the x coordinate of the center of the Rect.
-
#centerx=(x) ⇒ Object
(also: #cx=)
Set the x coordinate of the center of the Rect by translating the Rect (adjusting the x offset).
-
#centery ⇒ Object
(also: #cy)
Return the y coordinate of the center of the Rect.
-
#centery=(y) ⇒ Object
(also: #cy=)
Set the y coordinate of the center of the Rect by translating the Rect (adjusting the y offset).
-
#clamp(rect) ⇒ Object
As #clamp!, but the original caller is not changed.
-
#clamp!(rect) ⇒ Object
Translate the calling Rect to be entirely inside the given Rect.
-
#clip(rect) ⇒ Object
As #clip!, but the original caller is not changed.
-
#clip!(rect) ⇒ Object
Crop the calling Rect to be entirely inside the given Rect.
-
#collide_array(array_rects) ⇒ Object
Iterate through all elements in the given Array, and return the index of the first element which is a Rect that collides with the caller.
-
#collide_array_all(array_rects) ⇒ Object
Iterate through all elements in the given Array, and return an Array containing the indices of every element that is a Rect that collides with the caller.
-
#collide_hash(hash_rects) ⇒ Object
Iterate through all key/value pairs in the given hash table, and return the first pair whose value is a Rect that collides with the caller.
-
#collide_hash_all(hash_rects) ⇒ Object
Iterate through all key/value pairs in the given hash table, and return an Array of every pair whose value is a Rect that collides the caller.
-
#collide_point?(x, y) ⇒ Boolean
True if the point is inside (including on the border) of the caller.
-
#collide_rect?(rect) ⇒ Boolean
True if the caller and the given Rect overlap (or touch) at all.
-
#contain?(rect) ⇒ Boolean
True if the given Rect is totally within the caller.
-
#h ⇒ Object
(also: #height)
Returns self.at(3).
-
#h=(val) ⇒ Object
(also: #height=)
Sets self to
val. -
#inflate(x, y) ⇒ Object
As #inflate!, but the original caller is not changed.
-
#inflate!(x, y) ⇒ Object
Increase the Rect’s size is the x and y directions, while keeping the same center point.
-
#initialize(*argv) ⇒ Rect
constructor
Create a new Rect, attempting to extract its own information from the given arguments.
-
#inspect ⇒ Object
Print the Rect in the form “+#<Rect:id [x,y,w,h]>+”.
-
#midbottom ⇒ Object
(also: #mb)
Return the x and y coordinates of the midpoint on the left side of the Rect.
-
#midbottom=(midbottom) ⇒ Object
(also: #mb=)
Set the x and y coordinates of the midpoint on the bottom side of the Rect by translating the Rect (adjusting the x and y offsets).
-
#midleft ⇒ Object
(also: #ml)
Return the x and y coordinates of the midpoint on the left side of the Rect.
-
#midleft=(midleft) ⇒ Object
(also: #ml=)
Set the x and y coordinates of the midpoint on the left side of the Rect by translating the Rect (adjusting the x and y offsets).
-
#midright ⇒ Object
(also: #mr)
Return the x and y coordinates of the midpoint on the left side of the Rect.
-
#midright=(midright) ⇒ Object
(also: #mr=)
Set the x and y coordinates of the midpoint on the right side of the Rect by translating the Rect (adjusting the x and y offsets).
-
#midtop ⇒ Object
(also: #mt)
Return the x and y coordinates of the midpoint on the left side of the Rect.
-
#midtop=(midtop) ⇒ Object
(also: #mt=)
Set the x and y coordinates of the midpoint on the top side of the Rect by translating the Rect (adjusting the x and y offsets).
-
#move(x, y) ⇒ Object
As #move!, but the original caller is not changed.
-
#move!(x, y) ⇒ Object
Translate the Rect by the given amounts in the x and y directions.
-
#normalize ⇒ Object
As #normalize!, but the original caller is not changed.
-
#normalize! ⇒ Object
Fix Rects that have negative width or height, without changing the area it represents.
-
#right ⇒ Object
(also: #r)
Return the x coordinate of the right side of the Rect.
-
#right=(r) ⇒ Object
(also: #r=)
Set the x coordinate of the right side of the Rect by translating the Rect (adjusting the x offset).
-
#size ⇒ Object
Return the width and height of the Rect.
-
#size=(size) ⇒ Object
Set the width and height of the Rect.
-
#to_s ⇒ Object
Print the Rect in the form “+#<Rect [x,y,w,h]>+”.
-
#to_sdl ⇒ Object
Returns an SDL::Rect version of this Rect.
-
#topleft ⇒ Object
(also: #tl)
Return the x and y coordinates of the top-left corner of the Rect.
-
#topleft=(topleft) ⇒ Object
(also: #tl=)
Set the x and y coordinates of the top-left corner of the Rect by translating the Rect (adjusting the x and y offsets).
-
#topright ⇒ Object
(also: #tr)
Return the x and y coordinates of the top-right corner of the Rect.
-
#topright=(topright) ⇒ Object
(also: #tr=)
Set the x and y coordinates of the top-right corner of the Rect by translating the Rect (adjusting the x and y offsets).
-
#union(rect) ⇒ Object
As #union!, but the original caller is not changed.
-
#union!(rect) ⇒ Object
Expand the caller to also cover the given Rect.
-
#union_all(array_rects) ⇒ Object
As #union_all!, but the original caller is not changed.
-
#union_all!(array_rects) ⇒ Object
Expand the caller to cover all of the given Rects.
-
#w ⇒ Object
(also: #width)
Returns self.at(2).
-
#w=(val) ⇒ Object
(also: #width=)
Sets self to
val. -
#x ⇒ Object
(also: #left, #l)
Returns self.at(0).
-
#x=(val) ⇒ Object
(also: #left=, #l=)
Sets self to
val. -
#y ⇒ Object
(also: #top, #t)
Returns self.at(1).
-
#y=(val) ⇒ Object
(also: #top=, #t=)
Sets self to
val.
Constructor Details
#initialize(*argv) ⇒ Rect
Create a new Rect, attempting to extract its own information from the given arguments. The arguments must fall into one of these cases:
- 4 integers +(x, y, w, h)+.
- 1 Rect or Array containing 4 integers +([x, y, w, h])+.
- 2 Arrays containing 2 integers each +([x,y], [w,h])+.
- 1 object with a +rect+ attribute which is a valid Rect object.
All rect core attributes (x,y,w,h) must be integers.
86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/rubygame/rect.rb', line 86 def initialize(*argv) case argv.length when 1 if argv[0].kind_of? Array; super(argv[0]) elsif argv[0].respond_to? :rect; super(argv[0]) end when 2 super(argv[0].concat(argv[1])) when 4 super(argv) end return self end |
Class Method Details
.new_from_object(object) ⇒ Object
Extract or generate a Rect from the given object, if possible, using the following process:
1. If it's a Rect already, return a duplicate Rect.
2. Elsif it's an Array with at least 4 values, make a Rect from it.
3. Elsif it has a +rect+ attribute., perform (1) and (2) on that.
4. Otherwise, raise TypeError.
See also Surface#make_rect()
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/rubygame/rect.rb', line 109 def Rect.new_from_object(object) case(object) when Rect return object.dup when Array if object.length >= 4 return Rect.new(object) else raise(ArgumentError,"Array does not have enough indices to be made into a Rect (%d for 4)."%object.length ) end else begin case(object.rect) when Rect return object.rect.dup when Array if object.rect.length >= 4 return Rect.new(object.rect) else raise(ArgumentError,"Array does not have enough indices to be made into a Rect (%d for 4)."%object.rect.length ) end end # case object.rect rescue NoMethodError # if no rect.rect raise(TypeError,"Object must be a Rect or Array [x,y,w,h], or have an attribute called 'rect'. (Got %s instance.)"%object.class) end end # case object end |
Instance Method Details
#bottom ⇒ Object Also known as: b
Return the y coordinate of the bottom side of the Rect.
214 |
# File 'lib/rubygame/rect.rb', line 214 def bottom; return self.at(1)+self.at(3); end |
#bottom=(b) ⇒ Object Also known as: b=
Set the y coordinate of the bottom side of the Rect by translating the Rect (adjusting the y offset).
218 |
# File 'lib/rubygame/rect.rb', line 218 def bottom=(b); self[1] = b - self.at(3); return b; end |
#bottomleft ⇒ Object Also known as: bl
Return the x and y coordinates of the bottom-left corner of the Rect
285 |
# File 'lib/rubygame/rect.rb', line 285 def bottomleft; return self.at(0), self.bottom; end |
#bottomleft=(bottomleft) ⇒ Object Also known as: bl=
Set the x and y coordinates of the bottom-left corner of the Rect by translating the Rect (adjusting the x and y offsets).
289 290 291 292 293 |
# File 'lib/rubygame/rect.rb', line 289 def bottomleft=(bottomleft) raise ArgumentError, "Rect#bottomleft= takes an Array of form [x, y]." if bottomleft.size != 2 self[0], self.bottom = bottomleft return bottomleft end |
#bottomright ⇒ Object Also known as: br
Return the x and y coordinates of the bottom-right corner of the Rect
299 |
# File 'lib/rubygame/rect.rb', line 299 def bottomright; return self.right, self.bottom; end |
#bottomright=(bottomright) ⇒ Object Also known as: br=
Set the x and y coordinates of the bottom-right corner of the Rect by translating the Rect (adjusting the x and y offsets).
303 304 305 306 307 |
# File 'lib/rubygame/rect.rb', line 303 def bottomright=(bottomright) raise ArgumentError, "Rect#bottomright= takes an Array of form [x, y]." if bottomright.size != 2 self.right, self.bottom = bottomright return bottomright end |
#center ⇒ Object Also known as: c
Return the x and y coordinates of the center of the Rect.
224 |
# File 'lib/rubygame/rect.rb', line 224 def center; return self.centerx, self.centery; end |
#center=(center) ⇒ Object Also known as: c=
Set the x and y coordinates of the center of the Rect by translating the Rect (adjusting the x and y offsets).
228 229 230 231 232 |
# File 'lib/rubygame/rect.rb', line 228 def center=(center) raise ArgumentError, "Rect#center= takes an Array of the form [x,y]." if center.size != 2 self.centerx, self.centery = center center end |
#centerx ⇒ Object Also known as: cx
Return the x coordinate of the center of the Rect
237 |
# File 'lib/rubygame/rect.rb', line 237 def centerx; return self.at(0)+(self.at(2).div(2)); end |
#centerx=(x) ⇒ Object Also known as: cx=
Set the x coordinate of the center of the Rect by translating the Rect (adjusting the x offset).
241 |
# File 'lib/rubygame/rect.rb', line 241 def centerx=(x); self[0] = x - (self.at(2).div(2)); return x; end |
#centery ⇒ Object Also known as: cy
Return the y coordinate of the center of the Rect
247 |
# File 'lib/rubygame/rect.rb', line 247 def centery; return self.at(1)+(self.at(3).div(2)); end |
#centery=(y) ⇒ Object Also known as: cy=
Set the y coordinate of the center of the Rect by translating the Rect (adjusting the y offset).
251 |
# File 'lib/rubygame/rect.rb', line 251 def centery=(y); self[1] = y- (self.at(3).div(2)); return y; end |
#clamp(rect) ⇒ Object
As #clamp!, but the original caller is not changed.
378 379 380 |
# File 'lib/rubygame/rect.rb', line 378 def clamp(rect) self.dup.clamp!(rect) end |
#clamp!(rect) ⇒ Object
Translate the calling Rect to be entirely inside the given Rect. If the caller is too large along either axis to fit in the given rect, it is centered with respect to the given rect, along that axis.
385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 |
# File 'lib/rubygame/rect.rb', line 385 def clamp!(rect) nself = self.normalize rect = Rect.new_from_object(rect) #If self is inside given, there is no need to move self unless rect.contain?(nself) #If self is too wide: if nself.at(2) >= rect.at(2) self[0] = rect.centerx - nself.at(2).div(2) #Else self is not too wide else #If self is to the left of arg if nself.at(0) < rect.at(0) self[0] = rect.at(0) #If self is to the right of arg elsif nself.right > rect.right self[0] = rect.right - nself.at(2) #Otherwise, leave x alone end end #If self is too tall: if nself.at(3) >= rect.at(3) self[1] = rect.centery - nself.at(3).div(2) #Else self is not too tall else #If self is above arg if nself.at(1) < rect.at(1) self[1] = rect.at(1) #If self below arg elsif nself.bottom > rect.bottom self[1] = rect.bottom - nself.at(3) #Otherwise, leave y alone end end end return self end |
#clip(rect) ⇒ Object
As #clip!, but the original caller is not changed.
425 426 427 |
# File 'lib/rubygame/rect.rb', line 425 def clip(rect) self.dup.clip!(rect) end |
#clip!(rect) ⇒ Object
Crop the calling Rect to be entirely inside the given Rect. If the caller does not intersect the given Rect at all, its width and height are set to zero, but its x and y offsets are not changed.
As a side effect, the Rect is normalized.
434 435 436 437 438 439 440 441 442 443 444 445 446 447 |
# File 'lib/rubygame/rect.rb', line 434 def clip!(rect) nself = self.normalize other = Rect.new_from_object(rect).normalize! if self.collide_rect?(other) self[0] = [nself.at(0), other.at(0)].max self[1] = [nself.at(1), other.at(1)].max self[2] = [nself.right, other.right].min - self.at(0) self[3] = [nself.bottom, other.bottom].min - self.at(1) else #if they do not intersect at all: self[0], self[1] = nself.topleft self[2], self[3] = 0, 0 end return self end |
#collide_array(array_rects) ⇒ Object
Iterate through all elements in the given Array, and return the index of the first element which is a Rect that collides with the caller.
477 478 479 480 481 482 483 484 |
# File 'lib/rubygame/rect.rb', line 477 def collide_array(array_rects) for i in (0...(array_rects.length)) if array_rects[i].collide_rect?(self) return i end end return nil end |
#collide_array_all(array_rects) ⇒ Object
Iterate through all elements in the given Array, and return an Array containing the indices of every element that is a Rect that collides with the caller.
489 490 491 492 493 494 495 496 497 |
# File 'lib/rubygame/rect.rb', line 489 def collide_array_all(array_rects) indexes = [] for i in (0...(array_rects.length)) if array_rects[i].collide_rect?(self) indexes += [i] end end return indexes end |
#collide_hash(hash_rects) ⇒ Object
Iterate through all key/value pairs in the given hash table, and return the first pair whose value is a Rect that collides with the caller.
Because a hash table is unordered, you should not expect any particular Rect to be returned first.
455 456 457 458 459 460 |
# File 'lib/rubygame/rect.rb', line 455 def collide_hash(hash_rects) hash_rects.each { |key,value| if value.collide_rect?+(self); return [key,value]; end } return nil end |
#collide_hash_all(hash_rects) ⇒ Object
Iterate through all key/value pairs in the given hash table, and return an Array of every pair whose value is a Rect that collides the caller.
Because a hash table is unordered, you should not expect the returned pairs to be in any particular order.
468 469 470 471 472 |
# File 'lib/rubygame/rect.rb', line 468 def collide_hash_all(hash_rects) hash_rects.select { |key,value| value.collide_rect?+(self) } end |
#collide_point?(x, y) ⇒ Boolean
True if the point is inside (including on the border) of the caller. If you have Array of coordinates, you can use collide_point?(*coords).
501 502 503 504 |
# File 'lib/rubygame/rect.rb', line 501 def collide_point?(x,y) nself = normalize() x.between?(nself.left,nself.right) && y.between?(nself.top,nself.bottom) end |
#collide_rect?(rect) ⇒ Boolean
True if the caller and the given Rect overlap (or touch) at all.
507 508 509 510 511 512 |
# File 'lib/rubygame/rect.rb', line 507 def collide_rect?(rect) nself = self.normalize rect = Rect.new_from_object(rect).normalize! return ((nself.l >= rect.l && nself.l <= rect.r) or (rect.l >= nself.l && rect.l <= nself.r)) && ((nself.t >= rect.t && nself.t <= rect.b) or (rect.t >= nself.t && rect.t <= nself.b)) end |
#contain?(rect) ⇒ Boolean
True if the given Rect is totally within the caller. Borders may overlap.
516 517 518 519 520 521 |
# File 'lib/rubygame/rect.rb', line 516 def contain?(rect) nself = self.normalize rect = Rect.new_from_object(rect).normalize! return (nself.left <= rect.left and rect.right <= nself.right and nself.top <= rect.top and rect.bottom <= nself.bottom) end |
#h ⇒ Object Also known as: height
Returns self.at(3)
186 |
# File 'lib/rubygame/rect.rb', line 186 def h; return self.at(3); end |
#h=(val) ⇒ Object Also known as: height=
Sets self to val
188 |
# File 'lib/rubygame/rect.rb', line 188 def h=(val); self[3] = val; end |
#inflate(x, y) ⇒ Object
As #inflate!, but the original caller is not changed.
524 525 526 527 528 529 |
# File 'lib/rubygame/rect.rb', line 524 def inflate(x,y) return self.class.new(self.at(0) - x.div(2), self.at(1) - y.div(2), self.at(2) + x, self.at(3) + y) end |
#inflate!(x, y) ⇒ Object
Increase the Rect’s size is the x and y directions, while keeping the same center point. For best results, expand by an even number. X and y inflation can be given as an Array or as separate values.
534 535 536 537 538 539 540 |
# File 'lib/rubygame/rect.rb', line 534 def inflate!(x,y) self[0] -= x.div(2) self[1] -= y.div(2) self[2] += x self[3] += y return self end |
#inspect ⇒ Object
Print the Rect in the form “+#<Rect:id [x,y,w,h]>+”
142 |
# File 'lib/rubygame/rect.rb', line 142 def inspect; "#<Rect:#{self.object_id} [%s,%s,%s,%s]>"%self; end |
#midbottom ⇒ Object Also known as: mb
Return the x and y coordinates of the midpoint on the left side of the Rect.
359 |
# File 'lib/rubygame/rect.rb', line 359 def midbottom; return self.centerx, self.bottom; end |
#midbottom=(midbottom) ⇒ Object Also known as: mb=
Set the x and y coordinates of the midpoint on the bottom side of the Rect by translating the Rect (adjusting the x and y offsets).
363 364 365 366 367 |
# File 'lib/rubygame/rect.rb', line 363 def midbottom=(midbottom) raise ArgumentError, "Rect#midbottom= takes an Array of form [x, y]." if midbottom.size != 2 self.centerx, self.bottom = midbottom return midbottom end |
#midleft ⇒ Object Also known as: ml
Return the x and y coordinates of the midpoint on the left side of the Rect.
314 |
# File 'lib/rubygame/rect.rb', line 314 def midleft; return self.at(0), self.centery; end |
#midleft=(midleft) ⇒ Object Also known as: ml=
Set the x and y coordinates of the midpoint on the left side of the Rect by translating the Rect (adjusting the x and y offsets).
318 319 320 321 322 |
# File 'lib/rubygame/rect.rb', line 318 def midleft=(midleft) raise ArgumentError, "Rect#midleft= takes an Array of form [x, y]." if midleft.size != 2 self[0], self.centery = midleft return midleft end |
#midright ⇒ Object Also known as: mr
Return the x and y coordinates of the midpoint on the left side of the Rect.
344 |
# File 'lib/rubygame/rect.rb', line 344 def midright; return self.right, self.centery; end |
#midright=(midright) ⇒ Object Also known as: mr=
Set the x and y coordinates of the midpoint on the right side of the Rect by translating the Rect (adjusting the x and y offsets).
348 349 350 351 352 |
# File 'lib/rubygame/rect.rb', line 348 def midright=(midright) raise ArgumentError, "Rect#midright= takes an Array of form [x, y]." if midright.size != 2 self.right, self.centery = midright return midright end |
#midtop ⇒ Object Also known as: mt
Return the x and y coordinates of the midpoint on the left side of the Rect.
329 |
# File 'lib/rubygame/rect.rb', line 329 def midtop; return self.centerx, self.at(1); end |
#midtop=(midtop) ⇒ Object Also known as: mt=
Set the x and y coordinates of the midpoint on the top side of the Rect by translating the Rect (adjusting the x and y offsets).
333 334 335 336 337 |
# File 'lib/rubygame/rect.rb', line 333 def midtop=(midtop) raise ArgumentError, "Rect#midtop= takes an Array of form [x, y]." if midtop.size != 2 self.centerx, self[1] = midtop return midtop end |
#move(x, y) ⇒ Object
As #move!, but the original caller is not changed.
543 544 545 |
# File 'lib/rubygame/rect.rb', line 543 def move(x,y) self.dup.move!(x,y) end |
#move!(x, y) ⇒ Object
Translate the Rect by the given amounts in the x and y directions. Positive values are rightward for x and downward for y. X and y movement can be given as an Array or as separate values.
550 551 552 553 |
# File 'lib/rubygame/rect.rb', line 550 def move!(x,y) self[0]+=x; self[1]+=y return self end |
#normalize ⇒ Object
As #normalize!, but the original caller is not changed.
556 557 558 |
# File 'lib/rubygame/rect.rb', line 556 def normalize self.dup.normalize!() end |
#normalize! ⇒ Object
Fix Rects that have negative width or height, without changing the area it represents. Has no effect on Rects with non-negative width and height. Some Rect methods will automatically normalize the Rect.
563 564 565 566 567 568 569 570 571 |
# File 'lib/rubygame/rect.rb', line 563 def normalize! if self.at(2) < 0 self[0], self[2] = self.at(0)+self.at(2), -self.at(2) end if self.at(3) < 0 self[1], self[3] = self.at(1)+self.at(3), -self.at(3) end self end |
#right ⇒ Object Also known as: r
Return the x coordinate of the right side of the Rect.
204 |
# File 'lib/rubygame/rect.rb', line 204 def right; return self.at(0)+self.at(2); end |
#right=(r) ⇒ Object Also known as: r=
Set the x coordinate of the right side of the Rect by translating the Rect (adjusting the x offset).
208 |
# File 'lib/rubygame/rect.rb', line 208 def right=(r); self[0] = r - self.at(2); return r; end |
#size ⇒ Object
Return the width and height of the Rect.
194 |
# File 'lib/rubygame/rect.rb', line 194 def size; return self[2,2]; end |
#size=(size) ⇒ Object
Set the width and height of the Rect.
197 198 199 200 201 |
# File 'lib/rubygame/rect.rb', line 197 def size=(size) raise ArgumentError, "Rect#size= takes an Array of form [width, height]." if size.size != 2 self[2,2] = size size end |
#to_s ⇒ Object
Print the Rect in the form “+#<Rect [x,y,w,h]>+”
139 |
# File 'lib/rubygame/rect.rb', line 139 def to_s; "#<Rect [%s,%s,%s,%s]>"%self; end |
#to_sdl ⇒ Object
Returns an SDL::Rect version of this Rect. Float values are rounded to the nearest integer.
148 149 150 |
# File 'lib/rubygame/rect.rb', line 148 def to_sdl # :nodoc: SDL::Rect.new( self.collect{|n| n.round } ) end |
#topleft ⇒ Object Also known as: tl
Return the x and y coordinates of the top-left corner of the Rect
257 |
# File 'lib/rubygame/rect.rb', line 257 def topleft; return self[0,2].to_a; end |
#topleft=(topleft) ⇒ Object Also known as: tl=
Set the x and y coordinates of the top-left corner of the Rect by translating the Rect (adjusting the x and y offsets).
261 262 263 264 265 |
# File 'lib/rubygame/rect.rb', line 261 def topleft=(topleft) raise ArgumentError, "Rect#topright= takes an Array of form [x, y]." if topleft.size != 2 self[0,2] = topleft return topleft end |
#topright ⇒ Object Also known as: tr
Return the x and y coordinates of the top-right corner of the Rect
271 |
# File 'lib/rubygame/rect.rb', line 271 def topright; return self.right, self.at(1); end |
#topright=(topright) ⇒ Object Also known as: tr=
Set the x and y coordinates of the top-right corner of the Rect by translating the Rect (adjusting the x and y offsets).
275 276 277 278 279 |
# File 'lib/rubygame/rect.rb', line 275 def topright=(topright) raise ArgumentError, "Rect#topright= takes an Array of form [x, y]." if topright.size != 2 self.right, self[1] = topright return topright end |
#union(rect) ⇒ Object
As #union!, but the original caller is not changed.
574 575 576 |
# File 'lib/rubygame/rect.rb', line 574 def union(rect) self.dup.union!(rect) end |
#union!(rect) ⇒ Object
Expand the caller to also cover the given Rect. The Rect is still a rectangle, so it may also cover areas that neither of the original Rects did, for example areas between the two Rects.
581 582 583 584 585 586 587 588 589 590 591 592 593 594 |
# File 'lib/rubygame/rect.rb', line 581 def union!(rect) self.normalize! rleft, rtop = self.topleft rright, rbottom = self.bottomright r2 = Rect.new_from_object(rect).normalize! rleft = [rleft, r2.left].min rtop = [rtop, r2.top].min rright = [rright, r2.right].max rbottom = [rbottom, r2.bottom].max self[0,4] = rleft, rtop, rright - rleft, rbottom - rtop return self end |
#union_all(array_rects) ⇒ Object
As #union_all!, but the original caller is not changed.
597 598 599 |
# File 'lib/rubygame/rect.rb', line 597 def union_all(array_rects) self.dup.union_all!(array_rects) end |
#union_all!(array_rects) ⇒ Object
Expand the caller to cover all of the given Rects. See also #union!
602 603 604 605 606 607 |
# File 'lib/rubygame/rect.rb', line 602 def union_all!(array_rects) array_rects.each do |r| self.union!(r) end return self end |
#w ⇒ Object Also known as: width
Returns self.at(2)
178 |
# File 'lib/rubygame/rect.rb', line 178 def w; return self.at(2); end |
#w=(val) ⇒ Object Also known as: width=
Sets self to val
180 |
# File 'lib/rubygame/rect.rb', line 180 def w=(val); self[2] = val; end |
#x ⇒ Object Also known as: left, l
Returns self.at(0)
158 |
# File 'lib/rubygame/rect.rb', line 158 def x; return self.at(0); end |
#x=(val) ⇒ Object Also known as: left=, l=
Sets self to val
160 |
# File 'lib/rubygame/rect.rb', line 160 def x=(val); self[0] = val; end |
#y ⇒ Object Also known as: top, t
Returns self.at(1)
168 |
# File 'lib/rubygame/rect.rb', line 168 def y; return self.at(1); end |
#y=(val) ⇒ Object Also known as: top=, t=
Sets self to val
170 |
# File 'lib/rubygame/rect.rb', line 170 def y=(val); self[1] = val; end |