class DXOpal::Sprite::CollisionArea::Rect

Public Class Methods

new(sprite, x1, y1, x2, y2) click to toggle source
Calls superclass method
# File lib/dxopal/sprite/collision_area.rb, line 215
def initialize(sprite, x1, y1, x2, y2)
  @sprite, @x1, @y1, @x2, @y2 = sprite, x1, y1, x2, y2
  @poss = [[x1, y1], [x2, y1], [x2, y2], [x1, y2]]
  super()
end

Public Instance Methods

absolute_norot_poss() click to toggle source
# File lib/dxopal/sprite/collision_area.rb, line 254
def absolute_norot_poss
  [[@x1 + @sprite.x, @y1 + @sprite.y],
   [@x2 + @sprite.x, @y2 + @sprite.y]]
end
absolute_poss() click to toggle source
# File lib/dxopal/sprite/collision_area.rb, line 250
def absolute_poss
  absolute(@poss)
end
collides?(other) click to toggle source
# File lib/dxopal/sprite/collision_area.rb, line 227
def collides?(other)
  case other.type
  when :Point, :Circle
    other.collides?(self)
  when :Rect
    ((ox1, oy1), (ox2, oy2)) = self.absolute_norot_poss
    ((dx1, dy1), (dx2, dy2)) = aabb(transback(other.absolute_poss, @sprite))
    return false unless `Opal.DXOpal.CCk.check_rect_rect(ox1, oy1, ox2, oy2, dx1, dy1, dx2, dy2)`

    ((ox1, oy1), (ox2, oy2)) = other.absolute_norot_poss
    ((dx1, dy1), (dx2, dy2)) = aabb(transback(self.absolute_poss, other.sprite))
    return false unless `Opal.DXOpal.CCk.check_rect_rect(ox1, oy1, ox2, oy2, dx1, dy1, dx2, dy2)`
    true
  when :Triangle
    (ox1, oy1), (ox2, oy2), (ox3, oy3), (ox4, oy4) = *self.absolute_poss
    (dx1, dy1), (dx2, dy2), (dx3, dy3) = *other.absolute_poss
    `Opal.DXOpal.CCk.check_tilted_rect_triangle(ox1, oy1, ox2, oy2, ox3, oy3, ox4, oy4,
                                                dx1, dy1, dx2, dy2, dx3, dy3)`

  else raise
  end
end
inspect() click to toggle source
# File lib/dxopal/sprite/collision_area.rb, line 223
def inspect
  "#<CollisionArea::Rect(#{@x1}, #{@y1}, #{@x2}, #{@y2})>"
end
type() click to toggle source
# File lib/dxopal/sprite/collision_area.rb, line 221
def type; :Rect; end