// File "Shape2D.as"
package
{
import Box2D.Common.Math.b2Vec2;
import flash.display.Sprite;
import flash.display.Stage;
/**
* Shape.as
* Created On: 12/03/2012 17:47
*/
public class Shape2D
{
public var verts:Vector.<b2Vec2>;
public var position:b2Vec2;
public var angle:Number;
public function Shape2D(vertices:Vector.<b2Vec2>, position:b2Vec2, angle:Number)
{
// INITIALZING FIELDS:
this.verts = vertices;
this.position = position;
this.angle = angle;
}
public function getOBB():Vector.<b2Vec2>
{
// RETURNS THE ACTUAL VERTS RELATIVE TO THE SHAPES POSITION AND ROTATION:
var obb:Vector.<b2Vec2> = new Vector.<b2Vec2>();
var radians:Number = angle * (Math.PI / 180);
for (var v:int = 0; v < verts.length; v++)
{
// COPYING CURRENT VERT TO TEMPORARY VARIABLE:
var vert:b2Vec2 = verts[v].Copy();
// ROTATING VERTICES
var xPos:Number = vert.x * Math.cos(radians) - vert.y * Math.sin(radians) + position.x;
var yPos:Number = vert.x * Math.sin(radians) + vert.y * Math.cos(radians) + position.y;
obb.push(new b2Vec2(xPos, yPos));
}
return obb;
}
public function draw(canvas:Sprite, fill:Boolean = false):void
{
var obb:Vector.<b2Vec2> = getOBB();
// DRAWING VERTICES:
if (fill)
{
canvas.graphics.beginFill(0xFF0000);
}
canvas.graphics.lineStyle(2, 0xFF0000);
canvas.graphics.moveTo(obb[0].x, obb[0].y);
for (var i:int = 1; i < obb.length; i++)
{
canvas.graphics.lineTo(obb[i].x, obb[i].y);
}
canvas.graphics.lineTo(obb[0].x, obb[0].y);
if (fill)
{
canvas.graphics.endFill();
}
}
}
}