// 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.; public var position:b2Vec2; public var angle:Number; public function Shape2D(vertices:Vector., position:b2Vec2, angle:Number) { // INITIALZING FIELDS: this.verts = vertices; this.position = position; this.angle = angle; } public function getOBB():Vector. { // RETURNS THE ACTUAL VERTS RELATIVE TO THE SHAPES POSITION AND ROTATION: var obb:Vector. = new Vector.(); 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. = 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(); } } } }