Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private function parseStatics(objFile:String) : void {
- var rows:Array = objFile.split("\n");
- var lastWasVertex:Boolean = false;
- var shape:Vector.<b2Vec2>;
- var conctactAction:ContactAction = new ContactAction();
- conctactAction.type = ContactAction.TYPE_TRAIL;
- for (var i : int = 0; i < rows.length; i++) {
- var isVertex:Boolean = String(rows[i]).indexOf("v ") == 0;
- if( isVertex ){
- if(!lastWasVertex)
- shape = new Vector.<b2Vec2>();
- var data:Array = String(rows[i]).split(" ");
- var v:b2Vec2 = new b2Vec2(Number(data[1])*Level.PHYS_SCALE, Number(data[2])*Level.PHYS_SCALE*Level.PHYS_Y_MOD);
- shape.push(v);
- }
- if(!isVertex && lastWasVertex){
- //create body from shape vector..
- createStaticBody(shape, conctactAction);
- }
- lastWasVertex = isVertex;
- }
- _bodiesCreated = true;
- }
- private function createStaticBody(verts : Vector.<b2Vec2>, contactAction:ContactAction) : b2Body {
- var i : int;
- // trace('verts: ' + (verts[0].x) + ", " + verts[0].y);
- var centerX:Number = 0;
- var centerY:Number = 0;
- for (i = 0; i < verts.length; i++) {
- centerX += verts[i].x;
- centerY += verts[i].y;
- }
- centerX /= verts.length;
- centerY /= verts.length;
- for (i = 0; i < verts.length; i++) {
- verts[i].x -= centerX;
- verts[i].y -= centerY;
- }
- //make sure the verts are clockwise
- verts.sort(sortVertexes);
- var bodyDef : b2BodyDef = new b2BodyDef();
- bodyDef.type = b2Body.b2_staticBody;
- bodyDef.position.x = centerX;
- bodyDef.position.y = centerY;
- bodyDef.angle = 0;
- var shape:b2PolygonShape = new b2PolygonShape();
- // verts = verts.reverse();
- shape.SetAsVector(verts);
- var fixtureDef:b2FixtureDef = new b2FixtureDef();
- fixtureDef.shape = shape;
- fixtureDef.density = 0;
- fixtureDef.friction = 1;
- fixtureDef.restitution = 0.1;
- var body:b2Body = _level.getWorld().CreateBody(bodyDef);
- body.CreateFixture(fixtureDef);
- body.SetUserData(contactAction);
- return body;
- }
- private function sortVertexes(a:b2Vec2, b:b2Vec2):int{
- var aAngle:Number = Math.atan2(a.y, a.x);
- var bAngle:Number = Math.atan2(b.y, b.x);
- return aAngle > bAngle ? 1 : -1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement