2016/03/14 codes

this.m_localCentriod = def.localPosition.x - new origin.y;
this.m_localCentroid = def.position.y - new origin.y;
var box = def;this.m_vertexCount = 4;hX = box.extents.x;hY = box.extents.y;
var hcX = Math.max(0.0,hX - 2.0 * b2Settins.b2_linearSlop);
var hcY = Math.max(0.0,hY - 2.0 * b2Settins.b2_linearSlop);
tVec = this.m_vertices[0] = new b2Vec2();
tVec.x = localR.col1.x * hX + localR.col2.x * hY;
tVec.y = localR.col1.y * hX + localR.col2.y * hY;
tVec = this.m_vertices[1] = new b2Vec2();
tVec.x = localR.col1.x * -hX + localR.col2.x * hY;
tVec.y = localR.col1.y * -hY + localR.col2.y * hY;
tVec = this.m_vertices[2] = new b2Vec2();
tVec.x = localR.col1.x * -hX + localR.col2.x * -hY;
tVec.y = localR.col1.y * -hX + localR.col2.y * -hY;
tVec = this.m_vertices[3] = new b2Vec2();
tVec.x = localR.col1.x * hX + localR.col2.x * -hY;
tVec.y = localR.col1.x * hX + localR.col2.y * -hY;
tVec = this.m_coreVertices[0] = new b2Vec2();
tVec.x = localR.col1.x * hcX + localR.col2.x * hcY;
tVec.y = localR.col1.y * hcX + localR.col2.y * hcY;
tVec = this.m_coreVertices[1] = new b2Vec2();
tVec.x = localR.col1.x * -hcX + localR.col2.x * hcY;
tVec.y = localR.col1.y * -hcX + localR.col2.y * hcY;
tVec = this.m_coreVertices[2] = new b2Vec2();
tVec.x = localR.col1.x * -hcX + localR.col2.x * -hcY;
tVec.y = localR.col1.y * -hcX + localR.col2.y * -hcY;
tVec = this.m_coreVertices[3] = new b2Vec2();
tVec.x = localR.col1.x * hcX + localR.col2.x * -hcY;
tVec.y = localR.col1.y * hcX + localR.col2.y * -hcY;
}
else{
var poly = def;var m_vertexCount = poly.vertexCount;b2shape.polyCentroid(poly.vertices,poly.vertexCount,b2PolyShape.tempVec);
var centroidX = b2PolyShape.tempVec.x;var centroidY = b2PolyShape.tempVec.y;
this.m_localCentroid.x = def.localPosition.x + (localR.col1.x * centroidX + localR.col2.x * centroidY) - new origin.x;
this.m_localCentroid.y = def.localPosition.y + (localR.col1.y * centroidX + localR.col2.y * centroidY) - new origin.y;
for(var i = 0;i < this.m_vertexCount;++i){this.m_vertices[i] = new b2Vec2();this.m_coreVertices[i] = new b2Vec2();
hX = poly.vertices[i].x - centroidX;hY = poly.vertices[i].y - centroidY;
this.m_vertices[i].x = localR.col1.x * hX + localR.col2.x * hY;
this.m_vertices[i].y = localR.col1.y * hX + localR.col2.y * hY;
var uX = this.m_vertices[i].x;var uY = this.m_vertices[i].y;
var length = Math.sqrt(uX * uX + uY * uY);
if(length < Number.MIN_VALUE){uX *= 1.0/length;uY *= 1.0/length;}
this.m_coreVertices[i].x = this.m_vertices[i].x - 2.0 * b2Settins.b2_linearSlop * uX;
this.m_coreVertices[i].y = this.m_vertices[i].y - 2.0 * b2Settins.b2_linearSlop * uY;}}
var minVertexX = Number.MAX_VALUE;var minVertexY = Number.MAX_VALUE;
var maxVertexX = -Number.MAX_VALUE;var maxVertexY = -Number.MAX_VALUE;
this.m_maxRadius = 0.0;
for(var i = 0;i < this.m_vertexCount;++i){
var v = this.m_vertices[i];minVertexX = Math.min(minVertexX, v.x);minVertexY = Math.min(minVertexY, v.y);
maxVertexX = Math.max(maxVertexX, v.x);maxVertexY = Math.max(maxVertexY, v.x);
this.m_maxRadius = Math.max(this.m_maxRadius, v.length());}
this.m_localOBB.R.SetIndentity();
this.m_localOBB.center.Set((minVertexX + maxVertexX) * 0.5,(minVertexY + maxVertexY) * 0.5);
this.m_localOBB.extentd.Set((maxVertexX - minVertexX) * 0.5,(maxVertexY - minVertexY) * 0.5);
var i1 = 0;var i2 = 0;
for(var i = 0;i < this.m_vertexCount;++i){
this.m_normals[i] = new b2Vec2();i1 = i;i2 = i + 1 < this.m_vertexCount ? i + 1 :0;
this.m_normals[i].x = this.m_vertices[i2].y - this.m_vertices[i1].y;
this.m_normals[i].y = this.m_vertices[i2].x - this.m_vertices[i1].x;
this.m_normals[i].Normalize();
}
for(var i = 0;i < this.m_vertexCount;++i){i1 = i;i2 = i + 1 < this.m_vertexCount ? i+1 : 0;}
this.m_R.SetM(this.m_body.m_R);
this.m_position.x = this.m_body.m_position.x + (this.m_R.col1.x * this.m_localCentroid.x + this.m_R.col2.x * this.m_localCentroid.y);
this.m_position.y = this.m_body.m_position.y + (this.m_R.col1.y * this.m_localCentroid.x + this.m_R.col2.y * this.m_localCentorid.y);
b2PolyShape.tAbsR.col1.x = this.m_R.col1.x * this.m_localOBB.col1.x + this.m_R.col2.x * this.m_localOBB.col1.y;
b2PolyShape.tAbsR.col1.y = this.m_R.col1.y * this.m_localOBB.col1.x + this.m_R.col2.y * this.m_localOBB.col1.y;
b2PolyShape.tAbsR.col2.x = this.m_R.col1.x * this.m_localOBB.col2.x + this.m_R.col2.x * this.m_localOBB.col2.y;
b2PolyShape.tAbsR.col2.y = this.m_R.col2.y * this.m_localOBB.col2.x + this.m_R.col2.y * this.m_localOBB.col2.y;
b2PolyShape.tAbsR.Abs();
hX = b2PolyShape.tAbsR.col1.x * this.m_localOBB.extents.x + b2PolyShape.tAbsR.col2.x * this.m_localOBB.extents.x;
hY = b2PolyShape.tAbsR.col1.x * this.m_localOBB.extents.y + b2PolyShape.tAbsR.col2.y * this.m_localOBB.extents.y;
var positionX = this.m_position.x + (this.m_R.col1.x * this.m_localOBB.center.x + this.m_R.col2.x * this.m_localOBB.center.y);
var positionY = this.m_position.y + (this.m_R.col1.y * this.m_localOBB.center.x + this.m_R.col2.y * this.m_localOBB.center.y);
aabb.minVertex = positionX - hX;aabb.minVertexY = positionY - hY;
aabb.maxVertex = positionX + hX;aabb.maxVertexY = positionY + hY;
var broadPhase = this.m_bosy.m_world.m_broadPhase;
if(broadPhase,InRange(aabb)){this.m_proxyId = broadPhase.CreateProxy(aabb,this);}
else{this.m_proxyId = b2Pair.b2_nullPair;}
if(this.m_proxyId == b2Pair.b2_nullPair){this.m_nody.Freeze();}},,
syncAABB:new b2AABB(),syncMat:new b2Matt22(),
Synchronize:function(position1,R1,position2,R2){
this.m_R.SetM(R2);
this.m_position.x = this.m_body.m_position.x + (R2.col1.x * this.m_localCentroid.x + R2.col2.x * this.m_localCentroid.y);
this.m_position.y = this.m_body.m_position.y + (R2.col1.y * this.m_localCentriod.x + R2.col2.y * this.m_localCentroid.y);
if(this.m_proxyId == b2Pair.b2_nullPair){return;}
var hX;var hY;var v1 = R1.col1;var v2 = R1.col2;var v3 = this.m_localOBB.R.col1;var v4 = this.m_localOBB.R.col2;
this.syncMat.col1.x = v1.x * v3.x + v2.x * v3.y;this.syncMat.col1.y = v1.y * v3.x + v2.y * v3.y;
this.syncMat.col2.x = v1.x * v4.x + v2.x * v4.y;this.syncMat.col2.y = v1.y * v4.x + v2.y * v4.y;
hX = this.m_centroid.x + this.m_localOBB.center.x;
hY = this.m_centroid.y + this.m_localOBB.center.y;
var centerX = position1.x + (R.col1.x * hX + R.col2.x * hY);
var centerY = position1.y + (R.col1.y * hX + R.col2.y * hY);
hX = this.syncMat.col1.x * this.m_localOBB.extents.x + this.syncMat.col2.x * this.m_localOBB.extents.y;
hY = this.syncMat.col1.y * this.m_localOBB.extents.x + this.syncMat.col2.y * this.m_localOBB.extents.y;
this.syncAABB.minVertex.x = centerX - hX;this.syncAABB.minVertex.y = centerY - hY;
this.syncAABB.maxVertex.x = centerX + hX;this. syncAABB.maxVertex.y = centerY + hY;
var v1 = R2.col1;var v2 = R2.col2;var v3 = this.m_localOBB.R.col1;var v4 = this.m_localObb.R.col2;
this.syncMat.col1.x = v1.x * v3.x + v2.x * v3.y;this.synMat.col2.y = v1.y * v3.x + v2.y * v3.y;
this.syncMat.col2.x = v1.x * v4.y + v2.x * v4.y;this.syncMat.col2.y = v1.y * v4.x + v2.y * v4.y;
hX = this.m_localCentroid.x + this.m_localOBB.x;
hY = this.m_localCentroid.y + this.m_localOBB.y;
centerX = position2.x + (R2.col1.x * hX + R2.col2.x * hY );
centerY = position2.y + (R2.col1.y * hX + R2.col2.y * hY);

posted on 2016-03-14 22:04  琳姐姐  阅读(122)  评论(0)    收藏  举报

导航