class DXOpal::Sprite::CollisionArea::Base

Attributes

sprite[R]

Sprite corresponds to this hitarea

Public Instance Methods

aabb(poss) click to toggle source
# File lib/dxopal/sprite/collision_area.rb, line 73
def aabb(poss)
  x1 = y1 =  Float::INFINITY
  x2 = y2 = -Float::INFINITY
  %x{
    for(var i=0; i<poss.length; i++) {
      if (poss[i][0] < x1) x1 = poss[i][0];
      if (poss[i][1] < y1) y1 = poss[i][1];
      if (poss[i][0] > x2) x2 = poss[i][0];
      if (poss[i][1] > y2) y2 = poss[i][1];
    }
  }
  return [[x1, y1], [x2, y2]]
end
absolute(poss) click to toggle source
# File lib/dxopal/sprite/collision_area.rb, line 17
def absolute(poss)
  ox = @sprite.x
  oy = @sprite.y
  return poss.map{|(x, y)| [x+ox, y+oy]} if !@sprite.collision_sync
  angle = @sprite.angle
  cx = @sprite.center_x
  cy = @sprite.center_y
  sx = @sprite.scale_x
  sy = @sprite.scale_y

  ret = []
  %x{
    var rad = Math.PI / 180.0 * angle;
    var sin = Math.sin(rad);
    var cos = Math.cos(rad);
    poss.forEach(function(pos){
      var x = pos[0], y = pos[1];
      x2 = (x - cx) * sx * cos - (y - cy) * sy * sin + cx + ox;
      y2 = (x - cx) * sx * sin + (y - cy) * sy * cos + cy + oy;
      ret.push([x2, y2]);
    });
  }
  return ret
end
absolute1(pos) click to toggle source
# File lib/dxopal/sprite/collision_area.rb, line 42
def absolute1(pos)
  absolute([pos]).first
end
transback(poss, sprite) click to toggle source
# File lib/dxopal/sprite/collision_area.rb, line 46
def transback(poss, sprite)
  return poss if !sprite.collision_sync
  angle = sprite.angle
  cx = sprite.x + sprite.center_x
  cy = sprite.y + sprite.center_y
  sx = sprite.scale_x
  sy = sprite.scale_y

  ret = []
  %x{
    var rad = Math.PI / 180.0 * -angle;
    var sin = Math.sin(rad);
    var cos = Math.cos(rad);
    poss.forEach(function(pos){
      var x = pos[0], y = pos[1];
      x2 = ((x - cx) * cos - (y - cy) * sin) / sx + cx;
      y2 = ((x - cx) * sin + (y - cy) * cos) / sy + cy;
      ret.push([x2, y2]);
    });
  }
  return ret
end
transback1(pos, sprite) click to toggle source
# File lib/dxopal/sprite/collision_area.rb, line 69
def transback1(pos, sprite)
  transback([pos], sprite).first
end
type() click to toggle source

Return a string like “Point”, “Rect”, etc. Used for type checking in `collides?` (because Opal's Class#is_a? is not very fast)

# File lib/dxopal/sprite/collision_area.rb, line 13
def type
  raise "override me"
end