Advertisement
Guest User

Untitled

a guest
Jan 8th, 2013
509
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.         private function parseStatics(objFile:String) : void {
  2.            
  3.            
  4.             var rows:Array = objFile.split("\n");
  5.             var lastWasVertex:Boolean = false;
  6.            
  7.             var shape:Vector.<b2Vec2>;
  8.            
  9.             var conctactAction:ContactAction = new ContactAction();
  10.             conctactAction.type = ContactAction.TYPE_TRAIL;
  11.            
  12.             for (var i : int = 0; i < rows.length; i++) {
  13.                
  14.                 var isVertex:Boolean =  String(rows[i]).indexOf("v ") == 0;
  15.                
  16.                 if( isVertex ){
  17.                    
  18.                     if(!lastWasVertex)
  19.                         shape = new Vector.<b2Vec2>();
  20.                    
  21.                     var data:Array = String(rows[i]).split(" ");
  22.                     var v:b2Vec2 = new b2Vec2(Number(data[1])*Level.PHYS_SCALE, Number(data[2])*Level.PHYS_SCALE*Level.PHYS_Y_MOD);
  23.                    
  24.                     shape.push(v);
  25.                    
  26.                 }
  27.                
  28.                 if(!isVertex && lastWasVertex){
  29.                        
  30.                     //create body from shape vector..
  31.                    
  32.                     createStaticBody(shape, conctactAction);
  33.                    
  34.                 }
  35.                
  36.                
  37.                 lastWasVertex = isVertex;
  38.             }
  39.            
  40.            
  41.             _bodiesCreated = true;
  42.            
  43.         }
  44.  
  45.  
  46.         private function createStaticBody(verts : Vector.<b2Vec2>, contactAction:ContactAction) : b2Body {
  47.            
  48.             var i : int;
  49. //          trace('verts: ' + (verts[0].x) + ", " + verts[0].y);
  50.            
  51.             var centerX:Number = 0;
  52.             var centerY:Number = 0;
  53.            
  54.             for (i = 0; i < verts.length; i++) {
  55.                 centerX += verts[i].x;
  56.                 centerY += verts[i].y;
  57.             }
  58.            
  59.             centerX /= verts.length;
  60.             centerY /= verts.length;
  61.            
  62.             for (i = 0; i < verts.length; i++) {
  63.                 verts[i].x -= centerX;
  64.                 verts[i].y -= centerY;
  65.             }
  66.            
  67.             //make sure the verts are clockwise
  68.             verts.sort(sortVertexes);
  69.            
  70.             var bodyDef : b2BodyDef = new b2BodyDef();
  71.             bodyDef.type = b2Body.b2_staticBody;
  72.             bodyDef.position.x = centerX;
  73.             bodyDef.position.y = centerY;
  74.             bodyDef.angle = 0;
  75.                        
  76.             var shape:b2PolygonShape = new b2PolygonShape();
  77.            
  78. //          verts = verts.reverse();
  79.             shape.SetAsVector(verts);
  80.                        
  81.             var fixtureDef:b2FixtureDef = new b2FixtureDef();
  82.             fixtureDef.shape = shape;
  83.             fixtureDef.density = 0;
  84.             fixtureDef.friction = 1;
  85.             fixtureDef.restitution = 0.1;
  86.            
  87.  
  88.             var body:b2Body = _level.getWorld().CreateBody(bodyDef);
  89.             body.CreateFixture(fixtureDef);
  90.                        
  91.             body.SetUserData(contactAction);
  92.                    
  93.             return body;
  94.            
  95.  
  96.         }
  97.  
  98.         private function sortVertexes(a:b2Vec2, b:b2Vec2):int{
  99.            
  100.             var aAngle:Number = Math.atan2(a.y, a.x);
  101.             var bAngle:Number = Math.atan2(b.y, b.x);
  102.            
  103.             return aAngle > bAngle ? 1 : -1;
  104.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement