var oimo = oimo || {}; if(!oimo.collision) oimo.collision = {}; if(!oimo.collision.broadphase) oimo.collision.broadphase = {}; oimo.collision.broadphase.BroadPhase = class oimo_collision_broadphase_BroadPhase { constructor(type) { this._type = type; this._numProxies = 0; this._proxyList = null; this._proxyListLast = null; this._proxyPairList = null; this._incremental = false; this._testCount = 0; this._proxyPairPool = null; this._idCount = 0; this._convexSweep = new oimo.collision.broadphase._BroadPhase.ConvexSweepGeometry(); this._aabb = new oimo.collision.broadphase._BroadPhase.AabbGeometry(); this.identity = new oimo.common.Transform(); this.zero = new oimo.common.Vec3(); this.rayCastHit = new oimo.collision.geometry.RayCastHit(); } createProxy(userData,aabb) { return null; } destroyProxy(proxy) { } moveProxy(proxy,aabb,displacement) { } isOverlapping(proxy1,proxy2) { if(proxy1._aabbMinX < proxy2._aabbMaxX && proxy1._aabbMaxX > proxy2._aabbMinX && proxy1._aabbMinY < proxy2._aabbMaxY && proxy1._aabbMaxY > proxy2._aabbMinY && proxy1._aabbMinZ < proxy2._aabbMaxZ) { return proxy1._aabbMaxZ > proxy2._aabbMinZ; } else { return false; } } collectPairs() { } getProxyPairList() { return this._proxyPairList; } isIncremental() { return this._incremental; } getTestCount() { return this._testCount; } rayCast(begin,end,callback) { } convexCast(convex,begin,translation,callback) { } aabbTest(aabb,callback) { } } if(!oimo.collision.geometry) oimo.collision.geometry = {}; oimo.collision.geometry.Geometry = class oimo_collision_geometry_Geometry { constructor(type) { this._type = type; this._volume = 0; } _updateMass() { } _computeAabb(aabb,tf) { } _rayCastLocal(beginX,beginY,beginZ,endX,endY,endZ,hit) { return false; } getType() { return this._type; } getVolume() { return this._volume; } rayCast(begin,end,transform,hit) { var beginLocal; var beginLocalX; var beginLocalY; var beginLocalZ; var endLocal; var endLocalX; var endLocalY; var endLocalZ; var v = begin; beginLocalX = v.x; beginLocalY = v.y; beginLocalZ = v.z; var v1 = end; endLocalX = v1.x; endLocalY = v1.y; endLocalZ = v1.z; beginLocalX -= transform._positionX; beginLocalY -= transform._positionY; beginLocalZ -= transform._positionZ; endLocalX -= transform._positionX; endLocalY -= transform._positionY; endLocalZ -= transform._positionZ; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = transform._rotation00 * beginLocalX + transform._rotation10 * beginLocalY + transform._rotation20 * beginLocalZ; __tmp__Y = transform._rotation01 * beginLocalX + transform._rotation11 * beginLocalY + transform._rotation21 * beginLocalZ; __tmp__Z = transform._rotation02 * beginLocalX + transform._rotation12 * beginLocalY + transform._rotation22 * beginLocalZ; beginLocalX = __tmp__X; beginLocalY = __tmp__Y; beginLocalZ = __tmp__Z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = transform._rotation00 * endLocalX + transform._rotation10 * endLocalY + transform._rotation20 * endLocalZ; __tmp__Y1 = transform._rotation01 * endLocalX + transform._rotation11 * endLocalY + transform._rotation21 * endLocalZ; __tmp__Z1 = transform._rotation02 * endLocalX + transform._rotation12 * endLocalY + transform._rotation22 * endLocalZ; endLocalX = __tmp__X1; endLocalY = __tmp__Y1; endLocalZ = __tmp__Z1; if(this._rayCastLocal(beginLocalX,beginLocalY,beginLocalZ,endLocalX,endLocalY,endLocalZ,hit)) { var localPos; var localPosX; var localPosY; var localPosZ; var localNormal; var localNormalX; var localNormalY; var localNormalZ; var v2 = hit.position; localPosX = v2.x; localPosY = v2.y; localPosZ = v2.z; var v3 = hit.normal; localNormalX = v3.x; localNormalY = v3.y; localNormalZ = v3.z; var __tmp__X2; var __tmp__Y2; var __tmp__Z2; __tmp__X2 = transform._rotation00 * localPosX + transform._rotation01 * localPosY + transform._rotation02 * localPosZ; __tmp__Y2 = transform._rotation10 * localPosX + transform._rotation11 * localPosY + transform._rotation12 * localPosZ; __tmp__Z2 = transform._rotation20 * localPosX + transform._rotation21 * localPosY + transform._rotation22 * localPosZ; localPosX = __tmp__X2; localPosY = __tmp__Y2; localPosZ = __tmp__Z2; var __tmp__X3; var __tmp__Y3; var __tmp__Z3; __tmp__X3 = transform._rotation00 * localNormalX + transform._rotation01 * localNormalY + transform._rotation02 * localNormalZ; __tmp__Y3 = transform._rotation10 * localNormalX + transform._rotation11 * localNormalY + transform._rotation12 * localNormalZ; __tmp__Z3 = transform._rotation20 * localNormalX + transform._rotation21 * localNormalY + transform._rotation22 * localNormalZ; localNormalX = __tmp__X3; localNormalY = __tmp__Y3; localNormalZ = __tmp__Z3; localPosX += transform._positionX; localPosY += transform._positionY; localPosZ += transform._positionZ; var v4 = hit.position; v4.x = localPosX; v4.y = localPosY; v4.z = localPosZ; var v5 = hit.normal; v5.x = localNormalX; v5.y = localNormalY; v5.z = localNormalZ; return true; } return false; } } oimo.collision.geometry.ConvexGeometry = class oimo_collision_geometry_ConvexGeometry extends oimo.collision.geometry.Geometry { constructor(type) { super(type); this._gjkMargin = oimo.common.Setting.defaultGJKMargin; this._useGjkRayCast = false; } getGjkMergin() { return this._gjkMargin; } setGjkMergin(gjkMergin) { if(gjkMergin < 0) { gjkMergin = 0; } this._gjkMargin = gjkMergin; } computeLocalSupportingVertex(dir,out) { } rayCast(begin,end,transform,hit) { if(this._useGjkRayCast) { return oimo.collision.narrowphase.detector.gjkepa.GjkEpa.instance.rayCast(this,transform,begin,end,hit); } else { return super.rayCast(begin,end,transform,hit); } } } if(!oimo.collision.broadphase._BroadPhase) oimo.collision.broadphase._BroadPhase = {}; oimo.collision.broadphase._BroadPhase.ConvexSweepGeometry = class oimo_collision_broadphase__$BroadPhase_ConvexSweepGeometry extends oimo.collision.geometry.ConvexGeometry { constructor() { super(-1); } init(c,transform,translation) { this.c = c; var tr; var trX; var trY; var trZ; var v = translation; trX = v.x; trY = v.y; trZ = v.z; var localTr; var localTrX; var localTrY; var localTrZ; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = transform._rotation00 * trX + transform._rotation10 * trY + transform._rotation20 * trZ; __tmp__Y = transform._rotation01 * trX + transform._rotation11 * trY + transform._rotation21 * trZ; __tmp__Z = transform._rotation02 * trX + transform._rotation12 * trY + transform._rotation22 * trZ; localTrX = __tmp__X; localTrY = __tmp__Y; localTrZ = __tmp__Z; this.localTranslation = new oimo.common.Vec3(); var v1 = this.localTranslation; v1.x = localTrX; v1.y = localTrY; v1.z = localTrZ; this._gjkMargin = c._gjkMargin; } computeLocalSupportingVertex(dir,out) { this.c.computeLocalSupportingVertex(dir,out); var v = this.localTranslation; if(dir.x * v.x + dir.y * v.y + dir.z * v.z > 0) { var v1 = this.localTranslation; var tx = out.x + v1.x; var ty = out.y + v1.y; var tz = out.z + v1.z; out.x = tx; out.y = ty; out.z = tz; } } } oimo.collision.broadphase._BroadPhase.AabbGeometry = class oimo_collision_broadphase__$BroadPhase_AabbGeometry extends oimo.collision.geometry.ConvexGeometry { constructor() { super(-1); this.min = new oimo.common.Vec3(); this.max = new oimo.common.Vec3(); } computeLocalSupportingVertex(dir,out) { out.x = dir.x > 0 ? this.max.x : this.min.x; out.y = dir.y > 0 ? this.max.y : this.min.y; out.z = dir.z > 0 ? this.max.z : this.min.z; } } oimo.collision.broadphase.BroadPhaseProxyCallback = class oimo_collision_broadphase_BroadPhaseProxyCallback { constructor() { } process(proxy) { } } oimo.collision.broadphase.BroadPhaseType = class oimo_collision_broadphase_BroadPhaseType { } oimo.collision.broadphase.Proxy = class oimo_collision_broadphase_Proxy { constructor(userData,id) { this.userData = userData; this._id = id; this._prev = null; this._next = null; this._aabbMinX = 0; this._aabbMinY = 0; this._aabbMinZ = 0; this._aabbMaxX = 0; this._aabbMaxY = 0; this._aabbMaxZ = 0; } getId() { return this._id; } getFatAabb() { var aabb = new oimo.collision.geometry.Aabb(); aabb._minX = this._aabbMinX; aabb._minY = this._aabbMinY; aabb._minZ = this._aabbMinZ; aabb._maxX = this._aabbMaxX; aabb._maxY = this._aabbMaxY; aabb._maxZ = this._aabbMaxZ; return aabb; } getFatAabbTo(aabb) { aabb._minX = this._aabbMinX; aabb._minY = this._aabbMinY; aabb._minZ = this._aabbMinZ; aabb._maxX = this._aabbMaxX; aabb._maxY = this._aabbMaxY; aabb._maxZ = this._aabbMaxZ; } } oimo.collision.broadphase.ProxyPair = class oimo_collision_broadphase_ProxyPair { constructor() { this._p1 = null; this._p2 = null; } getProxy1() { return this._p1; } getProxy2() { return this._p2; } getNext() { return this._next; } } if(!oimo.collision.broadphase.bruteforce) oimo.collision.broadphase.bruteforce = {}; oimo.collision.broadphase.bruteforce.BruteForceBroadPhase = class oimo_collision_broadphase_bruteforce_BruteForceBroadPhase extends oimo.collision.broadphase.BroadPhase { constructor() { super(1); this._incremental = false; } createProxy(userData,aabb) { var proxy = new oimo.collision.broadphase.Proxy(userData,this._idCount++); this._numProxies++; if(this._proxyList == null) { this._proxyList = proxy; this._proxyListLast = proxy; } else { this._proxyListLast._next = proxy; proxy._prev = this._proxyListLast; this._proxyListLast = proxy; } proxy._aabbMinX = aabb._minX; proxy._aabbMinY = aabb._minY; proxy._aabbMinZ = aabb._minZ; proxy._aabbMaxX = aabb._maxX; proxy._aabbMaxY = aabb._maxY; proxy._aabbMaxZ = aabb._maxZ; return proxy; } destroyProxy(proxy) { this._numProxies--; var prev = proxy._prev; var next = proxy._next; if(prev != null) { prev._next = next; } if(next != null) { next._prev = prev; } if(proxy == this._proxyList) { this._proxyList = this._proxyList._next; } if(proxy == this._proxyListLast) { this._proxyListLast = this._proxyListLast._prev; } proxy._next = null; proxy._prev = null; proxy.userData = null; } moveProxy(proxy,aabb,dislacement) { proxy._aabbMinX = aabb._minX; proxy._aabbMinY = aabb._minY; proxy._aabbMinZ = aabb._minZ; proxy._aabbMaxX = aabb._maxX; proxy._aabbMaxY = aabb._maxY; proxy._aabbMaxZ = aabb._maxZ; } collectPairs() { var p = this._proxyPairList; if(p != null) { while(true) { p._p1 = null; p._p2 = null; p = p._next; if(!(p != null)) { break; } } this._proxyPairList._next = this._proxyPairPool; this._proxyPairPool = this._proxyPairList; this._proxyPairList = null; } this._testCount = 0; var p1 = this._proxyList; while(p1 != null) { var n = p1._next; var p2 = p1._next; while(p2 != null) { var n1 = p2._next; this._testCount++; if(p1._aabbMinX < p2._aabbMaxX && p1._aabbMaxX > p2._aabbMinX && p1._aabbMinY < p2._aabbMaxY && p1._aabbMaxY > p2._aabbMinY && p1._aabbMinZ < p2._aabbMaxZ && p1._aabbMaxZ > p2._aabbMinZ) { var first = this._proxyPairPool; if(first != null) { this._proxyPairPool = first._next; first._next = null; } else { first = new oimo.collision.broadphase.ProxyPair(); } var pp = first; if(this._proxyPairList == null) { this._proxyPairList = pp; } else { pp._next = this._proxyPairList; this._proxyPairList = pp; } pp._p1 = p1; pp._p2 = p2; } p2 = n1; } p1 = n; } } rayCast(begin,end,callback) { var p1; var p1X; var p1Y; var p1Z; var p2; var p2X; var p2Y; var p2Z; var dir; var dirX; var dirY; var dirZ; var v = begin; p1X = v.x; p1Y = v.y; p1Z = v.z; var v1 = end; p2X = v1.x; p2Y = v1.y; p2Z = v1.z; dirX = p2X - p1X; dirY = p2Y - p1Y; dirZ = p2Z - p1Z; var min; var minX; var minY; var minZ; var max; var maxX; var maxY; var maxZ; minX = p1X < p2X ? p1X : p2X; minY = p1Y < p2Y ? p1Y : p2Y; minZ = p1Z < p2Z ? p1Z : p2Z; maxX = p1X > p2X ? p1X : p2X; maxY = p1Y > p2Y ? p1Y : p2Y; maxZ = p1Z > p2Z ? p1Z : p2Z; var p = this._proxyList; while(p != null) { var n = p._next; var x1 = p1X; var y1 = p1Y; var z1 = p1Z; var x2 = p2X; var y2 = p2Y; var z2 = p2Z; var sminx = x1 < x2 ? x1 : x2; var sminy = y1 < y2 ? y1 : y2; var sminz = z1 < z2 ? z1 : z2; var smaxx = x1 > x2 ? x1 : x2; var smaxy = y1 > y2 ? y1 : y2; var smaxz = z1 > z2 ? z1 : z2; var pminx = p._aabbMinX; var pminy = p._aabbMinY; var pminz = p._aabbMinZ; var pmaxx = p._aabbMaxX; var pmaxy = p._aabbMaxY; var pmaxz = p._aabbMaxZ; var tmp; if(pminx > smaxx || pmaxx < sminx || pminy > smaxy || pmaxy < sminy || pminz > smaxz || pmaxz < sminz) { tmp = false; } else { var dx = x2 - x1; var dy = y2 - y1; var dz = z2 - z1; var adx = dx < 0 ? -dx : dx; var ady = dy < 0 ? -dy : dy; var adz = dz < 0 ? -dz : dz; var pextx = (pmaxx - pminx) * 0.5; var pexty = (pmaxy - pminy) * 0.5; var pextz = (pmaxz - pminz) * 0.5; var pcntx = (pmaxx + pminx) * 0.5; var pcnty = (pmaxy + pminy) * 0.5; var pcntz = (pmaxz + pminz) * 0.5; var cpx = x1 - pcntx; var cpy = y1 - pcnty; var cpz = z1 - pcntz; var tmp1; var tmp2; var x = cpy * dz - cpz * dy; if(!((x < 0 ? -x : x) - (pexty * adz + pextz * ady) > 0)) { var x3 = cpz * dx - cpx * dz; tmp2 = (x3 < 0 ? -x3 : x3) - (pextz * adx + pextx * adz) > 0; } else { tmp2 = true; } if(!tmp2) { var x4 = cpx * dy - cpy * dx; tmp1 = (x4 < 0 ? -x4 : x4) - (pextx * ady + pexty * adx) > 0; } else { tmp1 = true; } tmp = tmp1 ? false : true; } if(tmp) { callback.process(p); } p = n; } } convexCast(convex,begin,translation,callback) { var p = this._proxyList; while(p != null) { var n = p._next; var v = this._aabb.min; v.x = p._aabbMinX; v.y = p._aabbMinY; v.z = p._aabbMinZ; var v1 = this._aabb.max; v1.x = p._aabbMaxX; v1.y = p._aabbMaxY; v1.z = p._aabbMaxZ; this._convexSweep.init(convex,begin,translation); var gjkEpa = oimo.collision.narrowphase.detector.gjkepa.GjkEpa.instance; if(gjkEpa.computeClosestPointsImpl(this._convexSweep,this._aabb,begin,this.identity,null,false) == 0 && gjkEpa.distance <= 0) { callback.process(p); } p = n; } } aabbTest(aabb,callback) { var p = this._proxyList; while(p != null) { var n = p._next; if(aabb._minX < p._aabbMaxX && aabb._maxX > p._aabbMinX && aabb._minY < p._aabbMaxY && aabb._maxY > p._aabbMinY && aabb._minZ < p._aabbMaxZ && aabb._maxZ > p._aabbMinZ) { callback.process(p); } p = n; } } } if(!oimo.collision.broadphase.bvh) oimo.collision.broadphase.bvh = {}; oimo.collision.broadphase.bvh.BvhBroadPhase = class oimo_collision_broadphase_bvh_BvhBroadPhase extends oimo.collision.broadphase.BroadPhase { constructor() { super(2); this._incremental = true; this._tree = new oimo.collision.broadphase.bvh.BvhTree(); var this1 = new Array(1024); this.movedProxies = this1; this.numMovedProxies = 0; } collide(n1,n2) { this._testCount++; var l1 = n1._height == 0; var l2 = n2._height == 0; if(n1 == n2) { if(l1) { return; } this.collide(n1._children[0],n2); this.collide(n1._children[1],n2); return; } if(!(n1._aabbMinX < n2._aabbMaxX && n1._aabbMaxX > n2._aabbMinX && n1._aabbMinY < n2._aabbMaxY && n1._aabbMaxY > n2._aabbMinY && n1._aabbMinZ < n2._aabbMaxZ && n1._aabbMaxZ > n2._aabbMinZ)) { return; } if(l1 && l2) { var p1 = n1._proxy; var p2 = n2._proxy; var first = this._proxyPairPool; if(first != null) { this._proxyPairPool = first._next; first._next = null; } else { first = new oimo.collision.broadphase.ProxyPair(); } var pp = first; if(this._proxyPairList == null) { this._proxyPairList = pp; } else { pp._next = this._proxyPairList; this._proxyPairList = pp; } pp._p1 = p1; pp._p2 = p2; return; } if(l2 || n1._height > n2._height) { this.collide(n1._children[0],n2); this.collide(n1._children[1],n2); } else { this.collide(n2._children[0],n1); this.collide(n2._children[1],n1); } } rayCastRecursive(node,_p1X,_p1Y,_p1Z,_p2X,_p2Y,_p2Z,callback) { var p1; var p1X; var p1Y; var p1Z; var p2; var p2X; var p2Y; var p2Z; p1X = _p1X; p1Y = _p1Y; p1Z = _p1Z; p2X = _p2X; p2Y = _p2Y; p2Z = _p2Z; var x1 = p1X; var y1 = p1Y; var z1 = p1Z; var x2 = p2X; var y2 = p2Y; var z2 = p2Z; var sminx = x1 < x2 ? x1 : x2; var sminy = y1 < y2 ? y1 : y2; var sminz = z1 < z2 ? z1 : z2; var smaxx = x1 > x2 ? x1 : x2; var smaxy = y1 > y2 ? y1 : y2; var smaxz = z1 > z2 ? z1 : z2; var pminx = node._aabbMinX; var pminy = node._aabbMinY; var pminz = node._aabbMinZ; var pmaxx = node._aabbMaxX; var pmaxy = node._aabbMaxY; var pmaxz = node._aabbMaxZ; var tmp; if(pminx > smaxx || pmaxx < sminx || pminy > smaxy || pmaxy < sminy || pminz > smaxz || pmaxz < sminz) { tmp = false; } else { var dx = x2 - x1; var dy = y2 - y1; var dz = z2 - z1; var adx = dx < 0 ? -dx : dx; var ady = dy < 0 ? -dy : dy; var adz = dz < 0 ? -dz : dz; var pextx = (pmaxx - pminx) * 0.5; var pexty = (pmaxy - pminy) * 0.5; var pextz = (pmaxz - pminz) * 0.5; var pcntx = (pmaxx + pminx) * 0.5; var pcnty = (pmaxy + pminy) * 0.5; var pcntz = (pmaxz + pminz) * 0.5; var cpx = x1 - pcntx; var cpy = y1 - pcnty; var cpz = z1 - pcntz; var tmp1; var tmp2; var x = cpy * dz - cpz * dy; if(!((x < 0 ? -x : x) - (pexty * adz + pextz * ady) > 0)) { var x3 = cpz * dx - cpx * dz; tmp2 = (x3 < 0 ? -x3 : x3) - (pextz * adx + pextx * adz) > 0; } else { tmp2 = true; } if(!tmp2) { var x4 = cpx * dy - cpy * dx; tmp1 = (x4 < 0 ? -x4 : x4) - (pextx * ady + pexty * adx) > 0; } else { tmp1 = true; } tmp = tmp1 ? false : true; } if(!tmp) { return; } if(node._height == 0) { callback.process(node._proxy); return; } this.rayCastRecursive(node._children[0],p1X,p1Y,p1Z,p2X,p2Y,p2Z,callback); this.rayCastRecursive(node._children[1],p1X,p1Y,p1Z,p2X,p2Y,p2Z,callback); } convexCastRecursive(node,convex,begin,translation,callback) { var v = this._aabb.min; v.x = node._aabbMinX; v.y = node._aabbMinY; v.z = node._aabbMinZ; var v1 = this._aabb.max; v1.x = node._aabbMaxX; v1.y = node._aabbMaxY; v1.z = node._aabbMaxZ; this._convexSweep.init(convex,begin,translation); var gjkEpa = oimo.collision.narrowphase.detector.gjkepa.GjkEpa.instance; if(!(gjkEpa.computeClosestPointsImpl(this._convexSweep,this._aabb,begin,this.identity,null,false) == 0 && gjkEpa.distance <= 0)) { return; } if(node._height == 0) { callback.process(node._proxy); return; } this.convexCastRecursive(node._children[0],convex,begin,translation,callback); this.convexCastRecursive(node._children[1],convex,begin,translation,callback); } aabbTestRecursive(node,aabb,callback) { if(!(node._aabbMinX < aabb._maxX && node._aabbMaxX > aabb._minX && node._aabbMinY < aabb._maxY && node._aabbMaxY > aabb._minY && node._aabbMinZ < aabb._maxZ && node._aabbMaxZ > aabb._minZ)) { return; } if(node._height == 0) { callback.process(node._proxy); return; } this.aabbTestRecursive(node._children[0],aabb,callback); this.aabbTestRecursive(node._children[1],aabb,callback); } createProxy(userData,aabb) { var p = new oimo.collision.broadphase.bvh.BvhProxy(userData,this._idCount++); this._numProxies++; if(this._proxyList == null) { this._proxyList = p; this._proxyListLast = p; } else { this._proxyListLast._next = p; p._prev = this._proxyListLast; this._proxyListLast = p; } var displacement = null; p._aabbMinX = aabb._minX; p._aabbMinY = aabb._minY; p._aabbMinZ = aabb._minZ; p._aabbMaxX = aabb._maxX; p._aabbMaxY = aabb._maxY; p._aabbMaxZ = aabb._maxZ; var padding = oimo.common.Setting.bvhProxyPadding; var paddingVec; var paddingVecX; var paddingVecY; var paddingVecZ; paddingVecX = padding; paddingVecY = padding; paddingVecZ = padding; p._aabbMinX -= paddingVecX; p._aabbMinY -= paddingVecY; p._aabbMinZ -= paddingVecZ; p._aabbMaxX += paddingVecX; p._aabbMaxY += paddingVecY; p._aabbMaxZ += paddingVecZ; if(displacement != null) { var d; var dX; var dY; var dZ; var zero; var zeroX; var zeroY; var zeroZ; var addToMin; var addToMinX; var addToMinY; var addToMinZ; var addToMax; var addToMaxX; var addToMaxY; var addToMaxZ; zeroX = 0; zeroY = 0; zeroZ = 0; var v = displacement; dX = v.x; dY = v.y; dZ = v.z; addToMinX = zeroX < dX ? zeroX : dX; addToMinY = zeroY < dY ? zeroY : dY; addToMinZ = zeroZ < dZ ? zeroZ : dZ; addToMaxX = zeroX > dX ? zeroX : dX; addToMaxY = zeroY > dY ? zeroY : dY; addToMaxZ = zeroZ > dZ ? zeroZ : dZ; p._aabbMinX += addToMinX; p._aabbMinY += addToMinY; p._aabbMinZ += addToMinZ; p._aabbMaxX += addToMaxX; p._aabbMaxY += addToMaxY; p._aabbMaxZ += addToMaxZ; } var _this = this._tree; var first = _this._nodePool; if(first != null) { _this._nodePool = first._next; first._next = null; } else { first = new oimo.collision.broadphase.bvh.BvhNode(); } var leaf = first; leaf._proxy = p; p._leaf = leaf; leaf._aabbMinX = p._aabbMinX; leaf._aabbMinY = p._aabbMinY; leaf._aabbMinZ = p._aabbMinZ; leaf._aabbMaxX = p._aabbMaxX; leaf._aabbMaxY = p._aabbMaxY; leaf._aabbMaxZ = p._aabbMaxZ; _this._numLeaves++; if(_this.leafList == null) { _this.leafList = leaf; _this.leafListLast = leaf; } else { _this.leafListLast._nextLeaf = leaf; leaf._prevLeaf = _this.leafListLast; _this.leafListLast = leaf; } if(_this._root == null) { _this._root = leaf; } else { var sibling = _this._root; while(sibling._height > 0) { var nextStep = _this._strategy._decideInsertion(sibling,leaf); if(nextStep == -1) { break; } else { sibling = sibling._children[nextStep]; } } var parent = sibling._parent; var first1 = _this._nodePool; if(first1 != null) { _this._nodePool = first1._next; first1._next = null; } else { first1 = new oimo.collision.broadphase.bvh.BvhNode(); } var node = first1; if(parent == null) { _this._root = node; } else { var index = sibling._childIndex; parent._children[index] = node; node._parent = parent; node._childIndex = index; } var index1 = sibling._childIndex; node._children[index1] = sibling; sibling._parent = node; sibling._childIndex = index1; var index2 = sibling._childIndex ^ 1; node._children[index2] = leaf; leaf._parent = node; leaf._childIndex = index2; while(node != null) { if(_this._strategy._balancingEnabled) { var nh = node._height; if(nh < 2) { node = node; } else { var p1 = node._parent; var l = node._children[0]; var r = node._children[1]; var lh = l._height; var rh = r._height; var balance = lh - rh; var nodeIndex = node._childIndex; if(balance > 1) { var ll = l._children[0]; var lr = l._children[1]; var llh = ll._height; var lrh = lr._height; if(llh > lrh) { l._children[1] = node; node._parent = l; node._childIndex = 1; node._children[0] = lr; lr._parent = node; lr._childIndex = 0; var c1 = l._children[0]; var c2 = l._children[1]; l._aabbMinX = c1._aabbMinX < c2._aabbMinX ? c1._aabbMinX : c2._aabbMinX; l._aabbMinY = c1._aabbMinY < c2._aabbMinY ? c1._aabbMinY : c2._aabbMinY; l._aabbMinZ = c1._aabbMinZ < c2._aabbMinZ ? c1._aabbMinZ : c2._aabbMinZ; l._aabbMaxX = c1._aabbMaxX > c2._aabbMaxX ? c1._aabbMaxX : c2._aabbMaxX; l._aabbMaxY = c1._aabbMaxY > c2._aabbMaxY ? c1._aabbMaxY : c2._aabbMaxY; l._aabbMaxZ = c1._aabbMaxZ > c2._aabbMaxZ ? c1._aabbMaxZ : c2._aabbMaxZ; var h1 = l._children[0]._height; var h2 = l._children[1]._height; l._height = (h1 > h2 ? h1 : h2) + 1; var c11 = node._children[0]; var c21 = node._children[1]; node._aabbMinX = c11._aabbMinX < c21._aabbMinX ? c11._aabbMinX : c21._aabbMinX; node._aabbMinY = c11._aabbMinY < c21._aabbMinY ? c11._aabbMinY : c21._aabbMinY; node._aabbMinZ = c11._aabbMinZ < c21._aabbMinZ ? c11._aabbMinZ : c21._aabbMinZ; node._aabbMaxX = c11._aabbMaxX > c21._aabbMaxX ? c11._aabbMaxX : c21._aabbMaxX; node._aabbMaxY = c11._aabbMaxY > c21._aabbMaxY ? c11._aabbMaxY : c21._aabbMaxY; node._aabbMaxZ = c11._aabbMaxZ > c21._aabbMaxZ ? c11._aabbMaxZ : c21._aabbMaxZ; var h11 = node._children[0]._height; var h21 = node._children[1]._height; node._height = (h11 > h21 ? h11 : h21) + 1; } else { l._children[0] = node; node._parent = l; node._childIndex = 0; node._children[0] = ll; ll._parent = node; ll._childIndex = 0; var c12 = l._children[0]; var c22 = l._children[1]; l._aabbMinX = c12._aabbMinX < c22._aabbMinX ? c12._aabbMinX : c22._aabbMinX; l._aabbMinY = c12._aabbMinY < c22._aabbMinY ? c12._aabbMinY : c22._aabbMinY; l._aabbMinZ = c12._aabbMinZ < c22._aabbMinZ ? c12._aabbMinZ : c22._aabbMinZ; l._aabbMaxX = c12._aabbMaxX > c22._aabbMaxX ? c12._aabbMaxX : c22._aabbMaxX; l._aabbMaxY = c12._aabbMaxY > c22._aabbMaxY ? c12._aabbMaxY : c22._aabbMaxY; l._aabbMaxZ = c12._aabbMaxZ > c22._aabbMaxZ ? c12._aabbMaxZ : c22._aabbMaxZ; var h12 = l._children[0]._height; var h22 = l._children[1]._height; l._height = (h12 > h22 ? h12 : h22) + 1; var c13 = node._children[0]; var c23 = node._children[1]; node._aabbMinX = c13._aabbMinX < c23._aabbMinX ? c13._aabbMinX : c23._aabbMinX; node._aabbMinY = c13._aabbMinY < c23._aabbMinY ? c13._aabbMinY : c23._aabbMinY; node._aabbMinZ = c13._aabbMinZ < c23._aabbMinZ ? c13._aabbMinZ : c23._aabbMinZ; node._aabbMaxX = c13._aabbMaxX > c23._aabbMaxX ? c13._aabbMaxX : c23._aabbMaxX; node._aabbMaxY = c13._aabbMaxY > c23._aabbMaxY ? c13._aabbMaxY : c23._aabbMaxY; node._aabbMaxZ = c13._aabbMaxZ > c23._aabbMaxZ ? c13._aabbMaxZ : c23._aabbMaxZ; var h13 = node._children[0]._height; var h23 = node._children[1]._height; node._height = (h13 > h23 ? h13 : h23) + 1; } if(p1 != null) { p1._children[nodeIndex] = l; l._parent = p1; l._childIndex = nodeIndex; } else { _this._root = l; l._parent = null; } node = l; } else if(balance < -1) { var rl = r._children[0]; var rr = r._children[1]; var rlh = rl._height; var rrh = rr._height; if(rlh > rrh) { r._children[1] = node; node._parent = r; node._childIndex = 1; node._children[1] = rr; rr._parent = node; rr._childIndex = 1; var c14 = r._children[0]; var c24 = r._children[1]; r._aabbMinX = c14._aabbMinX < c24._aabbMinX ? c14._aabbMinX : c24._aabbMinX; r._aabbMinY = c14._aabbMinY < c24._aabbMinY ? c14._aabbMinY : c24._aabbMinY; r._aabbMinZ = c14._aabbMinZ < c24._aabbMinZ ? c14._aabbMinZ : c24._aabbMinZ; r._aabbMaxX = c14._aabbMaxX > c24._aabbMaxX ? c14._aabbMaxX : c24._aabbMaxX; r._aabbMaxY = c14._aabbMaxY > c24._aabbMaxY ? c14._aabbMaxY : c24._aabbMaxY; r._aabbMaxZ = c14._aabbMaxZ > c24._aabbMaxZ ? c14._aabbMaxZ : c24._aabbMaxZ; var h14 = r._children[0]._height; var h24 = r._children[1]._height; r._height = (h14 > h24 ? h14 : h24) + 1; var c15 = node._children[0]; var c25 = node._children[1]; node._aabbMinX = c15._aabbMinX < c25._aabbMinX ? c15._aabbMinX : c25._aabbMinX; node._aabbMinY = c15._aabbMinY < c25._aabbMinY ? c15._aabbMinY : c25._aabbMinY; node._aabbMinZ = c15._aabbMinZ < c25._aabbMinZ ? c15._aabbMinZ : c25._aabbMinZ; node._aabbMaxX = c15._aabbMaxX > c25._aabbMaxX ? c15._aabbMaxX : c25._aabbMaxX; node._aabbMaxY = c15._aabbMaxY > c25._aabbMaxY ? c15._aabbMaxY : c25._aabbMaxY; node._aabbMaxZ = c15._aabbMaxZ > c25._aabbMaxZ ? c15._aabbMaxZ : c25._aabbMaxZ; var h15 = node._children[0]._height; var h25 = node._children[1]._height; node._height = (h15 > h25 ? h15 : h25) + 1; } else { r._children[0] = node; node._parent = r; node._childIndex = 0; node._children[1] = rl; rl._parent = node; rl._childIndex = 1; var c16 = r._children[0]; var c26 = r._children[1]; r._aabbMinX = c16._aabbMinX < c26._aabbMinX ? c16._aabbMinX : c26._aabbMinX; r._aabbMinY = c16._aabbMinY < c26._aabbMinY ? c16._aabbMinY : c26._aabbMinY; r._aabbMinZ = c16._aabbMinZ < c26._aabbMinZ ? c16._aabbMinZ : c26._aabbMinZ; r._aabbMaxX = c16._aabbMaxX > c26._aabbMaxX ? c16._aabbMaxX : c26._aabbMaxX; r._aabbMaxY = c16._aabbMaxY > c26._aabbMaxY ? c16._aabbMaxY : c26._aabbMaxY; r._aabbMaxZ = c16._aabbMaxZ > c26._aabbMaxZ ? c16._aabbMaxZ : c26._aabbMaxZ; var h16 = r._children[0]._height; var h26 = r._children[1]._height; r._height = (h16 > h26 ? h16 : h26) + 1; var c17 = node._children[0]; var c27 = node._children[1]; node._aabbMinX = c17._aabbMinX < c27._aabbMinX ? c17._aabbMinX : c27._aabbMinX; node._aabbMinY = c17._aabbMinY < c27._aabbMinY ? c17._aabbMinY : c27._aabbMinY; node._aabbMinZ = c17._aabbMinZ < c27._aabbMinZ ? c17._aabbMinZ : c27._aabbMinZ; node._aabbMaxX = c17._aabbMaxX > c27._aabbMaxX ? c17._aabbMaxX : c27._aabbMaxX; node._aabbMaxY = c17._aabbMaxY > c27._aabbMaxY ? c17._aabbMaxY : c27._aabbMaxY; node._aabbMaxZ = c17._aabbMaxZ > c27._aabbMaxZ ? c17._aabbMaxZ : c27._aabbMaxZ; var h17 = node._children[0]._height; var h27 = node._children[1]._height; node._height = (h17 > h27 ? h17 : h27) + 1; } if(p1 != null) { p1._children[nodeIndex] = r; r._parent = p1; r._childIndex = nodeIndex; } else { _this._root = r; r._parent = null; } node = r; } else { node = node; } } } var h18 = node._children[0]._height; var h28 = node._children[1]._height; node._height = (h18 > h28 ? h18 : h28) + 1; var c18 = node._children[0]; var c28 = node._children[1]; node._aabbMinX = c18._aabbMinX < c28._aabbMinX ? c18._aabbMinX : c28._aabbMinX; node._aabbMinY = c18._aabbMinY < c28._aabbMinY ? c18._aabbMinY : c28._aabbMinY; node._aabbMinZ = c18._aabbMinZ < c28._aabbMinZ ? c18._aabbMinZ : c28._aabbMinZ; node._aabbMaxX = c18._aabbMaxX > c28._aabbMaxX ? c18._aabbMaxX : c28._aabbMaxX; node._aabbMaxY = c18._aabbMaxY > c28._aabbMaxY ? c18._aabbMaxY : c28._aabbMaxY; node._aabbMaxZ = c18._aabbMaxZ > c28._aabbMaxZ ? c18._aabbMaxZ : c28._aabbMaxZ; node = node._parent; } } if(!p._moved) { p._moved = true; if(this.movedProxies.length == this.numMovedProxies) { var newLength = this.numMovedProxies << 1; var this1 = new Array(newLength); var newArray = this1; var _g = 0; var _g1 = this.numMovedProxies; while(_g < _g1) { var i = _g++; newArray[i] = this.movedProxies[i]; this.movedProxies[i] = null; } this.movedProxies = newArray; } this.movedProxies[this.numMovedProxies++] = p; } return p; } destroyProxy(proxy) { this._numProxies--; var prev = proxy._prev; var next = proxy._next; if(prev != null) { prev._next = next; } if(next != null) { next._prev = prev; } if(proxy == this._proxyList) { this._proxyList = this._proxyList._next; } if(proxy == this._proxyListLast) { this._proxyListLast = this._proxyListLast._prev; } proxy._next = null; proxy._prev = null; var bvhProxy = proxy; var _this = this._tree; var leaf = bvhProxy._leaf; _this._numLeaves--; var prev1 = leaf._prevLeaf; var next1 = leaf._nextLeaf; if(prev1 != null) { prev1._nextLeaf = next1; } if(next1 != null) { next1._prevLeaf = prev1; } if(leaf == _this.leafList) { _this.leafList = _this.leafList._nextLeaf; } if(leaf == _this.leafListLast) { _this.leafListLast = _this.leafListLast._prevLeaf; } leaf._nextLeaf = null; leaf._prevLeaf = null; if(_this._root == leaf) { _this._root = null; } else { var parent = leaf._parent; var sibling = parent._children[leaf._childIndex ^ 1]; var grandParent = parent._parent; if(grandParent == null) { sibling._parent = null; sibling._childIndex = 0; _this._root = sibling; parent._next = null; parent._childIndex = 0; parent._children[0] = null; parent._children[1] = null; parent._childIndex = 0; parent._parent = null; parent._height = 0; parent._proxy = null; parent._next = _this._nodePool; _this._nodePool = parent; } else { sibling._parent = grandParent; var index = parent._childIndex; grandParent._children[index] = sibling; sibling._parent = grandParent; sibling._childIndex = index; parent._next = null; parent._childIndex = 0; parent._children[0] = null; parent._children[1] = null; parent._childIndex = 0; parent._parent = null; parent._height = 0; parent._proxy = null; parent._next = _this._nodePool; _this._nodePool = parent; var node = grandParent; while(node != null) { if(_this._strategy._balancingEnabled) { var nh = node._height; if(nh < 2) { node = node; } else { var p = node._parent; var l = node._children[0]; var r = node._children[1]; var lh = l._height; var rh = r._height; var balance = lh - rh; var nodeIndex = node._childIndex; if(balance > 1) { var ll = l._children[0]; var lr = l._children[1]; var llh = ll._height; var lrh = lr._height; if(llh > lrh) { l._children[1] = node; node._parent = l; node._childIndex = 1; node._children[0] = lr; lr._parent = node; lr._childIndex = 0; var c1 = l._children[0]; var c2 = l._children[1]; l._aabbMinX = c1._aabbMinX < c2._aabbMinX ? c1._aabbMinX : c2._aabbMinX; l._aabbMinY = c1._aabbMinY < c2._aabbMinY ? c1._aabbMinY : c2._aabbMinY; l._aabbMinZ = c1._aabbMinZ < c2._aabbMinZ ? c1._aabbMinZ : c2._aabbMinZ; l._aabbMaxX = c1._aabbMaxX > c2._aabbMaxX ? c1._aabbMaxX : c2._aabbMaxX; l._aabbMaxY = c1._aabbMaxY > c2._aabbMaxY ? c1._aabbMaxY : c2._aabbMaxY; l._aabbMaxZ = c1._aabbMaxZ > c2._aabbMaxZ ? c1._aabbMaxZ : c2._aabbMaxZ; var h1 = l._children[0]._height; var h2 = l._children[1]._height; l._height = (h1 > h2 ? h1 : h2) + 1; var c11 = node._children[0]; var c21 = node._children[1]; node._aabbMinX = c11._aabbMinX < c21._aabbMinX ? c11._aabbMinX : c21._aabbMinX; node._aabbMinY = c11._aabbMinY < c21._aabbMinY ? c11._aabbMinY : c21._aabbMinY; node._aabbMinZ = c11._aabbMinZ < c21._aabbMinZ ? c11._aabbMinZ : c21._aabbMinZ; node._aabbMaxX = c11._aabbMaxX > c21._aabbMaxX ? c11._aabbMaxX : c21._aabbMaxX; node._aabbMaxY = c11._aabbMaxY > c21._aabbMaxY ? c11._aabbMaxY : c21._aabbMaxY; node._aabbMaxZ = c11._aabbMaxZ > c21._aabbMaxZ ? c11._aabbMaxZ : c21._aabbMaxZ; var h11 = node._children[0]._height; var h21 = node._children[1]._height; node._height = (h11 > h21 ? h11 : h21) + 1; } else { l._children[0] = node; node._parent = l; node._childIndex = 0; node._children[0] = ll; ll._parent = node; ll._childIndex = 0; var c12 = l._children[0]; var c22 = l._children[1]; l._aabbMinX = c12._aabbMinX < c22._aabbMinX ? c12._aabbMinX : c22._aabbMinX; l._aabbMinY = c12._aabbMinY < c22._aabbMinY ? c12._aabbMinY : c22._aabbMinY; l._aabbMinZ = c12._aabbMinZ < c22._aabbMinZ ? c12._aabbMinZ : c22._aabbMinZ; l._aabbMaxX = c12._aabbMaxX > c22._aabbMaxX ? c12._aabbMaxX : c22._aabbMaxX; l._aabbMaxY = c12._aabbMaxY > c22._aabbMaxY ? c12._aabbMaxY : c22._aabbMaxY; l._aabbMaxZ = c12._aabbMaxZ > c22._aabbMaxZ ? c12._aabbMaxZ : c22._aabbMaxZ; var h12 = l._children[0]._height; var h22 = l._children[1]._height; l._height = (h12 > h22 ? h12 : h22) + 1; var c13 = node._children[0]; var c23 = node._children[1]; node._aabbMinX = c13._aabbMinX < c23._aabbMinX ? c13._aabbMinX : c23._aabbMinX; node._aabbMinY = c13._aabbMinY < c23._aabbMinY ? c13._aabbMinY : c23._aabbMinY; node._aabbMinZ = c13._aabbMinZ < c23._aabbMinZ ? c13._aabbMinZ : c23._aabbMinZ; node._aabbMaxX = c13._aabbMaxX > c23._aabbMaxX ? c13._aabbMaxX : c23._aabbMaxX; node._aabbMaxY = c13._aabbMaxY > c23._aabbMaxY ? c13._aabbMaxY : c23._aabbMaxY; node._aabbMaxZ = c13._aabbMaxZ > c23._aabbMaxZ ? c13._aabbMaxZ : c23._aabbMaxZ; var h13 = node._children[0]._height; var h23 = node._children[1]._height; node._height = (h13 > h23 ? h13 : h23) + 1; } if(p != null) { p._children[nodeIndex] = l; l._parent = p; l._childIndex = nodeIndex; } else { _this._root = l; l._parent = null; } node = l; } else if(balance < -1) { var rl = r._children[0]; var rr = r._children[1]; var rlh = rl._height; var rrh = rr._height; if(rlh > rrh) { r._children[1] = node; node._parent = r; node._childIndex = 1; node._children[1] = rr; rr._parent = node; rr._childIndex = 1; var c14 = r._children[0]; var c24 = r._children[1]; r._aabbMinX = c14._aabbMinX < c24._aabbMinX ? c14._aabbMinX : c24._aabbMinX; r._aabbMinY = c14._aabbMinY < c24._aabbMinY ? c14._aabbMinY : c24._aabbMinY; r._aabbMinZ = c14._aabbMinZ < c24._aabbMinZ ? c14._aabbMinZ : c24._aabbMinZ; r._aabbMaxX = c14._aabbMaxX > c24._aabbMaxX ? c14._aabbMaxX : c24._aabbMaxX; r._aabbMaxY = c14._aabbMaxY > c24._aabbMaxY ? c14._aabbMaxY : c24._aabbMaxY; r._aabbMaxZ = c14._aabbMaxZ > c24._aabbMaxZ ? c14._aabbMaxZ : c24._aabbMaxZ; var h14 = r._children[0]._height; var h24 = r._children[1]._height; r._height = (h14 > h24 ? h14 : h24) + 1; var c15 = node._children[0]; var c25 = node._children[1]; node._aabbMinX = c15._aabbMinX < c25._aabbMinX ? c15._aabbMinX : c25._aabbMinX; node._aabbMinY = c15._aabbMinY < c25._aabbMinY ? c15._aabbMinY : c25._aabbMinY; node._aabbMinZ = c15._aabbMinZ < c25._aabbMinZ ? c15._aabbMinZ : c25._aabbMinZ; node._aabbMaxX = c15._aabbMaxX > c25._aabbMaxX ? c15._aabbMaxX : c25._aabbMaxX; node._aabbMaxY = c15._aabbMaxY > c25._aabbMaxY ? c15._aabbMaxY : c25._aabbMaxY; node._aabbMaxZ = c15._aabbMaxZ > c25._aabbMaxZ ? c15._aabbMaxZ : c25._aabbMaxZ; var h15 = node._children[0]._height; var h25 = node._children[1]._height; node._height = (h15 > h25 ? h15 : h25) + 1; } else { r._children[0] = node; node._parent = r; node._childIndex = 0; node._children[1] = rl; rl._parent = node; rl._childIndex = 1; var c16 = r._children[0]; var c26 = r._children[1]; r._aabbMinX = c16._aabbMinX < c26._aabbMinX ? c16._aabbMinX : c26._aabbMinX; r._aabbMinY = c16._aabbMinY < c26._aabbMinY ? c16._aabbMinY : c26._aabbMinY; r._aabbMinZ = c16._aabbMinZ < c26._aabbMinZ ? c16._aabbMinZ : c26._aabbMinZ; r._aabbMaxX = c16._aabbMaxX > c26._aabbMaxX ? c16._aabbMaxX : c26._aabbMaxX; r._aabbMaxY = c16._aabbMaxY > c26._aabbMaxY ? c16._aabbMaxY : c26._aabbMaxY; r._aabbMaxZ = c16._aabbMaxZ > c26._aabbMaxZ ? c16._aabbMaxZ : c26._aabbMaxZ; var h16 = r._children[0]._height; var h26 = r._children[1]._height; r._height = (h16 > h26 ? h16 : h26) + 1; var c17 = node._children[0]; var c27 = node._children[1]; node._aabbMinX = c17._aabbMinX < c27._aabbMinX ? c17._aabbMinX : c27._aabbMinX; node._aabbMinY = c17._aabbMinY < c27._aabbMinY ? c17._aabbMinY : c27._aabbMinY; node._aabbMinZ = c17._aabbMinZ < c27._aabbMinZ ? c17._aabbMinZ : c27._aabbMinZ; node._aabbMaxX = c17._aabbMaxX > c27._aabbMaxX ? c17._aabbMaxX : c27._aabbMaxX; node._aabbMaxY = c17._aabbMaxY > c27._aabbMaxY ? c17._aabbMaxY : c27._aabbMaxY; node._aabbMaxZ = c17._aabbMaxZ > c27._aabbMaxZ ? c17._aabbMaxZ : c27._aabbMaxZ; var h17 = node._children[0]._height; var h27 = node._children[1]._height; node._height = (h17 > h27 ? h17 : h27) + 1; } if(p != null) { p._children[nodeIndex] = r; r._parent = p; r._childIndex = nodeIndex; } else { _this._root = r; r._parent = null; } node = r; } else { node = node; } } } var h18 = node._children[0]._height; var h28 = node._children[1]._height; node._height = (h18 > h28 ? h18 : h28) + 1; var c18 = node._children[0]; var c28 = node._children[1]; node._aabbMinX = c18._aabbMinX < c28._aabbMinX ? c18._aabbMinX : c28._aabbMinX; node._aabbMinY = c18._aabbMinY < c28._aabbMinY ? c18._aabbMinY : c28._aabbMinY; node._aabbMinZ = c18._aabbMinZ < c28._aabbMinZ ? c18._aabbMinZ : c28._aabbMinZ; node._aabbMaxX = c18._aabbMaxX > c28._aabbMaxX ? c18._aabbMaxX : c28._aabbMaxX; node._aabbMaxY = c18._aabbMaxY > c28._aabbMaxY ? c18._aabbMaxY : c28._aabbMaxY; node._aabbMaxZ = c18._aabbMaxZ > c28._aabbMaxZ ? c18._aabbMaxZ : c28._aabbMaxZ; node = node._parent; } } } bvhProxy._leaf = null; leaf._next = null; leaf._childIndex = 0; leaf._children[0] = null; leaf._children[1] = null; leaf._childIndex = 0; leaf._parent = null; leaf._height = 0; leaf._proxy = null; leaf._next = _this._nodePool; _this._nodePool = leaf; bvhProxy.userData = null; bvhProxy._next = null; bvhProxy._prev = null; if(bvhProxy._moved) { bvhProxy._moved = false; } } moveProxy(proxy,aabb,displacement) { var p = proxy; if(p._aabbMinX <= aabb._minX && p._aabbMaxX >= aabb._maxX && p._aabbMinY <= aabb._minY && p._aabbMaxY >= aabb._maxY && p._aabbMinZ <= aabb._minZ && p._aabbMaxZ >= aabb._maxZ) { return; } p._aabbMinX = aabb._minX; p._aabbMinY = aabb._minY; p._aabbMinZ = aabb._minZ; p._aabbMaxX = aabb._maxX; p._aabbMaxY = aabb._maxY; p._aabbMaxZ = aabb._maxZ; var padding = oimo.common.Setting.bvhProxyPadding; var paddingVec; var paddingVecX; var paddingVecY; var paddingVecZ; paddingVecX = padding; paddingVecY = padding; paddingVecZ = padding; p._aabbMinX -= paddingVecX; p._aabbMinY -= paddingVecY; p._aabbMinZ -= paddingVecZ; p._aabbMaxX += paddingVecX; p._aabbMaxY += paddingVecY; p._aabbMaxZ += paddingVecZ; if(displacement != null) { var d; var dX; var dY; var dZ; var zero; var zeroX; var zeroY; var zeroZ; var addToMin; var addToMinX; var addToMinY; var addToMinZ; var addToMax; var addToMaxX; var addToMaxY; var addToMaxZ; zeroX = 0; zeroY = 0; zeroZ = 0; var v = displacement; dX = v.x; dY = v.y; dZ = v.z; addToMinX = zeroX < dX ? zeroX : dX; addToMinY = zeroY < dY ? zeroY : dY; addToMinZ = zeroZ < dZ ? zeroZ : dZ; addToMaxX = zeroX > dX ? zeroX : dX; addToMaxY = zeroY > dY ? zeroY : dY; addToMaxZ = zeroZ > dZ ? zeroZ : dZ; p._aabbMinX += addToMinX; p._aabbMinY += addToMinY; p._aabbMinZ += addToMinZ; p._aabbMaxX += addToMaxX; p._aabbMaxY += addToMaxY; p._aabbMaxZ += addToMaxZ; } if(!p._moved) { p._moved = true; if(this.movedProxies.length == this.numMovedProxies) { var newLength = this.numMovedProxies << 1; var this1 = new Array(newLength); var newArray = this1; var _g = 0; var _g1 = this.numMovedProxies; while(_g < _g1) { var i = _g++; newArray[i] = this.movedProxies[i]; this.movedProxies[i] = null; } this.movedProxies = newArray; } this.movedProxies[this.numMovedProxies++] = p; } } collectPairs() { var p = this._proxyPairList; if(p != null) { while(true) { p._p1 = null; p._p2 = null; p = p._next; if(!(p != null)) { break; } } this._proxyPairList._next = this._proxyPairPool; this._proxyPairPool = this._proxyPairList; this._proxyPairList = null; } this._testCount = 0; if(this._numProxies < 2) { return; } var topDown = false; if(topDown) { while(this.numMovedProxies > 0) this.movedProxies[--this.numMovedProxies] = null; var _this = this._tree; if(_this._root != null) { if(_this._root != null) { _this.decomposeRecursive(_this._root); _this._root = null; } while(_this.tmp.length < _this._numLeaves) { var newLength = _this.tmp.length << 1; var this1 = new Array(newLength); var newArray = this1; var _g = 0; var _g1 = _this.tmp.length; while(_g < _g1) { var i = _g++; newArray[i] = _this.tmp[i]; _this.tmp[i] = null; } _this.tmp = newArray; } var idx = 0; var leaf = _this.leafList; while(leaf != null) { var n = leaf._nextLeaf; _this.tmp[idx] = leaf; ++idx; leaf = n; } _this._root = _this.buildTopDownRecursive(_this.tmp,0,_this._numLeaves); } this.collide(this._tree._root,this._tree._root); return; } var incrementalCollision = this.numMovedProxies / this._numProxies < oimo.common.Setting.bvhIncrementalCollisionThreshold; var _g2 = 0; var _g11 = this.numMovedProxies; while(_g2 < _g11) { var i1 = _g2++; var p1 = this.movedProxies[i1]; if(p1._moved) { var _this1 = this._tree; var leaf1 = p1._leaf; _this1._numLeaves--; var prev = leaf1._prevLeaf; var next = leaf1._nextLeaf; if(prev != null) { prev._nextLeaf = next; } if(next != null) { next._prevLeaf = prev; } if(leaf1 == _this1.leafList) { _this1.leafList = _this1.leafList._nextLeaf; } if(leaf1 == _this1.leafListLast) { _this1.leafListLast = _this1.leafListLast._prevLeaf; } leaf1._nextLeaf = null; leaf1._prevLeaf = null; if(_this1._root == leaf1) { _this1._root = null; } else { var parent = leaf1._parent; var sibling = parent._children[leaf1._childIndex ^ 1]; var grandParent = parent._parent; if(grandParent == null) { sibling._parent = null; sibling._childIndex = 0; _this1._root = sibling; parent._next = null; parent._childIndex = 0; parent._children[0] = null; parent._children[1] = null; parent._childIndex = 0; parent._parent = null; parent._height = 0; parent._proxy = null; parent._next = _this1._nodePool; _this1._nodePool = parent; } else { sibling._parent = grandParent; var index = parent._childIndex; grandParent._children[index] = sibling; sibling._parent = grandParent; sibling._childIndex = index; parent._next = null; parent._childIndex = 0; parent._children[0] = null; parent._children[1] = null; parent._childIndex = 0; parent._parent = null; parent._height = 0; parent._proxy = null; parent._next = _this1._nodePool; _this1._nodePool = parent; var node = grandParent; while(node != null) { if(_this1._strategy._balancingEnabled) { var nh = node._height; if(nh < 2) { node = node; } else { var p2 = node._parent; var l = node._children[0]; var r = node._children[1]; var lh = l._height; var rh = r._height; var balance = lh - rh; var nodeIndex = node._childIndex; if(balance > 1) { var ll = l._children[0]; var lr = l._children[1]; var llh = ll._height; var lrh = lr._height; if(llh > lrh) { l._children[1] = node; node._parent = l; node._childIndex = 1; node._children[0] = lr; lr._parent = node; lr._childIndex = 0; var c1 = l._children[0]; var c2 = l._children[1]; l._aabbMinX = c1._aabbMinX < c2._aabbMinX ? c1._aabbMinX : c2._aabbMinX; l._aabbMinY = c1._aabbMinY < c2._aabbMinY ? c1._aabbMinY : c2._aabbMinY; l._aabbMinZ = c1._aabbMinZ < c2._aabbMinZ ? c1._aabbMinZ : c2._aabbMinZ; l._aabbMaxX = c1._aabbMaxX > c2._aabbMaxX ? c1._aabbMaxX : c2._aabbMaxX; l._aabbMaxY = c1._aabbMaxY > c2._aabbMaxY ? c1._aabbMaxY : c2._aabbMaxY; l._aabbMaxZ = c1._aabbMaxZ > c2._aabbMaxZ ? c1._aabbMaxZ : c2._aabbMaxZ; var h1 = l._children[0]._height; var h2 = l._children[1]._height; l._height = (h1 > h2 ? h1 : h2) + 1; var c11 = node._children[0]; var c21 = node._children[1]; node._aabbMinX = c11._aabbMinX < c21._aabbMinX ? c11._aabbMinX : c21._aabbMinX; node._aabbMinY = c11._aabbMinY < c21._aabbMinY ? c11._aabbMinY : c21._aabbMinY; node._aabbMinZ = c11._aabbMinZ < c21._aabbMinZ ? c11._aabbMinZ : c21._aabbMinZ; node._aabbMaxX = c11._aabbMaxX > c21._aabbMaxX ? c11._aabbMaxX : c21._aabbMaxX; node._aabbMaxY = c11._aabbMaxY > c21._aabbMaxY ? c11._aabbMaxY : c21._aabbMaxY; node._aabbMaxZ = c11._aabbMaxZ > c21._aabbMaxZ ? c11._aabbMaxZ : c21._aabbMaxZ; var h11 = node._children[0]._height; var h21 = node._children[1]._height; node._height = (h11 > h21 ? h11 : h21) + 1; } else { l._children[0] = node; node._parent = l; node._childIndex = 0; node._children[0] = ll; ll._parent = node; ll._childIndex = 0; var c12 = l._children[0]; var c22 = l._children[1]; l._aabbMinX = c12._aabbMinX < c22._aabbMinX ? c12._aabbMinX : c22._aabbMinX; l._aabbMinY = c12._aabbMinY < c22._aabbMinY ? c12._aabbMinY : c22._aabbMinY; l._aabbMinZ = c12._aabbMinZ < c22._aabbMinZ ? c12._aabbMinZ : c22._aabbMinZ; l._aabbMaxX = c12._aabbMaxX > c22._aabbMaxX ? c12._aabbMaxX : c22._aabbMaxX; l._aabbMaxY = c12._aabbMaxY > c22._aabbMaxY ? c12._aabbMaxY : c22._aabbMaxY; l._aabbMaxZ = c12._aabbMaxZ > c22._aabbMaxZ ? c12._aabbMaxZ : c22._aabbMaxZ; var h12 = l._children[0]._height; var h22 = l._children[1]._height; l._height = (h12 > h22 ? h12 : h22) + 1; var c13 = node._children[0]; var c23 = node._children[1]; node._aabbMinX = c13._aabbMinX < c23._aabbMinX ? c13._aabbMinX : c23._aabbMinX; node._aabbMinY = c13._aabbMinY < c23._aabbMinY ? c13._aabbMinY : c23._aabbMinY; node._aabbMinZ = c13._aabbMinZ < c23._aabbMinZ ? c13._aabbMinZ : c23._aabbMinZ; node._aabbMaxX = c13._aabbMaxX > c23._aabbMaxX ? c13._aabbMaxX : c23._aabbMaxX; node._aabbMaxY = c13._aabbMaxY > c23._aabbMaxY ? c13._aabbMaxY : c23._aabbMaxY; node._aabbMaxZ = c13._aabbMaxZ > c23._aabbMaxZ ? c13._aabbMaxZ : c23._aabbMaxZ; var h13 = node._children[0]._height; var h23 = node._children[1]._height; node._height = (h13 > h23 ? h13 : h23) + 1; } if(p2 != null) { p2._children[nodeIndex] = l; l._parent = p2; l._childIndex = nodeIndex; } else { _this1._root = l; l._parent = null; } node = l; } else if(balance < -1) { var rl = r._children[0]; var rr = r._children[1]; var rlh = rl._height; var rrh = rr._height; if(rlh > rrh) { r._children[1] = node; node._parent = r; node._childIndex = 1; node._children[1] = rr; rr._parent = node; rr._childIndex = 1; var c14 = r._children[0]; var c24 = r._children[1]; r._aabbMinX = c14._aabbMinX < c24._aabbMinX ? c14._aabbMinX : c24._aabbMinX; r._aabbMinY = c14._aabbMinY < c24._aabbMinY ? c14._aabbMinY : c24._aabbMinY; r._aabbMinZ = c14._aabbMinZ < c24._aabbMinZ ? c14._aabbMinZ : c24._aabbMinZ; r._aabbMaxX = c14._aabbMaxX > c24._aabbMaxX ? c14._aabbMaxX : c24._aabbMaxX; r._aabbMaxY = c14._aabbMaxY > c24._aabbMaxY ? c14._aabbMaxY : c24._aabbMaxY; r._aabbMaxZ = c14._aabbMaxZ > c24._aabbMaxZ ? c14._aabbMaxZ : c24._aabbMaxZ; var h14 = r._children[0]._height; var h24 = r._children[1]._height; r._height = (h14 > h24 ? h14 : h24) + 1; var c15 = node._children[0]; var c25 = node._children[1]; node._aabbMinX = c15._aabbMinX < c25._aabbMinX ? c15._aabbMinX : c25._aabbMinX; node._aabbMinY = c15._aabbMinY < c25._aabbMinY ? c15._aabbMinY : c25._aabbMinY; node._aabbMinZ = c15._aabbMinZ < c25._aabbMinZ ? c15._aabbMinZ : c25._aabbMinZ; node._aabbMaxX = c15._aabbMaxX > c25._aabbMaxX ? c15._aabbMaxX : c25._aabbMaxX; node._aabbMaxY = c15._aabbMaxY > c25._aabbMaxY ? c15._aabbMaxY : c25._aabbMaxY; node._aabbMaxZ = c15._aabbMaxZ > c25._aabbMaxZ ? c15._aabbMaxZ : c25._aabbMaxZ; var h15 = node._children[0]._height; var h25 = node._children[1]._height; node._height = (h15 > h25 ? h15 : h25) + 1; } else { r._children[0] = node; node._parent = r; node._childIndex = 0; node._children[1] = rl; rl._parent = node; rl._childIndex = 1; var c16 = r._children[0]; var c26 = r._children[1]; r._aabbMinX = c16._aabbMinX < c26._aabbMinX ? c16._aabbMinX : c26._aabbMinX; r._aabbMinY = c16._aabbMinY < c26._aabbMinY ? c16._aabbMinY : c26._aabbMinY; r._aabbMinZ = c16._aabbMinZ < c26._aabbMinZ ? c16._aabbMinZ : c26._aabbMinZ; r._aabbMaxX = c16._aabbMaxX > c26._aabbMaxX ? c16._aabbMaxX : c26._aabbMaxX; r._aabbMaxY = c16._aabbMaxY > c26._aabbMaxY ? c16._aabbMaxY : c26._aabbMaxY; r._aabbMaxZ = c16._aabbMaxZ > c26._aabbMaxZ ? c16._aabbMaxZ : c26._aabbMaxZ; var h16 = r._children[0]._height; var h26 = r._children[1]._height; r._height = (h16 > h26 ? h16 : h26) + 1; var c17 = node._children[0]; var c27 = node._children[1]; node._aabbMinX = c17._aabbMinX < c27._aabbMinX ? c17._aabbMinX : c27._aabbMinX; node._aabbMinY = c17._aabbMinY < c27._aabbMinY ? c17._aabbMinY : c27._aabbMinY; node._aabbMinZ = c17._aabbMinZ < c27._aabbMinZ ? c17._aabbMinZ : c27._aabbMinZ; node._aabbMaxX = c17._aabbMaxX > c27._aabbMaxX ? c17._aabbMaxX : c27._aabbMaxX; node._aabbMaxY = c17._aabbMaxY > c27._aabbMaxY ? c17._aabbMaxY : c27._aabbMaxY; node._aabbMaxZ = c17._aabbMaxZ > c27._aabbMaxZ ? c17._aabbMaxZ : c27._aabbMaxZ; var h17 = node._children[0]._height; var h27 = node._children[1]._height; node._height = (h17 > h27 ? h17 : h27) + 1; } if(p2 != null) { p2._children[nodeIndex] = r; r._parent = p2; r._childIndex = nodeIndex; } else { _this1._root = r; r._parent = null; } node = r; } else { node = node; } } } var h18 = node._children[0]._height; var h28 = node._children[1]._height; node._height = (h18 > h28 ? h18 : h28) + 1; var c18 = node._children[0]; var c28 = node._children[1]; node._aabbMinX = c18._aabbMinX < c28._aabbMinX ? c18._aabbMinX : c28._aabbMinX; node._aabbMinY = c18._aabbMinY < c28._aabbMinY ? c18._aabbMinY : c28._aabbMinY; node._aabbMinZ = c18._aabbMinZ < c28._aabbMinZ ? c18._aabbMinZ : c28._aabbMinZ; node._aabbMaxX = c18._aabbMaxX > c28._aabbMaxX ? c18._aabbMaxX : c28._aabbMaxX; node._aabbMaxY = c18._aabbMaxY > c28._aabbMaxY ? c18._aabbMaxY : c28._aabbMaxY; node._aabbMaxZ = c18._aabbMaxZ > c28._aabbMaxZ ? c18._aabbMaxZ : c28._aabbMaxZ; node = node._parent; } } } p1._leaf = null; leaf1._next = null; leaf1._childIndex = 0; leaf1._children[0] = null; leaf1._children[1] = null; leaf1._childIndex = 0; leaf1._parent = null; leaf1._height = 0; leaf1._proxy = null; leaf1._next = _this1._nodePool; _this1._nodePool = leaf1; var _this2 = this._tree; var first = _this2._nodePool; if(first != null) { _this2._nodePool = first._next; first._next = null; } else { first = new oimo.collision.broadphase.bvh.BvhNode(); } var leaf2 = first; leaf2._proxy = p1; p1._leaf = leaf2; leaf2._aabbMinX = p1._aabbMinX; leaf2._aabbMinY = p1._aabbMinY; leaf2._aabbMinZ = p1._aabbMinZ; leaf2._aabbMaxX = p1._aabbMaxX; leaf2._aabbMaxY = p1._aabbMaxY; leaf2._aabbMaxZ = p1._aabbMaxZ; _this2._numLeaves++; if(_this2.leafList == null) { _this2.leafList = leaf2; _this2.leafListLast = leaf2; } else { _this2.leafListLast._nextLeaf = leaf2; leaf2._prevLeaf = _this2.leafListLast; _this2.leafListLast = leaf2; } if(_this2._root == null) { _this2._root = leaf2; } else { var sibling1 = _this2._root; while(sibling1._height > 0) { var nextStep = _this2._strategy._decideInsertion(sibling1,leaf2); if(nextStep == -1) { break; } else { sibling1 = sibling1._children[nextStep]; } } var parent1 = sibling1._parent; var first1 = _this2._nodePool; if(first1 != null) { _this2._nodePool = first1._next; first1._next = null; } else { first1 = new oimo.collision.broadphase.bvh.BvhNode(); } var node1 = first1; if(parent1 == null) { _this2._root = node1; } else { var index1 = sibling1._childIndex; parent1._children[index1] = node1; node1._parent = parent1; node1._childIndex = index1; } var index2 = sibling1._childIndex; node1._children[index2] = sibling1; sibling1._parent = node1; sibling1._childIndex = index2; var index3 = sibling1._childIndex ^ 1; node1._children[index3] = leaf2; leaf2._parent = node1; leaf2._childIndex = index3; while(node1 != null) { if(_this2._strategy._balancingEnabled) { var nh1 = node1._height; if(nh1 < 2) { node1 = node1; } else { var p3 = node1._parent; var l1 = node1._children[0]; var r1 = node1._children[1]; var lh1 = l1._height; var rh1 = r1._height; var balance1 = lh1 - rh1; var nodeIndex1 = node1._childIndex; if(balance1 > 1) { var ll1 = l1._children[0]; var lr1 = l1._children[1]; var llh1 = ll1._height; var lrh1 = lr1._height; if(llh1 > lrh1) { l1._children[1] = node1; node1._parent = l1; node1._childIndex = 1; node1._children[0] = lr1; lr1._parent = node1; lr1._childIndex = 0; var c19 = l1._children[0]; var c29 = l1._children[1]; l1._aabbMinX = c19._aabbMinX < c29._aabbMinX ? c19._aabbMinX : c29._aabbMinX; l1._aabbMinY = c19._aabbMinY < c29._aabbMinY ? c19._aabbMinY : c29._aabbMinY; l1._aabbMinZ = c19._aabbMinZ < c29._aabbMinZ ? c19._aabbMinZ : c29._aabbMinZ; l1._aabbMaxX = c19._aabbMaxX > c29._aabbMaxX ? c19._aabbMaxX : c29._aabbMaxX; l1._aabbMaxY = c19._aabbMaxY > c29._aabbMaxY ? c19._aabbMaxY : c29._aabbMaxY; l1._aabbMaxZ = c19._aabbMaxZ > c29._aabbMaxZ ? c19._aabbMaxZ : c29._aabbMaxZ; var h19 = l1._children[0]._height; var h29 = l1._children[1]._height; l1._height = (h19 > h29 ? h19 : h29) + 1; var c110 = node1._children[0]; var c210 = node1._children[1]; node1._aabbMinX = c110._aabbMinX < c210._aabbMinX ? c110._aabbMinX : c210._aabbMinX; node1._aabbMinY = c110._aabbMinY < c210._aabbMinY ? c110._aabbMinY : c210._aabbMinY; node1._aabbMinZ = c110._aabbMinZ < c210._aabbMinZ ? c110._aabbMinZ : c210._aabbMinZ; node1._aabbMaxX = c110._aabbMaxX > c210._aabbMaxX ? c110._aabbMaxX : c210._aabbMaxX; node1._aabbMaxY = c110._aabbMaxY > c210._aabbMaxY ? c110._aabbMaxY : c210._aabbMaxY; node1._aabbMaxZ = c110._aabbMaxZ > c210._aabbMaxZ ? c110._aabbMaxZ : c210._aabbMaxZ; var h110 = node1._children[0]._height; var h210 = node1._children[1]._height; node1._height = (h110 > h210 ? h110 : h210) + 1; } else { l1._children[0] = node1; node1._parent = l1; node1._childIndex = 0; node1._children[0] = ll1; ll1._parent = node1; ll1._childIndex = 0; var c111 = l1._children[0]; var c211 = l1._children[1]; l1._aabbMinX = c111._aabbMinX < c211._aabbMinX ? c111._aabbMinX : c211._aabbMinX; l1._aabbMinY = c111._aabbMinY < c211._aabbMinY ? c111._aabbMinY : c211._aabbMinY; l1._aabbMinZ = c111._aabbMinZ < c211._aabbMinZ ? c111._aabbMinZ : c211._aabbMinZ; l1._aabbMaxX = c111._aabbMaxX > c211._aabbMaxX ? c111._aabbMaxX : c211._aabbMaxX; l1._aabbMaxY = c111._aabbMaxY > c211._aabbMaxY ? c111._aabbMaxY : c211._aabbMaxY; l1._aabbMaxZ = c111._aabbMaxZ > c211._aabbMaxZ ? c111._aabbMaxZ : c211._aabbMaxZ; var h111 = l1._children[0]._height; var h211 = l1._children[1]._height; l1._height = (h111 > h211 ? h111 : h211) + 1; var c112 = node1._children[0]; var c212 = node1._children[1]; node1._aabbMinX = c112._aabbMinX < c212._aabbMinX ? c112._aabbMinX : c212._aabbMinX; node1._aabbMinY = c112._aabbMinY < c212._aabbMinY ? c112._aabbMinY : c212._aabbMinY; node1._aabbMinZ = c112._aabbMinZ < c212._aabbMinZ ? c112._aabbMinZ : c212._aabbMinZ; node1._aabbMaxX = c112._aabbMaxX > c212._aabbMaxX ? c112._aabbMaxX : c212._aabbMaxX; node1._aabbMaxY = c112._aabbMaxY > c212._aabbMaxY ? c112._aabbMaxY : c212._aabbMaxY; node1._aabbMaxZ = c112._aabbMaxZ > c212._aabbMaxZ ? c112._aabbMaxZ : c212._aabbMaxZ; var h112 = node1._children[0]._height; var h212 = node1._children[1]._height; node1._height = (h112 > h212 ? h112 : h212) + 1; } if(p3 != null) { p3._children[nodeIndex1] = l1; l1._parent = p3; l1._childIndex = nodeIndex1; } else { _this2._root = l1; l1._parent = null; } node1 = l1; } else if(balance1 < -1) { var rl1 = r1._children[0]; var rr1 = r1._children[1]; var rlh1 = rl1._height; var rrh1 = rr1._height; if(rlh1 > rrh1) { r1._children[1] = node1; node1._parent = r1; node1._childIndex = 1; node1._children[1] = rr1; rr1._parent = node1; rr1._childIndex = 1; var c113 = r1._children[0]; var c213 = r1._children[1]; r1._aabbMinX = c113._aabbMinX < c213._aabbMinX ? c113._aabbMinX : c213._aabbMinX; r1._aabbMinY = c113._aabbMinY < c213._aabbMinY ? c113._aabbMinY : c213._aabbMinY; r1._aabbMinZ = c113._aabbMinZ < c213._aabbMinZ ? c113._aabbMinZ : c213._aabbMinZ; r1._aabbMaxX = c113._aabbMaxX > c213._aabbMaxX ? c113._aabbMaxX : c213._aabbMaxX; r1._aabbMaxY = c113._aabbMaxY > c213._aabbMaxY ? c113._aabbMaxY : c213._aabbMaxY; r1._aabbMaxZ = c113._aabbMaxZ > c213._aabbMaxZ ? c113._aabbMaxZ : c213._aabbMaxZ; var h113 = r1._children[0]._height; var h213 = r1._children[1]._height; r1._height = (h113 > h213 ? h113 : h213) + 1; var c114 = node1._children[0]; var c214 = node1._children[1]; node1._aabbMinX = c114._aabbMinX < c214._aabbMinX ? c114._aabbMinX : c214._aabbMinX; node1._aabbMinY = c114._aabbMinY < c214._aabbMinY ? c114._aabbMinY : c214._aabbMinY; node1._aabbMinZ = c114._aabbMinZ < c214._aabbMinZ ? c114._aabbMinZ : c214._aabbMinZ; node1._aabbMaxX = c114._aabbMaxX > c214._aabbMaxX ? c114._aabbMaxX : c214._aabbMaxX; node1._aabbMaxY = c114._aabbMaxY > c214._aabbMaxY ? c114._aabbMaxY : c214._aabbMaxY; node1._aabbMaxZ = c114._aabbMaxZ > c214._aabbMaxZ ? c114._aabbMaxZ : c214._aabbMaxZ; var h114 = node1._children[0]._height; var h214 = node1._children[1]._height; node1._height = (h114 > h214 ? h114 : h214) + 1; } else { r1._children[0] = node1; node1._parent = r1; node1._childIndex = 0; node1._children[1] = rl1; rl1._parent = node1; rl1._childIndex = 1; var c115 = r1._children[0]; var c215 = r1._children[1]; r1._aabbMinX = c115._aabbMinX < c215._aabbMinX ? c115._aabbMinX : c215._aabbMinX; r1._aabbMinY = c115._aabbMinY < c215._aabbMinY ? c115._aabbMinY : c215._aabbMinY; r1._aabbMinZ = c115._aabbMinZ < c215._aabbMinZ ? c115._aabbMinZ : c215._aabbMinZ; r1._aabbMaxX = c115._aabbMaxX > c215._aabbMaxX ? c115._aabbMaxX : c215._aabbMaxX; r1._aabbMaxY = c115._aabbMaxY > c215._aabbMaxY ? c115._aabbMaxY : c215._aabbMaxY; r1._aabbMaxZ = c115._aabbMaxZ > c215._aabbMaxZ ? c115._aabbMaxZ : c215._aabbMaxZ; var h115 = r1._children[0]._height; var h215 = r1._children[1]._height; r1._height = (h115 > h215 ? h115 : h215) + 1; var c116 = node1._children[0]; var c216 = node1._children[1]; node1._aabbMinX = c116._aabbMinX < c216._aabbMinX ? c116._aabbMinX : c216._aabbMinX; node1._aabbMinY = c116._aabbMinY < c216._aabbMinY ? c116._aabbMinY : c216._aabbMinY; node1._aabbMinZ = c116._aabbMinZ < c216._aabbMinZ ? c116._aabbMinZ : c216._aabbMinZ; node1._aabbMaxX = c116._aabbMaxX > c216._aabbMaxX ? c116._aabbMaxX : c216._aabbMaxX; node1._aabbMaxY = c116._aabbMaxY > c216._aabbMaxY ? c116._aabbMaxY : c216._aabbMaxY; node1._aabbMaxZ = c116._aabbMaxZ > c216._aabbMaxZ ? c116._aabbMaxZ : c216._aabbMaxZ; var h116 = node1._children[0]._height; var h216 = node1._children[1]._height; node1._height = (h116 > h216 ? h116 : h216) + 1; } if(p3 != null) { p3._children[nodeIndex1] = r1; r1._parent = p3; r1._childIndex = nodeIndex1; } else { _this2._root = r1; r1._parent = null; } node1 = r1; } else { node1 = node1; } } } var h117 = node1._children[0]._height; var h217 = node1._children[1]._height; node1._height = (h117 > h217 ? h117 : h217) + 1; var c117 = node1._children[0]; var c217 = node1._children[1]; node1._aabbMinX = c117._aabbMinX < c217._aabbMinX ? c117._aabbMinX : c217._aabbMinX; node1._aabbMinY = c117._aabbMinY < c217._aabbMinY ? c117._aabbMinY : c217._aabbMinY; node1._aabbMinZ = c117._aabbMinZ < c217._aabbMinZ ? c117._aabbMinZ : c217._aabbMinZ; node1._aabbMaxX = c117._aabbMaxX > c217._aabbMaxX ? c117._aabbMaxX : c217._aabbMaxX; node1._aabbMaxY = c117._aabbMaxY > c217._aabbMaxY ? c117._aabbMaxY : c217._aabbMaxY; node1._aabbMaxZ = c117._aabbMaxZ > c217._aabbMaxZ ? c117._aabbMaxZ : c217._aabbMaxZ; node1 = node1._parent; } } if(incrementalCollision) { this.collide(this._tree._root,p1._leaf); } p1._moved = false; } this.movedProxies[i1] = null; } if(!incrementalCollision) { this.collide(this._tree._root,this._tree._root); } this.numMovedProxies = 0; } rayCast(begin,end,callback) { if(this._tree._root == null) { return; } var p1; var p1X; var p1Y; var p1Z; var p2; var p2X; var p2Y; var p2Z; var v = begin; p1X = v.x; p1Y = v.y; p1Z = v.z; var v1 = end; p2X = v1.x; p2Y = v1.y; p2Z = v1.z; this.rayCastRecursive(this._tree._root,p1X,p1Y,p1Z,p2X,p2Y,p2Z,callback); } convexCast(convex,begin,translation,callback) { if(this._tree._root == null) { return; } this.convexCastRecursive(this._tree._root,convex,begin,translation,callback); } aabbTest(aabb,callback) { if(this._tree._root == null) { return; } this.aabbTestRecursive(this._tree._root,aabb,callback); } getTreeBalance() { return this._tree._getBalance(); } } oimo.collision.broadphase.bvh.BvhInsertionStrategy = class oimo_collision_broadphase_bvh_BvhInsertionStrategy { } oimo.collision.broadphase.bvh.BvhNode = class oimo_collision_broadphase_bvh_BvhNode { constructor() { this._next = null; this._prevLeaf = null; this._nextLeaf = null; var this1 = new Array(2); this._children = this1; this._childIndex = 0; this._parent = null; this._height = 0; this._proxy = null; this._aabbMinX = 0; this._aabbMinY = 0; this._aabbMinZ = 0; this._aabbMaxX = 0; this._aabbMaxY = 0; this._aabbMaxZ = 0; } } oimo.collision.broadphase.bvh.BvhProxy = class oimo_collision_broadphase_bvh_BvhProxy extends oimo.collision.broadphase.Proxy { constructor(userData,id) { super(userData,id); this._leaf = null; this._moved = false; } } oimo.collision.broadphase.bvh.BvhStrategy = class oimo_collision_broadphase_bvh_BvhStrategy { constructor() { this._insertionStrategy = 0; this._balancingEnabled = false; } _decideInsertion(currentNode,leaf) { switch(this._insertionStrategy) { case 0: var center; var centerX; var centerY; var centerZ; centerX = leaf._aabbMinX + leaf._aabbMaxX; centerY = leaf._aabbMinY + leaf._aabbMaxY; centerZ = leaf._aabbMinZ + leaf._aabbMaxZ; var c1 = currentNode._children[0]; var c2 = currentNode._children[1]; var diff1; var diff1X; var diff1Y; var diff1Z; var diff2; var diff2X; var diff2Y; var diff2Z; diff1X = c1._aabbMinX + c1._aabbMaxX; diff1Y = c1._aabbMinY + c1._aabbMaxY; diff1Z = c1._aabbMinZ + c1._aabbMaxZ; diff2X = c2._aabbMinX + c2._aabbMaxX; diff2Y = c2._aabbMinY + c2._aabbMaxY; diff2Z = c2._aabbMinZ + c2._aabbMaxZ; diff1X -= centerX; diff1Y -= centerY; diff1Z -= centerZ; diff2X -= centerX; diff2Y -= centerY; diff2Z -= centerZ; var dist1 = diff1X * diff1X + diff1Y * diff1Y + diff1Z * diff1Z; var dist2 = diff2X * diff2X + diff2Y * diff2Y + diff2Z * diff2Z; if(dist1 < dist2) { return 0; } else { return 1; } break; case 1: var c11 = currentNode._children[0]; var c21 = currentNode._children[1]; var ex = currentNode._aabbMaxX - currentNode._aabbMinX; var ey = currentNode._aabbMaxY - currentNode._aabbMinY; var ez = currentNode._aabbMaxZ - currentNode._aabbMinZ; var oldArea = (ex * (ey + ez) + ey * ez) * 2; var combinedMin; var combinedMinX; var combinedMinY; var combinedMinZ; var combinedMax; var combinedMaxX; var combinedMaxY; var combinedMaxZ; combinedMinX = currentNode._aabbMinX < leaf._aabbMinX ? currentNode._aabbMinX : leaf._aabbMinX; combinedMinY = currentNode._aabbMinY < leaf._aabbMinY ? currentNode._aabbMinY : leaf._aabbMinY; combinedMinZ = currentNode._aabbMinZ < leaf._aabbMinZ ? currentNode._aabbMinZ : leaf._aabbMinZ; combinedMaxX = currentNode._aabbMaxX > leaf._aabbMaxX ? currentNode._aabbMaxX : leaf._aabbMaxX; combinedMaxY = currentNode._aabbMaxY > leaf._aabbMaxY ? currentNode._aabbMaxY : leaf._aabbMaxY; combinedMaxZ = currentNode._aabbMaxZ > leaf._aabbMaxZ ? currentNode._aabbMaxZ : leaf._aabbMaxZ; var ex1 = combinedMaxX - combinedMinX; var ey1 = combinedMaxY - combinedMinY; var ez1 = combinedMaxZ - combinedMinZ; var newArea = (ex1 * (ey1 + ez1) + ey1 * ez1) * 2; var creatingCost = newArea * 2; var incrementalCost = (newArea - oldArea) * 2; var descendingCost1 = incrementalCost; combinedMinX = c11._aabbMinX < leaf._aabbMinX ? c11._aabbMinX : leaf._aabbMinX; combinedMinY = c11._aabbMinY < leaf._aabbMinY ? c11._aabbMinY : leaf._aabbMinY; combinedMinZ = c11._aabbMinZ < leaf._aabbMinZ ? c11._aabbMinZ : leaf._aabbMinZ; combinedMaxX = c11._aabbMaxX > leaf._aabbMaxX ? c11._aabbMaxX : leaf._aabbMaxX; combinedMaxY = c11._aabbMaxY > leaf._aabbMaxY ? c11._aabbMaxY : leaf._aabbMaxY; combinedMaxZ = c11._aabbMaxZ > leaf._aabbMaxZ ? c11._aabbMaxZ : leaf._aabbMaxZ; if(c11._height == 0) { var ex2 = combinedMaxX - combinedMinX; var ey2 = combinedMaxY - combinedMinY; var ez2 = combinedMaxZ - combinedMinZ; descendingCost1 += (ex2 * (ey2 + ez2) + ey2 * ez2) * 2; } else { var ex3 = combinedMaxX - combinedMinX; var ey3 = combinedMaxY - combinedMinY; var ez3 = combinedMaxZ - combinedMinZ; var ex4 = c11._aabbMaxX - c11._aabbMinX; var ey4 = c11._aabbMaxY - c11._aabbMinY; var ez4 = c11._aabbMaxZ - c11._aabbMinZ; descendingCost1 += (ex3 * (ey3 + ez3) + ey3 * ez3) * 2 - (ex4 * (ey4 + ez4) + ey4 * ez4) * 2; } var descendingCost2 = incrementalCost; combinedMinX = c21._aabbMinX < leaf._aabbMinX ? c21._aabbMinX : leaf._aabbMinX; combinedMinY = c21._aabbMinY < leaf._aabbMinY ? c21._aabbMinY : leaf._aabbMinY; combinedMinZ = c21._aabbMinZ < leaf._aabbMinZ ? c21._aabbMinZ : leaf._aabbMinZ; combinedMaxX = c21._aabbMaxX > leaf._aabbMaxX ? c21._aabbMaxX : leaf._aabbMaxX; combinedMaxY = c21._aabbMaxY > leaf._aabbMaxY ? c21._aabbMaxY : leaf._aabbMaxY; combinedMaxZ = c21._aabbMaxZ > leaf._aabbMaxZ ? c21._aabbMaxZ : leaf._aabbMaxZ; if(c21._height == 0) { var ex5 = combinedMaxX - combinedMinX; var ey5 = combinedMaxY - combinedMinY; var ez5 = combinedMaxZ - combinedMinZ; descendingCost2 += (ex5 * (ey5 + ez5) + ey5 * ez5) * 2; } else { var ex6 = combinedMaxX - combinedMinX; var ey6 = combinedMaxY - combinedMinY; var ez6 = combinedMaxZ - combinedMinZ; var ex7 = c21._aabbMaxX - c21._aabbMinX; var ey7 = c21._aabbMaxY - c21._aabbMinY; var ez7 = c21._aabbMaxZ - c21._aabbMinZ; descendingCost2 += (ex6 * (ey6 + ez6) + ey6 * ez6) * 2 - (ex7 * (ey7 + ez7) + ey7 * ez7) * 2; } if(creatingCost < descendingCost1) { if(creatingCost < descendingCost2) { return -1; } else { return 1; } } else if(descendingCost1 < descendingCost2) { return 0; } else { return 1; } break; default: console.log("src/oimo/collision/broadphase/bvh/BvhStrategy.hx:37:","invalid BVH insertion strategy: " + this._insertionStrategy); return -1; } } _splitLeaves(leaves,from,until) { var invN = 1.0 / (until - from); var centerMean; var centerMeanX; var centerMeanY; var centerMeanZ; centerMeanX = 0; centerMeanY = 0; centerMeanZ = 0; var _g = from; var _g1 = until; while(_g < _g1) { var i = _g++; var leaf = leaves[i]; leaf._tmpX = leaf._aabbMaxX + leaf._aabbMinX; leaf._tmpY = leaf._aabbMaxY + leaf._aabbMinY; leaf._tmpZ = leaf._aabbMaxZ + leaf._aabbMinZ; centerMeanX += leaf._tmpX; centerMeanY += leaf._tmpY; centerMeanZ += leaf._tmpZ; } centerMeanX *= invN; centerMeanY *= invN; centerMeanZ *= invN; var variance; var varianceX; var varianceY; var varianceZ; varianceX = 0; varianceY = 0; varianceZ = 0; var _g2 = from; var _g3 = until; while(_g2 < _g3) { var i1 = _g2++; var leaf1 = leaves[i1]; var diff; var diffX; var diffY; var diffZ; diffX = leaf1._tmpX - centerMeanX; diffY = leaf1._tmpY - centerMeanY; diffZ = leaf1._tmpZ - centerMeanZ; diffX *= diffX; diffY *= diffY; diffZ *= diffZ; varianceX += diffX; varianceY += diffY; varianceZ += diffZ; } var varX = varianceX; var varY = varianceY; var varZ = varianceZ; var l = from; var r = until - 1; if(varX > varY) { if(varX > varZ) { var mean = centerMeanX; while(true) { while(true) { var leaf2 = leaves[l]; if(leaf2._tmpX <= mean) { break; } ++l; } while(true) { var leaf3 = leaves[r]; if(leaf3._tmpX >= mean) { break; } --r; } if(l >= r) { break; } var tmp = leaves[l]; leaves[l] = leaves[r]; leaves[r] = tmp; ++l; --r; } } else { var mean1 = centerMeanZ; while(true) { while(true) { var leaf4 = leaves[l]; if(leaf4._tmpZ <= mean1) { break; } ++l; } while(true) { var leaf5 = leaves[r]; if(leaf5._tmpZ >= mean1) { break; } --r; } if(l >= r) { break; } var tmp1 = leaves[l]; leaves[l] = leaves[r]; leaves[r] = tmp1; ++l; --r; } } } else if(varY > varZ) { var mean2 = centerMeanY; while(true) { while(true) { var leaf6 = leaves[l]; if(leaf6._tmpY <= mean2) { break; } ++l; } while(true) { var leaf7 = leaves[r]; if(leaf7._tmpY >= mean2) { break; } --r; } if(l >= r) { break; } var tmp2 = leaves[l]; leaves[l] = leaves[r]; leaves[r] = tmp2; ++l; --r; } } else { var mean3 = centerMeanZ; while(true) { while(true) { var leaf8 = leaves[l]; if(leaf8._tmpZ <= mean3) { break; } ++l; } while(true) { var leaf9 = leaves[r]; if(leaf9._tmpZ >= mean3) { break; } --r; } if(l >= r) { break; } var tmp3 = leaves[l]; leaves[l] = leaves[r]; leaves[r] = tmp3; ++l; --r; } } return l; } } oimo.collision.broadphase.bvh.BvhTree = class oimo_collision_broadphase_bvh_BvhTree { constructor() { this._root = null; this._numLeaves = 0; this._strategy = new oimo.collision.broadphase.bvh.BvhStrategy(); this._nodePool = null; this.leafList = null; this.leafListLast = null; var this1 = new Array(1024); this.tmp = this1; } _print(root,indent) { if(indent == null) { indent = ""; } if(root == null) { return; } if(root._height == 0) { console.log("src/oimo/collision/broadphase/bvh/BvhTree.hx:39:",indent + root._proxy._id); } else { this._print(root._children[0],indent + " "); var tmp; var size; var sizeX; var sizeY; var sizeZ; sizeX = root._aabbMaxX - root._aabbMinX; sizeY = root._aabbMaxY - root._aabbMinY; sizeZ = root._aabbMaxZ - root._aabbMinZ; var x = sizeX; var y = sizeY; var z = sizeZ; if(x * (y + z) + y * z > 0) { var size1; var sizeX1; var sizeY1; var sizeZ1; sizeX1 = root._aabbMaxX - root._aabbMinX; sizeY1 = root._aabbMaxY - root._aabbMinY; sizeZ1 = root._aabbMaxZ - root._aabbMinZ; var x1 = sizeX1; var y1 = sizeY1; var z1 = sizeZ1; tmp = ((x1 * (y1 + z1) + y1 * z1) * 1000 + 0.5 | 0) / 1000; } else { var size2; var sizeX2; var sizeY2; var sizeZ2; sizeX2 = root._aabbMaxX - root._aabbMinX; sizeY2 = root._aabbMaxY - root._aabbMinY; sizeZ2 = root._aabbMaxZ - root._aabbMinZ; var x2 = sizeX2; var y2 = sizeY2; var z2 = sizeZ2; tmp = ((x2 * (y2 + z2) + y2 * z2) * 1000 - 0.5 | 0) / 1000; } console.log("src/oimo/collision/broadphase/bvh/BvhTree.hx:42:",indent + "#" + root._height + ", " + tmp); this._print(root._children[1],indent + " "); } } _getBalance() { return this.getBalanceRecursive(this._root); } deleteRecursive(root) { if(root._height == 0) { var prev = root._prevLeaf; var next = root._nextLeaf; if(prev != null) { prev._nextLeaf = next; } if(next != null) { next._prevLeaf = prev; } if(root == this.leafList) { this.leafList = this.leafList._nextLeaf; } if(root == this.leafListLast) { this.leafListLast = this.leafListLast._prevLeaf; } root._nextLeaf = null; root._prevLeaf = null; root._proxy._leaf = null; root._next = null; root._childIndex = 0; root._children[0] = null; root._children[1] = null; root._childIndex = 0; root._parent = null; root._height = 0; root._proxy = null; root._next = this._nodePool; this._nodePool = root; return; } this.deleteRecursive(root._children[0]); this.deleteRecursive(root._children[1]); root._next = null; root._childIndex = 0; root._children[0] = null; root._children[1] = null; root._childIndex = 0; root._parent = null; root._height = 0; root._proxy = null; root._next = this._nodePool; this._nodePool = root; } decomposeRecursive(root) { if(root._height == 0) { root._childIndex = 0; root._parent = null; return; } this.decomposeRecursive(root._children[0]); this.decomposeRecursive(root._children[1]); root._next = null; root._childIndex = 0; root._children[0] = null; root._children[1] = null; root._childIndex = 0; root._parent = null; root._height = 0; root._proxy = null; root._next = this._nodePool; this._nodePool = root; } buildTopDownRecursive(leaves,from,until) { var num = until - from; if(num == 1) { var leaf = leaves[from]; var proxy = leaf._proxy; leaf._aabbMinX = proxy._aabbMinX; leaf._aabbMinY = proxy._aabbMinY; leaf._aabbMinZ = proxy._aabbMinZ; leaf._aabbMaxX = proxy._aabbMaxX; leaf._aabbMaxY = proxy._aabbMaxY; leaf._aabbMaxZ = proxy._aabbMaxZ; return leaf; } var splitAt = this._strategy._splitLeaves(leaves,from,until); var child1 = this.buildTopDownRecursive(leaves,from,splitAt); var child2 = this.buildTopDownRecursive(leaves,splitAt,until); var first = this._nodePool; if(first != null) { this._nodePool = first._next; first._next = null; } else { first = new oimo.collision.broadphase.bvh.BvhNode(); } var parent = first; parent._children[0] = child1; child1._parent = parent; child1._childIndex = 0; parent._children[1] = child2; child2._parent = parent; child2._childIndex = 1; var c1 = parent._children[0]; var c2 = parent._children[1]; parent._aabbMinX = c1._aabbMinX < c2._aabbMinX ? c1._aabbMinX : c2._aabbMinX; parent._aabbMinY = c1._aabbMinY < c2._aabbMinY ? c1._aabbMinY : c2._aabbMinY; parent._aabbMinZ = c1._aabbMinZ < c2._aabbMinZ ? c1._aabbMinZ : c2._aabbMinZ; parent._aabbMaxX = c1._aabbMaxX > c2._aabbMaxX ? c1._aabbMaxX : c2._aabbMaxX; parent._aabbMaxY = c1._aabbMaxY > c2._aabbMaxY ? c1._aabbMaxY : c2._aabbMaxY; parent._aabbMaxZ = c1._aabbMaxZ > c2._aabbMaxZ ? c1._aabbMaxZ : c2._aabbMaxZ; var h1 = parent._children[0]._height; var h2 = parent._children[1]._height; parent._height = (h1 > h2 ? h1 : h2) + 1; return parent; } getBalanceRecursive(root) { if(root == null || root._height == 0) { return 0; } var balance = root._children[0]._height - root._children[1]._height; if(balance < 0) { balance = -balance; } return balance + this.getBalanceRecursive(root._children[0]) + this.getBalanceRecursive(root._children[1]); } } oimo.collision.geometry.Aabb = class oimo_collision_geometry_Aabb { constructor() { this._minX = 0; this._minY = 0; this._minZ = 0; this._maxX = 0; this._maxY = 0; this._maxZ = 0; } init(min,max) { var v = min; this._minX = v.x; this._minY = v.y; this._minZ = v.z; var v1 = max; this._maxX = v1.x; this._maxY = v1.y; this._maxZ = v1.z; return this; } getMin() { var min = new oimo.common.Vec3(); var v = min; v.x = this._minX; v.y = this._minY; v.z = this._minZ; return min; } getMinTo(min) { var v = min; v.x = this._minX; v.y = this._minY; v.z = this._minZ; } setMin(min) { var v = min; this._minX = v.x; this._minY = v.y; this._minZ = v.z; return this; } getMax() { var max = new oimo.common.Vec3(); var v = max; v.x = this._maxX; v.y = this._maxY; v.z = this._maxZ; return max; } getMaxTo(max) { var v = max; v.x = this._maxX; v.y = this._maxY; v.z = this._maxZ; } setMax(max) { var v = max; this._maxX = v.x; this._maxY = v.y; this._maxZ = v.z; return this; } getCenter() { var v = new oimo.common.Vec3(); var c; var cX; var cY; var cZ; cX = this._minX + this._maxX; cY = this._minY + this._maxY; cZ = this._minZ + this._maxZ; cX *= 0.5; cY *= 0.5; cZ *= 0.5; var v1 = v; v1.x = cX; v1.y = cY; v1.z = cZ; return v; } getCenterTo(center) { var c; var cX; var cY; var cZ; cX = this._minX + this._maxX; cY = this._minY + this._maxY; cZ = this._minZ + this._maxZ; cX *= 0.5; cY *= 0.5; cZ *= 0.5; var v = center; v.x = cX; v.y = cY; v.z = cZ; } getExtents() { var v = new oimo.common.Vec3(); var c; var cX; var cY; var cZ; cX = this._maxX - this._minX; cY = this._maxY - this._minY; cZ = this._maxZ - this._minZ; cX *= 0.5; cY *= 0.5; cZ *= 0.5; var v1 = v; v1.x = cX; v1.y = cY; v1.z = cZ; return v; } getExtentsTo(halfExtents) { var c; var cX; var cY; var cZ; cX = this._maxX - this._minX; cY = this._maxY - this._minY; cZ = this._maxZ - this._minZ; cX *= 0.5; cY *= 0.5; cZ *= 0.5; var v = halfExtents; v.x = cX; v.y = cY; v.z = cZ; } combine(other) { this._minX = this._minX < other._minX ? this._minX : other._minX; this._minY = this._minY < other._minY ? this._minY : other._minY; this._minZ = this._minZ < other._minZ ? this._minZ : other._minZ; this._maxX = this._maxX > other._maxX ? this._maxX : other._maxX; this._maxY = this._maxY > other._maxY ? this._maxY : other._maxY; this._maxZ = this._maxZ > other._maxZ ? this._maxZ : other._maxZ; return this; } combined(other) { var aabb = new oimo.collision.geometry.Aabb(); aabb._minX = this._minX < other._minX ? this._minX : other._minX; aabb._minY = this._minY < other._minY ? this._minY : other._minY; aabb._minZ = this._minZ < other._minZ ? this._minZ : other._minZ; aabb._maxX = this._maxX > other._maxX ? this._maxX : other._maxX; aabb._maxY = this._maxY > other._maxY ? this._maxY : other._maxY; aabb._maxZ = this._maxZ > other._maxZ ? this._maxZ : other._maxZ; return aabb; } overlap(other) { if(this._minX < other._maxX && this._maxX > other._minX && this._minY < other._maxY && this._maxY > other._minY && this._minZ < other._maxZ) { return this._maxZ > other._minZ; } else { return false; } } getIntersection(other) { var aabb = new oimo.collision.geometry.Aabb(); aabb._minX = this._minX > other._minX ? this._minX : other._minX; aabb._minY = this._minY > other._minY ? this._minY : other._minY; aabb._minZ = this._minZ > other._minZ ? this._minZ : other._minZ; aabb._maxX = this._maxX < other._maxX ? this._maxX : other._maxX; aabb._maxY = this._maxY < other._maxY ? this._maxY : other._maxY; aabb._maxZ = this._maxZ < other._maxZ ? this._maxZ : other._maxZ; return aabb; } getIntersectionTo(other,intersection) { intersection._minX = this._minX > other._minX ? this._minX : other._minX; intersection._minY = this._minY > other._minY ? this._minY : other._minY; intersection._minZ = this._minZ > other._minZ ? this._minZ : other._minZ; intersection._maxX = this._maxX < other._maxX ? this._maxX : other._maxX; intersection._maxY = this._maxY < other._maxY ? this._maxY : other._maxY; intersection._maxZ = this._maxZ < other._maxZ ? this._maxZ : other._maxZ; } copyFrom(aabb) { this._minX = aabb._minX; this._minY = aabb._minY; this._minZ = aabb._minZ; this._maxX = aabb._maxX; this._maxY = aabb._maxY; this._maxZ = aabb._maxZ; return this; } clone() { var aabb = new oimo.collision.geometry.Aabb(); aabb._minX = this._minX; aabb._minY = this._minY; aabb._minZ = this._minZ; aabb._maxX = this._maxX; aabb._maxY = this._maxY; aabb._maxZ = this._maxZ; return aabb; } } oimo.collision.geometry.BoxGeometry = class oimo_collision_geometry_BoxGeometry extends oimo.collision.geometry.ConvexGeometry { constructor(halfExtents) { super(1); var v = halfExtents; this._halfExtentsX = v.x; this._halfExtentsY = v.y; this._halfExtentsZ = v.z; this._halfAxisXX = halfExtents.x; this._halfAxisXY = 0; this._halfAxisXZ = 0; this._halfAxisYX = 0; this._halfAxisYY = halfExtents.y; this._halfAxisYZ = 0; this._halfAxisZX = 0; this._halfAxisZY = 0; this._halfAxisZZ = halfExtents.z; this._updateMass(); var minHalfExtents = halfExtents.x < halfExtents.y ? halfExtents.z < halfExtents.x ? halfExtents.z : halfExtents.x : halfExtents.z < halfExtents.y ? halfExtents.z : halfExtents.y; if(this._gjkMargin > minHalfExtents * 0.2) { this._gjkMargin = minHalfExtents * 0.2; } } getHalfExtents() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._halfExtentsX; v1.y = this._halfExtentsY; v1.z = this._halfExtentsZ; return v; } getHalfExtentsTo(halfExtents) { var v = halfExtents; v.x = this._halfExtentsX; v.y = this._halfExtentsY; v.z = this._halfExtentsZ; } _updateMass() { this._volume = 8 * (this._halfExtentsX * this._halfExtentsY * this._halfExtentsZ); var sq; var sqX; var sqY; var sqZ; sqX = this._halfExtentsX * this._halfExtentsX; sqY = this._halfExtentsY * this._halfExtentsY; sqZ = this._halfExtentsZ * this._halfExtentsZ; this._inertiaCoeff00 = 0.333333333333333315 * (sqY + sqZ); this._inertiaCoeff01 = 0; this._inertiaCoeff02 = 0; this._inertiaCoeff10 = 0; this._inertiaCoeff11 = 0.333333333333333315 * (sqZ + sqX); this._inertiaCoeff12 = 0; this._inertiaCoeff20 = 0; this._inertiaCoeff21 = 0; this._inertiaCoeff22 = 0.333333333333333315 * (sqX + sqY); } _computeAabb(aabb,tf) { var tfx; var tfxX; var tfxY; var tfxZ; var tfy; var tfyX; var tfyY; var tfyZ; var tfz; var tfzX; var tfzY; var tfzZ; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = tf._rotation00 * this._halfAxisXX + tf._rotation01 * this._halfAxisXY + tf._rotation02 * this._halfAxisXZ; __tmp__Y = tf._rotation10 * this._halfAxisXX + tf._rotation11 * this._halfAxisXY + tf._rotation12 * this._halfAxisXZ; __tmp__Z = tf._rotation20 * this._halfAxisXX + tf._rotation21 * this._halfAxisXY + tf._rotation22 * this._halfAxisXZ; tfxX = __tmp__X; tfxY = __tmp__Y; tfxZ = __tmp__Z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = tf._rotation00 * this._halfAxisYX + tf._rotation01 * this._halfAxisYY + tf._rotation02 * this._halfAxisYZ; __tmp__Y1 = tf._rotation10 * this._halfAxisYX + tf._rotation11 * this._halfAxisYY + tf._rotation12 * this._halfAxisYZ; __tmp__Z1 = tf._rotation20 * this._halfAxisYX + tf._rotation21 * this._halfAxisYY + tf._rotation22 * this._halfAxisYZ; tfyX = __tmp__X1; tfyY = __tmp__Y1; tfyZ = __tmp__Z1; var __tmp__X2; var __tmp__Y2; var __tmp__Z2; __tmp__X2 = tf._rotation00 * this._halfAxisZX + tf._rotation01 * this._halfAxisZY + tf._rotation02 * this._halfAxisZZ; __tmp__Y2 = tf._rotation10 * this._halfAxisZX + tf._rotation11 * this._halfAxisZY + tf._rotation12 * this._halfAxisZZ; __tmp__Z2 = tf._rotation20 * this._halfAxisZX + tf._rotation21 * this._halfAxisZY + tf._rotation22 * this._halfAxisZZ; tfzX = __tmp__X2; tfzY = __tmp__Y2; tfzZ = __tmp__Z2; tfxX = tfxX < 0 ? -tfxX : tfxX; tfxY = tfxY < 0 ? -tfxY : tfxY; tfxZ = tfxZ < 0 ? -tfxZ : tfxZ; tfyX = tfyX < 0 ? -tfyX : tfyX; tfyY = tfyY < 0 ? -tfyY : tfyY; tfyZ = tfyZ < 0 ? -tfyZ : tfyZ; tfzX = tfzX < 0 ? -tfzX : tfzX; tfzY = tfzY < 0 ? -tfzY : tfzY; tfzZ = tfzZ < 0 ? -tfzZ : tfzZ; var tfs; var tfsX; var tfsY; var tfsZ; tfsX = tfxX + tfyX; tfsY = tfxY + tfyY; tfsZ = tfxZ + tfyZ; tfsX += tfzX; tfsY += tfzY; tfsZ += tfzZ; aabb._minX = tf._positionX - tfsX; aabb._minY = tf._positionY - tfsY; aabb._minZ = tf._positionZ - tfsZ; aabb._maxX = tf._positionX + tfsX; aabb._maxY = tf._positionY + tfsY; aabb._maxZ = tf._positionZ + tfsZ; } computeLocalSupportingVertex(dir,out) { var gjkMargins; var gjkMarginsX; var gjkMarginsY; var gjkMarginsZ; var coreExtents; var coreExtentsX; var coreExtentsY; var coreExtentsZ; gjkMarginsX = this._gjkMargin; gjkMarginsY = this._gjkMargin; gjkMarginsZ = this._gjkMargin; gjkMarginsX = gjkMarginsX < this._halfExtentsX ? gjkMarginsX : this._halfExtentsX; gjkMarginsY = gjkMarginsY < this._halfExtentsY ? gjkMarginsY : this._halfExtentsY; gjkMarginsZ = gjkMarginsZ < this._halfExtentsZ ? gjkMarginsZ : this._halfExtentsZ; coreExtentsX = this._halfExtentsX - gjkMarginsX; coreExtentsY = this._halfExtentsY - gjkMarginsY; coreExtentsZ = this._halfExtentsZ - gjkMarginsZ; out.x = dir.x > 0 ? coreExtentsX : -coreExtentsX; out.y = dir.y > 0 ? coreExtentsY : -coreExtentsY; out.z = dir.z > 0 ? coreExtentsZ : -coreExtentsZ; } _rayCastLocal(beginX,beginY,beginZ,endX,endY,endZ,hit) { var p1x = beginX; var p1y = beginY; var p1z = beginZ; var p2x = endX; var p2y = endY; var p2z = endZ; var halfW = this._halfExtentsX; var halfH = this._halfExtentsY; var halfD = this._halfExtentsZ; var dx = p2x - p1x; var dy = p2y - p1y; var dz = p2z - p1z; var tminx = 0; var tminy = 0; var tminz = 0; var tmaxx = 1; var tmaxy = 1; var tmaxz = 1; if(dx > -1e-6 && dx < 1e-6) { if(p1x <= -halfW || p1x >= halfW) { return false; } } else { var invDx = 1 / dx; var t1 = (-halfW - p1x) * invDx; var t2 = (halfW - p1x) * invDx; if(t1 > t2) { var tmp = t1; t1 = t2; t2 = tmp; } if(t1 > 0) { tminx = t1; } if(t2 < 1) { tmaxx = t2; } } if(dy > -1e-6 && dy < 1e-6) { if(p1y <= -halfH || p1y >= halfH) { return false; } } else { var invDy = 1 / dy; var t11 = (-halfH - p1y) * invDy; var t21 = (halfH - p1y) * invDy; if(t11 > t21) { var tmp1 = t11; t11 = t21; t21 = tmp1; } if(t11 > 0) { tminy = t11; } if(t21 < 1) { tmaxy = t21; } } if(dz > -1e-6 && dz < 1e-6) { if(p1z <= -halfD || p1z >= halfD) { return false; } } else { var invDz = 1 / dz; var t12 = (-halfD - p1z) * invDz; var t22 = (halfD - p1z) * invDz; if(t12 > t22) { var tmp2 = t12; t12 = t22; t22 = tmp2; } if(t12 > 0) { tminz = t12; } if(t22 < 1) { tmaxz = t22; } } if(tminx >= 1 || tminy >= 1 || tminz >= 1 || tmaxx <= 0 || tmaxy <= 0 || tmaxz <= 0) { return false; } var min = tminx; var max = tmaxx; var hitDirection = 0; if(tminy > min) { min = tminy; hitDirection = 1; } if(tminz > min) { min = tminz; hitDirection = 2; } if(tmaxy < max) { max = tmaxy; } if(tmaxz < max) { max = tmaxz; } if(min > max) { return false; } if(min == 0) { return false; } switch(hitDirection) { case 0: hit.normal.init(dx > 0 ? -1 : 1,0,0); break; case 1: hit.normal.init(0,dy > 0 ? -1 : 1,0); break; case 2: hit.normal.init(0,0,dz > 0 ? -1 : 1); break; } hit.position.init(p1x + min * dx,p1y + min * dy,p1z + min * dz); hit.fraction = min; return true; } } oimo.collision.geometry.CapsuleGeometry = class oimo_collision_geometry_CapsuleGeometry extends oimo.collision.geometry.ConvexGeometry { constructor(radius,halfHeight) { super(4); this._radius = radius; this._halfHeight = halfHeight; this._gjkMargin = this._radius; this._updateMass(); } getRadius() { return this._radius; } getHalfHeight() { return this._halfHeight; } _updateMass() { var r2 = this._radius * this._radius; var hh2 = this._halfHeight * this._halfHeight; var cylinderVolume = 6.28318530717958 * r2 * this._halfHeight; var sphereVolume = 3.14159265358979 * r2 * this._radius * 4 / 3; this._volume = cylinderVolume + sphereVolume; var invVolume = this._volume == 0 ? 0 : 1 / this._volume; var inertiaY = invVolume * (cylinderVolume * r2 * 0.5 + sphereVolume * r2 * 0.4); var inertiaXZ = invVolume * (cylinderVolume * (r2 * 0.25 + hh2 / 3) + sphereVolume * (r2 * 0.4 + this._halfHeight * this._radius * 0.75 + hh2)); this._inertiaCoeff00 = inertiaXZ; this._inertiaCoeff01 = 0; this._inertiaCoeff02 = 0; this._inertiaCoeff10 = 0; this._inertiaCoeff11 = inertiaY; this._inertiaCoeff12 = 0; this._inertiaCoeff20 = 0; this._inertiaCoeff21 = 0; this._inertiaCoeff22 = inertiaXZ; } _computeAabb(aabb,tf) { var radVec; var radVecX; var radVecY; var radVecZ; radVecX = this._radius; radVecY = this._radius; radVecZ = this._radius; var axis; var axisX; var axisY; var axisZ; axisX = tf._rotation01; axisY = tf._rotation11; axisZ = tf._rotation21; axisX = axisX < 0 ? -axisX : axisX; axisY = axisY < 0 ? -axisY : axisY; axisZ = axisZ < 0 ? -axisZ : axisZ; axisX *= this._halfHeight; axisY *= this._halfHeight; axisZ *= this._halfHeight; radVecX += axisX; radVecY += axisY; radVecZ += axisZ; aabb._minX = tf._positionX - radVecX; aabb._minY = tf._positionY - radVecY; aabb._minZ = tf._positionZ - radVecZ; aabb._maxX = tf._positionX + radVecX; aabb._maxY = tf._positionY + radVecY; aabb._maxZ = tf._positionZ + radVecZ; } computeLocalSupportingVertex(dir,out) { if(dir.y > 0) { out.init(0,this._halfHeight,0); } else { out.init(0,-this._halfHeight,0); } } _rayCastLocal(beginX,beginY,beginZ,endX,endY,endZ,hit) { var p1x = beginX; var p1y = beginY; var p1z = beginZ; var p2x = endX; var p2y = endY; var p2z = endZ; var halfH = this._halfHeight; var dx = p2x - p1x; var dy = p2y - p1y; var dz = p2z - p1z; var tminxz = 0; var tmaxxz = 1; var a = dx * dx + dz * dz; var b = p1x * dx + p1z * dz; var c = p1x * p1x + p1z * p1z - this._radius * this._radius; var D = b * b - a * c; if(D < 0) { return false; } var t; if(a > 0) { var sqrtD = Math.sqrt(D); tminxz = (-b - sqrtD) / a; tmaxxz = (-b + sqrtD) / a; if(tminxz >= 1 || tmaxxz <= 0) { return false; } } else { if(c >= 0) { return false; } tminxz = 0; tmaxxz = 1; } var crossY = p1y + dy * tminxz; var min; if(crossY > -halfH && crossY < halfH) { if(tminxz > 0) { min = tminxz; var _this = hit.normal.init(p1x + dx * min,0,p1z + dz * min); var invLen = Math.sqrt(_this.x * _this.x + _this.y * _this.y + _this.z * _this.z); if(invLen > 0) { invLen = 1 / invLen; } var tx = _this.x * invLen; var ty = _this.y * invLen; var tz = _this.z * invLen; _this.x = tx; _this.y = ty; _this.z = tz; hit.position.init(p1x + min * dx,crossY,p1z + min * dz); hit.fraction = min; return true; } return false; } var sphereY = crossY < 0 ? -halfH : halfH; var spherePos; var spherePosX; var spherePosY; var spherePosZ; var sphereToBegin; var sphereToBeginX; var sphereToBeginY; var sphereToBeginZ; spherePosX = 0; spherePosY = sphereY; spherePosZ = 0; sphereToBeginX = beginX - spherePosX; sphereToBeginY = beginY - spherePosY; sphereToBeginZ = beginZ - spherePosZ; var d; var dX; var dY; var dZ; dX = endX - beginX; dY = endY - beginY; dZ = endZ - beginZ; a = dX * dX + dY * dY + dZ * dZ; b = sphereToBeginX * dX + sphereToBeginY * dY + sphereToBeginZ * dZ; c = sphereToBeginX * sphereToBeginX + sphereToBeginY * sphereToBeginY + sphereToBeginZ * sphereToBeginZ - this._radius * this._radius; D = b * b - a * c; if(D < 0) { return false; } var t1 = (-b - Math.sqrt(D)) / a; if(t1 < 0 || t1 > 1) { return false; } var hitPos; var hitPosX; var hitPosY; var hitPosZ; var hitNormal; var hitNormalX; var hitNormalY; var hitNormalZ; hitPosX = sphereToBeginX + dX * t1; hitPosY = sphereToBeginY + dY * t1; hitPosZ = sphereToBeginZ + dZ * t1; var l = hitPosX * hitPosX + hitPosY * hitPosY + hitPosZ * hitPosZ; if(l > 0) { l = 1 / Math.sqrt(l); } hitNormalX = hitPosX * l; hitNormalY = hitPosY * l; hitNormalZ = hitPosZ * l; hitPosX += spherePosX; hitPosY += spherePosY; hitPosZ += spherePosZ; var v = hit.position; v.x = hitPosX; v.y = hitPosY; v.z = hitPosZ; var v1 = hit.normal; v1.x = hitNormalX; v1.y = hitNormalY; v1.z = hitNormalZ; hit.fraction = t1; return true; } } oimo.collision.geometry.ConeGeometry = class oimo_collision_geometry_ConeGeometry extends oimo.collision.geometry.ConvexGeometry { constructor(radius,halfHeight) { super(3); this._radius = radius; this._halfHeight = halfHeight; this.sinTheta = radius / Math.sqrt(radius * radius + 4 * halfHeight * halfHeight); this.cosTheta = 2 * halfHeight / Math.sqrt(radius * radius + 4 * halfHeight * halfHeight); this._updateMass(); } getRadius() { return this._radius; } getHalfHeight() { return this._halfHeight; } _updateMass() { var r2 = this._radius * this._radius; var h2 = this._halfHeight * this._halfHeight * 4; this._volume = 3.14159265358979 * r2 * this._halfHeight * 2 / 3; this._inertiaCoeff00 = 0.05 * (3 * r2 + 2 * h2); this._inertiaCoeff01 = 0; this._inertiaCoeff02 = 0; this._inertiaCoeff10 = 0; this._inertiaCoeff11 = 0.3 * r2; this._inertiaCoeff12 = 0; this._inertiaCoeff20 = 0; this._inertiaCoeff21 = 0; this._inertiaCoeff22 = 0.05 * (3 * r2 + 2 * h2); } _computeAabb(aabb,tf) { var axis; var axisX; var axisY; var axisZ; var axis2; var axis2X; var axis2Y; var axis2Z; var eh; var ehX; var ehY; var ehZ; var er; var erX; var erY; var erZ; axisX = tf._rotation01; axisY = tf._rotation11; axisZ = tf._rotation21; axis2X = axisX * axisX; axis2Y = axisY * axisY; axis2Z = axisZ * axisZ; var axis2x = axis2X; var axis2y = axis2Y; var axis2z = axis2Z; erX = Math.sqrt(1 - axis2x); erY = Math.sqrt(1 - axis2y); erZ = Math.sqrt(1 - axis2z); erX *= this._radius; erY *= this._radius; erZ *= this._radius; ehX = axisX * this._halfHeight; ehY = axisY * this._halfHeight; ehZ = axisZ * this._halfHeight; var rmin; var rminX; var rminY; var rminZ; var rmax; var rmaxX; var rmaxY; var rmaxZ; rminX = -ehX; rminY = -ehY; rminZ = -ehZ; rminX -= erX; rminY -= erY; rminZ -= erZ; rmaxX = -ehX; rmaxY = -ehY; rmaxZ = -ehZ; rmaxX += erX; rmaxY += erY; rmaxZ += erZ; var max; var maxX; var maxY; var maxZ; var min; var minX; var minY; var minZ; maxX = rminX > rmaxX ? rminX : rmaxX; maxY = rminY > rmaxY ? rminY : rmaxY; maxZ = rminZ > rmaxZ ? rminZ : rmaxZ; maxX = maxX > ehX ? maxX : ehX; maxY = maxY > ehY ? maxY : ehY; maxZ = maxZ > ehZ ? maxZ : ehZ; minX = rminX < rmaxX ? rminX : rmaxX; minY = rminY < rmaxY ? rminY : rmaxY; minZ = rminZ < rmaxZ ? rminZ : rmaxZ; minX = minX < ehX ? minX : ehX; minY = minY < ehY ? minY : ehY; minZ = minZ < ehZ ? minZ : ehZ; aabb._minX = tf._positionX + minX; aabb._minY = tf._positionY + minY; aabb._minZ = tf._positionZ + minZ; aabb._maxX = tf._positionX + maxX; aabb._maxY = tf._positionY + maxY; aabb._maxZ = tf._positionZ + maxZ; } computeLocalSupportingVertex(dir,out) { var dx = dir.x; var dy = dir.y; var dz = dir.z; if(dy > 0 && dy * dy > this.sinTheta * this.sinTheta * (dx * dx + dy * dy + dz * dz)) { out.init(0,this._halfHeight - this._gjkMargin / this.sinTheta,0); if(out.y < 0) { out.y = 0; } return; } var rx = dir.x; var rz = dir.z; var len = rx * rx + rz * rz; var height = 2 * this._halfHeight; var coreRadius = (height - this._gjkMargin) / height * this._radius - this._gjkMargin / this.cosTheta; if(coreRadius < 0) { coreRadius = 0; } var invLen = len > 0 ? coreRadius / Math.sqrt(len) : 0; var coreHalfHeight = this._halfHeight - this._gjkMargin; if(coreHalfHeight < 0) { coreHalfHeight = 0; } out.x = rx * invLen; out.y = -coreHalfHeight; out.z = rz * invLen; } _rayCastLocal(beginX,beginY,beginZ,endX,endY,endZ,hit) { var p1x = beginX; var p1y = beginY; var p1z = beginZ; var p2x = endX; var p2y = endY; var p2z = endZ; var halfH = this._halfHeight; var dx = p2x - p1x; var dy = p2y - p1y; var dz = p2z - p1z; var tminy = 0; var tmaxy = 1; if(dy > -1e-6 && dy < 1e-6) { if(p1y <= -halfH || p1y >= halfH) { return false; } } else { var invDy = 1 / dy; var t1 = (-halfH - p1y) * invDy; var t2 = (halfH - p1y) * invDy; if(t1 > t2) { var tmp = t1; t1 = t2; t2 = tmp; } if(t1 > 0) { tminy = t1; } if(t2 < 1) { tmaxy = t2; } } if(tminy >= 1 || tmaxy <= 0) { return false; } var tminxz = 0; var tmaxxz = 0; p1y -= halfH; var cos2 = this.cosTheta * this.cosTheta; var a = cos2 * (dx * dx + dy * dy + dz * dz) - dy * dy; var b = cos2 * (p1x * dx + p1y * dy + p1z * dz) - p1y * dy; var c = cos2 * (p1x * p1x + p1y * p1y + p1z * p1z) - p1y * p1y; var D = b * b - a * c; if(a != 0) { if(D < 0) { return false; } var sqrtD = Math.sqrt(D); if(a < 0) { if(dy > 0) { tminxz = 0; tmaxxz = (-b + sqrtD) / a; if(tmaxxz <= 0) { return false; } } else { tminxz = (-b - sqrtD) / a; tmaxxz = 1; if(tminxz >= 1) { return false; } } } else { tminxz = (-b - sqrtD) / a; tmaxxz = (-b + sqrtD) / a; if(tminxz >= 1 || tmaxxz <= 0) { return false; } } } else { var t = -c / (2 * b); if(b > 0) { tminxz = 0; tmaxxz = t; if(t <= 0) { return false; } } else { tminxz = t; tmaxxz = 1; if(t >= 1) { return false; } } } p1y += halfH; var min; if(tmaxxz <= tminy || tmaxy <= tminxz) { return false; } if(tminxz < tminy) { min = tminy; if(min == 0) { return false; } hit.normal.init(0,dy > 0 ? -1 : 1,0); } else { min = tminxz; if(min == 0) { return false; } var _this = hit.normal.init(p1x + dx * min,0,p1z + dz * min); var invLen = Math.sqrt(_this.x * _this.x + _this.y * _this.y + _this.z * _this.z); if(invLen > 0) { invLen = 1 / invLen; } var tx = _this.x * invLen; var ty = _this.y * invLen; var tz = _this.z * invLen; _this.x = tx; _this.y = ty; _this.z = tz; var _this1 = _this; var s = this.cosTheta; var tx1 = _this1.x * s; var ty1 = _this1.y * s; var tz1 = _this1.z * s; _this1.x = tx1; _this1.y = ty1; _this1.z = tz1; hit.normal.y += this.sinTheta; } hit.position.init(p1x + min * dx,p1y + min * dy,p1z + min * dz); hit.fraction = min; return true; } } oimo.collision.geometry.ConvexHullGeometry = class oimo_collision_geometry_ConvexHullGeometry extends oimo.collision.geometry.ConvexGeometry { constructor(vertices) { super(5); this._numVertices = vertices.length; var this1 = new Array(this._numVertices); this._vertices = this1; var this2 = new Array(this._numVertices); this._tmpVertices = this2; var _g = 0; var _g1 = this._numVertices; while(_g < _g1) { var i = _g++; this._vertices[i] = vertices[i]; this._tmpVertices[i] = new oimo.common.Vec3(); } this._useGjkRayCast = true; this._updateMass(); } getVertices() { return this._vertices; } _updateMass() { this._volume = 1; this._inertiaCoeff00 = 1; this._inertiaCoeff01 = 0; this._inertiaCoeff02 = 0; this._inertiaCoeff10 = 0; this._inertiaCoeff11 = 1; this._inertiaCoeff12 = 0; this._inertiaCoeff20 = 0; this._inertiaCoeff21 = 0; this._inertiaCoeff22 = 1; var minx = this._vertices[0].x; var miny = this._vertices[0].y; var minz = this._vertices[0].z; var maxx = this._vertices[0].x; var maxy = this._vertices[0].y; var maxz = this._vertices[0].z; var _g = 1; var _g1 = this._numVertices; while(_g < _g1) { var i = _g++; var vx = this._vertices[i].x; var vy = this._vertices[i].y; var vz = this._vertices[i].z; if(vx < minx) { minx = vx; } else if(vx > maxx) { maxx = vx; } if(vy < miny) { miny = vy; } else if(vy > maxy) { maxy = vy; } if(vz < minz) { minz = vz; } else if(vz > maxz) { maxz = vz; } } var sizex = maxx - minx; var sizey = maxy - miny; var sizez = maxz - minz; this._volume = sizex * sizey * sizez; var diffCog = ((minx + maxx) * (minx + maxx) + (miny + maxy) * (miny + maxy) + (minz + maxz) * (minz + maxz)) * 0.25; sizex = sizex * sizex * 0.25; sizey = sizey * sizey * 0.25; sizez = sizez * sizez * 0.25; this._inertiaCoeff00 = 0.333333333333333315 * (sizey + sizez) + diffCog; this._inertiaCoeff01 = 0; this._inertiaCoeff02 = 0; this._inertiaCoeff10 = 0; this._inertiaCoeff11 = 0.333333333333333315 * (sizez + sizex) + diffCog; this._inertiaCoeff12 = 0; this._inertiaCoeff20 = 0; this._inertiaCoeff21 = 0; this._inertiaCoeff22 = 0.333333333333333315 * (sizex + sizey) + diffCog; } _computeAabb(aabb,tf) { var min; var minX; var minY; var minZ; var max; var maxX; var maxY; var maxZ; var margin; var marginX; var marginY; var marginZ; marginX = this._gjkMargin; marginY = this._gjkMargin; marginZ = this._gjkMargin; var localV; var localVX; var localVY; var localVZ; var v = this._vertices[0]; localVX = v.x; localVY = v.y; localVZ = v.z; var worldV; var worldVX; var worldVY; var worldVZ; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = tf._rotation00 * localVX + tf._rotation01 * localVY + tf._rotation02 * localVZ; __tmp__Y = tf._rotation10 * localVX + tf._rotation11 * localVY + tf._rotation12 * localVZ; __tmp__Z = tf._rotation20 * localVX + tf._rotation21 * localVY + tf._rotation22 * localVZ; worldVX = __tmp__X; worldVY = __tmp__Y; worldVZ = __tmp__Z; worldVX += tf._positionX; worldVY += tf._positionY; worldVZ += tf._positionZ; minX = worldVX; minY = worldVY; minZ = worldVZ; maxX = worldVX; maxY = worldVY; maxZ = worldVZ; var _g = 1; var _g1 = this._numVertices; while(_g < _g1) { var i = _g++; var v1 = this._vertices[i]; localVX = v1.x; localVY = v1.y; localVZ = v1.z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = tf._rotation00 * localVX + tf._rotation01 * localVY + tf._rotation02 * localVZ; __tmp__Y1 = tf._rotation10 * localVX + tf._rotation11 * localVY + tf._rotation12 * localVZ; __tmp__Z1 = tf._rotation20 * localVX + tf._rotation21 * localVY + tf._rotation22 * localVZ; worldVX = __tmp__X1; worldVY = __tmp__Y1; worldVZ = __tmp__Z1; worldVX += tf._positionX; worldVY += tf._positionY; worldVZ += tf._positionZ; minX = minX < worldVX ? minX : worldVX; minY = minY < worldVY ? minY : worldVY; minZ = minZ < worldVZ ? minZ : worldVZ; maxX = maxX > worldVX ? maxX : worldVX; maxY = maxY > worldVY ? maxY : worldVY; maxZ = maxZ > worldVZ ? maxZ : worldVZ; } aabb._minX = minX - marginX; aabb._minY = minY - marginY; aabb._minZ = minZ - marginZ; aabb._maxX = maxX + marginX; aabb._maxY = maxY + marginY; aabb._maxZ = maxZ + marginZ; } computeLocalSupportingVertex(dir,out) { var _this = this._vertices[0]; var maxDot = _this.x * dir.x + _this.y * dir.y + _this.z * dir.z; var maxIndex = 0; var _g = 1; var _g1 = this._numVertices; while(_g < _g1) { var i = _g++; var _this1 = this._vertices[i]; var dot = _this1.x * dir.x + _this1.y * dir.y + _this1.z * dir.z; if(dot > maxDot) { maxDot = dot; maxIndex = i; } } var v = this._vertices[maxIndex]; out.x = v.x; out.y = v.y; out.z = v.z; } } oimo.collision.geometry.CylinderGeometry = class oimo_collision_geometry_CylinderGeometry extends oimo.collision.geometry.ConvexGeometry { constructor(radius,halfHeight) { super(2); this._radius = radius; this._halfHeight = halfHeight; this._updateMass(); } getRadius() { return this._radius; } getHalfHeight() { return this._halfHeight; } _updateMass() { var r2 = this._radius * this._radius; var h2 = this._halfHeight * this._halfHeight * 4; this._volume = 3.14159265358979 * r2 * this._halfHeight * 2; this._inertiaCoeff00 = 0.0833333333333333287 * (3 * r2 + h2); this._inertiaCoeff01 = 0; this._inertiaCoeff02 = 0; this._inertiaCoeff10 = 0; this._inertiaCoeff11 = 0.5 * r2; this._inertiaCoeff12 = 0; this._inertiaCoeff20 = 0; this._inertiaCoeff21 = 0; this._inertiaCoeff22 = 0.0833333333333333287 * (3 * r2 + h2); } _computeAabb(aabb,tf) { var axis; var axisX; var axisY; var axisZ; var axis2; var axis2X; var axis2Y; var axis2Z; var eh; var ehX; var ehY; var ehZ; var er; var erX; var erY; var erZ; axisX = tf._rotation01; axisY = tf._rotation11; axisZ = tf._rotation21; axisX = axisX < 0 ? -axisX : axisX; axisY = axisY < 0 ? -axisY : axisY; axisZ = axisZ < 0 ? -axisZ : axisZ; axis2X = axisX * axisX; axis2Y = axisY * axisY; axis2Z = axisZ * axisZ; var axis2x = axis2X; var axis2y = axis2Y; var axis2z = axis2Z; erX = Math.sqrt(1 - axis2x); erY = Math.sqrt(1 - axis2y); erZ = Math.sqrt(1 - axis2z); erX *= this._radius; erY *= this._radius; erZ *= this._radius; ehX = axisX * this._halfHeight; ehY = axisY * this._halfHeight; ehZ = axisZ * this._halfHeight; var max; var maxX; var maxY; var maxZ; maxX = erX + ehX; maxY = erY + ehY; maxZ = erZ + ehZ; aabb._minX = tf._positionX - maxX; aabb._minY = tf._positionY - maxY; aabb._minZ = tf._positionZ - maxZ; aabb._maxX = tf._positionX + maxX; aabb._maxY = tf._positionY + maxY; aabb._maxZ = tf._positionZ + maxZ; } computeLocalSupportingVertex(dir,out) { var rx = dir.x; var rz = dir.z; var len = rx * rx + rz * rz; var coreRadius = this._radius - this._gjkMargin; if(coreRadius < 0) { coreRadius = 0; } var invLen = len > 0 ? coreRadius / Math.sqrt(len) : 0; var coreHeight = this._halfHeight - this._gjkMargin; if(coreHeight < 0) { coreHeight = 0; } out.x = rx * invLen; out.y = dir.y > 0 ? coreHeight : -coreHeight; out.z = rz * invLen; } _rayCastLocal(beginX,beginY,beginZ,endX,endY,endZ,hit) { var p1x = beginX; var p1y = beginY; var p1z = beginZ; var p2x = endX; var p2y = endY; var p2z = endZ; var halfH = this._halfHeight; var dx = p2x - p1x; var dy = p2y - p1y; var dz = p2z - p1z; var tminy = 0; var tmaxy = 1; if(dy > -1e-6 && dy < 1e-6) { if(p1y <= -halfH || p1y >= halfH) { return false; } } else { var invDy = 1 / dy; var t1 = (-halfH - p1y) * invDy; var t2 = (halfH - p1y) * invDy; if(t1 > t2) { var tmp = t1; t1 = t2; t2 = tmp; } if(t1 > 0) { tminy = t1; } if(t2 < 1) { tmaxy = t2; } } if(tminy >= 1 || tmaxy <= 0) { return false; } var tminxz = 0; var tmaxxz = 1; var a = dx * dx + dz * dz; var b = p1x * dx + p1z * dz; var c = p1x * p1x + p1z * p1z - this._radius * this._radius; var D = b * b - a * c; if(D < 0) { return false; } var t; if(a > 0) { var sqrtD = Math.sqrt(D); tminxz = (-b - sqrtD) / a; tmaxxz = (-b + sqrtD) / a; if(tminxz >= 1 || tmaxxz <= 0) { return false; } } else { if(c >= 0) { return false; } tminxz = 0; tmaxxz = 1; } var min; if(tmaxxz <= tminy || tmaxy <= tminxz) { return false; } if(tminxz < tminy) { min = tminy; if(min == 0) { return false; } hit.normal.init(0,dy > 0 ? -1 : 1,0); } else { min = tminxz; if(min == 0) { return false; } var _this = hit.normal.init(p1x + dx * min,0,p1z + dz * min); var invLen = Math.sqrt(_this.x * _this.x + _this.y * _this.y + _this.z * _this.z); if(invLen > 0) { invLen = 1 / invLen; } var tx = _this.x * invLen; var ty = _this.y * invLen; var tz = _this.z * invLen; _this.x = tx; _this.y = ty; _this.z = tz; } hit.position.init(p1x + min * dx,p1y + min * dy,p1z + min * dz); hit.fraction = min; return true; } } oimo.collision.geometry.GeometryType = class oimo_collision_geometry_GeometryType { } oimo.collision.geometry.RayCastHit = class oimo_collision_geometry_RayCastHit { constructor() { this.position = new oimo.common.Vec3(); this.normal = new oimo.common.Vec3(); this.fraction = 0; } } oimo.collision.geometry.SphereGeometry = class oimo_collision_geometry_SphereGeometry extends oimo.collision.geometry.ConvexGeometry { constructor(radius) { super(0); this._radius = radius; this._gjkMargin = this._radius; this._updateMass(); } getRadius() { return this._radius; } _updateMass() { this._volume = 4.18879020478638608 * this._radius * this._radius * this._radius; this._inertiaCoeff00 = 0.4 * this._radius * this._radius; this._inertiaCoeff01 = 0; this._inertiaCoeff02 = 0; this._inertiaCoeff10 = 0; this._inertiaCoeff11 = 0.4 * this._radius * this._radius; this._inertiaCoeff12 = 0; this._inertiaCoeff20 = 0; this._inertiaCoeff21 = 0; this._inertiaCoeff22 = 0.4 * this._radius * this._radius; } _computeAabb(aabb,tf) { var radVec; var radVecX; var radVecY; var radVecZ; radVecX = this._radius; radVecY = this._radius; radVecZ = this._radius; aabb._minX = tf._positionX - radVecX; aabb._minY = tf._positionY - radVecY; aabb._minZ = tf._positionZ - radVecZ; aabb._maxX = tf._positionX + radVecX; aabb._maxY = tf._positionY + radVecY; aabb._maxZ = tf._positionZ + radVecZ; } computeLocalSupportingVertex(dir,out) { out.zero(); } _rayCastLocal(beginX,beginY,beginZ,endX,endY,endZ,hit) { var d; var dX; var dY; var dZ; dX = endX - beginX; dY = endY - beginY; dZ = endZ - beginZ; var a = dX * dX + dY * dY + dZ * dZ; var b = beginX * dX + beginY * dY + beginZ * dZ; var c = beginX * beginX + beginY * beginY + beginZ * beginZ - this._radius * this._radius; var D = b * b - a * c; if(D < 0) { return false; } var t = (-b - Math.sqrt(D)) / a; if(t < 0 || t > 1) { return false; } var hitPos; var hitPosX; var hitPosY; var hitPosZ; var hitNormal; var hitNormalX; var hitNormalY; var hitNormalZ; hitPosX = beginX + dX * t; hitPosY = beginY + dY * t; hitPosZ = beginZ + dZ * t; var l = hitPosX * hitPosX + hitPosY * hitPosY + hitPosZ * hitPosZ; if(l > 0) { l = 1 / Math.sqrt(l); } hitNormalX = hitPosX * l; hitNormalY = hitPosY * l; hitNormalZ = hitPosZ * l; var v = hit.position; v.x = hitPosX; v.y = hitPosY; v.z = hitPosZ; var v1 = hit.normal; v1.x = hitNormalX; v1.y = hitNormalY; v1.z = hitNormalZ; hit.fraction = t; return true; } } if(!oimo.collision.narrowphase) oimo.collision.narrowphase = {}; oimo.collision.narrowphase.CollisionMatrix = class oimo_collision_narrowphase_CollisionMatrix { constructor() { var this1 = new Array(8); this.detectors = this1; var this2 = this.detectors; var this3 = new Array(8); this2[0] = this3; var this4 = this.detectors; var this5 = new Array(8); this4[1] = this5; var this6 = this.detectors; var this7 = new Array(8); this6[2] = this7; var this8 = this.detectors; var this9 = new Array(8); this8[3] = this9; var this10 = this.detectors; var this11 = new Array(8); this10[4] = this11; var this12 = this.detectors; var this13 = new Array(8); this12[5] = this13; var gjkEpaDetector = new oimo.collision.narrowphase.detector.GjkEpaDetector(); var sp = 0; var bo = 1; var cy = 2; var co = 3; var ca = 4; var ch = 5; this.detectors[sp][sp] = new oimo.collision.narrowphase.detector.SphereSphereDetector(); this.detectors[sp][bo] = new oimo.collision.narrowphase.detector.SphereBoxDetector(false); this.detectors[sp][cy] = gjkEpaDetector; this.detectors[sp][co] = gjkEpaDetector; this.detectors[sp][ca] = new oimo.collision.narrowphase.detector.SphereCapsuleDetector(false); this.detectors[sp][ch] = gjkEpaDetector; this.detectors[bo][sp] = new oimo.collision.narrowphase.detector.SphereBoxDetector(true); this.detectors[bo][bo] = new oimo.collision.narrowphase.detector.BoxBoxDetector(); this.detectors[bo][cy] = gjkEpaDetector; this.detectors[bo][co] = gjkEpaDetector; this.detectors[bo][ca] = gjkEpaDetector; this.detectors[bo][ch] = gjkEpaDetector; this.detectors[cy][sp] = gjkEpaDetector; this.detectors[cy][bo] = gjkEpaDetector; this.detectors[cy][cy] = gjkEpaDetector; this.detectors[cy][co] = gjkEpaDetector; this.detectors[cy][ca] = gjkEpaDetector; this.detectors[cy][ch] = gjkEpaDetector; this.detectors[co][sp] = gjkEpaDetector; this.detectors[co][bo] = gjkEpaDetector; this.detectors[co][cy] = gjkEpaDetector; this.detectors[co][co] = gjkEpaDetector; this.detectors[co][ca] = gjkEpaDetector; this.detectors[co][ch] = gjkEpaDetector; this.detectors[ca][sp] = new oimo.collision.narrowphase.detector.SphereCapsuleDetector(true); this.detectors[ca][bo] = gjkEpaDetector; this.detectors[ca][cy] = gjkEpaDetector; this.detectors[ca][co] = gjkEpaDetector; this.detectors[ca][ca] = new oimo.collision.narrowphase.detector.CapsuleCapsuleDetector(); this.detectors[ca][ch] = gjkEpaDetector; this.detectors[ch][sp] = gjkEpaDetector; this.detectors[ch][bo] = gjkEpaDetector; this.detectors[ch][cy] = gjkEpaDetector; this.detectors[ch][co] = gjkEpaDetector; this.detectors[ch][ca] = gjkEpaDetector; this.detectors[ch][ch] = gjkEpaDetector; } getDetector(geomType1,geomType2) { return this.detectors[geomType1][geomType2]; } } oimo.collision.narrowphase.DetectorResult = class oimo_collision_narrowphase_DetectorResult { constructor() { this.numPoints = 0; this.normal = new oimo.common.Vec3(); var this1 = new Array(oimo.common.Setting.maxManifoldPoints); this.points = this1; this.incremental = false; var _g = 0; var _g1 = oimo.common.Setting.maxManifoldPoints; while(_g < _g1) { var i = _g++; this.points[i] = new oimo.collision.narrowphase.DetectorResultPoint(); } } getMaxDepth() { var max = 0; var _g = 0; var _g1 = this.numPoints; while(_g < _g1) { var i = _g++; if(this.points[i].depth > max) { max = this.points[i].depth; } } return max; } clear() { this.numPoints = 0; var _g = 0; var _g1 = this.points; while(_g < _g1.length) { var p = _g1[_g]; ++_g; p.position1.zero(); p.position2.zero(); p.depth = 0; p.id = 0; } this.normal.zero(); } } oimo.collision.narrowphase.DetectorResultPoint = class oimo_collision_narrowphase_DetectorResultPoint { constructor() { this.position1 = new oimo.common.Vec3(); this.position2 = new oimo.common.Vec3(); this.depth = 0; this.id = 0; } } if(!oimo.collision.narrowphase.detector) oimo.collision.narrowphase.detector = {}; oimo.collision.narrowphase.detector.Detector = class oimo_collision_narrowphase_detector_Detector { constructor(swapped) { this.swapped = swapped; } setNormal(result,nX,nY,nZ) { var v = result.normal; v.x = nX; v.y = nY; v.z = nZ; if(this.swapped) { var _this = result.normal; var tx = -_this.x; var ty = -_this.y; var tz = -_this.z; _this.x = tx; _this.y = ty; _this.z = tz; } } addPoint(result,pos1X,pos1Y,pos1Z,pos2X,pos2Y,pos2Z,depth,id) { var p = result.points[result.numPoints++]; p.depth = depth; p.id = id; if(this.swapped) { var v = p.position1; v.x = pos2X; v.y = pos2Y; v.z = pos2Z; var v1 = p.position2; v1.x = pos1X; v1.y = pos1Y; v1.z = pos1Z; } else { var v2 = p.position1; v2.x = pos1X; v2.y = pos1Y; v2.z = pos1Z; var v3 = p.position2; v3.x = pos2X; v3.y = pos2Y; v3.z = pos2Z; } } detectImpl(result,geom1,geom2,tf1,tf2,cachedData) { } detect(result,geom1,geom2,transform1,transform2,cachedData) { result.numPoints = 0; var _g = 0; var _g1 = result.points; while(_g < _g1.length) { var p = _g1[_g]; ++_g; p.position1.zero(); p.position2.zero(); p.depth = 0; p.id = 0; } result.normal.zero(); if(this.swapped) { this.detectImpl(result,geom2,geom1,transform2,transform1,cachedData); } else { this.detectImpl(result,geom1,geom2,transform1,transform2,cachedData); } } } oimo.collision.narrowphase.detector.BoxBoxDetector = class oimo_collision_narrowphase_detector_BoxBoxDetector extends oimo.collision.narrowphase.detector.Detector { constructor() { super(false); this.clipper = new oimo.collision.narrowphase.detector._BoxBoxDetector.FaceClipper(); } detectImpl(result,geom1,geom2,tf1,tf2,cachedData) { var b1 = geom1; var b2 = geom2; result.incremental = false; var c1; var c1X; var c1Y; var c1Z; var c2; var c2X; var c2Y; var c2Z; var c12; var c12X; var c12Y; var c12Z; c1X = tf1._positionX; c1Y = tf1._positionY; c1Z = tf1._positionZ; c2X = tf2._positionX; c2Y = tf2._positionY; c2Z = tf2._positionZ; c12X = c2X - c1X; c12Y = c2Y - c1Y; c12Z = c2Z - c1Z; var x1; var x1X; var x1Y; var x1Z; var y1; var y1X; var y1Y; var y1Z; var z1; var z1X; var z1Y; var z1Z; var x2; var x2X; var x2Y; var x2Z; var y2; var y2X; var y2Y; var y2Z; var z2; var z2X; var z2Y; var z2Z; x1X = tf1._rotation00; x1Y = tf1._rotation10; x1Z = tf1._rotation20; y1X = tf1._rotation01; y1Y = tf1._rotation11; y1Z = tf1._rotation21; z1X = tf1._rotation02; z1Y = tf1._rotation12; z1Z = tf1._rotation22; x2X = tf2._rotation00; x2Y = tf2._rotation10; x2Z = tf2._rotation20; y2X = tf2._rotation01; y2Y = tf2._rotation11; y2Z = tf2._rotation21; z2X = tf2._rotation02; z2Y = tf2._rotation12; z2Z = tf2._rotation22; var w1 = b1._halfExtentsX; var h1 = b1._halfExtentsY; var d1 = b1._halfExtentsZ; var w2 = b2._halfExtentsX; var h2 = b2._halfExtentsY; var d2 = b2._halfExtentsZ; var sx1; var sx1X; var sx1Y; var sx1Z; var sy1; var sy1X; var sy1Y; var sy1Z; var sz1; var sz1X; var sz1Y; var sz1Z; var sx2; var sx2X; var sx2Y; var sx2Z; var sy2; var sy2X; var sy2Y; var sy2Z; var sz2; var sz2X; var sz2Y; var sz2Z; sx1X = x1X * w1; sx1Y = x1Y * w1; sx1Z = x1Z * w1; sy1X = y1X * h1; sy1Y = y1Y * h1; sy1Z = y1Z * h1; sz1X = z1X * d1; sz1Y = z1Y * d1; sz1Z = z1Z * d1; sx2X = x2X * w2; sx2Y = x2Y * w2; sx2Z = x2Z * w2; sy2X = y2X * h2; sy2Y = y2Y * h2; sy2Z = y2Z * h2; sz2X = z2X * d2; sz2Y = z2Y * d2; sz2Z = z2Z * d2; var projSum; var projC12Abs; var mDepth = 1e65536; var mId = -1; var mSign = 0; var mAxis; var mAxisX; var mAxisY; var mAxisZ; mAxisX = 0; mAxisY = 0; mAxisZ = 0; var proj1 = w1; var dx = x1X * sx2X + x1Y * sx2Y + x1Z * sx2Z; var dy = x1X * sy2X + x1Y * sy2Y + x1Z * sy2Z; var dz = x1X * sz2X + x1Y * sz2Y + x1Z * sz2Z; if(dx < 0) { dx = -dx; } if(dy < 0) { dy = -dy; } if(dz < 0) { dz = -dz; } var proj2 = dx + dy + dz; var projC12 = x1X * c12X + x1Y * c12Y + x1Z * c12Z; var sum = proj1 + proj2; var neg = projC12 < 0; var abs = neg ? -projC12 : projC12; if(abs < sum) { var depth = sum - abs; if(depth < mDepth) { mDepth = depth; mId = 0; mAxisX = x1X; mAxisY = x1Y; mAxisZ = x1Z; mSign = neg ? -1 : 1; } } else { return; } proj1 = h1; var dx1 = y1X * sx2X + y1Y * sx2Y + y1Z * sx2Z; var dy1 = y1X * sy2X + y1Y * sy2Y + y1Z * sy2Z; var dz1 = y1X * sz2X + y1Y * sz2Y + y1Z * sz2Z; if(dx1 < 0) { dx1 = -dx1; } if(dy1 < 0) { dy1 = -dy1; } if(dz1 < 0) { dz1 = -dz1; } proj2 = dx1 + dy1 + dz1; projC12 = y1X * c12X + y1Y * c12Y + y1Z * c12Z; var sum1 = proj1 + proj2; var neg1 = projC12 < 0; var abs1 = neg1 ? -projC12 : projC12; if(abs1 < sum1) { var depth1 = sum1 - abs1; if(depth1 < mDepth) { mDepth = depth1; mId = 1; mAxisX = y1X; mAxisY = y1Y; mAxisZ = y1Z; mSign = neg1 ? -1 : 1; } } else { return; } proj1 = d1; var dx2 = z1X * sx2X + z1Y * sx2Y + z1Z * sx2Z; var dy2 = z1X * sy2X + z1Y * sy2Y + z1Z * sy2Z; var dz2 = z1X * sz2X + z1Y * sz2Y + z1Z * sz2Z; if(dx2 < 0) { dx2 = -dx2; } if(dy2 < 0) { dy2 = -dy2; } if(dz2 < 0) { dz2 = -dz2; } proj2 = dx2 + dy2 + dz2; projC12 = z1X * c12X + z1Y * c12Y + z1Z * c12Z; var sum2 = proj1 + proj2; var neg2 = projC12 < 0; var abs2 = neg2 ? -projC12 : projC12; if(abs2 < sum2) { var depth2 = sum2 - abs2; if(depth2 < mDepth) { mDepth = depth2; mId = 2; mAxisX = z1X; mAxisY = z1Y; mAxisZ = z1Z; mSign = neg2 ? -1 : 1; } } else { return; } if(mDepth > oimo.common.Setting.linearSlop) { mDepth -= oimo.common.Setting.linearSlop; } else { mDepth = 0; } var dx3 = x2X * sx1X + x2Y * sx1Y + x2Z * sx1Z; var dy3 = x2X * sy1X + x2Y * sy1Y + x2Z * sy1Z; var dz3 = x2X * sz1X + x2Y * sz1Y + x2Z * sz1Z; if(dx3 < 0) { dx3 = -dx3; } if(dy3 < 0) { dy3 = -dy3; } if(dz3 < 0) { dz3 = -dz3; } proj1 = dx3 + dy3 + dz3; proj2 = w2; projC12 = x2X * c12X + x2Y * c12Y + x2Z * c12Z; var sum3 = proj1 + proj2; var neg3 = projC12 < 0; var abs3 = neg3 ? -projC12 : projC12; if(abs3 < sum3) { var depth3 = sum3 - abs3; if(depth3 < mDepth) { mDepth = depth3; mId = 3; mAxisX = x2X; mAxisY = x2Y; mAxisZ = x2Z; mSign = neg3 ? -1 : 1; } } else { return; } var dx4 = y2X * sx1X + y2Y * sx1Y + y2Z * sx1Z; var dy4 = y2X * sy1X + y2Y * sy1Y + y2Z * sy1Z; var dz4 = y2X * sz1X + y2Y * sz1Y + y2Z * sz1Z; if(dx4 < 0) { dx4 = -dx4; } if(dy4 < 0) { dy4 = -dy4; } if(dz4 < 0) { dz4 = -dz4; } proj1 = dx4 + dy4 + dz4; proj2 = h2; projC12 = y2X * c12X + y2Y * c12Y + y2Z * c12Z; var sum4 = proj1 + proj2; var neg4 = projC12 < 0; var abs4 = neg4 ? -projC12 : projC12; if(abs4 < sum4) { var depth4 = sum4 - abs4; if(depth4 < mDepth) { mDepth = depth4; mId = 4; mAxisX = y2X; mAxisY = y2Y; mAxisZ = y2Z; mSign = neg4 ? -1 : 1; } } else { return; } var dx5 = z2X * sx1X + z2Y * sx1Y + z2Z * sx1Z; var dy5 = z2X * sy1X + z2Y * sy1Y + z2Z * sy1Z; var dz5 = z2X * sz1X + z2Y * sz1Y + z2Z * sz1Z; if(dx5 < 0) { dx5 = -dx5; } if(dy5 < 0) { dy5 = -dy5; } if(dz5 < 0) { dz5 = -dz5; } proj1 = dx5 + dy5 + dz5; proj2 = d2; projC12 = z2X * c12X + z2Y * c12Y + z2Z * c12Z; var sum5 = proj1 + proj2; var neg5 = projC12 < 0; var abs5 = neg5 ? -projC12 : projC12; if(abs5 < sum5) { var depth5 = sum5 - abs5; if(depth5 < mDepth) { mDepth = depth5; mId = 5; mAxisX = z2X; mAxisY = z2Y; mAxisZ = z2Z; mSign = neg5 ? -1 : 1; } } else { return; } if(mDepth > oimo.common.Setting.linearSlop) { mDepth -= oimo.common.Setting.linearSlop; } else { mDepth = 0; } var edgeAxis; var edgeAxisX; var edgeAxisY; var edgeAxisZ; edgeAxisX = x1Y * x2Z - x1Z * x2Y; edgeAxisY = x1Z * x2X - x1X * x2Z; edgeAxisZ = x1X * x2Y - x1Y * x2X; if(!(edgeAxisX == 0 && edgeAxisY == 0 && edgeAxisZ == 0)) { var l = edgeAxisX * edgeAxisX + edgeAxisY * edgeAxisY + edgeAxisZ * edgeAxisZ; if(l > 0) { l = 1 / Math.sqrt(l); } edgeAxisX *= l; edgeAxisY *= l; edgeAxisZ *= l; var dx6 = edgeAxisX * sy1X + edgeAxisY * sy1Y + edgeAxisZ * sy1Z; var dy6 = edgeAxisX * sz1X + edgeAxisY * sz1Y + edgeAxisZ * sz1Z; if(dx6 < 0) { dx6 = -dx6; } if(dy6 < 0) { dy6 = -dy6; } proj1 = dx6 + dy6; var dx7 = edgeAxisX * sy2X + edgeAxisY * sy2Y + edgeAxisZ * sy2Z; var dy7 = edgeAxisX * sz2X + edgeAxisY * sz2Y + edgeAxisZ * sz2Z; if(dx7 < 0) { dx7 = -dx7; } if(dy7 < 0) { dy7 = -dy7; } proj2 = dx7 + dy7; projC12 = edgeAxisX * c12X + edgeAxisY * c12Y + edgeAxisZ * c12Z; var sum6 = proj1 + proj2; var neg6 = projC12 < 0; var abs6 = neg6 ? -projC12 : projC12; if(abs6 < sum6) { var depth6 = sum6 - abs6; if(depth6 < mDepth) { mDepth = depth6; mId = 6; mAxisX = edgeAxisX; mAxisY = edgeAxisY; mAxisZ = edgeAxisZ; mSign = neg6 ? -1 : 1; } } else { return; } } edgeAxisX = x1Y * y2Z - x1Z * y2Y; edgeAxisY = x1Z * y2X - x1X * y2Z; edgeAxisZ = x1X * y2Y - x1Y * y2X; if(!(edgeAxisX == 0 && edgeAxisY == 0 && edgeAxisZ == 0)) { var l1 = edgeAxisX * edgeAxisX + edgeAxisY * edgeAxisY + edgeAxisZ * edgeAxisZ; if(l1 > 0) { l1 = 1 / Math.sqrt(l1); } edgeAxisX *= l1; edgeAxisY *= l1; edgeAxisZ *= l1; var dx8 = edgeAxisX * sy1X + edgeAxisY * sy1Y + edgeAxisZ * sy1Z; var dy8 = edgeAxisX * sz1X + edgeAxisY * sz1Y + edgeAxisZ * sz1Z; if(dx8 < 0) { dx8 = -dx8; } if(dy8 < 0) { dy8 = -dy8; } proj1 = dx8 + dy8; var dx9 = edgeAxisX * sx2X + edgeAxisY * sx2Y + edgeAxisZ * sx2Z; var dy9 = edgeAxisX * sz2X + edgeAxisY * sz2Y + edgeAxisZ * sz2Z; if(dx9 < 0) { dx9 = -dx9; } if(dy9 < 0) { dy9 = -dy9; } proj2 = dx9 + dy9; projC12 = edgeAxisX * c12X + edgeAxisY * c12Y + edgeAxisZ * c12Z; var sum7 = proj1 + proj2; var neg7 = projC12 < 0; var abs7 = neg7 ? -projC12 : projC12; if(abs7 < sum7) { var depth7 = sum7 - abs7; if(depth7 < mDepth) { mDepth = depth7; mId = 7; mAxisX = edgeAxisX; mAxisY = edgeAxisY; mAxisZ = edgeAxisZ; mSign = neg7 ? -1 : 1; } } else { return; } } edgeAxisX = x1Y * z2Z - x1Z * z2Y; edgeAxisY = x1Z * z2X - x1X * z2Z; edgeAxisZ = x1X * z2Y - x1Y * z2X; if(!(edgeAxisX == 0 && edgeAxisY == 0 && edgeAxisZ == 0)) { var l2 = edgeAxisX * edgeAxisX + edgeAxisY * edgeAxisY + edgeAxisZ * edgeAxisZ; if(l2 > 0) { l2 = 1 / Math.sqrt(l2); } edgeAxisX *= l2; edgeAxisY *= l2; edgeAxisZ *= l2; var dx10 = edgeAxisX * sy1X + edgeAxisY * sy1Y + edgeAxisZ * sy1Z; var dy10 = edgeAxisX * sz1X + edgeAxisY * sz1Y + edgeAxisZ * sz1Z; if(dx10 < 0) { dx10 = -dx10; } if(dy10 < 0) { dy10 = -dy10; } proj1 = dx10 + dy10; var dx11 = edgeAxisX * sx2X + edgeAxisY * sx2Y + edgeAxisZ * sx2Z; var dy11 = edgeAxisX * sy2X + edgeAxisY * sy2Y + edgeAxisZ * sy2Z; if(dx11 < 0) { dx11 = -dx11; } if(dy11 < 0) { dy11 = -dy11; } proj2 = dx11 + dy11; projC12 = edgeAxisX * c12X + edgeAxisY * c12Y + edgeAxisZ * c12Z; var sum8 = proj1 + proj2; var neg8 = projC12 < 0; var abs8 = neg8 ? -projC12 : projC12; if(abs8 < sum8) { var depth8 = sum8 - abs8; if(depth8 < mDepth) { mDepth = depth8; mId = 8; mAxisX = edgeAxisX; mAxisY = edgeAxisY; mAxisZ = edgeAxisZ; mSign = neg8 ? -1 : 1; } } else { return; } } edgeAxisX = y1Y * x2Z - y1Z * x2Y; edgeAxisY = y1Z * x2X - y1X * x2Z; edgeAxisZ = y1X * x2Y - y1Y * x2X; if(!(edgeAxisX == 0 && edgeAxisY == 0 && edgeAxisZ == 0)) { var l3 = edgeAxisX * edgeAxisX + edgeAxisY * edgeAxisY + edgeAxisZ * edgeAxisZ; if(l3 > 0) { l3 = 1 / Math.sqrt(l3); } edgeAxisX *= l3; edgeAxisY *= l3; edgeAxisZ *= l3; var dx12 = edgeAxisX * sx1X + edgeAxisY * sx1Y + edgeAxisZ * sx1Z; var dy12 = edgeAxisX * sz1X + edgeAxisY * sz1Y + edgeAxisZ * sz1Z; if(dx12 < 0) { dx12 = -dx12; } if(dy12 < 0) { dy12 = -dy12; } proj1 = dx12 + dy12; var dx13 = edgeAxisX * sy2X + edgeAxisY * sy2Y + edgeAxisZ * sy2Z; var dy13 = edgeAxisX * sz2X + edgeAxisY * sz2Y + edgeAxisZ * sz2Z; if(dx13 < 0) { dx13 = -dx13; } if(dy13 < 0) { dy13 = -dy13; } proj2 = dx13 + dy13; projC12 = edgeAxisX * c12X + edgeAxisY * c12Y + edgeAxisZ * c12Z; var sum9 = proj1 + proj2; var neg9 = projC12 < 0; var abs9 = neg9 ? -projC12 : projC12; if(abs9 < sum9) { var depth9 = sum9 - abs9; if(depth9 < mDepth) { mDepth = depth9; mId = 9; mAxisX = edgeAxisX; mAxisY = edgeAxisY; mAxisZ = edgeAxisZ; mSign = neg9 ? -1 : 1; } } else { return; } } edgeAxisX = y1Y * y2Z - y1Z * y2Y; edgeAxisY = y1Z * y2X - y1X * y2Z; edgeAxisZ = y1X * y2Y - y1Y * y2X; if(!(edgeAxisX == 0 && edgeAxisY == 0 && edgeAxisZ == 0)) { var l4 = edgeAxisX * edgeAxisX + edgeAxisY * edgeAxisY + edgeAxisZ * edgeAxisZ; if(l4 > 0) { l4 = 1 / Math.sqrt(l4); } edgeAxisX *= l4; edgeAxisY *= l4; edgeAxisZ *= l4; var dx14 = edgeAxisX * sx1X + edgeAxisY * sx1Y + edgeAxisZ * sx1Z; var dy14 = edgeAxisX * sz1X + edgeAxisY * sz1Y + edgeAxisZ * sz1Z; if(dx14 < 0) { dx14 = -dx14; } if(dy14 < 0) { dy14 = -dy14; } proj1 = dx14 + dy14; var dx15 = edgeAxisX * sx2X + edgeAxisY * sx2Y + edgeAxisZ * sx2Z; var dy15 = edgeAxisX * sz2X + edgeAxisY * sz2Y + edgeAxisZ * sz2Z; if(dx15 < 0) { dx15 = -dx15; } if(dy15 < 0) { dy15 = -dy15; } proj2 = dx15 + dy15; projC12 = edgeAxisX * c12X + edgeAxisY * c12Y + edgeAxisZ * c12Z; var sum10 = proj1 + proj2; var neg10 = projC12 < 0; var abs10 = neg10 ? -projC12 : projC12; if(abs10 < sum10) { var depth10 = sum10 - abs10; if(depth10 < mDepth) { mDepth = depth10; mId = 10; mAxisX = edgeAxisX; mAxisY = edgeAxisY; mAxisZ = edgeAxisZ; mSign = neg10 ? -1 : 1; } } else { return; } } edgeAxisX = y1Y * z2Z - y1Z * z2Y; edgeAxisY = y1Z * z2X - y1X * z2Z; edgeAxisZ = y1X * z2Y - y1Y * z2X; if(!(edgeAxisX == 0 && edgeAxisY == 0 && edgeAxisZ == 0)) { var l5 = edgeAxisX * edgeAxisX + edgeAxisY * edgeAxisY + edgeAxisZ * edgeAxisZ; if(l5 > 0) { l5 = 1 / Math.sqrt(l5); } edgeAxisX *= l5; edgeAxisY *= l5; edgeAxisZ *= l5; var dx16 = edgeAxisX * sx1X + edgeAxisY * sx1Y + edgeAxisZ * sx1Z; var dy16 = edgeAxisX * sz1X + edgeAxisY * sz1Y + edgeAxisZ * sz1Z; if(dx16 < 0) { dx16 = -dx16; } if(dy16 < 0) { dy16 = -dy16; } proj1 = dx16 + dy16; var dx17 = edgeAxisX * sx2X + edgeAxisY * sx2Y + edgeAxisZ * sx2Z; var dy17 = edgeAxisX * sy2X + edgeAxisY * sy2Y + edgeAxisZ * sy2Z; if(dx17 < 0) { dx17 = -dx17; } if(dy17 < 0) { dy17 = -dy17; } proj2 = dx17 + dy17; projC12 = edgeAxisX * c12X + edgeAxisY * c12Y + edgeAxisZ * c12Z; var sum11 = proj1 + proj2; var neg11 = projC12 < 0; var abs11 = neg11 ? -projC12 : projC12; if(abs11 < sum11) { var depth11 = sum11 - abs11; if(depth11 < mDepth) { mDepth = depth11; mId = 11; mAxisX = edgeAxisX; mAxisY = edgeAxisY; mAxisZ = edgeAxisZ; mSign = neg11 ? -1 : 1; } } else { return; } } edgeAxisX = z1Y * x2Z - z1Z * x2Y; edgeAxisY = z1Z * x2X - z1X * x2Z; edgeAxisZ = z1X * x2Y - z1Y * x2X; if(!(edgeAxisX == 0 && edgeAxisY == 0 && edgeAxisZ == 0)) { var l6 = edgeAxisX * edgeAxisX + edgeAxisY * edgeAxisY + edgeAxisZ * edgeAxisZ; if(l6 > 0) { l6 = 1 / Math.sqrt(l6); } edgeAxisX *= l6; edgeAxisY *= l6; edgeAxisZ *= l6; var dx18 = edgeAxisX * sx1X + edgeAxisY * sx1Y + edgeAxisZ * sx1Z; var dy18 = edgeAxisX * sy1X + edgeAxisY * sy1Y + edgeAxisZ * sy1Z; if(dx18 < 0) { dx18 = -dx18; } if(dy18 < 0) { dy18 = -dy18; } proj1 = dx18 + dy18; var dx19 = edgeAxisX * sy2X + edgeAxisY * sy2Y + edgeAxisZ * sy2Z; var dy19 = edgeAxisX * sz2X + edgeAxisY * sz2Y + edgeAxisZ * sz2Z; if(dx19 < 0) { dx19 = -dx19; } if(dy19 < 0) { dy19 = -dy19; } proj2 = dx19 + dy19; projC12 = edgeAxisX * c12X + edgeAxisY * c12Y + edgeAxisZ * c12Z; var sum12 = proj1 + proj2; var neg12 = projC12 < 0; var abs12 = neg12 ? -projC12 : projC12; if(abs12 < sum12) { var depth12 = sum12 - abs12; if(depth12 < mDepth) { mDepth = depth12; mId = 12; mAxisX = edgeAxisX; mAxisY = edgeAxisY; mAxisZ = edgeAxisZ; mSign = neg12 ? -1 : 1; } } else { return; } } edgeAxisX = z1Y * y2Z - z1Z * y2Y; edgeAxisY = z1Z * y2X - z1X * y2Z; edgeAxisZ = z1X * y2Y - z1Y * y2X; if(!(edgeAxisX == 0 && edgeAxisY == 0 && edgeAxisZ == 0)) { var l7 = edgeAxisX * edgeAxisX + edgeAxisY * edgeAxisY + edgeAxisZ * edgeAxisZ; if(l7 > 0) { l7 = 1 / Math.sqrt(l7); } edgeAxisX *= l7; edgeAxisY *= l7; edgeAxisZ *= l7; var dx20 = edgeAxisX * sx1X + edgeAxisY * sx1Y + edgeAxisZ * sx1Z; var dy20 = edgeAxisX * sy1X + edgeAxisY * sy1Y + edgeAxisZ * sy1Z; if(dx20 < 0) { dx20 = -dx20; } if(dy20 < 0) { dy20 = -dy20; } proj1 = dx20 + dy20; var dx21 = edgeAxisX * sx2X + edgeAxisY * sx2Y + edgeAxisZ * sx2Z; var dy21 = edgeAxisX * sz2X + edgeAxisY * sz2Y + edgeAxisZ * sz2Z; if(dx21 < 0) { dx21 = -dx21; } if(dy21 < 0) { dy21 = -dy21; } proj2 = dx21 + dy21; projC12 = edgeAxisX * c12X + edgeAxisY * c12Y + edgeAxisZ * c12Z; var sum13 = proj1 + proj2; var neg13 = projC12 < 0; var abs13 = neg13 ? -projC12 : projC12; if(abs13 < sum13) { var depth13 = sum13 - abs13; if(depth13 < mDepth) { mDepth = depth13; mId = 13; mAxisX = edgeAxisX; mAxisY = edgeAxisY; mAxisZ = edgeAxisZ; mSign = neg13 ? -1 : 1; } } else { return; } } edgeAxisX = z1Y * z2Z - z1Z * z2Y; edgeAxisY = z1Z * z2X - z1X * z2Z; edgeAxisZ = z1X * z2Y - z1Y * z2X; if(!(edgeAxisX == 0 && edgeAxisY == 0 && edgeAxisZ == 0)) { var l8 = edgeAxisX * edgeAxisX + edgeAxisY * edgeAxisY + edgeAxisZ * edgeAxisZ; if(l8 > 0) { l8 = 1 / Math.sqrt(l8); } edgeAxisX *= l8; edgeAxisY *= l8; edgeAxisZ *= l8; var dx22 = edgeAxisX * sx1X + edgeAxisY * sx1Y + edgeAxisZ * sx1Z; var dy22 = edgeAxisX * sy1X + edgeAxisY * sy1Y + edgeAxisZ * sy1Z; if(dx22 < 0) { dx22 = -dx22; } if(dy22 < 0) { dy22 = -dy22; } proj1 = dx22 + dy22; var dx23 = edgeAxisX * sx2X + edgeAxisY * sx2Y + edgeAxisZ * sx2Z; var dy23 = edgeAxisX * sy2X + edgeAxisY * sy2Y + edgeAxisZ * sy2Z; if(dx23 < 0) { dx23 = -dx23; } if(dy23 < 0) { dy23 = -dy23; } proj2 = dx23 + dy23; projC12 = edgeAxisX * c12X + edgeAxisY * c12Y + edgeAxisZ * c12Z; var sum14 = proj1 + proj2; var neg14 = projC12 < 0; var abs14 = neg14 ? -projC12 : projC12; if(abs14 < sum14) { var depth14 = sum14 - abs14; if(depth14 < mDepth) { mDepth = depth14; mId = 14; mAxisX = edgeAxisX; mAxisY = edgeAxisY; mAxisZ = edgeAxisZ; mSign = neg14 ? -1 : 1; } } else { return; } } if(mId >= 6) { mAxisX *= mSign; mAxisY *= mSign; mAxisZ *= mSign; var id1 = (mId - 6) / 3 | 0; var id2 = mId - 6 - id1 * 3; var p1; var p1X; var p1Y; var p1Z; var p2; var p2X; var p2Y; var p2Z; var d11; var d1X; var d1Y; var d1Z; var d21; var d2X; var d2Y; var d2Z; switch(id1) { case 0: d1X = x1X; d1Y = x1Y; d1Z = x1Z; var signX = sy1X * mAxisX + sy1Y * mAxisY + sy1Z * mAxisZ > 0; var signY = sz1X * mAxisX + sz1Y * mAxisY + sz1Z * mAxisZ > 0; if(signX) { if(signY) { p1X = sy1X + sz1X; p1Y = sy1Y + sz1Y; p1Z = sy1Z + sz1Z; } else { p1X = sy1X - sz1X; p1Y = sy1Y - sz1Y; p1Z = sy1Z - sz1Z; } } else if(signY) { p1X = sz1X - sy1X; p1Y = sz1Y - sy1Y; p1Z = sz1Z - sy1Z; } else { p1X = sy1X + sz1X; p1Y = sy1Y + sz1Y; p1Z = sy1Z + sz1Z; p1X = -p1X; p1Y = -p1Y; p1Z = -p1Z; } break; case 1: d1X = y1X; d1Y = y1Y; d1Z = y1Z; var signX1 = sx1X * mAxisX + sx1Y * mAxisY + sx1Z * mAxisZ > 0; var signY1 = sz1X * mAxisX + sz1Y * mAxisY + sz1Z * mAxisZ > 0; if(signX1) { if(signY1) { p1X = sx1X + sz1X; p1Y = sx1Y + sz1Y; p1Z = sx1Z + sz1Z; } else { p1X = sx1X - sz1X; p1Y = sx1Y - sz1Y; p1Z = sx1Z - sz1Z; } } else if(signY1) { p1X = sz1X - sx1X; p1Y = sz1Y - sx1Y; p1Z = sz1Z - sx1Z; } else { p1X = sx1X + sz1X; p1Y = sx1Y + sz1Y; p1Z = sx1Z + sz1Z; p1X = -p1X; p1Y = -p1Y; p1Z = -p1Z; } break; default: d1X = z1X; d1Y = z1Y; d1Z = z1Z; var signX2 = sx1X * mAxisX + sx1Y * mAxisY + sx1Z * mAxisZ > 0; var signY2 = sy1X * mAxisX + sy1Y * mAxisY + sy1Z * mAxisZ > 0; if(signX2) { if(signY2) { p1X = sx1X + sy1X; p1Y = sx1Y + sy1Y; p1Z = sx1Z + sy1Z; } else { p1X = sx1X - sy1X; p1Y = sx1Y - sy1Y; p1Z = sx1Z - sy1Z; } } else if(signY2) { p1X = sy1X - sx1X; p1Y = sy1Y - sx1Y; p1Z = sy1Z - sx1Z; } else { p1X = sx1X + sy1X; p1Y = sx1Y + sy1Y; p1Z = sx1Z + sy1Z; p1X = -p1X; p1Y = -p1Y; p1Z = -p1Z; } } p1X = c1X + p1X; p1Y = c1Y + p1Y; p1Z = c1Z + p1Z; switch(id2) { case 0: d2X = x2X; d2Y = x2Y; d2Z = x2Z; var signX3 = sy2X * mAxisX + sy2Y * mAxisY + sy2Z * mAxisZ > 0; var signY3 = sz2X * mAxisX + sz2Y * mAxisY + sz2Z * mAxisZ > 0; if(signX3) { if(signY3) { p2X = sy2X + sz2X; p2Y = sy2Y + sz2Y; p2Z = sy2Z + sz2Z; } else { p2X = sy2X - sz2X; p2Y = sy2Y - sz2Y; p2Z = sy2Z - sz2Z; } } else if(signY3) { p2X = sz2X - sy2X; p2Y = sz2Y - sy2Y; p2Z = sz2Z - sy2Z; } else { p2X = sy2X + sz2X; p2Y = sy2Y + sz2Y; p2Z = sy2Z + sz2Z; p2X = -p2X; p2Y = -p2Y; p2Z = -p2Z; } break; case 1: d2X = y2X; d2Y = y2Y; d2Z = y2Z; var signX4 = sx2X * mAxisX + sx2Y * mAxisY + sx2Z * mAxisZ > 0; var signY4 = sz2X * mAxisX + sz2Y * mAxisY + sz2Z * mAxisZ > 0; if(signX4) { if(signY4) { p2X = sx2X + sz2X; p2Y = sx2Y + sz2Y; p2Z = sx2Z + sz2Z; } else { p2X = sx2X - sz2X; p2Y = sx2Y - sz2Y; p2Z = sx2Z - sz2Z; } } else if(signY4) { p2X = sz2X - sx2X; p2Y = sz2Y - sx2Y; p2Z = sz2Z - sx2Z; } else { p2X = sx2X + sz2X; p2Y = sx2Y + sz2Y; p2Z = sx2Z + sz2Z; p2X = -p2X; p2Y = -p2Y; p2Z = -p2Z; } break; default: d2X = z2X; d2Y = z2Y; d2Z = z2Z; var signX5 = sx2X * mAxisX + sx2Y * mAxisY + sx2Z * mAxisZ > 0; var signY5 = sy2X * mAxisX + sy2Y * mAxisY + sy2Z * mAxisZ > 0; if(signX5) { if(signY5) { p2X = sx2X + sy2X; p2Y = sx2Y + sy2Y; p2Z = sx2Z + sy2Z; } else { p2X = sx2X - sy2X; p2Y = sx2Y - sy2Y; p2Z = sx2Z - sy2Z; } } else if(signY5) { p2X = sy2X - sx2X; p2Y = sy2Y - sx2Y; p2Z = sy2Z - sx2Z; } else { p2X = sx2X + sy2X; p2Y = sx2Y + sy2Y; p2Z = sx2Z + sy2Z; p2X = -p2X; p2Y = -p2Y; p2Z = -p2Z; } } p2X = c2X - p2X; p2Y = c2Y - p2Y; p2Z = c2Z - p2Z; var r; var rX; var rY; var rZ; rX = p1X - p2X; rY = p1Y - p2Y; rZ = p1Z - p2Z; var dot12 = d1X * d2X + d1Y * d2Y + d1Z * d2Z; var dot1r = d1X * rX + d1Y * rY + d1Z * rZ; var dot2r = d2X * rX + d2Y * rY + d2Z * rZ; var invDet = 1 / (1 - dot12 * dot12); var t1 = (dot12 * dot2r - dot1r) * invDet; var t2 = (dot2r - dot12 * dot1r) * invDet; var cp1; var cp1X; var cp1Y; var cp1Z; var cp2; var cp2X; var cp2Y; var cp2Z; cp1X = p1X + d1X * t1; cp1Y = p1Y + d1Y * t1; cp1Z = p1Z + d1Z * t1; cp2X = p2X + d2X * t2; cp2Y = p2Y + d2Y * t2; cp2Z = p2Z + d2Z * t2; var normal; var normalX; var normalY; var normalZ; normalX = -mAxisX; normalY = -mAxisY; normalZ = -mAxisZ; this.setNormal(result,normalX,normalY,normalZ); this.addPoint(result,cp1X,cp1Y,cp1Z,cp2X,cp2Y,cp2Z,mDepth,4); return; } var tmp; var tmpX; var tmpY; var tmpZ; var swapped; if(mId >= 3) { mSign = -mSign; c12X = -c12X; c12Y = -c12Y; c12Z = -c12Z; var tmp1 = b1; b1 = b2; b2 = tmp1; var tmp2 = w1; w1 = w2; w2 = tmp2; var tmp3 = h1; h1 = h2; h2 = tmp3; var tmp4 = d1; d1 = d2; d2 = tmp4; tmpX = c1X; tmpY = c1Y; tmpZ = c1Z; c1X = c2X; c1Y = c2Y; c1Z = c2Z; c2X = tmpX; c2Y = tmpY; c2Z = tmpZ; tmpX = x1X; tmpY = x1Y; tmpZ = x1Z; x1X = x2X; x1Y = x2Y; x1Z = x2Z; x2X = tmpX; x2Y = tmpY; x2Z = tmpZ; tmpX = y1X; tmpY = y1Y; tmpZ = y1Z; y1X = y2X; y1Y = y2Y; y1Z = y2Z; y2X = tmpX; y2Y = tmpY; y2Z = tmpZ; tmpX = z1X; tmpY = z1Y; tmpZ = z1Z; z1X = z2X; z1Y = z2Y; z1Z = z2Z; z2X = tmpX; z2Y = tmpY; z2Z = tmpZ; tmpX = sx1X; tmpY = sx1Y; tmpZ = sx1Z; sx1X = sx2X; sx1Y = sx2Y; sx1Z = sx2Z; sx2X = tmpX; sx2Y = tmpY; sx2Z = tmpZ; tmpX = sy1X; tmpY = sy1Y; tmpZ = sy1Z; sy1X = sy2X; sy1Y = sy2Y; sy1Z = sy2Z; sy2X = tmpX; sy2Y = tmpY; sy2Z = tmpZ; tmpX = sz1X; tmpY = sz1Y; tmpZ = sz1Z; sz1X = sz2X; sz1Y = sz2Y; sz1Z = sz2Z; sz2X = tmpX; sz2Y = tmpY; sz2Z = tmpZ; mId -= 3; swapped = true; } else { swapped = false; } var refCenter; var refCenterX; var refCenterY; var refCenterZ; var refNormal; var refNormalX; var refNormalY; var refNormalZ; var refX; var refXX; var refXY; var refXZ; var refY; var refYX; var refYY; var refYZ; var refW; var refH; switch(mId) { case 0: refCenterX = sx1X; refCenterY = sx1Y; refCenterZ = sx1Z; refNormalX = x1X; refNormalY = x1Y; refNormalZ = x1Z; refXX = y1X; refXY = y1Y; refXZ = y1Z; refYX = z1X; refYY = z1Y; refYZ = z1Z; refW = h1; refH = d1; break; case 1: refCenterX = sy1X; refCenterY = sy1Y; refCenterZ = sy1Z; refNormalX = y1X; refNormalY = y1Y; refNormalZ = y1Z; refXX = z1X; refXY = z1Y; refXZ = z1Z; refYX = x1X; refYY = x1Y; refYZ = x1Z; refW = d1; refH = w1; break; default: refCenterX = sz1X; refCenterY = sz1Y; refCenterZ = sz1Z; refNormalX = z1X; refNormalY = z1Y; refNormalZ = z1Z; refXX = x1X; refXY = x1Y; refXZ = x1Z; refYX = y1X; refYY = y1Y; refYZ = y1Z; refW = w1; refH = h1; } if(mSign < 0) { refCenterX = -refCenterX; refCenterY = -refCenterY; refCenterZ = -refCenterZ; refNormalX = -refNormalX; refNormalY = -refNormalY; refNormalZ = -refNormalZ; tmpX = refXX; tmpY = refXY; tmpZ = refXZ; refXX = refYX; refXY = refYY; refXZ = refYZ; refYX = tmpX; refYY = tmpY; refYZ = tmpZ; var tmp5 = refW; refW = refH; refH = tmp5; } refCenterX += c1X; refCenterY += c1Y; refCenterZ += c1Z; var minIncDot = 1; var incId = 0; var incDot = refNormalX * x2X + refNormalY * x2Y + refNormalZ * x2Z; if(incDot < minIncDot) { minIncDot = incDot; incId = 0; } if(-incDot < minIncDot) { minIncDot = -incDot; incId = 1; } incDot = refNormalX * y2X + refNormalY * y2Y + refNormalZ * y2Z; if(incDot < minIncDot) { minIncDot = incDot; incId = 2; } if(-incDot < minIncDot) { minIncDot = -incDot; incId = 3; } incDot = refNormalX * z2X + refNormalY * z2Y + refNormalZ * z2Z; if(incDot < minIncDot) { minIncDot = incDot; incId = 4; } if(-incDot < minIncDot) { minIncDot = -incDot; incId = 5; } var incV1; var incV1X; var incV1Y; var incV1Z; var incV2; var incV2X; var incV2Y; var incV2Z; var incV3; var incV3X; var incV3Y; var incV3Z; var incV4; var incV4X; var incV4Y; var incV4Z; switch(incId) { case 0: incV1X = sx2X + sy2X; incV1Y = sx2Y + sy2Y; incV1Z = sx2Z + sy2Z; incV1X += sz2X; incV1Y += sz2Y; incV1Z += sz2Z; incV2X = sx2X - sy2X; incV2Y = sx2Y - sy2Y; incV2Z = sx2Z - sy2Z; incV2X += sz2X; incV2Y += sz2Y; incV2Z += sz2Z; incV3X = sx2X - sy2X; incV3Y = sx2Y - sy2Y; incV3Z = sx2Z - sy2Z; incV3X -= sz2X; incV3Y -= sz2Y; incV3Z -= sz2Z; incV4X = sx2X + sy2X; incV4Y = sx2Y + sy2Y; incV4Z = sx2Z + sy2Z; incV4X -= sz2X; incV4Y -= sz2Y; incV4Z -= sz2Z; break; case 1: incV1X = sy2X - sx2X; incV1Y = sy2Y - sx2Y; incV1Z = sy2Z - sx2Z; incV1X += sz2X; incV1Y += sz2Y; incV1Z += sz2Z; incV2X = sy2X - sx2X; incV2Y = sy2Y - sx2Y; incV2Z = sy2Z - sx2Z; incV2X -= sz2X; incV2Y -= sz2Y; incV2Z -= sz2Z; incV3X = sx2X + sy2X; incV3Y = sx2Y + sy2Y; incV3Z = sx2Z + sy2Z; incV3X = -incV3X; incV3Y = -incV3Y; incV3Z = -incV3Z; incV3X -= sz2X; incV3Y -= sz2Y; incV3Z -= sz2Z; incV4X = sx2X + sy2X; incV4Y = sx2Y + sy2Y; incV4Z = sx2Z + sy2Z; incV4X = -incV4X; incV4Y = -incV4Y; incV4Z = -incV4Z; incV4X += sz2X; incV4Y += sz2Y; incV4Z += sz2Z; break; case 2: incV1X = sx2X + sy2X; incV1Y = sx2Y + sy2Y; incV1Z = sx2Z + sy2Z; incV1X += sz2X; incV1Y += sz2Y; incV1Z += sz2Z; incV2X = sx2X + sy2X; incV2Y = sx2Y + sy2Y; incV2Z = sx2Z + sy2Z; incV2X -= sz2X; incV2Y -= sz2Y; incV2Z -= sz2Z; incV3X = sy2X - sx2X; incV3Y = sy2Y - sx2Y; incV3Z = sy2Z - sx2Z; incV3X -= sz2X; incV3Y -= sz2Y; incV3Z -= sz2Z; incV4X = sy2X - sx2X; incV4Y = sy2Y - sx2Y; incV4Z = sy2Z - sx2Z; incV4X += sz2X; incV4Y += sz2Y; incV4Z += sz2Z; break; case 3: incV1X = sx2X - sy2X; incV1Y = sx2Y - sy2Y; incV1Z = sx2Z - sy2Z; incV1X += sz2X; incV1Y += sz2Y; incV1Z += sz2Z; incV2X = sx2X + sy2X; incV2Y = sx2Y + sy2Y; incV2Z = sx2Z + sy2Z; incV2X = -incV2X; incV2Y = -incV2Y; incV2Z = -incV2Z; incV2X += sz2X; incV2Y += sz2Y; incV2Z += sz2Z; incV3X = sx2X + sy2X; incV3Y = sx2Y + sy2Y; incV3Z = sx2Z + sy2Z; incV3X = -incV3X; incV3Y = -incV3Y; incV3Z = -incV3Z; incV3X -= sz2X; incV3Y -= sz2Y; incV3Z -= sz2Z; incV4X = sx2X - sy2X; incV4Y = sx2Y - sy2Y; incV4Z = sx2Z - sy2Z; incV4X -= sz2X; incV4Y -= sz2Y; incV4Z -= sz2Z; break; case 4: incV1X = sx2X + sy2X; incV1Y = sx2Y + sy2Y; incV1Z = sx2Z + sy2Z; incV1X += sz2X; incV1Y += sz2Y; incV1Z += sz2Z; incV2X = sy2X - sx2X; incV2Y = sy2Y - sx2Y; incV2Z = sy2Z - sx2Z; incV2X += sz2X; incV2Y += sz2Y; incV2Z += sz2Z; incV3X = sx2X + sy2X; incV3Y = sx2Y + sy2Y; incV3Z = sx2Z + sy2Z; incV3X = -incV3X; incV3Y = -incV3Y; incV3Z = -incV3Z; incV3X += sz2X; incV3Y += sz2Y; incV3Z += sz2Z; incV4X = sx2X - sy2X; incV4Y = sx2Y - sy2Y; incV4Z = sx2Z - sy2Z; incV4X += sz2X; incV4Y += sz2Y; incV4Z += sz2Z; break; default: incV1X = sx2X + sy2X; incV1Y = sx2Y + sy2Y; incV1Z = sx2Z + sy2Z; incV1X -= sz2X; incV1Y -= sz2Y; incV1Z -= sz2Z; incV2X = sx2X - sy2X; incV2Y = sx2Y - sy2Y; incV2Z = sx2Z - sy2Z; incV2X -= sz2X; incV2Y -= sz2Y; incV2Z -= sz2Z; incV3X = sx2X + sy2X; incV3Y = sx2Y + sy2Y; incV3Z = sx2Z + sy2Z; incV3X = -incV3X; incV3Y = -incV3Y; incV3Z = -incV3Z; incV3X -= sz2X; incV3Y -= sz2Y; incV3Z -= sz2Z; incV4X = sy2X - sx2X; incV4Y = sy2Y - sx2Y; incV4Z = sy2Z - sx2Z; incV4X -= sz2X; incV4Y -= sz2Y; incV4Z -= sz2Z; } incV1X += c12X; incV1Y += c12Y; incV1Z += c12Z; incV2X += c12X; incV2Y += c12Y; incV2Z += c12Z; incV3X += c12X; incV3Y += c12Y; incV3Z += c12Z; incV4X += c12X; incV4Y += c12Y; incV4Z += c12Z; var _this = this.clipper; _this.w = refW; _this.h = refH; _this.numVertices = 0; _this.numTmpVertices = 0; var _this1 = this.clipper; var _this2 = _this1.vertices[_this1.numVertices++]; _this2.x = incV1X * refXX + incV1Y * refXY + incV1Z * refXZ; _this2.y = incV1X * refYX + incV1Y * refYY + incV1Z * refYZ; _this2.wx = incV1X; _this2.wy = incV1Y; _this2.wz = incV1Z; var _this3 = this.clipper; var _this4 = _this3.vertices[_this3.numVertices++]; _this4.x = incV2X * refXX + incV2Y * refXY + incV2Z * refXZ; _this4.y = incV2X * refYX + incV2Y * refYY + incV2Z * refYZ; _this4.wx = incV2X; _this4.wy = incV2Y; _this4.wz = incV2Z; var _this5 = this.clipper; var _this6 = _this5.vertices[_this5.numVertices++]; _this6.x = incV3X * refXX + incV3Y * refXY + incV3Z * refXZ; _this6.y = incV3X * refYX + incV3Y * refYY + incV3Z * refYZ; _this6.wx = incV3X; _this6.wy = incV3Y; _this6.wz = incV3Z; var _this7 = this.clipper; var _this8 = _this7.vertices[_this7.numVertices++]; _this8.x = incV4X * refXX + incV4Y * refXY + incV4Z * refXZ; _this8.y = incV4X * refYX + incV4Y * refYY + incV4Z * refYZ; _this8.wx = incV4X; _this8.wy = incV4Y; _this8.wz = incV4Z; this.clipper.clip(); this.clipper.reduce(); var normal1; var normalX1; var normalY1; var normalZ1; if(swapped) { normalX1 = refNormalX; normalY1 = refNormalY; normalZ1 = refNormalZ; } else { normalX1 = -refNormalX; normalY1 = -refNormalY; normalZ1 = -refNormalZ; } this.setNormal(result,normalX1,normalY1,normalZ1); var _g = 0; var _g1 = this.clipper.numVertices; while(_g < _g1) { var i = _g++; var v = this.clipper.vertices[i]; var clippedVertex; var clippedVertexX; var clippedVertexY; var clippedVertexZ; clippedVertexX = v.wx; clippedVertexY = v.wy; clippedVertexZ = v.wz; clippedVertexX += c1X; clippedVertexY += c1Y; clippedVertexZ += c1Z; var clippedVertexToRefCenter; var clippedVertexToRefCenterX; var clippedVertexToRefCenterY; var clippedVertexToRefCenterZ; clippedVertexToRefCenterX = refCenterX - clippedVertexX; clippedVertexToRefCenterY = refCenterY - clippedVertexY; clippedVertexToRefCenterZ = refCenterZ - clippedVertexZ; var depth15 = clippedVertexToRefCenterX * refNormalX + clippedVertexToRefCenterY * refNormalY + clippedVertexToRefCenterZ * refNormalZ; var clippedVertexOnRefFace; var clippedVertexOnRefFaceX; var clippedVertexOnRefFaceY; var clippedVertexOnRefFaceZ; clippedVertexOnRefFaceX = clippedVertexX + refNormalX * depth15; clippedVertexOnRefFaceY = clippedVertexY + refNormalY * depth15; clippedVertexOnRefFaceZ = clippedVertexZ + refNormalZ * depth15; if(depth15 > -oimo.common.Setting.contactPersistenceThreshold) { if(swapped) { this.addPoint(result,clippedVertexX,clippedVertexY,clippedVertexZ,clippedVertexOnRefFaceX,clippedVertexOnRefFaceY,clippedVertexOnRefFaceZ,depth15,i); } else { this.addPoint(result,clippedVertexOnRefFaceX,clippedVertexOnRefFaceY,clippedVertexOnRefFaceZ,clippedVertexX,clippedVertexY,clippedVertexZ,depth15,i); } } } } } if(!oimo.collision.narrowphase.detector._BoxBoxDetector) oimo.collision.narrowphase.detector._BoxBoxDetector = {}; oimo.collision.narrowphase.detector._BoxBoxDetector.IncidentVertex = class oimo_collision_narrowphase_detector__$BoxBoxDetector_IncidentVertex { constructor() { this.x = 0; this.y = 0; this.wx = 0; this.wy = 0; this.wz = 0; } } oimo.collision.narrowphase.detector._BoxBoxDetector.FaceClipper = class oimo_collision_narrowphase_detector__$BoxBoxDetector_FaceClipper { constructor() { this.w = 0; this.h = 0; this.numVertices = 0; this.numTmpVertices = 0; var this1 = new Array(8); this.vertices = this1; var this2 = new Array(8); this.tmpVertices = this2; this.vertices[0] = new oimo.collision.narrowphase.detector._BoxBoxDetector.IncidentVertex(); this.tmpVertices[0] = new oimo.collision.narrowphase.detector._BoxBoxDetector.IncidentVertex(); this.vertices[1] = new oimo.collision.narrowphase.detector._BoxBoxDetector.IncidentVertex(); this.tmpVertices[1] = new oimo.collision.narrowphase.detector._BoxBoxDetector.IncidentVertex(); this.vertices[2] = new oimo.collision.narrowphase.detector._BoxBoxDetector.IncidentVertex(); this.tmpVertices[2] = new oimo.collision.narrowphase.detector._BoxBoxDetector.IncidentVertex(); this.vertices[3] = new oimo.collision.narrowphase.detector._BoxBoxDetector.IncidentVertex(); this.tmpVertices[3] = new oimo.collision.narrowphase.detector._BoxBoxDetector.IncidentVertex(); this.vertices[4] = new oimo.collision.narrowphase.detector._BoxBoxDetector.IncidentVertex(); this.tmpVertices[4] = new oimo.collision.narrowphase.detector._BoxBoxDetector.IncidentVertex(); this.vertices[5] = new oimo.collision.narrowphase.detector._BoxBoxDetector.IncidentVertex(); this.tmpVertices[5] = new oimo.collision.narrowphase.detector._BoxBoxDetector.IncidentVertex(); this.vertices[6] = new oimo.collision.narrowphase.detector._BoxBoxDetector.IncidentVertex(); this.tmpVertices[6] = new oimo.collision.narrowphase.detector._BoxBoxDetector.IncidentVertex(); this.vertices[7] = new oimo.collision.narrowphase.detector._BoxBoxDetector.IncidentVertex(); this.tmpVertices[7] = new oimo.collision.narrowphase.detector._BoxBoxDetector.IncidentVertex(); } clip() { var _g = 0; var _g1 = this.numVertices; while(_g < _g1) { var i = _g++; var v1 = this.vertices[i]; var v2 = this.vertices[(i + 1) % this.numVertices]; var s1 = this.w + v1.x; var s2 = this.w + v2.x; if(s1 > 0 && s2 > 0) { var _this = this.tmpVertices[this.numTmpVertices++]; _this.x = v1.x; _this.y = v1.y; _this.wx = v1.wx; _this.wy = v1.wy; _this.wz = v1.wz; } else if(s1 > 0 && s2 <= 0) { var _this1 = this.tmpVertices[this.numTmpVertices++]; _this1.x = v1.x; _this1.y = v1.y; _this1.wx = v1.wx; _this1.wy = v1.wy; _this1.wz = v1.wz; var t = s1 / (s1 - s2); var _this2 = this.tmpVertices[this.numTmpVertices++]; _this2.x = v1.x + (v2.x - v1.x) * t; _this2.y = v1.y + (v2.y - v1.y) * t; _this2.wx = v1.wx + (v2.wx - v1.wx) * t; _this2.wy = v1.wy + (v2.wy - v1.wy) * t; _this2.wz = v1.wz + (v2.wz - v1.wz) * t; } else if(s1 <= 0 && s2 > 0) { var t1 = s1 / (s1 - s2); var _this3 = this.tmpVertices[this.numTmpVertices++]; _this3.x = v1.x + (v2.x - v1.x) * t1; _this3.y = v1.y + (v2.y - v1.y) * t1; _this3.wx = v1.wx + (v2.wx - v1.wx) * t1; _this3.wy = v1.wy + (v2.wy - v1.wy) * t1; _this3.wz = v1.wz + (v2.wz - v1.wz) * t1; } } var tmp = this.vertices; this.vertices = this.tmpVertices; this.tmpVertices = tmp; this.numVertices = this.numTmpVertices; this.numTmpVertices = 0; var _g2 = 0; var _g11 = this.numVertices; while(_g2 < _g11) { var i1 = _g2++; var v11 = this.vertices[i1]; var v21 = this.vertices[(i1 + 1) % this.numVertices]; var s11 = this.w - v11.x; var s21 = this.w - v21.x; if(s11 > 0 && s21 > 0) { var _this4 = this.tmpVertices[this.numTmpVertices++]; _this4.x = v11.x; _this4.y = v11.y; _this4.wx = v11.wx; _this4.wy = v11.wy; _this4.wz = v11.wz; } else if(s11 > 0 && s21 <= 0) { var _this5 = this.tmpVertices[this.numTmpVertices++]; _this5.x = v11.x; _this5.y = v11.y; _this5.wx = v11.wx; _this5.wy = v11.wy; _this5.wz = v11.wz; var t2 = s11 / (s11 - s21); var _this6 = this.tmpVertices[this.numTmpVertices++]; _this6.x = v11.x + (v21.x - v11.x) * t2; _this6.y = v11.y + (v21.y - v11.y) * t2; _this6.wx = v11.wx + (v21.wx - v11.wx) * t2; _this6.wy = v11.wy + (v21.wy - v11.wy) * t2; _this6.wz = v11.wz + (v21.wz - v11.wz) * t2; } else if(s11 <= 0 && s21 > 0) { var t3 = s11 / (s11 - s21); var _this7 = this.tmpVertices[this.numTmpVertices++]; _this7.x = v11.x + (v21.x - v11.x) * t3; _this7.y = v11.y + (v21.y - v11.y) * t3; _this7.wx = v11.wx + (v21.wx - v11.wx) * t3; _this7.wy = v11.wy + (v21.wy - v11.wy) * t3; _this7.wz = v11.wz + (v21.wz - v11.wz) * t3; } } var tmp1 = this.vertices; this.vertices = this.tmpVertices; this.tmpVertices = tmp1; this.numVertices = this.numTmpVertices; this.numTmpVertices = 0; var _g3 = 0; var _g12 = this.numVertices; while(_g3 < _g12) { var i2 = _g3++; var v12 = this.vertices[i2]; var v22 = this.vertices[(i2 + 1) % this.numVertices]; var s12 = this.h + v12.y; var s22 = this.h + v22.y; if(s12 > 0 && s22 > 0) { var _this8 = this.tmpVertices[this.numTmpVertices++]; _this8.x = v12.x; _this8.y = v12.y; _this8.wx = v12.wx; _this8.wy = v12.wy; _this8.wz = v12.wz; } else if(s12 > 0 && s22 <= 0) { var _this9 = this.tmpVertices[this.numTmpVertices++]; _this9.x = v12.x; _this9.y = v12.y; _this9.wx = v12.wx; _this9.wy = v12.wy; _this9.wz = v12.wz; var t4 = s12 / (s12 - s22); var _this10 = this.tmpVertices[this.numTmpVertices++]; _this10.x = v12.x + (v22.x - v12.x) * t4; _this10.y = v12.y + (v22.y - v12.y) * t4; _this10.wx = v12.wx + (v22.wx - v12.wx) * t4; _this10.wy = v12.wy + (v22.wy - v12.wy) * t4; _this10.wz = v12.wz + (v22.wz - v12.wz) * t4; } else if(s12 <= 0 && s22 > 0) { var t5 = s12 / (s12 - s22); var _this11 = this.tmpVertices[this.numTmpVertices++]; _this11.x = v12.x + (v22.x - v12.x) * t5; _this11.y = v12.y + (v22.y - v12.y) * t5; _this11.wx = v12.wx + (v22.wx - v12.wx) * t5; _this11.wy = v12.wy + (v22.wy - v12.wy) * t5; _this11.wz = v12.wz + (v22.wz - v12.wz) * t5; } } var tmp2 = this.vertices; this.vertices = this.tmpVertices; this.tmpVertices = tmp2; this.numVertices = this.numTmpVertices; this.numTmpVertices = 0; var _g4 = 0; var _g13 = this.numVertices; while(_g4 < _g13) { var i3 = _g4++; var v13 = this.vertices[i3]; var v23 = this.vertices[(i3 + 1) % this.numVertices]; var s13 = this.h - v13.y; var s23 = this.h - v23.y; if(s13 > 0 && s23 > 0) { var _this12 = this.tmpVertices[this.numTmpVertices++]; _this12.x = v13.x; _this12.y = v13.y; _this12.wx = v13.wx; _this12.wy = v13.wy; _this12.wz = v13.wz; } else if(s13 > 0 && s23 <= 0) { var _this13 = this.tmpVertices[this.numTmpVertices++]; _this13.x = v13.x; _this13.y = v13.y; _this13.wx = v13.wx; _this13.wy = v13.wy; _this13.wz = v13.wz; var t6 = s13 / (s13 - s23); var _this14 = this.tmpVertices[this.numTmpVertices++]; _this14.x = v13.x + (v23.x - v13.x) * t6; _this14.y = v13.y + (v23.y - v13.y) * t6; _this14.wx = v13.wx + (v23.wx - v13.wx) * t6; _this14.wy = v13.wy + (v23.wy - v13.wy) * t6; _this14.wz = v13.wz + (v23.wz - v13.wz) * t6; } else if(s13 <= 0 && s23 > 0) { var t7 = s13 / (s13 - s23); var _this15 = this.tmpVertices[this.numTmpVertices++]; _this15.x = v13.x + (v23.x - v13.x) * t7; _this15.y = v13.y + (v23.y - v13.y) * t7; _this15.wx = v13.wx + (v23.wx - v13.wx) * t7; _this15.wy = v13.wy + (v23.wy - v13.wy) * t7; _this15.wz = v13.wz + (v23.wz - v13.wz) * t7; } } var tmp3 = this.vertices; this.vertices = this.tmpVertices; this.tmpVertices = tmp3; this.numVertices = this.numTmpVertices; this.numTmpVertices = 0; } reduce() { if(this.numVertices < 4) { return; } var max1 = -1e65536; var min1 = 1e65536; var max2 = -1e65536; var min2 = 1e65536; var max1V = null; var min1V = null; var max2V = null; var min2V = null; var e1x = 1; var e1y = 1; var e2x = -1; var e2y = 1; var _g = 0; var _g1 = this.numVertices; while(_g < _g1) { var i = _g++; var v = this.vertices[i]; var dot1 = v.x * e1x + v.y * e1y; var dot2 = v.x * e2x + v.y * e2y; if(dot1 > max1) { max1 = dot1; max1V = v; } if(dot1 < min1) { min1 = dot1; min1V = v; } if(dot2 > max2) { max2 = dot2; max2V = v; } if(dot2 < min2) { min2 = dot2; min2V = v; } } var _this = this.tmpVertices[this.numTmpVertices++]; _this.x = max1V.x; _this.y = max1V.y; _this.wx = max1V.wx; _this.wy = max1V.wy; _this.wz = max1V.wz; var _this1 = this.tmpVertices[this.numTmpVertices++]; _this1.x = max2V.x; _this1.y = max2V.y; _this1.wx = max2V.wx; _this1.wy = max2V.wy; _this1.wz = max2V.wz; var _this2 = this.tmpVertices[this.numTmpVertices++]; _this2.x = min1V.x; _this2.y = min1V.y; _this2.wx = min1V.wx; _this2.wy = min1V.wy; _this2.wz = min1V.wz; var _this3 = this.tmpVertices[this.numTmpVertices++]; _this3.x = min2V.x; _this3.y = min2V.y; _this3.wx = min2V.wx; _this3.wy = min2V.wy; _this3.wz = min2V.wz; var tmp = this.vertices; this.vertices = this.tmpVertices; this.tmpVertices = tmp; this.numVertices = this.numTmpVertices; this.numTmpVertices = 0; } } oimo.collision.narrowphase.detector.BoxBoxDetectorMacro = class oimo_collision_narrowphase_detector_BoxBoxDetectorMacro { } oimo.collision.narrowphase.detector.CachedDetectorData = class oimo_collision_narrowphase_detector_CachedDetectorData { constructor() { } _clear() { if(this._gjkCache != null) { this._gjkCache.clear(); } } } oimo.collision.narrowphase.detector.CapsuleCapsuleDetector = class oimo_collision_narrowphase_detector_CapsuleCapsuleDetector extends oimo.collision.narrowphase.detector.Detector { constructor() { super(false); } detectImpl(result,geom1,geom2,tf1,tf2,cachedData) { var c1 = geom1; var c2 = geom2; result.incremental = false; var axis1; var axis1X; var axis1Y; var axis1Z; var axis2; var axis2X; var axis2Y; var axis2Z; axis1X = tf1._rotation01; axis1Y = tf1._rotation11; axis1Z = tf1._rotation21; axis2X = tf2._rotation01; axis2Y = tf2._rotation11; axis2Z = tf2._rotation21; var hh1 = c1._halfHeight; var hh2 = c2._halfHeight; var r1 = c1._radius; var r2 = c2._radius; var p1; var p1X; var p1Y; var p1Z; var q1; var q1X; var q1Y; var q1Z; var p2; var p2X; var p2Y; var p2Z; var q2; var q2X; var q2Y; var q2Z; p1X = tf1._positionX + axis1X * -hh1; p1Y = tf1._positionY + axis1Y * -hh1; p1Z = tf1._positionZ + axis1Z * -hh1; q1X = tf1._positionX + axis1X * hh1; q1Y = tf1._positionY + axis1Y * hh1; q1Z = tf1._positionZ + axis1Z * hh1; p2X = tf2._positionX + axis2X * -hh2; p2Y = tf2._positionY + axis2Y * -hh2; p2Z = tf2._positionZ + axis2Z * -hh2; q2X = tf2._positionX + axis2X * hh2; q2Y = tf2._positionY + axis2Y * hh2; q2Z = tf2._positionZ + axis2Z * hh2; var p12; var p12X; var p12Y; var p12Z; p12X = p1X - p2X; p12Y = p1Y - p2Y; p12Z = p1Z - p2Z; var d1; var d1X; var d1Y; var d1Z; var d2; var d2X; var d2Y; var d2Z; d1X = q1X - p1X; d1Y = q1Y - p1Y; d1Z = q1Z - p1Z; d2X = q2X - p2X; d2Y = q2Y - p2Y; d2Z = q2Z - p2Z; var p21d1 = -(p12X * d1X + p12Y * d1Y + p12Z * d1Z); var p12d2 = p12X * d2X + p12Y * d2Y + p12Z * d2Z; var d11 = hh1 * hh1 * 4; var d12 = d1X * d2X + d1Y * d2Y + d1Z * d2Z; var d22 = hh2 * hh2 * 4; var t1; var t2; if(d11 == 0 && d22 == 0) { t1 = 0; t2 = 0; } else if(d11 == 0) { t1 = 0; t2 = p12d2; if(t2 < 0) { t2 = 0; } else if(t2 > d22) { t2 = 1; } else { t2 /= d22; } } else if(d22 == 0) { t2 = 0; t1 = p21d1; if(t1 < 0) { t1 = 0; } else if(t1 > d11) { t1 = 1; } else { t1 /= d11; } } else { var det = d11 * d22 - d12 * d12; if(det == 0) { t1 = 0; } else { t1 = d12 * p12d2 + d22 * p21d1; if(t1 < 0) { t1 = 0; } else if(t1 > det) { t1 = 1; } else { t1 /= det; } } t2 = t1 * d12 + p12d2; if(t2 < 0) { t2 = 0; t1 = p21d1; if(t1 < 0) { t1 = 0; } else if(t1 > d11) { t1 = 1; } else { t1 /= d11; } } else if(t2 > d22) { t2 = 1; t1 = d12 + p21d1; if(t1 < 0) { t1 = 0; } else if(t1 > d11) { t1 = 1; } else { t1 /= d11; } } else { t2 /= d22; } } var cp1; var cp1X; var cp1Y; var cp1Z; var cp2; var cp2X; var cp2Y; var cp2Z; cp1X = p1X + d1X * t1; cp1Y = p1Y + d1Y * t1; cp1Z = p1Z + d1Z * t1; cp2X = p2X + d2X * t2; cp2Y = p2Y + d2Y * t2; cp2Z = p2Z + d2Z * t2; var d; var dX; var dY; var dZ; dX = cp1X - cp2X; dY = cp1Y - cp2Y; dZ = cp1Z - cp2Z; var len2 = dX * dX + dY * dY + dZ * dZ; if(len2 >= (r1 + r2) * (r1 + r2)) { return; } var len = Math.sqrt(len2); var n; var nX; var nY; var nZ; if(len > 0) { nX = dX * (1 / len); nY = dY * (1 / len); nZ = dZ * (1 / len); } else { nX = 1; nY = 0; nZ = 0; } this.setNormal(result,nX,nY,nZ); var pos1; var pos1X; var pos1Y; var pos1Z; var pos2; var pos2X; var pos2Y; var pos2Z; pos1X = cp1X + nX * -r1; pos1Y = cp1Y + nY * -r1; pos1Z = cp1Z + nZ * -r1; pos2X = cp2X + nX * r2; pos2Y = cp2Y + nY * r2; pos2Z = cp2Z + nZ * r2; this.addPoint(result,pos1X,pos1Y,pos1Z,pos2X,pos2Y,pos2Z,r1 + r2 - len,0); } } oimo.collision.narrowphase.detector.GjkEpaDetector = class oimo_collision_narrowphase_detector_GjkEpaDetector extends oimo.collision.narrowphase.detector.Detector { constructor() { super(false); } detectImpl(result,geom1,geom2,tf1,tf2,cachedData) { var gjkEpa = oimo.collision.narrowphase.detector.gjkepa.GjkEpa.instance; var g1 = geom1; var g2 = geom2; var status = gjkEpa.computeClosestPointsImpl(g1,g2,tf1,tf2,oimo.common.Setting.enableGJKCaching ? cachedData : null,true); result.incremental = true; if(status != oimo.collision.narrowphase.detector.gjkepa.GjkEpaResultState.SUCCEEDED) { console.log("src/oimo/collision/narrowphase/detector/GjkEpaDetector.hx:28:","GJK/EPA failed: status=" + status); return; } var margin1 = g1._gjkMargin; var margin2 = g2._gjkMargin; if(gjkEpa.distance > margin1 + margin2) { return; } var pos1; var pos1X; var pos1Y; var pos1Z; var pos2; var pos2X; var pos2Y; var pos2Z; var v = gjkEpa.closestPoint1; pos1X = v.x; pos1Y = v.y; pos1Z = v.z; var v1 = gjkEpa.closestPoint2; pos2X = v1.x; pos2Y = v1.y; pos2Z = v1.z; var normal; var normalX; var normalY; var normalZ; normalX = pos1X - pos2X; normalY = pos1Y - pos2Y; normalZ = pos1Z - pos2Z; if(normalX * normalX + normalY * normalY + normalZ * normalZ == 0) { return; } if(gjkEpa.distance < 0) { normalX = -normalX; normalY = -normalY; normalZ = -normalZ; } var l = normalX * normalX + normalY * normalY + normalZ * normalZ; if(l > 0) { l = 1 / Math.sqrt(l); } normalX *= l; normalY *= l; normalZ *= l; this.setNormal(result,normalX,normalY,normalZ); pos1X += normalX * -g1._gjkMargin; pos1Y += normalY * -g1._gjkMargin; pos1Z += normalZ * -g1._gjkMargin; pos2X += normalX * g2._gjkMargin; pos2Y += normalY * g2._gjkMargin; pos2Z += normalZ * g2._gjkMargin; this.addPoint(result,pos1X,pos1Y,pos1Z,pos2X,pos2Y,pos2Z,g1._gjkMargin + g2._gjkMargin - gjkEpa.distance,0); } } oimo.collision.narrowphase.detector.SphereBoxDetector = class oimo_collision_narrowphase_detector_SphereBoxDetector extends oimo.collision.narrowphase.detector.Detector { constructor(swapped) { super(swapped); } detectImpl(result,geom1,geom2,tf1,tf2,cachedData) { var s = geom1; var b = geom2; result.incremental = false; var halfExt; var halfExtX; var halfExtY; var halfExtZ; var negHalfExt; var negHalfExtX; var negHalfExtY; var negHalfExtZ; halfExtX = b._halfExtentsX; halfExtY = b._halfExtentsY; halfExtZ = b._halfExtentsZ; negHalfExtX = -halfExtX; negHalfExtY = -halfExtY; negHalfExtZ = -halfExtZ; var r = s._radius; var boxToSphere; var boxToSphereX; var boxToSphereY; var boxToSphereZ; boxToSphereX = tf1._positionX - tf2._positionX; boxToSphereY = tf1._positionY - tf2._positionY; boxToSphereZ = tf1._positionZ - tf2._positionZ; var boxToSphereInBox; var boxToSphereInBoxX; var boxToSphereInBoxY; var boxToSphereInBoxZ; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = tf2._rotation00 * boxToSphereX + tf2._rotation10 * boxToSphereY + tf2._rotation20 * boxToSphereZ; __tmp__Y = tf2._rotation01 * boxToSphereX + tf2._rotation11 * boxToSphereY + tf2._rotation21 * boxToSphereZ; __tmp__Z = tf2._rotation02 * boxToSphereX + tf2._rotation12 * boxToSphereY + tf2._rotation22 * boxToSphereZ; boxToSphereInBoxX = __tmp__X; boxToSphereInBoxY = __tmp__Y; boxToSphereInBoxZ = __tmp__Z; var insideBox = negHalfExtX < boxToSphereInBoxX && halfExtX > boxToSphereInBoxX && negHalfExtY < boxToSphereInBoxY && halfExtY > boxToSphereInBoxY && negHalfExtZ < boxToSphereInBoxZ && halfExtZ > boxToSphereInBoxZ; if(insideBox) { var sphereToBoxSurface; var sphereToBoxSurfaceX; var sphereToBoxSurfaceY; var sphereToBoxSurfaceZ; sphereToBoxSurfaceX = boxToSphereInBoxX < 0 ? -boxToSphereInBoxX : boxToSphereInBoxX; sphereToBoxSurfaceY = boxToSphereInBoxY < 0 ? -boxToSphereInBoxY : boxToSphereInBoxY; sphereToBoxSurfaceZ = boxToSphereInBoxZ < 0 ? -boxToSphereInBoxZ : boxToSphereInBoxZ; sphereToBoxSurfaceX = halfExtX - sphereToBoxSurfaceX; sphereToBoxSurfaceY = halfExtY - sphereToBoxSurfaceY; sphereToBoxSurfaceZ = halfExtZ - sphereToBoxSurfaceZ; var normalInBox; var normalInBoxX; var normalInBoxY; var normalInBoxZ; var distX = sphereToBoxSurfaceX; var distY = sphereToBoxSurfaceY; var distZ = sphereToBoxSurfaceZ; var depth; var projectionMask; var projectionMaskX; var projectionMaskY; var projectionMaskZ; if(distX < distY) { if(distX < distZ) { if(boxToSphereInBoxX > 0) { normalInBoxX = 1; normalInBoxY = 0; normalInBoxZ = 0; } else { normalInBoxX = -1; normalInBoxY = 0; normalInBoxZ = 0; } projectionMaskX = 0; projectionMaskY = 1; projectionMaskZ = 1; depth = distX; } else { if(boxToSphereInBoxZ > 0) { normalInBoxX = 0; normalInBoxY = 0; normalInBoxZ = 1; } else { normalInBoxX = 0; normalInBoxY = 0; normalInBoxZ = -1; } projectionMaskX = 1; projectionMaskY = 1; projectionMaskZ = 0; depth = distZ; } } else if(distY < distZ) { if(boxToSphereInBoxY > 0) { normalInBoxX = 0; normalInBoxY = 1; normalInBoxZ = 0; } else { normalInBoxX = 0; normalInBoxY = -1; normalInBoxZ = 0; } projectionMaskX = 1; projectionMaskY = 0; projectionMaskZ = 1; depth = distY; } else { if(boxToSphereInBoxZ > 0) { normalInBoxX = 0; normalInBoxY = 0; normalInBoxZ = 1; } else { normalInBoxX = 0; normalInBoxY = 0; normalInBoxZ = -1; } projectionMaskX = 1; projectionMaskY = 1; projectionMaskZ = 0; depth = distZ; } var base; var baseX; var baseY; var baseZ; baseX = projectionMaskX * boxToSphereInBoxX; baseY = projectionMaskY * boxToSphereInBoxY; baseZ = projectionMaskZ * boxToSphereInBoxZ; var boxToClosestPointInBox; var boxToClosestPointInBoxX; var boxToClosestPointInBoxY; var boxToClosestPointInBoxZ; boxToClosestPointInBoxX = normalInBoxX * halfExtX; boxToClosestPointInBoxY = normalInBoxY * halfExtY; boxToClosestPointInBoxZ = normalInBoxZ * halfExtZ; boxToClosestPointInBoxX += baseX; boxToClosestPointInBoxY += baseY; boxToClosestPointInBoxZ += baseZ; var boxToClosestPoint; var boxToClosestPointX; var boxToClosestPointY; var boxToClosestPointZ; var normal; var normalX; var normalY; var normalZ; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = tf2._rotation00 * boxToClosestPointInBoxX + tf2._rotation01 * boxToClosestPointInBoxY + tf2._rotation02 * boxToClosestPointInBoxZ; __tmp__Y1 = tf2._rotation10 * boxToClosestPointInBoxX + tf2._rotation11 * boxToClosestPointInBoxY + tf2._rotation12 * boxToClosestPointInBoxZ; __tmp__Z1 = tf2._rotation20 * boxToClosestPointInBoxX + tf2._rotation21 * boxToClosestPointInBoxY + tf2._rotation22 * boxToClosestPointInBoxZ; boxToClosestPointX = __tmp__X1; boxToClosestPointY = __tmp__Y1; boxToClosestPointZ = __tmp__Z1; var __tmp__X2; var __tmp__Y2; var __tmp__Z2; __tmp__X2 = tf2._rotation00 * normalInBoxX + tf2._rotation01 * normalInBoxY + tf2._rotation02 * normalInBoxZ; __tmp__Y2 = tf2._rotation10 * normalInBoxX + tf2._rotation11 * normalInBoxY + tf2._rotation12 * normalInBoxZ; __tmp__Z2 = tf2._rotation20 * normalInBoxX + tf2._rotation21 * normalInBoxY + tf2._rotation22 * normalInBoxZ; normalX = __tmp__X2; normalY = __tmp__Y2; normalZ = __tmp__Z2; this.setNormal(result,normalX,normalY,normalZ); var pos1; var pos1X; var pos1Y; var pos1Z; var pos2; var pos2X; var pos2Y; var pos2Z; pos1X = tf1._positionX + normalX * -r; pos1Y = tf1._positionY + normalY * -r; pos1Z = tf1._positionZ + normalZ * -r; pos2X = tf2._positionX + boxToClosestPointX; pos2Y = tf2._positionY + boxToClosestPointY; pos2Z = tf2._positionZ + boxToClosestPointZ; this.addPoint(result,pos1X,pos1Y,pos1Z,pos2X,pos2Y,pos2Z,depth,0); return; } var boxToClosestPointInBox1; var boxToClosestPointInBoxX1; var boxToClosestPointInBoxY1; var boxToClosestPointInBoxZ1; var eps = 1e-9; var epsVec; var epsVecX; var epsVecY; var epsVecZ; epsVecX = eps; epsVecY = eps; epsVecZ = eps; halfExtX -= epsVecX; halfExtY -= epsVecY; halfExtZ -= epsVecZ; negHalfExtX += epsVecX; negHalfExtY += epsVecY; negHalfExtZ += epsVecZ; boxToClosestPointInBoxX1 = boxToSphereInBoxX < halfExtX ? boxToSphereInBoxX : halfExtX; boxToClosestPointInBoxY1 = boxToSphereInBoxY < halfExtY ? boxToSphereInBoxY : halfExtY; boxToClosestPointInBoxZ1 = boxToSphereInBoxZ < halfExtZ ? boxToSphereInBoxZ : halfExtZ; boxToClosestPointInBoxX1 = boxToClosestPointInBoxX1 > negHalfExtX ? boxToClosestPointInBoxX1 : negHalfExtX; boxToClosestPointInBoxY1 = boxToClosestPointInBoxY1 > negHalfExtY ? boxToClosestPointInBoxY1 : negHalfExtY; boxToClosestPointInBoxZ1 = boxToClosestPointInBoxZ1 > negHalfExtZ ? boxToClosestPointInBoxZ1 : negHalfExtZ; var closestPointToSphereInBox; var closestPointToSphereInBoxX; var closestPointToSphereInBoxY; var closestPointToSphereInBoxZ; closestPointToSphereInBoxX = boxToSphereInBoxX - boxToClosestPointInBoxX1; closestPointToSphereInBoxY = boxToSphereInBoxY - boxToClosestPointInBoxY1; closestPointToSphereInBoxZ = boxToSphereInBoxZ - boxToClosestPointInBoxZ1; var dist = closestPointToSphereInBoxX * closestPointToSphereInBoxX + closestPointToSphereInBoxY * closestPointToSphereInBoxY + closestPointToSphereInBoxZ * closestPointToSphereInBoxZ; if(dist >= r * r) { return; } dist = Math.sqrt(dist); var boxToClosestPoint1; var boxToClosestPointX1; var boxToClosestPointY1; var boxToClosestPointZ1; var closestPointToSphere; var closestPointToSphereX; var closestPointToSphereY; var closestPointToSphereZ; var __tmp__X3; var __tmp__Y3; var __tmp__Z3; __tmp__X3 = tf2._rotation00 * boxToClosestPointInBoxX1 + tf2._rotation01 * boxToClosestPointInBoxY1 + tf2._rotation02 * boxToClosestPointInBoxZ1; __tmp__Y3 = tf2._rotation10 * boxToClosestPointInBoxX1 + tf2._rotation11 * boxToClosestPointInBoxY1 + tf2._rotation12 * boxToClosestPointInBoxZ1; __tmp__Z3 = tf2._rotation20 * boxToClosestPointInBoxX1 + tf2._rotation21 * boxToClosestPointInBoxY1 + tf2._rotation22 * boxToClosestPointInBoxZ1; boxToClosestPointX1 = __tmp__X3; boxToClosestPointY1 = __tmp__Y3; boxToClosestPointZ1 = __tmp__Z3; var __tmp__X4; var __tmp__Y4; var __tmp__Z4; __tmp__X4 = tf2._rotation00 * closestPointToSphereInBoxX + tf2._rotation01 * closestPointToSphereInBoxY + tf2._rotation02 * closestPointToSphereInBoxZ; __tmp__Y4 = tf2._rotation10 * closestPointToSphereInBoxX + tf2._rotation11 * closestPointToSphereInBoxY + tf2._rotation12 * closestPointToSphereInBoxZ; __tmp__Z4 = tf2._rotation20 * closestPointToSphereInBoxX + tf2._rotation21 * closestPointToSphereInBoxY + tf2._rotation22 * closestPointToSphereInBoxZ; closestPointToSphereX = __tmp__X4; closestPointToSphereY = __tmp__Y4; closestPointToSphereZ = __tmp__Z4; var normal1; var normalX1; var normalY1; var normalZ1; var l = closestPointToSphereX * closestPointToSphereX + closestPointToSphereY * closestPointToSphereY + closestPointToSphereZ * closestPointToSphereZ; if(l > 0) { l = 1 / Math.sqrt(l); } normalX1 = closestPointToSphereX * l; normalY1 = closestPointToSphereY * l; normalZ1 = closestPointToSphereZ * l; this.setNormal(result,normalX1,normalY1,normalZ1); var pos11; var pos1X1; var pos1Y1; var pos1Z1; var pos21; var pos2X1; var pos2Y1; var pos2Z1; pos1X1 = tf1._positionX + normalX1 * -r; pos1Y1 = tf1._positionY + normalY1 * -r; pos1Z1 = tf1._positionZ + normalZ1 * -r; pos2X1 = tf2._positionX + boxToClosestPointX1; pos2Y1 = tf2._positionY + boxToClosestPointY1; pos2Z1 = tf2._positionZ + boxToClosestPointZ1; this.addPoint(result,pos1X1,pos1Y1,pos1Z1,pos2X1,pos2Y1,pos2Z1,r - dist,0); } } oimo.collision.narrowphase.detector.SphereCapsuleDetector = class oimo_collision_narrowphase_detector_SphereCapsuleDetector extends oimo.collision.narrowphase.detector.Detector { constructor(swapped) { super(swapped); } detectImpl(result,geom1,geom2,tf1,tf2,cachedData) { var s1 = geom1; var c2 = geom2; result.incremental = false; var hh2 = c2._halfHeight; var r1 = s1._radius; var r2 = c2._radius; var axis2; var axis2X; var axis2Y; var axis2Z; axis2X = tf2._rotation01; axis2Y = tf2._rotation11; axis2Z = tf2._rotation21; var cp1; var cp1X; var cp1Y; var cp1Z; cp1X = tf1._positionX; cp1Y = tf1._positionY; cp1Z = tf1._positionZ; var p2; var p2X; var p2Y; var p2Z; var q2; var q2X; var q2Y; var q2Z; p2X = tf2._positionX + axis2X * -hh2; p2Y = tf2._positionY + axis2Y * -hh2; p2Z = tf2._positionZ + axis2Z * -hh2; q2X = tf2._positionX + axis2X * hh2; q2Y = tf2._positionY + axis2Y * hh2; q2Z = tf2._positionZ + axis2Z * hh2; var p12; var p12X; var p12Y; var p12Z; p12X = cp1X - p2X; p12Y = cp1Y - p2Y; p12Z = cp1Z - p2Z; var d2; var d2X; var d2Y; var d2Z; d2X = q2X - p2X; d2Y = q2Y - p2Y; d2Z = q2Z - p2Z; var d22 = hh2 * hh2 * 4; var t = p12X * d2X + p12Y * d2Y + p12Z * d2Z; if(t < 0) { t = 0; } else if(t > d22) { t = 1; } else { t /= d22; } var cp2; var cp2X; var cp2Y; var cp2Z; cp2X = p2X + d2X * t; cp2Y = p2Y + d2Y * t; cp2Z = p2Z + d2Z * t; var d; var dX; var dY; var dZ; dX = cp1X - cp2X; dY = cp1Y - cp2Y; dZ = cp1Z - cp2Z; var len2 = dX * dX + dY * dY + dZ * dZ; if(len2 >= (r1 + r2) * (r1 + r2)) { return; } var len = Math.sqrt(len2); var n; var nX; var nY; var nZ; if(len > 0) { nX = dX * (1 / len); nY = dY * (1 / len); nZ = dZ * (1 / len); } else { nX = 1; nY = 0; nZ = 0; } this.setNormal(result,nX,nY,nZ); var pos1; var pos1X; var pos1Y; var pos1Z; var pos2; var pos2X; var pos2Y; var pos2Z; pos1X = cp1X + nX * -r1; pos1Y = cp1Y + nY * -r1; pos1Z = cp1Z + nZ * -r1; pos2X = cp2X + nX * r2; pos2Y = cp2Y + nY * r2; pos2Z = cp2Z + nZ * r2; this.addPoint(result,pos1X,pos1Y,pos1Z,pos2X,pos2Y,pos2Z,r1 + r2 - len,0); } } oimo.collision.narrowphase.detector.SphereSphereDetector = class oimo_collision_narrowphase_detector_SphereSphereDetector extends oimo.collision.narrowphase.detector.Detector { constructor() { super(false); } detectImpl(result,geom1,geom2,tf1,tf2,cachedData) { var s1 = geom1; var s2 = geom2; result.incremental = false; var d; var dX; var dY; var dZ; dX = tf1._positionX - tf2._positionX; dY = tf1._positionY - tf2._positionY; dZ = tf1._positionZ - tf2._positionZ; var r1 = s1._radius; var r2 = s2._radius; var len2 = dX * dX + dY * dY + dZ * dZ; if(len2 >= (r1 + r2) * (r1 + r2)) { return; } var len = Math.sqrt(len2); var n; var nX; var nY; var nZ; if(len > 0) { nX = dX * (1 / len); nY = dY * (1 / len); nZ = dZ * (1 / len); } else { nX = 1; nY = 0; nZ = 0; } this.setNormal(result,nX,nY,nZ); var pos1; var pos1X; var pos1Y; var pos1Z; var pos2; var pos2X; var pos2Y; var pos2Z; pos1X = tf1._positionX + nX * -r1; pos1Y = tf1._positionY + nY * -r1; pos1Z = tf1._positionZ + nZ * -r1; pos2X = tf2._positionX + nX * r2; pos2Y = tf2._positionY + nY * r2; pos2Z = tf2._positionZ + nZ * r2; this.addPoint(result,pos1X,pos1Y,pos1Z,pos2X,pos2Y,pos2Z,r1 + r2 - len,0); } } if(!oimo.collision.narrowphase.detector.gjkepa) oimo.collision.narrowphase.detector.gjkepa = {}; oimo.collision.narrowphase.detector.gjkepa.EpaPolyhedron = class oimo_collision_narrowphase_detector_gjkepa_EpaPolyhedron { constructor() { var this1 = new Array(oimo.common.Setting.maxEPAVertices); this._vertices = this1; this._center = new oimo.common.Vec3(); this._numVertices = 0; this._triangleList = null; this._triangleListLast = null; this._numTriangles = 0; this._trianglePool = null; this._vertexPool = null; } dumpHoleEdge(first) { } validate() { var t = this._triangleList; while(t != null) { var n = t._next; t._vertices[0]._tmpEdgeLoopOuterTriangle = null; t._vertices[0]._tmpEdgeLoopNext = null; if(t._adjacentPairIndex[0] == -1) { this._status = 2; return false; } if(t._adjacentTriangles[0] == null) { this._status = 3; return false; } t._vertices[1]._tmpEdgeLoopOuterTriangle = null; t._vertices[1]._tmpEdgeLoopNext = null; if(t._adjacentPairIndex[1] == -1) { this._status = 2; return false; } if(t._adjacentTriangles[1] == null) { this._status = 3; return false; } t._vertices[2]._tmpEdgeLoopOuterTriangle = null; t._vertices[2]._tmpEdgeLoopNext = null; if(t._adjacentPairIndex[2] == -1) { this._status = 2; return false; } if(t._adjacentTriangles[2] == null) { this._status = 3; return false; } t = n; } return true; } findEdgeLoop(id,base,from) { if(base._tmpDfsId == id) { return; } base._tmpDfsId = id; var _this = base.tmp; _this.x = from.x; _this.y = from.y; _this.z = from.z; var _this1 = _this; var v = base._vertices[0].v; var tx = _this1.x - v.x; var ty = _this1.y - v.y; var tz = _this1.z - v.z; _this1.x = tx; _this1.y = ty; _this1.z = tz; var _this2 = base.tmp; var v1 = base._normal; base._tmpDfsVisible = _this2.x * v1.x + _this2.y * v1.y + _this2.z * v1.z > 0; if(!base._tmpDfsVisible) { this._status = 6; return; } var _g = 0; while(_g < 3) { var i = _g++; var t = base._adjacentTriangles[i]; if(t == null) { continue; } var _this3 = t.tmp; _this3.x = from.x; _this3.y = from.y; _this3.z = from.z; var _this4 = _this3; var v2 = t._vertices[0].v; var tx1 = _this4.x - v2.x; var ty1 = _this4.y - v2.y; var tz1 = _this4.z - v2.z; _this4.x = tx1; _this4.y = ty1; _this4.z = tz1; var _this5 = t.tmp; var v3 = t._normal; t._tmpDfsVisible = _this5.x * v3.x + _this5.y * v3.y + _this5.z * v3.z > 0; if(t._tmpDfsVisible) { this.findEdgeLoop(id,t,from); } else { var i2 = base._nextIndex[i]; var v11 = base._vertices[i]; var v21 = base._vertices[i2]; v11._tmpEdgeLoopNext = v21; v11._tmpEdgeLoopOuterTriangle = t; } } var triangle = base._adjacentTriangles[0]; if(triangle != null) { var pairIndex = base._adjacentPairIndex[0]; triangle._adjacentTriangles[pairIndex] = null; triangle._adjacentPairIndex[pairIndex] = -1; base._adjacentTriangles[0] = null; base._adjacentPairIndex[0] = -1; } var triangle1 = base._adjacentTriangles[1]; if(triangle1 != null) { var pairIndex1 = base._adjacentPairIndex[1]; triangle1._adjacentTriangles[pairIndex1] = null; triangle1._adjacentPairIndex[pairIndex1] = -1; base._adjacentTriangles[1] = null; base._adjacentPairIndex[1] = -1; } var triangle2 = base._adjacentTriangles[2]; if(triangle2 != null) { var pairIndex2 = base._adjacentPairIndex[2]; triangle2._adjacentTriangles[pairIndex2] = null; triangle2._adjacentPairIndex[pairIndex2] = -1; base._adjacentTriangles[2] = null; base._adjacentPairIndex[2] = -1; } this._numTriangles--; var prev = base._prev; var next = base._next; if(prev != null) { prev._next = next; } if(next != null) { next._prev = prev; } if(base == this._triangleList) { this._triangleList = this._triangleList._next; } if(base == this._triangleListLast) { this._triangleListLast = this._triangleListLast._prev; } base._next = null; base._prev = null; base.removeReferences(); base._next = this._trianglePool; this._trianglePool = base; } _init(v1,v2,v3,v4) { this._status = 0; this._numVertices = 4; this._vertices[0] = v1; this._vertices[1] = v2; this._vertices[2] = v3; this._vertices[3] = v4; var _this = this._center; var v = v1.v; _this.x = v.x; _this.y = v.y; _this.z = v.z; var _this1 = _this; var v5 = v2.v; var tx = _this1.x + v5.x; var ty = _this1.y + v5.y; var tz = _this1.z + v5.z; _this1.x = tx; _this1.y = ty; _this1.z = tz; var _this2 = _this1; var v6 = v3.v; var tx1 = _this2.x + v6.x; var ty1 = _this2.y + v6.y; var tz1 = _this2.z + v6.z; _this2.x = tx1; _this2.y = ty1; _this2.z = tz1; var _this3 = _this2; var v7 = v4.v; var tx2 = _this3.x + v7.x; var ty2 = _this3.y + v7.y; var tz2 = _this3.z + v7.z; _this3.x = tx2; _this3.y = ty2; _this3.z = tz2; var _this4 = _this3; var tx3 = _this4.x * 0.25; var ty3 = _this4.y * 0.25; var tz3 = _this4.z * 0.25; _this4.x = tx3; _this4.y = ty3; _this4.z = tz3; var first = this._trianglePool; if(first != null) { this._trianglePool = first._next; first._next = null; } else { first = new oimo.collision.narrowphase.detector.gjkepa.EpaTriangle(); } var t1 = first; var first1 = this._trianglePool; if(first1 != null) { this._trianglePool = first1._next; first1._next = null; } else { first1 = new oimo.collision.narrowphase.detector.gjkepa.EpaTriangle(); } var t2 = first1; var first2 = this._trianglePool; if(first2 != null) { this._trianglePool = first2._next; first2._next = null; } else { first2 = new oimo.collision.narrowphase.detector.gjkepa.EpaTriangle(); } var t3 = first2; var first3 = this._trianglePool; if(first3 != null) { this._trianglePool = first3._next; first3._next = null; } else { first3 = new oimo.collision.narrowphase.detector.gjkepa.EpaTriangle(); } var t4 = first3; var autoCheck = true; if(autoCheck == null) { autoCheck = false; } if(!t1.init(v1,v2,v3,this._center,autoCheck)) { this._status = 1; } var autoCheck1 = true; if(autoCheck1 == null) { autoCheck1 = false; } if(!t2.init(v1,v2,v4,this._center,autoCheck1)) { this._status = 1; } var autoCheck2 = true; if(autoCheck2 == null) { autoCheck2 = false; } if(!t3.init(v1,v3,v4,this._center,autoCheck2)) { this._status = 1; } var autoCheck3 = true; if(autoCheck3 == null) { autoCheck3 = false; } if(!t4.init(v2,v3,v4,this._center,autoCheck3)) { this._status = 1; } if(!t1.setAdjacentTriangle(t2)) { this._status = 1; } if(!t1.setAdjacentTriangle(t3)) { this._status = 1; } if(!t1.setAdjacentTriangle(t4)) { this._status = 1; } if(!t2.setAdjacentTriangle(t3)) { this._status = 1; } if(!t2.setAdjacentTriangle(t4)) { this._status = 1; } if(!t3.setAdjacentTriangle(t4)) { this._status = 1; } this._numTriangles++; if(this._triangleList == null) { this._triangleList = t1; this._triangleListLast = t1; } else { this._triangleListLast._next = t1; t1._prev = this._triangleListLast; this._triangleListLast = t1; } this._numTriangles++; if(this._triangleList == null) { this._triangleList = t2; this._triangleListLast = t2; } else { this._triangleListLast._next = t2; t2._prev = this._triangleListLast; this._triangleListLast = t2; } this._numTriangles++; if(this._triangleList == null) { this._triangleList = t3; this._triangleListLast = t3; } else { this._triangleListLast._next = t3; t3._prev = this._triangleListLast; this._triangleListLast = t3; } this._numTriangles++; if(this._triangleList == null) { this._triangleList = t4; this._triangleListLast = t4; } else { this._triangleListLast._next = t4; t4._prev = this._triangleListLast; this._triangleListLast = t4; } return this._status == 0; } _addVertex(vertex,base) { this._vertices[this._numVertices++] = vertex; var v1 = base._vertices[0]; this.findEdgeLoop(this._numVertices,base,vertex.v); if(this._status != 0) { return false; } var v = v1; var firstV = v1; var prevT = null; var firstT = null; while(true) { if(v._tmpEdgeLoopNext == null) { this._dumpAsObjModel(); this._status = 4; return false; } if(v._tmpEdgeLoopOuterTriangle == null) { this._status = 5; return false; } var first = this._trianglePool; if(first != null) { this._trianglePool = first._next; first._next = null; } else { first = new oimo.collision.narrowphase.detector.gjkepa.EpaTriangle(); } var t = first; if(firstT == null) { firstT = t; } if(!t.init(v,v._tmpEdgeLoopNext,vertex,this._center,false)) { this._status = 1; } if(this._status != 0) { return false; } this._numTriangles++; if(this._triangleList == null) { this._triangleList = t; this._triangleListLast = t; } else { this._triangleListLast._next = t; t._prev = this._triangleListLast; this._triangleListLast = t; } if(!t.setAdjacentTriangle(v._tmpEdgeLoopOuterTriangle)) { this._status = 1; } if(prevT != null) { if(!t.setAdjacentTriangle(prevT)) { this._status = 1; } } prevT = t; v = v._tmpEdgeLoopNext; if(!(v != firstV)) { break; } } if(!prevT.setAdjacentTriangle(firstT)) { this._status = 1; } if(this._status == 0) { return this.validate(); } else { return false; } } _dumpAsObjModel() { } } oimo.collision.narrowphase.detector.gjkepa.EpaPolyhedronState = class oimo_collision_narrowphase_detector_gjkepa_EpaPolyhedronState { } oimo.collision.narrowphase.detector.gjkepa.EpaTriangle = class oimo_collision_narrowphase_detector_gjkepa_EpaTriangle { constructor() { this.id = ++oimo.collision.narrowphase.detector.gjkepa.EpaTriangle.count; this._next = null; this._prev = null; this._normal = new oimo.common.Vec3(); this._distanceSq = 0; this._tmpDfsId = 0; this._tmpDfsVisible = false; var this1 = new Array(3); this._vertices = this1; var this2 = new Array(3); this._adjacentTriangles = this2; var this3 = new Array(3); this._adjacentPairIndex = this3; this.tmp = new oimo.common.Vec3(); var this4 = new Array(3); this._nextIndex = this4; this._nextIndex[0] = 1; this._nextIndex[1] = 2; this._nextIndex[2] = 0; } init(vertex1,vertex2,vertex3,center,autoCheck) { if(autoCheck == null) { autoCheck = false; } var v1; var v1X; var v1Y; var v1Z; var v2; var v2X; var v2Y; var v2Z; var v3; var v3X; var v3Y; var v3Z; var vc; var vcX; var vcY; var vcZ; var v = vertex1.v; v1X = v.x; v1Y = v.y; v1Z = v.z; var v4 = vertex2.v; v2X = v4.x; v2Y = v4.y; v2Z = v4.z; var v5 = vertex3.v; v3X = v5.x; v3Y = v5.y; v3Z = v5.z; var v6 = center; vcX = v6.x; vcY = v6.y; vcZ = v6.z; var v12; var v12X; var v12Y; var v12Z; var v13; var v13X; var v13Y; var v13Z; var vc1; var vc1X; var vc1Y; var vc1Z; v12X = v2X - v1X; v12Y = v2Y - v1Y; v12Z = v2Z - v1Z; v13X = v3X - v1X; v13Y = v3Y - v1Y; v13Z = v3Z - v1Z; vc1X = v1X - vcX; vc1Y = v1Y - vcY; vc1Z = v1Z - vcZ; var inor; var inorX; var inorY; var inorZ; inorX = v12Y * v13Z - v12Z * v13Y; inorY = v12Z * v13X - v12X * v13Z; inorZ = v12X * v13Y - v12Y * v13X; var inverted = false; var d = vc1X * inorX + vc1Y * inorY + vc1Z * inorZ; if(d < 0) { if(autoCheck) { var tmp = vertex2; vertex2 = vertex3; vertex3 = tmp; inorX *= -1; inorY *= -1; inorZ *= -1; } else { inverted = true; } } this._vertices[0] = vertex1; this._vertices[1] = vertex2; this._vertices[2] = vertex3; var v7 = this._normal; v7.x = inorX; v7.y = inorY; v7.z = inorZ; var vec1 = vertex1.v; var vec2 = vertex2.v; var vec3 = vertex3.v; var out = this.tmp; var v11; var v1X1; var v1Y1; var v1Z1; var v21; var v2X1; var v2Y1; var v2Z1; var v31; var v3X1; var v3Y1; var v3Z1; var v121; var v12X1; var v12Y1; var v12Z1; var v23; var v23X; var v23Y; var v23Z; var v311; var v31X; var v31Y; var v31Z; var v8 = vec1; v1X1 = v8.x; v1Y1 = v8.y; v1Z1 = v8.z; var v9 = vec2; v2X1 = v9.x; v2Y1 = v9.y; v2Z1 = v9.z; var v10 = vec3; v3X1 = v10.x; v3Y1 = v10.y; v3Z1 = v10.z; v12X1 = v2X1 - v1X1; v12Y1 = v2Y1 - v1Y1; v12Z1 = v2Z1 - v1Z1; v23X = v3X1 - v2X1; v23Y = v3Y1 - v2Y1; v23Z = v3Z1 - v2Z1; v31X = v1X1 - v3X1; v31Y = v1Y1 - v3Y1; v31Z = v1Z1 - v3Z1; var n; var nX; var nY; var nZ; nX = v12Y1 * v23Z - v12Z1 * v23Y; nY = v12Z1 * v23X - v12X1 * v23Z; nZ = v12X1 * v23Y - v12Y1 * v23X; var n12; var n12X; var n12Y; var n12Z; var n23; var n23X; var n23Y; var n23Z; var n31; var n31X; var n31Y; var n31Z; n12X = v12Y1 * nZ - v12Z1 * nY; n12Y = v12Z1 * nX - v12X1 * nZ; n12Z = v12X1 * nY - v12Y1 * nX; n23X = v23Y * nZ - v23Z * nY; n23Y = v23Z * nX - v23X * nZ; n23Z = v23X * nY - v23Y * nX; n31X = v31Y * nZ - v31Z * nY; n31Y = v31Z * nX - v31X * nZ; n31Z = v31X * nY - v31Y * nX; var d12 = v1X1 * n12X + v1Y1 * n12Y + v1Z1 * n12Z; var d23 = v2X1 * n23X + v2Y1 * n23Y + v2Z1 * n23Z; var d31 = v3X1 * n31X + v3Y1 * n31Y + v3Z1 * n31Z; var mind = -1; var minv; var minvX; var minvY; var minvZ; var mini = 0; minvX = 0; minvY = 0; minvZ = 0; if(d12 < 0) { var v14; var v1X2; var v1Y2; var v1Z2; var v22; var v2X2; var v2Y2; var v2Z2; var v15 = vec1; v1X2 = v15.x; v1Y2 = v15.y; v1Z2 = v15.z; var v16 = vec2; v2X2 = v16.x; v2Y2 = v16.y; v2Z2 = v16.z; var v122; var v12X2; var v12Y2; var v12Z2; v12X2 = v2X2 - v1X2; v12Y2 = v2Y2 - v1Y2; v12Z2 = v2Z2 - v1Z2; var d1 = v12X2 * v12X2 + v12Y2 * v12Y2 + v12Z2 * v12Z2; var t = v12X2 * v1X2 + v12Y2 * v1Y2 + v12Z2 * v1Z2; t = -t / d1; var b; if(t < 0) { var v17 = out; v17.x = v1X2; v17.y = v1Y2; v17.z = v1Z2; b = 1; } else if(t > 1) { var v18 = out; v18.x = v2X2; v18.y = v2Y2; v18.z = v2Z2; b = 2; } else { var p; var pX; var pY; var pZ; pX = v1X2 + v12X2 * t; pY = v1Y2 + v12Y2 * t; pZ = v1Z2 + v12Z2 * t; var v19 = out; v19.x = pX; v19.y = pY; v19.z = pZ; b = 3; } var d2 = out.x * out.x + out.y * out.y + out.z * out.z; mini = b; mind = d2; var v20 = out; minvX = v20.x; minvY = v20.y; minvZ = v20.z; } if(d23 < 0) { var v110; var v1X3; var v1Y3; var v1Z3; var v24; var v2X3; var v2Y3; var v2Z3; var v25 = vec2; v1X3 = v25.x; v1Y3 = v25.y; v1Z3 = v25.z; var v26 = vec3; v2X3 = v26.x; v2Y3 = v26.y; v2Z3 = v26.z; var v123; var v12X3; var v12Y3; var v12Z3; v12X3 = v2X3 - v1X3; v12Y3 = v2Y3 - v1Y3; v12Z3 = v2Z3 - v1Z3; var d3 = v12X3 * v12X3 + v12Y3 * v12Y3 + v12Z3 * v12Z3; var t1 = v12X3 * v1X3 + v12Y3 * v1Y3 + v12Z3 * v1Z3; t1 = -t1 / d3; var b1; if(t1 < 0) { var v27 = out; v27.x = v1X3; v27.y = v1Y3; v27.z = v1Z3; b1 = 1; } else if(t1 > 1) { var v28 = out; v28.x = v2X3; v28.y = v2Y3; v28.z = v2Z3; b1 = 2; } else { var p1; var pX1; var pY1; var pZ1; pX1 = v1X3 + v12X3 * t1; pY1 = v1Y3 + v12Y3 * t1; pZ1 = v1Z3 + v12Z3 * t1; var v29 = out; v29.x = pX1; v29.y = pY1; v29.z = pZ1; b1 = 3; } var d4 = out.x * out.x + out.y * out.y + out.z * out.z; if(mind < 0 || d4 < mind) { mini = b1 << 1; mind = d4; var v30 = out; minvX = v30.x; minvY = v30.y; minvZ = v30.z; } } if(d31 < 0) { var v111; var v1X4; var v1Y4; var v1Z4; var v210; var v2X4; var v2Y4; var v2Z4; var v32 = vec1; v1X4 = v32.x; v1Y4 = v32.y; v1Z4 = v32.z; var v33 = vec3; v2X4 = v33.x; v2Y4 = v33.y; v2Z4 = v33.z; var v124; var v12X4; var v12Y4; var v12Z4; v12X4 = v2X4 - v1X4; v12Y4 = v2Y4 - v1Y4; v12Z4 = v2Z4 - v1Z4; var d5 = v12X4 * v12X4 + v12Y4 * v12Y4 + v12Z4 * v12Z4; var t2 = v12X4 * v1X4 + v12Y4 * v1Y4 + v12Z4 * v1Z4; t2 = -t2 / d5; var b2; if(t2 < 0) { var v34 = out; v34.x = v1X4; v34.y = v1Y4; v34.z = v1Z4; b2 = 1; } else if(t2 > 1) { var v35 = out; v35.x = v2X4; v35.y = v2Y4; v35.z = v2Z4; b2 = 2; } else { var p2; var pX2; var pY2; var pZ2; pX2 = v1X4 + v12X4 * t2; pY2 = v1Y4 + v12Y4 * t2; pZ2 = v1Z4 + v12Z4 * t2; var v36 = out; v36.x = pX2; v36.y = pY2; v36.z = pZ2; b2 = 3; } var d6 = out.x * out.x + out.y * out.y + out.z * out.z; if(mind < 0 || d6 < mind) { mini = b2 & 1 | (b2 & 2) << 1; mind = d6; var v37 = out; minvX = v37.x; minvY = v37.y; minvZ = v37.z; } } if(mind > 0) { var v38 = out; v38.x = minvX; v38.y = minvY; v38.z = minvZ; } else { var l = nX * nX + nY * nY + nZ * nZ; if(l > 0) { l = 1 / Math.sqrt(l); } nX *= l; nY *= l; nZ *= l; var dn = v1X1 * nX + v1Y1 * nY + v1Z1 * nZ; var l2 = nX * nX + nY * nY + nZ * nZ; l2 = dn / l2; minvX = nX * l2; minvY = nY * l2; minvZ = nZ * l2; var v39 = out; v39.x = minvX; v39.y = minvY; v39.z = minvZ; } var _this = this.tmp; this._distanceSq = _this.x * _this.x + _this.y * _this.y + _this.z * _this.z; this._adjacentTriangles[0] = null; this._adjacentTriangles[1] = null; this._adjacentTriangles[2] = null; this._adjacentPairIndex[0] = -1; this._adjacentPairIndex[1] = -1; this._adjacentPairIndex[2] = -1; return !inverted; } setAdjacentTriangle(triangle) { var count = 0; var i2 = this._nextIndex[0]; var j2 = this._nextIndex[0]; if(this._vertices[0] == triangle._vertices[j2] && this._vertices[i2] == triangle._vertices[0]) { this._adjacentTriangles[0] = triangle; this._adjacentPairIndex[0] = 0; triangle._adjacentTriangles[0] = this; triangle._adjacentPairIndex[0] = 0; ++count; } var i21 = this._nextIndex[0]; var j21 = this._nextIndex[1]; if(this._vertices[0] == triangle._vertices[j21] && this._vertices[i21] == triangle._vertices[1]) { this._adjacentTriangles[0] = triangle; this._adjacentPairIndex[0] = 1; triangle._adjacentTriangles[1] = this; triangle._adjacentPairIndex[1] = 0; ++count; } var i22 = this._nextIndex[0]; var j22 = this._nextIndex[2]; if(this._vertices[0] == triangle._vertices[j22] && this._vertices[i22] == triangle._vertices[2]) { this._adjacentTriangles[0] = triangle; this._adjacentPairIndex[0] = 2; triangle._adjacentTriangles[2] = this; triangle._adjacentPairIndex[2] = 0; ++count; } var i23 = this._nextIndex[1]; var j23 = this._nextIndex[0]; if(this._vertices[1] == triangle._vertices[j23] && this._vertices[i23] == triangle._vertices[0]) { this._adjacentTriangles[1] = triangle; this._adjacentPairIndex[1] = 0; triangle._adjacentTriangles[0] = this; triangle._adjacentPairIndex[0] = 1; ++count; } var i24 = this._nextIndex[1]; var j24 = this._nextIndex[1]; if(this._vertices[1] == triangle._vertices[j24] && this._vertices[i24] == triangle._vertices[1]) { this._adjacentTriangles[1] = triangle; this._adjacentPairIndex[1] = 1; triangle._adjacentTriangles[1] = this; triangle._adjacentPairIndex[1] = 1; ++count; } var i25 = this._nextIndex[1]; var j25 = this._nextIndex[2]; if(this._vertices[1] == triangle._vertices[j25] && this._vertices[i25] == triangle._vertices[2]) { this._adjacentTriangles[1] = triangle; this._adjacentPairIndex[1] = 2; triangle._adjacentTriangles[2] = this; triangle._adjacentPairIndex[2] = 1; ++count; } var i26 = this._nextIndex[2]; var j26 = this._nextIndex[0]; if(this._vertices[2] == triangle._vertices[j26] && this._vertices[i26] == triangle._vertices[0]) { this._adjacentTriangles[2] = triangle; this._adjacentPairIndex[2] = 0; triangle._adjacentTriangles[0] = this; triangle._adjacentPairIndex[0] = 2; ++count; } var i27 = this._nextIndex[2]; var j27 = this._nextIndex[1]; if(this._vertices[2] == triangle._vertices[j27] && this._vertices[i27] == triangle._vertices[1]) { this._adjacentTriangles[2] = triangle; this._adjacentPairIndex[2] = 1; triangle._adjacentTriangles[1] = this; triangle._adjacentPairIndex[1] = 2; ++count; } var i28 = this._nextIndex[2]; var j28 = this._nextIndex[2]; if(this._vertices[2] == triangle._vertices[j28] && this._vertices[i28] == triangle._vertices[2]) { this._adjacentTriangles[2] = triangle; this._adjacentPairIndex[2] = 2; triangle._adjacentTriangles[2] = this; triangle._adjacentPairIndex[2] = 2; ++count; } if(count != 1) { return false; } return true; } removeAdjacentTriangles() { var triangle = this._adjacentTriangles[0]; if(triangle != null) { var pairIndex = this._adjacentPairIndex[0]; triangle._adjacentTriangles[pairIndex] = null; triangle._adjacentPairIndex[pairIndex] = -1; this._adjacentTriangles[0] = null; this._adjacentPairIndex[0] = -1; } var triangle1 = this._adjacentTriangles[1]; if(triangle1 != null) { var pairIndex1 = this._adjacentPairIndex[1]; triangle1._adjacentTriangles[pairIndex1] = null; triangle1._adjacentPairIndex[pairIndex1] = -1; this._adjacentTriangles[1] = null; this._adjacentPairIndex[1] = -1; } var triangle2 = this._adjacentTriangles[2]; if(triangle2 != null) { var pairIndex2 = this._adjacentPairIndex[2]; triangle2._adjacentTriangles[pairIndex2] = null; triangle2._adjacentPairIndex[pairIndex2] = -1; this._adjacentTriangles[2] = null; this._adjacentPairIndex[2] = -1; } } removeReferences() { this._next = null; this._prev = null; this._tmpDfsId = 0; this._tmpDfsVisible = false; this._distanceSq = 0; this._vertices[0] = null; this._vertices[1] = null; this._vertices[2] = null; this._adjacentTriangles[0] = null; this._adjacentTriangles[1] = null; this._adjacentTriangles[2] = null; this._adjacentPairIndex[0] = 0; this._adjacentPairIndex[1] = 0; this._adjacentPairIndex[2] = 0; } dump() { } } oimo.collision.narrowphase.detector.gjkepa.EpaVertex = class oimo_collision_narrowphase_detector_gjkepa_EpaVertex { constructor() { this.randId = Math.random() * 100000 | 0; this.v = new oimo.common.Vec3(); this.w1 = new oimo.common.Vec3(); this.w2 = new oimo.common.Vec3(); } init(v,w1,w2) { var _this = this.v; _this.x = v.x; _this.y = v.y; _this.z = v.z; var _this1 = this.w1; _this1.x = w1.x; _this1.y = w1.y; _this1.z = w1.z; var _this2 = this.w2; _this2.x = w2.x; _this2.y = w2.y; _this2.z = w2.z; this._next = null; this._tmpEdgeLoopNext = null; this._tmpEdgeLoopOuterTriangle = null; return this; } removeReferences() { this._next = null; this._tmpEdgeLoopNext = null; this._tmpEdgeLoopOuterTriangle = null; } } oimo.collision.narrowphase.detector.gjkepa.GjkCache = class oimo_collision_narrowphase_detector_gjkepa_GjkCache { constructor() { this.prevClosestDir = new oimo.common.Vec3(); } clear() { this.prevClosestDir.zero(); } } if(!oimo.common) oimo.common = {}; oimo.common.Vec3 = class oimo_common_Vec3 { constructor(x,y,z) { if(z == null) { z = 0; } if(y == null) { y = 0; } if(x == null) { x = 0; } this.x = x; this.y = y; this.z = z; oimo.common.Vec3.numCreations++; } init(x,y,z) { this.x = x; this.y = y; this.z = z; return this; } zero() { var tx = 0; var ty = 0; var tz = 0; this.x = tx; this.y = ty; this.z = tz; return this; } add(v) { return new oimo.common.Vec3(this.x + v.x,this.y + v.y,this.z + v.z); } add3(vx,vy,vz) { return new oimo.common.Vec3(this.x + vx,this.y + vy,this.z + vz); } addScaled(v,s) { return new oimo.common.Vec3(this.x + v.x * s,this.y + v.y * s,this.z + v.z * s); } sub(v) { return new oimo.common.Vec3(this.x - v.x,this.y - v.y,this.z - v.z); } sub3(vx,vy,vz) { return new oimo.common.Vec3(this.x - vx,this.y - vy,this.z - vz); } scale(s) { return new oimo.common.Vec3(this.x * s,this.y * s,this.z * s); } scale3(sx,sy,sz) { return new oimo.common.Vec3(this.x * sx,this.y * sy,this.z * sz); } dot(v) { return this.x * v.x + this.y * v.y + this.z * v.z; } cross(v) { return new oimo.common.Vec3(this.y * v.z - this.z * v.y,this.z * v.x - this.x * v.z,this.x * v.y - this.y * v.x); } addEq(v) { var tx = this.x + v.x; var ty = this.y + v.y; var tz = this.z + v.z; this.x = tx; this.y = ty; this.z = tz; return this; } add3Eq(vx,vy,vz) { var tx = this.x + vx; var ty = this.y + vy; var tz = this.z + vz; this.x = tx; this.y = ty; this.z = tz; return this; } addScaledEq(v,s) { var tx = this.x + v.x * s; var ty = this.y + v.y * s; var tz = this.z + v.z * s; this.x = tx; this.y = ty; this.z = tz; return this; } subEq(v) { var tx = this.x - v.x; var ty = this.y - v.y; var tz = this.z - v.z; this.x = tx; this.y = ty; this.z = tz; return this; } sub3Eq(vx,vy,vz) { var tx = this.x - vx; var ty = this.y - vy; var tz = this.z - vz; this.x = tx; this.y = ty; this.z = tz; return this; } scaleEq(s) { var tx = this.x * s; var ty = this.y * s; var tz = this.z * s; this.x = tx; this.y = ty; this.z = tz; return this; } scale3Eq(sx,sy,sz) { var tx = this.x * sx; var ty = this.y * sy; var tz = this.z * sz; this.x = tx; this.y = ty; this.z = tz; return this; } crossEq(v) { var tx = this.y * v.z - this.z * v.y; var ty = this.z * v.x - this.x * v.z; var tz = this.x * v.y - this.y * v.x; this.x = tx; this.y = ty; this.z = tz; return this; } mulMat3(m) { return new oimo.common.Vec3(this.x * m.e00 + this.y * m.e01 + this.z * m.e02,this.x * m.e10 + this.y * m.e11 + this.z * m.e12,this.x * m.e20 + this.y * m.e21 + this.z * m.e22); } mulMat4(m) { return new oimo.common.Vec3(this.x * m.e00 + this.y * m.e01 + this.z * m.e02 + m.e03,this.x * m.e10 + this.y * m.e11 + this.z * m.e12 + m.e13,this.x * m.e20 + this.y * m.e21 + this.z * m.e22 + m.e23); } mulTransform(tf) { var v; var vX; var vY; var vZ; var v1 = this; vX = v1.x; vY = v1.y; vZ = v1.z; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = tf._rotation00 * vX + tf._rotation01 * vY + tf._rotation02 * vZ; __tmp__Y = tf._rotation10 * vX + tf._rotation11 * vY + tf._rotation12 * vZ; __tmp__Z = tf._rotation20 * vX + tf._rotation21 * vY + tf._rotation22 * vZ; vX = __tmp__X; vY = __tmp__Y; vZ = __tmp__Z; vX += tf._positionX; vY += tf._positionY; vZ += tf._positionZ; var res = new oimo.common.Vec3(); var v2 = res; v2.x = vX; v2.y = vY; v2.z = vZ; return res; } mulMat3Eq(m) { var tx = this.x * m.e00 + this.y * m.e01 + this.z * m.e02; var ty = this.x * m.e10 + this.y * m.e11 + this.z * m.e12; var tz = this.x * m.e20 + this.y * m.e21 + this.z * m.e22; this.x = tx; this.y = ty; this.z = tz; return this; } mulMat4Eq(m) { var tx = this.x * m.e00 + this.y * m.e01 + this.z * m.e02 + m.e03; var ty = this.x * m.e10 + this.y * m.e11 + this.z * m.e12 + m.e13; var tz = this.x * m.e20 + this.y * m.e21 + this.z * m.e22 + m.e23; this.x = tx; this.y = ty; this.z = tz; return this; } mulTransformEq(tf) { var v; var vX; var vY; var vZ; var v1 = this; vX = v1.x; vY = v1.y; vZ = v1.z; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = tf._rotation00 * vX + tf._rotation01 * vY + tf._rotation02 * vZ; __tmp__Y = tf._rotation10 * vX + tf._rotation11 * vY + tf._rotation12 * vZ; __tmp__Z = tf._rotation20 * vX + tf._rotation21 * vY + tf._rotation22 * vZ; vX = __tmp__X; vY = __tmp__Y; vZ = __tmp__Z; vX += tf._positionX; vY += tf._positionY; vZ += tf._positionZ; var v2 = this; v2.x = vX; v2.y = vY; v2.z = vZ; return this; } length() { return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); } lengthSq() { return this.x * this.x + this.y * this.y + this.z * this.z; } normalized() { var invLen = Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); if(invLen > 0) { invLen = 1 / invLen; } return new oimo.common.Vec3(this.x * invLen,this.y * invLen,this.z * invLen); } normalize() { var invLen = Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); if(invLen > 0) { invLen = 1 / invLen; } var tx = this.x * invLen; var ty = this.y * invLen; var tz = this.z * invLen; this.x = tx; this.y = ty; this.z = tz; return this; } negate() { return new oimo.common.Vec3(-this.x,-this.y,-this.z); } negateEq() { var tx = -this.x; var ty = -this.y; var tz = -this.z; this.x = tx; this.y = ty; this.z = tz; return this; } copyFrom(v) { this.x = v.x; this.y = v.y; this.z = v.z; return this; } clone() { return new oimo.common.Vec3(this.x,this.y,this.z); } toString() { return "Vec3[" + (this.x > 0 ? (this.x * 10000000 + 0.5 | 0) / 10000000 : (this.x * 10000000 - 0.5 | 0) / 10000000) + ", " + (this.y > 0 ? (this.y * 10000000 + 0.5 | 0) / 10000000 : (this.y * 10000000 - 0.5 | 0) / 10000000) + ", " + (this.z > 0 ? (this.z * 10000000 + 0.5 | 0) / 10000000 : (this.z * 10000000 - 0.5 | 0) / 10000000) + "]"; } } oimo.common.Transform = class oimo_common_Transform { constructor() { this._positionX = 0; this._positionY = 0; this._positionZ = 0; this._rotation00 = 1; this._rotation01 = 0; this._rotation02 = 0; this._rotation10 = 0; this._rotation11 = 1; this._rotation12 = 0; this._rotation20 = 0; this._rotation21 = 0; this._rotation22 = 1; } identity() { this._positionX = 0; this._positionY = 0; this._positionZ = 0; this._rotation00 = 1; this._rotation01 = 0; this._rotation02 = 0; this._rotation10 = 0; this._rotation11 = 1; this._rotation12 = 0; this._rotation20 = 0; this._rotation21 = 0; this._rotation22 = 1; return this; } getPosition() { var position = new oimo.common.Vec3(); var v = position; v.x = this._positionX; v.y = this._positionY; v.z = this._positionZ; return position; } getPositionTo(position) { var v = position; v.x = this._positionX; v.y = this._positionY; v.z = this._positionZ; } setPosition(position) { var v = position; this._positionX = v.x; this._positionY = v.y; this._positionZ = v.z; return this; } translate(translation) { var diff; var diffX; var diffY; var diffZ; var v = translation; diffX = v.x; diffY = v.y; diffZ = v.z; this._positionX += diffX; this._positionY += diffY; this._positionZ += diffZ; } getRotation() { var rotation = new oimo.common.Mat3(); var m = rotation; m.e00 = this._rotation00; m.e01 = this._rotation01; m.e02 = this._rotation02; m.e10 = this._rotation10; m.e11 = this._rotation11; m.e12 = this._rotation12; m.e20 = this._rotation20; m.e21 = this._rotation21; m.e22 = this._rotation22; return rotation; } getRotationTo(out) { var m = out; m.e00 = this._rotation00; m.e01 = this._rotation01; m.e02 = this._rotation02; m.e10 = this._rotation10; m.e11 = this._rotation11; m.e12 = this._rotation12; m.e20 = this._rotation20; m.e21 = this._rotation21; m.e22 = this._rotation22; } setRotation(rotation) { var m = rotation; this._rotation00 = m.e00; this._rotation01 = m.e01; this._rotation02 = m.e02; this._rotation10 = m.e10; this._rotation11 = m.e11; this._rotation12 = m.e12; this._rotation20 = m.e20; this._rotation21 = m.e21; this._rotation22 = m.e22; return this; } setRotationXyz(eulerAngles) { var xyz; var xyzX; var xyzY; var xyzZ; var v = eulerAngles; xyzX = v.x; xyzY = v.y; xyzZ = v.z; var sx = Math.sin(xyzX); var sy = Math.sin(xyzY); var sz = Math.sin(xyzZ); var cx = Math.cos(xyzX); var cy = Math.cos(xyzY); var cz = Math.cos(xyzZ); this._rotation00 = cy * cz; this._rotation01 = -cy * sz; this._rotation02 = sy; this._rotation10 = cx * sz + cz * sx * sy; this._rotation11 = cx * cz - sx * sy * sz; this._rotation12 = -cy * sx; this._rotation20 = sx * sz - cx * cz * sy; this._rotation21 = cz * sx + cx * sy * sz; this._rotation22 = cx * cy; } rotate(rotation) { var rot; var rot00; var rot01; var rot02; var rot10; var rot11; var rot12; var rot20; var rot21; var rot22; var m = rotation; rot00 = m.e00; rot01 = m.e01; rot02 = m.e02; rot10 = m.e10; rot11 = m.e11; rot12 = m.e12; rot20 = m.e20; rot21 = m.e21; rot22 = m.e22; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = rot00 * this._rotation00 + rot01 * this._rotation10 + rot02 * this._rotation20; __tmp__01 = rot00 * this._rotation01 + rot01 * this._rotation11 + rot02 * this._rotation21; __tmp__02 = rot00 * this._rotation02 + rot01 * this._rotation12 + rot02 * this._rotation22; __tmp__10 = rot10 * this._rotation00 + rot11 * this._rotation10 + rot12 * this._rotation20; __tmp__11 = rot10 * this._rotation01 + rot11 * this._rotation11 + rot12 * this._rotation21; __tmp__12 = rot10 * this._rotation02 + rot11 * this._rotation12 + rot12 * this._rotation22; __tmp__20 = rot20 * this._rotation00 + rot21 * this._rotation10 + rot22 * this._rotation20; __tmp__21 = rot20 * this._rotation01 + rot21 * this._rotation11 + rot22 * this._rotation21; __tmp__22 = rot20 * this._rotation02 + rot21 * this._rotation12 + rot22 * this._rotation22; this._rotation00 = __tmp__00; this._rotation01 = __tmp__01; this._rotation02 = __tmp__02; this._rotation10 = __tmp__10; this._rotation11 = __tmp__11; this._rotation12 = __tmp__12; this._rotation20 = __tmp__20; this._rotation21 = __tmp__21; this._rotation22 = __tmp__22; } rotateXyz(eulerAngles) { var xyz; var xyzX; var xyzY; var xyzZ; var rot; var rot00; var rot01; var rot02; var rot10; var rot11; var rot12; var rot20; var rot21; var rot22; var v = eulerAngles; xyzX = v.x; xyzY = v.y; xyzZ = v.z; var sx = Math.sin(xyzX); var sy = Math.sin(xyzY); var sz = Math.sin(xyzZ); var cx = Math.cos(xyzX); var cy = Math.cos(xyzY); var cz = Math.cos(xyzZ); rot00 = cy * cz; rot01 = -cy * sz; rot02 = sy; rot10 = cx * sz + cz * sx * sy; rot11 = cx * cz - sx * sy * sz; rot12 = -cy * sx; rot20 = sx * sz - cx * cz * sy; rot21 = cz * sx + cx * sy * sz; rot22 = cx * cy; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = rot00 * this._rotation00 + rot01 * this._rotation10 + rot02 * this._rotation20; __tmp__01 = rot00 * this._rotation01 + rot01 * this._rotation11 + rot02 * this._rotation21; __tmp__02 = rot00 * this._rotation02 + rot01 * this._rotation12 + rot02 * this._rotation22; __tmp__10 = rot10 * this._rotation00 + rot11 * this._rotation10 + rot12 * this._rotation20; __tmp__11 = rot10 * this._rotation01 + rot11 * this._rotation11 + rot12 * this._rotation21; __tmp__12 = rot10 * this._rotation02 + rot11 * this._rotation12 + rot12 * this._rotation22; __tmp__20 = rot20 * this._rotation00 + rot21 * this._rotation10 + rot22 * this._rotation20; __tmp__21 = rot20 * this._rotation01 + rot21 * this._rotation11 + rot22 * this._rotation21; __tmp__22 = rot20 * this._rotation02 + rot21 * this._rotation12 + rot22 * this._rotation22; this._rotation00 = __tmp__00; this._rotation01 = __tmp__01; this._rotation02 = __tmp__02; this._rotation10 = __tmp__10; this._rotation11 = __tmp__11; this._rotation12 = __tmp__12; this._rotation20 = __tmp__20; this._rotation21 = __tmp__21; this._rotation22 = __tmp__22; } getOrientation() { var q = new oimo.common.Quat(); var iq; var iqX; var iqY; var iqZ; var iqW; var e00 = this._rotation00; var e11 = this._rotation11; var e22 = this._rotation22; var t = e00 + e11 + e22; var s; if(t > 0) { s = Math.sqrt(t + 1); iqW = 0.5 * s; s = 0.5 / s; iqX = (this._rotation21 - this._rotation12) * s; iqY = (this._rotation02 - this._rotation20) * s; iqZ = (this._rotation10 - this._rotation01) * s; } else if(e00 > e11) { if(e00 > e22) { s = Math.sqrt(e00 - e11 - e22 + 1); iqX = 0.5 * s; s = 0.5 / s; iqY = (this._rotation01 + this._rotation10) * s; iqZ = (this._rotation02 + this._rotation20) * s; iqW = (this._rotation21 - this._rotation12) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); iqZ = 0.5 * s; s = 0.5 / s; iqX = (this._rotation02 + this._rotation20) * s; iqY = (this._rotation12 + this._rotation21) * s; iqW = (this._rotation10 - this._rotation01) * s; } } else if(e11 > e22) { s = Math.sqrt(e11 - e22 - e00 + 1); iqY = 0.5 * s; s = 0.5 / s; iqX = (this._rotation01 + this._rotation10) * s; iqZ = (this._rotation12 + this._rotation21) * s; iqW = (this._rotation02 - this._rotation20) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); iqZ = 0.5 * s; s = 0.5 / s; iqX = (this._rotation02 + this._rotation20) * s; iqY = (this._rotation12 + this._rotation21) * s; iqW = (this._rotation10 - this._rotation01) * s; } var q1 = q; q1.x = iqX; q1.y = iqY; q1.z = iqZ; q1.w = iqW; return q; } getOrientationTo(orientation) { var iq; var iqX; var iqY; var iqZ; var iqW; var e00 = this._rotation00; var e11 = this._rotation11; var e22 = this._rotation22; var t = e00 + e11 + e22; var s; if(t > 0) { s = Math.sqrt(t + 1); iqW = 0.5 * s; s = 0.5 / s; iqX = (this._rotation21 - this._rotation12) * s; iqY = (this._rotation02 - this._rotation20) * s; iqZ = (this._rotation10 - this._rotation01) * s; } else if(e00 > e11) { if(e00 > e22) { s = Math.sqrt(e00 - e11 - e22 + 1); iqX = 0.5 * s; s = 0.5 / s; iqY = (this._rotation01 + this._rotation10) * s; iqZ = (this._rotation02 + this._rotation20) * s; iqW = (this._rotation21 - this._rotation12) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); iqZ = 0.5 * s; s = 0.5 / s; iqX = (this._rotation02 + this._rotation20) * s; iqY = (this._rotation12 + this._rotation21) * s; iqW = (this._rotation10 - this._rotation01) * s; } } else if(e11 > e22) { s = Math.sqrt(e11 - e22 - e00 + 1); iqY = 0.5 * s; s = 0.5 / s; iqX = (this._rotation01 + this._rotation10) * s; iqZ = (this._rotation12 + this._rotation21) * s; iqW = (this._rotation02 - this._rotation20) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); iqZ = 0.5 * s; s = 0.5 / s; iqX = (this._rotation02 + this._rotation20) * s; iqY = (this._rotation12 + this._rotation21) * s; iqW = (this._rotation10 - this._rotation01) * s; } var q = orientation; q.x = iqX; q.y = iqY; q.z = iqZ; q.w = iqW; } setOrientation(quaternion) { var q; var qX; var qY; var qZ; var qW; var q1 = quaternion; qX = q1.x; qY = q1.y; qZ = q1.z; qW = q1.w; var x = qX; var y = qY; var z = qZ; var w = qW; var x2 = 2 * x; var y2 = 2 * y; var z2 = 2 * z; var xx = x * x2; var yy = y * y2; var zz = z * z2; var xy = x * y2; var yz = y * z2; var xz = x * z2; var wx = w * x2; var wy = w * y2; var wz = w * z2; this._rotation00 = 1 - yy - zz; this._rotation01 = xy - wz; this._rotation02 = xz + wy; this._rotation10 = xy + wz; this._rotation11 = 1 - xx - zz; this._rotation12 = yz - wx; this._rotation20 = xz - wy; this._rotation21 = yz + wx; this._rotation22 = 1 - xx - yy; return this; } clone() { var tf = new oimo.common.Transform(); tf._positionX = this._positionX; tf._positionY = this._positionY; tf._positionZ = this._positionZ; tf._rotation00 = this._rotation00; tf._rotation01 = this._rotation01; tf._rotation02 = this._rotation02; tf._rotation10 = this._rotation10; tf._rotation11 = this._rotation11; tf._rotation12 = this._rotation12; tf._rotation20 = this._rotation20; tf._rotation21 = this._rotation21; tf._rotation22 = this._rotation22; return tf; } copyFrom(transform) { this._positionX = transform._positionX; this._positionY = transform._positionY; this._positionZ = transform._positionZ; this._rotation00 = transform._rotation00; this._rotation01 = transform._rotation01; this._rotation02 = transform._rotation02; this._rotation10 = transform._rotation10; this._rotation11 = transform._rotation11; this._rotation12 = transform._rotation12; this._rotation20 = transform._rotation20; this._rotation21 = transform._rotation21; this._rotation22 = transform._rotation22; return this; } } oimo.common.Setting = class oimo_common_Setting { } oimo.collision.narrowphase.detector.gjkepa.GjkEpa = class oimo_collision_narrowphase_detector_gjkepa_GjkEpa { constructor() { var this1 = new Array(4); this.s = this1; var this2 = new Array(4); this.w1 = this2; var this3 = new Array(4); this.w2 = this3; var this4 = new Array(3); this.baseDirs = this4; this.baseDirs[0] = new oimo.common.Vec3(1,0,0); this.baseDirs[1] = new oimo.common.Vec3(0,1,0); this.baseDirs[2] = new oimo.common.Vec3(0,0,1); this.tl1 = new oimo.common.Vec3(); this.tl2 = new oimo.common.Vec3(); this.rayX = new oimo.common.Vec3(); this.rayR = new oimo.common.Vec3(); this.tempTransform = new oimo.common.Transform(); this.s[0] = new oimo.common.Vec3(); this.w1[0] = new oimo.common.Vec3(); this.w2[0] = new oimo.common.Vec3(); this.s[1] = new oimo.common.Vec3(); this.w1[1] = new oimo.common.Vec3(); this.w2[1] = new oimo.common.Vec3(); this.s[2] = new oimo.common.Vec3(); this.w1[2] = new oimo.common.Vec3(); this.w2[2] = new oimo.common.Vec3(); this.s[3] = new oimo.common.Vec3(); this.w1[3] = new oimo.common.Vec3(); this.w2[3] = new oimo.common.Vec3(); this.dir = new oimo.common.Vec3(); this.closest = new oimo.common.Vec3(); this.closestPoint1 = new oimo.common.Vec3(); this.closestPoint2 = new oimo.common.Vec3(); this.polyhedron = new oimo.collision.narrowphase.detector.gjkepa.EpaPolyhedron(); } computeClosestPointsImpl(c1,c2,tf1,tf2,cache,useEpa) { this.c1 = c1; this.c2 = c2; this.tf1 = tf1; this.tf2 = tf2; var s = this.s; var w1 = this.w1; var w2 = this.w2; var closest = this.closest; var dir = this.dir; if(cache != null) { if(cache._gjkCache == null) { cache._gjkCache = new oimo.collision.narrowphase.detector.gjkepa.GjkCache(); } this.loadCache(cache._gjkCache); } else { dir.zero(); } if(dir.x * dir.x + dir.y * dir.y + dir.z * dir.z == 0) { var firstDir; var firstDirX; var firstDirY; var firstDirZ; firstDirX = tf2._positionX - tf1._positionX; firstDirY = tf2._positionY - tf1._positionY; firstDirZ = tf2._positionZ - tf1._positionZ; var v = dir; v.x = firstDirX; v.y = firstDirY; v.z = firstDirZ; if(dir.x * dir.x + dir.y * dir.y + dir.z * dir.z < 1e-6) { dir.init(1,0,0); } } this.simplexSize = 0; this.computeWitnessPoint1(false); this.computeWitnessPoint2(false); var _this = this.s[this.simplexSize]; var v1 = this.w1[this.simplexSize]; _this.x = v1.x; _this.y = v1.y; _this.z = v1.z; var _this1 = _this; var v2 = this.w2[this.simplexSize]; var tx = _this1.x - v2.x; var ty = _this1.y - v2.y; var tz = _this1.z - v2.z; _this1.x = tx; _this1.y = ty; _this1.z = tz; this.simplexSize = 1; var count = 0; var max = 40; var eps = 1e-4; var eps2 = eps * eps; while(count < max) { var v3 = 0; switch(this.simplexSize) { case 1: var v4 = s[0]; closest.x = v4.x; closest.y = v4.y; closest.z = v4.z; v3 = 1; break; case 2: var v11; var v1X; var v1Y; var v1Z; var v21; var v2X; var v2Y; var v2Z; var v5 = s[0]; v1X = v5.x; v1Y = v5.y; v1Z = v5.z; var v6 = s[1]; v2X = v6.x; v2Y = v6.y; v2Z = v6.z; var v12; var v12X; var v12Y; var v12Z; v12X = v2X - v1X; v12Y = v2Y - v1Y; v12Z = v2Z - v1Z; var d = v12X * v12X + v12Y * v12Y + v12Z * v12Z; var t = v12X * v1X + v12Y * v1Y + v12Z * v1Z; t = -t / d; if(t < 0) { var v7 = closest; v7.x = v1X; v7.y = v1Y; v7.z = v1Z; v3 = 1; } else if(t > 1) { var v8 = closest; v8.x = v2X; v8.y = v2Y; v8.z = v2Z; v3 = 2; } else { var p; var pX; var pY; var pZ; pX = v1X + v12X * t; pY = v1Y + v12Y * t; pZ = v1Z + v12Z * t; var v9 = closest; v9.x = pX; v9.y = pY; v9.z = pZ; v3 = 3; } break; case 3: var vec1 = s[0]; var vec2 = s[1]; var vec3 = s[2]; var v13; var v1X1; var v1Y1; var v1Z1; var v22; var v2X1; var v2Y1; var v2Z1; var v31; var v3X; var v3Y; var v3Z; var v121; var v12X1; var v12Y1; var v12Z1; var v23; var v23X; var v23Y; var v23Z; var v311; var v31X; var v31Y; var v31Z; var v10 = vec1; v1X1 = v10.x; v1Y1 = v10.y; v1Z1 = v10.z; var v14 = vec2; v2X1 = v14.x; v2Y1 = v14.y; v2Z1 = v14.z; var v15 = vec3; v3X = v15.x; v3Y = v15.y; v3Z = v15.z; v12X1 = v2X1 - v1X1; v12Y1 = v2Y1 - v1Y1; v12Z1 = v2Z1 - v1Z1; v23X = v3X - v2X1; v23Y = v3Y - v2Y1; v23Z = v3Z - v2Z1; v31X = v1X1 - v3X; v31Y = v1Y1 - v3Y; v31Z = v1Z1 - v3Z; var n; var nX; var nY; var nZ; nX = v12Y1 * v23Z - v12Z1 * v23Y; nY = v12Z1 * v23X - v12X1 * v23Z; nZ = v12X1 * v23Y - v12Y1 * v23X; var n12; var n12X; var n12Y; var n12Z; var n23; var n23X; var n23Y; var n23Z; var n31; var n31X; var n31Y; var n31Z; n12X = v12Y1 * nZ - v12Z1 * nY; n12Y = v12Z1 * nX - v12X1 * nZ; n12Z = v12X1 * nY - v12Y1 * nX; n23X = v23Y * nZ - v23Z * nY; n23Y = v23Z * nX - v23X * nZ; n23Z = v23X * nY - v23Y * nX; n31X = v31Y * nZ - v31Z * nY; n31Y = v31Z * nX - v31X * nZ; n31Z = v31X * nY - v31Y * nX; var d12 = v1X1 * n12X + v1Y1 * n12Y + v1Z1 * n12Z; var d23 = v2X1 * n23X + v2Y1 * n23Y + v2Z1 * n23Z; var d31 = v3X * n31X + v3Y * n31Y + v3Z * n31Z; var mind = -1; var minv; var minvX; var minvY; var minvZ; var mini = 0; minvX = 0; minvY = 0; minvZ = 0; if(d12 < 0) { var v16; var v1X2; var v1Y2; var v1Z2; var v24; var v2X2; var v2Y2; var v2Z2; var v17 = vec1; v1X2 = v17.x; v1Y2 = v17.y; v1Z2 = v17.z; var v18 = vec2; v2X2 = v18.x; v2Y2 = v18.y; v2Z2 = v18.z; var v122; var v12X2; var v12Y2; var v12Z2; v12X2 = v2X2 - v1X2; v12Y2 = v2Y2 - v1Y2; v12Z2 = v2Z2 - v1Z2; var d1 = v12X2 * v12X2 + v12Y2 * v12Y2 + v12Z2 * v12Z2; var t1 = v12X2 * v1X2 + v12Y2 * v1Y2 + v12Z2 * v1Z2; t1 = -t1 / d1; var b; if(t1 < 0) { var v19 = closest; v19.x = v1X2; v19.y = v1Y2; v19.z = v1Z2; b = 1; } else if(t1 > 1) { var v20 = closest; v20.x = v2X2; v20.y = v2Y2; v20.z = v2Z2; b = 2; } else { var p1; var pX1; var pY1; var pZ1; pX1 = v1X2 + v12X2 * t1; pY1 = v1Y2 + v12Y2 * t1; pZ1 = v1Z2 + v12Z2 * t1; var v25 = closest; v25.x = pX1; v25.y = pY1; v25.z = pZ1; b = 3; } var d2 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; mini = b; mind = d2; var v26 = closest; minvX = v26.x; minvY = v26.y; minvZ = v26.z; } if(d23 < 0) { var v110; var v1X3; var v1Y3; var v1Z3; var v27; var v2X3; var v2Y3; var v2Z3; var v28 = vec2; v1X3 = v28.x; v1Y3 = v28.y; v1Z3 = v28.z; var v29 = vec3; v2X3 = v29.x; v2Y3 = v29.y; v2Z3 = v29.z; var v123; var v12X3; var v12Y3; var v12Z3; v12X3 = v2X3 - v1X3; v12Y3 = v2Y3 - v1Y3; v12Z3 = v2Z3 - v1Z3; var d3 = v12X3 * v12X3 + v12Y3 * v12Y3 + v12Z3 * v12Z3; var t2 = v12X3 * v1X3 + v12Y3 * v1Y3 + v12Z3 * v1Z3; t2 = -t2 / d3; var b1; if(t2 < 0) { var v30 = closest; v30.x = v1X3; v30.y = v1Y3; v30.z = v1Z3; b1 = 1; } else if(t2 > 1) { var v32 = closest; v32.x = v2X3; v32.y = v2Y3; v32.z = v2Z3; b1 = 2; } else { var p2; var pX2; var pY2; var pZ2; pX2 = v1X3 + v12X3 * t2; pY2 = v1Y3 + v12Y3 * t2; pZ2 = v1Z3 + v12Z3 * t2; var v33 = closest; v33.x = pX2; v33.y = pY2; v33.z = pZ2; b1 = 3; } var d4 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind < 0 || d4 < mind) { mini = b1 << 1; mind = d4; var v34 = closest; minvX = v34.x; minvY = v34.y; minvZ = v34.z; } } if(d31 < 0) { var v111; var v1X4; var v1Y4; var v1Z4; var v210; var v2X4; var v2Y4; var v2Z4; var v35 = vec1; v1X4 = v35.x; v1Y4 = v35.y; v1Z4 = v35.z; var v36 = vec3; v2X4 = v36.x; v2Y4 = v36.y; v2Z4 = v36.z; var v124; var v12X4; var v12Y4; var v12Z4; v12X4 = v2X4 - v1X4; v12Y4 = v2Y4 - v1Y4; v12Z4 = v2Z4 - v1Z4; var d5 = v12X4 * v12X4 + v12Y4 * v12Y4 + v12Z4 * v12Z4; var t3 = v12X4 * v1X4 + v12Y4 * v1Y4 + v12Z4 * v1Z4; t3 = -t3 / d5; var b2; if(t3 < 0) { var v37 = closest; v37.x = v1X4; v37.y = v1Y4; v37.z = v1Z4; b2 = 1; } else if(t3 > 1) { var v38 = closest; v38.x = v2X4; v38.y = v2Y4; v38.z = v2Z4; b2 = 2; } else { var p3; var pX3; var pY3; var pZ3; pX3 = v1X4 + v12X4 * t3; pY3 = v1Y4 + v12Y4 * t3; pZ3 = v1Z4 + v12Z4 * t3; var v39 = closest; v39.x = pX3; v39.y = pY3; v39.z = pZ3; b2 = 3; } var d6 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind < 0 || d6 < mind) { mini = b2 & 1 | (b2 & 2) << 1; mind = d6; var v40 = closest; minvX = v40.x; minvY = v40.y; minvZ = v40.z; } } if(mind > 0) { var v41 = closest; v41.x = minvX; v41.y = minvY; v41.z = minvZ; v3 = mini; } else { var l = nX * nX + nY * nY + nZ * nZ; if(l > 0) { l = 1 / Math.sqrt(l); } nX *= l; nY *= l; nZ *= l; var dn = v1X1 * nX + v1Y1 * nY + v1Z1 * nZ; var l2 = nX * nX + nY * nY + nZ * nZ; l2 = dn / l2; minvX = nX * l2; minvY = nY * l2; minvZ = nZ * l2; var v42 = closest; v42.x = minvX; v42.y = minvY; v42.z = minvZ; v3 = 7; } break; case 4: var vec11 = s[0]; var vec21 = s[1]; var vec31 = s[2]; var vec4 = s[3]; var v112; var v1X5; var v1Y5; var v1Z5; var v211; var v2X5; var v2Y5; var v2Z5; var v310; var v3X1; var v3Y1; var v3Z1; var v43; var v4X; var v4Y; var v4Z; var v125; var v12X5; var v12Y5; var v12Z5; var v131; var v13X; var v13Y; var v13Z; var v141; var v14X; var v14Y; var v14Z; var v231; var v23X1; var v23Y1; var v23Z1; var v241; var v24X; var v24Y; var v24Z; var v341; var v34X; var v34Y; var v34Z; var v44 = vec11; v1X5 = v44.x; v1Y5 = v44.y; v1Z5 = v44.z; var v45 = vec21; v2X5 = v45.x; v2Y5 = v45.y; v2Z5 = v45.z; var v46 = vec31; v3X1 = v46.x; v3Y1 = v46.y; v3Z1 = v46.z; var v47 = vec4; v4X = v47.x; v4Y = v47.y; v4Z = v47.z; v12X5 = v2X5 - v1X5; v12Y5 = v2Y5 - v1Y5; v12Z5 = v2Z5 - v1Z5; v13X = v3X1 - v1X5; v13Y = v3Y1 - v1Y5; v13Z = v3Z1 - v1Z5; v14X = v4X - v1X5; v14Y = v4Y - v1Y5; v14Z = v4Z - v1Z5; v23X1 = v3X1 - v2X5; v23Y1 = v3Y1 - v2Y5; v23Z1 = v3Z1 - v2Z5; v24X = v4X - v2X5; v24Y = v4Y - v2Y5; v24Z = v4Z - v2Z5; v34X = v4X - v3X1; v34Y = v4Y - v3Y1; v34Z = v4Z - v3Z1; var rev; var n123; var n123X; var n123Y; var n123Z; var n134; var n134X; var n134Y; var n134Z; var n142; var n142X; var n142Y; var n142Z; var n243; var n243X; var n243Y; var n243Z; var n1; var nX1; var nY1; var nZ1; n123X = v12Y5 * v13Z - v12Z5 * v13Y; n123Y = v12Z5 * v13X - v12X5 * v13Z; n123Z = v12X5 * v13Y - v12Y5 * v13X; n134X = v13Y * v14Z - v13Z * v14Y; n134Y = v13Z * v14X - v13X * v14Z; n134Z = v13X * v14Y - v13Y * v14X; n142X = v14Y * v12Z5 - v14Z * v12Y5; n142Y = v14Z * v12X5 - v14X * v12Z5; n142Z = v14X * v12Y5 - v14Y * v12X5; n243X = v24Y * v23Z1 - v24Z * v23Y1; n243Y = v24Z * v23X1 - v24X * v23Z1; n243Z = v24X * v23Y1 - v24Y * v23X1; var sign = v12X5 * n243X + v12Y5 * n243Y + v12Z5 * n243Z > 0 ? 1 : -1; var d123 = v1X5 * n123X + v1Y5 * n123Y + v1Z5 * n123Z; var d134 = v1X5 * n134X + v1Y5 * n134Y + v1Z5 * n134Z; var d142 = v1X5 * n142X + v1Y5 * n142Y + v1Z5 * n142Z; var d243 = v2X5 * n243X + v2Y5 * n243Y + v2Z5 * n243Z; var mind1 = -1; var minv1; var minvX1; var minvY1; var minvZ1; var mini1 = 0; minvX1 = 0; minvY1 = 0; minvZ1 = 0; if(d123 * sign < 0) { var v113; var v1X6; var v1Y6; var v1Z6; var v212; var v2X6; var v2Y6; var v2Z6; var v312; var v3X2; var v3Y2; var v3Z2; var v126; var v12X6; var v12Y6; var v12Z6; var v232; var v23X2; var v23Y2; var v23Z2; var v313; var v31X1; var v31Y1; var v31Z1; var v48 = vec11; v1X6 = v48.x; v1Y6 = v48.y; v1Z6 = v48.z; var v49 = vec21; v2X6 = v49.x; v2Y6 = v49.y; v2Z6 = v49.z; var v50 = vec31; v3X2 = v50.x; v3Y2 = v50.y; v3Z2 = v50.z; v12X6 = v2X6 - v1X6; v12Y6 = v2Y6 - v1Y6; v12Z6 = v2Z6 - v1Z6; v23X2 = v3X2 - v2X6; v23Y2 = v3Y2 - v2Y6; v23Z2 = v3Z2 - v2Z6; v31X1 = v1X6 - v3X2; v31Y1 = v1Y6 - v3Y2; v31Z1 = v1Z6 - v3Z2; var n2; var nX2; var nY2; var nZ2; nX2 = v12Y6 * v23Z2 - v12Z6 * v23Y2; nY2 = v12Z6 * v23X2 - v12X6 * v23Z2; nZ2 = v12X6 * v23Y2 - v12Y6 * v23X2; var n121; var n12X1; var n12Y1; var n12Z1; var n231; var n23X1; var n23Y1; var n23Z1; var n311; var n31X1; var n31Y1; var n31Z1; n12X1 = v12Y6 * nZ2 - v12Z6 * nY2; n12Y1 = v12Z6 * nX2 - v12X6 * nZ2; n12Z1 = v12X6 * nY2 - v12Y6 * nX2; n23X1 = v23Y2 * nZ2 - v23Z2 * nY2; n23Y1 = v23Z2 * nX2 - v23X2 * nZ2; n23Z1 = v23X2 * nY2 - v23Y2 * nX2; n31X1 = v31Y1 * nZ2 - v31Z1 * nY2; n31Y1 = v31Z1 * nX2 - v31X1 * nZ2; n31Z1 = v31X1 * nY2 - v31Y1 * nX2; var d121 = v1X6 * n12X1 + v1Y6 * n12Y1 + v1Z6 * n12Z1; var d231 = v2X6 * n23X1 + v2Y6 * n23Y1 + v2Z6 * n23Z1; var d311 = v3X2 * n31X1 + v3Y2 * n31Y1 + v3Z2 * n31Z1; var mind2 = -1; var minv2; var minvX2; var minvY2; var minvZ2; var mini2 = 0; minvX2 = 0; minvY2 = 0; minvZ2 = 0; if(d121 < 0) { var v114; var v1X7; var v1Y7; var v1Z7; var v213; var v2X7; var v2Y7; var v2Z7; var v51 = vec11; v1X7 = v51.x; v1Y7 = v51.y; v1Z7 = v51.z; var v52 = vec21; v2X7 = v52.x; v2Y7 = v52.y; v2Z7 = v52.z; var v127; var v12X7; var v12Y7; var v12Z7; v12X7 = v2X7 - v1X7; v12Y7 = v2Y7 - v1Y7; v12Z7 = v2Z7 - v1Z7; var d7 = v12X7 * v12X7 + v12Y7 * v12Y7 + v12Z7 * v12Z7; var t4 = v12X7 * v1X7 + v12Y7 * v1Y7 + v12Z7 * v1Z7; t4 = -t4 / d7; var b3; if(t4 < 0) { var v53 = closest; v53.x = v1X7; v53.y = v1Y7; v53.z = v1Z7; b3 = 1; } else if(t4 > 1) { var v54 = closest; v54.x = v2X7; v54.y = v2Y7; v54.z = v2Z7; b3 = 2; } else { var p4; var pX4; var pY4; var pZ4; pX4 = v1X7 + v12X7 * t4; pY4 = v1Y7 + v12Y7 * t4; pZ4 = v1Z7 + v12Z7 * t4; var v55 = closest; v55.x = pX4; v55.y = pY4; v55.z = pZ4; b3 = 3; } var d8 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; mini2 = b3; mind2 = d8; var v56 = closest; minvX2 = v56.x; minvY2 = v56.y; minvZ2 = v56.z; } if(d231 < 0) { var v115; var v1X8; var v1Y8; var v1Z8; var v214; var v2X8; var v2Y8; var v2Z8; var v57 = vec21; v1X8 = v57.x; v1Y8 = v57.y; v1Z8 = v57.z; var v58 = vec31; v2X8 = v58.x; v2Y8 = v58.y; v2Z8 = v58.z; var v128; var v12X8; var v12Y8; var v12Z8; v12X8 = v2X8 - v1X8; v12Y8 = v2Y8 - v1Y8; v12Z8 = v2Z8 - v1Z8; var d9 = v12X8 * v12X8 + v12Y8 * v12Y8 + v12Z8 * v12Z8; var t5 = v12X8 * v1X8 + v12Y8 * v1Y8 + v12Z8 * v1Z8; t5 = -t5 / d9; var b4; if(t5 < 0) { var v59 = closest; v59.x = v1X8; v59.y = v1Y8; v59.z = v1Z8; b4 = 1; } else if(t5 > 1) { var v60 = closest; v60.x = v2X8; v60.y = v2Y8; v60.z = v2Z8; b4 = 2; } else { var p5; var pX5; var pY5; var pZ5; pX5 = v1X8 + v12X8 * t5; pY5 = v1Y8 + v12Y8 * t5; pZ5 = v1Z8 + v12Z8 * t5; var v61 = closest; v61.x = pX5; v61.y = pY5; v61.z = pZ5; b4 = 3; } var d10 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind2 < 0 || d10 < mind2) { mini2 = b4 << 1; mind2 = d10; var v62 = closest; minvX2 = v62.x; minvY2 = v62.y; minvZ2 = v62.z; } } if(d311 < 0) { var v116; var v1X9; var v1Y9; var v1Z9; var v215; var v2X9; var v2Y9; var v2Z9; var v63 = vec11; v1X9 = v63.x; v1Y9 = v63.y; v1Z9 = v63.z; var v64 = vec31; v2X9 = v64.x; v2Y9 = v64.y; v2Z9 = v64.z; var v129; var v12X9; var v12Y9; var v12Z9; v12X9 = v2X9 - v1X9; v12Y9 = v2Y9 - v1Y9; v12Z9 = v2Z9 - v1Z9; var d11 = v12X9 * v12X9 + v12Y9 * v12Y9 + v12Z9 * v12Z9; var t6 = v12X9 * v1X9 + v12Y9 * v1Y9 + v12Z9 * v1Z9; t6 = -t6 / d11; var b5; if(t6 < 0) { var v65 = closest; v65.x = v1X9; v65.y = v1Y9; v65.z = v1Z9; b5 = 1; } else if(t6 > 1) { var v66 = closest; v66.x = v2X9; v66.y = v2Y9; v66.z = v2Z9; b5 = 2; } else { var p6; var pX6; var pY6; var pZ6; pX6 = v1X9 + v12X9 * t6; pY6 = v1Y9 + v12Y9 * t6; pZ6 = v1Z9 + v12Z9 * t6; var v67 = closest; v67.x = pX6; v67.y = pY6; v67.z = pZ6; b5 = 3; } var d13 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind2 < 0 || d13 < mind2) { mini2 = b5 & 1 | (b5 & 2) << 1; mind2 = d13; var v68 = closest; minvX2 = v68.x; minvY2 = v68.y; minvZ2 = v68.z; } } var b6; if(mind2 > 0) { var v69 = closest; v69.x = minvX2; v69.y = minvY2; v69.z = minvZ2; b6 = mini2; } else { var l1 = nX2 * nX2 + nY2 * nY2 + nZ2 * nZ2; if(l1 > 0) { l1 = 1 / Math.sqrt(l1); } nX2 *= l1; nY2 *= l1; nZ2 *= l1; var dn1 = v1X6 * nX2 + v1Y6 * nY2 + v1Z6 * nZ2; var l21 = nX2 * nX2 + nY2 * nY2 + nZ2 * nZ2; l21 = dn1 / l21; minvX2 = nX2 * l21; minvY2 = nY2 * l21; minvZ2 = nZ2 * l21; var v70 = closest; v70.x = minvX2; v70.y = minvY2; v70.z = minvZ2; b6 = 7; } var d14 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; mini1 = b6; mind1 = d14; var v71 = closest; minvX1 = v71.x; minvY1 = v71.y; minvZ1 = v71.z; } if(d134 * sign < 0) { var v117; var v1X10; var v1Y10; var v1Z10; var v216; var v2X10; var v2Y10; var v2Z10; var v314; var v3X3; var v3Y3; var v3Z3; var v1210; var v12X10; var v12Y10; var v12Z10; var v233; var v23X3; var v23Y3; var v23Z3; var v315; var v31X2; var v31Y2; var v31Z2; var v72 = vec11; v1X10 = v72.x; v1Y10 = v72.y; v1Z10 = v72.z; var v73 = vec31; v2X10 = v73.x; v2Y10 = v73.y; v2Z10 = v73.z; var v74 = vec4; v3X3 = v74.x; v3Y3 = v74.y; v3Z3 = v74.z; v12X10 = v2X10 - v1X10; v12Y10 = v2Y10 - v1Y10; v12Z10 = v2Z10 - v1Z10; v23X3 = v3X3 - v2X10; v23Y3 = v3Y3 - v2Y10; v23Z3 = v3Z3 - v2Z10; v31X2 = v1X10 - v3X3; v31Y2 = v1Y10 - v3Y3; v31Z2 = v1Z10 - v3Z3; var n3; var nX3; var nY3; var nZ3; nX3 = v12Y10 * v23Z3 - v12Z10 * v23Y3; nY3 = v12Z10 * v23X3 - v12X10 * v23Z3; nZ3 = v12X10 * v23Y3 - v12Y10 * v23X3; var n122; var n12X2; var n12Y2; var n12Z2; var n232; var n23X2; var n23Y2; var n23Z2; var n312; var n31X2; var n31Y2; var n31Z2; n12X2 = v12Y10 * nZ3 - v12Z10 * nY3; n12Y2 = v12Z10 * nX3 - v12X10 * nZ3; n12Z2 = v12X10 * nY3 - v12Y10 * nX3; n23X2 = v23Y3 * nZ3 - v23Z3 * nY3; n23Y2 = v23Z3 * nX3 - v23X3 * nZ3; n23Z2 = v23X3 * nY3 - v23Y3 * nX3; n31X2 = v31Y2 * nZ3 - v31Z2 * nY3; n31Y2 = v31Z2 * nX3 - v31X2 * nZ3; n31Z2 = v31X2 * nY3 - v31Y2 * nX3; var d122 = v1X10 * n12X2 + v1Y10 * n12Y2 + v1Z10 * n12Z2; var d232 = v2X10 * n23X2 + v2Y10 * n23Y2 + v2Z10 * n23Z2; var d312 = v3X3 * n31X2 + v3Y3 * n31Y2 + v3Z3 * n31Z2; var mind3 = -1; var minv3; var minvX3; var minvY3; var minvZ3; var mini3 = 0; minvX3 = 0; minvY3 = 0; minvZ3 = 0; if(d122 < 0) { var v118; var v1X11; var v1Y11; var v1Z11; var v217; var v2X11; var v2Y11; var v2Z11; var v75 = vec11; v1X11 = v75.x; v1Y11 = v75.y; v1Z11 = v75.z; var v76 = vec31; v2X11 = v76.x; v2Y11 = v76.y; v2Z11 = v76.z; var v1211; var v12X11; var v12Y11; var v12Z11; v12X11 = v2X11 - v1X11; v12Y11 = v2Y11 - v1Y11; v12Z11 = v2Z11 - v1Z11; var d15 = v12X11 * v12X11 + v12Y11 * v12Y11 + v12Z11 * v12Z11; var t7 = v12X11 * v1X11 + v12Y11 * v1Y11 + v12Z11 * v1Z11; t7 = -t7 / d15; var b7; if(t7 < 0) { var v77 = closest; v77.x = v1X11; v77.y = v1Y11; v77.z = v1Z11; b7 = 1; } else if(t7 > 1) { var v78 = closest; v78.x = v2X11; v78.y = v2Y11; v78.z = v2Z11; b7 = 2; } else { var p7; var pX7; var pY7; var pZ7; pX7 = v1X11 + v12X11 * t7; pY7 = v1Y11 + v12Y11 * t7; pZ7 = v1Z11 + v12Z11 * t7; var v79 = closest; v79.x = pX7; v79.y = pY7; v79.z = pZ7; b7 = 3; } var d16 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; mini3 = b7; mind3 = d16; var v80 = closest; minvX3 = v80.x; minvY3 = v80.y; minvZ3 = v80.z; } if(d232 < 0) { var v119; var v1X12; var v1Y12; var v1Z12; var v218; var v2X12; var v2Y12; var v2Z12; var v81 = vec31; v1X12 = v81.x; v1Y12 = v81.y; v1Z12 = v81.z; var v82 = vec4; v2X12 = v82.x; v2Y12 = v82.y; v2Z12 = v82.z; var v1212; var v12X12; var v12Y12; var v12Z12; v12X12 = v2X12 - v1X12; v12Y12 = v2Y12 - v1Y12; v12Z12 = v2Z12 - v1Z12; var d17 = v12X12 * v12X12 + v12Y12 * v12Y12 + v12Z12 * v12Z12; var t8 = v12X12 * v1X12 + v12Y12 * v1Y12 + v12Z12 * v1Z12; t8 = -t8 / d17; var b8; if(t8 < 0) { var v83 = closest; v83.x = v1X12; v83.y = v1Y12; v83.z = v1Z12; b8 = 1; } else if(t8 > 1) { var v84 = closest; v84.x = v2X12; v84.y = v2Y12; v84.z = v2Z12; b8 = 2; } else { var p8; var pX8; var pY8; var pZ8; pX8 = v1X12 + v12X12 * t8; pY8 = v1Y12 + v12Y12 * t8; pZ8 = v1Z12 + v12Z12 * t8; var v85 = closest; v85.x = pX8; v85.y = pY8; v85.z = pZ8; b8 = 3; } var d18 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind3 < 0 || d18 < mind3) { mini3 = b8 << 1; mind3 = d18; var v86 = closest; minvX3 = v86.x; minvY3 = v86.y; minvZ3 = v86.z; } } if(d312 < 0) { var v120; var v1X13; var v1Y13; var v1Z13; var v219; var v2X13; var v2Y13; var v2Z13; var v87 = vec11; v1X13 = v87.x; v1Y13 = v87.y; v1Z13 = v87.z; var v88 = vec4; v2X13 = v88.x; v2Y13 = v88.y; v2Z13 = v88.z; var v1213; var v12X13; var v12Y13; var v12Z13; v12X13 = v2X13 - v1X13; v12Y13 = v2Y13 - v1Y13; v12Z13 = v2Z13 - v1Z13; var d19 = v12X13 * v12X13 + v12Y13 * v12Y13 + v12Z13 * v12Z13; var t9 = v12X13 * v1X13 + v12Y13 * v1Y13 + v12Z13 * v1Z13; t9 = -t9 / d19; var b9; if(t9 < 0) { var v89 = closest; v89.x = v1X13; v89.y = v1Y13; v89.z = v1Z13; b9 = 1; } else if(t9 > 1) { var v90 = closest; v90.x = v2X13; v90.y = v2Y13; v90.z = v2Z13; b9 = 2; } else { var p9; var pX9; var pY9; var pZ9; pX9 = v1X13 + v12X13 * t9; pY9 = v1Y13 + v12Y13 * t9; pZ9 = v1Z13 + v12Z13 * t9; var v91 = closest; v91.x = pX9; v91.y = pY9; v91.z = pZ9; b9 = 3; } var d20 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind3 < 0 || d20 < mind3) { mini3 = b9 & 1 | (b9 & 2) << 1; mind3 = d20; var v92 = closest; minvX3 = v92.x; minvY3 = v92.y; minvZ3 = v92.z; } } var b10; if(mind3 > 0) { var v93 = closest; v93.x = minvX3; v93.y = minvY3; v93.z = minvZ3; b10 = mini3; } else { var l3 = nX3 * nX3 + nY3 * nY3 + nZ3 * nZ3; if(l3 > 0) { l3 = 1 / Math.sqrt(l3); } nX3 *= l3; nY3 *= l3; nZ3 *= l3; var dn2 = v1X10 * nX3 + v1Y10 * nY3 + v1Z10 * nZ3; var l22 = nX3 * nX3 + nY3 * nY3 + nZ3 * nZ3; l22 = dn2 / l22; minvX3 = nX3 * l22; minvY3 = nY3 * l22; minvZ3 = nZ3 * l22; var v94 = closest; v94.x = minvX3; v94.y = minvY3; v94.z = minvZ3; b10 = 7; } var d21 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind1 < 0 || d21 < mind1) { mini1 = b10 & 1 | (b10 & 6) << 1; mind1 = d21; var v95 = closest; minvX1 = v95.x; minvY1 = v95.y; minvZ1 = v95.z; } } if(d142 * sign < 0) { var v130; var v1X14; var v1Y14; var v1Z14; var v220; var v2X14; var v2Y14; var v2Z14; var v316; var v3X4; var v3Y4; var v3Z4; var v1214; var v12X14; var v12Y14; var v12Z14; var v234; var v23X4; var v23Y4; var v23Z4; var v317; var v31X3; var v31Y3; var v31Z3; var v96 = vec11; v1X14 = v96.x; v1Y14 = v96.y; v1Z14 = v96.z; var v97 = vec21; v2X14 = v97.x; v2Y14 = v97.y; v2Z14 = v97.z; var v98 = vec4; v3X4 = v98.x; v3Y4 = v98.y; v3Z4 = v98.z; v12X14 = v2X14 - v1X14; v12Y14 = v2Y14 - v1Y14; v12Z14 = v2Z14 - v1Z14; v23X4 = v3X4 - v2X14; v23Y4 = v3Y4 - v2Y14; v23Z4 = v3Z4 - v2Z14; v31X3 = v1X14 - v3X4; v31Y3 = v1Y14 - v3Y4; v31Z3 = v1Z14 - v3Z4; var n4; var nX4; var nY4; var nZ4; nX4 = v12Y14 * v23Z4 - v12Z14 * v23Y4; nY4 = v12Z14 * v23X4 - v12X14 * v23Z4; nZ4 = v12X14 * v23Y4 - v12Y14 * v23X4; var n124; var n12X3; var n12Y3; var n12Z3; var n233; var n23X3; var n23Y3; var n23Z3; var n313; var n31X3; var n31Y3; var n31Z3; n12X3 = v12Y14 * nZ4 - v12Z14 * nY4; n12Y3 = v12Z14 * nX4 - v12X14 * nZ4; n12Z3 = v12X14 * nY4 - v12Y14 * nX4; n23X3 = v23Y4 * nZ4 - v23Z4 * nY4; n23Y3 = v23Z4 * nX4 - v23X4 * nZ4; n23Z3 = v23X4 * nY4 - v23Y4 * nX4; n31X3 = v31Y3 * nZ4 - v31Z3 * nY4; n31Y3 = v31Z3 * nX4 - v31X3 * nZ4; n31Z3 = v31X3 * nY4 - v31Y3 * nX4; var d124 = v1X14 * n12X3 + v1Y14 * n12Y3 + v1Z14 * n12Z3; var d233 = v2X14 * n23X3 + v2Y14 * n23Y3 + v2Z14 * n23Z3; var d313 = v3X4 * n31X3 + v3Y4 * n31Y3 + v3Z4 * n31Z3; var mind4 = -1; var minv4; var minvX4; var minvY4; var minvZ4; var mini4 = 0; minvX4 = 0; minvY4 = 0; minvZ4 = 0; if(d124 < 0) { var v132; var v1X15; var v1Y15; var v1Z15; var v221; var v2X15; var v2Y15; var v2Z15; var v99 = vec11; v1X15 = v99.x; v1Y15 = v99.y; v1Z15 = v99.z; var v100 = vec21; v2X15 = v100.x; v2Y15 = v100.y; v2Z15 = v100.z; var v1215; var v12X15; var v12Y15; var v12Z15; v12X15 = v2X15 - v1X15; v12Y15 = v2Y15 - v1Y15; v12Z15 = v2Z15 - v1Z15; var d22 = v12X15 * v12X15 + v12Y15 * v12Y15 + v12Z15 * v12Z15; var t10 = v12X15 * v1X15 + v12Y15 * v1Y15 + v12Z15 * v1Z15; t10 = -t10 / d22; var b11; if(t10 < 0) { var v101 = closest; v101.x = v1X15; v101.y = v1Y15; v101.z = v1Z15; b11 = 1; } else if(t10 > 1) { var v102 = closest; v102.x = v2X15; v102.y = v2Y15; v102.z = v2Z15; b11 = 2; } else { var p10; var pX10; var pY10; var pZ10; pX10 = v1X15 + v12X15 * t10; pY10 = v1Y15 + v12Y15 * t10; pZ10 = v1Z15 + v12Z15 * t10; var v103 = closest; v103.x = pX10; v103.y = pY10; v103.z = pZ10; b11 = 3; } var d24 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; mini4 = b11; mind4 = d24; var v104 = closest; minvX4 = v104.x; minvY4 = v104.y; minvZ4 = v104.z; } if(d233 < 0) { var v133; var v1X16; var v1Y16; var v1Z16; var v222; var v2X16; var v2Y16; var v2Z16; var v105 = vec21; v1X16 = v105.x; v1Y16 = v105.y; v1Z16 = v105.z; var v106 = vec4; v2X16 = v106.x; v2Y16 = v106.y; v2Z16 = v106.z; var v1216; var v12X16; var v12Y16; var v12Z16; v12X16 = v2X16 - v1X16; v12Y16 = v2Y16 - v1Y16; v12Z16 = v2Z16 - v1Z16; var d25 = v12X16 * v12X16 + v12Y16 * v12Y16 + v12Z16 * v12Z16; var t11 = v12X16 * v1X16 + v12Y16 * v1Y16 + v12Z16 * v1Z16; t11 = -t11 / d25; var b12; if(t11 < 0) { var v107 = closest; v107.x = v1X16; v107.y = v1Y16; v107.z = v1Z16; b12 = 1; } else if(t11 > 1) { var v108 = closest; v108.x = v2X16; v108.y = v2Y16; v108.z = v2Z16; b12 = 2; } else { var p11; var pX11; var pY11; var pZ11; pX11 = v1X16 + v12X16 * t11; pY11 = v1Y16 + v12Y16 * t11; pZ11 = v1Z16 + v12Z16 * t11; var v109 = closest; v109.x = pX11; v109.y = pY11; v109.z = pZ11; b12 = 3; } var d26 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind4 < 0 || d26 < mind4) { mini4 = b12 << 1; mind4 = d26; var v134 = closest; minvX4 = v134.x; minvY4 = v134.y; minvZ4 = v134.z; } } if(d313 < 0) { var v135; var v1X17; var v1Y17; var v1Z17; var v223; var v2X17; var v2Y17; var v2Z17; var v136 = vec11; v1X17 = v136.x; v1Y17 = v136.y; v1Z17 = v136.z; var v137 = vec4; v2X17 = v137.x; v2Y17 = v137.y; v2Z17 = v137.z; var v1217; var v12X17; var v12Y17; var v12Z17; v12X17 = v2X17 - v1X17; v12Y17 = v2Y17 - v1Y17; v12Z17 = v2Z17 - v1Z17; var d27 = v12X17 * v12X17 + v12Y17 * v12Y17 + v12Z17 * v12Z17; var t12 = v12X17 * v1X17 + v12Y17 * v1Y17 + v12Z17 * v1Z17; t12 = -t12 / d27; var b13; if(t12 < 0) { var v138 = closest; v138.x = v1X17; v138.y = v1Y17; v138.z = v1Z17; b13 = 1; } else if(t12 > 1) { var v139 = closest; v139.x = v2X17; v139.y = v2Y17; v139.z = v2Z17; b13 = 2; } else { var p12; var pX12; var pY12; var pZ12; pX12 = v1X17 + v12X17 * t12; pY12 = v1Y17 + v12Y17 * t12; pZ12 = v1Z17 + v12Z17 * t12; var v140 = closest; v140.x = pX12; v140.y = pY12; v140.z = pZ12; b13 = 3; } var d28 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind4 < 0 || d28 < mind4) { mini4 = b13 & 1 | (b13 & 2) << 1; mind4 = d28; var v142 = closest; minvX4 = v142.x; minvY4 = v142.y; minvZ4 = v142.z; } } var b14; if(mind4 > 0) { var v143 = closest; v143.x = minvX4; v143.y = minvY4; v143.z = minvZ4; b14 = mini4; } else { var l4 = nX4 * nX4 + nY4 * nY4 + nZ4 * nZ4; if(l4 > 0) { l4 = 1 / Math.sqrt(l4); } nX4 *= l4; nY4 *= l4; nZ4 *= l4; var dn3 = v1X14 * nX4 + v1Y14 * nY4 + v1Z14 * nZ4; var l23 = nX4 * nX4 + nY4 * nY4 + nZ4 * nZ4; l23 = dn3 / l23; minvX4 = nX4 * l23; minvY4 = nY4 * l23; minvZ4 = nZ4 * l23; var v144 = closest; v144.x = minvX4; v144.y = minvY4; v144.z = minvZ4; b14 = 7; } var d29 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind1 < 0 || d29 < mind1) { mini1 = b14 & 3 | (b14 & 4) << 1; mind1 = d29; var v145 = closest; minvX1 = v145.x; minvY1 = v145.y; minvZ1 = v145.z; } } if(d243 * sign < 0) { var v146; var v1X18; var v1Y18; var v1Z18; var v224; var v2X18; var v2Y18; var v2Z18; var v318; var v3X5; var v3Y5; var v3Z5; var v1218; var v12X18; var v12Y18; var v12Z18; var v235; var v23X5; var v23Y5; var v23Z5; var v319; var v31X4; var v31Y4; var v31Z4; var v147 = vec21; v1X18 = v147.x; v1Y18 = v147.y; v1Z18 = v147.z; var v148 = vec31; v2X18 = v148.x; v2Y18 = v148.y; v2Z18 = v148.z; var v149 = vec4; v3X5 = v149.x; v3Y5 = v149.y; v3Z5 = v149.z; v12X18 = v2X18 - v1X18; v12Y18 = v2Y18 - v1Y18; v12Z18 = v2Z18 - v1Z18; v23X5 = v3X5 - v2X18; v23Y5 = v3Y5 - v2Y18; v23Z5 = v3Z5 - v2Z18; v31X4 = v1X18 - v3X5; v31Y4 = v1Y18 - v3Y5; v31Z4 = v1Z18 - v3Z5; var n5; var nX5; var nY5; var nZ5; nX5 = v12Y18 * v23Z5 - v12Z18 * v23Y5; nY5 = v12Z18 * v23X5 - v12X18 * v23Z5; nZ5 = v12X18 * v23Y5 - v12Y18 * v23X5; var n125; var n12X4; var n12Y4; var n12Z4; var n234; var n23X4; var n23Y4; var n23Z4; var n314; var n31X4; var n31Y4; var n31Z4; n12X4 = v12Y18 * nZ5 - v12Z18 * nY5; n12Y4 = v12Z18 * nX5 - v12X18 * nZ5; n12Z4 = v12X18 * nY5 - v12Y18 * nX5; n23X4 = v23Y5 * nZ5 - v23Z5 * nY5; n23Y4 = v23Z5 * nX5 - v23X5 * nZ5; n23Z4 = v23X5 * nY5 - v23Y5 * nX5; n31X4 = v31Y4 * nZ5 - v31Z4 * nY5; n31Y4 = v31Z4 * nX5 - v31X4 * nZ5; n31Z4 = v31X4 * nY5 - v31Y4 * nX5; var d125 = v1X18 * n12X4 + v1Y18 * n12Y4 + v1Z18 * n12Z4; var d234 = v2X18 * n23X4 + v2Y18 * n23Y4 + v2Z18 * n23Z4; var d314 = v3X5 * n31X4 + v3Y5 * n31Y4 + v3Z5 * n31Z4; var mind5 = -1; var minv5; var minvX5; var minvY5; var minvZ5; var mini5 = 0; minvX5 = 0; minvY5 = 0; minvZ5 = 0; if(d125 < 0) { var v150; var v1X19; var v1Y19; var v1Z19; var v225; var v2X19; var v2Y19; var v2Z19; var v151 = vec21; v1X19 = v151.x; v1Y19 = v151.y; v1Z19 = v151.z; var v152 = vec31; v2X19 = v152.x; v2Y19 = v152.y; v2Z19 = v152.z; var v1219; var v12X19; var v12Y19; var v12Z19; v12X19 = v2X19 - v1X19; v12Y19 = v2Y19 - v1Y19; v12Z19 = v2Z19 - v1Z19; var d30 = v12X19 * v12X19 + v12Y19 * v12Y19 + v12Z19 * v12Z19; var t13 = v12X19 * v1X19 + v12Y19 * v1Y19 + v12Z19 * v1Z19; t13 = -t13 / d30; var b15; if(t13 < 0) { var v153 = closest; v153.x = v1X19; v153.y = v1Y19; v153.z = v1Z19; b15 = 1; } else if(t13 > 1) { var v154 = closest; v154.x = v2X19; v154.y = v2Y19; v154.z = v2Z19; b15 = 2; } else { var p13; var pX13; var pY13; var pZ13; pX13 = v1X19 + v12X19 * t13; pY13 = v1Y19 + v12Y19 * t13; pZ13 = v1Z19 + v12Z19 * t13; var v155 = closest; v155.x = pX13; v155.y = pY13; v155.z = pZ13; b15 = 3; } var d32 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; mini5 = b15; mind5 = d32; var v156 = closest; minvX5 = v156.x; minvY5 = v156.y; minvZ5 = v156.z; } if(d234 < 0) { var v157; var v1X20; var v1Y20; var v1Z20; var v226; var v2X20; var v2Y20; var v2Z20; var v158 = vec31; v1X20 = v158.x; v1Y20 = v158.y; v1Z20 = v158.z; var v159 = vec4; v2X20 = v159.x; v2Y20 = v159.y; v2Z20 = v159.z; var v1220; var v12X20; var v12Y20; var v12Z20; v12X20 = v2X20 - v1X20; v12Y20 = v2Y20 - v1Y20; v12Z20 = v2Z20 - v1Z20; var d33 = v12X20 * v12X20 + v12Y20 * v12Y20 + v12Z20 * v12Z20; var t14 = v12X20 * v1X20 + v12Y20 * v1Y20 + v12Z20 * v1Z20; t14 = -t14 / d33; var b16; if(t14 < 0) { var v160 = closest; v160.x = v1X20; v160.y = v1Y20; v160.z = v1Z20; b16 = 1; } else if(t14 > 1) { var v161 = closest; v161.x = v2X20; v161.y = v2Y20; v161.z = v2Z20; b16 = 2; } else { var p14; var pX14; var pY14; var pZ14; pX14 = v1X20 + v12X20 * t14; pY14 = v1Y20 + v12Y20 * t14; pZ14 = v1Z20 + v12Z20 * t14; var v162 = closest; v162.x = pX14; v162.y = pY14; v162.z = pZ14; b16 = 3; } var d34 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind5 < 0 || d34 < mind5) { mini5 = b16 << 1; mind5 = d34; var v163 = closest; minvX5 = v163.x; minvY5 = v163.y; minvZ5 = v163.z; } } if(d314 < 0) { var v164; var v1X21; var v1Y21; var v1Z21; var v227; var v2X21; var v2Y21; var v2Z21; var v165 = vec21; v1X21 = v165.x; v1Y21 = v165.y; v1Z21 = v165.z; var v166 = vec4; v2X21 = v166.x; v2Y21 = v166.y; v2Z21 = v166.z; var v1221; var v12X21; var v12Y21; var v12Z21; v12X21 = v2X21 - v1X21; v12Y21 = v2Y21 - v1Y21; v12Z21 = v2Z21 - v1Z21; var d35 = v12X21 * v12X21 + v12Y21 * v12Y21 + v12Z21 * v12Z21; var t15 = v12X21 * v1X21 + v12Y21 * v1Y21 + v12Z21 * v1Z21; t15 = -t15 / d35; var b17; if(t15 < 0) { var v167 = closest; v167.x = v1X21; v167.y = v1Y21; v167.z = v1Z21; b17 = 1; } else if(t15 > 1) { var v168 = closest; v168.x = v2X21; v168.y = v2Y21; v168.z = v2Z21; b17 = 2; } else { var p15; var pX15; var pY15; var pZ15; pX15 = v1X21 + v12X21 * t15; pY15 = v1Y21 + v12Y21 * t15; pZ15 = v1Z21 + v12Z21 * t15; var v169 = closest; v169.x = pX15; v169.y = pY15; v169.z = pZ15; b17 = 3; } var d36 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind5 < 0 || d36 < mind5) { mini5 = b17 & 1 | (b17 & 2) << 1; mind5 = d36; var v170 = closest; minvX5 = v170.x; minvY5 = v170.y; minvZ5 = v170.z; } } var b18; if(mind5 > 0) { var v171 = closest; v171.x = minvX5; v171.y = minvY5; v171.z = minvZ5; b18 = mini5; } else { var l5 = nX5 * nX5 + nY5 * nY5 + nZ5 * nZ5; if(l5 > 0) { l5 = 1 / Math.sqrt(l5); } nX5 *= l5; nY5 *= l5; nZ5 *= l5; var dn4 = v1X18 * nX5 + v1Y18 * nY5 + v1Z18 * nZ5; var l24 = nX5 * nX5 + nY5 * nY5 + nZ5 * nZ5; l24 = dn4 / l24; minvX5 = nX5 * l24; minvY5 = nY5 * l24; minvZ5 = nZ5 * l24; var v172 = closest; v172.x = minvX5; v172.y = minvY5; v172.z = minvZ5; b18 = 7; } var d37 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind1 < 0 || d37 < mind1) { mini1 = b18 << 1; mind1 = d37; var v173 = closest; minvX1 = v173.x; minvY1 = v173.y; minvZ1 = v173.z; } } if(mind1 > 0) { var v174 = closest; v174.x = minvX1; v174.y = minvY1; v174.z = minvZ1; v3 = mini1; } else { closest.zero(); v3 = 15; } break; } if(closest.x * closest.x + closest.y * closest.y + closest.z * closest.z < eps2) { if(!useEpa) { this.distance = 0; return 0; } switch(this.simplexSize) { case 1: this.pointToTetrahedron(); break; case 2: this.lineToTetrahedron(); break; case 3: this.triangleToTetrahedron(); break; } if(this.simplexSize == 4) { var epaState = this.computeDepth(c1,c2,tf1,tf2,s,w1,w2); if(epaState != 0) { this.distance = 0; return epaState; } this.distance = -this.depth; return 0; } this.distance = 0; return 1; } this.shrinkSimplex(v3); dir.x = closest.x; dir.y = closest.y; dir.z = closest.z; var _this2 = dir; var tx1 = -_this2.x; var ty1 = -_this2.y; var tz1 = -_this2.z; _this2.x = tx1; _this2.y = ty1; _this2.z = tz1; this.computeWitnessPoint1(false); this.computeWitnessPoint2(false); var _this3 = this.s[this.simplexSize]; var v175 = this.w1[this.simplexSize]; _this3.x = v175.x; _this3.y = v175.y; _this3.z = v175.z; var _this4 = _this3; var v176 = this.w2[this.simplexSize]; var tx2 = _this4.x - v176.x; var ty2 = _this4.y - v176.y; var tz2 = _this4.z - v176.z; _this4.x = tx2; _this4.y = ty2; _this4.z = tz2; if(dir.x * dir.x + dir.y * dir.y + dir.z * dir.z < eps2) { throw new Error("!?"); } var d110 = closest.x * dir.x + closest.y * dir.y + closest.z * dir.z; var _this5 = s[this.simplexSize]; var d210 = _this5.x * dir.x + _this5.y * dir.y + _this5.z * dir.z; if(d210 - d110 < eps2) { this.interpolateClosestPoints(); this.distance = Math.sqrt(closest.x * closest.x + closest.y * closest.y + closest.z * closest.z); if(cache != null && cache._gjkCache != null) { this.saveCache(cache._gjkCache); } return 0; } this.simplexSize++; ++count; } return 2; } convexCastImpl(c1,c2,tf1,tf2,tl1,tl2,hit) { this.c1 = c1; this.c2 = c2; this.tf1 = tf1; this.tf2 = tf2; var s = this.s; var w1 = this.w1; var w2 = this.w2; var closest = this.closest; var dir = this.dir; var firstDir; var firstDirX; var firstDirY; var firstDirZ; firstDirX = tf2._positionX - tf1._positionX; firstDirY = tf2._positionY - tf1._positionY; firstDirZ = tf2._positionZ - tf1._positionZ; var v = dir; v.x = firstDirX; v.y = firstDirY; v.z = firstDirZ; if(dir.x * dir.x + dir.y * dir.y + dir.z * dir.z < 1e-6) { dir.init(1,0,0); } this.simplexSize = 0; if(this.c1 != null) { this.computeWitnessPoint1(true); } else { var v1 = this.w1[this.simplexSize]; v1.x = this.tf1._positionX; v1.y = this.tf1._positionY; v1.z = this.tf1._positionZ; } this.computeWitnessPoint2(true); var _this = this.s[this.simplexSize]; var v2 = this.w1[this.simplexSize]; _this.x = v2.x; _this.y = v2.y; _this.z = v2.z; var _this1 = _this; var v3 = this.w2[this.simplexSize]; var tx = _this1.x - v3.x; var ty = _this1.y - v3.y; var tz = _this1.z - v3.z; _this1.x = tx; _this1.y = ty; _this1.z = tz; this.simplexSize = 1; var count = 0; var max = 40; var lambda = 0.0; var rayX = this.rayX; var rayR = this.rayR; rayX.zero(); rayR.x = tl2.x; rayR.y = tl2.y; rayR.z = tl2.z; var _this2 = rayR; var tx1 = _this2.x - tl1.x; var ty1 = _this2.y - tl1.y; var tz1 = _this2.z - tl1.z; _this2.x = tx1; _this2.y = ty1; _this2.z = tz1; var eps = 1e-4; var eps2 = eps * eps; while(count < max) { var v4 = 0; switch(this.simplexSize) { case 1: var v5 = s[0]; closest.x = v5.x; closest.y = v5.y; closest.z = v5.z; v4 = 1; break; case 2: var v11; var v1X; var v1Y; var v1Z; var v21; var v2X; var v2Y; var v2Z; var v6 = s[0]; v1X = v6.x; v1Y = v6.y; v1Z = v6.z; var v7 = s[1]; v2X = v7.x; v2Y = v7.y; v2Z = v7.z; var v12; var v12X; var v12Y; var v12Z; v12X = v2X - v1X; v12Y = v2Y - v1Y; v12Z = v2Z - v1Z; var d = v12X * v12X + v12Y * v12Y + v12Z * v12Z; var t = v12X * v1X + v12Y * v1Y + v12Z * v1Z; t = -t / d; if(t < 0) { var v8 = closest; v8.x = v1X; v8.y = v1Y; v8.z = v1Z; v4 = 1; } else if(t > 1) { var v9 = closest; v9.x = v2X; v9.y = v2Y; v9.z = v2Z; v4 = 2; } else { var p; var pX; var pY; var pZ; pX = v1X + v12X * t; pY = v1Y + v12Y * t; pZ = v1Z + v12Z * t; var v10 = closest; v10.x = pX; v10.y = pY; v10.z = pZ; v4 = 3; } break; case 3: var vec1 = s[0]; var vec2 = s[1]; var vec3 = s[2]; var v13; var v1X1; var v1Y1; var v1Z1; var v22; var v2X1; var v2Y1; var v2Z1; var v31; var v3X; var v3Y; var v3Z; var v121; var v12X1; var v12Y1; var v12Z1; var v23; var v23X; var v23Y; var v23Z; var v311; var v31X; var v31Y; var v31Z; var v14 = vec1; v1X1 = v14.x; v1Y1 = v14.y; v1Z1 = v14.z; var v15 = vec2; v2X1 = v15.x; v2Y1 = v15.y; v2Z1 = v15.z; var v16 = vec3; v3X = v16.x; v3Y = v16.y; v3Z = v16.z; v12X1 = v2X1 - v1X1; v12Y1 = v2Y1 - v1Y1; v12Z1 = v2Z1 - v1Z1; v23X = v3X - v2X1; v23Y = v3Y - v2Y1; v23Z = v3Z - v2Z1; v31X = v1X1 - v3X; v31Y = v1Y1 - v3Y; v31Z = v1Z1 - v3Z; var n; var nX; var nY; var nZ; nX = v12Y1 * v23Z - v12Z1 * v23Y; nY = v12Z1 * v23X - v12X1 * v23Z; nZ = v12X1 * v23Y - v12Y1 * v23X; var n12; var n12X; var n12Y; var n12Z; var n23; var n23X; var n23Y; var n23Z; var n31; var n31X; var n31Y; var n31Z; n12X = v12Y1 * nZ - v12Z1 * nY; n12Y = v12Z1 * nX - v12X1 * nZ; n12Z = v12X1 * nY - v12Y1 * nX; n23X = v23Y * nZ - v23Z * nY; n23Y = v23Z * nX - v23X * nZ; n23Z = v23X * nY - v23Y * nX; n31X = v31Y * nZ - v31Z * nY; n31Y = v31Z * nX - v31X * nZ; n31Z = v31X * nY - v31Y * nX; var d12 = v1X1 * n12X + v1Y1 * n12Y + v1Z1 * n12Z; var d23 = v2X1 * n23X + v2Y1 * n23Y + v2Z1 * n23Z; var d31 = v3X * n31X + v3Y * n31Y + v3Z * n31Z; var mind = -1; var minv; var minvX; var minvY; var minvZ; var mini = 0; minvX = 0; minvY = 0; minvZ = 0; if(d12 < 0) { var v17; var v1X2; var v1Y2; var v1Z2; var v24; var v2X2; var v2Y2; var v2Z2; var v18 = vec1; v1X2 = v18.x; v1Y2 = v18.y; v1Z2 = v18.z; var v19 = vec2; v2X2 = v19.x; v2Y2 = v19.y; v2Z2 = v19.z; var v122; var v12X2; var v12Y2; var v12Z2; v12X2 = v2X2 - v1X2; v12Y2 = v2Y2 - v1Y2; v12Z2 = v2Z2 - v1Z2; var d1 = v12X2 * v12X2 + v12Y2 * v12Y2 + v12Z2 * v12Z2; var t1 = v12X2 * v1X2 + v12Y2 * v1Y2 + v12Z2 * v1Z2; t1 = -t1 / d1; var b; if(t1 < 0) { var v20 = closest; v20.x = v1X2; v20.y = v1Y2; v20.z = v1Z2; b = 1; } else if(t1 > 1) { var v25 = closest; v25.x = v2X2; v25.y = v2Y2; v25.z = v2Z2; b = 2; } else { var p1; var pX1; var pY1; var pZ1; pX1 = v1X2 + v12X2 * t1; pY1 = v1Y2 + v12Y2 * t1; pZ1 = v1Z2 + v12Z2 * t1; var v26 = closest; v26.x = pX1; v26.y = pY1; v26.z = pZ1; b = 3; } var d2 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; mini = b; mind = d2; var v27 = closest; minvX = v27.x; minvY = v27.y; minvZ = v27.z; } if(d23 < 0) { var v110; var v1X3; var v1Y3; var v1Z3; var v28; var v2X3; var v2Y3; var v2Z3; var v29 = vec2; v1X3 = v29.x; v1Y3 = v29.y; v1Z3 = v29.z; var v30 = vec3; v2X3 = v30.x; v2Y3 = v30.y; v2Z3 = v30.z; var v123; var v12X3; var v12Y3; var v12Z3; v12X3 = v2X3 - v1X3; v12Y3 = v2Y3 - v1Y3; v12Z3 = v2Z3 - v1Z3; var d3 = v12X3 * v12X3 + v12Y3 * v12Y3 + v12Z3 * v12Z3; var t2 = v12X3 * v1X3 + v12Y3 * v1Y3 + v12Z3 * v1Z3; t2 = -t2 / d3; var b1; if(t2 < 0) { var v32 = closest; v32.x = v1X3; v32.y = v1Y3; v32.z = v1Z3; b1 = 1; } else if(t2 > 1) { var v33 = closest; v33.x = v2X3; v33.y = v2Y3; v33.z = v2Z3; b1 = 2; } else { var p2; var pX2; var pY2; var pZ2; pX2 = v1X3 + v12X3 * t2; pY2 = v1Y3 + v12Y3 * t2; pZ2 = v1Z3 + v12Z3 * t2; var v34 = closest; v34.x = pX2; v34.y = pY2; v34.z = pZ2; b1 = 3; } var d4 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind < 0 || d4 < mind) { mini = b1 << 1; mind = d4; var v35 = closest; minvX = v35.x; minvY = v35.y; minvZ = v35.z; } } if(d31 < 0) { var v111; var v1X4; var v1Y4; var v1Z4; var v210; var v2X4; var v2Y4; var v2Z4; var v36 = vec1; v1X4 = v36.x; v1Y4 = v36.y; v1Z4 = v36.z; var v37 = vec3; v2X4 = v37.x; v2Y4 = v37.y; v2Z4 = v37.z; var v124; var v12X4; var v12Y4; var v12Z4; v12X4 = v2X4 - v1X4; v12Y4 = v2Y4 - v1Y4; v12Z4 = v2Z4 - v1Z4; var d5 = v12X4 * v12X4 + v12Y4 * v12Y4 + v12Z4 * v12Z4; var t3 = v12X4 * v1X4 + v12Y4 * v1Y4 + v12Z4 * v1Z4; t3 = -t3 / d5; var b2; if(t3 < 0) { var v38 = closest; v38.x = v1X4; v38.y = v1Y4; v38.z = v1Z4; b2 = 1; } else if(t3 > 1) { var v39 = closest; v39.x = v2X4; v39.y = v2Y4; v39.z = v2Z4; b2 = 2; } else { var p3; var pX3; var pY3; var pZ3; pX3 = v1X4 + v12X4 * t3; pY3 = v1Y4 + v12Y4 * t3; pZ3 = v1Z4 + v12Z4 * t3; var v40 = closest; v40.x = pX3; v40.y = pY3; v40.z = pZ3; b2 = 3; } var d6 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind < 0 || d6 < mind) { mini = b2 & 1 | (b2 & 2) << 1; mind = d6; var v41 = closest; minvX = v41.x; minvY = v41.y; minvZ = v41.z; } } if(mind > 0) { var v42 = closest; v42.x = minvX; v42.y = minvY; v42.z = minvZ; v4 = mini; } else { var l = nX * nX + nY * nY + nZ * nZ; if(l > 0) { l = 1 / Math.sqrt(l); } nX *= l; nY *= l; nZ *= l; var dn = v1X1 * nX + v1Y1 * nY + v1Z1 * nZ; var l2 = nX * nX + nY * nY + nZ * nZ; l2 = dn / l2; minvX = nX * l2; minvY = nY * l2; minvZ = nZ * l2; var v43 = closest; v43.x = minvX; v43.y = minvY; v43.z = minvZ; v4 = 7; } break; case 4: var vec11 = s[0]; var vec21 = s[1]; var vec31 = s[2]; var vec4 = s[3]; var v112; var v1X5; var v1Y5; var v1Z5; var v211; var v2X5; var v2Y5; var v2Z5; var v310; var v3X1; var v3Y1; var v3Z1; var v44; var v4X; var v4Y; var v4Z; var v125; var v12X5; var v12Y5; var v12Z5; var v131; var v13X; var v13Y; var v13Z; var v141; var v14X; var v14Y; var v14Z; var v231; var v23X1; var v23Y1; var v23Z1; var v241; var v24X; var v24Y; var v24Z; var v341; var v34X; var v34Y; var v34Z; var v45 = vec11; v1X5 = v45.x; v1Y5 = v45.y; v1Z5 = v45.z; var v46 = vec21; v2X5 = v46.x; v2Y5 = v46.y; v2Z5 = v46.z; var v47 = vec31; v3X1 = v47.x; v3Y1 = v47.y; v3Z1 = v47.z; var v48 = vec4; v4X = v48.x; v4Y = v48.y; v4Z = v48.z; v12X5 = v2X5 - v1X5; v12Y5 = v2Y5 - v1Y5; v12Z5 = v2Z5 - v1Z5; v13X = v3X1 - v1X5; v13Y = v3Y1 - v1Y5; v13Z = v3Z1 - v1Z5; v14X = v4X - v1X5; v14Y = v4Y - v1Y5; v14Z = v4Z - v1Z5; v23X1 = v3X1 - v2X5; v23Y1 = v3Y1 - v2Y5; v23Z1 = v3Z1 - v2Z5; v24X = v4X - v2X5; v24Y = v4Y - v2Y5; v24Z = v4Z - v2Z5; v34X = v4X - v3X1; v34Y = v4Y - v3Y1; v34Z = v4Z - v3Z1; var rev; var n123; var n123X; var n123Y; var n123Z; var n134; var n134X; var n134Y; var n134Z; var n142; var n142X; var n142Y; var n142Z; var n243; var n243X; var n243Y; var n243Z; var n1; var nX1; var nY1; var nZ1; n123X = v12Y5 * v13Z - v12Z5 * v13Y; n123Y = v12Z5 * v13X - v12X5 * v13Z; n123Z = v12X5 * v13Y - v12Y5 * v13X; n134X = v13Y * v14Z - v13Z * v14Y; n134Y = v13Z * v14X - v13X * v14Z; n134Z = v13X * v14Y - v13Y * v14X; n142X = v14Y * v12Z5 - v14Z * v12Y5; n142Y = v14Z * v12X5 - v14X * v12Z5; n142Z = v14X * v12Y5 - v14Y * v12X5; n243X = v24Y * v23Z1 - v24Z * v23Y1; n243Y = v24Z * v23X1 - v24X * v23Z1; n243Z = v24X * v23Y1 - v24Y * v23X1; var sign = v12X5 * n243X + v12Y5 * n243Y + v12Z5 * n243Z > 0 ? 1 : -1; var d123 = v1X5 * n123X + v1Y5 * n123Y + v1Z5 * n123Z; var d134 = v1X5 * n134X + v1Y5 * n134Y + v1Z5 * n134Z; var d142 = v1X5 * n142X + v1Y5 * n142Y + v1Z5 * n142Z; var d243 = v2X5 * n243X + v2Y5 * n243Y + v2Z5 * n243Z; var mind1 = -1; var minv1; var minvX1; var minvY1; var minvZ1; var mini1 = 0; minvX1 = 0; minvY1 = 0; minvZ1 = 0; if(d123 * sign < 0) { var v113; var v1X6; var v1Y6; var v1Z6; var v212; var v2X6; var v2Y6; var v2Z6; var v312; var v3X2; var v3Y2; var v3Z2; var v126; var v12X6; var v12Y6; var v12Z6; var v232; var v23X2; var v23Y2; var v23Z2; var v313; var v31X1; var v31Y1; var v31Z1; var v49 = vec11; v1X6 = v49.x; v1Y6 = v49.y; v1Z6 = v49.z; var v50 = vec21; v2X6 = v50.x; v2Y6 = v50.y; v2Z6 = v50.z; var v51 = vec31; v3X2 = v51.x; v3Y2 = v51.y; v3Z2 = v51.z; v12X6 = v2X6 - v1X6; v12Y6 = v2Y6 - v1Y6; v12Z6 = v2Z6 - v1Z6; v23X2 = v3X2 - v2X6; v23Y2 = v3Y2 - v2Y6; v23Z2 = v3Z2 - v2Z6; v31X1 = v1X6 - v3X2; v31Y1 = v1Y6 - v3Y2; v31Z1 = v1Z6 - v3Z2; var n2; var nX2; var nY2; var nZ2; nX2 = v12Y6 * v23Z2 - v12Z6 * v23Y2; nY2 = v12Z6 * v23X2 - v12X6 * v23Z2; nZ2 = v12X6 * v23Y2 - v12Y6 * v23X2; var n121; var n12X1; var n12Y1; var n12Z1; var n231; var n23X1; var n23Y1; var n23Z1; var n311; var n31X1; var n31Y1; var n31Z1; n12X1 = v12Y6 * nZ2 - v12Z6 * nY2; n12Y1 = v12Z6 * nX2 - v12X6 * nZ2; n12Z1 = v12X6 * nY2 - v12Y6 * nX2; n23X1 = v23Y2 * nZ2 - v23Z2 * nY2; n23Y1 = v23Z2 * nX2 - v23X2 * nZ2; n23Z1 = v23X2 * nY2 - v23Y2 * nX2; n31X1 = v31Y1 * nZ2 - v31Z1 * nY2; n31Y1 = v31Z1 * nX2 - v31X1 * nZ2; n31Z1 = v31X1 * nY2 - v31Y1 * nX2; var d121 = v1X6 * n12X1 + v1Y6 * n12Y1 + v1Z6 * n12Z1; var d231 = v2X6 * n23X1 + v2Y6 * n23Y1 + v2Z6 * n23Z1; var d311 = v3X2 * n31X1 + v3Y2 * n31Y1 + v3Z2 * n31Z1; var mind2 = -1; var minv2; var minvX2; var minvY2; var minvZ2; var mini2 = 0; minvX2 = 0; minvY2 = 0; minvZ2 = 0; if(d121 < 0) { var v114; var v1X7; var v1Y7; var v1Z7; var v213; var v2X7; var v2Y7; var v2Z7; var v52 = vec11; v1X7 = v52.x; v1Y7 = v52.y; v1Z7 = v52.z; var v53 = vec21; v2X7 = v53.x; v2Y7 = v53.y; v2Z7 = v53.z; var v127; var v12X7; var v12Y7; var v12Z7; v12X7 = v2X7 - v1X7; v12Y7 = v2Y7 - v1Y7; v12Z7 = v2Z7 - v1Z7; var d7 = v12X7 * v12X7 + v12Y7 * v12Y7 + v12Z7 * v12Z7; var t4 = v12X7 * v1X7 + v12Y7 * v1Y7 + v12Z7 * v1Z7; t4 = -t4 / d7; var b3; if(t4 < 0) { var v54 = closest; v54.x = v1X7; v54.y = v1Y7; v54.z = v1Z7; b3 = 1; } else if(t4 > 1) { var v55 = closest; v55.x = v2X7; v55.y = v2Y7; v55.z = v2Z7; b3 = 2; } else { var p4; var pX4; var pY4; var pZ4; pX4 = v1X7 + v12X7 * t4; pY4 = v1Y7 + v12Y7 * t4; pZ4 = v1Z7 + v12Z7 * t4; var v56 = closest; v56.x = pX4; v56.y = pY4; v56.z = pZ4; b3 = 3; } var d8 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; mini2 = b3; mind2 = d8; var v57 = closest; minvX2 = v57.x; minvY2 = v57.y; minvZ2 = v57.z; } if(d231 < 0) { var v115; var v1X8; var v1Y8; var v1Z8; var v214; var v2X8; var v2Y8; var v2Z8; var v58 = vec21; v1X8 = v58.x; v1Y8 = v58.y; v1Z8 = v58.z; var v59 = vec31; v2X8 = v59.x; v2Y8 = v59.y; v2Z8 = v59.z; var v128; var v12X8; var v12Y8; var v12Z8; v12X8 = v2X8 - v1X8; v12Y8 = v2Y8 - v1Y8; v12Z8 = v2Z8 - v1Z8; var d9 = v12X8 * v12X8 + v12Y8 * v12Y8 + v12Z8 * v12Z8; var t5 = v12X8 * v1X8 + v12Y8 * v1Y8 + v12Z8 * v1Z8; t5 = -t5 / d9; var b4; if(t5 < 0) { var v60 = closest; v60.x = v1X8; v60.y = v1Y8; v60.z = v1Z8; b4 = 1; } else if(t5 > 1) { var v61 = closest; v61.x = v2X8; v61.y = v2Y8; v61.z = v2Z8; b4 = 2; } else { var p5; var pX5; var pY5; var pZ5; pX5 = v1X8 + v12X8 * t5; pY5 = v1Y8 + v12Y8 * t5; pZ5 = v1Z8 + v12Z8 * t5; var v62 = closest; v62.x = pX5; v62.y = pY5; v62.z = pZ5; b4 = 3; } var d10 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind2 < 0 || d10 < mind2) { mini2 = b4 << 1; mind2 = d10; var v63 = closest; minvX2 = v63.x; minvY2 = v63.y; minvZ2 = v63.z; } } if(d311 < 0) { var v116; var v1X9; var v1Y9; var v1Z9; var v215; var v2X9; var v2Y9; var v2Z9; var v64 = vec11; v1X9 = v64.x; v1Y9 = v64.y; v1Z9 = v64.z; var v65 = vec31; v2X9 = v65.x; v2Y9 = v65.y; v2Z9 = v65.z; var v129; var v12X9; var v12Y9; var v12Z9; v12X9 = v2X9 - v1X9; v12Y9 = v2Y9 - v1Y9; v12Z9 = v2Z9 - v1Z9; var d11 = v12X9 * v12X9 + v12Y9 * v12Y9 + v12Z9 * v12Z9; var t6 = v12X9 * v1X9 + v12Y9 * v1Y9 + v12Z9 * v1Z9; t6 = -t6 / d11; var b5; if(t6 < 0) { var v66 = closest; v66.x = v1X9; v66.y = v1Y9; v66.z = v1Z9; b5 = 1; } else if(t6 > 1) { var v67 = closest; v67.x = v2X9; v67.y = v2Y9; v67.z = v2Z9; b5 = 2; } else { var p6; var pX6; var pY6; var pZ6; pX6 = v1X9 + v12X9 * t6; pY6 = v1Y9 + v12Y9 * t6; pZ6 = v1Z9 + v12Z9 * t6; var v68 = closest; v68.x = pX6; v68.y = pY6; v68.z = pZ6; b5 = 3; } var d13 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind2 < 0 || d13 < mind2) { mini2 = b5 & 1 | (b5 & 2) << 1; mind2 = d13; var v69 = closest; minvX2 = v69.x; minvY2 = v69.y; minvZ2 = v69.z; } } var b6; if(mind2 > 0) { var v70 = closest; v70.x = minvX2; v70.y = minvY2; v70.z = minvZ2; b6 = mini2; } else { var l1 = nX2 * nX2 + nY2 * nY2 + nZ2 * nZ2; if(l1 > 0) { l1 = 1 / Math.sqrt(l1); } nX2 *= l1; nY2 *= l1; nZ2 *= l1; var dn1 = v1X6 * nX2 + v1Y6 * nY2 + v1Z6 * nZ2; var l21 = nX2 * nX2 + nY2 * nY2 + nZ2 * nZ2; l21 = dn1 / l21; minvX2 = nX2 * l21; minvY2 = nY2 * l21; minvZ2 = nZ2 * l21; var v71 = closest; v71.x = minvX2; v71.y = minvY2; v71.z = minvZ2; b6 = 7; } var d14 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; mini1 = b6; mind1 = d14; var v72 = closest; minvX1 = v72.x; minvY1 = v72.y; minvZ1 = v72.z; } if(d134 * sign < 0) { var v117; var v1X10; var v1Y10; var v1Z10; var v216; var v2X10; var v2Y10; var v2Z10; var v314; var v3X3; var v3Y3; var v3Z3; var v1210; var v12X10; var v12Y10; var v12Z10; var v233; var v23X3; var v23Y3; var v23Z3; var v315; var v31X2; var v31Y2; var v31Z2; var v73 = vec11; v1X10 = v73.x; v1Y10 = v73.y; v1Z10 = v73.z; var v74 = vec31; v2X10 = v74.x; v2Y10 = v74.y; v2Z10 = v74.z; var v75 = vec4; v3X3 = v75.x; v3Y3 = v75.y; v3Z3 = v75.z; v12X10 = v2X10 - v1X10; v12Y10 = v2Y10 - v1Y10; v12Z10 = v2Z10 - v1Z10; v23X3 = v3X3 - v2X10; v23Y3 = v3Y3 - v2Y10; v23Z3 = v3Z3 - v2Z10; v31X2 = v1X10 - v3X3; v31Y2 = v1Y10 - v3Y3; v31Z2 = v1Z10 - v3Z3; var n3; var nX3; var nY3; var nZ3; nX3 = v12Y10 * v23Z3 - v12Z10 * v23Y3; nY3 = v12Z10 * v23X3 - v12X10 * v23Z3; nZ3 = v12X10 * v23Y3 - v12Y10 * v23X3; var n122; var n12X2; var n12Y2; var n12Z2; var n232; var n23X2; var n23Y2; var n23Z2; var n312; var n31X2; var n31Y2; var n31Z2; n12X2 = v12Y10 * nZ3 - v12Z10 * nY3; n12Y2 = v12Z10 * nX3 - v12X10 * nZ3; n12Z2 = v12X10 * nY3 - v12Y10 * nX3; n23X2 = v23Y3 * nZ3 - v23Z3 * nY3; n23Y2 = v23Z3 * nX3 - v23X3 * nZ3; n23Z2 = v23X3 * nY3 - v23Y3 * nX3; n31X2 = v31Y2 * nZ3 - v31Z2 * nY3; n31Y2 = v31Z2 * nX3 - v31X2 * nZ3; n31Z2 = v31X2 * nY3 - v31Y2 * nX3; var d122 = v1X10 * n12X2 + v1Y10 * n12Y2 + v1Z10 * n12Z2; var d232 = v2X10 * n23X2 + v2Y10 * n23Y2 + v2Z10 * n23Z2; var d312 = v3X3 * n31X2 + v3Y3 * n31Y2 + v3Z3 * n31Z2; var mind3 = -1; var minv3; var minvX3; var minvY3; var minvZ3; var mini3 = 0; minvX3 = 0; minvY3 = 0; minvZ3 = 0; if(d122 < 0) { var v118; var v1X11; var v1Y11; var v1Z11; var v217; var v2X11; var v2Y11; var v2Z11; var v76 = vec11; v1X11 = v76.x; v1Y11 = v76.y; v1Z11 = v76.z; var v77 = vec31; v2X11 = v77.x; v2Y11 = v77.y; v2Z11 = v77.z; var v1211; var v12X11; var v12Y11; var v12Z11; v12X11 = v2X11 - v1X11; v12Y11 = v2Y11 - v1Y11; v12Z11 = v2Z11 - v1Z11; var d15 = v12X11 * v12X11 + v12Y11 * v12Y11 + v12Z11 * v12Z11; var t7 = v12X11 * v1X11 + v12Y11 * v1Y11 + v12Z11 * v1Z11; t7 = -t7 / d15; var b7; if(t7 < 0) { var v78 = closest; v78.x = v1X11; v78.y = v1Y11; v78.z = v1Z11; b7 = 1; } else if(t7 > 1) { var v79 = closest; v79.x = v2X11; v79.y = v2Y11; v79.z = v2Z11; b7 = 2; } else { var p7; var pX7; var pY7; var pZ7; pX7 = v1X11 + v12X11 * t7; pY7 = v1Y11 + v12Y11 * t7; pZ7 = v1Z11 + v12Z11 * t7; var v80 = closest; v80.x = pX7; v80.y = pY7; v80.z = pZ7; b7 = 3; } var d16 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; mini3 = b7; mind3 = d16; var v81 = closest; minvX3 = v81.x; minvY3 = v81.y; minvZ3 = v81.z; } if(d232 < 0) { var v119; var v1X12; var v1Y12; var v1Z12; var v218; var v2X12; var v2Y12; var v2Z12; var v82 = vec31; v1X12 = v82.x; v1Y12 = v82.y; v1Z12 = v82.z; var v83 = vec4; v2X12 = v83.x; v2Y12 = v83.y; v2Z12 = v83.z; var v1212; var v12X12; var v12Y12; var v12Z12; v12X12 = v2X12 - v1X12; v12Y12 = v2Y12 - v1Y12; v12Z12 = v2Z12 - v1Z12; var d17 = v12X12 * v12X12 + v12Y12 * v12Y12 + v12Z12 * v12Z12; var t8 = v12X12 * v1X12 + v12Y12 * v1Y12 + v12Z12 * v1Z12; t8 = -t8 / d17; var b8; if(t8 < 0) { var v84 = closest; v84.x = v1X12; v84.y = v1Y12; v84.z = v1Z12; b8 = 1; } else if(t8 > 1) { var v85 = closest; v85.x = v2X12; v85.y = v2Y12; v85.z = v2Z12; b8 = 2; } else { var p8; var pX8; var pY8; var pZ8; pX8 = v1X12 + v12X12 * t8; pY8 = v1Y12 + v12Y12 * t8; pZ8 = v1Z12 + v12Z12 * t8; var v86 = closest; v86.x = pX8; v86.y = pY8; v86.z = pZ8; b8 = 3; } var d18 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind3 < 0 || d18 < mind3) { mini3 = b8 << 1; mind3 = d18; var v87 = closest; minvX3 = v87.x; minvY3 = v87.y; minvZ3 = v87.z; } } if(d312 < 0) { var v120; var v1X13; var v1Y13; var v1Z13; var v219; var v2X13; var v2Y13; var v2Z13; var v88 = vec11; v1X13 = v88.x; v1Y13 = v88.y; v1Z13 = v88.z; var v89 = vec4; v2X13 = v89.x; v2Y13 = v89.y; v2Z13 = v89.z; var v1213; var v12X13; var v12Y13; var v12Z13; v12X13 = v2X13 - v1X13; v12Y13 = v2Y13 - v1Y13; v12Z13 = v2Z13 - v1Z13; var d19 = v12X13 * v12X13 + v12Y13 * v12Y13 + v12Z13 * v12Z13; var t9 = v12X13 * v1X13 + v12Y13 * v1Y13 + v12Z13 * v1Z13; t9 = -t9 / d19; var b9; if(t9 < 0) { var v90 = closest; v90.x = v1X13; v90.y = v1Y13; v90.z = v1Z13; b9 = 1; } else if(t9 > 1) { var v91 = closest; v91.x = v2X13; v91.y = v2Y13; v91.z = v2Z13; b9 = 2; } else { var p9; var pX9; var pY9; var pZ9; pX9 = v1X13 + v12X13 * t9; pY9 = v1Y13 + v12Y13 * t9; pZ9 = v1Z13 + v12Z13 * t9; var v92 = closest; v92.x = pX9; v92.y = pY9; v92.z = pZ9; b9 = 3; } var d20 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind3 < 0 || d20 < mind3) { mini3 = b9 & 1 | (b9 & 2) << 1; mind3 = d20; var v93 = closest; minvX3 = v93.x; minvY3 = v93.y; minvZ3 = v93.z; } } var b10; if(mind3 > 0) { var v94 = closest; v94.x = minvX3; v94.y = minvY3; v94.z = minvZ3; b10 = mini3; } else { var l3 = nX3 * nX3 + nY3 * nY3 + nZ3 * nZ3; if(l3 > 0) { l3 = 1 / Math.sqrt(l3); } nX3 *= l3; nY3 *= l3; nZ3 *= l3; var dn2 = v1X10 * nX3 + v1Y10 * nY3 + v1Z10 * nZ3; var l22 = nX3 * nX3 + nY3 * nY3 + nZ3 * nZ3; l22 = dn2 / l22; minvX3 = nX3 * l22; minvY3 = nY3 * l22; minvZ3 = nZ3 * l22; var v95 = closest; v95.x = minvX3; v95.y = minvY3; v95.z = minvZ3; b10 = 7; } var d21 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind1 < 0 || d21 < mind1) { mini1 = b10 & 1 | (b10 & 6) << 1; mind1 = d21; var v96 = closest; minvX1 = v96.x; minvY1 = v96.y; minvZ1 = v96.z; } } if(d142 * sign < 0) { var v130; var v1X14; var v1Y14; var v1Z14; var v220; var v2X14; var v2Y14; var v2Z14; var v316; var v3X4; var v3Y4; var v3Z4; var v1214; var v12X14; var v12Y14; var v12Z14; var v234; var v23X4; var v23Y4; var v23Z4; var v317; var v31X3; var v31Y3; var v31Z3; var v97 = vec11; v1X14 = v97.x; v1Y14 = v97.y; v1Z14 = v97.z; var v98 = vec21; v2X14 = v98.x; v2Y14 = v98.y; v2Z14 = v98.z; var v99 = vec4; v3X4 = v99.x; v3Y4 = v99.y; v3Z4 = v99.z; v12X14 = v2X14 - v1X14; v12Y14 = v2Y14 - v1Y14; v12Z14 = v2Z14 - v1Z14; v23X4 = v3X4 - v2X14; v23Y4 = v3Y4 - v2Y14; v23Z4 = v3Z4 - v2Z14; v31X3 = v1X14 - v3X4; v31Y3 = v1Y14 - v3Y4; v31Z3 = v1Z14 - v3Z4; var n4; var nX4; var nY4; var nZ4; nX4 = v12Y14 * v23Z4 - v12Z14 * v23Y4; nY4 = v12Z14 * v23X4 - v12X14 * v23Z4; nZ4 = v12X14 * v23Y4 - v12Y14 * v23X4; var n124; var n12X3; var n12Y3; var n12Z3; var n233; var n23X3; var n23Y3; var n23Z3; var n313; var n31X3; var n31Y3; var n31Z3; n12X3 = v12Y14 * nZ4 - v12Z14 * nY4; n12Y3 = v12Z14 * nX4 - v12X14 * nZ4; n12Z3 = v12X14 * nY4 - v12Y14 * nX4; n23X3 = v23Y4 * nZ4 - v23Z4 * nY4; n23Y3 = v23Z4 * nX4 - v23X4 * nZ4; n23Z3 = v23X4 * nY4 - v23Y4 * nX4; n31X3 = v31Y3 * nZ4 - v31Z3 * nY4; n31Y3 = v31Z3 * nX4 - v31X3 * nZ4; n31Z3 = v31X3 * nY4 - v31Y3 * nX4; var d124 = v1X14 * n12X3 + v1Y14 * n12Y3 + v1Z14 * n12Z3; var d233 = v2X14 * n23X3 + v2Y14 * n23Y3 + v2Z14 * n23Z3; var d313 = v3X4 * n31X3 + v3Y4 * n31Y3 + v3Z4 * n31Z3; var mind4 = -1; var minv4; var minvX4; var minvY4; var minvZ4; var mini4 = 0; minvX4 = 0; minvY4 = 0; minvZ4 = 0; if(d124 < 0) { var v132; var v1X15; var v1Y15; var v1Z15; var v221; var v2X15; var v2Y15; var v2Z15; var v100 = vec11; v1X15 = v100.x; v1Y15 = v100.y; v1Z15 = v100.z; var v101 = vec21; v2X15 = v101.x; v2Y15 = v101.y; v2Z15 = v101.z; var v1215; var v12X15; var v12Y15; var v12Z15; v12X15 = v2X15 - v1X15; v12Y15 = v2Y15 - v1Y15; v12Z15 = v2Z15 - v1Z15; var d22 = v12X15 * v12X15 + v12Y15 * v12Y15 + v12Z15 * v12Z15; var t10 = v12X15 * v1X15 + v12Y15 * v1Y15 + v12Z15 * v1Z15; t10 = -t10 / d22; var b11; if(t10 < 0) { var v102 = closest; v102.x = v1X15; v102.y = v1Y15; v102.z = v1Z15; b11 = 1; } else if(t10 > 1) { var v103 = closest; v103.x = v2X15; v103.y = v2Y15; v103.z = v2Z15; b11 = 2; } else { var p10; var pX10; var pY10; var pZ10; pX10 = v1X15 + v12X15 * t10; pY10 = v1Y15 + v12Y15 * t10; pZ10 = v1Z15 + v12Z15 * t10; var v104 = closest; v104.x = pX10; v104.y = pY10; v104.z = pZ10; b11 = 3; } var d24 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; mini4 = b11; mind4 = d24; var v105 = closest; minvX4 = v105.x; minvY4 = v105.y; minvZ4 = v105.z; } if(d233 < 0) { var v133; var v1X16; var v1Y16; var v1Z16; var v222; var v2X16; var v2Y16; var v2Z16; var v106 = vec21; v1X16 = v106.x; v1Y16 = v106.y; v1Z16 = v106.z; var v107 = vec4; v2X16 = v107.x; v2Y16 = v107.y; v2Z16 = v107.z; var v1216; var v12X16; var v12Y16; var v12Z16; v12X16 = v2X16 - v1X16; v12Y16 = v2Y16 - v1Y16; v12Z16 = v2Z16 - v1Z16; var d25 = v12X16 * v12X16 + v12Y16 * v12Y16 + v12Z16 * v12Z16; var t11 = v12X16 * v1X16 + v12Y16 * v1Y16 + v12Z16 * v1Z16; t11 = -t11 / d25; var b12; if(t11 < 0) { var v108 = closest; v108.x = v1X16; v108.y = v1Y16; v108.z = v1Z16; b12 = 1; } else if(t11 > 1) { var v109 = closest; v109.x = v2X16; v109.y = v2Y16; v109.z = v2Z16; b12 = 2; } else { var p11; var pX11; var pY11; var pZ11; pX11 = v1X16 + v12X16 * t11; pY11 = v1Y16 + v12Y16 * t11; pZ11 = v1Z16 + v12Z16 * t11; var v134 = closest; v134.x = pX11; v134.y = pY11; v134.z = pZ11; b12 = 3; } var d26 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind4 < 0 || d26 < mind4) { mini4 = b12 << 1; mind4 = d26; var v135 = closest; minvX4 = v135.x; minvY4 = v135.y; minvZ4 = v135.z; } } if(d313 < 0) { var v136; var v1X17; var v1Y17; var v1Z17; var v223; var v2X17; var v2Y17; var v2Z17; var v137 = vec11; v1X17 = v137.x; v1Y17 = v137.y; v1Z17 = v137.z; var v138 = vec4; v2X17 = v138.x; v2Y17 = v138.y; v2Z17 = v138.z; var v1217; var v12X17; var v12Y17; var v12Z17; v12X17 = v2X17 - v1X17; v12Y17 = v2Y17 - v1Y17; v12Z17 = v2Z17 - v1Z17; var d27 = v12X17 * v12X17 + v12Y17 * v12Y17 + v12Z17 * v12Z17; var t12 = v12X17 * v1X17 + v12Y17 * v1Y17 + v12Z17 * v1Z17; t12 = -t12 / d27; var b13; if(t12 < 0) { var v139 = closest; v139.x = v1X17; v139.y = v1Y17; v139.z = v1Z17; b13 = 1; } else if(t12 > 1) { var v140 = closest; v140.x = v2X17; v140.y = v2Y17; v140.z = v2Z17; b13 = 2; } else { var p12; var pX12; var pY12; var pZ12; pX12 = v1X17 + v12X17 * t12; pY12 = v1Y17 + v12Y17 * t12; pZ12 = v1Z17 + v12Z17 * t12; var v142 = closest; v142.x = pX12; v142.y = pY12; v142.z = pZ12; b13 = 3; } var d28 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind4 < 0 || d28 < mind4) { mini4 = b13 & 1 | (b13 & 2) << 1; mind4 = d28; var v143 = closest; minvX4 = v143.x; minvY4 = v143.y; minvZ4 = v143.z; } } var b14; if(mind4 > 0) { var v144 = closest; v144.x = minvX4; v144.y = minvY4; v144.z = minvZ4; b14 = mini4; } else { var l4 = nX4 * nX4 + nY4 * nY4 + nZ4 * nZ4; if(l4 > 0) { l4 = 1 / Math.sqrt(l4); } nX4 *= l4; nY4 *= l4; nZ4 *= l4; var dn3 = v1X14 * nX4 + v1Y14 * nY4 + v1Z14 * nZ4; var l23 = nX4 * nX4 + nY4 * nY4 + nZ4 * nZ4; l23 = dn3 / l23; minvX4 = nX4 * l23; minvY4 = nY4 * l23; minvZ4 = nZ4 * l23; var v145 = closest; v145.x = minvX4; v145.y = minvY4; v145.z = minvZ4; b14 = 7; } var d29 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind1 < 0 || d29 < mind1) { mini1 = b14 & 3 | (b14 & 4) << 1; mind1 = d29; var v146 = closest; minvX1 = v146.x; minvY1 = v146.y; minvZ1 = v146.z; } } if(d243 * sign < 0) { var v147; var v1X18; var v1Y18; var v1Z18; var v224; var v2X18; var v2Y18; var v2Z18; var v318; var v3X5; var v3Y5; var v3Z5; var v1218; var v12X18; var v12Y18; var v12Z18; var v235; var v23X5; var v23Y5; var v23Z5; var v319; var v31X4; var v31Y4; var v31Z4; var v148 = vec21; v1X18 = v148.x; v1Y18 = v148.y; v1Z18 = v148.z; var v149 = vec31; v2X18 = v149.x; v2Y18 = v149.y; v2Z18 = v149.z; var v150 = vec4; v3X5 = v150.x; v3Y5 = v150.y; v3Z5 = v150.z; v12X18 = v2X18 - v1X18; v12Y18 = v2Y18 - v1Y18; v12Z18 = v2Z18 - v1Z18; v23X5 = v3X5 - v2X18; v23Y5 = v3Y5 - v2Y18; v23Z5 = v3Z5 - v2Z18; v31X4 = v1X18 - v3X5; v31Y4 = v1Y18 - v3Y5; v31Z4 = v1Z18 - v3Z5; var n5; var nX5; var nY5; var nZ5; nX5 = v12Y18 * v23Z5 - v12Z18 * v23Y5; nY5 = v12Z18 * v23X5 - v12X18 * v23Z5; nZ5 = v12X18 * v23Y5 - v12Y18 * v23X5; var n125; var n12X4; var n12Y4; var n12Z4; var n234; var n23X4; var n23Y4; var n23Z4; var n314; var n31X4; var n31Y4; var n31Z4; n12X4 = v12Y18 * nZ5 - v12Z18 * nY5; n12Y4 = v12Z18 * nX5 - v12X18 * nZ5; n12Z4 = v12X18 * nY5 - v12Y18 * nX5; n23X4 = v23Y5 * nZ5 - v23Z5 * nY5; n23Y4 = v23Z5 * nX5 - v23X5 * nZ5; n23Z4 = v23X5 * nY5 - v23Y5 * nX5; n31X4 = v31Y4 * nZ5 - v31Z4 * nY5; n31Y4 = v31Z4 * nX5 - v31X4 * nZ5; n31Z4 = v31X4 * nY5 - v31Y4 * nX5; var d125 = v1X18 * n12X4 + v1Y18 * n12Y4 + v1Z18 * n12Z4; var d234 = v2X18 * n23X4 + v2Y18 * n23Y4 + v2Z18 * n23Z4; var d314 = v3X5 * n31X4 + v3Y5 * n31Y4 + v3Z5 * n31Z4; var mind5 = -1; var minv5; var minvX5; var minvY5; var minvZ5; var mini5 = 0; minvX5 = 0; minvY5 = 0; minvZ5 = 0; if(d125 < 0) { var v151; var v1X19; var v1Y19; var v1Z19; var v225; var v2X19; var v2Y19; var v2Z19; var v152 = vec21; v1X19 = v152.x; v1Y19 = v152.y; v1Z19 = v152.z; var v153 = vec31; v2X19 = v153.x; v2Y19 = v153.y; v2Z19 = v153.z; var v1219; var v12X19; var v12Y19; var v12Z19; v12X19 = v2X19 - v1X19; v12Y19 = v2Y19 - v1Y19; v12Z19 = v2Z19 - v1Z19; var d30 = v12X19 * v12X19 + v12Y19 * v12Y19 + v12Z19 * v12Z19; var t13 = v12X19 * v1X19 + v12Y19 * v1Y19 + v12Z19 * v1Z19; t13 = -t13 / d30; var b15; if(t13 < 0) { var v154 = closest; v154.x = v1X19; v154.y = v1Y19; v154.z = v1Z19; b15 = 1; } else if(t13 > 1) { var v155 = closest; v155.x = v2X19; v155.y = v2Y19; v155.z = v2Z19; b15 = 2; } else { var p13; var pX13; var pY13; var pZ13; pX13 = v1X19 + v12X19 * t13; pY13 = v1Y19 + v12Y19 * t13; pZ13 = v1Z19 + v12Z19 * t13; var v156 = closest; v156.x = pX13; v156.y = pY13; v156.z = pZ13; b15 = 3; } var d32 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; mini5 = b15; mind5 = d32; var v157 = closest; minvX5 = v157.x; minvY5 = v157.y; minvZ5 = v157.z; } if(d234 < 0) { var v158; var v1X20; var v1Y20; var v1Z20; var v226; var v2X20; var v2Y20; var v2Z20; var v159 = vec31; v1X20 = v159.x; v1Y20 = v159.y; v1Z20 = v159.z; var v160 = vec4; v2X20 = v160.x; v2Y20 = v160.y; v2Z20 = v160.z; var v1220; var v12X20; var v12Y20; var v12Z20; v12X20 = v2X20 - v1X20; v12Y20 = v2Y20 - v1Y20; v12Z20 = v2Z20 - v1Z20; var d33 = v12X20 * v12X20 + v12Y20 * v12Y20 + v12Z20 * v12Z20; var t14 = v12X20 * v1X20 + v12Y20 * v1Y20 + v12Z20 * v1Z20; t14 = -t14 / d33; var b16; if(t14 < 0) { var v161 = closest; v161.x = v1X20; v161.y = v1Y20; v161.z = v1Z20; b16 = 1; } else if(t14 > 1) { var v162 = closest; v162.x = v2X20; v162.y = v2Y20; v162.z = v2Z20; b16 = 2; } else { var p14; var pX14; var pY14; var pZ14; pX14 = v1X20 + v12X20 * t14; pY14 = v1Y20 + v12Y20 * t14; pZ14 = v1Z20 + v12Z20 * t14; var v163 = closest; v163.x = pX14; v163.y = pY14; v163.z = pZ14; b16 = 3; } var d34 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind5 < 0 || d34 < mind5) { mini5 = b16 << 1; mind5 = d34; var v164 = closest; minvX5 = v164.x; minvY5 = v164.y; minvZ5 = v164.z; } } if(d314 < 0) { var v165; var v1X21; var v1Y21; var v1Z21; var v227; var v2X21; var v2Y21; var v2Z21; var v166 = vec21; v1X21 = v166.x; v1Y21 = v166.y; v1Z21 = v166.z; var v167 = vec4; v2X21 = v167.x; v2Y21 = v167.y; v2Z21 = v167.z; var v1221; var v12X21; var v12Y21; var v12Z21; v12X21 = v2X21 - v1X21; v12Y21 = v2Y21 - v1Y21; v12Z21 = v2Z21 - v1Z21; var d35 = v12X21 * v12X21 + v12Y21 * v12Y21 + v12Z21 * v12Z21; var t15 = v12X21 * v1X21 + v12Y21 * v1Y21 + v12Z21 * v1Z21; t15 = -t15 / d35; var b17; if(t15 < 0) { var v168 = closest; v168.x = v1X21; v168.y = v1Y21; v168.z = v1Z21; b17 = 1; } else if(t15 > 1) { var v169 = closest; v169.x = v2X21; v169.y = v2Y21; v169.z = v2Z21; b17 = 2; } else { var p15; var pX15; var pY15; var pZ15; pX15 = v1X21 + v12X21 * t15; pY15 = v1Y21 + v12Y21 * t15; pZ15 = v1Z21 + v12Z21 * t15; var v170 = closest; v170.x = pX15; v170.y = pY15; v170.z = pZ15; b17 = 3; } var d36 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind5 < 0 || d36 < mind5) { mini5 = b17 & 1 | (b17 & 2) << 1; mind5 = d36; var v171 = closest; minvX5 = v171.x; minvY5 = v171.y; minvZ5 = v171.z; } } var b18; if(mind5 > 0) { var v172 = closest; v172.x = minvX5; v172.y = minvY5; v172.z = minvZ5; b18 = mini5; } else { var l5 = nX5 * nX5 + nY5 * nY5 + nZ5 * nZ5; if(l5 > 0) { l5 = 1 / Math.sqrt(l5); } nX5 *= l5; nY5 *= l5; nZ5 *= l5; var dn4 = v1X18 * nX5 + v1Y18 * nY5 + v1Z18 * nZ5; var l24 = nX5 * nX5 + nY5 * nY5 + nZ5 * nZ5; l24 = dn4 / l24; minvX5 = nX5 * l24; minvY5 = nY5 * l24; minvZ5 = nZ5 * l24; var v173 = closest; v173.x = minvX5; v173.y = minvY5; v173.z = minvZ5; b18 = 7; } var d37 = closest.x * closest.x + closest.y * closest.y + closest.z * closest.z; if(mind1 < 0 || d37 < mind1) { mini1 = b18 << 1; mind1 = d37; var v174 = closest; minvX1 = v174.x; minvY1 = v174.y; minvZ1 = v174.z; } } if(mind1 > 0) { var v175 = closest; v175.x = minvX1; v175.y = minvY1; v175.z = minvZ1; v4 = mini1; } else { closest.zero(); v4 = 15; } break; } this.shrinkSimplex(v4); if(closest.x * closest.x + closest.y * closest.y + closest.z * closest.z < eps2) { if(lambda == 0 || this.simplexSize == 4) { hit.fraction = lambda; return false; } this.interpolateClosestPoints(); hit.fraction = lambda; var _this3 = hit.normal; _this3.x = dir.x; _this3.y = dir.y; _this3.z = dir.z; var _this4 = _this3; var invLen = Math.sqrt(_this4.x * _this4.x + _this4.y * _this4.y + _this4.z * _this4.z); if(invLen > 0) { invLen = 1 / invLen; } var tx2 = _this4.x * invLen; var ty2 = _this4.y * invLen; var tz2 = _this4.z * invLen; _this4.x = tx2; _this4.y = ty2; _this4.z = tz2; var _this5 = hit.position; var v176 = this.closestPoint1; _this5.x = v176.x; _this5.y = v176.y; _this5.z = v176.z; var _this6 = _this5; var tx3 = _this6.x + tl1.x * lambda; var ty3 = _this6.y + tl1.y * lambda; var tz3 = _this6.z + tl1.z * lambda; _this6.x = tx3; _this6.y = ty3; _this6.z = tz3; return true; } dir.x = closest.x; dir.y = closest.y; dir.z = closest.z; var _this7 = dir; var tx4 = -_this7.x; var ty4 = -_this7.y; var tz4 = -_this7.z; _this7.x = tx4; _this7.y = ty4; _this7.z = tz4; if(this.c1 != null) { this.computeWitnessPoint1(true); } else { var v177 = this.w1[this.simplexSize]; v177.x = this.tf1._positionX; v177.y = this.tf1._positionY; v177.z = this.tf1._positionZ; } this.computeWitnessPoint2(true); var _this8 = this.s[this.simplexSize]; var v178 = this.w1[this.simplexSize]; _this8.x = v178.x; _this8.y = v178.y; _this8.z = v178.z; var _this9 = _this8; var v179 = this.w2[this.simplexSize]; var tx5 = _this9.x - v179.x; var ty5 = _this9.y - v179.y; var tz5 = _this9.z - v179.z; _this9.x = tx5; _this9.y = ty5; _this9.z = tz5; var _this10 = s[this.simplexSize]; var tx6 = _this10.x - rayX.x; var ty6 = _this10.y - rayX.y; var tz6 = _this10.z - rayX.z; _this10.x = tx6; _this10.y = ty6; _this10.z = tz6; if(dir.x * dir.x + dir.y * dir.y + dir.z * dir.z < eps2) { throw new Error("!?"); } var p16 = s[this.simplexSize]; var n6 = dir; var pn = p16.x * n6.x + p16.y * n6.y + p16.z * n6.z; if(pn < 0) { if(rayR.x * n6.x + rayR.y * n6.y + rayR.z * n6.z >= 0) { return false; } var dLambda = pn / (rayR.x * n6.x + rayR.y * n6.y + rayR.z * n6.z); lambda += dLambda; if(lambda >= 1) { return false; } var tx7 = rayX.x + rayR.x * dLambda; var ty7 = rayX.y + rayR.y * dLambda; var tz7 = rayX.z + rayR.z * dLambda; rayX.x = tx7; rayX.y = ty7; rayX.z = tz7; var _g1 = 0; var _g2 = this.simplexSize + 1; while(_g1 < _g2) { var i = _g1++; var _this11 = s[i]; var s1 = -dLambda; var tx8 = _this11.x + rayR.x * s1; var ty8 = _this11.y + rayR.y * s1; var tz8 = _this11.z + rayR.z * s1; _this11.x = tx8; _this11.y = ty8; _this11.z = tz8; } } var duplicate = false; var _g11 = 0; var _g21 = this.simplexSize; while(_g11 < _g21) { var i1 = _g11++; var dx = s[i1].x - s[this.simplexSize].x; var dy = s[i1].y - s[this.simplexSize].y; var dz = s[i1].z - s[this.simplexSize].z; if(dx * dx + dy * dy + dz * dz < eps2) { duplicate = true; break; } } if(!duplicate) { this.simplexSize++; } ++count; } return false; } interpolateClosestPoints() { switch(this.simplexSize) { case 1: var _this = this.closestPoint1; var v = this.w1[0]; _this.x = v.x; _this.y = v.y; _this.z = v.z; var _this1 = this.closestPoint2; var v1 = this.w2[0]; _this1.x = v1.x; _this1.y = v1.y; _this1.z = v1.z; break; case 2: var c; var cX; var cY; var cZ; var v2 = this.closest; cX = v2.x; cY = v2.y; cZ = v2.z; var s0; var s0X; var s0Y; var s0Z; var w10; var w10X; var w10Y; var w10Z; var w20; var w20X; var w20Y; var w20Z; var s1; var s1X; var s1Y; var s1Z; var w11; var w11X; var w11Y; var w11Z; var w21; var w21X; var w21Y; var w21Z; var s2; var s2X; var s2Y; var s2Z; var w12; var w12X; var w12Y; var w12Z; var w22; var w22X; var w22Y; var w22Z; var v3 = this.s[0]; s0X = v3.x; s0Y = v3.y; s0Z = v3.z; var v4 = this.w1[0]; w10X = v4.x; w10Y = v4.y; w10Z = v4.z; var v5 = this.w2[0]; w20X = v5.x; w20Y = v5.y; w20Z = v5.z; var v6 = this.s[1]; s1X = v6.x; s1Y = v6.y; s1Z = v6.z; var v7 = this.w1[1]; w11X = v7.x; w11Y = v7.y; w11Z = v7.z; var v8 = this.w2[1]; w21X = v8.x; w21Y = v8.y; w21Z = v8.z; var v9 = this.s[2]; s2X = v9.x; s2Y = v9.y; s2Z = v9.z; var v10 = this.w1[2]; w12X = v10.x; w12Y = v10.y; w12Z = v10.z; var v11 = this.w2[2]; w22X = v11.x; w22Y = v11.y; w22Z = v11.z; var s01; var s01X; var s01Y; var s01Z; s01X = s1X - s0X; s01Y = s1Y - s0Y; s01Z = s1Z - s0Z; var invDet = s01X * s01X + s01Y * s01Y + s01Z * s01Z; if(invDet != 0) { invDet = 1 / invDet; } var s0c; var s0cX; var s0cY; var s0cZ; s0cX = cX - s0X; s0cY = cY - s0Y; s0cZ = cZ - s0Z; var t = (s0cX * s01X + s0cY * s01Y + s0cZ * s01Z) * invDet; var diff; var diffX; var diffY; var diffZ; var cp1; var cp1X; var cp1Y; var cp1Z; var cp2; var cp2X; var cp2Y; var cp2Z; diffX = w11X - w10X; diffY = w11Y - w10Y; diffZ = w11Z - w10Z; cp1X = w10X + diffX * t; cp1Y = w10Y + diffY * t; cp1Z = w10Z + diffZ * t; diffX = w21X - w20X; diffY = w21Y - w20Y; diffZ = w21Z - w20Z; cp2X = w20X + diffX * t; cp2Y = w20Y + diffY * t; cp2Z = w20Z + diffZ * t; var v12 = this.closestPoint1; v12.x = cp1X; v12.y = cp1Y; v12.z = cp1Z; var v13 = this.closestPoint2; v13.x = cp2X; v13.y = cp2Y; v13.z = cp2Z; break; case 3: var c1; var cX1; var cY1; var cZ1; var v14 = this.closest; cX1 = v14.x; cY1 = v14.y; cZ1 = v14.z; var s02; var s0X1; var s0Y1; var s0Z1; var w101; var w10X1; var w10Y1; var w10Z1; var w201; var w20X1; var w20Y1; var w20Z1; var s11; var s1X1; var s1Y1; var s1Z1; var w111; var w11X1; var w11Y1; var w11Z1; var w211; var w21X1; var w21Y1; var w21Z1; var s21; var s2X1; var s2Y1; var s2Z1; var w121; var w12X1; var w12Y1; var w12Z1; var w221; var w22X1; var w22Y1; var w22Z1; var v15 = this.s[0]; s0X1 = v15.x; s0Y1 = v15.y; s0Z1 = v15.z; var v16 = this.w1[0]; w10X1 = v16.x; w10Y1 = v16.y; w10Z1 = v16.z; var v17 = this.w2[0]; w20X1 = v17.x; w20Y1 = v17.y; w20Z1 = v17.z; var v18 = this.s[1]; s1X1 = v18.x; s1Y1 = v18.y; s1Z1 = v18.z; var v19 = this.w1[1]; w11X1 = v19.x; w11Y1 = v19.y; w11Z1 = v19.z; var v20 = this.w2[1]; w21X1 = v20.x; w21Y1 = v20.y; w21Z1 = v20.z; var v21 = this.s[2]; s2X1 = v21.x; s2Y1 = v21.y; s2Z1 = v21.z; var v22 = this.w1[2]; w12X1 = v22.x; w12Y1 = v22.y; w12Z1 = v22.z; var v23 = this.w2[2]; w22X1 = v23.x; w22Y1 = v23.y; w22Z1 = v23.z; var s011; var s01X1; var s01Y1; var s01Z1; var s021; var s02X; var s02Y; var s02Z; var s0c1; var s0cX1; var s0cY1; var s0cZ1; s01X1 = s1X1 - s0X1; s01Y1 = s1Y1 - s0Y1; s01Z1 = s1Z1 - s0Z1; s02X = s2X1 - s0X1; s02Y = s2Y1 - s0Y1; s02Z = s2Z1 - s0Z1; s0cX1 = cX1 - s0X1; s0cY1 = cY1 - s0Y1; s0cZ1 = cZ1 - s0Z1; var d11 = s01X1 * s01X1 + s01Y1 * s01Y1 + s01Z1 * s01Z1; var d12 = s01X1 * s02X + s01Y1 * s02Y + s01Z1 * s02Z; var d22 = s02X * s02X + s02Y * s02Y + s02Z * s02Z; var d1c = s01X1 * s0cX1 + s01Y1 * s0cY1 + s01Z1 * s0cZ1; var d2c = s02X * s0cX1 + s02Y * s0cY1 + s02Z * s0cZ1; var invDet1 = d11 * d22 - d12 * d12; if(invDet1 != 0) { invDet1 = 1 / invDet1; } var s = (d1c * d22 - d2c * d12) * invDet1; var t1 = (-d1c * d12 + d2c * d11) * invDet1; var diff1; var diffX1; var diffY1; var diffZ1; var cp11; var cp1X1; var cp1Y1; var cp1Z1; var cp21; var cp2X1; var cp2Y1; var cp2Z1; diffX1 = w11X1 - w10X1; diffY1 = w11Y1 - w10Y1; diffZ1 = w11Z1 - w10Z1; cp1X1 = w10X1 + diffX1 * s; cp1Y1 = w10Y1 + diffY1 * s; cp1Z1 = w10Z1 + diffZ1 * s; diffX1 = w12X1 - w10X1; diffY1 = w12Y1 - w10Y1; diffZ1 = w12Z1 - w10Z1; cp1X1 += diffX1 * t1; cp1Y1 += diffY1 * t1; cp1Z1 += diffZ1 * t1; diffX1 = w21X1 - w20X1; diffY1 = w21Y1 - w20Y1; diffZ1 = w21Z1 - w20Z1; cp2X1 = w20X1 + diffX1 * s; cp2Y1 = w20Y1 + diffY1 * s; cp2Z1 = w20Z1 + diffZ1 * s; diffX1 = w22X1 - w20X1; diffY1 = w22Y1 - w20Y1; diffZ1 = w22Z1 - w20Z1; cp2X1 += diffX1 * t1; cp2Y1 += diffY1 * t1; cp2Z1 += diffZ1 * t1; var v24 = this.closestPoint1; v24.x = cp1X1; v24.y = cp1Y1; v24.z = cp1Z1; var v25 = this.closestPoint2; v25.x = cp2X1; v25.y = cp2Y1; v25.z = cp2Z1; break; default: throw new Error("!?"); } } loadCache(gjkCache) { var _this = this.dir; var v = gjkCache.prevClosestDir; _this.x = v.x; _this.y = v.y; _this.z = v.z; } saveCache(gjkCache) { var _this = gjkCache.prevClosestDir; var v = this.closest; _this.x = v.x; _this.y = v.y; _this.z = v.z; var _this1 = _this; var tx = -_this1.x; var ty = -_this1.y; var tz = -_this1.z; _this1.x = tx; _this1.y = ty; _this1.z = tz; } shrinkSimplex(vertexBits) { this.simplexSize = vertexBits; this.simplexSize = (this.simplexSize & 5) + (this.simplexSize >> 1 & 5); this.simplexSize = (this.simplexSize & 3) + (this.simplexSize >> 2 & 3); switch(vertexBits) { case 2: var _this = this.s[0]; var v = this.s[1]; _this.x = v.x; _this.y = v.y; _this.z = v.z; var _this1 = this.w1[0]; var v1 = this.w1[1]; _this1.x = v1.x; _this1.y = v1.y; _this1.z = v1.z; var _this2 = this.w2[0]; var v2 = this.w2[1]; _this2.x = v2.x; _this2.y = v2.y; _this2.z = v2.z; break; case 4: var _this3 = this.s[0]; var v3 = this.s[2]; _this3.x = v3.x; _this3.y = v3.y; _this3.z = v3.z; var _this4 = this.w1[0]; var v4 = this.w1[2]; _this4.x = v4.x; _this4.y = v4.y; _this4.z = v4.z; var _this5 = this.w2[0]; var v5 = this.w2[2]; _this5.x = v5.x; _this5.y = v5.y; _this5.z = v5.z; break; case 5: var _this6 = this.s[1]; var v6 = this.s[2]; _this6.x = v6.x; _this6.y = v6.y; _this6.z = v6.z; var _this7 = this.w1[1]; var v7 = this.w1[2]; _this7.x = v7.x; _this7.y = v7.y; _this7.z = v7.z; var _this8 = this.w2[1]; var v8 = this.w2[2]; _this8.x = v8.x; _this8.y = v8.y; _this8.z = v8.z; break; case 6: var _this9 = this.s[0]; var v9 = this.s[2]; _this9.x = v9.x; _this9.y = v9.y; _this9.z = v9.z; var _this10 = this.w1[0]; var v10 = this.w1[2]; _this10.x = v10.x; _this10.y = v10.y; _this10.z = v10.z; var _this11 = this.w2[0]; var v11 = this.w2[2]; _this11.x = v11.x; _this11.y = v11.y; _this11.z = v11.z; break; case 8: var _this12 = this.s[0]; var v12 = this.s[3]; _this12.x = v12.x; _this12.y = v12.y; _this12.z = v12.z; var _this13 = this.w1[0]; var v13 = this.w1[3]; _this13.x = v13.x; _this13.y = v13.y; _this13.z = v13.z; var _this14 = this.w2[0]; var v14 = this.w2[3]; _this14.x = v14.x; _this14.y = v14.y; _this14.z = v14.z; break; case 9: var _this15 = this.s[1]; var v15 = this.s[3]; _this15.x = v15.x; _this15.y = v15.y; _this15.z = v15.z; var _this16 = this.w1[1]; var v16 = this.w1[3]; _this16.x = v16.x; _this16.y = v16.y; _this16.z = v16.z; var _this17 = this.w2[1]; var v17 = this.w2[3]; _this17.x = v17.x; _this17.y = v17.y; _this17.z = v17.z; break; case 10: var _this18 = this.s[0]; var v18 = this.s[3]; _this18.x = v18.x; _this18.y = v18.y; _this18.z = v18.z; var _this19 = this.w1[0]; var v19 = this.w1[3]; _this19.x = v19.x; _this19.y = v19.y; _this19.z = v19.z; var _this20 = this.w2[0]; var v20 = this.w2[3]; _this20.x = v20.x; _this20.y = v20.y; _this20.z = v20.z; break; case 11: var _this21 = this.s[2]; var v21 = this.s[3]; _this21.x = v21.x; _this21.y = v21.y; _this21.z = v21.z; var _this22 = this.w1[2]; var v22 = this.w1[3]; _this22.x = v22.x; _this22.y = v22.y; _this22.z = v22.z; var _this23 = this.w2[2]; var v23 = this.w2[3]; _this23.x = v23.x; _this23.y = v23.y; _this23.z = v23.z; break; case 12: var _this24 = this.s[0]; var v24 = this.s[2]; _this24.x = v24.x; _this24.y = v24.y; _this24.z = v24.z; var _this25 = this.w1[0]; var v25 = this.w1[2]; _this25.x = v25.x; _this25.y = v25.y; _this25.z = v25.z; var _this26 = this.w2[0]; var v26 = this.w2[2]; _this26.x = v26.x; _this26.y = v26.y; _this26.z = v26.z; var _this27 = this.s[1]; var v27 = this.s[3]; _this27.x = v27.x; _this27.y = v27.y; _this27.z = v27.z; var _this28 = this.w1[1]; var v28 = this.w1[3]; _this28.x = v28.x; _this28.y = v28.y; _this28.z = v28.z; var _this29 = this.w2[1]; var v29 = this.w2[3]; _this29.x = v29.x; _this29.y = v29.y; _this29.z = v29.z; break; case 13: var _this30 = this.s[1]; var v30 = this.s[3]; _this30.x = v30.x; _this30.y = v30.y; _this30.z = v30.z; var _this31 = this.w1[1]; var v31 = this.w1[3]; _this31.x = v31.x; _this31.y = v31.y; _this31.z = v31.z; var _this32 = this.w2[1]; var v32 = this.w2[3]; _this32.x = v32.x; _this32.y = v32.y; _this32.z = v32.z; break; case 14: var _this33 = this.s[0]; var v33 = this.s[3]; _this33.x = v33.x; _this33.y = v33.y; _this33.z = v33.z; var _this34 = this.w1[0]; var v34 = this.w1[3]; _this34.x = v34.x; _this34.y = v34.y; _this34.z = v34.z; var _this35 = this.w2[0]; var v35 = this.w2[3]; _this35.x = v35.x; _this35.y = v35.y; _this35.z = v35.z; break; } } computeWitnessPoint1(addMargin) { var tmp; var tmpX; var tmpY; var tmpZ; var idir; var idirX; var idirY; var idirZ; var v = this.dir; idirX = v.x; idirY = v.y; idirZ = v.z; var ldir1; var ldir1X; var ldir1Y; var ldir1Z; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = this.tf1._rotation00 * idirX + this.tf1._rotation10 * idirY + this.tf1._rotation20 * idirZ; __tmp__Y = this.tf1._rotation01 * idirX + this.tf1._rotation11 * idirY + this.tf1._rotation21 * idirZ; __tmp__Z = this.tf1._rotation02 * idirX + this.tf1._rotation12 * idirY + this.tf1._rotation22 * idirZ; ldir1X = __tmp__X; ldir1Y = __tmp__Y; ldir1Z = __tmp__Z; var iw1; var iw1X; var iw1Y; var iw1Z; var v1 = this.dir; v1.x = ldir1X; v1.y = ldir1Y; v1.z = ldir1Z; this.c1.computeLocalSupportingVertex(this.dir,this.w1[this.simplexSize]); if(addMargin) { var _this = this.dir; var invLen = Math.sqrt(_this.x * _this.x + _this.y * _this.y + _this.z * _this.z); if(invLen > 0) { invLen = 1 / invLen; } var tx = _this.x * invLen; var ty = _this.y * invLen; var tz = _this.z * invLen; _this.x = tx; _this.y = ty; _this.z = tz; var _this1 = this.w1[this.simplexSize]; var v2 = this.dir; var s = this.c1._gjkMargin; var tx1 = _this1.x + v2.x * s; var ty1 = _this1.y + v2.y * s; var tz1 = _this1.z + v2.z * s; _this1.x = tx1; _this1.y = ty1; _this1.z = tz1; } var v3 = this.w1[this.simplexSize]; tmpX = v3.x; tmpY = v3.y; tmpZ = v3.z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = this.tf1._rotation00 * tmpX + this.tf1._rotation01 * tmpY + this.tf1._rotation02 * tmpZ; __tmp__Y1 = this.tf1._rotation10 * tmpX + this.tf1._rotation11 * tmpY + this.tf1._rotation12 * tmpZ; __tmp__Z1 = this.tf1._rotation20 * tmpX + this.tf1._rotation21 * tmpY + this.tf1._rotation22 * tmpZ; iw1X = __tmp__X1; iw1Y = __tmp__Y1; iw1Z = __tmp__Z1; iw1X += this.tf1._positionX; iw1Y += this.tf1._positionY; iw1Z += this.tf1._positionZ; var v4 = this.w1[this.simplexSize]; v4.x = iw1X; v4.y = iw1Y; v4.z = iw1Z; var v5 = this.dir; v5.x = idirX; v5.y = idirY; v5.z = idirZ; } computeWitnessPoint2(addMargin) { var tmp; var tmpX; var tmpY; var tmpZ; var idir; var idirX; var idirY; var idirZ; var v = this.dir; idirX = v.x; idirY = v.y; idirZ = v.z; var ldir2; var ldir2X; var ldir2Y; var ldir2Z; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = this.tf2._rotation00 * idirX + this.tf2._rotation10 * idirY + this.tf2._rotation20 * idirZ; __tmp__Y = this.tf2._rotation01 * idirX + this.tf2._rotation11 * idirY + this.tf2._rotation21 * idirZ; __tmp__Z = this.tf2._rotation02 * idirX + this.tf2._rotation12 * idirY + this.tf2._rotation22 * idirZ; ldir2X = __tmp__X; ldir2Y = __tmp__Y; ldir2Z = __tmp__Z; ldir2X = -ldir2X; ldir2Y = -ldir2Y; ldir2Z = -ldir2Z; var iw2; var iw2X; var iw2Y; var iw2Z; var v1 = this.dir; v1.x = ldir2X; v1.y = ldir2Y; v1.z = ldir2Z; this.c2.computeLocalSupportingVertex(this.dir,this.w2[this.simplexSize]); if(addMargin) { var _this = this.dir; var invLen = Math.sqrt(_this.x * _this.x + _this.y * _this.y + _this.z * _this.z); if(invLen > 0) { invLen = 1 / invLen; } var tx = _this.x * invLen; var ty = _this.y * invLen; var tz = _this.z * invLen; _this.x = tx; _this.y = ty; _this.z = tz; var _this1 = this.w2[this.simplexSize]; var v2 = this.dir; var s = this.c2._gjkMargin; var tx1 = _this1.x + v2.x * s; var ty1 = _this1.y + v2.y * s; var tz1 = _this1.z + v2.z * s; _this1.x = tx1; _this1.y = ty1; _this1.z = tz1; } var v3 = this.w2[this.simplexSize]; tmpX = v3.x; tmpY = v3.y; tmpZ = v3.z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = this.tf2._rotation00 * tmpX + this.tf2._rotation01 * tmpY + this.tf2._rotation02 * tmpZ; __tmp__Y1 = this.tf2._rotation10 * tmpX + this.tf2._rotation11 * tmpY + this.tf2._rotation12 * tmpZ; __tmp__Z1 = this.tf2._rotation20 * tmpX + this.tf2._rotation21 * tmpY + this.tf2._rotation22 * tmpZ; iw2X = __tmp__X1; iw2Y = __tmp__Y1; iw2Z = __tmp__Z1; iw2X += this.tf2._positionX; iw2Y += this.tf2._positionY; iw2Z += this.tf2._positionZ; var v4 = this.w2[this.simplexSize]; v4.x = iw2X; v4.y = iw2Y; v4.z = iw2Z; var v5 = this.dir; v5.x = idirX; v5.y = idirY; v5.z = idirZ; } pointToTetrahedron() { var _g = 0; while(_g < 3) { var i = _g++; var _this = this.dir; var v = this.baseDirs[i]; _this.x = v.x; _this.y = v.y; _this.z = v.z; this.computeWitnessPoint1(false); this.computeWitnessPoint2(false); var _this1 = this.s[this.simplexSize]; var v1 = this.w1[this.simplexSize]; _this1.x = v1.x; _this1.y = v1.y; _this1.z = v1.z; var _this2 = _this1; var v2 = this.w2[this.simplexSize]; var tx = _this2.x - v2.x; var ty = _this2.y - v2.y; var tz = _this2.z - v2.z; _this2.x = tx; _this2.y = ty; _this2.z = tz; this.simplexSize++; this.lineToTetrahedron(); if(this.simplexSize == 4) { break; } this.simplexSize--; var _this3 = this.dir; var tx1 = -_this3.x; var ty1 = -_this3.y; var tz1 = -_this3.z; _this3.x = tx1; _this3.y = ty1; _this3.z = tz1; this.computeWitnessPoint1(false); this.computeWitnessPoint2(false); var _this4 = this.s[this.simplexSize]; var v3 = this.w1[this.simplexSize]; _this4.x = v3.x; _this4.y = v3.y; _this4.z = v3.z; var _this5 = _this4; var v4 = this.w2[this.simplexSize]; var tx2 = _this5.x - v4.x; var ty2 = _this5.y - v4.y; var tz2 = _this5.z - v4.z; _this5.x = tx2; _this5.y = ty2; _this5.z = tz2; this.simplexSize++; this.lineToTetrahedron(); if(this.simplexSize == 4) { break; } this.simplexSize--; } } lineToTetrahedron() { var oldDir; var oldDirX; var oldDirY; var oldDirZ; var v = this.dir; oldDirX = v.x; oldDirY = v.y; oldDirZ = v.z; var s0; var s0X; var s0Y; var s0Z; var s1; var s1X; var s1Y; var s1Z; var lineDir; var lineDirX; var lineDirY; var lineDirZ; var v1 = this.s[0]; s0X = v1.x; s0Y = v1.y; s0Z = v1.z; var v2 = this.s[1]; s1X = v2.x; s1Y = v2.y; s1Z = v2.z; lineDirX = s0X - s1X; lineDirY = s0Y - s1Y; lineDirZ = s0Z - s1Z; var _g = 0; while(_g < 3) { var i = _g++; var baseDir; var baseDirX; var baseDirY; var baseDirZ; var v3 = this.baseDirs[i]; baseDirX = v3.x; baseDirY = v3.y; baseDirZ = v3.z; var newDir; var newDirX; var newDirY; var newDirZ; newDirX = lineDirY * baseDirZ - lineDirZ * baseDirY; newDirY = lineDirZ * baseDirX - lineDirX * baseDirZ; newDirZ = lineDirX * baseDirY - lineDirY * baseDirX; var v4 = this.dir; v4.x = newDirX; v4.y = newDirY; v4.z = newDirZ; this.computeWitnessPoint1(false); this.computeWitnessPoint2(false); var _this = this.s[this.simplexSize]; var v5 = this.w1[this.simplexSize]; _this.x = v5.x; _this.y = v5.y; _this.z = v5.z; var _this1 = _this; var v6 = this.w2[this.simplexSize]; var tx = _this1.x - v6.x; var ty = _this1.y - v6.y; var tz = _this1.z - v6.z; _this1.x = tx; _this1.y = ty; _this1.z = tz; this.simplexSize++; this.triangleToTetrahedron(); if(this.simplexSize == 4) { break; } this.simplexSize--; var _this2 = this.dir; var tx1 = -_this2.x; var ty1 = -_this2.y; var tz1 = -_this2.z; _this2.x = tx1; _this2.y = ty1; _this2.z = tz1; this.computeWitnessPoint1(false); this.computeWitnessPoint2(false); var _this3 = this.s[this.simplexSize]; var v7 = this.w1[this.simplexSize]; _this3.x = v7.x; _this3.y = v7.y; _this3.z = v7.z; var _this4 = _this3; var v8 = this.w2[this.simplexSize]; var tx2 = _this4.x - v8.x; var ty2 = _this4.y - v8.y; var tz2 = _this4.z - v8.z; _this4.x = tx2; _this4.y = ty2; _this4.z = tz2; this.simplexSize++; this.triangleToTetrahedron(); if(this.simplexSize == 4) { break; } this.simplexSize--; } var v9 = this.dir; v9.x = oldDirX; v9.y = oldDirY; v9.z = oldDirZ; } triangleToTetrahedron() { var oldDir; var oldDirX; var oldDirY; var oldDirZ; var v = this.dir; oldDirX = v.x; oldDirY = v.y; oldDirZ = v.z; while(true) { var s0; var s0X; var s0Y; var s0Z; var s1; var s1X; var s1Y; var s1Z; var s2; var s2X; var s2Y; var s2Z; var s01; var s01X; var s01Y; var s01Z; var s02; var s02X; var s02Y; var s02Z; var v1 = this.s[0]; s0X = v1.x; s0Y = v1.y; s0Z = v1.z; var v2 = this.s[1]; s1X = v2.x; s1Y = v2.y; s1Z = v2.z; var v3 = this.s[2]; s2X = v3.x; s2Y = v3.y; s2Z = v3.z; s01X = s1X - s0X; s01Y = s1Y - s0Y; s01Z = s1Z - s0Z; s02X = s2X - s0X; s02Y = s2Y - s0Y; s02Z = s2Z - s0Z; var n; var nX; var nY; var nZ; nX = s01Y * s02Z - s01Z * s02Y; nY = s01Z * s02X - s01X * s02Z; nZ = s01X * s02Y - s01Y * s02X; var v4 = this.dir; v4.x = nX; v4.y = nY; v4.z = nZ; this.computeWitnessPoint1(false); this.computeWitnessPoint2(false); var _this = this.s[this.simplexSize]; var v5 = this.w1[this.simplexSize]; _this.x = v5.x; _this.y = v5.y; _this.z = v5.z; var _this1 = _this; var v6 = this.w2[this.simplexSize]; var tx = _this1.x - v6.x; var ty = _this1.y - v6.y; var tz = _this1.z - v6.z; _this1.x = tx; _this1.y = ty; _this1.z = tz; this.simplexSize++; if(this.isValidTetrahedron()) { break; } this.simplexSize--; var _this2 = this.dir; var tx1 = -_this2.x; var ty1 = -_this2.y; var tz1 = -_this2.z; _this2.x = tx1; _this2.y = ty1; _this2.z = tz1; this.computeWitnessPoint1(false); this.computeWitnessPoint2(false); var _this3 = this.s[this.simplexSize]; var v7 = this.w1[this.simplexSize]; _this3.x = v7.x; _this3.y = v7.y; _this3.z = v7.z; var _this4 = _this3; var v8 = this.w2[this.simplexSize]; var tx2 = _this4.x - v8.x; var ty2 = _this4.y - v8.y; var tz2 = _this4.z - v8.z; _this4.x = tx2; _this4.y = ty2; _this4.z = tz2; this.simplexSize++; if(this.isValidTetrahedron()) { break; } this.simplexSize--; if(!false) { break; } } var v9 = this.dir; v9.x = oldDirX; v9.y = oldDirY; v9.z = oldDirZ; } isValidTetrahedron() { var e00 = this.s[1].x - this.s[0].x; var e01 = this.s[1].y - this.s[0].y; var e02 = this.s[1].z - this.s[0].z; var e10 = this.s[2].x - this.s[0].x; var e11 = this.s[2].y - this.s[0].y; var e12 = this.s[2].z - this.s[0].z; var e20 = this.s[3].x - this.s[0].x; var e21 = this.s[3].y - this.s[0].y; var e22 = this.s[3].z - this.s[0].z; var det = e00 * (e11 * e22 - e12 * e21) - e01 * (e10 * e22 - e12 * e20) + e02 * (e10 * e21 - e11 * e20); if(!(det > 1e-12)) { return det < -1e-12; } else { return true; } } computeDepth(convex1,convex2,tf1,tf2,initialPolyhedron,initialPolyhedron1,initialPolyhedron2) { var _this = this.polyhedron; while(_this._numTriangles > 0) { var t = _this._triangleList; _this._numTriangles--; var prev = t._prev; var next = t._next; if(prev != null) { prev._next = next; } if(next != null) { next._prev = prev; } if(t == _this._triangleList) { _this._triangleList = _this._triangleList._next; } if(t == _this._triangleListLast) { _this._triangleListLast = _this._triangleListLast._prev; } t._next = null; t._prev = null; t.removeReferences(); t._next = _this._trianglePool; _this._trianglePool = t; } while(_this._numVertices > 0) { var v = _this._vertices[--_this._numVertices]; v.removeReferences(); v._next = _this._vertexPool; _this._vertexPool = v; } var tmp = this.polyhedron; var _this1 = this.polyhedron; var first = _this1._vertexPool; if(first != null) { _this1._vertexPool = first._next; first._next = null; } else { first = new oimo.collision.narrowphase.detector.gjkepa.EpaVertex(); } var tmp1 = first.init(initialPolyhedron[0],initialPolyhedron1[0],initialPolyhedron2[0]); var _this2 = this.polyhedron; var first1 = _this2._vertexPool; if(first1 != null) { _this2._vertexPool = first1._next; first1._next = null; } else { first1 = new oimo.collision.narrowphase.detector.gjkepa.EpaVertex(); } var tmp2 = first1.init(initialPolyhedron[1],initialPolyhedron1[1],initialPolyhedron2[1]); var _this3 = this.polyhedron; var first2 = _this3._vertexPool; if(first2 != null) { _this3._vertexPool = first2._next; first2._next = null; } else { first2 = new oimo.collision.narrowphase.detector.gjkepa.EpaVertex(); } var tmp3 = first2.init(initialPolyhedron[2],initialPolyhedron1[2],initialPolyhedron2[2]); var _this4 = this.polyhedron; var first3 = _this4._vertexPool; if(first3 != null) { _this4._vertexPool = first3._next; first3._next = null; } else { first3 = new oimo.collision.narrowphase.detector.gjkepa.EpaVertex(); } if(!tmp._init(tmp1,tmp2,tmp3,first3.init(initialPolyhedron[3],initialPolyhedron1[3],initialPolyhedron2[3]))) { return oimo.collision.narrowphase.detector.gjkepa.GjkEpaResultState.EPA_FAILED_TO_INIT; } this.simplexSize = 0; var supportingVertex = this.s[0]; var witness1 = this.w1[0]; var witness2 = this.w2[0]; var count = 0; var maxIterations = 40; while(count < maxIterations) { var f = this.polyhedron._triangleList; var mind = 1e65536; var minf = null; while(f != null) { var n = f._next; if(f._distanceSq < mind) { mind = f._distanceSq; minf = f; } f = n; } var face = minf; var _this5 = this.dir; var v1 = face._normal; _this5.x = v1.x; _this5.y = v1.y; _this5.z = v1.z; var _this6 = _this5; var invLen = Math.sqrt(_this6.x * _this6.x + _this6.y * _this6.y + _this6.z * _this6.z); if(invLen > 0) { invLen = 1 / invLen; } var tx = _this6.x * invLen; var ty = _this6.y * invLen; var tz = _this6.z * invLen; _this6.x = tx; _this6.y = ty; _this6.z = tz; this.computeWitnessPoint1(false); this.computeWitnessPoint2(false); var _this7 = this.s[this.simplexSize]; var v2 = this.w1[this.simplexSize]; _this7.x = v2.x; _this7.y = v2.y; _this7.z = v2.z; var _this8 = _this7; var v3 = this.w2[this.simplexSize]; var tx1 = _this8.x - v3.x; var ty1 = _this8.y - v3.y; var tz1 = _this8.z - v3.z; _this8.x = tx1; _this8.y = ty1; _this8.z = tz1; var v0 = face._vertices[0]; var v11 = face._vertices[1]; var v21 = face._vertices[2]; var _this9 = v0.v; var v4 = this.dir; var dot1 = _this9.x * v4.x + _this9.y * v4.y + _this9.z * v4.z; var v5 = this.dir; var dot2 = supportingVertex.x * v5.x + supportingVertex.y * v5.y + supportingVertex.z * v5.z; if(dot2 - dot1 < 1e-6 || count == maxIterations - 1) { var _this10 = this.closest; var v6 = this.dir; _this10.x = v6.x; _this10.y = v6.y; _this10.z = v6.z; var _this11 = _this10; var _this12 = this.dir; var v7 = v0.v; var _this13 = this.dir; var s = (_this12.x * v7.x + _this12.y * v7.y + _this12.z * v7.z) / (_this13.x * _this13.x + _this13.y * _this13.y + _this13.z * _this13.z); var tx2 = _this11.x * s; var ty2 = _this11.y * s; var tz2 = _this11.z * s; _this11.x = tx2; _this11.y = ty2; _this11.z = tz2; var c; var cX; var cY; var cZ; var v8 = this.closest; cX = v8.x; cY = v8.y; cZ = v8.z; var s0; var s0X; var s0Y; var s0Z; var w10; var w10X; var w10Y; var w10Z; var w20; var w20X; var w20Y; var w20Z; var s1; var s1X; var s1Y; var s1Z; var w11; var w11X; var w11Y; var w11Z; var w21; var w21X; var w21Y; var w21Z; var s2; var s2X; var s2Y; var s2Z; var w12; var w12X; var w12Y; var w12Z; var w22; var w22X; var w22Y; var w22Z; var v9 = v0.v; s0X = v9.x; s0Y = v9.y; s0Z = v9.z; var v10 = v0.w1; w10X = v10.x; w10Y = v10.y; w10Z = v10.z; var v12 = v0.w2; w20X = v12.x; w20Y = v12.y; w20Z = v12.z; var v13 = v11.v; s1X = v13.x; s1Y = v13.y; s1Z = v13.z; var v14 = v11.w1; w11X = v14.x; w11Y = v14.y; w11Z = v14.z; var v15 = v11.w2; w21X = v15.x; w21Y = v15.y; w21Z = v15.z; var v16 = v21.v; s2X = v16.x; s2Y = v16.y; s2Z = v16.z; var v17 = v21.w1; w12X = v17.x; w12Y = v17.y; w12Z = v17.z; var v18 = v21.w2; w22X = v18.x; w22Y = v18.y; w22Z = v18.z; var s01; var s01X; var s01Y; var s01Z; var s02; var s02X; var s02Y; var s02Z; var s0c; var s0cX; var s0cY; var s0cZ; s01X = s1X - s0X; s01Y = s1Y - s0Y; s01Z = s1Z - s0Z; s02X = s2X - s0X; s02Y = s2Y - s0Y; s02Z = s2Z - s0Z; s0cX = cX - s0X; s0cY = cY - s0Y; s0cZ = cZ - s0Z; var d11 = s01X * s01X + s01Y * s01Y + s01Z * s01Z; var d12 = s01X * s02X + s01Y * s02Y + s01Z * s02Z; var d22 = s02X * s02X + s02Y * s02Y + s02Z * s02Z; var d1c = s01X * s0cX + s01Y * s0cY + s01Z * s0cZ; var d2c = s02X * s0cX + s02Y * s0cY + s02Z * s0cZ; var invDet = d11 * d22 - d12 * d12; if(invDet != 0) { invDet = 1 / invDet; } var s3 = (d1c * d22 - d2c * d12) * invDet; var t1 = (-d1c * d12 + d2c * d11) * invDet; var diff; var diffX; var diffY; var diffZ; var cp1; var cp1X; var cp1Y; var cp1Z; var cp2; var cp2X; var cp2Y; var cp2Z; diffX = w11X - w10X; diffY = w11Y - w10Y; diffZ = w11Z - w10Z; cp1X = w10X + diffX * s3; cp1Y = w10Y + diffY * s3; cp1Z = w10Z + diffZ * s3; diffX = w12X - w10X; diffY = w12Y - w10Y; diffZ = w12Z - w10Z; cp1X += diffX * t1; cp1Y += diffY * t1; cp1Z += diffZ * t1; diffX = w21X - w20X; diffY = w21Y - w20Y; diffZ = w21Z - w20Z; cp2X = w20X + diffX * s3; cp2Y = w20Y + diffY * s3; cp2Z = w20Z + diffZ * s3; diffX = w22X - w20X; diffY = w22Y - w20Y; diffZ = w22Z - w20Z; cp2X += diffX * t1; cp2Y += diffY * t1; cp2Z += diffZ * t1; var v19 = this.closestPoint1; v19.x = cp1X; v19.y = cp1Y; v19.z = cp1Z; var v20 = this.closestPoint2; v20.x = cp2X; v20.y = cp2Y; v20.z = cp2Z; var _this14 = this.closest; this.depth = Math.sqrt(_this14.x * _this14.x + _this14.y * _this14.y + _this14.z * _this14.z); return oimo.collision.narrowphase.detector.gjkepa.GjkEpaResultState.SUCCEEDED; } var _this15 = this.polyhedron; var first4 = _this15._vertexPool; if(first4 != null) { _this15._vertexPool = first4._next; first4._next = null; } else { first4 = new oimo.collision.narrowphase.detector.gjkepa.EpaVertex(); } var epaVertex = first4.init(supportingVertex,witness1,witness2); if(!this.polyhedron._addVertex(epaVertex,face)) { return oimo.collision.narrowphase.detector.gjkepa.GjkEpaResultState.EPA_FAILED_TO_ADD_VERTEX; } ++count; } return oimo.collision.narrowphase.detector.gjkepa.GjkEpaResultState.EPA_DID_NOT_CONVERGE; } computeClosestPoints(c1,c2,tf1,tf2,cache) { return this.computeClosestPointsImpl(c1,c2,tf1,tf2,cache,true); } computeDistance(c1,c2,tf1,tf2,cache) { return this.computeClosestPointsImpl(c1,c2,tf1,tf2,cache,false); } convexCast(c1,c2,tf1,tf2,tl1,tl2,hit) { return this.convexCastImpl(c1,c2,tf1,tf2,tl1,tl2,hit); } rayCast(c,tf,begin,end,hit) { var tf1 = this.tempTransform; var tf2 = tf; var v = begin; tf1._positionX = v.x; tf1._positionY = v.y; tf1._positionZ = v.z; var tl1 = this.tl1; var tl2 = this.tl2; tl1.x = end.x; tl1.y = end.y; tl1.z = end.z; var _this = tl1; var tx = _this.x - begin.x; var ty = _this.y - begin.y; var tz = _this.z - begin.z; _this.x = tx; _this.y = ty; _this.z = tz; tl2.zero(); return this.convexCastImpl(null,c,tf1,tf2,tl1,tl2,hit); } static getInstance() { return oimo.collision.narrowphase.detector.gjkepa.GjkEpa.instance; } } oimo.collision.narrowphase.detector.gjkepa.GjkEpaLog = class oimo_collision_narrowphase_detector_gjkepa_GjkEpaLog { } oimo.collision.narrowphase.detector.gjkepa.GjkEpaResultState = class oimo_collision_narrowphase_detector_gjkepa_GjkEpaResultState { } oimo.collision.narrowphase.detector.gjkepa.SimplexUtil = class oimo_collision_narrowphase_detector_gjkepa_SimplexUtil { static projectOrigin2(vec1,vec2,out) { var v1; var v1X; var v1Y; var v1Z; var v2; var v2X; var v2Y; var v2Z; var v = vec1; v1X = v.x; v1Y = v.y; v1Z = v.z; var v3 = vec2; v2X = v3.x; v2Y = v3.y; v2Z = v3.z; var v12; var v12X; var v12Y; var v12Z; v12X = v2X - v1X; v12Y = v2Y - v1Y; v12Z = v2Z - v1Z; var d = v12X * v12X + v12Y * v12Y + v12Z * v12Z; var t = v12X * v1X + v12Y * v1Y + v12Z * v1Z; t = -t / d; if(t < 0) { var v4 = out; v4.x = v1X; v4.y = v1Y; v4.z = v1Z; return 1; } if(t > 1) { var v5 = out; v5.x = v2X; v5.y = v2Y; v5.z = v2Z; return 2; } var p; var pX; var pY; var pZ; pX = v1X + v12X * t; pY = v1Y + v12Y * t; pZ = v1Z + v12Z * t; var v6 = out; v6.x = pX; v6.y = pY; v6.z = pZ; return 3; } static projectOrigin3(vec1,vec2,vec3,out) { var v1; var v1X; var v1Y; var v1Z; var v2; var v2X; var v2Y; var v2Z; var v3; var v3X; var v3Y; var v3Z; var v12; var v12X; var v12Y; var v12Z; var v23; var v23X; var v23Y; var v23Z; var v31; var v31X; var v31Y; var v31Z; var v = vec1; v1X = v.x; v1Y = v.y; v1Z = v.z; var v4 = vec2; v2X = v4.x; v2Y = v4.y; v2Z = v4.z; var v5 = vec3; v3X = v5.x; v3Y = v5.y; v3Z = v5.z; v12X = v2X - v1X; v12Y = v2Y - v1Y; v12Z = v2Z - v1Z; v23X = v3X - v2X; v23Y = v3Y - v2Y; v23Z = v3Z - v2Z; v31X = v1X - v3X; v31Y = v1Y - v3Y; v31Z = v1Z - v3Z; var n; var nX; var nY; var nZ; nX = v12Y * v23Z - v12Z * v23Y; nY = v12Z * v23X - v12X * v23Z; nZ = v12X * v23Y - v12Y * v23X; var n12; var n12X; var n12Y; var n12Z; var n23; var n23X; var n23Y; var n23Z; var n31; var n31X; var n31Y; var n31Z; n12X = v12Y * nZ - v12Z * nY; n12Y = v12Z * nX - v12X * nZ; n12Z = v12X * nY - v12Y * nX; n23X = v23Y * nZ - v23Z * nY; n23Y = v23Z * nX - v23X * nZ; n23Z = v23X * nY - v23Y * nX; n31X = v31Y * nZ - v31Z * nY; n31Y = v31Z * nX - v31X * nZ; n31Z = v31X * nY - v31Y * nX; var d12 = v1X * n12X + v1Y * n12Y + v1Z * n12Z; var d23 = v2X * n23X + v2Y * n23Y + v2Z * n23Z; var d31 = v3X * n31X + v3Y * n31Y + v3Z * n31Z; var mind = -1; var minv; var minvX; var minvY; var minvZ; var mini = 0; minvX = 0; minvY = 0; minvZ = 0; if(d12 < 0) { var v11; var v1X1; var v1Y1; var v1Z1; var v21; var v2X1; var v2Y1; var v2Z1; var v6 = vec1; v1X1 = v6.x; v1Y1 = v6.y; v1Z1 = v6.z; var v7 = vec2; v2X1 = v7.x; v2Y1 = v7.y; v2Z1 = v7.z; var v121; var v12X1; var v12Y1; var v12Z1; v12X1 = v2X1 - v1X1; v12Y1 = v2Y1 - v1Y1; v12Z1 = v2Z1 - v1Z1; var d = v12X1 * v12X1 + v12Y1 * v12Y1 + v12Z1 * v12Z1; var t = v12X1 * v1X1 + v12Y1 * v1Y1 + v12Z1 * v1Z1; t = -t / d; var b; if(t < 0) { var v8 = out; v8.x = v1X1; v8.y = v1Y1; v8.z = v1Z1; b = 1; } else if(t > 1) { var v9 = out; v9.x = v2X1; v9.y = v2Y1; v9.z = v2Z1; b = 2; } else { var p; var pX; var pY; var pZ; pX = v1X1 + v12X1 * t; pY = v1Y1 + v12Y1 * t; pZ = v1Z1 + v12Z1 * t; var v10 = out; v10.x = pX; v10.y = pY; v10.z = pZ; b = 3; } var d1 = out.x * out.x + out.y * out.y + out.z * out.z; mini = b; mind = d1; var v13 = out; minvX = v13.x; minvY = v13.y; minvZ = v13.z; } if(d23 < 0) { var v14; var v1X2; var v1Y2; var v1Z2; var v22; var v2X2; var v2Y2; var v2Z2; var v15 = vec2; v1X2 = v15.x; v1Y2 = v15.y; v1Z2 = v15.z; var v16 = vec3; v2X2 = v16.x; v2Y2 = v16.y; v2Z2 = v16.z; var v122; var v12X2; var v12Y2; var v12Z2; v12X2 = v2X2 - v1X2; v12Y2 = v2Y2 - v1Y2; v12Z2 = v2Z2 - v1Z2; var d2 = v12X2 * v12X2 + v12Y2 * v12Y2 + v12Z2 * v12Z2; var t1 = v12X2 * v1X2 + v12Y2 * v1Y2 + v12Z2 * v1Z2; t1 = -t1 / d2; var b1; if(t1 < 0) { var v17 = out; v17.x = v1X2; v17.y = v1Y2; v17.z = v1Z2; b1 = 1; } else if(t1 > 1) { var v18 = out; v18.x = v2X2; v18.y = v2Y2; v18.z = v2Z2; b1 = 2; } else { var p1; var pX1; var pY1; var pZ1; pX1 = v1X2 + v12X2 * t1; pY1 = v1Y2 + v12Y2 * t1; pZ1 = v1Z2 + v12Z2 * t1; var v19 = out; v19.x = pX1; v19.y = pY1; v19.z = pZ1; b1 = 3; } var d3 = out.x * out.x + out.y * out.y + out.z * out.z; if(mind < 0 || d3 < mind) { mini = b1 << 1; mind = d3; var v20 = out; minvX = v20.x; minvY = v20.y; minvZ = v20.z; } } if(d31 < 0) { var v110; var v1X3; var v1Y3; var v1Z3; var v24; var v2X3; var v2Y3; var v2Z3; var v25 = vec1; v1X3 = v25.x; v1Y3 = v25.y; v1Z3 = v25.z; var v26 = vec3; v2X3 = v26.x; v2Y3 = v26.y; v2Z3 = v26.z; var v123; var v12X3; var v12Y3; var v12Z3; v12X3 = v2X3 - v1X3; v12Y3 = v2Y3 - v1Y3; v12Z3 = v2Z3 - v1Z3; var d4 = v12X3 * v12X3 + v12Y3 * v12Y3 + v12Z3 * v12Z3; var t2 = v12X3 * v1X3 + v12Y3 * v1Y3 + v12Z3 * v1Z3; t2 = -t2 / d4; var b2; if(t2 < 0) { var v27 = out; v27.x = v1X3; v27.y = v1Y3; v27.z = v1Z3; b2 = 1; } else if(t2 > 1) { var v28 = out; v28.x = v2X3; v28.y = v2Y3; v28.z = v2Z3; b2 = 2; } else { var p2; var pX2; var pY2; var pZ2; pX2 = v1X3 + v12X3 * t2; pY2 = v1Y3 + v12Y3 * t2; pZ2 = v1Z3 + v12Z3 * t2; var v29 = out; v29.x = pX2; v29.y = pY2; v29.z = pZ2; b2 = 3; } var d5 = out.x * out.x + out.y * out.y + out.z * out.z; if(mind < 0 || d5 < mind) { mini = b2 & 1 | (b2 & 2) << 1; mind = d5; var v30 = out; minvX = v30.x; minvY = v30.y; minvZ = v30.z; } } if(mind > 0) { var v32 = out; v32.x = minvX; v32.y = minvY; v32.z = minvZ; return mini; } var l = nX * nX + nY * nY + nZ * nZ; if(l > 0) { l = 1 / Math.sqrt(l); } nX *= l; nY *= l; nZ *= l; var dn = v1X * nX + v1Y * nY + v1Z * nZ; var l2 = nX * nX + nY * nY + nZ * nZ; l2 = dn / l2; minvX = nX * l2; minvY = nY * l2; minvZ = nZ * l2; var v33 = out; v33.x = minvX; v33.y = minvY; v33.z = minvZ; return 7; } static projectOrigin4(vec1,vec2,vec3,vec4,out) { var v1; var v1X; var v1Y; var v1Z; var v2; var v2X; var v2Y; var v2Z; var v3; var v3X; var v3Y; var v3Z; var v4; var v4X; var v4Y; var v4Z; var v12; var v12X; var v12Y; var v12Z; var v13; var v13X; var v13Y; var v13Z; var v14; var v14X; var v14Y; var v14Z; var v23; var v23X; var v23Y; var v23Z; var v24; var v24X; var v24Y; var v24Z; var v34; var v34X; var v34Y; var v34Z; var v = vec1; v1X = v.x; v1Y = v.y; v1Z = v.z; var v5 = vec2; v2X = v5.x; v2Y = v5.y; v2Z = v5.z; var v6 = vec3; v3X = v6.x; v3Y = v6.y; v3Z = v6.z; var v7 = vec4; v4X = v7.x; v4Y = v7.y; v4Z = v7.z; v12X = v2X - v1X; v12Y = v2Y - v1Y; v12Z = v2Z - v1Z; v13X = v3X - v1X; v13Y = v3Y - v1Y; v13Z = v3Z - v1Z; v14X = v4X - v1X; v14Y = v4Y - v1Y; v14Z = v4Z - v1Z; v23X = v3X - v2X; v23Y = v3Y - v2Y; v23Z = v3Z - v2Z; v24X = v4X - v2X; v24Y = v4Y - v2Y; v24Z = v4Z - v2Z; v34X = v4X - v3X; v34Y = v4Y - v3Y; v34Z = v4Z - v3Z; var rev; var n123; var n123X; var n123Y; var n123Z; var n134; var n134X; var n134Y; var n134Z; var n142; var n142X; var n142Y; var n142Z; var n243; var n243X; var n243Y; var n243Z; var n; var nX; var nY; var nZ; n123X = v12Y * v13Z - v12Z * v13Y; n123Y = v12Z * v13X - v12X * v13Z; n123Z = v12X * v13Y - v12Y * v13X; n134X = v13Y * v14Z - v13Z * v14Y; n134Y = v13Z * v14X - v13X * v14Z; n134Z = v13X * v14Y - v13Y * v14X; n142X = v14Y * v12Z - v14Z * v12Y; n142Y = v14Z * v12X - v14X * v12Z; n142Z = v14X * v12Y - v14Y * v12X; n243X = v24Y * v23Z - v24Z * v23Y; n243Y = v24Z * v23X - v24X * v23Z; n243Z = v24X * v23Y - v24Y * v23X; var sign = v12X * n243X + v12Y * n243Y + v12Z * n243Z > 0 ? 1 : -1; var d123 = v1X * n123X + v1Y * n123Y + v1Z * n123Z; var d134 = v1X * n134X + v1Y * n134Y + v1Z * n134Z; var d142 = v1X * n142X + v1Y * n142Y + v1Z * n142Z; var d243 = v2X * n243X + v2Y * n243Y + v2Z * n243Z; var mind = -1; var minv; var minvX; var minvY; var minvZ; var mini = 0; minvX = 0; minvY = 0; minvZ = 0; if(d123 * sign < 0) { var v11; var v1X1; var v1Y1; var v1Z1; var v21; var v2X1; var v2Y1; var v2Z1; var v31; var v3X1; var v3Y1; var v3Z1; var v121; var v12X1; var v12Y1; var v12Z1; var v231; var v23X1; var v23Y1; var v23Z1; var v311; var v31X; var v31Y; var v31Z; var v8 = vec1; v1X1 = v8.x; v1Y1 = v8.y; v1Z1 = v8.z; var v9 = vec2; v2X1 = v9.x; v2Y1 = v9.y; v2Z1 = v9.z; var v10 = vec3; v3X1 = v10.x; v3Y1 = v10.y; v3Z1 = v10.z; v12X1 = v2X1 - v1X1; v12Y1 = v2Y1 - v1Y1; v12Z1 = v2Z1 - v1Z1; v23X1 = v3X1 - v2X1; v23Y1 = v3Y1 - v2Y1; v23Z1 = v3Z1 - v2Z1; v31X = v1X1 - v3X1; v31Y = v1Y1 - v3Y1; v31Z = v1Z1 - v3Z1; var n1; var nX1; var nY1; var nZ1; nX1 = v12Y1 * v23Z1 - v12Z1 * v23Y1; nY1 = v12Z1 * v23X1 - v12X1 * v23Z1; nZ1 = v12X1 * v23Y1 - v12Y1 * v23X1; var n12; var n12X; var n12Y; var n12Z; var n23; var n23X; var n23Y; var n23Z; var n31; var n31X; var n31Y; var n31Z; n12X = v12Y1 * nZ1 - v12Z1 * nY1; n12Y = v12Z1 * nX1 - v12X1 * nZ1; n12Z = v12X1 * nY1 - v12Y1 * nX1; n23X = v23Y1 * nZ1 - v23Z1 * nY1; n23Y = v23Z1 * nX1 - v23X1 * nZ1; n23Z = v23X1 * nY1 - v23Y1 * nX1; n31X = v31Y * nZ1 - v31Z * nY1; n31Y = v31Z * nX1 - v31X * nZ1; n31Z = v31X * nY1 - v31Y * nX1; var d12 = v1X1 * n12X + v1Y1 * n12Y + v1Z1 * n12Z; var d23 = v2X1 * n23X + v2Y1 * n23Y + v2Z1 * n23Z; var d31 = v3X1 * n31X + v3Y1 * n31Y + v3Z1 * n31Z; var mind1 = -1; var minv1; var minvX1; var minvY1; var minvZ1; var mini1 = 0; minvX1 = 0; minvY1 = 0; minvZ1 = 0; if(d12 < 0) { var v15; var v1X2; var v1Y2; var v1Z2; var v22; var v2X2; var v2Y2; var v2Z2; var v16 = vec1; v1X2 = v16.x; v1Y2 = v16.y; v1Z2 = v16.z; var v17 = vec2; v2X2 = v17.x; v2Y2 = v17.y; v2Z2 = v17.z; var v122; var v12X2; var v12Y2; var v12Z2; v12X2 = v2X2 - v1X2; v12Y2 = v2Y2 - v1Y2; v12Z2 = v2Z2 - v1Z2; var d = v12X2 * v12X2 + v12Y2 * v12Y2 + v12Z2 * v12Z2; var t = v12X2 * v1X2 + v12Y2 * v1Y2 + v12Z2 * v1Z2; t = -t / d; var b; if(t < 0) { var v18 = out; v18.x = v1X2; v18.y = v1Y2; v18.z = v1Z2; b = 1; } else if(t > 1) { var v19 = out; v19.x = v2X2; v19.y = v2Y2; v19.z = v2Z2; b = 2; } else { var p; var pX; var pY; var pZ; pX = v1X2 + v12X2 * t; pY = v1Y2 + v12Y2 * t; pZ = v1Z2 + v12Z2 * t; var v20 = out; v20.x = pX; v20.y = pY; v20.z = pZ; b = 3; } var d1 = out.x * out.x + out.y * out.y + out.z * out.z; mini1 = b; mind1 = d1; var v25 = out; minvX1 = v25.x; minvY1 = v25.y; minvZ1 = v25.z; } if(d23 < 0) { var v110; var v1X3; var v1Y3; var v1Z3; var v26; var v2X3; var v2Y3; var v2Z3; var v27 = vec2; v1X3 = v27.x; v1Y3 = v27.y; v1Z3 = v27.z; var v28 = vec3; v2X3 = v28.x; v2Y3 = v28.y; v2Z3 = v28.z; var v123; var v12X3; var v12Y3; var v12Z3; v12X3 = v2X3 - v1X3; v12Y3 = v2Y3 - v1Y3; v12Z3 = v2Z3 - v1Z3; var d2 = v12X3 * v12X3 + v12Y3 * v12Y3 + v12Z3 * v12Z3; var t1 = v12X3 * v1X3 + v12Y3 * v1Y3 + v12Z3 * v1Z3; t1 = -t1 / d2; var b1; if(t1 < 0) { var v29 = out; v29.x = v1X3; v29.y = v1Y3; v29.z = v1Z3; b1 = 1; } else if(t1 > 1) { var v30 = out; v30.x = v2X3; v30.y = v2Y3; v30.z = v2Z3; b1 = 2; } else { var p1; var pX1; var pY1; var pZ1; pX1 = v1X3 + v12X3 * t1; pY1 = v1Y3 + v12Y3 * t1; pZ1 = v1Z3 + v12Z3 * t1; var v32 = out; v32.x = pX1; v32.y = pY1; v32.z = pZ1; b1 = 3; } var d3 = out.x * out.x + out.y * out.y + out.z * out.z; if(mind1 < 0 || d3 < mind1) { mini1 = b1 << 1; mind1 = d3; var v33 = out; minvX1 = v33.x; minvY1 = v33.y; minvZ1 = v33.z; } } if(d31 < 0) { var v111; var v1X4; var v1Y4; var v1Z4; var v210; var v2X4; var v2Y4; var v2Z4; var v35 = vec1; v1X4 = v35.x; v1Y4 = v35.y; v1Z4 = v35.z; var v36 = vec3; v2X4 = v36.x; v2Y4 = v36.y; v2Z4 = v36.z; var v124; var v12X4; var v12Y4; var v12Z4; v12X4 = v2X4 - v1X4; v12Y4 = v2Y4 - v1Y4; v12Z4 = v2Z4 - v1Z4; var d4 = v12X4 * v12X4 + v12Y4 * v12Y4 + v12Z4 * v12Z4; var t2 = v12X4 * v1X4 + v12Y4 * v1Y4 + v12Z4 * v1Z4; t2 = -t2 / d4; var b2; if(t2 < 0) { var v37 = out; v37.x = v1X4; v37.y = v1Y4; v37.z = v1Z4; b2 = 1; } else if(t2 > 1) { var v38 = out; v38.x = v2X4; v38.y = v2Y4; v38.z = v2Z4; b2 = 2; } else { var p2; var pX2; var pY2; var pZ2; pX2 = v1X4 + v12X4 * t2; pY2 = v1Y4 + v12Y4 * t2; pZ2 = v1Z4 + v12Z4 * t2; var v39 = out; v39.x = pX2; v39.y = pY2; v39.z = pZ2; b2 = 3; } var d5 = out.x * out.x + out.y * out.y + out.z * out.z; if(mind1 < 0 || d5 < mind1) { mini1 = b2 & 1 | (b2 & 2) << 1; mind1 = d5; var v40 = out; minvX1 = v40.x; minvY1 = v40.y; minvZ1 = v40.z; } } var b3; if(mind1 > 0) { var v41 = out; v41.x = minvX1; v41.y = minvY1; v41.z = minvZ1; b3 = mini1; } else { var l = nX1 * nX1 + nY1 * nY1 + nZ1 * nZ1; if(l > 0) { l = 1 / Math.sqrt(l); } nX1 *= l; nY1 *= l; nZ1 *= l; var dn = v1X1 * nX1 + v1Y1 * nY1 + v1Z1 * nZ1; var l2 = nX1 * nX1 + nY1 * nY1 + nZ1 * nZ1; l2 = dn / l2; minvX1 = nX1 * l2; minvY1 = nY1 * l2; minvZ1 = nZ1 * l2; var v42 = out; v42.x = minvX1; v42.y = minvY1; v42.z = minvZ1; b3 = 7; } var d6 = out.x * out.x + out.y * out.y + out.z * out.z; mini = b3; mind = d6; var v43 = out; minvX = v43.x; minvY = v43.y; minvZ = v43.z; } if(d134 * sign < 0) { var v112; var v1X5; var v1Y5; var v1Z5; var v211; var v2X5; var v2Y5; var v2Z5; var v310; var v3X2; var v3Y2; var v3Z2; var v125; var v12X5; var v12Y5; var v12Z5; var v232; var v23X2; var v23Y2; var v23Z2; var v312; var v31X1; var v31Y1; var v31Z1; var v44 = vec1; v1X5 = v44.x; v1Y5 = v44.y; v1Z5 = v44.z; var v45 = vec3; v2X5 = v45.x; v2Y5 = v45.y; v2Z5 = v45.z; var v46 = vec4; v3X2 = v46.x; v3Y2 = v46.y; v3Z2 = v46.z; v12X5 = v2X5 - v1X5; v12Y5 = v2Y5 - v1Y5; v12Z5 = v2Z5 - v1Z5; v23X2 = v3X2 - v2X5; v23Y2 = v3Y2 - v2Y5; v23Z2 = v3Z2 - v2Z5; v31X1 = v1X5 - v3X2; v31Y1 = v1Y5 - v3Y2; v31Z1 = v1Z5 - v3Z2; var n2; var nX2; var nY2; var nZ2; nX2 = v12Y5 * v23Z2 - v12Z5 * v23Y2; nY2 = v12Z5 * v23X2 - v12X5 * v23Z2; nZ2 = v12X5 * v23Y2 - v12Y5 * v23X2; var n121; var n12X1; var n12Y1; var n12Z1; var n231; var n23X1; var n23Y1; var n23Z1; var n311; var n31X1; var n31Y1; var n31Z1; n12X1 = v12Y5 * nZ2 - v12Z5 * nY2; n12Y1 = v12Z5 * nX2 - v12X5 * nZ2; n12Z1 = v12X5 * nY2 - v12Y5 * nX2; n23X1 = v23Y2 * nZ2 - v23Z2 * nY2; n23Y1 = v23Z2 * nX2 - v23X2 * nZ2; n23Z1 = v23X2 * nY2 - v23Y2 * nX2; n31X1 = v31Y1 * nZ2 - v31Z1 * nY2; n31Y1 = v31Z1 * nX2 - v31X1 * nZ2; n31Z1 = v31X1 * nY2 - v31Y1 * nX2; var d121 = v1X5 * n12X1 + v1Y5 * n12Y1 + v1Z5 * n12Z1; var d231 = v2X5 * n23X1 + v2Y5 * n23Y1 + v2Z5 * n23Z1; var d311 = v3X2 * n31X1 + v3Y2 * n31Y1 + v3Z2 * n31Z1; var mind2 = -1; var minv2; var minvX2; var minvY2; var minvZ2; var mini2 = 0; minvX2 = 0; minvY2 = 0; minvZ2 = 0; if(d121 < 0) { var v113; var v1X6; var v1Y6; var v1Z6; var v212; var v2X6; var v2Y6; var v2Z6; var v47 = vec1; v1X6 = v47.x; v1Y6 = v47.y; v1Z6 = v47.z; var v48 = vec3; v2X6 = v48.x; v2Y6 = v48.y; v2Z6 = v48.z; var v126; var v12X6; var v12Y6; var v12Z6; v12X6 = v2X6 - v1X6; v12Y6 = v2Y6 - v1Y6; v12Z6 = v2Z6 - v1Z6; var d7 = v12X6 * v12X6 + v12Y6 * v12Y6 + v12Z6 * v12Z6; var t3 = v12X6 * v1X6 + v12Y6 * v1Y6 + v12Z6 * v1Z6; t3 = -t3 / d7; var b4; if(t3 < 0) { var v49 = out; v49.x = v1X6; v49.y = v1Y6; v49.z = v1Z6; b4 = 1; } else if(t3 > 1) { var v50 = out; v50.x = v2X6; v50.y = v2Y6; v50.z = v2Z6; b4 = 2; } else { var p3; var pX3; var pY3; var pZ3; pX3 = v1X6 + v12X6 * t3; pY3 = v1Y6 + v12Y6 * t3; pZ3 = v1Z6 + v12Z6 * t3; var v51 = out; v51.x = pX3; v51.y = pY3; v51.z = pZ3; b4 = 3; } var d8 = out.x * out.x + out.y * out.y + out.z * out.z; mini2 = b4; mind2 = d8; var v52 = out; minvX2 = v52.x; minvY2 = v52.y; minvZ2 = v52.z; } if(d231 < 0) { var v114; var v1X7; var v1Y7; var v1Z7; var v213; var v2X7; var v2Y7; var v2Z7; var v53 = vec3; v1X7 = v53.x; v1Y7 = v53.y; v1Z7 = v53.z; var v54 = vec4; v2X7 = v54.x; v2Y7 = v54.y; v2Z7 = v54.z; var v127; var v12X7; var v12Y7; var v12Z7; v12X7 = v2X7 - v1X7; v12Y7 = v2Y7 - v1Y7; v12Z7 = v2Z7 - v1Z7; var d9 = v12X7 * v12X7 + v12Y7 * v12Y7 + v12Z7 * v12Z7; var t4 = v12X7 * v1X7 + v12Y7 * v1Y7 + v12Z7 * v1Z7; t4 = -t4 / d9; var b5; if(t4 < 0) { var v55 = out; v55.x = v1X7; v55.y = v1Y7; v55.z = v1Z7; b5 = 1; } else if(t4 > 1) { var v56 = out; v56.x = v2X7; v56.y = v2Y7; v56.z = v2Z7; b5 = 2; } else { var p4; var pX4; var pY4; var pZ4; pX4 = v1X7 + v12X7 * t4; pY4 = v1Y7 + v12Y7 * t4; pZ4 = v1Z7 + v12Z7 * t4; var v57 = out; v57.x = pX4; v57.y = pY4; v57.z = pZ4; b5 = 3; } var d10 = out.x * out.x + out.y * out.y + out.z * out.z; if(mind2 < 0 || d10 < mind2) { mini2 = b5 << 1; mind2 = d10; var v58 = out; minvX2 = v58.x; minvY2 = v58.y; minvZ2 = v58.z; } } if(d311 < 0) { var v115; var v1X8; var v1Y8; var v1Z8; var v214; var v2X8; var v2Y8; var v2Z8; var v59 = vec1; v1X8 = v59.x; v1Y8 = v59.y; v1Z8 = v59.z; var v60 = vec4; v2X8 = v60.x; v2Y8 = v60.y; v2Z8 = v60.z; var v128; var v12X8; var v12Y8; var v12Z8; v12X8 = v2X8 - v1X8; v12Y8 = v2Y8 - v1Y8; v12Z8 = v2Z8 - v1Z8; var d11 = v12X8 * v12X8 + v12Y8 * v12Y8 + v12Z8 * v12Z8; var t5 = v12X8 * v1X8 + v12Y8 * v1Y8 + v12Z8 * v1Z8; t5 = -t5 / d11; var b6; if(t5 < 0) { var v61 = out; v61.x = v1X8; v61.y = v1Y8; v61.z = v1Z8; b6 = 1; } else if(t5 > 1) { var v62 = out; v62.x = v2X8; v62.y = v2Y8; v62.z = v2Z8; b6 = 2; } else { var p5; var pX5; var pY5; var pZ5; pX5 = v1X8 + v12X8 * t5; pY5 = v1Y8 + v12Y8 * t5; pZ5 = v1Z8 + v12Z8 * t5; var v63 = out; v63.x = pX5; v63.y = pY5; v63.z = pZ5; b6 = 3; } var d13 = out.x * out.x + out.y * out.y + out.z * out.z; if(mind2 < 0 || d13 < mind2) { mini2 = b6 & 1 | (b6 & 2) << 1; mind2 = d13; var v64 = out; minvX2 = v64.x; minvY2 = v64.y; minvZ2 = v64.z; } } var b7; if(mind2 > 0) { var v65 = out; v65.x = minvX2; v65.y = minvY2; v65.z = minvZ2; b7 = mini2; } else { var l1 = nX2 * nX2 + nY2 * nY2 + nZ2 * nZ2; if(l1 > 0) { l1 = 1 / Math.sqrt(l1); } nX2 *= l1; nY2 *= l1; nZ2 *= l1; var dn1 = v1X5 * nX2 + v1Y5 * nY2 + v1Z5 * nZ2; var l21 = nX2 * nX2 + nY2 * nY2 + nZ2 * nZ2; l21 = dn1 / l21; minvX2 = nX2 * l21; minvY2 = nY2 * l21; minvZ2 = nZ2 * l21; var v66 = out; v66.x = minvX2; v66.y = minvY2; v66.z = minvZ2; b7 = 7; } var d14 = out.x * out.x + out.y * out.y + out.z * out.z; if(mind < 0 || d14 < mind) { mini = b7 & 1 | (b7 & 6) << 1; mind = d14; var v67 = out; minvX = v67.x; minvY = v67.y; minvZ = v67.z; } } if(d142 * sign < 0) { var v116; var v1X9; var v1Y9; var v1Z9; var v215; var v2X9; var v2Y9; var v2Z9; var v313; var v3X3; var v3Y3; var v3Z3; var v129; var v12X9; var v12Y9; var v12Z9; var v233; var v23X3; var v23Y3; var v23Z3; var v314; var v31X2; var v31Y2; var v31Z2; var v68 = vec1; v1X9 = v68.x; v1Y9 = v68.y; v1Z9 = v68.z; var v69 = vec2; v2X9 = v69.x; v2Y9 = v69.y; v2Z9 = v69.z; var v70 = vec4; v3X3 = v70.x; v3Y3 = v70.y; v3Z3 = v70.z; v12X9 = v2X9 - v1X9; v12Y9 = v2Y9 - v1Y9; v12Z9 = v2Z9 - v1Z9; v23X3 = v3X3 - v2X9; v23Y3 = v3Y3 - v2Y9; v23Z3 = v3Z3 - v2Z9; v31X2 = v1X9 - v3X3; v31Y2 = v1Y9 - v3Y3; v31Z2 = v1Z9 - v3Z3; var n3; var nX3; var nY3; var nZ3; nX3 = v12Y9 * v23Z3 - v12Z9 * v23Y3; nY3 = v12Z9 * v23X3 - v12X9 * v23Z3; nZ3 = v12X9 * v23Y3 - v12Y9 * v23X3; var n122; var n12X2; var n12Y2; var n12Z2; var n232; var n23X2; var n23Y2; var n23Z2; var n312; var n31X2; var n31Y2; var n31Z2; n12X2 = v12Y9 * nZ3 - v12Z9 * nY3; n12Y2 = v12Z9 * nX3 - v12X9 * nZ3; n12Z2 = v12X9 * nY3 - v12Y9 * nX3; n23X2 = v23Y3 * nZ3 - v23Z3 * nY3; n23Y2 = v23Z3 * nX3 - v23X3 * nZ3; n23Z2 = v23X3 * nY3 - v23Y3 * nX3; n31X2 = v31Y2 * nZ3 - v31Z2 * nY3; n31Y2 = v31Z2 * nX3 - v31X2 * nZ3; n31Z2 = v31X2 * nY3 - v31Y2 * nX3; var d122 = v1X9 * n12X2 + v1Y9 * n12Y2 + v1Z9 * n12Z2; var d232 = v2X9 * n23X2 + v2Y9 * n23Y2 + v2Z9 * n23Z2; var d312 = v3X3 * n31X2 + v3Y3 * n31Y2 + v3Z3 * n31Z2; var mind3 = -1; var minv3; var minvX3; var minvY3; var minvZ3; var mini3 = 0; minvX3 = 0; minvY3 = 0; minvZ3 = 0; if(d122 < 0) { var v117; var v1X10; var v1Y10; var v1Z10; var v216; var v2X10; var v2Y10; var v2Z10; var v71 = vec1; v1X10 = v71.x; v1Y10 = v71.y; v1Z10 = v71.z; var v72 = vec2; v2X10 = v72.x; v2Y10 = v72.y; v2Z10 = v72.z; var v1210; var v12X10; var v12Y10; var v12Z10; v12X10 = v2X10 - v1X10; v12Y10 = v2Y10 - v1Y10; v12Z10 = v2Z10 - v1Z10; var d15 = v12X10 * v12X10 + v12Y10 * v12Y10 + v12Z10 * v12Z10; var t6 = v12X10 * v1X10 + v12Y10 * v1Y10 + v12Z10 * v1Z10; t6 = -t6 / d15; var b8; if(t6 < 0) { var v73 = out; v73.x = v1X10; v73.y = v1Y10; v73.z = v1Z10; b8 = 1; } else if(t6 > 1) { var v74 = out; v74.x = v2X10; v74.y = v2Y10; v74.z = v2Z10; b8 = 2; } else { var p6; var pX6; var pY6; var pZ6; pX6 = v1X10 + v12X10 * t6; pY6 = v1Y10 + v12Y10 * t6; pZ6 = v1Z10 + v12Z10 * t6; var v75 = out; v75.x = pX6; v75.y = pY6; v75.z = pZ6; b8 = 3; } var d16 = out.x * out.x + out.y * out.y + out.z * out.z; mini3 = b8; mind3 = d16; var v76 = out; minvX3 = v76.x; minvY3 = v76.y; minvZ3 = v76.z; } if(d232 < 0) { var v118; var v1X11; var v1Y11; var v1Z11; var v217; var v2X11; var v2Y11; var v2Z11; var v77 = vec2; v1X11 = v77.x; v1Y11 = v77.y; v1Z11 = v77.z; var v78 = vec4; v2X11 = v78.x; v2Y11 = v78.y; v2Z11 = v78.z; var v1211; var v12X11; var v12Y11; var v12Z11; v12X11 = v2X11 - v1X11; v12Y11 = v2Y11 - v1Y11; v12Z11 = v2Z11 - v1Z11; var d17 = v12X11 * v12X11 + v12Y11 * v12Y11 + v12Z11 * v12Z11; var t7 = v12X11 * v1X11 + v12Y11 * v1Y11 + v12Z11 * v1Z11; t7 = -t7 / d17; var b9; if(t7 < 0) { var v79 = out; v79.x = v1X11; v79.y = v1Y11; v79.z = v1Z11; b9 = 1; } else if(t7 > 1) { var v80 = out; v80.x = v2X11; v80.y = v2Y11; v80.z = v2Z11; b9 = 2; } else { var p7; var pX7; var pY7; var pZ7; pX7 = v1X11 + v12X11 * t7; pY7 = v1Y11 + v12Y11 * t7; pZ7 = v1Z11 + v12Z11 * t7; var v81 = out; v81.x = pX7; v81.y = pY7; v81.z = pZ7; b9 = 3; } var d18 = out.x * out.x + out.y * out.y + out.z * out.z; if(mind3 < 0 || d18 < mind3) { mini3 = b9 << 1; mind3 = d18; var v82 = out; minvX3 = v82.x; minvY3 = v82.y; minvZ3 = v82.z; } } if(d312 < 0) { var v119; var v1X12; var v1Y12; var v1Z12; var v218; var v2X12; var v2Y12; var v2Z12; var v83 = vec1; v1X12 = v83.x; v1Y12 = v83.y; v1Z12 = v83.z; var v84 = vec4; v2X12 = v84.x; v2Y12 = v84.y; v2Z12 = v84.z; var v1212; var v12X12; var v12Y12; var v12Z12; v12X12 = v2X12 - v1X12; v12Y12 = v2Y12 - v1Y12; v12Z12 = v2Z12 - v1Z12; var d19 = v12X12 * v12X12 + v12Y12 * v12Y12 + v12Z12 * v12Z12; var t8 = v12X12 * v1X12 + v12Y12 * v1Y12 + v12Z12 * v1Z12; t8 = -t8 / d19; var b10; if(t8 < 0) { var v85 = out; v85.x = v1X12; v85.y = v1Y12; v85.z = v1Z12; b10 = 1; } else if(t8 > 1) { var v86 = out; v86.x = v2X12; v86.y = v2Y12; v86.z = v2Z12; b10 = 2; } else { var p8; var pX8; var pY8; var pZ8; pX8 = v1X12 + v12X12 * t8; pY8 = v1Y12 + v12Y12 * t8; pZ8 = v1Z12 + v12Z12 * t8; var v87 = out; v87.x = pX8; v87.y = pY8; v87.z = pZ8; b10 = 3; } var d20 = out.x * out.x + out.y * out.y + out.z * out.z; if(mind3 < 0 || d20 < mind3) { mini3 = b10 & 1 | (b10 & 2) << 1; mind3 = d20; var v88 = out; minvX3 = v88.x; minvY3 = v88.y; minvZ3 = v88.z; } } var b11; if(mind3 > 0) { var v89 = out; v89.x = minvX3; v89.y = minvY3; v89.z = minvZ3; b11 = mini3; } else { var l3 = nX3 * nX3 + nY3 * nY3 + nZ3 * nZ3; if(l3 > 0) { l3 = 1 / Math.sqrt(l3); } nX3 *= l3; nY3 *= l3; nZ3 *= l3; var dn2 = v1X9 * nX3 + v1Y9 * nY3 + v1Z9 * nZ3; var l22 = nX3 * nX3 + nY3 * nY3 + nZ3 * nZ3; l22 = dn2 / l22; minvX3 = nX3 * l22; minvY3 = nY3 * l22; minvZ3 = nZ3 * l22; var v90 = out; v90.x = minvX3; v90.y = minvY3; v90.z = minvZ3; b11 = 7; } var d21 = out.x * out.x + out.y * out.y + out.z * out.z; if(mind < 0 || d21 < mind) { mini = b11 & 3 | (b11 & 4) << 1; mind = d21; var v91 = out; minvX = v91.x; minvY = v91.y; minvZ = v91.z; } } if(d243 * sign < 0) { var v120; var v1X13; var v1Y13; var v1Z13; var v219; var v2X13; var v2Y13; var v2Z13; var v315; var v3X4; var v3Y4; var v3Z4; var v1213; var v12X13; var v12Y13; var v12Z13; var v234; var v23X4; var v23Y4; var v23Z4; var v316; var v31X3; var v31Y3; var v31Z3; var v92 = vec2; v1X13 = v92.x; v1Y13 = v92.y; v1Z13 = v92.z; var v93 = vec3; v2X13 = v93.x; v2Y13 = v93.y; v2Z13 = v93.z; var v94 = vec4; v3X4 = v94.x; v3Y4 = v94.y; v3Z4 = v94.z; v12X13 = v2X13 - v1X13; v12Y13 = v2Y13 - v1Y13; v12Z13 = v2Z13 - v1Z13; v23X4 = v3X4 - v2X13; v23Y4 = v3Y4 - v2Y13; v23Z4 = v3Z4 - v2Z13; v31X3 = v1X13 - v3X4; v31Y3 = v1Y13 - v3Y4; v31Z3 = v1Z13 - v3Z4; var n4; var nX4; var nY4; var nZ4; nX4 = v12Y13 * v23Z4 - v12Z13 * v23Y4; nY4 = v12Z13 * v23X4 - v12X13 * v23Z4; nZ4 = v12X13 * v23Y4 - v12Y13 * v23X4; var n124; var n12X3; var n12Y3; var n12Z3; var n233; var n23X3; var n23Y3; var n23Z3; var n313; var n31X3; var n31Y3; var n31Z3; n12X3 = v12Y13 * nZ4 - v12Z13 * nY4; n12Y3 = v12Z13 * nX4 - v12X13 * nZ4; n12Z3 = v12X13 * nY4 - v12Y13 * nX4; n23X3 = v23Y4 * nZ4 - v23Z4 * nY4; n23Y3 = v23Z4 * nX4 - v23X4 * nZ4; n23Z3 = v23X4 * nY4 - v23Y4 * nX4; n31X3 = v31Y3 * nZ4 - v31Z3 * nY4; n31Y3 = v31Z3 * nX4 - v31X3 * nZ4; n31Z3 = v31X3 * nY4 - v31Y3 * nX4; var d124 = v1X13 * n12X3 + v1Y13 * n12Y3 + v1Z13 * n12Z3; var d233 = v2X13 * n23X3 + v2Y13 * n23Y3 + v2Z13 * n23Z3; var d313 = v3X4 * n31X3 + v3Y4 * n31Y3 + v3Z4 * n31Z3; var mind4 = -1; var minv4; var minvX4; var minvY4; var minvZ4; var mini4 = 0; minvX4 = 0; minvY4 = 0; minvZ4 = 0; if(d124 < 0) { var v130; var v1X14; var v1Y14; var v1Z14; var v220; var v2X14; var v2Y14; var v2Z14; var v95 = vec2; v1X14 = v95.x; v1Y14 = v95.y; v1Z14 = v95.z; var v96 = vec3; v2X14 = v96.x; v2Y14 = v96.y; v2Z14 = v96.z; var v1214; var v12X14; var v12Y14; var v12Z14; v12X14 = v2X14 - v1X14; v12Y14 = v2Y14 - v1Y14; v12Z14 = v2Z14 - v1Z14; var d22 = v12X14 * v12X14 + v12Y14 * v12Y14 + v12Z14 * v12Z14; var t9 = v12X14 * v1X14 + v12Y14 * v1Y14 + v12Z14 * v1Z14; t9 = -t9 / d22; var b12; if(t9 < 0) { var v97 = out; v97.x = v1X14; v97.y = v1Y14; v97.z = v1Z14; b12 = 1; } else if(t9 > 1) { var v98 = out; v98.x = v2X14; v98.y = v2Y14; v98.z = v2Z14; b12 = 2; } else { var p9; var pX9; var pY9; var pZ9; pX9 = v1X14 + v12X14 * t9; pY9 = v1Y14 + v12Y14 * t9; pZ9 = v1Z14 + v12Z14 * t9; var v99 = out; v99.x = pX9; v99.y = pY9; v99.z = pZ9; b12 = 3; } var d24 = out.x * out.x + out.y * out.y + out.z * out.z; mini4 = b12; mind4 = d24; var v100 = out; minvX4 = v100.x; minvY4 = v100.y; minvZ4 = v100.z; } if(d233 < 0) { var v131; var v1X15; var v1Y15; var v1Z15; var v221; var v2X15; var v2Y15; var v2Z15; var v101 = vec3; v1X15 = v101.x; v1Y15 = v101.y; v1Z15 = v101.z; var v102 = vec4; v2X15 = v102.x; v2Y15 = v102.y; v2Z15 = v102.z; var v1215; var v12X15; var v12Y15; var v12Z15; v12X15 = v2X15 - v1X15; v12Y15 = v2Y15 - v1Y15; v12Z15 = v2Z15 - v1Z15; var d25 = v12X15 * v12X15 + v12Y15 * v12Y15 + v12Z15 * v12Z15; var t10 = v12X15 * v1X15 + v12Y15 * v1Y15 + v12Z15 * v1Z15; t10 = -t10 / d25; var b13; if(t10 < 0) { var v103 = out; v103.x = v1X15; v103.y = v1Y15; v103.z = v1Z15; b13 = 1; } else if(t10 > 1) { var v104 = out; v104.x = v2X15; v104.y = v2Y15; v104.z = v2Z15; b13 = 2; } else { var p10; var pX10; var pY10; var pZ10; pX10 = v1X15 + v12X15 * t10; pY10 = v1Y15 + v12Y15 * t10; pZ10 = v1Z15 + v12Z15 * t10; var v105 = out; v105.x = pX10; v105.y = pY10; v105.z = pZ10; b13 = 3; } var d26 = out.x * out.x + out.y * out.y + out.z * out.z; if(mind4 < 0 || d26 < mind4) { mini4 = b13 << 1; mind4 = d26; var v106 = out; minvX4 = v106.x; minvY4 = v106.y; minvZ4 = v106.z; } } if(d313 < 0) { var v132; var v1X16; var v1Y16; var v1Z16; var v222; var v2X16; var v2Y16; var v2Z16; var v107 = vec2; v1X16 = v107.x; v1Y16 = v107.y; v1Z16 = v107.z; var v108 = vec4; v2X16 = v108.x; v2Y16 = v108.y; v2Z16 = v108.z; var v1216; var v12X16; var v12Y16; var v12Z16; v12X16 = v2X16 - v1X16; v12Y16 = v2Y16 - v1Y16; v12Z16 = v2Z16 - v1Z16; var d27 = v12X16 * v12X16 + v12Y16 * v12Y16 + v12Z16 * v12Z16; var t11 = v12X16 * v1X16 + v12Y16 * v1Y16 + v12Z16 * v1Z16; t11 = -t11 / d27; var b14; if(t11 < 0) { var v109 = out; v109.x = v1X16; v109.y = v1Y16; v109.z = v1Z16; b14 = 1; } else if(t11 > 1) { var v133 = out; v133.x = v2X16; v133.y = v2Y16; v133.z = v2Z16; b14 = 2; } else { var p11; var pX11; var pY11; var pZ11; pX11 = v1X16 + v12X16 * t11; pY11 = v1Y16 + v12Y16 * t11; pZ11 = v1Z16 + v12Z16 * t11; var v134 = out; v134.x = pX11; v134.y = pY11; v134.z = pZ11; b14 = 3; } var d28 = out.x * out.x + out.y * out.y + out.z * out.z; if(mind4 < 0 || d28 < mind4) { mini4 = b14 & 1 | (b14 & 2) << 1; mind4 = d28; var v135 = out; minvX4 = v135.x; minvY4 = v135.y; minvZ4 = v135.z; } } var b15; if(mind4 > 0) { var v136 = out; v136.x = minvX4; v136.y = minvY4; v136.z = minvZ4; b15 = mini4; } else { var l4 = nX4 * nX4 + nY4 * nY4 + nZ4 * nZ4; if(l4 > 0) { l4 = 1 / Math.sqrt(l4); } nX4 *= l4; nY4 *= l4; nZ4 *= l4; var dn3 = v1X13 * nX4 + v1Y13 * nY4 + v1Z13 * nZ4; var l23 = nX4 * nX4 + nY4 * nY4 + nZ4 * nZ4; l23 = dn3 / l23; minvX4 = nX4 * l23; minvY4 = nY4 * l23; minvZ4 = nZ4 * l23; var v137 = out; v137.x = minvX4; v137.y = minvY4; v137.z = minvZ4; b15 = 7; } var d29 = out.x * out.x + out.y * out.y + out.z * out.z; if(mind < 0 || d29 < mind) { mini = b15 << 1; mind = d29; var v138 = out; minvX = v138.x; minvY = v138.y; minvZ = v138.z; } } if(mind > 0) { var v139 = out; v139.x = minvX; v139.y = minvY; v139.z = minvZ; return mini; } out.zero(); return 15; } } oimo.common.Mat3 = class oimo_common_Mat3 { constructor(e00,e01,e02,e10,e11,e12,e20,e21,e22) { if(e22 == null) { e22 = 1; } if(e21 == null) { e21 = 0; } if(e20 == null) { e20 = 0; } if(e12 == null) { e12 = 0; } if(e11 == null) { e11 = 1; } if(e10 == null) { e10 = 0; } if(e02 == null) { e02 = 0; } if(e01 == null) { e01 = 0; } if(e00 == null) { e00 = 1; } this.e00 = e00; this.e01 = e01; this.e02 = e02; this.e10 = e10; this.e11 = e11; this.e12 = e12; this.e20 = e20; this.e21 = e21; this.e22 = e22; oimo.common.Mat3.numCreations++; } init(e00,e01,e02,e10,e11,e12,e20,e21,e22) { this.e00 = e00; this.e01 = e01; this.e02 = e02; this.e10 = e10; this.e11 = e11; this.e12 = e12; this.e20 = e20; this.e21 = e21; this.e22 = e22; return this; } identity() { var t00 = 1; var t01 = 0; var t02 = 0; var t10 = 0; var t11 = 1; var t12 = 0; var t20 = 0; var t21 = 0; var t22 = 1; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e20 = t20; this.e21 = t21; this.e22 = t22; return this; } add(m) { return new oimo.common.Mat3(this.e00 + m.e00,this.e01 + m.e01,this.e02 + m.e02,this.e10 + m.e10,this.e11 + m.e11,this.e12 + m.e12,this.e20 + m.e20,this.e21 + m.e21,this.e22 + m.e22); } sub(m) { return new oimo.common.Mat3(this.e00 - m.e00,this.e01 - m.e01,this.e02 - m.e02,this.e10 - m.e10,this.e11 - m.e11,this.e12 - m.e12,this.e20 - m.e20,this.e21 - m.e21,this.e22 - m.e22); } scale(s) { return new oimo.common.Mat3(this.e00 * s,this.e01 * s,this.e02 * s,this.e10 * s,this.e11 * s,this.e12 * s,this.e20 * s,this.e21 * s,this.e22 * s); } mul(m) { return new oimo.common.Mat3(this.e00 * m.e00 + this.e01 * m.e10 + this.e02 * m.e20,this.e00 * m.e01 + this.e01 * m.e11 + this.e02 * m.e21,this.e00 * m.e02 + this.e01 * m.e12 + this.e02 * m.e22,this.e10 * m.e00 + this.e11 * m.e10 + this.e12 * m.e20,this.e10 * m.e01 + this.e11 * m.e11 + this.e12 * m.e21,this.e10 * m.e02 + this.e11 * m.e12 + this.e12 * m.e22,this.e20 * m.e00 + this.e21 * m.e10 + this.e22 * m.e20,this.e20 * m.e01 + this.e21 * m.e11 + this.e22 * m.e21,this.e20 * m.e02 + this.e21 * m.e12 + this.e22 * m.e22); } addEq(m) { var t00 = this.e00 + m.e00; var t01 = this.e01 + m.e01; var t02 = this.e02 + m.e02; var t10 = this.e10 + m.e10; var t11 = this.e11 + m.e11; var t12 = this.e12 + m.e12; var t20 = this.e20 + m.e20; var t21 = this.e21 + m.e21; var t22 = this.e22 + m.e22; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e20 = t20; this.e21 = t21; this.e22 = t22; return this; } subEq(m) { var t00 = this.e00 - m.e00; var t01 = this.e01 - m.e01; var t02 = this.e02 - m.e02; var t10 = this.e10 - m.e10; var t11 = this.e11 - m.e11; var t12 = this.e12 - m.e12; var t20 = this.e20 - m.e20; var t21 = this.e21 - m.e21; var t22 = this.e22 - m.e22; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e20 = t20; this.e21 = t21; this.e22 = t22; return this; } scaleEq(s) { var t00 = this.e00 * s; var t01 = this.e01 * s; var t02 = this.e02 * s; var t10 = this.e10 * s; var t11 = this.e11 * s; var t12 = this.e12 * s; var t20 = this.e20 * s; var t21 = this.e21 * s; var t22 = this.e22 * s; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e20 = t20; this.e21 = t21; this.e22 = t22; return this; } mulEq(m) { var t00 = this.e00 * m.e00 + this.e01 * m.e10 + this.e02 * m.e20; var t01 = this.e00 * m.e01 + this.e01 * m.e11 + this.e02 * m.e21; var t02 = this.e00 * m.e02 + this.e01 * m.e12 + this.e02 * m.e22; var t10 = this.e10 * m.e00 + this.e11 * m.e10 + this.e12 * m.e20; var t11 = this.e10 * m.e01 + this.e11 * m.e11 + this.e12 * m.e21; var t12 = this.e10 * m.e02 + this.e11 * m.e12 + this.e12 * m.e22; var t20 = this.e20 * m.e00 + this.e21 * m.e10 + this.e22 * m.e20; var t21 = this.e20 * m.e01 + this.e21 * m.e11 + this.e22 * m.e21; var t22 = this.e20 * m.e02 + this.e21 * m.e12 + this.e22 * m.e22; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e20 = t20; this.e21 = t21; this.e22 = t22; return this; } prependScale(sx,sy,sz) { return new oimo.common.Mat3(this.e00 * sx,this.e01 * sx,this.e02 * sx,this.e10 * sy,this.e11 * sy,this.e12 * sy,this.e20 * sz,this.e21 * sz,this.e22 * sz); } appendScale(sx,sy,sz) { return new oimo.common.Mat3(this.e00 * sx,this.e01 * sy,this.e02 * sz,this.e10 * sx,this.e11 * sy,this.e12 * sz,this.e20 * sx,this.e21 * sy,this.e22 * sz); } prependRotation(rad,axisX,axisY,axisZ) { var s = Math.sin(rad); var c = Math.cos(rad); var c1 = 1 - c; var r00 = axisX * axisX * c1 + c; var r01 = axisX * axisY * c1 - axisZ * s; var r02 = axisX * axisZ * c1 + axisY * s; var r10 = axisY * axisX * c1 + axisZ * s; var r11 = axisY * axisY * c1 + c; var r12 = axisY * axisZ * c1 - axisX * s; var r20 = axisZ * axisX * c1 - axisY * s; var r21 = axisZ * axisY * c1 + axisX * s; var r22 = axisZ * axisZ * c1 + c; return new oimo.common.Mat3(r00 * this.e00 + r01 * this.e10 + r02 * this.e20,r00 * this.e01 + r01 * this.e11 + r02 * this.e21,r00 * this.e02 + r01 * this.e12 + r02 * this.e22,r10 * this.e00 + r11 * this.e10 + r12 * this.e20,r10 * this.e01 + r11 * this.e11 + r12 * this.e21,r10 * this.e02 + r11 * this.e12 + r12 * this.e22,r20 * this.e00 + r21 * this.e10 + r22 * this.e20,r20 * this.e01 + r21 * this.e11 + r22 * this.e21,r20 * this.e02 + r21 * this.e12 + r22 * this.e22); } appendRotation(rad,axisX,axisY,axisZ) { var s = Math.sin(rad); var c = Math.cos(rad); var c1 = 1 - c; var r00 = axisX * axisX * c1 + c; var r01 = axisX * axisY * c1 - axisZ * s; var r02 = axisX * axisZ * c1 + axisY * s; var r10 = axisY * axisX * c1 + axisZ * s; var r11 = axisY * axisY * c1 + c; var r12 = axisY * axisZ * c1 - axisX * s; var r20 = axisZ * axisX * c1 - axisY * s; var r21 = axisZ * axisY * c1 + axisX * s; var r22 = axisZ * axisZ * c1 + c; return new oimo.common.Mat3(this.e00 * r00 + this.e01 * r10 + this.e02 * r20,this.e00 * r01 + this.e01 * r11 + this.e02 * r21,this.e00 * r02 + this.e01 * r12 + this.e02 * r22,this.e10 * r00 + this.e11 * r10 + this.e12 * r20,this.e10 * r01 + this.e11 * r11 + this.e12 * r21,this.e10 * r02 + this.e11 * r12 + this.e12 * r22,this.e20 * r00 + this.e21 * r10 + this.e22 * r20,this.e20 * r01 + this.e21 * r11 + this.e22 * r21,this.e20 * r02 + this.e21 * r12 + this.e22 * r22); } prependScaleEq(sx,sy,sz) { var t00 = this.e00 * sx; var t01 = this.e01 * sx; var t02 = this.e02 * sx; var t10 = this.e10 * sy; var t11 = this.e11 * sy; var t12 = this.e12 * sy; var t20 = this.e20 * sz; var t21 = this.e21 * sz; var t22 = this.e22 * sz; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e20 = t20; this.e21 = t21; this.e22 = t22; return this; } appendScaleEq(sx,sy,sz) { var t00 = this.e00 * sx; var t01 = this.e01 * sy; var t02 = this.e02 * sz; var t10 = this.e10 * sx; var t11 = this.e11 * sy; var t12 = this.e12 * sz; var t20 = this.e20 * sx; var t21 = this.e21 * sy; var t22 = this.e22 * sz; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e20 = t20; this.e21 = t21; this.e22 = t22; return this; } prependRotationEq(rad,axisX,axisY,axisZ) { var s = Math.sin(rad); var c = Math.cos(rad); var c1 = 1 - c; var r00 = axisX * axisX * c1 + c; var r01 = axisX * axisY * c1 - axisZ * s; var r02 = axisX * axisZ * c1 + axisY * s; var r10 = axisY * axisX * c1 + axisZ * s; var r11 = axisY * axisY * c1 + c; var r12 = axisY * axisZ * c1 - axisX * s; var r20 = axisZ * axisX * c1 - axisY * s; var r21 = axisZ * axisY * c1 + axisX * s; var r22 = axisZ * axisZ * c1 + c; var t00 = r00 * this.e00 + r01 * this.e10 + r02 * this.e20; var t01 = r00 * this.e01 + r01 * this.e11 + r02 * this.e21; var t02 = r00 * this.e02 + r01 * this.e12 + r02 * this.e22; var t10 = r10 * this.e00 + r11 * this.e10 + r12 * this.e20; var t11 = r10 * this.e01 + r11 * this.e11 + r12 * this.e21; var t12 = r10 * this.e02 + r11 * this.e12 + r12 * this.e22; var t20 = r20 * this.e00 + r21 * this.e10 + r22 * this.e20; var t21 = r20 * this.e01 + r21 * this.e11 + r22 * this.e21; var t22 = r20 * this.e02 + r21 * this.e12 + r22 * this.e22; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e20 = t20; this.e21 = t21; this.e22 = t22; return this; } appendRotationEq(rad,axisX,axisY,axisZ) { var s = Math.sin(rad); var c = Math.cos(rad); var c1 = 1 - c; var r00 = axisX * axisX * c1 + c; var r01 = axisX * axisY * c1 - axisZ * s; var r02 = axisX * axisZ * c1 + axisY * s; var r10 = axisY * axisX * c1 + axisZ * s; var r11 = axisY * axisY * c1 + c; var r12 = axisY * axisZ * c1 - axisX * s; var r20 = axisZ * axisX * c1 - axisY * s; var r21 = axisZ * axisY * c1 + axisX * s; var r22 = axisZ * axisZ * c1 + c; var t00 = this.e00 * r00 + this.e01 * r10 + this.e02 * r20; var t01 = this.e00 * r01 + this.e01 * r11 + this.e02 * r21; var t02 = this.e00 * r02 + this.e01 * r12 + this.e02 * r22; var t10 = this.e10 * r00 + this.e11 * r10 + this.e12 * r20; var t11 = this.e10 * r01 + this.e11 * r11 + this.e12 * r21; var t12 = this.e10 * r02 + this.e11 * r12 + this.e12 * r22; var t20 = this.e20 * r00 + this.e21 * r10 + this.e22 * r20; var t21 = this.e20 * r01 + this.e21 * r11 + this.e22 * r21; var t22 = this.e20 * r02 + this.e21 * r12 + this.e22 * r22; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e20 = t20; this.e21 = t21; this.e22 = t22; return this; } transpose() { return new oimo.common.Mat3(this.e00,this.e10,this.e20,this.e01,this.e11,this.e21,this.e02,this.e12,this.e22); } transposeEq() { var t00 = this.e00; var t01 = this.e10; var t02 = this.e20; var t10 = this.e01; var t11 = this.e11; var t12 = this.e21; var t20 = this.e02; var t21 = this.e12; var t22 = this.e22; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e20 = t20; this.e21 = t21; this.e22 = t22; return this; } determinant() { return this.e00 * (this.e11 * this.e22 - this.e12 * this.e21) - this.e01 * (this.e10 * this.e22 - this.e12 * this.e20) + this.e02 * (this.e10 * this.e21 - this.e11 * this.e20); } trace() { return this.e00 + this.e11 + this.e22; } inverse() { var d00 = this.e11 * this.e22 - this.e12 * this.e21; var d01 = this.e10 * this.e22 - this.e12 * this.e20; var d02 = this.e10 * this.e21 - this.e11 * this.e20; var d10 = this.e01 * this.e22 - this.e02 * this.e21; var d11 = this.e00 * this.e22 - this.e02 * this.e20; var d12 = this.e00 * this.e21 - this.e01 * this.e20; var d20 = this.e01 * this.e12 - this.e02 * this.e11; var d21 = this.e00 * this.e12 - this.e02 * this.e10; var d22 = this.e00 * this.e11 - this.e01 * this.e10; var invDet = this.e00 * d00 - this.e01 * d01 + this.e02 * d02; if(invDet != 0) { invDet = 1 / invDet; } return new oimo.common.Mat3(d00 * invDet,-d10 * invDet,d20 * invDet,-d01 * invDet,d11 * invDet,-d21 * invDet,d02 * invDet,-d12 * invDet,d22 * invDet); } inverseEq() { var d00 = this.e11 * this.e22 - this.e12 * this.e21; var d01 = this.e10 * this.e22 - this.e12 * this.e20; var d02 = this.e10 * this.e21 - this.e11 * this.e20; var d10 = this.e01 * this.e22 - this.e02 * this.e21; var d11 = this.e00 * this.e22 - this.e02 * this.e20; var d12 = this.e00 * this.e21 - this.e01 * this.e20; var d20 = this.e01 * this.e12 - this.e02 * this.e11; var d21 = this.e00 * this.e12 - this.e02 * this.e10; var d22 = this.e00 * this.e11 - this.e01 * this.e10; var invDet = this.e00 * d00 - this.e01 * d01 + this.e02 * d02; if(invDet != 0) { invDet = 1 / invDet; } var t00 = d00 * invDet; var t01 = -d10 * invDet; var t02 = d20 * invDet; var t10 = -d01 * invDet; var t11 = d11 * invDet; var t12 = -d21 * invDet; var t20 = d02 * invDet; var t21 = -d12 * invDet; var t22 = d22 * invDet; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e20 = t20; this.e21 = t21; this.e22 = t22; return this; } toArray(columnMajor) { if(columnMajor == null) { columnMajor = false; } if(columnMajor) { return [this.e00,this.e10,this.e20,this.e01,this.e11,this.e21,this.e02,this.e12,this.e22]; } else { return [this.e00,this.e01,this.e02,this.e10,this.e11,this.e12,this.e20,this.e21,this.e22]; } } copyFrom(m) { this.e00 = m.e00; this.e01 = m.e01; this.e02 = m.e02; this.e10 = m.e10; this.e11 = m.e11; this.e12 = m.e12; this.e20 = m.e20; this.e21 = m.e21; this.e22 = m.e22; return this; } clone() { return new oimo.common.Mat3(this.e00,this.e01,this.e02,this.e10,this.e11,this.e12,this.e20,this.e21,this.e22); } fromQuat(q) { var x = q.x; var y = q.y; var z = q.z; var w = q.w; var x2 = 2 * x; var y2 = 2 * y; var z2 = 2 * z; var xx = x * x2; var yy = y * y2; var zz = z * z2; var xy = x * y2; var yz = y * z2; var xz = x * z2; var wx = w * x2; var wy = w * y2; var wz = w * z2; this.e00 = 1 - yy - zz; this.e01 = xy - wz; this.e02 = xz + wy; this.e10 = xy + wz; this.e11 = 1 - xx - zz; this.e12 = yz - wx; this.e20 = xz - wy; this.e21 = yz + wx; this.e22 = 1 - xx - yy; return this; } toQuat() { var _this = new oimo.common.Quat(); var e00 = this.e00; var e11 = this.e11; var e22 = this.e22; var t = e00 + e11 + e22; var s; if(t > 0) { s = Math.sqrt(t + 1); _this.w = 0.5 * s; s = 0.5 / s; _this.x = (this.e21 - this.e12) * s; _this.y = (this.e02 - this.e20) * s; _this.z = (this.e10 - this.e01) * s; } else if(e00 > e11) { if(e00 > e22) { s = Math.sqrt(e00 - e11 - e22 + 1); _this.x = 0.5 * s; s = 0.5 / s; _this.y = (this.e01 + this.e10) * s; _this.z = (this.e02 + this.e20) * s; _this.w = (this.e21 - this.e12) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); _this.z = 0.5 * s; s = 0.5 / s; _this.x = (this.e02 + this.e20) * s; _this.y = (this.e12 + this.e21) * s; _this.w = (this.e10 - this.e01) * s; } } else if(e11 > e22) { s = Math.sqrt(e11 - e22 - e00 + 1); _this.y = 0.5 * s; s = 0.5 / s; _this.x = (this.e01 + this.e10) * s; _this.z = (this.e12 + this.e21) * s; _this.w = (this.e02 - this.e20) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); _this.z = 0.5 * s; s = 0.5 / s; _this.x = (this.e02 + this.e20) * s; _this.y = (this.e12 + this.e21) * s; _this.w = (this.e10 - this.e01) * s; } return _this; } fromEulerXyz(eulerAngles) { var sx = Math.sin(eulerAngles.x); var sy = Math.sin(eulerAngles.y); var sz = Math.sin(eulerAngles.z); var cx = Math.cos(eulerAngles.x); var cy = Math.cos(eulerAngles.y); var cz = Math.cos(eulerAngles.z); var t00 = cy * cz; var t01 = -cy * sz; var t02 = sy; var t10 = cx * sz + cz * sx * sy; var t11 = cx * cz - sx * sy * sz; var t12 = -cy * sx; var t20 = sx * sz - cx * cz * sy; var t21 = cz * sx + cx * sy * sz; var t22 = cx * cy; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e20 = t20; this.e21 = t21; this.e22 = t22; return this; } toEulerXyz() { var sy = this.e02; if(sy <= -1) { var xSubZ = Math.atan2(this.e21,this.e11); return new oimo.common.Vec3(xSubZ * 0.5,-1.570796326794895,-xSubZ * 0.5); } if(sy >= 1) { var xAddZ = Math.atan2(this.e21,this.e11); return new oimo.common.Vec3(xAddZ * 0.5,1.570796326794895,xAddZ * 0.5); } var y = Math.asin(sy); var x = Math.atan2(-this.e12,this.e22); var z = Math.atan2(-this.e01,this.e00); return new oimo.common.Vec3(x,y,z); } getRow(index) { if(index == 0) { return new oimo.common.Vec3(this.e00,this.e01,this.e02); } else if(index == 1) { return new oimo.common.Vec3(this.e10,this.e11,this.e12); } else if(index == 2) { return new oimo.common.Vec3(this.e20,this.e21,this.e22); } else { return null; } } getCol(index) { if(index == 0) { return new oimo.common.Vec3(this.e00,this.e10,this.e20); } else if(index == 1) { return new oimo.common.Vec3(this.e01,this.e11,this.e21); } else if(index == 2) { return new oimo.common.Vec3(this.e02,this.e12,this.e22); } else { return null; } } getRowTo(index,dst) { if(index == 0) { dst.init(this.e00,this.e01,this.e02); } else if(index == 1) { dst.init(this.e10,this.e11,this.e12); } else if(index == 2) { dst.init(this.e20,this.e21,this.e22); } else { dst.zero(); } } getColTo(index,dst) { if(index == 0) { dst.init(this.e00,this.e10,this.e20); } else if(index == 1) { dst.init(this.e01,this.e11,this.e21); } else if(index == 2) { dst.init(this.e02,this.e12,this.e22); } else { dst.zero(); } } fromRows(row0,row1,row2) { var t00 = row0.x; var t01 = row0.y; var t02 = row0.z; var t10 = row1.x; var t11 = row1.y; var t12 = row1.z; var t20 = row2.x; var t21 = row2.y; var t22 = row2.z; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e20 = t20; this.e21 = t21; this.e22 = t22; return this; } fromCols(col0,col1,col2) { var t00 = col0.x; var t01 = col1.x; var t02 = col2.x; var t10 = col0.y; var t11 = col1.y; var t12 = col2.y; var t20 = col0.z; var t21 = col1.z; var t22 = col2.z; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e20 = t20; this.e21 = t21; this.e22 = t22; return this; } toString() { return "Mat3[" + (this.e00 > 0 ? (this.e00 * 10000000 + 0.5 | 0) / 10000000 : (this.e00 * 10000000 - 0.5 | 0) / 10000000) + ", " + (this.e01 > 0 ? (this.e01 * 10000000 + 0.5 | 0) / 10000000 : (this.e01 * 10000000 - 0.5 | 0) / 10000000) + ", " + (this.e02 > 0 ? (this.e02 * 10000000 + 0.5 | 0) / 10000000 : (this.e02 * 10000000 - 0.5 | 0) / 10000000) + ",\n" + " " + (this.e10 > 0 ? (this.e10 * 10000000 + 0.5 | 0) / 10000000 : (this.e10 * 10000000 - 0.5 | 0) / 10000000) + ", " + (this.e11 > 0 ? (this.e11 * 10000000 + 0.5 | 0) / 10000000 : (this.e11 * 10000000 - 0.5 | 0) / 10000000) + ", " + (this.e12 > 0 ? (this.e12 * 10000000 + 0.5 | 0) / 10000000 : (this.e12 * 10000000 - 0.5 | 0) / 10000000) + ",\n" + " " + (this.e20 > 0 ? (this.e20 * 10000000 + 0.5 | 0) / 10000000 : (this.e20 * 10000000 - 0.5 | 0) / 10000000) + ", " + (this.e21 > 0 ? (this.e21 * 10000000 + 0.5 | 0) / 10000000 : (this.e21 * 10000000 - 0.5 | 0) / 10000000) + ", " + (this.e22 > 0 ? (this.e22 * 10000000 + 0.5 | 0) / 10000000 : (this.e22 * 10000000 - 0.5 | 0) / 10000000) + "]"; } } oimo.common.Mat4 = class oimo_common_Mat4 { constructor(e00,e01,e02,e03,e10,e11,e12,e13,e20,e21,e22,e23,e30,e31,e32,e33) { if(e33 == null) { e33 = 1; } if(e32 == null) { e32 = 0; } if(e31 == null) { e31 = 0; } if(e30 == null) { e30 = 0; } if(e23 == null) { e23 = 0; } if(e22 == null) { e22 = 1; } if(e21 == null) { e21 = 0; } if(e20 == null) { e20 = 0; } if(e13 == null) { e13 = 0; } if(e12 == null) { e12 = 0; } if(e11 == null) { e11 = 1; } if(e10 == null) { e10 = 0; } if(e03 == null) { e03 = 0; } if(e02 == null) { e02 = 0; } if(e01 == null) { e01 = 0; } if(e00 == null) { e00 = 1; } this.e00 = e00; this.e01 = e01; this.e02 = e02; this.e03 = e03; this.e10 = e10; this.e11 = e11; this.e12 = e12; this.e13 = e13; this.e20 = e20; this.e21 = e21; this.e22 = e22; this.e23 = e23; this.e30 = e30; this.e31 = e31; this.e32 = e32; this.e33 = e33; oimo.common.Mat4.numCreations++; } init(e00,e01,e02,e03,e10,e11,e12,e13,e20,e21,e22,e23,e30,e31,e32,e33) { this.e00 = e00; this.e01 = e01; this.e02 = e02; this.e03 = e03; this.e10 = e10; this.e11 = e11; this.e12 = e12; this.e13 = e13; this.e20 = e20; this.e21 = e21; this.e22 = e22; this.e23 = e23; this.e30 = e30; this.e31 = e31; this.e32 = e32; this.e33 = e33; return this; } identity() { var t00 = 1; var t01 = 0; var t02 = 0; var t03 = 0; var t10 = 0; var t11 = 1; var t12 = 0; var t13 = 0; var t20 = 0; var t21 = 0; var t22 = 1; var t23 = 0; var t30 = 0; var t31 = 0; var t32 = 0; var t33 = 1; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e03 = t03; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e13 = t13; this.e20 = t20; this.e21 = t21; this.e22 = t22; this.e23 = t23; this.e30 = t30; this.e31 = t31; this.e32 = t32; this.e33 = t33; return this; } add(m) { return new oimo.common.Mat4(this.e00 + m.e00,this.e01 + m.e01,this.e02 + m.e02,this.e03 + m.e03,this.e10 + m.e10,this.e11 + m.e11,this.e12 + m.e12,this.e13 + m.e13,this.e20 + m.e20,this.e21 + m.e21,this.e22 + m.e22,this.e23 + m.e23,this.e30 + m.e30,this.e31 + m.e31,this.e32 + m.e32,this.e33 + m.e33); } sub(m) { return new oimo.common.Mat4(this.e00 - m.e00,this.e01 - m.e01,this.e02 - m.e02,this.e03 - m.e03,this.e10 - m.e10,this.e11 - m.e11,this.e12 - m.e12,this.e13 - m.e13,this.e20 - m.e20,this.e21 - m.e21,this.e22 - m.e22,this.e23 - m.e23,this.e30 - m.e30,this.e31 - m.e31,this.e32 - m.e32,this.e33 - m.e33); } scale(s) { return new oimo.common.Mat4(this.e00 * s,this.e01 * s,this.e02 * s,this.e03 * s,this.e10 * s,this.e11 * s,this.e12 * s,this.e13 * s,this.e20 * s,this.e21 * s,this.e22 * s,this.e23 * s,this.e30 * s,this.e31 * s,this.e32 * s,this.e33 * s); } mul(m) { return new oimo.common.Mat4(this.e00 * m.e00 + this.e01 * m.e10 + this.e02 * m.e20 + this.e03 * m.e30,this.e00 * m.e01 + this.e01 * m.e11 + this.e02 * m.e21 + this.e03 * m.e31,this.e00 * m.e02 + this.e01 * m.e12 + this.e02 * m.e22 + this.e03 * m.e32,this.e00 * m.e03 + this.e01 * m.e13 + this.e02 * m.e23 + this.e03 * m.e33,this.e10 * m.e00 + this.e11 * m.e10 + this.e12 * m.e20 + this.e13 * m.e30,this.e10 * m.e01 + this.e11 * m.e11 + this.e12 * m.e21 + this.e13 * m.e31,this.e10 * m.e02 + this.e11 * m.e12 + this.e12 * m.e22 + this.e13 * m.e32,this.e10 * m.e03 + this.e11 * m.e13 + this.e12 * m.e23 + this.e13 * m.e33,this.e20 * m.e00 + this.e21 * m.e10 + this.e22 * m.e20 + this.e23 * m.e30,this.e20 * m.e01 + this.e21 * m.e11 + this.e22 * m.e21 + this.e23 * m.e31,this.e20 * m.e02 + this.e21 * m.e12 + this.e22 * m.e22 + this.e23 * m.e32,this.e20 * m.e03 + this.e21 * m.e13 + this.e22 * m.e23 + this.e23 * m.e33,this.e30 * m.e00 + this.e31 * m.e10 + this.e32 * m.e20 + this.e33 * m.e30,this.e30 * m.e01 + this.e31 * m.e11 + this.e32 * m.e21 + this.e33 * m.e31,this.e30 * m.e02 + this.e31 * m.e12 + this.e32 * m.e22 + this.e33 * m.e32,this.e30 * m.e03 + this.e31 * m.e13 + this.e32 * m.e23 + this.e33 * m.e33); } addEq(m) { var t00 = this.e00 + m.e00; var t01 = this.e01 + m.e01; var t02 = this.e02 + m.e02; var t03 = this.e03 + m.e03; var t10 = this.e10 + m.e10; var t11 = this.e11 + m.e11; var t12 = this.e12 + m.e12; var t13 = this.e13 + m.e13; var t20 = this.e20 + m.e20; var t21 = this.e21 + m.e21; var t22 = this.e22 + m.e22; var t23 = this.e23 + m.e23; var t30 = this.e30 + m.e30; var t31 = this.e31 + m.e31; var t32 = this.e32 + m.e32; var t33 = this.e33 + m.e33; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e03 = t03; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e13 = t13; this.e20 = t20; this.e21 = t21; this.e22 = t22; this.e23 = t23; this.e30 = t30; this.e31 = t31; this.e32 = t32; this.e33 = t33; return this; } subEq(m) { var t00 = this.e00 - m.e00; var t01 = this.e01 - m.e01; var t02 = this.e02 - m.e02; var t03 = this.e03 - m.e03; var t10 = this.e10 - m.e10; var t11 = this.e11 - m.e11; var t12 = this.e12 - m.e12; var t13 = this.e13 - m.e13; var t20 = this.e20 - m.e20; var t21 = this.e21 - m.e21; var t22 = this.e22 - m.e22; var t23 = this.e23 - m.e23; var t30 = this.e30 - m.e30; var t31 = this.e31 - m.e31; var t32 = this.e32 - m.e32; var t33 = this.e33 - m.e33; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e03 = t03; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e13 = t13; this.e20 = t20; this.e21 = t21; this.e22 = t22; this.e23 = t23; this.e30 = t30; this.e31 = t31; this.e32 = t32; this.e33 = t33; return this; } scaleEq(s) { var t00 = this.e00 * s; var t01 = this.e01 * s; var t02 = this.e02 * s; var t03 = this.e03 * s; var t10 = this.e10 * s; var t11 = this.e11 * s; var t12 = this.e12 * s; var t13 = this.e13 * s; var t20 = this.e20 * s; var t21 = this.e21 * s; var t22 = this.e22 * s; var t23 = this.e23 * s; var t30 = this.e30 * s; var t31 = this.e31 * s; var t32 = this.e32 * s; var t33 = this.e33 * s; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e03 = t03; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e13 = t13; this.e20 = t20; this.e21 = t21; this.e22 = t22; this.e23 = t23; this.e30 = t30; this.e31 = t31; this.e32 = t32; this.e33 = t33; return this; } mulEq(m) { var t00 = this.e00 * m.e00 + this.e01 * m.e10 + this.e02 * m.e20 + this.e03 * m.e30; var t01 = this.e00 * m.e01 + this.e01 * m.e11 + this.e02 * m.e21 + this.e03 * m.e31; var t02 = this.e00 * m.e02 + this.e01 * m.e12 + this.e02 * m.e22 + this.e03 * m.e32; var t03 = this.e00 * m.e03 + this.e01 * m.e13 + this.e02 * m.e23 + this.e03 * m.e33; var t10 = this.e10 * m.e00 + this.e11 * m.e10 + this.e12 * m.e20 + this.e13 * m.e30; var t11 = this.e10 * m.e01 + this.e11 * m.e11 + this.e12 * m.e21 + this.e13 * m.e31; var t12 = this.e10 * m.e02 + this.e11 * m.e12 + this.e12 * m.e22 + this.e13 * m.e32; var t13 = this.e10 * m.e03 + this.e11 * m.e13 + this.e12 * m.e23 + this.e13 * m.e33; var t20 = this.e20 * m.e00 + this.e21 * m.e10 + this.e22 * m.e20 + this.e23 * m.e30; var t21 = this.e20 * m.e01 + this.e21 * m.e11 + this.e22 * m.e21 + this.e23 * m.e31; var t22 = this.e20 * m.e02 + this.e21 * m.e12 + this.e22 * m.e22 + this.e23 * m.e32; var t23 = this.e20 * m.e03 + this.e21 * m.e13 + this.e22 * m.e23 + this.e23 * m.e33; var t30 = this.e30 * m.e00 + this.e31 * m.e10 + this.e32 * m.e20 + this.e33 * m.e30; var t31 = this.e30 * m.e01 + this.e31 * m.e11 + this.e32 * m.e21 + this.e33 * m.e31; var t32 = this.e30 * m.e02 + this.e31 * m.e12 + this.e32 * m.e22 + this.e33 * m.e32; var t33 = this.e30 * m.e03 + this.e31 * m.e13 + this.e32 * m.e23 + this.e33 * m.e33; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e03 = t03; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e13 = t13; this.e20 = t20; this.e21 = t21; this.e22 = t22; this.e23 = t23; this.e30 = t30; this.e31 = t31; this.e32 = t32; this.e33 = t33; return this; } prependScale(sx,sy,sz) { return new oimo.common.Mat4(this.e00 * sx,this.e01 * sx,this.e02 * sx,this.e03 * sx,this.e10 * sy,this.e11 * sy,this.e12 * sy,this.e13 * sy,this.e20 * sz,this.e21 * sz,this.e22 * sz,this.e23 * sz,this.e30,this.e31,this.e32,this.e33); } appendScale(sx,sy,sz) { return new oimo.common.Mat4(this.e00 * sx,this.e01 * sy,this.e02 * sz,this.e03,this.e10 * sx,this.e11 * sy,this.e12 * sz,this.e13,this.e20 * sx,this.e21 * sy,this.e22 * sz,this.e23,this.e30 * sx,this.e31 * sy,this.e32 * sz,this.e33); } prependRotation(rad,axisX,axisY,axisZ) { var s = Math.sin(rad); var c = Math.cos(rad); var c1 = 1 - c; var r00 = axisX * axisX * c1 + c; var r01 = axisX * axisY * c1 - axisZ * s; var r02 = axisX * axisZ * c1 + axisY * s; var r10 = axisY * axisX * c1 + axisZ * s; var r11 = axisY * axisY * c1 + c; var r12 = axisY * axisZ * c1 - axisX * s; var r20 = axisZ * axisX * c1 - axisY * s; var r21 = axisZ * axisY * c1 + axisX * s; var r22 = axisZ * axisZ * c1 + c; return new oimo.common.Mat4(r00 * this.e00 + r01 * this.e10 + r02 * this.e20,r00 * this.e01 + r01 * this.e11 + r02 * this.e21,r00 * this.e02 + r01 * this.e12 + r02 * this.e22,r00 * this.e03 + r01 * this.e13 + r02 * this.e23,r10 * this.e00 + r11 * this.e10 + r12 * this.e20,r10 * this.e01 + r11 * this.e11 + r12 * this.e21,r10 * this.e02 + r11 * this.e12 + r12 * this.e22,r10 * this.e03 + r11 * this.e13 + r12 * this.e23,r20 * this.e00 + r21 * this.e10 + r22 * this.e20,r20 * this.e01 + r21 * this.e11 + r22 * this.e21,r20 * this.e02 + r21 * this.e12 + r22 * this.e22,r20 * this.e03 + r21 * this.e13 + r22 * this.e23,this.e30,this.e31,this.e32,this.e33); } appendRotation(rad,axisX,axisY,axisZ) { var s = Math.sin(rad); var c = Math.cos(rad); var c1 = 1 - c; var r00 = axisX * axisX * c1 + c; var r01 = axisX * axisY * c1 - axisZ * s; var r02 = axisX * axisZ * c1 + axisY * s; var r10 = axisY * axisX * c1 + axisZ * s; var r11 = axisY * axisY * c1 + c; var r12 = axisY * axisZ * c1 - axisX * s; var r20 = axisZ * axisX * c1 - axisY * s; var r21 = axisZ * axisY * c1 + axisX * s; var r22 = axisZ * axisZ * c1 + c; return new oimo.common.Mat4(this.e00 * r00 + this.e01 * r10 + this.e02 * r20,this.e00 * r01 + this.e01 * r11 + this.e02 * r21,this.e00 * r02 + this.e01 * r12 + this.e02 * r22,this.e03,this.e10 * r00 + this.e11 * r10 + this.e12 * r20,this.e10 * r01 + this.e11 * r11 + this.e12 * r21,this.e10 * r02 + this.e11 * r12 + this.e12 * r22,this.e13,this.e20 * r00 + this.e21 * r10 + this.e22 * r20,this.e20 * r01 + this.e21 * r11 + this.e22 * r21,this.e20 * r02 + this.e21 * r12 + this.e22 * r22,this.e23,this.e30 * r00 + this.e31 * r10 + this.e32 * r20,this.e30 * r01 + this.e31 * r11 + this.e32 * r21,this.e30 * r02 + this.e31 * r12 + this.e32 * r22,this.e33); } prependTranslation(tx,ty,tz) { return new oimo.common.Mat4(this.e00 + tx * this.e30,this.e01 + tx * this.e31,this.e02 + tx * this.e32,this.e03 + tx * this.e33,this.e10 + ty * this.e30,this.e11 + ty * this.e31,this.e12 + ty * this.e32,this.e13 + ty * this.e33,this.e20 + tz * this.e30,this.e21 + tz * this.e31,this.e22 + tz * this.e32,this.e23 + tz * this.e33,this.e30,this.e31,this.e32,this.e33); } appendTranslation(tx,ty,tz) { return new oimo.common.Mat4(this.e00,this.e01,this.e02,this.e00 * tx + this.e01 * ty + this.e02 * tz + this.e03,this.e10,this.e11,this.e12,this.e10 * tx + this.e11 * ty + this.e12 * tz + this.e13,this.e20,this.e21,this.e22,this.e20 * tx + this.e21 * ty + this.e22 * tz + this.e23,this.e30,this.e31,this.e32,this.e30 * tx + this.e31 * ty + this.e32 * tz + this.e33); } prependScaleEq(sx,sy,sz) { var t00 = this.e00 * sx; var t01 = this.e01 * sx; var t02 = this.e02 * sx; var t03 = this.e03 * sx; var t10 = this.e10 * sy; var t11 = this.e11 * sy; var t12 = this.e12 * sy; var t13 = this.e13 * sy; var t20 = this.e20 * sz; var t21 = this.e21 * sz; var t22 = this.e22 * sz; var t23 = this.e23 * sz; var t30 = this.e30; var t31 = this.e31; var t32 = this.e32; var t33 = this.e33; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e03 = t03; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e13 = t13; this.e20 = t20; this.e21 = t21; this.e22 = t22; this.e23 = t23; this.e30 = t30; this.e31 = t31; this.e32 = t32; this.e33 = t33; return this; } appendScaleEq(sx,sy,sz) { var t00 = this.e00 * sx; var t01 = this.e01 * sy; var t02 = this.e02 * sz; var t03 = this.e03; var t10 = this.e10 * sx; var t11 = this.e11 * sy; var t12 = this.e12 * sz; var t13 = this.e13; var t20 = this.e20 * sx; var t21 = this.e21 * sy; var t22 = this.e22 * sz; var t23 = this.e23; var t30 = this.e30 * sx; var t31 = this.e31 * sy; var t32 = this.e32 * sz; var t33 = this.e33; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e03 = t03; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e13 = t13; this.e20 = t20; this.e21 = t21; this.e22 = t22; this.e23 = t23; this.e30 = t30; this.e31 = t31; this.e32 = t32; this.e33 = t33; return this; } prependRotationEq(rad,axisX,axisY,axisZ) { var s = Math.sin(rad); var c = Math.cos(rad); var c1 = 1 - c; var r00 = axisX * axisX * c1 + c; var r01 = axisX * axisY * c1 - axisZ * s; var r02 = axisX * axisZ * c1 + axisY * s; var r10 = axisY * axisX * c1 + axisZ * s; var r11 = axisY * axisY * c1 + c; var r12 = axisY * axisZ * c1 - axisX * s; var r20 = axisZ * axisX * c1 - axisY * s; var r21 = axisZ * axisY * c1 + axisX * s; var r22 = axisZ * axisZ * c1 + c; var t00 = r00 * this.e00 + r01 * this.e10 + r02 * this.e20; var t01 = r00 * this.e01 + r01 * this.e11 + r02 * this.e21; var t02 = r00 * this.e02 + r01 * this.e12 + r02 * this.e22; var t03 = r00 * this.e03 + r01 * this.e13 + r02 * this.e23; var t10 = r10 * this.e00 + r11 * this.e10 + r12 * this.e20; var t11 = r10 * this.e01 + r11 * this.e11 + r12 * this.e21; var t12 = r10 * this.e02 + r11 * this.e12 + r12 * this.e22; var t13 = r10 * this.e03 + r11 * this.e13 + r12 * this.e23; var t20 = r20 * this.e00 + r21 * this.e10 + r22 * this.e20; var t21 = r20 * this.e01 + r21 * this.e11 + r22 * this.e21; var t22 = r20 * this.e02 + r21 * this.e12 + r22 * this.e22; var t23 = r20 * this.e03 + r21 * this.e13 + r22 * this.e23; var t30 = this.e30; var t31 = this.e31; var t32 = this.e32; var t33 = this.e33; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e03 = t03; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e13 = t13; this.e20 = t20; this.e21 = t21; this.e22 = t22; this.e23 = t23; this.e30 = t30; this.e31 = t31; this.e32 = t32; this.e33 = t33; return this; } appendRotationEq(rad,axisX,axisY,axisZ) { var s = Math.sin(rad); var c = Math.cos(rad); var c1 = 1 - c; var r00 = axisX * axisX * c1 + c; var r01 = axisX * axisY * c1 - axisZ * s; var r02 = axisX * axisZ * c1 + axisY * s; var r10 = axisY * axisX * c1 + axisZ * s; var r11 = axisY * axisY * c1 + c; var r12 = axisY * axisZ * c1 - axisX * s; var r20 = axisZ * axisX * c1 - axisY * s; var r21 = axisZ * axisY * c1 + axisX * s; var r22 = axisZ * axisZ * c1 + c; var t00 = this.e00 * r00 + this.e01 * r10 + this.e02 * r20; var t01 = this.e00 * r01 + this.e01 * r11 + this.e02 * r21; var t02 = this.e00 * r02 + this.e01 * r12 + this.e02 * r22; var t03 = this.e03; var t10 = this.e10 * r00 + this.e11 * r10 + this.e12 * r20; var t11 = this.e10 * r01 + this.e11 * r11 + this.e12 * r21; var t12 = this.e10 * r02 + this.e11 * r12 + this.e12 * r22; var t13 = this.e13; var t20 = this.e20 * r00 + this.e21 * r10 + this.e22 * r20; var t21 = this.e20 * r01 + this.e21 * r11 + this.e22 * r21; var t22 = this.e20 * r02 + this.e21 * r12 + this.e22 * r22; var t23 = this.e23; var t30 = this.e30 * r00 + this.e31 * r10 + this.e32 * r20; var t31 = this.e30 * r01 + this.e31 * r11 + this.e32 * r21; var t32 = this.e30 * r02 + this.e31 * r12 + this.e32 * r22; var t33 = this.e33; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e03 = t03; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e13 = t13; this.e20 = t20; this.e21 = t21; this.e22 = t22; this.e23 = t23; this.e30 = t30; this.e31 = t31; this.e32 = t32; this.e33 = t33; return this; } prependTranslationEq(tx,ty,tz) { var t00 = this.e00 + tx * this.e30; var t01 = this.e01 + tx * this.e31; var t02 = this.e02 + tx * this.e32; var t03 = this.e03 + tx * this.e33; var t10 = this.e10 + ty * this.e30; var t11 = this.e11 + ty * this.e31; var t12 = this.e12 + ty * this.e32; var t13 = this.e13 + ty * this.e33; var t20 = this.e20 + tz * this.e30; var t21 = this.e21 + tz * this.e31; var t22 = this.e22 + tz * this.e32; var t23 = this.e23 + tz * this.e33; var t30 = this.e30; var t31 = this.e31; var t32 = this.e32; var t33 = this.e33; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e03 = t03; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e13 = t13; this.e20 = t20; this.e21 = t21; this.e22 = t22; this.e23 = t23; this.e30 = t30; this.e31 = t31; this.e32 = t32; this.e33 = t33; return this; } appendTranslationEq(tx,ty,tz) { var t00 = this.e00; var t01 = this.e01; var t02 = this.e02; var t03 = this.e00 * tx + this.e01 * ty + this.e02 * tz + this.e03; var t10 = this.e10; var t11 = this.e11; var t12 = this.e12; var t13 = this.e10 * tx + this.e11 * ty + this.e12 * tz + this.e13; var t20 = this.e20; var t21 = this.e21; var t22 = this.e22; var t23 = this.e20 * tx + this.e21 * ty + this.e22 * tz + this.e23; var t30 = this.e30; var t31 = this.e31; var t32 = this.e32; var t33 = this.e30 * tx + this.e31 * ty + this.e32 * tz + this.e33; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e03 = t03; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e13 = t13; this.e20 = t20; this.e21 = t21; this.e22 = t22; this.e23 = t23; this.e30 = t30; this.e31 = t31; this.e32 = t32; this.e33 = t33; return this; } transpose() { return new oimo.common.Mat4(this.e00,this.e10,this.e20,this.e30,this.e01,this.e11,this.e21,this.e31,this.e02,this.e12,this.e22,this.e32,this.e03,this.e13,this.e23,this.e33); } transposeEq() { var t00 = this.e00; var t01 = this.e10; var t02 = this.e20; var t03 = this.e30; var t10 = this.e01; var t11 = this.e11; var t12 = this.e21; var t13 = this.e31; var t20 = this.e02; var t21 = this.e12; var t22 = this.e22; var t23 = this.e32; var t30 = this.e03; var t31 = this.e13; var t32 = this.e23; var t33 = this.e33; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e03 = t03; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e13 = t13; this.e20 = t20; this.e21 = t21; this.e22 = t22; this.e23 = t23; this.e30 = t30; this.e31 = t31; this.e32 = t32; this.e33 = t33; return this; } determinant() { var d23_01 = this.e20 * this.e31 - this.e21 * this.e30; var d23_02 = this.e20 * this.e32 - this.e22 * this.e30; var d23_03 = this.e20 * this.e33 - this.e23 * this.e30; var d23_12 = this.e21 * this.e32 - this.e22 * this.e31; var d23_13 = this.e21 * this.e33 - this.e23 * this.e31; var d23_23 = this.e22 * this.e33 - this.e23 * this.e32; return this.e00 * (this.e11 * d23_23 - this.e12 * d23_13 + this.e13 * d23_12) - this.e01 * (this.e10 * d23_23 - this.e12 * d23_03 + this.e13 * d23_02) + this.e02 * (this.e10 * d23_13 - this.e11 * d23_03 + this.e13 * d23_01) - this.e03 * (this.e10 * d23_12 - this.e11 * d23_02 + this.e12 * d23_01); } trace() { return this.e00 + this.e11 + this.e22 + this.e33; } inverse() { var d01_01 = this.e00 * this.e11 - this.e01 * this.e10; var d01_02 = this.e00 * this.e12 - this.e02 * this.e10; var d01_03 = this.e00 * this.e13 - this.e03 * this.e10; var d01_12 = this.e01 * this.e12 - this.e02 * this.e11; var d01_13 = this.e01 * this.e13 - this.e03 * this.e11; var d01_23 = this.e02 * this.e13 - this.e03 * this.e12; var d23_01 = this.e20 * this.e31 - this.e21 * this.e30; var d23_02 = this.e20 * this.e32 - this.e22 * this.e30; var d23_03 = this.e20 * this.e33 - this.e23 * this.e30; var d23_12 = this.e21 * this.e32 - this.e22 * this.e31; var d23_13 = this.e21 * this.e33 - this.e23 * this.e31; var d23_23 = this.e22 * this.e33 - this.e23 * this.e32; var d00 = this.e11 * d23_23 - this.e12 * d23_13 + this.e13 * d23_12; var d01 = this.e10 * d23_23 - this.e12 * d23_03 + this.e13 * d23_02; var d02 = this.e10 * d23_13 - this.e11 * d23_03 + this.e13 * d23_01; var d03 = this.e10 * d23_12 - this.e11 * d23_02 + this.e12 * d23_01; var d10 = this.e01 * d23_23 - this.e02 * d23_13 + this.e03 * d23_12; var d11 = this.e00 * d23_23 - this.e02 * d23_03 + this.e03 * d23_02; var d12 = this.e00 * d23_13 - this.e01 * d23_03 + this.e03 * d23_01; var d13 = this.e00 * d23_12 - this.e01 * d23_02 + this.e02 * d23_01; var d20 = this.e31 * d01_23 - this.e32 * d01_13 + this.e33 * d01_12; var d21 = this.e30 * d01_23 - this.e32 * d01_03 + this.e33 * d01_02; var d22 = this.e30 * d01_13 - this.e31 * d01_03 + this.e33 * d01_01; var d23 = this.e30 * d01_12 - this.e31 * d01_02 + this.e32 * d01_01; var d30 = this.e21 * d01_23 - this.e22 * d01_13 + this.e23 * d01_12; var d31 = this.e20 * d01_23 - this.e22 * d01_03 + this.e23 * d01_02; var d32 = this.e20 * d01_13 - this.e21 * d01_03 + this.e23 * d01_01; var d33 = this.e20 * d01_12 - this.e21 * d01_02 + this.e22 * d01_01; var invDet = this.e00 * d00 - this.e01 * d01 + this.e02 * d02 - this.e03 * d03; if(invDet != 0) { invDet = 1 / invDet; } return new oimo.common.Mat4(d00 * invDet,-d10 * invDet,d20 * invDet,-d30 * invDet,-d01 * invDet,d11 * invDet,-d21 * invDet,d31 * invDet,d02 * invDet,-d12 * invDet,d22 * invDet,-d32 * invDet,-d03 * invDet,d13 * invDet,-d23 * invDet,d33 * invDet); } inverseEq() { var d01_01 = this.e00 * this.e11 - this.e01 * this.e10; var d01_02 = this.e00 * this.e12 - this.e02 * this.e10; var d01_03 = this.e00 * this.e13 - this.e03 * this.e10; var d01_12 = this.e01 * this.e12 - this.e02 * this.e11; var d01_13 = this.e01 * this.e13 - this.e03 * this.e11; var d01_23 = this.e02 * this.e13 - this.e03 * this.e12; var d23_01 = this.e20 * this.e31 - this.e21 * this.e30; var d23_02 = this.e20 * this.e32 - this.e22 * this.e30; var d23_03 = this.e20 * this.e33 - this.e23 * this.e30; var d23_12 = this.e21 * this.e32 - this.e22 * this.e31; var d23_13 = this.e21 * this.e33 - this.e23 * this.e31; var d23_23 = this.e22 * this.e33 - this.e23 * this.e32; var d00 = this.e11 * d23_23 - this.e12 * d23_13 + this.e13 * d23_12; var d01 = this.e10 * d23_23 - this.e12 * d23_03 + this.e13 * d23_02; var d02 = this.e10 * d23_13 - this.e11 * d23_03 + this.e13 * d23_01; var d03 = this.e10 * d23_12 - this.e11 * d23_02 + this.e12 * d23_01; var d10 = this.e01 * d23_23 - this.e02 * d23_13 + this.e03 * d23_12; var d11 = this.e00 * d23_23 - this.e02 * d23_03 + this.e03 * d23_02; var d12 = this.e00 * d23_13 - this.e01 * d23_03 + this.e03 * d23_01; var d13 = this.e00 * d23_12 - this.e01 * d23_02 + this.e02 * d23_01; var d20 = this.e31 * d01_23 - this.e32 * d01_13 + this.e33 * d01_12; var d21 = this.e30 * d01_23 - this.e32 * d01_03 + this.e33 * d01_02; var d22 = this.e30 * d01_13 - this.e31 * d01_03 + this.e33 * d01_01; var d23 = this.e30 * d01_12 - this.e31 * d01_02 + this.e32 * d01_01; var d30 = this.e21 * d01_23 - this.e22 * d01_13 + this.e23 * d01_12; var d31 = this.e20 * d01_23 - this.e22 * d01_03 + this.e23 * d01_02; var d32 = this.e20 * d01_13 - this.e21 * d01_03 + this.e23 * d01_01; var d33 = this.e20 * d01_12 - this.e21 * d01_02 + this.e22 * d01_01; var invDet = this.e00 * d00 - this.e01 * d01 + this.e02 * d02 - this.e03 * d03; if(invDet != 0) { invDet = 1 / invDet; } var t00 = d00 * invDet; var t01 = -d10 * invDet; var t02 = d20 * invDet; var t03 = -d30 * invDet; var t10 = -d01 * invDet; var t11 = d11 * invDet; var t12 = -d21 * invDet; var t13 = d31 * invDet; var t20 = d02 * invDet; var t21 = -d12 * invDet; var t22 = d22 * invDet; var t23 = -d32 * invDet; var t30 = -d03 * invDet; var t31 = d13 * invDet; var t32 = -d23 * invDet; var t33 = d33 * invDet; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e03 = t03; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e13 = t13; this.e20 = t20; this.e21 = t21; this.e22 = t22; this.e23 = t23; this.e30 = t30; this.e31 = t31; this.e32 = t32; this.e33 = t33; return this; } lookAt(eyeX,eyeY,eyeZ,atX,atY,atZ,upX,upY,upZ) { var zx = eyeX - atX; var zy = eyeY - atY; var zz = eyeZ - atZ; var tmp = 1 / Math.sqrt(zx * zx + zy * zy + zz * zz); zx *= tmp; zy *= tmp; zz *= tmp; var xx = upY * zz - upZ * zy; var xy = upZ * zx - upX * zz; var xz = upX * zy - upY * zx; tmp = 1 / Math.sqrt(xx * xx + xy * xy + xz * xz); xx *= tmp; xy *= tmp; xz *= tmp; var yx = zy * xz - zz * xy; var yy = zz * xx - zx * xz; var yz = zx * xy - zy * xx; this.e00 = xx; this.e01 = xy; this.e02 = xz; this.e03 = -(xx * eyeX + xy * eyeY + xz * eyeZ); this.e10 = yx; this.e11 = yy; this.e12 = yz; this.e13 = -(yx * eyeX + yy * eyeY + yz * eyeZ); this.e20 = zx; this.e21 = zy; this.e22 = zz; this.e23 = -(zx * eyeX + zy * eyeY + zz * eyeZ); this.e30 = 0; this.e31 = 0; this.e32 = 0; this.e33 = 1; return this; } perspective(fovY,aspect,near,far) { var h = 1 / Math.tan(fovY * 0.5); var fnf = far / (near - far); this.e00 = h / aspect; this.e01 = 0; this.e02 = 0; this.e03 = 0; this.e10 = 0; this.e11 = h; this.e12 = 0; this.e13 = 0; this.e20 = 0; this.e21 = 0; this.e22 = fnf; this.e23 = near * fnf; this.e30 = 0; this.e31 = 0; this.e32 = -1; this.e33 = 0; return this; } ortho(width,height,near,far) { var nf = 1 / (near - far); this.e00 = 2 / width; this.e01 = 0; this.e02 = 0; this.e03 = 0; this.e10 = 0; this.e11 = 2 / height; this.e12 = 0; this.e13 = 0; this.e20 = 0; this.e21 = 0; this.e22 = nf; this.e23 = near * nf; this.e30 = 0; this.e31 = 0; this.e32 = 0; this.e33 = 1; return this; } toArray(columnMajor) { if(columnMajor == null) { columnMajor = false; } if(columnMajor) { return [this.e00,this.e10,this.e20,this.e30,this.e01,this.e11,this.e21,this.e31,this.e02,this.e12,this.e22,this.e32,this.e03,this.e13,this.e23,this.e33]; } else { return [this.e00,this.e01,this.e02,this.e03,this.e10,this.e11,this.e12,this.e13,this.e20,this.e21,this.e22,this.e23,this.e30,this.e31,this.e32,this.e33]; } } copyFrom(m) { this.e00 = m.e00; this.e01 = m.e01; this.e02 = m.e02; this.e03 = m.e03; this.e10 = m.e10; this.e11 = m.e11; this.e12 = m.e12; this.e13 = m.e13; this.e20 = m.e20; this.e21 = m.e21; this.e22 = m.e22; this.e23 = m.e23; this.e30 = m.e30; this.e31 = m.e31; this.e32 = m.e32; this.e33 = m.e33; return this; } fromMat3(m) { var t00 = m.e00; var t01 = m.e01; var t02 = m.e02; var t03 = 0; var t10 = m.e10; var t11 = m.e11; var t12 = m.e12; var t13 = 0; var t20 = m.e20; var t21 = m.e21; var t22 = m.e22; var t23 = 0; var t30 = 0; var t31 = 0; var t32 = 0; var t33 = 1; this.e00 = t00; this.e01 = t01; this.e02 = t02; this.e03 = t03; this.e10 = t10; this.e11 = t11; this.e12 = t12; this.e13 = t13; this.e20 = t20; this.e21 = t21; this.e22 = t22; this.e23 = t23; this.e30 = t30; this.e31 = t31; this.e32 = t32; this.e33 = t33; return this; } fromTransform(transform) { var m = this; m.e00 = transform._rotation00; m.e01 = transform._rotation01; m.e02 = transform._rotation02; m.e10 = transform._rotation10; m.e11 = transform._rotation11; m.e12 = transform._rotation12; m.e20 = transform._rotation20; m.e21 = transform._rotation21; m.e22 = transform._rotation22; m.e03 = transform._positionX; m.e13 = transform._positionY; m.e23 = transform._positionZ; m.e30 = 0; m.e31 = 0; m.e32 = 0; m.e33 = 1; return this; } clone() { return new oimo.common.Mat4(this.e00,this.e01,this.e02,this.e03,this.e10,this.e11,this.e12,this.e13,this.e20,this.e21,this.e22,this.e23,this.e30,this.e31,this.e32,this.e33); } toString() { return "Mat4[" + (this.e00 > 0 ? (this.e00 * 10000000 + 0.5 | 0) / 10000000 : (this.e00 * 10000000 - 0.5 | 0) / 10000000) + ", " + (this.e01 > 0 ? (this.e01 * 10000000 + 0.5 | 0) / 10000000 : (this.e01 * 10000000 - 0.5 | 0) / 10000000) + ", " + (this.e02 > 0 ? (this.e02 * 10000000 + 0.5 | 0) / 10000000 : (this.e02 * 10000000 - 0.5 | 0) / 10000000) + ", " + (this.e03 > 0 ? (this.e03 * 10000000 + 0.5 | 0) / 10000000 : (this.e03 * 10000000 - 0.5 | 0) / 10000000) + ",\n" + " " + (this.e10 > 0 ? (this.e10 * 10000000 + 0.5 | 0) / 10000000 : (this.e10 * 10000000 - 0.5 | 0) / 10000000) + ", " + (this.e11 > 0 ? (this.e11 * 10000000 + 0.5 | 0) / 10000000 : (this.e11 * 10000000 - 0.5 | 0) / 10000000) + ", " + (this.e12 > 0 ? (this.e12 * 10000000 + 0.5 | 0) / 10000000 : (this.e12 * 10000000 - 0.5 | 0) / 10000000) + ", " + (this.e13 > 0 ? (this.e13 * 10000000 + 0.5 | 0) / 10000000 : (this.e13 * 10000000 - 0.5 | 0) / 10000000) + ",\n" + " " + (this.e20 > 0 ? (this.e20 * 10000000 + 0.5 | 0) / 10000000 : (this.e20 * 10000000 - 0.5 | 0) / 10000000) + ", " + (this.e21 > 0 ? (this.e21 * 10000000 + 0.5 | 0) / 10000000 : (this.e21 * 10000000 - 0.5 | 0) / 10000000) + ", " + (this.e22 > 0 ? (this.e22 * 10000000 + 0.5 | 0) / 10000000 : (this.e22 * 10000000 - 0.5 | 0) / 10000000) + ", " + (this.e23 > 0 ? (this.e23 * 10000000 + 0.5 | 0) / 10000000 : (this.e23 * 10000000 - 0.5 | 0) / 10000000) + ",\n" + " " + (this.e30 > 0 ? (this.e30 * 10000000 + 0.5 | 0) / 10000000 : (this.e30 * 10000000 - 0.5 | 0) / 10000000) + ", " + (this.e31 > 0 ? (this.e31 * 10000000 + 0.5 | 0) / 10000000 : (this.e31 * 10000000 - 0.5 | 0) / 10000000) + ", " + (this.e32 > 0 ? (this.e32 * 10000000 + 0.5 | 0) / 10000000 : (this.e32 * 10000000 - 0.5 | 0) / 10000000) + ", " + (this.e33 > 0 ? (this.e33 * 10000000 + 0.5 | 0) / 10000000 : (this.e33 * 10000000 - 0.5 | 0) / 10000000) + "]"; } } oimo.common.MathUtil = class oimo_common_MathUtil { static abs(x) { if(x > 0) { return x; } else { return -x; } } static sin(x) { return Math.sin(x); } static cos(x) { return Math.cos(x); } static tan(x) { return Math.tan(x); } static asin(x) { return Math.asin(x); } static acos(x) { return Math.acos(x); } static atan(x) { return Math.atan(x); } static safeAsin(x) { if(x <= -1) { return -1.570796326794895; } if(x >= 1) { return 1.570796326794895; } return Math.asin(x); } static safeAcos(x) { if(x <= -1) { return 3.14159265358979; } if(x >= 1) { return 0; } return Math.acos(x); } static atan2(y,x) { return Math.atan2(y,x); } static sqrt(x) { return Math.sqrt(x); } static clamp(x,min,max) { if(x < min) { return min; } else if(x > max) { return max; } else { return x; } } static rand() { return Math.random(); } static randIn(min,max) { return min + Math.random() * (max - min); } static randVec3In(min,max) { return new oimo.common.Vec3(min + Math.random() * (max - min),min + Math.random() * (max - min),min + Math.random() * (max - min)); } static randVec3() { return new oimo.common.Vec3(-1 + Math.random() * 2,-1 + Math.random() * 2,-1 + Math.random() * 2); } } oimo.common.Pool = class oimo_common_Pool { constructor() { var this1 = new Array(256); this.stackVec3 = this1; this.sizeVec3 = 0; var this2 = new Array(256); this.stackMat3 = this2; this.sizeMat3 = 0; var this3 = new Array(256); this.stackMat4 = this3; this.sizeMat4 = 0; var this4 = new Array(256); this.stackQuat = this4; this.sizeQuat = 0; } vec3() { if(this.sizeVec3 == 0) { return new oimo.common.Vec3(); } else { return this.stackVec3[--this.sizeVec3]; } } mat3() { if(this.sizeMat3 == 0) { return new oimo.common.Mat3(); } else { return this.stackMat3[--this.sizeMat3]; } } mat4() { if(this.sizeMat4 == 0) { return new oimo.common.Mat4(); } else { return this.stackMat4[--this.sizeMat4]; } } quat() { if(this.sizeQuat == 0) { return new oimo.common.Quat(); } else { return this.stackQuat[--this.sizeQuat]; } } dispose(vec3,mat3,mat4,quat) { if(vec3 != null) { vec3.zero(); if(this.sizeVec3 == this.stackVec3.length) { var newLength = this.sizeVec3 << 1; var this1 = new Array(newLength); var newArray = this1; var _g = 0; var _g1 = this.sizeVec3; while(_g < _g1) { var i = _g++; newArray[i] = this.stackVec3[i]; this.stackVec3[i] = null; } this.stackVec3 = newArray; } this.stackVec3[this.sizeVec3++] = vec3; } if(mat3 != null) { var t00 = 1; var t01 = 0; var t02 = 0; var t10 = 0; var t11 = 1; var t12 = 0; var t20 = 0; var t21 = 0; var t22 = 1; mat3.e00 = t00; mat3.e01 = t01; mat3.e02 = t02; mat3.e10 = t10; mat3.e11 = t11; mat3.e12 = t12; mat3.e20 = t20; mat3.e21 = t21; mat3.e22 = t22; if(this.sizeMat3 == this.stackMat3.length) { var newLength1 = this.sizeMat3 << 1; var this2 = new Array(newLength1); var newArray1 = this2; var _g2 = 0; var _g11 = this.sizeMat3; while(_g2 < _g11) { var i1 = _g2++; newArray1[i1] = this.stackMat3[i1]; this.stackMat3[i1] = null; } this.stackMat3 = newArray1; } this.stackMat3[this.sizeMat3++] = mat3; } if(mat4 != null) { var t001 = 1; var t011 = 0; var t021 = 0; var t03 = 0; var t101 = 0; var t111 = 1; var t121 = 0; var t13 = 0; var t201 = 0; var t211 = 0; var t221 = 1; var t23 = 0; var t30 = 0; var t31 = 0; var t32 = 0; var t33 = 1; mat4.e00 = t001; mat4.e01 = t011; mat4.e02 = t021; mat4.e03 = t03; mat4.e10 = t101; mat4.e11 = t111; mat4.e12 = t121; mat4.e13 = t13; mat4.e20 = t201; mat4.e21 = t211; mat4.e22 = t221; mat4.e23 = t23; mat4.e30 = t30; mat4.e31 = t31; mat4.e32 = t32; mat4.e33 = t33; if(this.sizeMat4 == this.stackMat4.length) { var newLength2 = this.sizeMat4 << 1; var this3 = new Array(newLength2); var newArray2 = this3; var _g3 = 0; var _g12 = this.sizeMat4; while(_g3 < _g12) { var i2 = _g3++; newArray2[i2] = this.stackMat4[i2]; this.stackMat4[i2] = null; } this.stackMat4 = newArray2; } this.stackMat4[this.sizeMat4++] = mat4; } if(quat != null) { var tx = 0; var ty = 0; var tz = 0; var tw = 1; quat.x = tx; quat.y = ty; quat.z = tz; quat.w = tw; if(this.sizeQuat == this.stackQuat.length) { var newLength3 = this.sizeQuat << 1; var this4 = new Array(newLength3); var newArray3 = this4; var _g4 = 0; var _g13 = this.sizeQuat; while(_g4 < _g13) { var i3 = _g4++; newArray3[i3] = this.stackQuat[i3]; this.stackQuat[i3] = null; } this.stackQuat = newArray3; } this.stackQuat[this.sizeQuat++] = quat; } } disposeVec3(v) { v.zero(); if(this.sizeVec3 == this.stackVec3.length) { var newLength = this.sizeVec3 << 1; var this1 = new Array(newLength); var newArray = this1; var _g = 0; var _g1 = this.sizeVec3; while(_g < _g1) { var i = _g++; newArray[i] = this.stackVec3[i]; this.stackVec3[i] = null; } this.stackVec3 = newArray; } this.stackVec3[this.sizeVec3++] = v; } disposeMat3(m) { var t00 = 1; var t01 = 0; var t02 = 0; var t10 = 0; var t11 = 1; var t12 = 0; var t20 = 0; var t21 = 0; var t22 = 1; m.e00 = t00; m.e01 = t01; m.e02 = t02; m.e10 = t10; m.e11 = t11; m.e12 = t12; m.e20 = t20; m.e21 = t21; m.e22 = t22; if(this.sizeMat3 == this.stackMat3.length) { var newLength = this.sizeMat3 << 1; var this1 = new Array(newLength); var newArray = this1; var _g = 0; var _g1 = this.sizeMat3; while(_g < _g1) { var i = _g++; newArray[i] = this.stackMat3[i]; this.stackMat3[i] = null; } this.stackMat3 = newArray; } this.stackMat3[this.sizeMat3++] = m; } disposeMat4(m) { var t00 = 1; var t01 = 0; var t02 = 0; var t03 = 0; var t10 = 0; var t11 = 1; var t12 = 0; var t13 = 0; var t20 = 0; var t21 = 0; var t22 = 1; var t23 = 0; var t30 = 0; var t31 = 0; var t32 = 0; var t33 = 1; m.e00 = t00; m.e01 = t01; m.e02 = t02; m.e03 = t03; m.e10 = t10; m.e11 = t11; m.e12 = t12; m.e13 = t13; m.e20 = t20; m.e21 = t21; m.e22 = t22; m.e23 = t23; m.e30 = t30; m.e31 = t31; m.e32 = t32; m.e33 = t33; if(this.sizeMat4 == this.stackMat4.length) { var newLength = this.sizeMat4 << 1; var this1 = new Array(newLength); var newArray = this1; var _g = 0; var _g1 = this.sizeMat4; while(_g < _g1) { var i = _g++; newArray[i] = this.stackMat4[i]; this.stackMat4[i] = null; } this.stackMat4 = newArray; } this.stackMat4[this.sizeMat4++] = m; } disposeQuat(q) { var tx = 0; var ty = 0; var tz = 0; var tw = 1; q.x = tx; q.y = ty; q.z = tz; q.w = tw; if(this.sizeQuat == this.stackQuat.length) { var newLength = this.sizeQuat << 1; var this1 = new Array(newLength); var newArray = this1; var _g = 0; var _g1 = this.sizeQuat; while(_g < _g1) { var i = _g++; newArray[i] = this.stackQuat[i]; this.stackQuat[i] = null; } this.stackQuat = newArray; } this.stackQuat[this.sizeQuat++] = q; } } oimo.common.Quat = class oimo_common_Quat { constructor(x,y,z,w) { if(w == null) { w = 1; } if(z == null) { z = 0; } if(y == null) { y = 0; } if(x == null) { x = 0; } this.x = x; this.y = y; this.z = z; this.w = w; oimo.common.Quat.numCreations++; } identity() { var tx = 0; var ty = 0; var tz = 0; var tw = 1; this.x = tx; this.y = ty; this.z = tz; this.w = tw; return this; } init(x,y,z,w) { this.x = x; this.y = y; this.z = z; this.w = w; return this; } add(q) { return new oimo.common.Quat(this.x + q.x,this.y + q.y,this.z + q.z,this.w + q.w); } sub(q) { return new oimo.common.Quat(this.x - q.x,this.y - q.y,this.z - q.z,this.w - q.w); } scale(s) { return new oimo.common.Quat(this.x * s,this.y * s,this.z * s,this.w * s); } addEq(q) { var tx = this.x + q.x; var ty = this.y + q.y; var tz = this.z + q.z; var tw = this.w + q.w; this.x = tx; this.y = ty; this.z = tz; this.w = tw; return this; } subEq(q) { var tx = this.x - q.x; var ty = this.y - q.y; var tz = this.z - q.z; var tw = this.w - q.w; this.x = tx; this.y = ty; this.z = tz; this.w = tw; return this; } scaleEq(s) { var tx = this.x * s; var ty = this.y * s; var tz = this.z * s; var tw = this.w * s; this.x = tx; this.y = ty; this.z = tz; this.w = tw; return this; } length() { return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w); } lengthSq() { return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w; } dot(q) { return this.x * q.x + this.y * q.y + this.z * q.z + this.w * q.w; } normalized() { var invLen = Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w); if(invLen > 0) { invLen = 1 / invLen; } return new oimo.common.Quat(this.x * invLen,this.y * invLen,this.z * invLen,this.w * invLen); } normalize() { var invLen = Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w); if(invLen > 0) { invLen = 1 / invLen; } var tx = this.x * invLen; var ty = this.y * invLen; var tz = this.z * invLen; var tw = this.w * invLen; this.x = tx; this.y = ty; this.z = tz; this.w = tw; return this; } setArc(v1,v2) { var x1 = v1.x; var y1 = v1.y; var z1 = v1.z; var x2 = v2.x; var y2 = v2.y; var z2 = v2.z; var d = x1 * x2 + y1 * y2 + z1 * z2; this.w = Math.sqrt((1 + d) * 0.5); if(this.w == 0) { x2 = x1 * x1; y2 = y1 * y1; z2 = z1 * z1; if(x2 < y2) { if(x2 < z2) { d = 1 / Math.sqrt(y2 + z2); this.x = 0; this.y = z1 * d; this.z = -y1 * d; } else { d = 1 / Math.sqrt(x2 + y2); this.z = 0; this.x = y1 * d; this.y = -x1 * d; } } else if(y2 < z2) { d = 1 / Math.sqrt(z2 + x2); this.y = 0; this.z = x1 * d; this.x = -z1 * d; } else { d = 1 / Math.sqrt(x2 + y2); this.z = 0; this.x = y1 * d; this.y = -x1 * d; } return this; } d = 0.5 / this.w; var cx = y1 * z2 - z1 * y2; var cy = z1 * x2 - x1 * z2; var cz = x1 * y2 - y1 * x2; this.x = cx * d; this.y = cy * d; this.z = cz * d; return this; } slerp(q,t) { var qx; var qy; var qz; var qw; var d = this.x * q.x + this.y * q.y + this.z * q.z + this.w * q.w; if(d < 0) { d = -d; qx = -q.x; qy = -q.y; qz = -q.z; qw = -q.w; } else { qx = q.x; qy = q.y; qz = q.z; qw = q.w; } if(d > 0.999999) { var _this = new oimo.common.Quat(this.x + (qx - this.x) * t,this.y + (qy - this.y) * t,this.z + (qz - this.z) * t,this.w + (qw - this.w) * t); var invLen = Math.sqrt(_this.x * _this.x + _this.y * _this.y + _this.z * _this.z + _this.w * _this.w); if(invLen > 0) { invLen = 1 / invLen; } var tx = _this.x * invLen; var ty = _this.y * invLen; var tz = _this.z * invLen; var tw = _this.w * invLen; _this.x = tx; _this.y = ty; _this.z = tz; _this.w = tw; return _this; } var theta = t * Math.acos(d); qx -= this.x * d; qy -= this.y * d; qz -= this.z * d; qw -= this.w * d; var invLen1 = 1 / Math.sqrt(qx * qx + qy * qy + qz * qz + qw * qw); qx *= invLen1; qy *= invLen1; qz *= invLen1; qw *= invLen1; var sin = Math.sin(theta); var cos = Math.cos(theta); return new oimo.common.Quat(this.x * cos + qx * sin,this.y * cos + qy * sin,this.z * cos + qz * sin,this.w * cos + qw * sin); } copyFrom(q) { this.x = q.x; this.y = q.y; this.z = q.z; this.w = q.w; return this; } clone() { return new oimo.common.Quat(this.x,this.y,this.z,this.w); } fromMat3(m) { var e00 = m.e00; var e11 = m.e11; var e22 = m.e22; var t = e00 + e11 + e22; var s; if(t > 0) { s = Math.sqrt(t + 1); this.w = 0.5 * s; s = 0.5 / s; this.x = (m.e21 - m.e12) * s; this.y = (m.e02 - m.e20) * s; this.z = (m.e10 - m.e01) * s; } else if(e00 > e11) { if(e00 > e22) { s = Math.sqrt(e00 - e11 - e22 + 1); this.x = 0.5 * s; s = 0.5 / s; this.y = (m.e01 + m.e10) * s; this.z = (m.e02 + m.e20) * s; this.w = (m.e21 - m.e12) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); this.z = 0.5 * s; s = 0.5 / s; this.x = (m.e02 + m.e20) * s; this.y = (m.e12 + m.e21) * s; this.w = (m.e10 - m.e01) * s; } } else if(e11 > e22) { s = Math.sqrt(e11 - e22 - e00 + 1); this.y = 0.5 * s; s = 0.5 / s; this.x = (m.e01 + m.e10) * s; this.z = (m.e12 + m.e21) * s; this.w = (m.e02 - m.e20) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); this.z = 0.5 * s; s = 0.5 / s; this.x = (m.e02 + m.e20) * s; this.y = (m.e12 + m.e21) * s; this.w = (m.e10 - m.e01) * s; } return this; } toMat3() { var _this = new oimo.common.Mat3(); var x = this.x; var y = this.y; var z = this.z; var w = this.w; var x2 = 2 * x; var y2 = 2 * y; var z2 = 2 * z; var xx = x * x2; var yy = y * y2; var zz = z * z2; var xy = x * y2; var yz = y * z2; var xz = x * z2; var wx = w * x2; var wy = w * y2; var wz = w * z2; _this.e00 = 1 - yy - zz; _this.e01 = xy - wz; _this.e02 = xz + wy; _this.e10 = xy + wz; _this.e11 = 1 - xx - zz; _this.e12 = yz - wx; _this.e20 = xz - wy; _this.e21 = yz + wx; _this.e22 = 1 - xx - yy; return _this; } toString() { return "Quat[" + (this.x > 0 ? (this.x * 10000000 + 0.5 | 0) / 10000000 : (this.x * 10000000 - 0.5 | 0) / 10000000) + " i,\n" + " " + (this.y > 0 ? (this.y * 10000000 + 0.5 | 0) / 10000000 : (this.y * 10000000 - 0.5 | 0) / 10000000) + " j,\n" + " " + (this.z > 0 ? (this.z * 10000000 + 0.5 | 0) / 10000000 : (this.z * 10000000 - 0.5 | 0) / 10000000) + " k,\n" + " " + (this.w > 0 ? (this.w * 10000000 + 0.5 | 0) / 10000000 : (this.w * 10000000 - 0.5 | 0) / 10000000) + "]"; } } if(!oimo.dynamics) oimo.dynamics = {}; oimo.dynamics.Contact = class oimo_dynamics_Contact { constructor() { this._next = null; this._prev = null; this._link1 = new oimo.dynamics.ContactLink(); this._link2 = new oimo.dynamics.ContactLink(); this._s1 = null; this._s2 = null; this._b1 = null; this._b2 = null; this._detector = null; this._cachedDetectorData = new oimo.collision.narrowphase.detector.CachedDetectorData(); this._detectorResult = new oimo.collision.narrowphase.DetectorResult(); this._latest = false; this._shouldBeSkipped = false; this._manifold = new oimo.dynamics.constraint.contact.Manifold(); this._updater = new oimo.dynamics.constraint.contact.ManifoldUpdater(this._manifold); this._contactConstraint = new oimo.dynamics.constraint.contact.ContactConstraint(this._manifold); this._touching = false; } _updateManifold() { if(this._detector == null) { return; } var ptouching = this._touching; var result = this._detectorResult; this._detector.detect(result,this._s1._geom,this._s2._geom,this._s1._transform,this._s2._transform,this._cachedDetectorData); var num = result.numPoints; this._touching = num > 0; if(this._touching) { this._manifold._buildBasis(result.normal); if(result.getMaxDepth() > oimo.common.Setting.contactUseAlternativePositionCorrectionAlgorithmDepthThreshold) { this._contactConstraint._positionCorrectionAlgorithm = oimo.common.Setting.alternativeContactPositionCorrectionAlgorithm; } else { this._contactConstraint._positionCorrectionAlgorithm = oimo.common.Setting.defaultContactPositionCorrectionAlgorithm; } if(result.incremental) { this._updater.incrementalUpdate(result,this._b1._transform,this._b2._transform); } else { this._updater.totalUpdate(result,this._b1._transform,this._b2._transform); } } else { this._manifold._clear(); } if(this._touching && !ptouching) { var cc1 = this._s1._contactCallback; var cc2 = this._s2._contactCallback; if(cc1 == cc2) { cc2 = null; } if(cc1 != null) { cc1.beginContact(this); } if(cc2 != null) { cc2.beginContact(this); } } if(!this._touching && ptouching) { var cc11 = this._s1._contactCallback; var cc21 = this._s2._contactCallback; if(cc11 == cc21) { cc21 = null; } if(cc11 != null) { cc11.endContact(this); } if(cc21 != null) { cc21.endContact(this); } } if(this._touching) { var cc12 = this._s1._contactCallback; var cc22 = this._s2._contactCallback; if(cc12 == cc22) { cc22 = null; } if(cc12 != null) { cc12.preSolve(this); } if(cc22 != null) { cc22.preSolve(this); } } } _postSolve() { var cc1 = this._s1._contactCallback; var cc2 = this._s2._contactCallback; if(cc1 == cc2) { cc2 = null; } if(cc1 != null) { cc1.postSolve(this); } if(cc2 != null) { cc2.postSolve(this); } } getShape1() { return this._s1; } getShape2() { return this._s2; } isTouching() { return this._touching; } getManifold() { return this._manifold; } getContactConstraint() { return this._contactConstraint; } getPrev() { return this._prev; } getNext() { return this._next; } } oimo.dynamics.ContactLink = class oimo_dynamics_ContactLink { constructor() { this._prev = null; this._next = null; this._contact = null; this._other = null; } getContact() { return this._contact; } getOther() { return this._other; } getPrev() { return this._prev; } getNext() { return this._next; } } oimo.dynamics.ContactManager = class oimo_dynamics_ContactManager { constructor(broadPhase) { this._broadPhase = broadPhase; this._collisionMatrix = new oimo.collision.narrowphase.CollisionMatrix(); this._numContacts = 0; } createContacts() { var pp = this._broadPhase._proxyPairList; while(pp != null) { var n = pp._next; while(true) { var s1; var s2; if(pp._p1._id < pp._p2._id) { s1 = pp._p1.userData; s2 = pp._p2.userData; } else { s1 = pp._p2.userData; s2 = pp._p1.userData; } if(!this.shouldCollide(s1,s2)) { break; } var b1 = s1._rigidBody; var b2 = s2._rigidBody; var n1 = b1._numContactLinks; var n2 = b2._numContactLinks; var l; if(n1 < n2) { l = b1._contactLinkList; } else { l = b2._contactLinkList; } var id1 = s1._id; var id2 = s2._id; var found = false; while(l != null) { var n3 = l._next; var c = l._contact; if(c._s1._id == id1 && c._s2._id == id2) { c._latest = true; found = true; break; } l = n3; } if(!found) { var first = this._contactPool; if(first != null) { this._contactPool = first._next; first._next = null; } else { first = new oimo.dynamics.Contact(); } var c1 = first; if(this._contactList == null) { this._contactList = c1; this._contactListLast = c1; } else { this._contactListLast._next = c1; c1._prev = this._contactListLast; this._contactListLast = c1; } c1._latest = true; var detector = this._collisionMatrix.detectors[s1._geom._type][s2._geom._type]; c1._s1 = s1; c1._s2 = s2; c1._b1 = s1._rigidBody; c1._b2 = s2._rigidBody; c1._touching = false; if(c1._b1._contactLinkList == null) { c1._b1._contactLinkList = c1._link1; c1._b1._contactLinkListLast = c1._link1; } else { c1._b1._contactLinkListLast._next = c1._link1; c1._link1._prev = c1._b1._contactLinkListLast; c1._b1._contactLinkListLast = c1._link1; } if(c1._b2._contactLinkList == null) { c1._b2._contactLinkList = c1._link2; c1._b2._contactLinkListLast = c1._link2; } else { c1._b2._contactLinkListLast._next = c1._link2; c1._link2._prev = c1._b2._contactLinkListLast; c1._b2._contactLinkListLast = c1._link2; } c1._b1._numContactLinks++; c1._b2._numContactLinks++; c1._link1._other = c1._b2; c1._link2._other = c1._b1; c1._link1._contact = c1; c1._link2._contact = c1; c1._detector = detector; var _this = c1._contactConstraint; _this._s1 = s1; _this._s2 = s2; _this._b1 = _this._s1._rigidBody; _this._b2 = _this._s2._rigidBody; _this._tf1 = _this._b1._transform; _this._tf2 = _this._b2._transform; this._numContacts++; } if(!false) { break; } } pp = n; } } destroyOutdatedContacts() { var incremental = this._broadPhase._incremental; var c = this._contactList; while(c != null) { var n = c._next; while(true) { if(c._latest) { c._latest = false; c._shouldBeSkipped = false; break; } if(!incremental) { var prev = c._prev; var next = c._next; if(prev != null) { prev._next = next; } if(next != null) { next._prev = prev; } if(c == this._contactList) { this._contactList = this._contactList._next; } if(c == this._contactListLast) { this._contactListLast = this._contactListLast._prev; } c._next = null; c._prev = null; if(c._touching) { var cc1 = c._s1._contactCallback; var cc2 = c._s2._contactCallback; if(cc1 == cc2) { cc2 = null; } if(cc1 != null) { cc1.endContact(c); } if(cc2 != null) { cc2.endContact(c); } } var prev1 = c._link1._prev; var next1 = c._link1._next; if(prev1 != null) { prev1._next = next1; } if(next1 != null) { next1._prev = prev1; } if(c._link1 == c._b1._contactLinkList) { c._b1._contactLinkList = c._b1._contactLinkList._next; } if(c._link1 == c._b1._contactLinkListLast) { c._b1._contactLinkListLast = c._b1._contactLinkListLast._prev; } c._link1._next = null; c._link1._prev = null; var prev2 = c._link2._prev; var next2 = c._link2._next; if(prev2 != null) { prev2._next = next2; } if(next2 != null) { next2._prev = prev2; } if(c._link2 == c._b2._contactLinkList) { c._b2._contactLinkList = c._b2._contactLinkList._next; } if(c._link2 == c._b2._contactLinkListLast) { c._b2._contactLinkListLast = c._b2._contactLinkListLast._prev; } c._link2._next = null; c._link2._prev = null; c._b1._numContactLinks--; c._b2._numContactLinks--; c._link1._other = null; c._link2._other = null; c._link1._contact = null; c._link2._contact = null; c._s1 = null; c._s2 = null; c._b1 = null; c._b2 = null; c._touching = false; c._cachedDetectorData._clear(); c._manifold._clear(); c._detector = null; var _this = c._contactConstraint; _this._s1 = null; _this._s2 = null; _this._b1 = null; _this._b2 = null; _this._tf1 = null; _this._tf2 = null; c._next = this._contactPool; this._contactPool = c; this._numContacts--; break; } var s1 = c._s1; var s2 = c._s2; var r1 = s1._rigidBody; var r2 = s2._rigidBody; var active1 = !r1._sleeping && r1._type != 1; var active2 = !r2._sleeping && r2._type != 1; if(!active1 && !active2) { c._shouldBeSkipped = true; break; } var aabb1 = s1._aabb; var aabb2 = s2._aabb; var proxy1 = s1._proxy; var proxy2 = s2._proxy; if(!(proxy1._aabbMinX < proxy2._aabbMaxX && proxy1._aabbMaxX > proxy2._aabbMinX && proxy1._aabbMinY < proxy2._aabbMaxY && proxy1._aabbMaxY > proxy2._aabbMinY && proxy1._aabbMinZ < proxy2._aabbMaxZ && proxy1._aabbMaxZ > proxy2._aabbMinZ) || !this.shouldCollide(s1,s2)) { var prev3 = c._prev; var next3 = c._next; if(prev3 != null) { prev3._next = next3; } if(next3 != null) { next3._prev = prev3; } if(c == this._contactList) { this._contactList = this._contactList._next; } if(c == this._contactListLast) { this._contactListLast = this._contactListLast._prev; } c._next = null; c._prev = null; if(c._touching) { var cc11 = c._s1._contactCallback; var cc21 = c._s2._contactCallback; if(cc11 == cc21) { cc21 = null; } if(cc11 != null) { cc11.endContact(c); } if(cc21 != null) { cc21.endContact(c); } } var prev4 = c._link1._prev; var next4 = c._link1._next; if(prev4 != null) { prev4._next = next4; } if(next4 != null) { next4._prev = prev4; } if(c._link1 == c._b1._contactLinkList) { c._b1._contactLinkList = c._b1._contactLinkList._next; } if(c._link1 == c._b1._contactLinkListLast) { c._b1._contactLinkListLast = c._b1._contactLinkListLast._prev; } c._link1._next = null; c._link1._prev = null; var prev5 = c._link2._prev; var next5 = c._link2._next; if(prev5 != null) { prev5._next = next5; } if(next5 != null) { next5._prev = prev5; } if(c._link2 == c._b2._contactLinkList) { c._b2._contactLinkList = c._b2._contactLinkList._next; } if(c._link2 == c._b2._contactLinkListLast) { c._b2._contactLinkListLast = c._b2._contactLinkListLast._prev; } c._link2._next = null; c._link2._prev = null; c._b1._numContactLinks--; c._b2._numContactLinks--; c._link1._other = null; c._link2._other = null; c._link1._contact = null; c._link2._contact = null; c._s1 = null; c._s2 = null; c._b1 = null; c._b2 = null; c._touching = false; c._cachedDetectorData._clear(); c._manifold._clear(); c._detector = null; var _this1 = c._contactConstraint; _this1._s1 = null; _this1._s2 = null; _this1._b1 = null; _this1._b2 = null; _this1._tf1 = null; _this1._tf2 = null; c._next = this._contactPool; this._contactPool = c; this._numContacts--; break; } var aabbOverlapping = aabb1._minX < aabb2._maxX && aabb1._maxX > aabb2._minX && aabb1._minY < aabb2._maxY && aabb1._maxY > aabb2._minY && aabb1._minZ < aabb2._maxZ && aabb1._maxZ > aabb2._minZ; c._shouldBeSkipped = !aabbOverlapping; if(!false) { break; } } c = n; } } shouldCollide(s1,s2) { var r1 = s1._rigidBody; var r2 = s2._rigidBody; if(r1 == r2) { return false; } if(r1._type != 0 && r2._type != 0) { return false; } if((s1._collisionGroup & s2._collisionMask) == 0 || (s2._collisionGroup & s1._collisionMask) == 0) { return false; } var jl; var other; if(r1._numJointLinks < r2._numJointLinks) { jl = r1._jointLinkList; other = r2; } else { jl = r2._jointLinkList; other = r1; } while(jl != null) { var n = jl._next; if(jl._other == other && !jl._joint._allowCollision) { return false; } jl = n; } return true; } _updateContacts() { this._broadPhase.collectPairs(); this.createContacts(); this.destroyOutdatedContacts(); } _postSolve() { var c = this._contactList; while(c != null) { var n = c._next; if(c._touching) { c._postSolve(); } c = n; } } getNumContacts() { return this._numContacts; } getContactList() { return this._contactList; } } oimo.dynamics.Island = class oimo_dynamics_Island { constructor() { var this1 = new Array(oimo.common.Setting.islandInitialRigidBodyArraySize); this.rigidBodies = this1; var this2 = new Array(oimo.common.Setting.islandInitialConstraintArraySize); this.solvers = this2; var this3 = new Array(oimo.common.Setting.islandInitialConstraintArraySize); this.solversSi = this3; var this4 = new Array(oimo.common.Setting.islandInitialConstraintArraySize); this.solversNgs = this4; this.numRigidBodies = 0; this.numSolvers = 0; this.numSolversSi = 0; this.numSolversNgs = 0; } _clear() { while(this.numRigidBodies > 0) this.rigidBodies[--this.numRigidBodies] = null; while(this.numSolvers > 0) this.solvers[--this.numSolvers] = null; while(this.numSolversSi > 0) this.solversSi[--this.numSolversSi] = null; while(this.numSolversNgs > 0) this.solversNgs[--this.numSolversNgs] = null; } _addRigidBody(rigidBody) { if(this.numRigidBodies == this.rigidBodies.length) { var newLength = this.numRigidBodies << 1; var this1 = new Array(newLength); var newArray = this1; var _g = 0; var _g1 = this.numRigidBodies; while(_g < _g1) { var i = _g++; newArray[i] = this.rigidBodies[i]; this.rigidBodies[i] = null; } this.rigidBodies = newArray; } rigidBody._addedToIsland = true; this.rigidBodies[this.numRigidBodies++] = rigidBody; } _addConstraintSolver(solver,positionCorrection) { if(this.numSolvers == this.solvers.length) { var newLength = this.numSolvers << 1; var this1 = new Array(newLength); var newArray = this1; var _g = 0; var _g1 = this.numSolvers; while(_g < _g1) { var i = _g++; newArray[i] = this.solvers[i]; this.solvers[i] = null; } this.solvers = newArray; } solver._addedToIsland = true; this.solvers[this.numSolvers++] = solver; if(positionCorrection == oimo.dynamics.constraint.PositionCorrectionAlgorithm.SPLIT_IMPULSE) { if(this.numSolversSi == this.solversSi.length) { var newLength1 = this.numSolversSi << 1; var this2 = new Array(newLength1); var newArray1 = this2; var _g2 = 0; var _g11 = this.numSolversSi; while(_g2 < _g11) { var i1 = _g2++; newArray1[i1] = this.solversSi[i1]; this.solversSi[i1] = null; } this.solversSi = newArray1; } this.solversSi[this.numSolversSi++] = solver; } if(positionCorrection == oimo.dynamics.constraint.PositionCorrectionAlgorithm.NGS) { if(this.numSolversNgs == this.solversNgs.length) { var newLength2 = this.numSolversNgs << 1; var this3 = new Array(newLength2); var newArray2 = this3; var _g3 = 0; var _g12 = this.numSolversNgs; while(_g3 < _g12) { var i2 = _g3++; newArray2[i2] = this.solversNgs[i2]; this.solversNgs[i2] = null; } this.solversNgs = newArray2; } this.solversNgs[this.numSolversNgs++] = solver; } } _stepSingleRigidBody(timeStep,rb) { var dt = timeStep.dt; var dst = rb._ptransform; var src = rb._transform; dst._positionX = src._positionX; dst._positionY = src._positionY; dst._positionZ = src._positionZ; dst._rotation00 = src._rotation00; dst._rotation01 = src._rotation01; dst._rotation02 = src._rotation02; dst._rotation10 = src._rotation10; dst._rotation11 = src._rotation11; dst._rotation12 = src._rotation12; dst._rotation20 = src._rotation20; dst._rotation21 = src._rotation21; dst._rotation22 = src._rotation22; rb._linearContactImpulseX = 0; rb._linearContactImpulseY = 0; rb._linearContactImpulseZ = 0; rb._angularContactImpulseX = 0; rb._angularContactImpulseY = 0; rb._angularContactImpulseZ = 0; if(rb._autoSleep && rb._velX * rb._velX + rb._velY * rb._velY + rb._velZ * rb._velZ < oimo.common.Setting.sleepingVelocityThreshold * oimo.common.Setting.sleepingVelocityThreshold && rb._angVelX * rb._angVelX + rb._angVelY * rb._angVelY + rb._angVelZ * rb._angVelZ < oimo.common.Setting.sleepingAngularVelocityThreshold * oimo.common.Setting.sleepingAngularVelocityThreshold) { rb._sleepTime += dt; if(rb._sleepTime > oimo.common.Setting.sleepingTimeThreshold) { rb._sleeping = true; rb._sleepTime = 0; } } else { rb._sleepTime = 0; } if(!rb._sleeping) { if(rb._type == 0) { var x = dt * rb._linearDamping; var x2 = x * x; var linScale = 1 / (1 + x + x2 * (0.5 + x * 0.166666666666666657 + x2 * 0.0416666666666666644)); var x1 = dt * rb._angularDamping; var x21 = x1 * x1; var angScale = 1 / (1 + x1 + x21 * (0.5 + x1 * 0.166666666666666657 + x21 * 0.0416666666666666644)); var linAcc; var linAccX; var linAccY; var linAccZ; var angAcc; var angAccX; var angAccY; var angAccZ; linAccX = this.gravityX * rb._gravityScale; linAccY = this.gravityY * rb._gravityScale; linAccZ = this.gravityZ * rb._gravityScale; linAccX += rb._forceX * rb._invMass; linAccY += rb._forceY * rb._invMass; linAccZ += rb._forceZ * rb._invMass; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = rb._invInertia00 * rb._torqueX + rb._invInertia01 * rb._torqueY + rb._invInertia02 * rb._torqueZ; __tmp__Y = rb._invInertia10 * rb._torqueX + rb._invInertia11 * rb._torqueY + rb._invInertia12 * rb._torqueZ; __tmp__Z = rb._invInertia20 * rb._torqueX + rb._invInertia21 * rb._torqueY + rb._invInertia22 * rb._torqueZ; angAccX = __tmp__X; angAccY = __tmp__Y; angAccZ = __tmp__Z; rb._velX += linAccX * dt; rb._velY += linAccY * dt; rb._velZ += linAccZ * dt; rb._velX *= linScale; rb._velY *= linScale; rb._velZ *= linScale; rb._angVelX += angAccX * dt; rb._angVelY += angAccY * dt; rb._angVelZ += angAccZ * dt; rb._angVelX *= angScale; rb._angVelY *= angScale; rb._angVelZ *= angScale; } rb._integrate(dt); var s = rb._shapeList; while(s != null) { var n = s._next; var dst1 = s._ptransform; var src1 = s._localTransform; var src2 = rb._ptransform; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = src2._rotation00 * src1._rotation00 + src2._rotation01 * src1._rotation10 + src2._rotation02 * src1._rotation20; __tmp__01 = src2._rotation00 * src1._rotation01 + src2._rotation01 * src1._rotation11 + src2._rotation02 * src1._rotation21; __tmp__02 = src2._rotation00 * src1._rotation02 + src2._rotation01 * src1._rotation12 + src2._rotation02 * src1._rotation22; __tmp__10 = src2._rotation10 * src1._rotation00 + src2._rotation11 * src1._rotation10 + src2._rotation12 * src1._rotation20; __tmp__11 = src2._rotation10 * src1._rotation01 + src2._rotation11 * src1._rotation11 + src2._rotation12 * src1._rotation21; __tmp__12 = src2._rotation10 * src1._rotation02 + src2._rotation11 * src1._rotation12 + src2._rotation12 * src1._rotation22; __tmp__20 = src2._rotation20 * src1._rotation00 + src2._rotation21 * src1._rotation10 + src2._rotation22 * src1._rotation20; __tmp__21 = src2._rotation20 * src1._rotation01 + src2._rotation21 * src1._rotation11 + src2._rotation22 * src1._rotation21; __tmp__22 = src2._rotation20 * src1._rotation02 + src2._rotation21 * src1._rotation12 + src2._rotation22 * src1._rotation22; dst1._rotation00 = __tmp__00; dst1._rotation01 = __tmp__01; dst1._rotation02 = __tmp__02; dst1._rotation10 = __tmp__10; dst1._rotation11 = __tmp__11; dst1._rotation12 = __tmp__12; dst1._rotation20 = __tmp__20; dst1._rotation21 = __tmp__21; dst1._rotation22 = __tmp__22; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = src2._rotation00 * src1._positionX + src2._rotation01 * src1._positionY + src2._rotation02 * src1._positionZ; __tmp__Y1 = src2._rotation10 * src1._positionX + src2._rotation11 * src1._positionY + src2._rotation12 * src1._positionZ; __tmp__Z1 = src2._rotation20 * src1._positionX + src2._rotation21 * src1._positionY + src2._rotation22 * src1._positionZ; dst1._positionX = __tmp__X1; dst1._positionY = __tmp__Y1; dst1._positionZ = __tmp__Z1; dst1._positionX += src2._positionX; dst1._positionY += src2._positionY; dst1._positionZ += src2._positionZ; var dst2 = s._transform; var src11 = s._localTransform; var src21 = rb._transform; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = src21._rotation00 * src11._rotation00 + src21._rotation01 * src11._rotation10 + src21._rotation02 * src11._rotation20; __tmp__011 = src21._rotation00 * src11._rotation01 + src21._rotation01 * src11._rotation11 + src21._rotation02 * src11._rotation21; __tmp__021 = src21._rotation00 * src11._rotation02 + src21._rotation01 * src11._rotation12 + src21._rotation02 * src11._rotation22; __tmp__101 = src21._rotation10 * src11._rotation00 + src21._rotation11 * src11._rotation10 + src21._rotation12 * src11._rotation20; __tmp__111 = src21._rotation10 * src11._rotation01 + src21._rotation11 * src11._rotation11 + src21._rotation12 * src11._rotation21; __tmp__121 = src21._rotation10 * src11._rotation02 + src21._rotation11 * src11._rotation12 + src21._rotation12 * src11._rotation22; __tmp__201 = src21._rotation20 * src11._rotation00 + src21._rotation21 * src11._rotation10 + src21._rotation22 * src11._rotation20; __tmp__211 = src21._rotation20 * src11._rotation01 + src21._rotation21 * src11._rotation11 + src21._rotation22 * src11._rotation21; __tmp__221 = src21._rotation20 * src11._rotation02 + src21._rotation21 * src11._rotation12 + src21._rotation22 * src11._rotation22; dst2._rotation00 = __tmp__001; dst2._rotation01 = __tmp__011; dst2._rotation02 = __tmp__021; dst2._rotation10 = __tmp__101; dst2._rotation11 = __tmp__111; dst2._rotation12 = __tmp__121; dst2._rotation20 = __tmp__201; dst2._rotation21 = __tmp__211; dst2._rotation22 = __tmp__221; var __tmp__X2; var __tmp__Y2; var __tmp__Z2; __tmp__X2 = src21._rotation00 * src11._positionX + src21._rotation01 * src11._positionY + src21._rotation02 * src11._positionZ; __tmp__Y2 = src21._rotation10 * src11._positionX + src21._rotation11 * src11._positionY + src21._rotation12 * src11._positionZ; __tmp__Z2 = src21._rotation20 * src11._positionX + src21._rotation21 * src11._positionY + src21._rotation22 * src11._positionZ; dst2._positionX = __tmp__X2; dst2._positionY = __tmp__Y2; dst2._positionZ = __tmp__Z2; dst2._positionX += src21._positionX; dst2._positionY += src21._positionY; dst2._positionZ += src21._positionZ; var min; var minX; var minY; var minZ; var max; var maxX; var maxY; var maxZ; s._geom._computeAabb(s._aabb,s._ptransform); minX = s._aabb._minX; minY = s._aabb._minY; minZ = s._aabb._minZ; maxX = s._aabb._maxX; maxY = s._aabb._maxY; maxZ = s._aabb._maxZ; s._geom._computeAabb(s._aabb,s._transform); s._aabb._minX = minX < s._aabb._minX ? minX : s._aabb._minX; s._aabb._minY = minY < s._aabb._minY ? minY : s._aabb._minY; s._aabb._minZ = minZ < s._aabb._minZ ? minZ : s._aabb._minZ; s._aabb._maxX = maxX > s._aabb._maxX ? maxX : s._aabb._maxX; s._aabb._maxY = maxY > s._aabb._maxY ? maxY : s._aabb._maxY; s._aabb._maxZ = maxZ > s._aabb._maxZ ? maxZ : s._aabb._maxZ; if(s._proxy != null) { var d; var dX; var dY; var dZ; dX = s._transform._positionX - s._ptransform._positionX; dY = s._transform._positionY - s._ptransform._positionY; dZ = s._transform._positionZ - s._ptransform._positionZ; var v = s.displacement; v.x = dX; v.y = dY; v.z = dZ; s._rigidBody._world._broadPhase.moveProxy(s._proxy,s._aabb,s.displacement); } s = n; } } } _step(timeStep,numVelocityIterations,numPositionIterations) { var dt = timeStep.dt; var sleepIsland = true; var _g = 0; var _g1 = this.numRigidBodies; while(_g < _g1) { var i = _g++; var rb = this.rigidBodies[i]; var dst = rb._ptransform; var src = rb._transform; dst._positionX = src._positionX; dst._positionY = src._positionY; dst._positionZ = src._positionZ; dst._rotation00 = src._rotation00; dst._rotation01 = src._rotation01; dst._rotation02 = src._rotation02; dst._rotation10 = src._rotation10; dst._rotation11 = src._rotation11; dst._rotation12 = src._rotation12; dst._rotation20 = src._rotation20; dst._rotation21 = src._rotation21; dst._rotation22 = src._rotation22; rb._linearContactImpulseX = 0; rb._linearContactImpulseY = 0; rb._linearContactImpulseZ = 0; rb._angularContactImpulseX = 0; rb._angularContactImpulseY = 0; rb._angularContactImpulseZ = 0; rb._sleeping = false; if(rb._autoSleep && rb._velX * rb._velX + rb._velY * rb._velY + rb._velZ * rb._velZ < oimo.common.Setting.sleepingVelocityThreshold * oimo.common.Setting.sleepingVelocityThreshold && rb._angVelX * rb._angVelX + rb._angVelY * rb._angVelY + rb._angVelZ * rb._angVelZ < oimo.common.Setting.sleepingAngularVelocityThreshold * oimo.common.Setting.sleepingAngularVelocityThreshold) { rb._sleepTime += dt; } else { rb._sleepTime = 0; } if(rb._sleepTime < oimo.common.Setting.sleepingTimeThreshold) { sleepIsland = false; } if(rb._type == 0) { var x = dt * rb._linearDamping; var x2 = x * x; var linScale = 1 / (1 + x + x2 * (0.5 + x * 0.166666666666666657 + x2 * 0.0416666666666666644)); var x1 = dt * rb._angularDamping; var x21 = x1 * x1; var angScale = 1 / (1 + x1 + x21 * (0.5 + x1 * 0.166666666666666657 + x21 * 0.0416666666666666644)); var linAcc; var linAccX; var linAccY; var linAccZ; var angAcc; var angAccX; var angAccY; var angAccZ; linAccX = this.gravityX * rb._gravityScale; linAccY = this.gravityY * rb._gravityScale; linAccZ = this.gravityZ * rb._gravityScale; linAccX += rb._forceX * rb._invMass; linAccY += rb._forceY * rb._invMass; linAccZ += rb._forceZ * rb._invMass; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = rb._invInertia00 * rb._torqueX + rb._invInertia01 * rb._torqueY + rb._invInertia02 * rb._torqueZ; __tmp__Y = rb._invInertia10 * rb._torqueX + rb._invInertia11 * rb._torqueY + rb._invInertia12 * rb._torqueZ; __tmp__Z = rb._invInertia20 * rb._torqueX + rb._invInertia21 * rb._torqueY + rb._invInertia22 * rb._torqueZ; angAccX = __tmp__X; angAccY = __tmp__Y; angAccZ = __tmp__Z; rb._velX += linAccX * dt; rb._velY += linAccY * dt; rb._velZ += linAccZ * dt; rb._velX *= linScale; rb._velY *= linScale; rb._velZ *= linScale; rb._angVelX += angAccX * dt; rb._angVelY += angAccY * dt; rb._angVelZ += angAccZ * dt; rb._angVelX *= angScale; rb._angVelY *= angScale; rb._angVelZ *= angScale; } } if(sleepIsland) { var _g2 = 0; var _g3 = this.numRigidBodies; while(_g2 < _g3) { var i1 = _g2++; var rb1 = this.rigidBodies[i1]; rb1._sleeping = true; rb1._sleepTime = 0; } return; } var _g21 = 0; var _g31 = this.numSolvers; while(_g21 < _g31) { var i2 = _g21++; var s = this.solvers[i2]; s.preSolveVelocity(timeStep); } var _g4 = 0; var _g5 = this.numSolvers; while(_g4 < _g5) { var i3 = _g4++; var s1 = this.solvers[i3]; s1.warmStart(timeStep); } var _g6 = 0; var _g7 = numVelocityIterations; while(_g6 < _g7) { var t = _g6++; var _g61 = 0; var _g71 = this.numSolvers; while(_g61 < _g71) { var i4 = _g61++; var s2 = this.solvers[i4]; s2.solveVelocity(); } } var _g8 = 0; var _g9 = this.numSolvers; while(_g8 < _g9) { var i5 = _g8++; var s3 = this.solvers[i5]; s3.postSolveVelocity(timeStep); } var _g10 = 0; var _g11 = this.numRigidBodies; while(_g10 < _g11) { var i6 = _g10++; var rb2 = this.rigidBodies[i6]; rb2._integrate(dt); } var _g12 = 0; var _g13 = this.numSolversSi; while(_g12 < _g13) { var i7 = _g12++; var s4 = this.solversSi[i7]; s4.preSolvePosition(timeStep); } var _g14 = 0; var _g15 = numPositionIterations; while(_g14 < _g15) { var t1 = _g14++; var _g141 = 0; var _g151 = this.numSolversSi; while(_g141 < _g151) { var i8 = _g141++; var s5 = this.solversSi[i8]; s5.solvePositionSplitImpulse(); } } var _g16 = 0; var _g17 = this.numRigidBodies; while(_g16 < _g17) { var i9 = _g16++; var rb3 = this.rigidBodies[i9]; rb3._integratePseudoVelocity(); } var _g18 = 0; var _g19 = this.numSolversNgs; while(_g18 < _g19) { var i10 = _g18++; var s6 = this.solversNgs[i10]; s6.preSolvePosition(timeStep); } var _g20 = 0; var _g211 = numPositionIterations; while(_g20 < _g211) { var t2 = _g20++; var _g201 = 0; var _g212 = this.numSolversNgs; while(_g201 < _g212) { var i11 = _g201++; var s7 = this.solversNgs[i11]; s7.solvePositionNgs(timeStep); } } var _g22 = 0; var _g23 = this.numSolvers; while(_g22 < _g23) { var i12 = _g22++; var s8 = this.solvers[i12]; s8.postSolve(); } var _g24 = 0; var _g25 = this.numRigidBodies; while(_g24 < _g25) { var i13 = _g24++; var rb4 = this.rigidBodies[i13]; var s9 = rb4._shapeList; while(s9 != null) { var n = s9._next; var dst1 = s9._ptransform; var src1 = s9._localTransform; var src2 = rb4._ptransform; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = src2._rotation00 * src1._rotation00 + src2._rotation01 * src1._rotation10 + src2._rotation02 * src1._rotation20; __tmp__01 = src2._rotation00 * src1._rotation01 + src2._rotation01 * src1._rotation11 + src2._rotation02 * src1._rotation21; __tmp__02 = src2._rotation00 * src1._rotation02 + src2._rotation01 * src1._rotation12 + src2._rotation02 * src1._rotation22; __tmp__10 = src2._rotation10 * src1._rotation00 + src2._rotation11 * src1._rotation10 + src2._rotation12 * src1._rotation20; __tmp__11 = src2._rotation10 * src1._rotation01 + src2._rotation11 * src1._rotation11 + src2._rotation12 * src1._rotation21; __tmp__12 = src2._rotation10 * src1._rotation02 + src2._rotation11 * src1._rotation12 + src2._rotation12 * src1._rotation22; __tmp__20 = src2._rotation20 * src1._rotation00 + src2._rotation21 * src1._rotation10 + src2._rotation22 * src1._rotation20; __tmp__21 = src2._rotation20 * src1._rotation01 + src2._rotation21 * src1._rotation11 + src2._rotation22 * src1._rotation21; __tmp__22 = src2._rotation20 * src1._rotation02 + src2._rotation21 * src1._rotation12 + src2._rotation22 * src1._rotation22; dst1._rotation00 = __tmp__00; dst1._rotation01 = __tmp__01; dst1._rotation02 = __tmp__02; dst1._rotation10 = __tmp__10; dst1._rotation11 = __tmp__11; dst1._rotation12 = __tmp__12; dst1._rotation20 = __tmp__20; dst1._rotation21 = __tmp__21; dst1._rotation22 = __tmp__22; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = src2._rotation00 * src1._positionX + src2._rotation01 * src1._positionY + src2._rotation02 * src1._positionZ; __tmp__Y1 = src2._rotation10 * src1._positionX + src2._rotation11 * src1._positionY + src2._rotation12 * src1._positionZ; __tmp__Z1 = src2._rotation20 * src1._positionX + src2._rotation21 * src1._positionY + src2._rotation22 * src1._positionZ; dst1._positionX = __tmp__X1; dst1._positionY = __tmp__Y1; dst1._positionZ = __tmp__Z1; dst1._positionX += src2._positionX; dst1._positionY += src2._positionY; dst1._positionZ += src2._positionZ; var dst2 = s9._transform; var src11 = s9._localTransform; var src21 = rb4._transform; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = src21._rotation00 * src11._rotation00 + src21._rotation01 * src11._rotation10 + src21._rotation02 * src11._rotation20; __tmp__011 = src21._rotation00 * src11._rotation01 + src21._rotation01 * src11._rotation11 + src21._rotation02 * src11._rotation21; __tmp__021 = src21._rotation00 * src11._rotation02 + src21._rotation01 * src11._rotation12 + src21._rotation02 * src11._rotation22; __tmp__101 = src21._rotation10 * src11._rotation00 + src21._rotation11 * src11._rotation10 + src21._rotation12 * src11._rotation20; __tmp__111 = src21._rotation10 * src11._rotation01 + src21._rotation11 * src11._rotation11 + src21._rotation12 * src11._rotation21; __tmp__121 = src21._rotation10 * src11._rotation02 + src21._rotation11 * src11._rotation12 + src21._rotation12 * src11._rotation22; __tmp__201 = src21._rotation20 * src11._rotation00 + src21._rotation21 * src11._rotation10 + src21._rotation22 * src11._rotation20; __tmp__211 = src21._rotation20 * src11._rotation01 + src21._rotation21 * src11._rotation11 + src21._rotation22 * src11._rotation21; __tmp__221 = src21._rotation20 * src11._rotation02 + src21._rotation21 * src11._rotation12 + src21._rotation22 * src11._rotation22; dst2._rotation00 = __tmp__001; dst2._rotation01 = __tmp__011; dst2._rotation02 = __tmp__021; dst2._rotation10 = __tmp__101; dst2._rotation11 = __tmp__111; dst2._rotation12 = __tmp__121; dst2._rotation20 = __tmp__201; dst2._rotation21 = __tmp__211; dst2._rotation22 = __tmp__221; var __tmp__X2; var __tmp__Y2; var __tmp__Z2; __tmp__X2 = src21._rotation00 * src11._positionX + src21._rotation01 * src11._positionY + src21._rotation02 * src11._positionZ; __tmp__Y2 = src21._rotation10 * src11._positionX + src21._rotation11 * src11._positionY + src21._rotation12 * src11._positionZ; __tmp__Z2 = src21._rotation20 * src11._positionX + src21._rotation21 * src11._positionY + src21._rotation22 * src11._positionZ; dst2._positionX = __tmp__X2; dst2._positionY = __tmp__Y2; dst2._positionZ = __tmp__Z2; dst2._positionX += src21._positionX; dst2._positionY += src21._positionY; dst2._positionZ += src21._positionZ; var min; var minX; var minY; var minZ; var max; var maxX; var maxY; var maxZ; s9._geom._computeAabb(s9._aabb,s9._ptransform); minX = s9._aabb._minX; minY = s9._aabb._minY; minZ = s9._aabb._minZ; maxX = s9._aabb._maxX; maxY = s9._aabb._maxY; maxZ = s9._aabb._maxZ; s9._geom._computeAabb(s9._aabb,s9._transform); s9._aabb._minX = minX < s9._aabb._minX ? minX : s9._aabb._minX; s9._aabb._minY = minY < s9._aabb._minY ? minY : s9._aabb._minY; s9._aabb._minZ = minZ < s9._aabb._minZ ? minZ : s9._aabb._minZ; s9._aabb._maxX = maxX > s9._aabb._maxX ? maxX : s9._aabb._maxX; s9._aabb._maxY = maxY > s9._aabb._maxY ? maxY : s9._aabb._maxY; s9._aabb._maxZ = maxZ > s9._aabb._maxZ ? maxZ : s9._aabb._maxZ; if(s9._proxy != null) { var d; var dX; var dY; var dZ; dX = s9._transform._positionX - s9._ptransform._positionX; dY = s9._transform._positionY - s9._ptransform._positionY; dZ = s9._transform._positionZ - s9._ptransform._positionZ; var v = s9.displacement; v.x = dX; v.y = dY; v.z = dZ; s9._rigidBody._world._broadPhase.moveProxy(s9._proxy,s9._aabb,s9.displacement); } s9 = n; } } } } oimo.dynamics.TimeStep = class oimo_dynamics_TimeStep { constructor() { this.dt = 0; this.invDt = 0; this.dtRatio = 1; } } oimo.dynamics.World = class oimo_dynamics_World { constructor(broadPhaseType,gravity) { if(broadPhaseType == null) { broadPhaseType = 2; } switch(broadPhaseType) { case 1: this._broadPhase = new oimo.collision.broadphase.bruteforce.BruteForceBroadPhase(); break; case 2: this._broadPhase = new oimo.collision.broadphase.bvh.BvhBroadPhase(); break; } this._contactManager = new oimo.dynamics.ContactManager(this._broadPhase); if(gravity == null) { gravity = new oimo.common.Vec3(0,-9.80665,0); } this._gravity = new oimo.common.Vec3(gravity.x,gravity.y,gravity.z); this._rigidBodyList = null; this._rigidBodyListLast = null; this._jointList = null; this._jointListLast = null; this._numRigidBodies = 0; this._numShapes = 0; this._numJoints = 0; this._numIslands = 0; this._numVelocityIterations = 10; this._numPositionIterations = 5; this._rayCastWrapper = new oimo.dynamics._World.RayCastWrapper(); this._convexCastWrapper = new oimo.dynamics._World.ConvexCastWrapper(); this._aabbTestWrapper = new oimo.dynamics._World.AabbTestWrapper(); this._island = new oimo.dynamics.Island(); var this1 = new Array(oimo.common.Setting.islandInitialConstraintArraySize); this._solversInIslands = this1; var this2 = new Array(oimo.common.Setting.islandInitialRigidBodyArraySize); this._rigidBodyStack = this2; this._timeStep = new oimo.dynamics.TimeStep(); this._pool = new oimo.common.Pool(); this._shapeIdCount = 0; } _updateContacts() { var st = Date.now() / 1000; this._contactManager._updateContacts(); var en = Date.now() / 1000; oimo.dynamics.common.Performance.broadPhaseCollisionTime = (en - st) * 1000; var st1 = Date.now() / 1000; var c = this._contactManager._contactList; while(c != null) { var n = c._next; if(!c._shouldBeSkipped) { c._updateManifold(); } c = n; } var en1 = Date.now() / 1000; oimo.dynamics.common.Performance.narrowPhaseCollisionTime = (en1 - st1) * 1000; } _solveIslands() { var st = Date.now() / 1000; if(oimo.common.Setting.disableSleeping) { var b = this._rigidBodyList; while(b != null) { var n = b._next; b._sleeping = false; b._sleepTime = 0; b = n; } } if(this._rigidBodyStack.length < this._numRigidBodies) { var newStackSize = this._rigidBodyStack.length << 1; while(newStackSize < this._numRigidBodies) newStackSize <<= 1; var this1 = new Array(newStackSize); this._rigidBodyStack = this1; } this._numIslands = 0; var _this = this._island; var v = this._gravity; _this.gravityX = v.x; _this.gravityY = v.y; _this.gravityZ = v.z; var b1 = this._rigidBodyList; this._numSolversInIslands = 0; while(b1 != null) { var n1 = b1._next; while(!(b1._addedToIsland || b1._sleeping || b1._type == 1)) { if(b1._numContactLinks == 0 && b1._numJointLinks == 0) { this._island._stepSingleRigidBody(this._timeStep,b1); this._numIslands++; break; } this.buildIsland(b1); this._island._step(this._timeStep,this._numVelocityIterations,this._numPositionIterations); this._island._clear(); this._numIslands++; if(!false) { break; } } b1 = n1; } this._contactManager._postSolve(); b1 = this._rigidBodyList; while(b1 != null) { var n2 = b1._next; b1._addedToIsland = false; b1 = n2; } b1 = this._rigidBodyList; while(b1 != null) { var n3 = b1._next; b1._forceX = 0; b1._forceY = 0; b1._forceZ = 0; b1._torqueX = 0; b1._torqueY = 0; b1._torqueZ = 0; b1 = n3; } while(this._numSolversInIslands > 0) { this._solversInIslands[--this._numSolversInIslands]._addedToIsland = false; this._solversInIslands[this._numSolversInIslands] = null; } var en = Date.now() / 1000; oimo.dynamics.common.Performance.dynamicsTime = (en - st) * 1000; } buildIsland(base) { var stackCount = 1; this._island._addRigidBody(base); this._rigidBodyStack[0] = base; while(stackCount > 0) { var rb = this._rigidBodyStack[--stackCount]; this._rigidBodyStack[stackCount] = null; if(rb._type == 1) { continue; } var cl = rb._contactLinkList; while(cl != null) { var n = cl._next; var cc = cl._contact._contactConstraint; var ccs = cl._contact._contactConstraint._solver; if(cc.isTouching() && !ccs._addedToIsland) { if(this._solversInIslands.length == this._numSolversInIslands) { var newLength = this._numSolversInIslands << 1; var this1 = new Array(newLength); var newArray = this1; var _g = 0; var _g1 = this._numSolversInIslands; while(_g < _g1) { var i = _g++; newArray[i] = this._solversInIslands[i]; this._solversInIslands[i] = null; } this._solversInIslands = newArray; } this._solversInIslands[this._numSolversInIslands++] = ccs; this._island._addConstraintSolver(ccs,cc._positionCorrectionAlgorithm); var other = cl._other; if(!other._addedToIsland) { this._island._addRigidBody(other); this._rigidBodyStack[stackCount++] = other; } } cl = n; } var jl = rb._jointLinkList; while(jl != null) { var n1 = jl._next; var j = jl._joint; var js1 = j._solver; if(!js1._addedToIsland) { if(this._solversInIslands.length == this._numSolversInIslands) { var newLength1 = this._numSolversInIslands << 1; var this2 = new Array(newLength1); var newArray1 = this2; var _g2 = 0; var _g11 = this._numSolversInIslands; while(_g2 < _g11) { var i1 = _g2++; newArray1[i1] = this._solversInIslands[i1]; this._solversInIslands[i1] = null; } this._solversInIslands = newArray1; } this._solversInIslands[this._numSolversInIslands++] = js1; this._island._addConstraintSolver(js1,j._positionCorrectionAlgorithm); var other1 = jl._other; if(!other1._addedToIsland) { this._island._addRigidBody(other1); this._rigidBodyStack[stackCount++] = other1; } } jl = n1; } } } _drawBvh(d,tree) { if(d.drawBvh) { this._drawBvhNode(d,tree._root,0,d.style.bvhNodeColor); } } _drawBvhNode(d,node,level,color) { if(node == null) { return; } if(level >= d.drawBvhMinLevel && level <= d.drawBvhMaxLevel) { var _this = this._pool; var min = _this.sizeVec3 == 0 ? new oimo.common.Vec3() : _this.stackVec3[--_this.sizeVec3]; var _this1 = this._pool; var max = _this1.sizeVec3 == 0 ? new oimo.common.Vec3() : _this1.stackVec3[--_this1.sizeVec3]; var v = min; v.x = node._aabbMinX; v.y = node._aabbMinY; v.z = node._aabbMinZ; var v1 = max; v1.x = node._aabbMaxX; v1.y = node._aabbMaxY; v1.z = node._aabbMaxZ; d.aabb(min,max,color); var _this2 = this._pool; var mat3 = null; var mat4 = null; var quat = null; if(min != null) { min.zero(); if(_this2.sizeVec3 == _this2.stackVec3.length) { var newLength = _this2.sizeVec3 << 1; var this1 = new Array(newLength); var newArray = this1; var _g = 0; var _g1 = _this2.sizeVec3; while(_g < _g1) { var i = _g++; newArray[i] = _this2.stackVec3[i]; _this2.stackVec3[i] = null; } _this2.stackVec3 = newArray; } _this2.stackVec3[_this2.sizeVec3++] = min; } if(mat3 != null) { var t00 = 1; var t01 = 0; var t02 = 0; var t10 = 0; var t11 = 1; var t12 = 0; var t20 = 0; var t21 = 0; var t22 = 1; mat3.e00 = t00; mat3.e01 = t01; mat3.e02 = t02; mat3.e10 = t10; mat3.e11 = t11; mat3.e12 = t12; mat3.e20 = t20; mat3.e21 = t21; mat3.e22 = t22; if(_this2.sizeMat3 == _this2.stackMat3.length) { var newLength1 = _this2.sizeMat3 << 1; var this2 = new Array(newLength1); var newArray1 = this2; var _g2 = 0; var _g11 = _this2.sizeMat3; while(_g2 < _g11) { var i1 = _g2++; newArray1[i1] = _this2.stackMat3[i1]; _this2.stackMat3[i1] = null; } _this2.stackMat3 = newArray1; } _this2.stackMat3[_this2.sizeMat3++] = mat3; } if(mat4 != null) { var t001 = 1; var t011 = 0; var t021 = 0; var t03 = 0; var t101 = 0; var t111 = 1; var t121 = 0; var t13 = 0; var t201 = 0; var t211 = 0; var t221 = 1; var t23 = 0; var t30 = 0; var t31 = 0; var t32 = 0; var t33 = 1; mat4.e00 = t001; mat4.e01 = t011; mat4.e02 = t021; mat4.e03 = t03; mat4.e10 = t101; mat4.e11 = t111; mat4.e12 = t121; mat4.e13 = t13; mat4.e20 = t201; mat4.e21 = t211; mat4.e22 = t221; mat4.e23 = t23; mat4.e30 = t30; mat4.e31 = t31; mat4.e32 = t32; mat4.e33 = t33; if(_this2.sizeMat4 == _this2.stackMat4.length) { var newLength2 = _this2.sizeMat4 << 1; var this3 = new Array(newLength2); var newArray2 = this3; var _g3 = 0; var _g12 = _this2.sizeMat4; while(_g3 < _g12) { var i2 = _g3++; newArray2[i2] = _this2.stackMat4[i2]; _this2.stackMat4[i2] = null; } _this2.stackMat4 = newArray2; } _this2.stackMat4[_this2.sizeMat4++] = mat4; } if(quat != null) { var tx = 0; var ty = 0; var tz = 0; var tw = 1; quat.x = tx; quat.y = ty; quat.z = tz; quat.w = tw; if(_this2.sizeQuat == _this2.stackQuat.length) { var newLength3 = _this2.sizeQuat << 1; var this4 = new Array(newLength3); var newArray3 = this4; var _g4 = 0; var _g13 = _this2.sizeQuat; while(_g4 < _g13) { var i3 = _g4++; newArray3[i3] = _this2.stackQuat[i3]; _this2.stackQuat[i3] = null; } _this2.stackQuat = newArray3; } _this2.stackQuat[_this2.sizeQuat++] = quat; } var _this3 = this._pool; var mat31 = null; var mat41 = null; var quat1 = null; if(max != null) { max.zero(); if(_this3.sizeVec3 == _this3.stackVec3.length) { var newLength4 = _this3.sizeVec3 << 1; var this5 = new Array(newLength4); var newArray4 = this5; var _g5 = 0; var _g14 = _this3.sizeVec3; while(_g5 < _g14) { var i4 = _g5++; newArray4[i4] = _this3.stackVec3[i4]; _this3.stackVec3[i4] = null; } _this3.stackVec3 = newArray4; } _this3.stackVec3[_this3.sizeVec3++] = max; } if(mat31 != null) { var t002 = 1; var t012 = 0; var t022 = 0; var t102 = 0; var t112 = 1; var t122 = 0; var t202 = 0; var t212 = 0; var t222 = 1; mat31.e00 = t002; mat31.e01 = t012; mat31.e02 = t022; mat31.e10 = t102; mat31.e11 = t112; mat31.e12 = t122; mat31.e20 = t202; mat31.e21 = t212; mat31.e22 = t222; if(_this3.sizeMat3 == _this3.stackMat3.length) { var newLength5 = _this3.sizeMat3 << 1; var this6 = new Array(newLength5); var newArray5 = this6; var _g6 = 0; var _g15 = _this3.sizeMat3; while(_g6 < _g15) { var i5 = _g6++; newArray5[i5] = _this3.stackMat3[i5]; _this3.stackMat3[i5] = null; } _this3.stackMat3 = newArray5; } _this3.stackMat3[_this3.sizeMat3++] = mat31; } if(mat41 != null) { var t003 = 1; var t013 = 0; var t023 = 0; var t031 = 0; var t103 = 0; var t113 = 1; var t123 = 0; var t131 = 0; var t203 = 0; var t213 = 0; var t223 = 1; var t231 = 0; var t301 = 0; var t311 = 0; var t321 = 0; var t331 = 1; mat41.e00 = t003; mat41.e01 = t013; mat41.e02 = t023; mat41.e03 = t031; mat41.e10 = t103; mat41.e11 = t113; mat41.e12 = t123; mat41.e13 = t131; mat41.e20 = t203; mat41.e21 = t213; mat41.e22 = t223; mat41.e23 = t231; mat41.e30 = t301; mat41.e31 = t311; mat41.e32 = t321; mat41.e33 = t331; if(_this3.sizeMat4 == _this3.stackMat4.length) { var newLength6 = _this3.sizeMat4 << 1; var this7 = new Array(newLength6); var newArray6 = this7; var _g7 = 0; var _g16 = _this3.sizeMat4; while(_g7 < _g16) { var i6 = _g7++; newArray6[i6] = _this3.stackMat4[i6]; _this3.stackMat4[i6] = null; } _this3.stackMat4 = newArray6; } _this3.stackMat4[_this3.sizeMat4++] = mat41; } if(quat1 != null) { var tx1 = 0; var ty1 = 0; var tz1 = 0; var tw1 = 1; quat1.x = tx1; quat1.y = ty1; quat1.z = tz1; quat1.w = tw1; if(_this3.sizeQuat == _this3.stackQuat.length) { var newLength7 = _this3.sizeQuat << 1; var this8 = new Array(newLength7); var newArray7 = this8; var _g8 = 0; var _g17 = _this3.sizeQuat; while(_g8 < _g17) { var i7 = _g8++; newArray7[i7] = _this3.stackQuat[i7]; _this3.stackQuat[i7] = null; } _this3.stackQuat = newArray7; } _this3.stackQuat[_this3.sizeQuat++] = quat1; } } this._drawBvhNode(d,node._children[0],level + 1,color); this._drawBvhNode(d,node._children[1],level + 1,color); } _drawRigidBodies(d) { var style = d.style; var r = this._rigidBodyList; while(r != null) { var n = r._next; if(d.drawBases) { var style1 = d.style; d.basis(r._transform,style1.basisLength,style1.basisColorX,style1.basisColorY,style1.basisColorZ); } var shapeColor = null; var isDynamic = r._type == 0; if(!isDynamic) { shapeColor = r._type == 2 ? style.kinematicShapeColor : style.staticShapeColor; } var s = r._shapeList; while(s != null) { var n1 = s._next; if(isDynamic) { if((s._id & 1) == 0) { shapeColor = r._sleeping ? style.sleepingShapeColor1 : r._sleepTime > oimo.common.Setting.sleepingTimeThreshold ? style.sleepyShapeColor1 : style.shapeColor1; } else { shapeColor = r._sleeping ? style.sleepingShapeColor2 : r._sleepTime > oimo.common.Setting.sleepingTimeThreshold ? style.sleepyShapeColor2 : style.shapeColor2; } } if(d.drawShapes) { var geom = s._geom; var tf = s._transform; switch(geom._type) { case 0: d.sphere(tf,geom._radius,shapeColor); break; case 1: var g = geom; var _this = this._pool; var hx = _this.sizeVec3 == 0 ? new oimo.common.Vec3() : _this.stackVec3[--_this.sizeVec3]; var v = hx; v.x = g._halfExtentsX; v.y = g._halfExtentsY; v.z = g._halfExtentsZ; d.box(tf,hx,shapeColor); var _this1 = this._pool; var mat3 = null; var mat4 = null; var quat = null; if(hx != null) { hx.zero(); if(_this1.sizeVec3 == _this1.stackVec3.length) { var newLength = _this1.sizeVec3 << 1; var this1 = new Array(newLength); var newArray = this1; var _g = 0; var _g1 = _this1.sizeVec3; while(_g < _g1) { var i = _g++; newArray[i] = _this1.stackVec3[i]; _this1.stackVec3[i] = null; } _this1.stackVec3 = newArray; } _this1.stackVec3[_this1.sizeVec3++] = hx; } if(mat3 != null) { var t00 = 1; var t01 = 0; var t02 = 0; var t10 = 0; var t11 = 1; var t12 = 0; var t20 = 0; var t21 = 0; var t22 = 1; mat3.e00 = t00; mat3.e01 = t01; mat3.e02 = t02; mat3.e10 = t10; mat3.e11 = t11; mat3.e12 = t12; mat3.e20 = t20; mat3.e21 = t21; mat3.e22 = t22; if(_this1.sizeMat3 == _this1.stackMat3.length) { var newLength1 = _this1.sizeMat3 << 1; var this2 = new Array(newLength1); var newArray1 = this2; var _g2 = 0; var _g11 = _this1.sizeMat3; while(_g2 < _g11) { var i1 = _g2++; newArray1[i1] = _this1.stackMat3[i1]; _this1.stackMat3[i1] = null; } _this1.stackMat3 = newArray1; } _this1.stackMat3[_this1.sizeMat3++] = mat3; } if(mat4 != null) { var t001 = 1; var t011 = 0; var t021 = 0; var t03 = 0; var t101 = 0; var t111 = 1; var t121 = 0; var t13 = 0; var t201 = 0; var t211 = 0; var t221 = 1; var t23 = 0; var t30 = 0; var t31 = 0; var t32 = 0; var t33 = 1; mat4.e00 = t001; mat4.e01 = t011; mat4.e02 = t021; mat4.e03 = t03; mat4.e10 = t101; mat4.e11 = t111; mat4.e12 = t121; mat4.e13 = t13; mat4.e20 = t201; mat4.e21 = t211; mat4.e22 = t221; mat4.e23 = t23; mat4.e30 = t30; mat4.e31 = t31; mat4.e32 = t32; mat4.e33 = t33; if(_this1.sizeMat4 == _this1.stackMat4.length) { var newLength2 = _this1.sizeMat4 << 1; var this3 = new Array(newLength2); var newArray2 = this3; var _g3 = 0; var _g12 = _this1.sizeMat4; while(_g3 < _g12) { var i2 = _g3++; newArray2[i2] = _this1.stackMat4[i2]; _this1.stackMat4[i2] = null; } _this1.stackMat4 = newArray2; } _this1.stackMat4[_this1.sizeMat4++] = mat4; } if(quat != null) { var tx = 0; var ty = 0; var tz = 0; var tw = 1; quat.x = tx; quat.y = ty; quat.z = tz; quat.w = tw; if(_this1.sizeQuat == _this1.stackQuat.length) { var newLength3 = _this1.sizeQuat << 1; var this4 = new Array(newLength3); var newArray3 = this4; var _g4 = 0; var _g13 = _this1.sizeQuat; while(_g4 < _g13) { var i3 = _g4++; newArray3[i3] = _this1.stackQuat[i3]; _this1.stackQuat[i3] = null; } _this1.stackQuat = newArray3; } _this1.stackQuat[_this1.sizeQuat++] = quat; } break; case 2: var g1 = geom; d.cylinder(tf,g1._radius,g1._halfHeight,shapeColor); break; case 3: var g2 = geom; d.cone(tf,g2._radius,g2._halfHeight,shapeColor); break; case 4: var g3 = geom; d.capsule(tf,g3._radius,g3._halfHeight,shapeColor); break; case 5: var g4 = geom; var n2 = g4._numVertices; var _this2 = this._pool; var v1 = _this2.sizeVec3 == 0 ? new oimo.common.Vec3() : _this2.stackVec3[--_this2.sizeVec3]; var _this3 = this._pool; var v2 = _this3.sizeVec3 == 0 ? new oimo.common.Vec3() : _this3.stackVec3[--_this3.sizeVec3]; var _this4 = this._pool; var v3 = _this4.sizeVec3 == 0 ? new oimo.common.Vec3() : _this4.stackVec3[--_this4.sizeVec3]; var _this5 = this._pool; var v12 = _this5.sizeVec3 == 0 ? new oimo.common.Vec3() : _this5.stackVec3[--_this5.sizeVec3]; var _this6 = this._pool; var v13 = _this6.sizeVec3 == 0 ? new oimo.common.Vec3() : _this6.stackVec3[--_this6.sizeVec3]; var _this7 = this._pool; var normal = _this7.sizeVec3 == 0 ? new oimo.common.Vec3() : _this7.stackVec3[--_this7.sizeVec3]; var _this8 = this._pool; var m = _this8.sizeMat3 == 0 ? new oimo.common.Mat3() : _this8.stackMat3[--_this8.sizeMat3]; var _this9 = this._pool; var o = _this9.sizeVec3 == 0 ? new oimo.common.Vec3() : _this9.stackVec3[--_this9.sizeVec3]; var m1 = m; m1.e00 = tf._rotation00; m1.e01 = tf._rotation01; m1.e02 = tf._rotation02; m1.e10 = tf._rotation10; m1.e11 = tf._rotation11; m1.e12 = tf._rotation12; m1.e20 = tf._rotation20; m1.e21 = tf._rotation21; m1.e22 = tf._rotation22; var v4 = o; v4.x = tf._positionX; v4.y = tf._positionY; v4.z = tf._positionZ; var _g5 = 0; var _g14 = n2; while(_g5 < _g14) { var i4 = _g5++; var _this10 = g4._tmpVertices[i4]; var v5 = g4._vertices[i4]; _this10.x = v5.x; _this10.y = v5.y; _this10.z = v5.z; var _this11 = _this10; var tx1 = _this11.x * m.e00 + _this11.y * m.e01 + _this11.z * m.e02; var ty1 = _this11.x * m.e10 + _this11.y * m.e11 + _this11.z * m.e12; var tz1 = _this11.x * m.e20 + _this11.y * m.e21 + _this11.z * m.e22; _this11.x = tx1; _this11.y = ty1; _this11.z = tz1; var _this12 = _this11; var tx2 = _this12.x + o.x; var ty2 = _this12.y + o.y; var tz2 = _this12.z + o.z; _this12.x = tx2; _this12.y = ty2; _this12.z = tz2; } if(n2 > 30) { var _g21 = 0; var _g31 = n2; while(_g21 < _g31) { var i5 = _g21++; var v6 = g4._tmpVertices[i5]; v1.x = v6.x; v1.y = v6.y; v1.z = v6.z; var v7 = g4._tmpVertices[(i5 + 1) % n2]; v2.x = v7.x; v2.y = v7.y; v2.z = v7.z; d.line(v1,v2,shapeColor); } } else if(this._debugDraw.wireframe || n2 > 10) { var _g22 = 0; var _g32 = n2; while(_g22 < _g32) { var i6 = _g22++; var v8 = g4._tmpVertices[i6]; v1.x = v8.x; v1.y = v8.y; v1.z = v8.z; var _g23 = 0; var _g33 = i6; while(_g23 < _g33) { var j = _g23++; var v9 = g4._tmpVertices[j]; v2.x = v9.x; v2.y = v9.y; v2.z = v9.z; d.line(v1,v2,shapeColor); } } } else { var _g24 = 0; var _g34 = n2; while(_g24 < _g34) { var i7 = _g24++; var v10 = g4._tmpVertices[i7]; v1.x = v10.x; v1.y = v10.y; v1.z = v10.z; var _g25 = 0; var _g35 = i7; while(_g25 < _g35) { var j1 = _g25++; var v11 = g4._tmpVertices[j1]; v2.x = v11.x; v2.y = v11.y; v2.z = v11.z; var _g26 = 0; var _g36 = j1; while(_g26 < _g36) { var k = _g26++; var v14 = g4._tmpVertices[k]; v3.x = v14.x; v3.y = v14.y; v3.z = v14.z; v12.x = v2.x; v12.y = v2.y; v12.z = v2.z; var _this13 = v12; var tx3 = _this13.x - v1.x; var ty3 = _this13.y - v1.y; var tz3 = _this13.z - v1.z; _this13.x = tx3; _this13.y = ty3; _this13.z = tz3; v13.x = v3.x; v13.y = v3.y; v13.z = v3.z; var _this14 = v13; var tx4 = _this14.x - v1.x; var ty4 = _this14.y - v1.y; var tz4 = _this14.z - v1.z; _this14.x = tx4; _this14.y = ty4; _this14.z = tz4; normal.x = v12.x; normal.y = v12.y; normal.z = v12.z; var _this15 = normal; var tx5 = _this15.y * v13.z - _this15.z * v13.y; var ty5 = _this15.z * v13.x - _this15.x * v13.z; var tz5 = _this15.x * v13.y - _this15.y * v13.x; _this15.x = tx5; _this15.y = ty5; _this15.z = tz5; var _this16 = _this15; var invLen = Math.sqrt(_this16.x * _this16.x + _this16.y * _this16.y + _this16.z * _this16.z); if(invLen > 0) { invLen = 1 / invLen; } var tx6 = _this16.x * invLen; var ty6 = _this16.y * invLen; var tz6 = _this16.z * invLen; _this16.x = tx6; _this16.y = ty6; _this16.z = tz6; d.triangle(v1,v2,v3,normal,normal,normal,shapeColor); var tx7 = -normal.x; var ty7 = -normal.y; var tz7 = -normal.z; normal.x = tx7; normal.y = ty7; normal.z = tz7; d.triangle(v1,v3,v2,normal,normal,normal,shapeColor); } } } } var _this17 = this._pool; var mat31 = null; var mat41 = null; var quat1 = null; if(v1 != null) { v1.zero(); if(_this17.sizeVec3 == _this17.stackVec3.length) { var newLength4 = _this17.sizeVec3 << 1; var this5 = new Array(newLength4); var newArray4 = this5; var _g6 = 0; var _g15 = _this17.sizeVec3; while(_g6 < _g15) { var i8 = _g6++; newArray4[i8] = _this17.stackVec3[i8]; _this17.stackVec3[i8] = null; } _this17.stackVec3 = newArray4; } _this17.stackVec3[_this17.sizeVec3++] = v1; } if(mat31 != null) { var t002 = 1; var t012 = 0; var t022 = 0; var t102 = 0; var t112 = 1; var t122 = 0; var t202 = 0; var t212 = 0; var t222 = 1; mat31.e00 = t002; mat31.e01 = t012; mat31.e02 = t022; mat31.e10 = t102; mat31.e11 = t112; mat31.e12 = t122; mat31.e20 = t202; mat31.e21 = t212; mat31.e22 = t222; if(_this17.sizeMat3 == _this17.stackMat3.length) { var newLength5 = _this17.sizeMat3 << 1; var this6 = new Array(newLength5); var newArray5 = this6; var _g7 = 0; var _g16 = _this17.sizeMat3; while(_g7 < _g16) { var i9 = _g7++; newArray5[i9] = _this17.stackMat3[i9]; _this17.stackMat3[i9] = null; } _this17.stackMat3 = newArray5; } _this17.stackMat3[_this17.sizeMat3++] = mat31; } if(mat41 != null) { var t003 = 1; var t013 = 0; var t023 = 0; var t031 = 0; var t103 = 0; var t113 = 1; var t123 = 0; var t131 = 0; var t203 = 0; var t213 = 0; var t223 = 1; var t231 = 0; var t301 = 0; var t311 = 0; var t321 = 0; var t331 = 1; mat41.e00 = t003; mat41.e01 = t013; mat41.e02 = t023; mat41.e03 = t031; mat41.e10 = t103; mat41.e11 = t113; mat41.e12 = t123; mat41.e13 = t131; mat41.e20 = t203; mat41.e21 = t213; mat41.e22 = t223; mat41.e23 = t231; mat41.e30 = t301; mat41.e31 = t311; mat41.e32 = t321; mat41.e33 = t331; if(_this17.sizeMat4 == _this17.stackMat4.length) { var newLength6 = _this17.sizeMat4 << 1; var this7 = new Array(newLength6); var newArray6 = this7; var _g8 = 0; var _g17 = _this17.sizeMat4; while(_g8 < _g17) { var i10 = _g8++; newArray6[i10] = _this17.stackMat4[i10]; _this17.stackMat4[i10] = null; } _this17.stackMat4 = newArray6; } _this17.stackMat4[_this17.sizeMat4++] = mat41; } if(quat1 != null) { var tx8 = 0; var ty8 = 0; var tz8 = 0; var tw1 = 1; quat1.x = tx8; quat1.y = ty8; quat1.z = tz8; quat1.w = tw1; if(_this17.sizeQuat == _this17.stackQuat.length) { var newLength7 = _this17.sizeQuat << 1; var this8 = new Array(newLength7); var newArray7 = this8; var _g9 = 0; var _g18 = _this17.sizeQuat; while(_g9 < _g18) { var i11 = _g9++; newArray7[i11] = _this17.stackQuat[i11]; _this17.stackQuat[i11] = null; } _this17.stackQuat = newArray7; } _this17.stackQuat[_this17.sizeQuat++] = quat1; } var _this18 = this._pool; var mat32 = null; var mat42 = null; var quat2 = null; if(v2 != null) { v2.zero(); if(_this18.sizeVec3 == _this18.stackVec3.length) { var newLength8 = _this18.sizeVec3 << 1; var this9 = new Array(newLength8); var newArray8 = this9; var _g10 = 0; var _g19 = _this18.sizeVec3; while(_g10 < _g19) { var i12 = _g10++; newArray8[i12] = _this18.stackVec3[i12]; _this18.stackVec3[i12] = null; } _this18.stackVec3 = newArray8; } _this18.stackVec3[_this18.sizeVec3++] = v2; } if(mat32 != null) { var t004 = 1; var t014 = 0; var t024 = 0; var t104 = 0; var t114 = 1; var t124 = 0; var t204 = 0; var t214 = 0; var t224 = 1; mat32.e00 = t004; mat32.e01 = t014; mat32.e02 = t024; mat32.e10 = t104; mat32.e11 = t114; mat32.e12 = t124; mat32.e20 = t204; mat32.e21 = t214; mat32.e22 = t224; if(_this18.sizeMat3 == _this18.stackMat3.length) { var newLength9 = _this18.sizeMat3 << 1; var this10 = new Array(newLength9); var newArray9 = this10; var _g20 = 0; var _g110 = _this18.sizeMat3; while(_g20 < _g110) { var i13 = _g20++; newArray9[i13] = _this18.stackMat3[i13]; _this18.stackMat3[i13] = null; } _this18.stackMat3 = newArray9; } _this18.stackMat3[_this18.sizeMat3++] = mat32; } if(mat42 != null) { var t005 = 1; var t015 = 0; var t025 = 0; var t032 = 0; var t105 = 0; var t115 = 1; var t125 = 0; var t132 = 0; var t205 = 0; var t215 = 0; var t225 = 1; var t232 = 0; var t302 = 0; var t312 = 0; var t322 = 0; var t332 = 1; mat42.e00 = t005; mat42.e01 = t015; mat42.e02 = t025; mat42.e03 = t032; mat42.e10 = t105; mat42.e11 = t115; mat42.e12 = t125; mat42.e13 = t132; mat42.e20 = t205; mat42.e21 = t215; mat42.e22 = t225; mat42.e23 = t232; mat42.e30 = t302; mat42.e31 = t312; mat42.e32 = t322; mat42.e33 = t332; if(_this18.sizeMat4 == _this18.stackMat4.length) { var newLength10 = _this18.sizeMat4 << 1; var this11 = new Array(newLength10); var newArray10 = this11; var _g27 = 0; var _g111 = _this18.sizeMat4; while(_g27 < _g111) { var i14 = _g27++; newArray10[i14] = _this18.stackMat4[i14]; _this18.stackMat4[i14] = null; } _this18.stackMat4 = newArray10; } _this18.stackMat4[_this18.sizeMat4++] = mat42; } if(quat2 != null) { var tx9 = 0; var ty9 = 0; var tz9 = 0; var tw2 = 1; quat2.x = tx9; quat2.y = ty9; quat2.z = tz9; quat2.w = tw2; if(_this18.sizeQuat == _this18.stackQuat.length) { var newLength11 = _this18.sizeQuat << 1; var this12 = new Array(newLength11); var newArray11 = this12; var _g28 = 0; var _g112 = _this18.sizeQuat; while(_g28 < _g112) { var i15 = _g28++; newArray11[i15] = _this18.stackQuat[i15]; _this18.stackQuat[i15] = null; } _this18.stackQuat = newArray11; } _this18.stackQuat[_this18.sizeQuat++] = quat2; } var _this19 = this._pool; var mat33 = null; var mat43 = null; var quat3 = null; if(v3 != null) { v3.zero(); if(_this19.sizeVec3 == _this19.stackVec3.length) { var newLength12 = _this19.sizeVec3 << 1; var this13 = new Array(newLength12); var newArray12 = this13; var _g29 = 0; var _g113 = _this19.sizeVec3; while(_g29 < _g113) { var i16 = _g29++; newArray12[i16] = _this19.stackVec3[i16]; _this19.stackVec3[i16] = null; } _this19.stackVec3 = newArray12; } _this19.stackVec3[_this19.sizeVec3++] = v3; } if(mat33 != null) { var t006 = 1; var t016 = 0; var t026 = 0; var t106 = 0; var t116 = 1; var t126 = 0; var t206 = 0; var t216 = 0; var t226 = 1; mat33.e00 = t006; mat33.e01 = t016; mat33.e02 = t026; mat33.e10 = t106; mat33.e11 = t116; mat33.e12 = t126; mat33.e20 = t206; mat33.e21 = t216; mat33.e22 = t226; if(_this19.sizeMat3 == _this19.stackMat3.length) { var newLength13 = _this19.sizeMat3 << 1; var this14 = new Array(newLength13); var newArray13 = this14; var _g30 = 0; var _g114 = _this19.sizeMat3; while(_g30 < _g114) { var i17 = _g30++; newArray13[i17] = _this19.stackMat3[i17]; _this19.stackMat3[i17] = null; } _this19.stackMat3 = newArray13; } _this19.stackMat3[_this19.sizeMat3++] = mat33; } if(mat43 != null) { var t007 = 1; var t017 = 0; var t027 = 0; var t033 = 0; var t107 = 0; var t117 = 1; var t127 = 0; var t133 = 0; var t207 = 0; var t217 = 0; var t227 = 1; var t233 = 0; var t303 = 0; var t313 = 0; var t323 = 0; var t333 = 1; mat43.e00 = t007; mat43.e01 = t017; mat43.e02 = t027; mat43.e03 = t033; mat43.e10 = t107; mat43.e11 = t117; mat43.e12 = t127; mat43.e13 = t133; mat43.e20 = t207; mat43.e21 = t217; mat43.e22 = t227; mat43.e23 = t233; mat43.e30 = t303; mat43.e31 = t313; mat43.e32 = t323; mat43.e33 = t333; if(_this19.sizeMat4 == _this19.stackMat4.length) { var newLength14 = _this19.sizeMat4 << 1; var this15 = new Array(newLength14); var newArray14 = this15; var _g37 = 0; var _g115 = _this19.sizeMat4; while(_g37 < _g115) { var i18 = _g37++; newArray14[i18] = _this19.stackMat4[i18]; _this19.stackMat4[i18] = null; } _this19.stackMat4 = newArray14; } _this19.stackMat4[_this19.sizeMat4++] = mat43; } if(quat3 != null) { var tx10 = 0; var ty10 = 0; var tz10 = 0; var tw3 = 1; quat3.x = tx10; quat3.y = ty10; quat3.z = tz10; quat3.w = tw3; if(_this19.sizeQuat == _this19.stackQuat.length) { var newLength15 = _this19.sizeQuat << 1; var this16 = new Array(newLength15); var newArray15 = this16; var _g38 = 0; var _g116 = _this19.sizeQuat; while(_g38 < _g116) { var i19 = _g38++; newArray15[i19] = _this19.stackQuat[i19]; _this19.stackQuat[i19] = null; } _this19.stackQuat = newArray15; } _this19.stackQuat[_this19.sizeQuat++] = quat3; } var _this20 = this._pool; var mat34 = null; var mat44 = null; var quat4 = null; if(v12 != null) { v12.zero(); if(_this20.sizeVec3 == _this20.stackVec3.length) { var newLength16 = _this20.sizeVec3 << 1; var this17 = new Array(newLength16); var newArray16 = this17; var _g39 = 0; var _g117 = _this20.sizeVec3; while(_g39 < _g117) { var i20 = _g39++; newArray16[i20] = _this20.stackVec3[i20]; _this20.stackVec3[i20] = null; } _this20.stackVec3 = newArray16; } _this20.stackVec3[_this20.sizeVec3++] = v12; } if(mat34 != null) { var t008 = 1; var t018 = 0; var t028 = 0; var t108 = 0; var t118 = 1; var t128 = 0; var t208 = 0; var t218 = 0; var t228 = 1; mat34.e00 = t008; mat34.e01 = t018; mat34.e02 = t028; mat34.e10 = t108; mat34.e11 = t118; mat34.e12 = t128; mat34.e20 = t208; mat34.e21 = t218; mat34.e22 = t228; if(_this20.sizeMat3 == _this20.stackMat3.length) { var newLength17 = _this20.sizeMat3 << 1; var this18 = new Array(newLength17); var newArray17 = this18; var _g40 = 0; var _g118 = _this20.sizeMat3; while(_g40 < _g118) { var i21 = _g40++; newArray17[i21] = _this20.stackMat3[i21]; _this20.stackMat3[i21] = null; } _this20.stackMat3 = newArray17; } _this20.stackMat3[_this20.sizeMat3++] = mat34; } if(mat44 != null) { var t009 = 1; var t019 = 0; var t029 = 0; var t034 = 0; var t109 = 0; var t119 = 1; var t129 = 0; var t134 = 0; var t209 = 0; var t219 = 0; var t229 = 1; var t234 = 0; var t304 = 0; var t314 = 0; var t324 = 0; var t334 = 1; mat44.e00 = t009; mat44.e01 = t019; mat44.e02 = t029; mat44.e03 = t034; mat44.e10 = t109; mat44.e11 = t119; mat44.e12 = t129; mat44.e13 = t134; mat44.e20 = t209; mat44.e21 = t219; mat44.e22 = t229; mat44.e23 = t234; mat44.e30 = t304; mat44.e31 = t314; mat44.e32 = t324; mat44.e33 = t334; if(_this20.sizeMat4 == _this20.stackMat4.length) { var newLength18 = _this20.sizeMat4 << 1; var this19 = new Array(newLength18); var newArray18 = this19; var _g41 = 0; var _g119 = _this20.sizeMat4; while(_g41 < _g119) { var i22 = _g41++; newArray18[i22] = _this20.stackMat4[i22]; _this20.stackMat4[i22] = null; } _this20.stackMat4 = newArray18; } _this20.stackMat4[_this20.sizeMat4++] = mat44; } if(quat4 != null) { var tx11 = 0; var ty11 = 0; var tz11 = 0; var tw4 = 1; quat4.x = tx11; quat4.y = ty11; quat4.z = tz11; quat4.w = tw4; if(_this20.sizeQuat == _this20.stackQuat.length) { var newLength19 = _this20.sizeQuat << 1; var this20 = new Array(newLength19); var newArray19 = this20; var _g42 = 0; var _g120 = _this20.sizeQuat; while(_g42 < _g120) { var i23 = _g42++; newArray19[i23] = _this20.stackQuat[i23]; _this20.stackQuat[i23] = null; } _this20.stackQuat = newArray19; } _this20.stackQuat[_this20.sizeQuat++] = quat4; } var _this21 = this._pool; var mat35 = null; var mat45 = null; var quat5 = null; if(v13 != null) { v13.zero(); if(_this21.sizeVec3 == _this21.stackVec3.length) { var newLength20 = _this21.sizeVec3 << 1; var this21 = new Array(newLength20); var newArray20 = this21; var _g43 = 0; var _g121 = _this21.sizeVec3; while(_g43 < _g121) { var i24 = _g43++; newArray20[i24] = _this21.stackVec3[i24]; _this21.stackVec3[i24] = null; } _this21.stackVec3 = newArray20; } _this21.stackVec3[_this21.sizeVec3++] = v13; } if(mat35 != null) { var t0010 = 1; var t0110 = 0; var t0210 = 0; var t1010 = 0; var t1110 = 1; var t1210 = 0; var t2010 = 0; var t2110 = 0; var t2210 = 1; mat35.e00 = t0010; mat35.e01 = t0110; mat35.e02 = t0210; mat35.e10 = t1010; mat35.e11 = t1110; mat35.e12 = t1210; mat35.e20 = t2010; mat35.e21 = t2110; mat35.e22 = t2210; if(_this21.sizeMat3 == _this21.stackMat3.length) { var newLength21 = _this21.sizeMat3 << 1; var this22 = new Array(newLength21); var newArray21 = this22; var _g44 = 0; var _g122 = _this21.sizeMat3; while(_g44 < _g122) { var i25 = _g44++; newArray21[i25] = _this21.stackMat3[i25]; _this21.stackMat3[i25] = null; } _this21.stackMat3 = newArray21; } _this21.stackMat3[_this21.sizeMat3++] = mat35; } if(mat45 != null) { var t0011 = 1; var t0111 = 0; var t0211 = 0; var t035 = 0; var t1011 = 0; var t1111 = 1; var t1211 = 0; var t135 = 0; var t2011 = 0; var t2111 = 0; var t2211 = 1; var t235 = 0; var t305 = 0; var t315 = 0; var t325 = 0; var t335 = 1; mat45.e00 = t0011; mat45.e01 = t0111; mat45.e02 = t0211; mat45.e03 = t035; mat45.e10 = t1011; mat45.e11 = t1111; mat45.e12 = t1211; mat45.e13 = t135; mat45.e20 = t2011; mat45.e21 = t2111; mat45.e22 = t2211; mat45.e23 = t235; mat45.e30 = t305; mat45.e31 = t315; mat45.e32 = t325; mat45.e33 = t335; if(_this21.sizeMat4 == _this21.stackMat4.length) { var newLength22 = _this21.sizeMat4 << 1; var this23 = new Array(newLength22); var newArray22 = this23; var _g45 = 0; var _g123 = _this21.sizeMat4; while(_g45 < _g123) { var i26 = _g45++; newArray22[i26] = _this21.stackMat4[i26]; _this21.stackMat4[i26] = null; } _this21.stackMat4 = newArray22; } _this21.stackMat4[_this21.sizeMat4++] = mat45; } if(quat5 != null) { var tx12 = 0; var ty12 = 0; var tz12 = 0; var tw5 = 1; quat5.x = tx12; quat5.y = ty12; quat5.z = tz12; quat5.w = tw5; if(_this21.sizeQuat == _this21.stackQuat.length) { var newLength23 = _this21.sizeQuat << 1; var this24 = new Array(newLength23); var newArray23 = this24; var _g46 = 0; var _g124 = _this21.sizeQuat; while(_g46 < _g124) { var i27 = _g46++; newArray23[i27] = _this21.stackQuat[i27]; _this21.stackQuat[i27] = null; } _this21.stackQuat = newArray23; } _this21.stackQuat[_this21.sizeQuat++] = quat5; } var _this22 = this._pool; var mat36 = null; var mat46 = null; var quat6 = null; if(normal != null) { normal.zero(); if(_this22.sizeVec3 == _this22.stackVec3.length) { var newLength24 = _this22.sizeVec3 << 1; var this25 = new Array(newLength24); var newArray24 = this25; var _g47 = 0; var _g125 = _this22.sizeVec3; while(_g47 < _g125) { var i28 = _g47++; newArray24[i28] = _this22.stackVec3[i28]; _this22.stackVec3[i28] = null; } _this22.stackVec3 = newArray24; } _this22.stackVec3[_this22.sizeVec3++] = normal; } if(mat36 != null) { var t0012 = 1; var t0112 = 0; var t0212 = 0; var t1012 = 0; var t1112 = 1; var t1212 = 0; var t2012 = 0; var t2112 = 0; var t2212 = 1; mat36.e00 = t0012; mat36.e01 = t0112; mat36.e02 = t0212; mat36.e10 = t1012; mat36.e11 = t1112; mat36.e12 = t1212; mat36.e20 = t2012; mat36.e21 = t2112; mat36.e22 = t2212; if(_this22.sizeMat3 == _this22.stackMat3.length) { var newLength25 = _this22.sizeMat3 << 1; var this26 = new Array(newLength25); var newArray25 = this26; var _g48 = 0; var _g126 = _this22.sizeMat3; while(_g48 < _g126) { var i29 = _g48++; newArray25[i29] = _this22.stackMat3[i29]; _this22.stackMat3[i29] = null; } _this22.stackMat3 = newArray25; } _this22.stackMat3[_this22.sizeMat3++] = mat36; } if(mat46 != null) { var t0013 = 1; var t0113 = 0; var t0213 = 0; var t036 = 0; var t1013 = 0; var t1113 = 1; var t1213 = 0; var t136 = 0; var t2013 = 0; var t2113 = 0; var t2213 = 1; var t236 = 0; var t306 = 0; var t316 = 0; var t326 = 0; var t336 = 1; mat46.e00 = t0013; mat46.e01 = t0113; mat46.e02 = t0213; mat46.e03 = t036; mat46.e10 = t1013; mat46.e11 = t1113; mat46.e12 = t1213; mat46.e13 = t136; mat46.e20 = t2013; mat46.e21 = t2113; mat46.e22 = t2213; mat46.e23 = t236; mat46.e30 = t306; mat46.e31 = t316; mat46.e32 = t326; mat46.e33 = t336; if(_this22.sizeMat4 == _this22.stackMat4.length) { var newLength26 = _this22.sizeMat4 << 1; var this27 = new Array(newLength26); var newArray26 = this27; var _g49 = 0; var _g127 = _this22.sizeMat4; while(_g49 < _g127) { var i30 = _g49++; newArray26[i30] = _this22.stackMat4[i30]; _this22.stackMat4[i30] = null; } _this22.stackMat4 = newArray26; } _this22.stackMat4[_this22.sizeMat4++] = mat46; } if(quat6 != null) { var tx13 = 0; var ty13 = 0; var tz13 = 0; var tw6 = 1; quat6.x = tx13; quat6.y = ty13; quat6.z = tz13; quat6.w = tw6; if(_this22.sizeQuat == _this22.stackQuat.length) { var newLength27 = _this22.sizeQuat << 1; var this28 = new Array(newLength27); var newArray27 = this28; var _g50 = 0; var _g128 = _this22.sizeQuat; while(_g50 < _g128) { var i31 = _g50++; newArray27[i31] = _this22.stackQuat[i31]; _this22.stackQuat[i31] = null; } _this22.stackQuat = newArray27; } _this22.stackQuat[_this22.sizeQuat++] = quat6; } var _this23 = this._pool; var vec3 = null; var mat47 = null; var quat7 = null; if(vec3 != null) { vec3.zero(); if(_this23.sizeVec3 == _this23.stackVec3.length) { var newLength28 = _this23.sizeVec3 << 1; var this29 = new Array(newLength28); var newArray28 = this29; var _g51 = 0; var _g129 = _this23.sizeVec3; while(_g51 < _g129) { var i32 = _g51++; newArray28[i32] = _this23.stackVec3[i32]; _this23.stackVec3[i32] = null; } _this23.stackVec3 = newArray28; } _this23.stackVec3[_this23.sizeVec3++] = vec3; } if(m != null) { var t0014 = 1; var t0114 = 0; var t0214 = 0; var t1014 = 0; var t1114 = 1; var t1214 = 0; var t2014 = 0; var t2114 = 0; var t2214 = 1; m.e00 = t0014; m.e01 = t0114; m.e02 = t0214; m.e10 = t1014; m.e11 = t1114; m.e12 = t1214; m.e20 = t2014; m.e21 = t2114; m.e22 = t2214; if(_this23.sizeMat3 == _this23.stackMat3.length) { var newLength29 = _this23.sizeMat3 << 1; var this30 = new Array(newLength29); var newArray29 = this30; var _g52 = 0; var _g130 = _this23.sizeMat3; while(_g52 < _g130) { var i33 = _g52++; newArray29[i33] = _this23.stackMat3[i33]; _this23.stackMat3[i33] = null; } _this23.stackMat3 = newArray29; } _this23.stackMat3[_this23.sizeMat3++] = m; } if(mat47 != null) { var t0015 = 1; var t0115 = 0; var t0215 = 0; var t037 = 0; var t1015 = 0; var t1115 = 1; var t1215 = 0; var t137 = 0; var t2015 = 0; var t2115 = 0; var t2215 = 1; var t237 = 0; var t307 = 0; var t317 = 0; var t327 = 0; var t337 = 1; mat47.e00 = t0015; mat47.e01 = t0115; mat47.e02 = t0215; mat47.e03 = t037; mat47.e10 = t1015; mat47.e11 = t1115; mat47.e12 = t1215; mat47.e13 = t137; mat47.e20 = t2015; mat47.e21 = t2115; mat47.e22 = t2215; mat47.e23 = t237; mat47.e30 = t307; mat47.e31 = t317; mat47.e32 = t327; mat47.e33 = t337; if(_this23.sizeMat4 == _this23.stackMat4.length) { var newLength30 = _this23.sizeMat4 << 1; var this31 = new Array(newLength30); var newArray30 = this31; var _g53 = 0; var _g131 = _this23.sizeMat4; while(_g53 < _g131) { var i34 = _g53++; newArray30[i34] = _this23.stackMat4[i34]; _this23.stackMat4[i34] = null; } _this23.stackMat4 = newArray30; } _this23.stackMat4[_this23.sizeMat4++] = mat47; } if(quat7 != null) { var tx14 = 0; var ty14 = 0; var tz14 = 0; var tw7 = 1; quat7.x = tx14; quat7.y = ty14; quat7.z = tz14; quat7.w = tw7; if(_this23.sizeQuat == _this23.stackQuat.length) { var newLength31 = _this23.sizeQuat << 1; var this32 = new Array(newLength31); var newArray31 = this32; var _g54 = 0; var _g132 = _this23.sizeQuat; while(_g54 < _g132) { var i35 = _g54++; newArray31[i35] = _this23.stackQuat[i35]; _this23.stackQuat[i35] = null; } _this23.stackQuat = newArray31; } _this23.stackQuat[_this23.sizeQuat++] = quat7; } var _this24 = this._pool; var mat37 = null; var mat48 = null; var quat8 = null; if(o != null) { o.zero(); if(_this24.sizeVec3 == _this24.stackVec3.length) { var newLength32 = _this24.sizeVec3 << 1; var this33 = new Array(newLength32); var newArray32 = this33; var _g55 = 0; var _g133 = _this24.sizeVec3; while(_g55 < _g133) { var i36 = _g55++; newArray32[i36] = _this24.stackVec3[i36]; _this24.stackVec3[i36] = null; } _this24.stackVec3 = newArray32; } _this24.stackVec3[_this24.sizeVec3++] = o; } if(mat37 != null) { var t0016 = 1; var t0116 = 0; var t0216 = 0; var t1016 = 0; var t1116 = 1; var t1216 = 0; var t2016 = 0; var t2116 = 0; var t2216 = 1; mat37.e00 = t0016; mat37.e01 = t0116; mat37.e02 = t0216; mat37.e10 = t1016; mat37.e11 = t1116; mat37.e12 = t1216; mat37.e20 = t2016; mat37.e21 = t2116; mat37.e22 = t2216; if(_this24.sizeMat3 == _this24.stackMat3.length) { var newLength33 = _this24.sizeMat3 << 1; var this34 = new Array(newLength33); var newArray33 = this34; var _g56 = 0; var _g134 = _this24.sizeMat3; while(_g56 < _g134) { var i37 = _g56++; newArray33[i37] = _this24.stackMat3[i37]; _this24.stackMat3[i37] = null; } _this24.stackMat3 = newArray33; } _this24.stackMat3[_this24.sizeMat3++] = mat37; } if(mat48 != null) { var t0017 = 1; var t0117 = 0; var t0217 = 0; var t038 = 0; var t1017 = 0; var t1117 = 1; var t1217 = 0; var t138 = 0; var t2017 = 0; var t2117 = 0; var t2217 = 1; var t238 = 0; var t308 = 0; var t318 = 0; var t328 = 0; var t338 = 1; mat48.e00 = t0017; mat48.e01 = t0117; mat48.e02 = t0217; mat48.e03 = t038; mat48.e10 = t1017; mat48.e11 = t1117; mat48.e12 = t1217; mat48.e13 = t138; mat48.e20 = t2017; mat48.e21 = t2117; mat48.e22 = t2217; mat48.e23 = t238; mat48.e30 = t308; mat48.e31 = t318; mat48.e32 = t328; mat48.e33 = t338; if(_this24.sizeMat4 == _this24.stackMat4.length) { var newLength34 = _this24.sizeMat4 << 1; var this35 = new Array(newLength34); var newArray34 = this35; var _g57 = 0; var _g135 = _this24.sizeMat4; while(_g57 < _g135) { var i38 = _g57++; newArray34[i38] = _this24.stackMat4[i38]; _this24.stackMat4[i38] = null; } _this24.stackMat4 = newArray34; } _this24.stackMat4[_this24.sizeMat4++] = mat48; } if(quat8 != null) { var tx15 = 0; var ty15 = 0; var tz15 = 0; var tw8 = 1; quat8.x = tx15; quat8.y = ty15; quat8.z = tz15; quat8.w = tw8; if(_this24.sizeQuat == _this24.stackQuat.length) { var newLength35 = _this24.sizeQuat << 1; var this36 = new Array(newLength35); var newArray35 = this36; var _g58 = 0; var _g136 = _this24.sizeQuat; while(_g58 < _g136) { var i39 = _g58++; newArray35[i39] = _this24.stackQuat[i39]; _this24.stackQuat[i39] = null; } _this24.stackQuat = newArray35; } _this24.stackQuat[_this24.sizeQuat++] = quat8; } break; } } if(d.drawAabbs) { var aabb = s._aabb; var color = style.aabbColor; var _this25 = this._pool; var min = _this25.sizeVec3 == 0 ? new oimo.common.Vec3() : _this25.stackVec3[--_this25.sizeVec3]; var _this26 = this._pool; var max = _this26.sizeVec3 == 0 ? new oimo.common.Vec3() : _this26.stackVec3[--_this26.sizeVec3]; var v15 = min; v15.x = aabb._minX; v15.y = aabb._minY; v15.z = aabb._minZ; var v16 = max; v16.x = aabb._maxX; v16.y = aabb._maxY; v16.z = aabb._maxZ; d.aabb(min,max,color); var _this27 = this._pool; var mat38 = null; var mat49 = null; var quat9 = null; if(min != null) { min.zero(); if(_this27.sizeVec3 == _this27.stackVec3.length) { var newLength36 = _this27.sizeVec3 << 1; var this37 = new Array(newLength36); var newArray36 = this37; var _g59 = 0; var _g137 = _this27.sizeVec3; while(_g59 < _g137) { var i40 = _g59++; newArray36[i40] = _this27.stackVec3[i40]; _this27.stackVec3[i40] = null; } _this27.stackVec3 = newArray36; } _this27.stackVec3[_this27.sizeVec3++] = min; } if(mat38 != null) { var t0018 = 1; var t0118 = 0; var t0218 = 0; var t1018 = 0; var t1118 = 1; var t1218 = 0; var t2018 = 0; var t2118 = 0; var t2218 = 1; mat38.e00 = t0018; mat38.e01 = t0118; mat38.e02 = t0218; mat38.e10 = t1018; mat38.e11 = t1118; mat38.e12 = t1218; mat38.e20 = t2018; mat38.e21 = t2118; mat38.e22 = t2218; if(_this27.sizeMat3 == _this27.stackMat3.length) { var newLength37 = _this27.sizeMat3 << 1; var this38 = new Array(newLength37); var newArray37 = this38; var _g60 = 0; var _g138 = _this27.sizeMat3; while(_g60 < _g138) { var i41 = _g60++; newArray37[i41] = _this27.stackMat3[i41]; _this27.stackMat3[i41] = null; } _this27.stackMat3 = newArray37; } _this27.stackMat3[_this27.sizeMat3++] = mat38; } if(mat49 != null) { var t0019 = 1; var t0119 = 0; var t0219 = 0; var t039 = 0; var t1019 = 0; var t1119 = 1; var t1219 = 0; var t139 = 0; var t2019 = 0; var t2119 = 0; var t2219 = 1; var t239 = 0; var t309 = 0; var t319 = 0; var t329 = 0; var t339 = 1; mat49.e00 = t0019; mat49.e01 = t0119; mat49.e02 = t0219; mat49.e03 = t039; mat49.e10 = t1019; mat49.e11 = t1119; mat49.e12 = t1219; mat49.e13 = t139; mat49.e20 = t2019; mat49.e21 = t2119; mat49.e22 = t2219; mat49.e23 = t239; mat49.e30 = t309; mat49.e31 = t319; mat49.e32 = t329; mat49.e33 = t339; if(_this27.sizeMat4 == _this27.stackMat4.length) { var newLength38 = _this27.sizeMat4 << 1; var this39 = new Array(newLength38); var newArray38 = this39; var _g61 = 0; var _g139 = _this27.sizeMat4; while(_g61 < _g139) { var i42 = _g61++; newArray38[i42] = _this27.stackMat4[i42]; _this27.stackMat4[i42] = null; } _this27.stackMat4 = newArray38; } _this27.stackMat4[_this27.sizeMat4++] = mat49; } if(quat9 != null) { var tx16 = 0; var ty16 = 0; var tz16 = 0; var tw9 = 1; quat9.x = tx16; quat9.y = ty16; quat9.z = tz16; quat9.w = tw9; if(_this27.sizeQuat == _this27.stackQuat.length) { var newLength39 = _this27.sizeQuat << 1; var this40 = new Array(newLength39); var newArray39 = this40; var _g62 = 0; var _g140 = _this27.sizeQuat; while(_g62 < _g140) { var i43 = _g62++; newArray39[i43] = _this27.stackQuat[i43]; _this27.stackQuat[i43] = null; } _this27.stackQuat = newArray39; } _this27.stackQuat[_this27.sizeQuat++] = quat9; } var _this28 = this._pool; var mat39 = null; var mat410 = null; var quat10 = null; if(max != null) { max.zero(); if(_this28.sizeVec3 == _this28.stackVec3.length) { var newLength40 = _this28.sizeVec3 << 1; var this41 = new Array(newLength40); var newArray40 = this41; var _g63 = 0; var _g141 = _this28.sizeVec3; while(_g63 < _g141) { var i44 = _g63++; newArray40[i44] = _this28.stackVec3[i44]; _this28.stackVec3[i44] = null; } _this28.stackVec3 = newArray40; } _this28.stackVec3[_this28.sizeVec3++] = max; } if(mat39 != null) { var t0020 = 1; var t0120 = 0; var t0220 = 0; var t1020 = 0; var t1120 = 1; var t1220 = 0; var t2020 = 0; var t2120 = 0; var t2220 = 1; mat39.e00 = t0020; mat39.e01 = t0120; mat39.e02 = t0220; mat39.e10 = t1020; mat39.e11 = t1120; mat39.e12 = t1220; mat39.e20 = t2020; mat39.e21 = t2120; mat39.e22 = t2220; if(_this28.sizeMat3 == _this28.stackMat3.length) { var newLength41 = _this28.sizeMat3 << 1; var this42 = new Array(newLength41); var newArray41 = this42; var _g64 = 0; var _g142 = _this28.sizeMat3; while(_g64 < _g142) { var i45 = _g64++; newArray41[i45] = _this28.stackMat3[i45]; _this28.stackMat3[i45] = null; } _this28.stackMat3 = newArray41; } _this28.stackMat3[_this28.sizeMat3++] = mat39; } if(mat410 != null) { var t0021 = 1; var t0121 = 0; var t0221 = 0; var t0310 = 0; var t1021 = 0; var t1121 = 1; var t1221 = 0; var t1310 = 0; var t2021 = 0; var t2121 = 0; var t2221 = 1; var t2310 = 0; var t3010 = 0; var t3110 = 0; var t3210 = 0; var t3310 = 1; mat410.e00 = t0021; mat410.e01 = t0121; mat410.e02 = t0221; mat410.e03 = t0310; mat410.e10 = t1021; mat410.e11 = t1121; mat410.e12 = t1221; mat410.e13 = t1310; mat410.e20 = t2021; mat410.e21 = t2121; mat410.e22 = t2221; mat410.e23 = t2310; mat410.e30 = t3010; mat410.e31 = t3110; mat410.e32 = t3210; mat410.e33 = t3310; if(_this28.sizeMat4 == _this28.stackMat4.length) { var newLength42 = _this28.sizeMat4 << 1; var this43 = new Array(newLength42); var newArray42 = this43; var _g65 = 0; var _g143 = _this28.sizeMat4; while(_g65 < _g143) { var i46 = _g65++; newArray42[i46] = _this28.stackMat4[i46]; _this28.stackMat4[i46] = null; } _this28.stackMat4 = newArray42; } _this28.stackMat4[_this28.sizeMat4++] = mat410; } if(quat10 != null) { var tx17 = 0; var ty17 = 0; var tz17 = 0; var tw10 = 1; quat10.x = tx17; quat10.y = ty17; quat10.z = tz17; quat10.w = tw10; if(_this28.sizeQuat == _this28.stackQuat.length) { var newLength43 = _this28.sizeQuat << 1; var this44 = new Array(newLength43); var newArray43 = this44; var _g66 = 0; var _g144 = _this28.sizeQuat; while(_g66 < _g144) { var i47 = _g66++; newArray43[i47] = _this28.stackQuat[i47]; _this28.stackQuat[i47] = null; } _this28.stackQuat = newArray43; } _this28.stackQuat[_this28.sizeQuat++] = quat10; } } s = n1; } r = n; } } _drawConstraints(d) { var style = d.style; if(d.drawPairs || d.drawContacts) { var c = this._contactManager._contactList; while(c != null) { var n = c._next; if(d.drawPairs) { var color = style.pairColor; var _this = this._pool; var v1 = _this.sizeVec3 == 0 ? new oimo.common.Vec3() : _this.stackVec3[--_this.sizeVec3]; var _this1 = this._pool; var v2 = _this1.sizeVec3 == 0 ? new oimo.common.Vec3() : _this1.stackVec3[--_this1.sizeVec3]; var v = v1; v.x = c._s1._transform._positionX; v.y = c._s1._transform._positionY; v.z = c._s1._transform._positionZ; var v3 = v2; v3.x = c._s2._transform._positionX; v3.y = c._s2._transform._positionY; v3.z = c._s2._transform._positionZ; d.line(v1,v2,color); var _this2 = this._pool; var mat3 = null; var mat4 = null; var quat = null; if(v1 != null) { v1.zero(); if(_this2.sizeVec3 == _this2.stackVec3.length) { var newLength = _this2.sizeVec3 << 1; var this1 = new Array(newLength); var newArray = this1; var _g = 0; var _g1 = _this2.sizeVec3; while(_g < _g1) { var i = _g++; newArray[i] = _this2.stackVec3[i]; _this2.stackVec3[i] = null; } _this2.stackVec3 = newArray; } _this2.stackVec3[_this2.sizeVec3++] = v1; } if(mat3 != null) { var t00 = 1; var t01 = 0; var t02 = 0; var t10 = 0; var t11 = 1; var t12 = 0; var t20 = 0; var t21 = 0; var t22 = 1; mat3.e00 = t00; mat3.e01 = t01; mat3.e02 = t02; mat3.e10 = t10; mat3.e11 = t11; mat3.e12 = t12; mat3.e20 = t20; mat3.e21 = t21; mat3.e22 = t22; if(_this2.sizeMat3 == _this2.stackMat3.length) { var newLength1 = _this2.sizeMat3 << 1; var this2 = new Array(newLength1); var newArray1 = this2; var _g2 = 0; var _g11 = _this2.sizeMat3; while(_g2 < _g11) { var i1 = _g2++; newArray1[i1] = _this2.stackMat3[i1]; _this2.stackMat3[i1] = null; } _this2.stackMat3 = newArray1; } _this2.stackMat3[_this2.sizeMat3++] = mat3; } if(mat4 != null) { var t001 = 1; var t011 = 0; var t021 = 0; var t03 = 0; var t101 = 0; var t111 = 1; var t121 = 0; var t13 = 0; var t201 = 0; var t211 = 0; var t221 = 1; var t23 = 0; var t30 = 0; var t31 = 0; var t32 = 0; var t33 = 1; mat4.e00 = t001; mat4.e01 = t011; mat4.e02 = t021; mat4.e03 = t03; mat4.e10 = t101; mat4.e11 = t111; mat4.e12 = t121; mat4.e13 = t13; mat4.e20 = t201; mat4.e21 = t211; mat4.e22 = t221; mat4.e23 = t23; mat4.e30 = t30; mat4.e31 = t31; mat4.e32 = t32; mat4.e33 = t33; if(_this2.sizeMat4 == _this2.stackMat4.length) { var newLength2 = _this2.sizeMat4 << 1; var this3 = new Array(newLength2); var newArray2 = this3; var _g3 = 0; var _g12 = _this2.sizeMat4; while(_g3 < _g12) { var i2 = _g3++; newArray2[i2] = _this2.stackMat4[i2]; _this2.stackMat4[i2] = null; } _this2.stackMat4 = newArray2; } _this2.stackMat4[_this2.sizeMat4++] = mat4; } if(quat != null) { var tx = 0; var ty = 0; var tz = 0; var tw = 1; quat.x = tx; quat.y = ty; quat.z = tz; quat.w = tw; if(_this2.sizeQuat == _this2.stackQuat.length) { var newLength3 = _this2.sizeQuat << 1; var this4 = new Array(newLength3); var newArray3 = this4; var _g4 = 0; var _g13 = _this2.sizeQuat; while(_g4 < _g13) { var i3 = _g4++; newArray3[i3] = _this2.stackQuat[i3]; _this2.stackQuat[i3] = null; } _this2.stackQuat = newArray3; } _this2.stackQuat[_this2.sizeQuat++] = quat; } var _this3 = this._pool; var mat31 = null; var mat41 = null; var quat1 = null; if(v2 != null) { v2.zero(); if(_this3.sizeVec3 == _this3.stackVec3.length) { var newLength4 = _this3.sizeVec3 << 1; var this5 = new Array(newLength4); var newArray4 = this5; var _g5 = 0; var _g14 = _this3.sizeVec3; while(_g5 < _g14) { var i4 = _g5++; newArray4[i4] = _this3.stackVec3[i4]; _this3.stackVec3[i4] = null; } _this3.stackVec3 = newArray4; } _this3.stackVec3[_this3.sizeVec3++] = v2; } if(mat31 != null) { var t002 = 1; var t012 = 0; var t022 = 0; var t102 = 0; var t112 = 1; var t122 = 0; var t202 = 0; var t212 = 0; var t222 = 1; mat31.e00 = t002; mat31.e01 = t012; mat31.e02 = t022; mat31.e10 = t102; mat31.e11 = t112; mat31.e12 = t122; mat31.e20 = t202; mat31.e21 = t212; mat31.e22 = t222; if(_this3.sizeMat3 == _this3.stackMat3.length) { var newLength5 = _this3.sizeMat3 << 1; var this6 = new Array(newLength5); var newArray5 = this6; var _g6 = 0; var _g15 = _this3.sizeMat3; while(_g6 < _g15) { var i5 = _g6++; newArray5[i5] = _this3.stackMat3[i5]; _this3.stackMat3[i5] = null; } _this3.stackMat3 = newArray5; } _this3.stackMat3[_this3.sizeMat3++] = mat31; } if(mat41 != null) { var t003 = 1; var t013 = 0; var t023 = 0; var t031 = 0; var t103 = 0; var t113 = 1; var t123 = 0; var t131 = 0; var t203 = 0; var t213 = 0; var t223 = 1; var t231 = 0; var t301 = 0; var t311 = 0; var t321 = 0; var t331 = 1; mat41.e00 = t003; mat41.e01 = t013; mat41.e02 = t023; mat41.e03 = t031; mat41.e10 = t103; mat41.e11 = t113; mat41.e12 = t123; mat41.e13 = t131; mat41.e20 = t203; mat41.e21 = t213; mat41.e22 = t223; mat41.e23 = t231; mat41.e30 = t301; mat41.e31 = t311; mat41.e32 = t321; mat41.e33 = t331; if(_this3.sizeMat4 == _this3.stackMat4.length) { var newLength6 = _this3.sizeMat4 << 1; var this7 = new Array(newLength6); var newArray6 = this7; var _g7 = 0; var _g16 = _this3.sizeMat4; while(_g7 < _g16) { var i6 = _g7++; newArray6[i6] = _this3.stackMat4[i6]; _this3.stackMat4[i6] = null; } _this3.stackMat4 = newArray6; } _this3.stackMat4[_this3.sizeMat4++] = mat41; } if(quat1 != null) { var tx1 = 0; var ty1 = 0; var tz1 = 0; var tw1 = 1; quat1.x = tx1; quat1.y = ty1; quat1.z = tz1; quat1.w = tw1; if(_this3.sizeQuat == _this3.stackQuat.length) { var newLength7 = _this3.sizeQuat << 1; var this8 = new Array(newLength7); var newArray7 = this8; var _g8 = 0; var _g17 = _this3.sizeQuat; while(_g8 < _g17) { var i7 = _g8++; newArray7[i7] = _this3.stackQuat[i7]; _this3.stackQuat[i7] = null; } _this3.stackQuat = newArray7; } _this3.stackQuat[_this3.sizeQuat++] = quat1; } } if(d.drawContacts) { var cc = c._contactConstraint; var ps = c._contactConstraint._manifold._points; var _g9 = 0; var _g18 = c._contactConstraint._manifold._numPoints; while(_g9 < _g18) { var i8 = _g9++; var p = ps[i8]; var style1 = d.style; var tf1 = cc._s1._transform; var tf2 = cc._s2._transform; var _this4 = this._pool; var pos1 = _this4.sizeVec3 == 0 ? new oimo.common.Vec3() : _this4.stackVec3[--_this4.sizeVec3]; var _this5 = this._pool; var pos2 = _this5.sizeVec3 == 0 ? new oimo.common.Vec3() : _this5.stackVec3[--_this5.sizeVec3]; var _this6 = this._pool; var normal = _this6.sizeVec3 == 0 ? new oimo.common.Vec3() : _this6.stackVec3[--_this6.sizeVec3]; var _this7 = this._pool; var tangent = _this7.sizeVec3 == 0 ? new oimo.common.Vec3() : _this7.stackVec3[--_this7.sizeVec3]; var _this8 = this._pool; var binormal = _this8.sizeVec3 == 0 ? new oimo.common.Vec3() : _this8.stackVec3[--_this8.sizeVec3]; var v4 = pos1; v4.x = p._pos1X; v4.y = p._pos1Y; v4.z = p._pos1Z; var v5 = pos2; v5.x = p._pos2X; v5.y = p._pos2Y; v5.z = p._pos2Z; var v6 = normal; v6.x = cc._manifold._normalX; v6.y = cc._manifold._normalY; v6.z = cc._manifold._normalZ; var v7 = tangent; v7.x = cc._manifold._tangentX; v7.y = cc._manifold._tangentY; v7.z = cc._manifold._tangentZ; var v8 = binormal; v8.x = cc._manifold._binormalX; v8.y = cc._manifold._binormalY; v8.z = cc._manifold._binormalZ; if(p._disabled) { d.point(pos1,style1.disabledContactColor); d.point(pos2,style1.disabledContactColor); d.line(pos1,pos2,style1.disabledContactColor); } else if(p._warmStarted) { var color1; switch(p._id & 3) { case 0: color1 = style1.contactColor; break; case 1: color1 = style1.contactColor2; break; case 2: color1 = style1.contactColor3; break; default: color1 = style1.contactColor4; } d.point(pos1,color1); d.point(pos2,color1); d.line(pos1,pos2,style1.contactColor); } else { d.point(pos1,style1.newContactColor); d.point(pos2,style1.newContactColor); d.line(pos1,pos2,style1.newContactColor); } pos2.x = pos1.x; pos2.y = pos1.y; pos2.z = pos1.z; var _this9 = pos2; var s = style1.contactNormalLength; var tx2 = _this9.x + normal.x * s; var ty2 = _this9.y + normal.y * s; var tz2 = _this9.z + normal.z * s; _this9.x = tx2; _this9.y = ty2; _this9.z = tz2; d.line(pos1,pos2,style1.contactNormalColor); if(d.drawContactBases) { pos2.x = pos1.x; pos2.y = pos1.y; pos2.z = pos1.z; var _this10 = pos2; var s1 = style1.contactTangentLength; var tx3 = _this10.x + tangent.x * s1; var ty3 = _this10.y + tangent.y * s1; var tz3 = _this10.z + tangent.z * s1; _this10.x = tx3; _this10.y = ty3; _this10.z = tz3; d.line(pos1,pos2,style1.contactTangentColor); pos2.x = pos1.x; pos2.y = pos1.y; pos2.z = pos1.z; var _this11 = pos2; var s2 = style1.contactBinormalLength; var tx4 = _this11.x + binormal.x * s2; var ty4 = _this11.y + binormal.y * s2; var tz4 = _this11.z + binormal.z * s2; _this11.x = tx4; _this11.y = ty4; _this11.z = tz4; d.line(pos1,pos2,style1.contactBinormalColor); } var _this12 = this._pool; var mat32 = null; var mat42 = null; var quat2 = null; if(pos1 != null) { pos1.zero(); if(_this12.sizeVec3 == _this12.stackVec3.length) { var newLength8 = _this12.sizeVec3 << 1; var this9 = new Array(newLength8); var newArray8 = this9; var _g10 = 0; var _g19 = _this12.sizeVec3; while(_g10 < _g19) { var i9 = _g10++; newArray8[i9] = _this12.stackVec3[i9]; _this12.stackVec3[i9] = null; } _this12.stackVec3 = newArray8; } _this12.stackVec3[_this12.sizeVec3++] = pos1; } if(mat32 != null) { var t004 = 1; var t014 = 0; var t024 = 0; var t104 = 0; var t114 = 1; var t124 = 0; var t204 = 0; var t214 = 0; var t224 = 1; mat32.e00 = t004; mat32.e01 = t014; mat32.e02 = t024; mat32.e10 = t104; mat32.e11 = t114; mat32.e12 = t124; mat32.e20 = t204; mat32.e21 = t214; mat32.e22 = t224; if(_this12.sizeMat3 == _this12.stackMat3.length) { var newLength9 = _this12.sizeMat3 << 1; var this10 = new Array(newLength9); var newArray9 = this10; var _g20 = 0; var _g110 = _this12.sizeMat3; while(_g20 < _g110) { var i10 = _g20++; newArray9[i10] = _this12.stackMat3[i10]; _this12.stackMat3[i10] = null; } _this12.stackMat3 = newArray9; } _this12.stackMat3[_this12.sizeMat3++] = mat32; } if(mat42 != null) { var t005 = 1; var t015 = 0; var t025 = 0; var t032 = 0; var t105 = 0; var t115 = 1; var t125 = 0; var t132 = 0; var t205 = 0; var t215 = 0; var t225 = 1; var t232 = 0; var t302 = 0; var t312 = 0; var t322 = 0; var t332 = 1; mat42.e00 = t005; mat42.e01 = t015; mat42.e02 = t025; mat42.e03 = t032; mat42.e10 = t105; mat42.e11 = t115; mat42.e12 = t125; mat42.e13 = t132; mat42.e20 = t205; mat42.e21 = t215; mat42.e22 = t225; mat42.e23 = t232; mat42.e30 = t302; mat42.e31 = t312; mat42.e32 = t322; mat42.e33 = t332; if(_this12.sizeMat4 == _this12.stackMat4.length) { var newLength10 = _this12.sizeMat4 << 1; var this11 = new Array(newLength10); var newArray10 = this11; var _g21 = 0; var _g111 = _this12.sizeMat4; while(_g21 < _g111) { var i11 = _g21++; newArray10[i11] = _this12.stackMat4[i11]; _this12.stackMat4[i11] = null; } _this12.stackMat4 = newArray10; } _this12.stackMat4[_this12.sizeMat4++] = mat42; } if(quat2 != null) { var tx5 = 0; var ty5 = 0; var tz5 = 0; var tw2 = 1; quat2.x = tx5; quat2.y = ty5; quat2.z = tz5; quat2.w = tw2; if(_this12.sizeQuat == _this12.stackQuat.length) { var newLength11 = _this12.sizeQuat << 1; var this12 = new Array(newLength11); var newArray11 = this12; var _g22 = 0; var _g112 = _this12.sizeQuat; while(_g22 < _g112) { var i12 = _g22++; newArray11[i12] = _this12.stackQuat[i12]; _this12.stackQuat[i12] = null; } _this12.stackQuat = newArray11; } _this12.stackQuat[_this12.sizeQuat++] = quat2; } var _this13 = this._pool; var mat33 = null; var mat43 = null; var quat3 = null; if(pos2 != null) { pos2.zero(); if(_this13.sizeVec3 == _this13.stackVec3.length) { var newLength12 = _this13.sizeVec3 << 1; var this13 = new Array(newLength12); var newArray12 = this13; var _g23 = 0; var _g113 = _this13.sizeVec3; while(_g23 < _g113) { var i13 = _g23++; newArray12[i13] = _this13.stackVec3[i13]; _this13.stackVec3[i13] = null; } _this13.stackVec3 = newArray12; } _this13.stackVec3[_this13.sizeVec3++] = pos2; } if(mat33 != null) { var t006 = 1; var t016 = 0; var t026 = 0; var t106 = 0; var t116 = 1; var t126 = 0; var t206 = 0; var t216 = 0; var t226 = 1; mat33.e00 = t006; mat33.e01 = t016; mat33.e02 = t026; mat33.e10 = t106; mat33.e11 = t116; mat33.e12 = t126; mat33.e20 = t206; mat33.e21 = t216; mat33.e22 = t226; if(_this13.sizeMat3 == _this13.stackMat3.length) { var newLength13 = _this13.sizeMat3 << 1; var this14 = new Array(newLength13); var newArray13 = this14; var _g24 = 0; var _g114 = _this13.sizeMat3; while(_g24 < _g114) { var i14 = _g24++; newArray13[i14] = _this13.stackMat3[i14]; _this13.stackMat3[i14] = null; } _this13.stackMat3 = newArray13; } _this13.stackMat3[_this13.sizeMat3++] = mat33; } if(mat43 != null) { var t007 = 1; var t017 = 0; var t027 = 0; var t033 = 0; var t107 = 0; var t117 = 1; var t127 = 0; var t133 = 0; var t207 = 0; var t217 = 0; var t227 = 1; var t233 = 0; var t303 = 0; var t313 = 0; var t323 = 0; var t333 = 1; mat43.e00 = t007; mat43.e01 = t017; mat43.e02 = t027; mat43.e03 = t033; mat43.e10 = t107; mat43.e11 = t117; mat43.e12 = t127; mat43.e13 = t133; mat43.e20 = t207; mat43.e21 = t217; mat43.e22 = t227; mat43.e23 = t233; mat43.e30 = t303; mat43.e31 = t313; mat43.e32 = t323; mat43.e33 = t333; if(_this13.sizeMat4 == _this13.stackMat4.length) { var newLength14 = _this13.sizeMat4 << 1; var this15 = new Array(newLength14); var newArray14 = this15; var _g25 = 0; var _g115 = _this13.sizeMat4; while(_g25 < _g115) { var i15 = _g25++; newArray14[i15] = _this13.stackMat4[i15]; _this13.stackMat4[i15] = null; } _this13.stackMat4 = newArray14; } _this13.stackMat4[_this13.sizeMat4++] = mat43; } if(quat3 != null) { var tx6 = 0; var ty6 = 0; var tz6 = 0; var tw3 = 1; quat3.x = tx6; quat3.y = ty6; quat3.z = tz6; quat3.w = tw3; if(_this13.sizeQuat == _this13.stackQuat.length) { var newLength15 = _this13.sizeQuat << 1; var this16 = new Array(newLength15); var newArray15 = this16; var _g26 = 0; var _g116 = _this13.sizeQuat; while(_g26 < _g116) { var i16 = _g26++; newArray15[i16] = _this13.stackQuat[i16]; _this13.stackQuat[i16] = null; } _this13.stackQuat = newArray15; } _this13.stackQuat[_this13.sizeQuat++] = quat3; } var _this14 = this._pool; var mat34 = null; var mat44 = null; var quat4 = null; if(normal != null) { normal.zero(); if(_this14.sizeVec3 == _this14.stackVec3.length) { var newLength16 = _this14.sizeVec3 << 1; var this17 = new Array(newLength16); var newArray16 = this17; var _g27 = 0; var _g117 = _this14.sizeVec3; while(_g27 < _g117) { var i17 = _g27++; newArray16[i17] = _this14.stackVec3[i17]; _this14.stackVec3[i17] = null; } _this14.stackVec3 = newArray16; } _this14.stackVec3[_this14.sizeVec3++] = normal; } if(mat34 != null) { var t008 = 1; var t018 = 0; var t028 = 0; var t108 = 0; var t118 = 1; var t128 = 0; var t208 = 0; var t218 = 0; var t228 = 1; mat34.e00 = t008; mat34.e01 = t018; mat34.e02 = t028; mat34.e10 = t108; mat34.e11 = t118; mat34.e12 = t128; mat34.e20 = t208; mat34.e21 = t218; mat34.e22 = t228; if(_this14.sizeMat3 == _this14.stackMat3.length) { var newLength17 = _this14.sizeMat3 << 1; var this18 = new Array(newLength17); var newArray17 = this18; var _g28 = 0; var _g118 = _this14.sizeMat3; while(_g28 < _g118) { var i18 = _g28++; newArray17[i18] = _this14.stackMat3[i18]; _this14.stackMat3[i18] = null; } _this14.stackMat3 = newArray17; } _this14.stackMat3[_this14.sizeMat3++] = mat34; } if(mat44 != null) { var t009 = 1; var t019 = 0; var t029 = 0; var t034 = 0; var t109 = 0; var t119 = 1; var t129 = 0; var t134 = 0; var t209 = 0; var t219 = 0; var t229 = 1; var t234 = 0; var t304 = 0; var t314 = 0; var t324 = 0; var t334 = 1; mat44.e00 = t009; mat44.e01 = t019; mat44.e02 = t029; mat44.e03 = t034; mat44.e10 = t109; mat44.e11 = t119; mat44.e12 = t129; mat44.e13 = t134; mat44.e20 = t209; mat44.e21 = t219; mat44.e22 = t229; mat44.e23 = t234; mat44.e30 = t304; mat44.e31 = t314; mat44.e32 = t324; mat44.e33 = t334; if(_this14.sizeMat4 == _this14.stackMat4.length) { var newLength18 = _this14.sizeMat4 << 1; var this19 = new Array(newLength18); var newArray18 = this19; var _g29 = 0; var _g119 = _this14.sizeMat4; while(_g29 < _g119) { var i19 = _g29++; newArray18[i19] = _this14.stackMat4[i19]; _this14.stackMat4[i19] = null; } _this14.stackMat4 = newArray18; } _this14.stackMat4[_this14.sizeMat4++] = mat44; } if(quat4 != null) { var tx7 = 0; var ty7 = 0; var tz7 = 0; var tw4 = 1; quat4.x = tx7; quat4.y = ty7; quat4.z = tz7; quat4.w = tw4; if(_this14.sizeQuat == _this14.stackQuat.length) { var newLength19 = _this14.sizeQuat << 1; var this20 = new Array(newLength19); var newArray19 = this20; var _g30 = 0; var _g120 = _this14.sizeQuat; while(_g30 < _g120) { var i20 = _g30++; newArray19[i20] = _this14.stackQuat[i20]; _this14.stackQuat[i20] = null; } _this14.stackQuat = newArray19; } _this14.stackQuat[_this14.sizeQuat++] = quat4; } var _this15 = this._pool; var mat35 = null; var mat45 = null; var quat5 = null; if(tangent != null) { tangent.zero(); if(_this15.sizeVec3 == _this15.stackVec3.length) { var newLength20 = _this15.sizeVec3 << 1; var this21 = new Array(newLength20); var newArray20 = this21; var _g31 = 0; var _g121 = _this15.sizeVec3; while(_g31 < _g121) { var i21 = _g31++; newArray20[i21] = _this15.stackVec3[i21]; _this15.stackVec3[i21] = null; } _this15.stackVec3 = newArray20; } _this15.stackVec3[_this15.sizeVec3++] = tangent; } if(mat35 != null) { var t0010 = 1; var t0110 = 0; var t0210 = 0; var t1010 = 0; var t1110 = 1; var t1210 = 0; var t2010 = 0; var t2110 = 0; var t2210 = 1; mat35.e00 = t0010; mat35.e01 = t0110; mat35.e02 = t0210; mat35.e10 = t1010; mat35.e11 = t1110; mat35.e12 = t1210; mat35.e20 = t2010; mat35.e21 = t2110; mat35.e22 = t2210; if(_this15.sizeMat3 == _this15.stackMat3.length) { var newLength21 = _this15.sizeMat3 << 1; var this22 = new Array(newLength21); var newArray21 = this22; var _g32 = 0; var _g122 = _this15.sizeMat3; while(_g32 < _g122) { var i22 = _g32++; newArray21[i22] = _this15.stackMat3[i22]; _this15.stackMat3[i22] = null; } _this15.stackMat3 = newArray21; } _this15.stackMat3[_this15.sizeMat3++] = mat35; } if(mat45 != null) { var t0011 = 1; var t0111 = 0; var t0211 = 0; var t035 = 0; var t1011 = 0; var t1111 = 1; var t1211 = 0; var t135 = 0; var t2011 = 0; var t2111 = 0; var t2211 = 1; var t235 = 0; var t305 = 0; var t315 = 0; var t325 = 0; var t335 = 1; mat45.e00 = t0011; mat45.e01 = t0111; mat45.e02 = t0211; mat45.e03 = t035; mat45.e10 = t1011; mat45.e11 = t1111; mat45.e12 = t1211; mat45.e13 = t135; mat45.e20 = t2011; mat45.e21 = t2111; mat45.e22 = t2211; mat45.e23 = t235; mat45.e30 = t305; mat45.e31 = t315; mat45.e32 = t325; mat45.e33 = t335; if(_this15.sizeMat4 == _this15.stackMat4.length) { var newLength22 = _this15.sizeMat4 << 1; var this23 = new Array(newLength22); var newArray22 = this23; var _g33 = 0; var _g123 = _this15.sizeMat4; while(_g33 < _g123) { var i23 = _g33++; newArray22[i23] = _this15.stackMat4[i23]; _this15.stackMat4[i23] = null; } _this15.stackMat4 = newArray22; } _this15.stackMat4[_this15.sizeMat4++] = mat45; } if(quat5 != null) { var tx8 = 0; var ty8 = 0; var tz8 = 0; var tw5 = 1; quat5.x = tx8; quat5.y = ty8; quat5.z = tz8; quat5.w = tw5; if(_this15.sizeQuat == _this15.stackQuat.length) { var newLength23 = _this15.sizeQuat << 1; var this24 = new Array(newLength23); var newArray23 = this24; var _g34 = 0; var _g124 = _this15.sizeQuat; while(_g34 < _g124) { var i24 = _g34++; newArray23[i24] = _this15.stackQuat[i24]; _this15.stackQuat[i24] = null; } _this15.stackQuat = newArray23; } _this15.stackQuat[_this15.sizeQuat++] = quat5; } var _this16 = this._pool; var mat36 = null; var mat46 = null; var quat6 = null; if(binormal != null) { binormal.zero(); if(_this16.sizeVec3 == _this16.stackVec3.length) { var newLength24 = _this16.sizeVec3 << 1; var this25 = new Array(newLength24); var newArray24 = this25; var _g35 = 0; var _g125 = _this16.sizeVec3; while(_g35 < _g125) { var i25 = _g35++; newArray24[i25] = _this16.stackVec3[i25]; _this16.stackVec3[i25] = null; } _this16.stackVec3 = newArray24; } _this16.stackVec3[_this16.sizeVec3++] = binormal; } if(mat36 != null) { var t0012 = 1; var t0112 = 0; var t0212 = 0; var t1012 = 0; var t1112 = 1; var t1212 = 0; var t2012 = 0; var t2112 = 0; var t2212 = 1; mat36.e00 = t0012; mat36.e01 = t0112; mat36.e02 = t0212; mat36.e10 = t1012; mat36.e11 = t1112; mat36.e12 = t1212; mat36.e20 = t2012; mat36.e21 = t2112; mat36.e22 = t2212; if(_this16.sizeMat3 == _this16.stackMat3.length) { var newLength25 = _this16.sizeMat3 << 1; var this26 = new Array(newLength25); var newArray25 = this26; var _g36 = 0; var _g126 = _this16.sizeMat3; while(_g36 < _g126) { var i26 = _g36++; newArray25[i26] = _this16.stackMat3[i26]; _this16.stackMat3[i26] = null; } _this16.stackMat3 = newArray25; } _this16.stackMat3[_this16.sizeMat3++] = mat36; } if(mat46 != null) { var t0013 = 1; var t0113 = 0; var t0213 = 0; var t036 = 0; var t1013 = 0; var t1113 = 1; var t1213 = 0; var t136 = 0; var t2013 = 0; var t2113 = 0; var t2213 = 1; var t236 = 0; var t306 = 0; var t316 = 0; var t326 = 0; var t336 = 1; mat46.e00 = t0013; mat46.e01 = t0113; mat46.e02 = t0213; mat46.e03 = t036; mat46.e10 = t1013; mat46.e11 = t1113; mat46.e12 = t1213; mat46.e13 = t136; mat46.e20 = t2013; mat46.e21 = t2113; mat46.e22 = t2213; mat46.e23 = t236; mat46.e30 = t306; mat46.e31 = t316; mat46.e32 = t326; mat46.e33 = t336; if(_this16.sizeMat4 == _this16.stackMat4.length) { var newLength26 = _this16.sizeMat4 << 1; var this27 = new Array(newLength26); var newArray26 = this27; var _g37 = 0; var _g127 = _this16.sizeMat4; while(_g37 < _g127) { var i27 = _g37++; newArray26[i27] = _this16.stackMat4[i27]; _this16.stackMat4[i27] = null; } _this16.stackMat4 = newArray26; } _this16.stackMat4[_this16.sizeMat4++] = mat46; } if(quat6 != null) { var tx9 = 0; var ty9 = 0; var tz9 = 0; var tw6 = 1; quat6.x = tx9; quat6.y = ty9; quat6.z = tz9; quat6.w = tw6; if(_this16.sizeQuat == _this16.stackQuat.length) { var newLength27 = _this16.sizeQuat << 1; var this28 = new Array(newLength27); var newArray27 = this28; var _g38 = 0; var _g128 = _this16.sizeQuat; while(_g38 < _g128) { var i28 = _g38++; newArray27[i28] = _this16.stackQuat[i28]; _this16.stackQuat[i28] = null; } _this16.stackQuat = newArray27; } _this16.stackQuat[_this16.sizeQuat++] = quat6; } } } c = n; } } if(d.drawJoints) { var j = this._jointList; while(j != null) { var n1 = j._next; var _this17 = this._pool; var p1 = _this17.sizeVec3 == 0 ? new oimo.common.Vec3() : _this17.stackVec3[--_this17.sizeVec3]; var _this18 = this._pool; var p2 = _this18.sizeVec3 == 0 ? new oimo.common.Vec3() : _this18.stackVec3[--_this18.sizeVec3]; var v9 = p1; v9.x = j._b1._transform._positionX; v9.y = j._b1._transform._positionY; v9.z = j._b1._transform._positionZ; var v10 = p2; v10.x = j._b2._transform._positionX; v10.y = j._b2._transform._positionY; v10.z = j._b2._transform._positionZ; var _this19 = this._pool; var anchor1 = _this19.sizeVec3 == 0 ? new oimo.common.Vec3() : _this19.stackVec3[--_this19.sizeVec3]; var _this20 = this._pool; var anchor2 = _this20.sizeVec3 == 0 ? new oimo.common.Vec3() : _this20.stackVec3[--_this20.sizeVec3]; var _this21 = this._pool; var basisX1 = _this21.sizeVec3 == 0 ? new oimo.common.Vec3() : _this21.stackVec3[--_this21.sizeVec3]; var _this22 = this._pool; var basisY1 = _this22.sizeVec3 == 0 ? new oimo.common.Vec3() : _this22.stackVec3[--_this22.sizeVec3]; var _this23 = this._pool; var basisZ1 = _this23.sizeVec3 == 0 ? new oimo.common.Vec3() : _this23.stackVec3[--_this23.sizeVec3]; var _this24 = this._pool; var basisX2 = _this24.sizeVec3 == 0 ? new oimo.common.Vec3() : _this24.stackVec3[--_this24.sizeVec3]; var _this25 = this._pool; var basisY2 = _this25.sizeVec3 == 0 ? new oimo.common.Vec3() : _this25.stackVec3[--_this25.sizeVec3]; var _this26 = this._pool; var basisZ2 = _this26.sizeVec3 == 0 ? new oimo.common.Vec3() : _this26.stackVec3[--_this26.sizeVec3]; var v11 = anchor1; v11.x = j._anchor1X; v11.y = j._anchor1Y; v11.z = j._anchor1Z; var v12 = anchor2; v12.x = j._anchor2X; v12.y = j._anchor2Y; v12.z = j._anchor2Z; var v13 = basisX1; v13.x = j._basisX1X; v13.y = j._basisX1Y; v13.z = j._basisX1Z; var v14 = basisY1; v14.x = j._basisY1X; v14.y = j._basisY1Y; v14.z = j._basisY1Z; var v15 = basisZ1; v15.x = j._basisZ1X; v15.y = j._basisZ1Y; v15.z = j._basisZ1Z; var v16 = basisX2; v16.x = j._basisX2X; v16.y = j._basisX2Y; v16.z = j._basisX2Z; var v17 = basisY2; v17.x = j._basisY2X; v17.y = j._basisY2Y; v17.z = j._basisY2Z; var v18 = basisZ2; v18.x = j._basisZ2X; v18.y = j._basisZ2Y; v18.z = j._basisZ2Z; d.line(p1,anchor1,d.style.jointLineColor); d.line(p2,anchor2,d.style.jointLineColor); if(d.drawJointLimits) { switch(j._type) { case 0: break; case 1: var radius = d.style.jointRotationalConstraintRadius; var color2 = d.style.jointLineColor; var lm = j._lm; this._drawRotationalLimit(d,anchor1,basisY1,basisZ1,basisY2,radius,lm.lowerLimit,lm.upperLimit,color2); break; case 2: var j1 = j; var radius1 = d.style.jointRotationalConstraintRadius; var color3 = d.style.jointLineColor; var rlm = j1._rotLm; var tlm = j1._translLm; this._drawRotationalLimit(d,anchor2,basisY1,basisZ1,basisY2,radius1,rlm.lowerLimit,rlm.upperLimit,color3); this._drawTranslationalLimit(d,anchor1,basisX1,tlm.lowerLimit,tlm.upperLimit,color3); break; case 3: var radius2 = d.style.jointRotationalConstraintRadius; var color4 = d.style.jointLineColor; var lm1 = j._lm; this._drawTranslationalLimit(d,anchor1,basisX1,lm1.lowerLimit,lm1.upperLimit,color4); break; case 4: var j2 = j; var radius3 = d.style.jointRotationalConstraintRadius; var color5 = d.style.jointLineColor; var lm11 = j2._lm1; var lm2 = j2._lm2; this._drawRotationalLimit(d,anchor1,basisY1,basisZ1,basisY1,radius3,j2._angleX - lm11.upperLimit,j2._angleX - lm11.lowerLimit,color5); this._drawRotationalLimit(d,anchor2,basisX2,basisY2,basisX2,radius3,lm2.lowerLimit - j2._angleZ,lm2.upperLimit - j2._angleZ,color5); break; case 5: var j3 = j; var radius4 = d.style.jointRotationalConstraintRadius; var color6 = d.style.jointLineColor; var lm3 = j3._twistLm; this._drawRotationalLimit(d,anchor2,basisY2,basisZ2,basisY2,radius4,lm3.lowerLimit - j3._twistAngle,lm3.upperLimit - j3._twistAngle,color6); this._drawEllipseOnSphere(d,anchor1,basisX1,basisY1,basisZ1,j3._maxSwingAngle1,j3._maxSwingAngle2,radius4,color6); var _this27 = this._pool; var _this28 = _this27.sizeVec3 == 0 ? new oimo.common.Vec3() : _this27.stackVec3[--_this27.sizeVec3]; _this28.x = anchor2.x; _this28.y = anchor2.y; _this28.z = anchor2.z; var _this29 = _this28; var tx10 = _this29.x + basisX2.x * radius4; var ty10 = _this29.y + basisX2.y * radius4; var tz10 = _this29.z + basisX2.z * radius4; _this29.x = tx10; _this29.y = ty10; _this29.z = tz10; var to = _this29; d.line(anchor2,to,color6); var _this30 = this._pool; var mat37 = null; var mat47 = null; var quat7 = null; if(to != null) { to.zero(); if(_this30.sizeVec3 == _this30.stackVec3.length) { var newLength28 = _this30.sizeVec3 << 1; var this29 = new Array(newLength28); var newArray28 = this29; var _g39 = 0; var _g129 = _this30.sizeVec3; while(_g39 < _g129) { var i29 = _g39++; newArray28[i29] = _this30.stackVec3[i29]; _this30.stackVec3[i29] = null; } _this30.stackVec3 = newArray28; } _this30.stackVec3[_this30.sizeVec3++] = to; } if(mat37 != null) { var t0014 = 1; var t0114 = 0; var t0214 = 0; var t1014 = 0; var t1114 = 1; var t1214 = 0; var t2014 = 0; var t2114 = 0; var t2214 = 1; mat37.e00 = t0014; mat37.e01 = t0114; mat37.e02 = t0214; mat37.e10 = t1014; mat37.e11 = t1114; mat37.e12 = t1214; mat37.e20 = t2014; mat37.e21 = t2114; mat37.e22 = t2214; if(_this30.sizeMat3 == _this30.stackMat3.length) { var newLength29 = _this30.sizeMat3 << 1; var this30 = new Array(newLength29); var newArray29 = this30; var _g40 = 0; var _g130 = _this30.sizeMat3; while(_g40 < _g130) { var i30 = _g40++; newArray29[i30] = _this30.stackMat3[i30]; _this30.stackMat3[i30] = null; } _this30.stackMat3 = newArray29; } _this30.stackMat3[_this30.sizeMat3++] = mat37; } if(mat47 != null) { var t0015 = 1; var t0115 = 0; var t0215 = 0; var t037 = 0; var t1015 = 0; var t1115 = 1; var t1215 = 0; var t137 = 0; var t2015 = 0; var t2115 = 0; var t2215 = 1; var t237 = 0; var t307 = 0; var t317 = 0; var t327 = 0; var t337 = 1; mat47.e00 = t0015; mat47.e01 = t0115; mat47.e02 = t0215; mat47.e03 = t037; mat47.e10 = t1015; mat47.e11 = t1115; mat47.e12 = t1215; mat47.e13 = t137; mat47.e20 = t2015; mat47.e21 = t2115; mat47.e22 = t2215; mat47.e23 = t237; mat47.e30 = t307; mat47.e31 = t317; mat47.e32 = t327; mat47.e33 = t337; if(_this30.sizeMat4 == _this30.stackMat4.length) { var newLength30 = _this30.sizeMat4 << 1; var this31 = new Array(newLength30); var newArray30 = this31; var _g41 = 0; var _g131 = _this30.sizeMat4; while(_g41 < _g131) { var i31 = _g41++; newArray30[i31] = _this30.stackMat4[i31]; _this30.stackMat4[i31] = null; } _this30.stackMat4 = newArray30; } _this30.stackMat4[_this30.sizeMat4++] = mat47; } if(quat7 != null) { var tx11 = 0; var ty11 = 0; var tz11 = 0; var tw7 = 1; quat7.x = tx11; quat7.y = ty11; quat7.z = tz11; quat7.w = tw7; if(_this30.sizeQuat == _this30.stackQuat.length) { var newLength31 = _this30.sizeQuat << 1; var this32 = new Array(newLength31); var newArray31 = this32; var _g42 = 0; var _g132 = _this30.sizeQuat; while(_g42 < _g132) { var i32 = _g42++; newArray31[i32] = _this30.stackQuat[i32]; _this30.stackQuat[i32] = null; } _this30.stackQuat = newArray31; } _this30.stackQuat[_this30.sizeQuat++] = quat7; } break; case 6: var j4 = j; var radius5 = d.style.jointRotationalConstraintRadius; var color7 = d.style.jointLineColor; var txlm = j4._translLms[0]; var tylm = j4._translLms[1]; var tzlm = j4._translLms[2]; var rxlm = j4._rotLms[0]; var rylm = j4._rotLms[1]; var rzlm = j4._rotLms[2]; this._drawTranslationalLimit3D(d,anchor1,basisX1,basisY1,basisZ1,txlm,tylm,tzlm,color7); var _this31 = this._pool; var rotYAxis = _this31.sizeVec3 == 0 ? new oimo.common.Vec3() : _this31.stackVec3[--_this31.sizeVec3]; var v19 = rotYAxis; v19.x = j4._axisYX; v19.y = j4._axisYY; v19.z = j4._axisYZ; var _this32 = this._pool; var _this33 = _this32.sizeVec3 == 0 ? new oimo.common.Vec3() : _this32.stackVec3[--_this32.sizeVec3]; _this33.x = basisX1.x; _this33.y = basisX1.y; _this33.z = basisX1.z; var rotYBasisX = _this33; var _this34 = this._pool; var _this35 = _this34.sizeVec3 == 0 ? new oimo.common.Vec3() : _this34.stackVec3[--_this34.sizeVec3]; _this35.x = basisX1.x; _this35.y = basisX1.y; _this35.z = basisX1.z; var _this36 = _this35; var tx12 = _this36.y * rotYAxis.z - _this36.z * rotYAxis.y; var ty12 = _this36.z * rotYAxis.x - _this36.x * rotYAxis.z; var tz12 = _this36.x * rotYAxis.y - _this36.y * rotYAxis.x; _this36.x = tx12; _this36.y = ty12; _this36.z = tz12; var rotYBasisY = _this36; this._drawRotationalLimit(d,anchor2,basisY1,basisZ1,basisY1,radius5,j4._angleX - rxlm.upperLimit,j4._angleX - rxlm.lowerLimit,color7); this._drawRotationalLimit(d,anchor2,rotYBasisX,rotYBasisY,rotYBasisX,radius5,rylm.lowerLimit - j4._angleY,rylm.upperLimit - j4._angleY,color7); this._drawRotationalLimit(d,anchor2,basisX2,basisY2,basisX2,radius5,rzlm.lowerLimit - j4._angleZ,rzlm.upperLimit - j4._angleZ,color7); break; } } d.line(anchor1,anchor2,d.style.jointErrorColor); var _this37 = this._pool; var mat38 = null; var mat48 = null; var quat8 = null; if(p1 != null) { p1.zero(); if(_this37.sizeVec3 == _this37.stackVec3.length) { var newLength32 = _this37.sizeVec3 << 1; var this33 = new Array(newLength32); var newArray32 = this33; var _g43 = 0; var _g133 = _this37.sizeVec3; while(_g43 < _g133) { var i33 = _g43++; newArray32[i33] = _this37.stackVec3[i33]; _this37.stackVec3[i33] = null; } _this37.stackVec3 = newArray32; } _this37.stackVec3[_this37.sizeVec3++] = p1; } if(mat38 != null) { var t0016 = 1; var t0116 = 0; var t0216 = 0; var t1016 = 0; var t1116 = 1; var t1216 = 0; var t2016 = 0; var t2116 = 0; var t2216 = 1; mat38.e00 = t0016; mat38.e01 = t0116; mat38.e02 = t0216; mat38.e10 = t1016; mat38.e11 = t1116; mat38.e12 = t1216; mat38.e20 = t2016; mat38.e21 = t2116; mat38.e22 = t2216; if(_this37.sizeMat3 == _this37.stackMat3.length) { var newLength33 = _this37.sizeMat3 << 1; var this34 = new Array(newLength33); var newArray33 = this34; var _g44 = 0; var _g134 = _this37.sizeMat3; while(_g44 < _g134) { var i34 = _g44++; newArray33[i34] = _this37.stackMat3[i34]; _this37.stackMat3[i34] = null; } _this37.stackMat3 = newArray33; } _this37.stackMat3[_this37.sizeMat3++] = mat38; } if(mat48 != null) { var t0017 = 1; var t0117 = 0; var t0217 = 0; var t038 = 0; var t1017 = 0; var t1117 = 1; var t1217 = 0; var t138 = 0; var t2017 = 0; var t2117 = 0; var t2217 = 1; var t238 = 0; var t308 = 0; var t318 = 0; var t328 = 0; var t338 = 1; mat48.e00 = t0017; mat48.e01 = t0117; mat48.e02 = t0217; mat48.e03 = t038; mat48.e10 = t1017; mat48.e11 = t1117; mat48.e12 = t1217; mat48.e13 = t138; mat48.e20 = t2017; mat48.e21 = t2117; mat48.e22 = t2217; mat48.e23 = t238; mat48.e30 = t308; mat48.e31 = t318; mat48.e32 = t328; mat48.e33 = t338; if(_this37.sizeMat4 == _this37.stackMat4.length) { var newLength34 = _this37.sizeMat4 << 1; var this35 = new Array(newLength34); var newArray34 = this35; var _g45 = 0; var _g135 = _this37.sizeMat4; while(_g45 < _g135) { var i35 = _g45++; newArray34[i35] = _this37.stackMat4[i35]; _this37.stackMat4[i35] = null; } _this37.stackMat4 = newArray34; } _this37.stackMat4[_this37.sizeMat4++] = mat48; } if(quat8 != null) { var tx13 = 0; var ty13 = 0; var tz13 = 0; var tw8 = 1; quat8.x = tx13; quat8.y = ty13; quat8.z = tz13; quat8.w = tw8; if(_this37.sizeQuat == _this37.stackQuat.length) { var newLength35 = _this37.sizeQuat << 1; var this36 = new Array(newLength35); var newArray35 = this36; var _g46 = 0; var _g136 = _this37.sizeQuat; while(_g46 < _g136) { var i36 = _g46++; newArray35[i36] = _this37.stackQuat[i36]; _this37.stackQuat[i36] = null; } _this37.stackQuat = newArray35; } _this37.stackQuat[_this37.sizeQuat++] = quat8; } var _this38 = this._pool; var mat39 = null; var mat49 = null; var quat9 = null; if(p2 != null) { p2.zero(); if(_this38.sizeVec3 == _this38.stackVec3.length) { var newLength36 = _this38.sizeVec3 << 1; var this37 = new Array(newLength36); var newArray36 = this37; var _g47 = 0; var _g137 = _this38.sizeVec3; while(_g47 < _g137) { var i37 = _g47++; newArray36[i37] = _this38.stackVec3[i37]; _this38.stackVec3[i37] = null; } _this38.stackVec3 = newArray36; } _this38.stackVec3[_this38.sizeVec3++] = p2; } if(mat39 != null) { var t0018 = 1; var t0118 = 0; var t0218 = 0; var t1018 = 0; var t1118 = 1; var t1218 = 0; var t2018 = 0; var t2118 = 0; var t2218 = 1; mat39.e00 = t0018; mat39.e01 = t0118; mat39.e02 = t0218; mat39.e10 = t1018; mat39.e11 = t1118; mat39.e12 = t1218; mat39.e20 = t2018; mat39.e21 = t2118; mat39.e22 = t2218; if(_this38.sizeMat3 == _this38.stackMat3.length) { var newLength37 = _this38.sizeMat3 << 1; var this38 = new Array(newLength37); var newArray37 = this38; var _g48 = 0; var _g138 = _this38.sizeMat3; while(_g48 < _g138) { var i38 = _g48++; newArray37[i38] = _this38.stackMat3[i38]; _this38.stackMat3[i38] = null; } _this38.stackMat3 = newArray37; } _this38.stackMat3[_this38.sizeMat3++] = mat39; } if(mat49 != null) { var t0019 = 1; var t0119 = 0; var t0219 = 0; var t039 = 0; var t1019 = 0; var t1119 = 1; var t1219 = 0; var t139 = 0; var t2019 = 0; var t2119 = 0; var t2219 = 1; var t239 = 0; var t309 = 0; var t319 = 0; var t329 = 0; var t339 = 1; mat49.e00 = t0019; mat49.e01 = t0119; mat49.e02 = t0219; mat49.e03 = t039; mat49.e10 = t1019; mat49.e11 = t1119; mat49.e12 = t1219; mat49.e13 = t139; mat49.e20 = t2019; mat49.e21 = t2119; mat49.e22 = t2219; mat49.e23 = t239; mat49.e30 = t309; mat49.e31 = t319; mat49.e32 = t329; mat49.e33 = t339; if(_this38.sizeMat4 == _this38.stackMat4.length) { var newLength38 = _this38.sizeMat4 << 1; var this39 = new Array(newLength38); var newArray38 = this39; var _g49 = 0; var _g139 = _this38.sizeMat4; while(_g49 < _g139) { var i39 = _g49++; newArray38[i39] = _this38.stackMat4[i39]; _this38.stackMat4[i39] = null; } _this38.stackMat4 = newArray38; } _this38.stackMat4[_this38.sizeMat4++] = mat49; } if(quat9 != null) { var tx14 = 0; var ty14 = 0; var tz14 = 0; var tw9 = 1; quat9.x = tx14; quat9.y = ty14; quat9.z = tz14; quat9.w = tw9; if(_this38.sizeQuat == _this38.stackQuat.length) { var newLength39 = _this38.sizeQuat << 1; var this40 = new Array(newLength39); var newArray39 = this40; var _g50 = 0; var _g140 = _this38.sizeQuat; while(_g50 < _g140) { var i40 = _g50++; newArray39[i40] = _this38.stackQuat[i40]; _this38.stackQuat[i40] = null; } _this38.stackQuat = newArray39; } _this38.stackQuat[_this38.sizeQuat++] = quat9; } var _this39 = this._pool; var mat310 = null; var mat410 = null; var quat10 = null; if(anchor1 != null) { anchor1.zero(); if(_this39.sizeVec3 == _this39.stackVec3.length) { var newLength40 = _this39.sizeVec3 << 1; var this41 = new Array(newLength40); var newArray40 = this41; var _g51 = 0; var _g141 = _this39.sizeVec3; while(_g51 < _g141) { var i41 = _g51++; newArray40[i41] = _this39.stackVec3[i41]; _this39.stackVec3[i41] = null; } _this39.stackVec3 = newArray40; } _this39.stackVec3[_this39.sizeVec3++] = anchor1; } if(mat310 != null) { var t0020 = 1; var t0120 = 0; var t0220 = 0; var t1020 = 0; var t1120 = 1; var t1220 = 0; var t2020 = 0; var t2120 = 0; var t2220 = 1; mat310.e00 = t0020; mat310.e01 = t0120; mat310.e02 = t0220; mat310.e10 = t1020; mat310.e11 = t1120; mat310.e12 = t1220; mat310.e20 = t2020; mat310.e21 = t2120; mat310.e22 = t2220; if(_this39.sizeMat3 == _this39.stackMat3.length) { var newLength41 = _this39.sizeMat3 << 1; var this42 = new Array(newLength41); var newArray41 = this42; var _g52 = 0; var _g142 = _this39.sizeMat3; while(_g52 < _g142) { var i42 = _g52++; newArray41[i42] = _this39.stackMat3[i42]; _this39.stackMat3[i42] = null; } _this39.stackMat3 = newArray41; } _this39.stackMat3[_this39.sizeMat3++] = mat310; } if(mat410 != null) { var t0021 = 1; var t0121 = 0; var t0221 = 0; var t0310 = 0; var t1021 = 0; var t1121 = 1; var t1221 = 0; var t1310 = 0; var t2021 = 0; var t2121 = 0; var t2221 = 1; var t2310 = 0; var t3010 = 0; var t3110 = 0; var t3210 = 0; var t3310 = 1; mat410.e00 = t0021; mat410.e01 = t0121; mat410.e02 = t0221; mat410.e03 = t0310; mat410.e10 = t1021; mat410.e11 = t1121; mat410.e12 = t1221; mat410.e13 = t1310; mat410.e20 = t2021; mat410.e21 = t2121; mat410.e22 = t2221; mat410.e23 = t2310; mat410.e30 = t3010; mat410.e31 = t3110; mat410.e32 = t3210; mat410.e33 = t3310; if(_this39.sizeMat4 == _this39.stackMat4.length) { var newLength42 = _this39.sizeMat4 << 1; var this43 = new Array(newLength42); var newArray42 = this43; var _g53 = 0; var _g143 = _this39.sizeMat4; while(_g53 < _g143) { var i43 = _g53++; newArray42[i43] = _this39.stackMat4[i43]; _this39.stackMat4[i43] = null; } _this39.stackMat4 = newArray42; } _this39.stackMat4[_this39.sizeMat4++] = mat410; } if(quat10 != null) { var tx15 = 0; var ty15 = 0; var tz15 = 0; var tw10 = 1; quat10.x = tx15; quat10.y = ty15; quat10.z = tz15; quat10.w = tw10; if(_this39.sizeQuat == _this39.stackQuat.length) { var newLength43 = _this39.sizeQuat << 1; var this44 = new Array(newLength43); var newArray43 = this44; var _g54 = 0; var _g144 = _this39.sizeQuat; while(_g54 < _g144) { var i44 = _g54++; newArray43[i44] = _this39.stackQuat[i44]; _this39.stackQuat[i44] = null; } _this39.stackQuat = newArray43; } _this39.stackQuat[_this39.sizeQuat++] = quat10; } var _this40 = this._pool; var mat311 = null; var mat411 = null; var quat11 = null; if(anchor2 != null) { anchor2.zero(); if(_this40.sizeVec3 == _this40.stackVec3.length) { var newLength44 = _this40.sizeVec3 << 1; var this45 = new Array(newLength44); var newArray44 = this45; var _g55 = 0; var _g145 = _this40.sizeVec3; while(_g55 < _g145) { var i45 = _g55++; newArray44[i45] = _this40.stackVec3[i45]; _this40.stackVec3[i45] = null; } _this40.stackVec3 = newArray44; } _this40.stackVec3[_this40.sizeVec3++] = anchor2; } if(mat311 != null) { var t0022 = 1; var t0122 = 0; var t0222 = 0; var t1022 = 0; var t1122 = 1; var t1222 = 0; var t2022 = 0; var t2122 = 0; var t2222 = 1; mat311.e00 = t0022; mat311.e01 = t0122; mat311.e02 = t0222; mat311.e10 = t1022; mat311.e11 = t1122; mat311.e12 = t1222; mat311.e20 = t2022; mat311.e21 = t2122; mat311.e22 = t2222; if(_this40.sizeMat3 == _this40.stackMat3.length) { var newLength45 = _this40.sizeMat3 << 1; var this46 = new Array(newLength45); var newArray45 = this46; var _g56 = 0; var _g146 = _this40.sizeMat3; while(_g56 < _g146) { var i46 = _g56++; newArray45[i46] = _this40.stackMat3[i46]; _this40.stackMat3[i46] = null; } _this40.stackMat3 = newArray45; } _this40.stackMat3[_this40.sizeMat3++] = mat311; } if(mat411 != null) { var t0023 = 1; var t0123 = 0; var t0223 = 0; var t0311 = 0; var t1023 = 0; var t1123 = 1; var t1223 = 0; var t1311 = 0; var t2023 = 0; var t2123 = 0; var t2223 = 1; var t2311 = 0; var t3011 = 0; var t3111 = 0; var t3211 = 0; var t3311 = 1; mat411.e00 = t0023; mat411.e01 = t0123; mat411.e02 = t0223; mat411.e03 = t0311; mat411.e10 = t1023; mat411.e11 = t1123; mat411.e12 = t1223; mat411.e13 = t1311; mat411.e20 = t2023; mat411.e21 = t2123; mat411.e22 = t2223; mat411.e23 = t2311; mat411.e30 = t3011; mat411.e31 = t3111; mat411.e32 = t3211; mat411.e33 = t3311; if(_this40.sizeMat4 == _this40.stackMat4.length) { var newLength46 = _this40.sizeMat4 << 1; var this47 = new Array(newLength46); var newArray46 = this47; var _g57 = 0; var _g147 = _this40.sizeMat4; while(_g57 < _g147) { var i47 = _g57++; newArray46[i47] = _this40.stackMat4[i47]; _this40.stackMat4[i47] = null; } _this40.stackMat4 = newArray46; } _this40.stackMat4[_this40.sizeMat4++] = mat411; } if(quat11 != null) { var tx16 = 0; var ty16 = 0; var tz16 = 0; var tw11 = 1; quat11.x = tx16; quat11.y = ty16; quat11.z = tz16; quat11.w = tw11; if(_this40.sizeQuat == _this40.stackQuat.length) { var newLength47 = _this40.sizeQuat << 1; var this48 = new Array(newLength47); var newArray47 = this48; var _g58 = 0; var _g148 = _this40.sizeQuat; while(_g58 < _g148) { var i48 = _g58++; newArray47[i48] = _this40.stackQuat[i48]; _this40.stackQuat[i48] = null; } _this40.stackQuat = newArray47; } _this40.stackQuat[_this40.sizeQuat++] = quat11; } var _this41 = this._pool; var mat312 = null; var mat412 = null; var quat12 = null; if(basisX1 != null) { basisX1.zero(); if(_this41.sizeVec3 == _this41.stackVec3.length) { var newLength48 = _this41.sizeVec3 << 1; var this49 = new Array(newLength48); var newArray48 = this49; var _g59 = 0; var _g149 = _this41.sizeVec3; while(_g59 < _g149) { var i49 = _g59++; newArray48[i49] = _this41.stackVec3[i49]; _this41.stackVec3[i49] = null; } _this41.stackVec3 = newArray48; } _this41.stackVec3[_this41.sizeVec3++] = basisX1; } if(mat312 != null) { var t0024 = 1; var t0124 = 0; var t0224 = 0; var t1024 = 0; var t1124 = 1; var t1224 = 0; var t2024 = 0; var t2124 = 0; var t2224 = 1; mat312.e00 = t0024; mat312.e01 = t0124; mat312.e02 = t0224; mat312.e10 = t1024; mat312.e11 = t1124; mat312.e12 = t1224; mat312.e20 = t2024; mat312.e21 = t2124; mat312.e22 = t2224; if(_this41.sizeMat3 == _this41.stackMat3.length) { var newLength49 = _this41.sizeMat3 << 1; var this50 = new Array(newLength49); var newArray49 = this50; var _g60 = 0; var _g150 = _this41.sizeMat3; while(_g60 < _g150) { var i50 = _g60++; newArray49[i50] = _this41.stackMat3[i50]; _this41.stackMat3[i50] = null; } _this41.stackMat3 = newArray49; } _this41.stackMat3[_this41.sizeMat3++] = mat312; } if(mat412 != null) { var t0025 = 1; var t0125 = 0; var t0225 = 0; var t0312 = 0; var t1025 = 0; var t1125 = 1; var t1225 = 0; var t1312 = 0; var t2025 = 0; var t2125 = 0; var t2225 = 1; var t2312 = 0; var t3012 = 0; var t3112 = 0; var t3212 = 0; var t3312 = 1; mat412.e00 = t0025; mat412.e01 = t0125; mat412.e02 = t0225; mat412.e03 = t0312; mat412.e10 = t1025; mat412.e11 = t1125; mat412.e12 = t1225; mat412.e13 = t1312; mat412.e20 = t2025; mat412.e21 = t2125; mat412.e22 = t2225; mat412.e23 = t2312; mat412.e30 = t3012; mat412.e31 = t3112; mat412.e32 = t3212; mat412.e33 = t3312; if(_this41.sizeMat4 == _this41.stackMat4.length) { var newLength50 = _this41.sizeMat4 << 1; var this51 = new Array(newLength50); var newArray50 = this51; var _g61 = 0; var _g151 = _this41.sizeMat4; while(_g61 < _g151) { var i51 = _g61++; newArray50[i51] = _this41.stackMat4[i51]; _this41.stackMat4[i51] = null; } _this41.stackMat4 = newArray50; } _this41.stackMat4[_this41.sizeMat4++] = mat412; } if(quat12 != null) { var tx17 = 0; var ty17 = 0; var tz17 = 0; var tw12 = 1; quat12.x = tx17; quat12.y = ty17; quat12.z = tz17; quat12.w = tw12; if(_this41.sizeQuat == _this41.stackQuat.length) { var newLength51 = _this41.sizeQuat << 1; var this52 = new Array(newLength51); var newArray51 = this52; var _g62 = 0; var _g152 = _this41.sizeQuat; while(_g62 < _g152) { var i52 = _g62++; newArray51[i52] = _this41.stackQuat[i52]; _this41.stackQuat[i52] = null; } _this41.stackQuat = newArray51; } _this41.stackQuat[_this41.sizeQuat++] = quat12; } var _this42 = this._pool; var mat313 = null; var mat413 = null; var quat13 = null; if(basisY1 != null) { basisY1.zero(); if(_this42.sizeVec3 == _this42.stackVec3.length) { var newLength52 = _this42.sizeVec3 << 1; var this53 = new Array(newLength52); var newArray52 = this53; var _g63 = 0; var _g153 = _this42.sizeVec3; while(_g63 < _g153) { var i53 = _g63++; newArray52[i53] = _this42.stackVec3[i53]; _this42.stackVec3[i53] = null; } _this42.stackVec3 = newArray52; } _this42.stackVec3[_this42.sizeVec3++] = basisY1; } if(mat313 != null) { var t0026 = 1; var t0126 = 0; var t0226 = 0; var t1026 = 0; var t1126 = 1; var t1226 = 0; var t2026 = 0; var t2126 = 0; var t2226 = 1; mat313.e00 = t0026; mat313.e01 = t0126; mat313.e02 = t0226; mat313.e10 = t1026; mat313.e11 = t1126; mat313.e12 = t1226; mat313.e20 = t2026; mat313.e21 = t2126; mat313.e22 = t2226; if(_this42.sizeMat3 == _this42.stackMat3.length) { var newLength53 = _this42.sizeMat3 << 1; var this54 = new Array(newLength53); var newArray53 = this54; var _g64 = 0; var _g154 = _this42.sizeMat3; while(_g64 < _g154) { var i54 = _g64++; newArray53[i54] = _this42.stackMat3[i54]; _this42.stackMat3[i54] = null; } _this42.stackMat3 = newArray53; } _this42.stackMat3[_this42.sizeMat3++] = mat313; } if(mat413 != null) { var t0027 = 1; var t0127 = 0; var t0227 = 0; var t0313 = 0; var t1027 = 0; var t1127 = 1; var t1227 = 0; var t1313 = 0; var t2027 = 0; var t2127 = 0; var t2227 = 1; var t2313 = 0; var t3013 = 0; var t3113 = 0; var t3213 = 0; var t3313 = 1; mat413.e00 = t0027; mat413.e01 = t0127; mat413.e02 = t0227; mat413.e03 = t0313; mat413.e10 = t1027; mat413.e11 = t1127; mat413.e12 = t1227; mat413.e13 = t1313; mat413.e20 = t2027; mat413.e21 = t2127; mat413.e22 = t2227; mat413.e23 = t2313; mat413.e30 = t3013; mat413.e31 = t3113; mat413.e32 = t3213; mat413.e33 = t3313; if(_this42.sizeMat4 == _this42.stackMat4.length) { var newLength54 = _this42.sizeMat4 << 1; var this55 = new Array(newLength54); var newArray54 = this55; var _g65 = 0; var _g155 = _this42.sizeMat4; while(_g65 < _g155) { var i55 = _g65++; newArray54[i55] = _this42.stackMat4[i55]; _this42.stackMat4[i55] = null; } _this42.stackMat4 = newArray54; } _this42.stackMat4[_this42.sizeMat4++] = mat413; } if(quat13 != null) { var tx18 = 0; var ty18 = 0; var tz18 = 0; var tw13 = 1; quat13.x = tx18; quat13.y = ty18; quat13.z = tz18; quat13.w = tw13; if(_this42.sizeQuat == _this42.stackQuat.length) { var newLength55 = _this42.sizeQuat << 1; var this56 = new Array(newLength55); var newArray55 = this56; var _g66 = 0; var _g156 = _this42.sizeQuat; while(_g66 < _g156) { var i56 = _g66++; newArray55[i56] = _this42.stackQuat[i56]; _this42.stackQuat[i56] = null; } _this42.stackQuat = newArray55; } _this42.stackQuat[_this42.sizeQuat++] = quat13; } var _this43 = this._pool; var mat314 = null; var mat414 = null; var quat14 = null; if(basisZ1 != null) { basisZ1.zero(); if(_this43.sizeVec3 == _this43.stackVec3.length) { var newLength56 = _this43.sizeVec3 << 1; var this57 = new Array(newLength56); var newArray56 = this57; var _g67 = 0; var _g157 = _this43.sizeVec3; while(_g67 < _g157) { var i57 = _g67++; newArray56[i57] = _this43.stackVec3[i57]; _this43.stackVec3[i57] = null; } _this43.stackVec3 = newArray56; } _this43.stackVec3[_this43.sizeVec3++] = basisZ1; } if(mat314 != null) { var t0028 = 1; var t0128 = 0; var t0228 = 0; var t1028 = 0; var t1128 = 1; var t1228 = 0; var t2028 = 0; var t2128 = 0; var t2228 = 1; mat314.e00 = t0028; mat314.e01 = t0128; mat314.e02 = t0228; mat314.e10 = t1028; mat314.e11 = t1128; mat314.e12 = t1228; mat314.e20 = t2028; mat314.e21 = t2128; mat314.e22 = t2228; if(_this43.sizeMat3 == _this43.stackMat3.length) { var newLength57 = _this43.sizeMat3 << 1; var this58 = new Array(newLength57); var newArray57 = this58; var _g68 = 0; var _g158 = _this43.sizeMat3; while(_g68 < _g158) { var i58 = _g68++; newArray57[i58] = _this43.stackMat3[i58]; _this43.stackMat3[i58] = null; } _this43.stackMat3 = newArray57; } _this43.stackMat3[_this43.sizeMat3++] = mat314; } if(mat414 != null) { var t0029 = 1; var t0129 = 0; var t0229 = 0; var t0314 = 0; var t1029 = 0; var t1129 = 1; var t1229 = 0; var t1314 = 0; var t2029 = 0; var t2129 = 0; var t2229 = 1; var t2314 = 0; var t3014 = 0; var t3114 = 0; var t3214 = 0; var t3314 = 1; mat414.e00 = t0029; mat414.e01 = t0129; mat414.e02 = t0229; mat414.e03 = t0314; mat414.e10 = t1029; mat414.e11 = t1129; mat414.e12 = t1229; mat414.e13 = t1314; mat414.e20 = t2029; mat414.e21 = t2129; mat414.e22 = t2229; mat414.e23 = t2314; mat414.e30 = t3014; mat414.e31 = t3114; mat414.e32 = t3214; mat414.e33 = t3314; if(_this43.sizeMat4 == _this43.stackMat4.length) { var newLength58 = _this43.sizeMat4 << 1; var this59 = new Array(newLength58); var newArray58 = this59; var _g69 = 0; var _g159 = _this43.sizeMat4; while(_g69 < _g159) { var i59 = _g69++; newArray58[i59] = _this43.stackMat4[i59]; _this43.stackMat4[i59] = null; } _this43.stackMat4 = newArray58; } _this43.stackMat4[_this43.sizeMat4++] = mat414; } if(quat14 != null) { var tx19 = 0; var ty19 = 0; var tz19 = 0; var tw14 = 1; quat14.x = tx19; quat14.y = ty19; quat14.z = tz19; quat14.w = tw14; if(_this43.sizeQuat == _this43.stackQuat.length) { var newLength59 = _this43.sizeQuat << 1; var this60 = new Array(newLength59); var newArray59 = this60; var _g70 = 0; var _g160 = _this43.sizeQuat; while(_g70 < _g160) { var i60 = _g70++; newArray59[i60] = _this43.stackQuat[i60]; _this43.stackQuat[i60] = null; } _this43.stackQuat = newArray59; } _this43.stackQuat[_this43.sizeQuat++] = quat14; } var _this44 = this._pool; var mat315 = null; var mat415 = null; var quat15 = null; if(basisX2 != null) { basisX2.zero(); if(_this44.sizeVec3 == _this44.stackVec3.length) { var newLength60 = _this44.sizeVec3 << 1; var this61 = new Array(newLength60); var newArray60 = this61; var _g71 = 0; var _g161 = _this44.sizeVec3; while(_g71 < _g161) { var i61 = _g71++; newArray60[i61] = _this44.stackVec3[i61]; _this44.stackVec3[i61] = null; } _this44.stackVec3 = newArray60; } _this44.stackVec3[_this44.sizeVec3++] = basisX2; } if(mat315 != null) { var t0030 = 1; var t0130 = 0; var t0230 = 0; var t1030 = 0; var t1130 = 1; var t1230 = 0; var t2030 = 0; var t2130 = 0; var t2230 = 1; mat315.e00 = t0030; mat315.e01 = t0130; mat315.e02 = t0230; mat315.e10 = t1030; mat315.e11 = t1130; mat315.e12 = t1230; mat315.e20 = t2030; mat315.e21 = t2130; mat315.e22 = t2230; if(_this44.sizeMat3 == _this44.stackMat3.length) { var newLength61 = _this44.sizeMat3 << 1; var this62 = new Array(newLength61); var newArray61 = this62; var _g72 = 0; var _g162 = _this44.sizeMat3; while(_g72 < _g162) { var i62 = _g72++; newArray61[i62] = _this44.stackMat3[i62]; _this44.stackMat3[i62] = null; } _this44.stackMat3 = newArray61; } _this44.stackMat3[_this44.sizeMat3++] = mat315; } if(mat415 != null) { var t0031 = 1; var t0131 = 0; var t0231 = 0; var t0315 = 0; var t1031 = 0; var t1131 = 1; var t1231 = 0; var t1315 = 0; var t2031 = 0; var t2131 = 0; var t2231 = 1; var t2315 = 0; var t3015 = 0; var t3115 = 0; var t3215 = 0; var t3315 = 1; mat415.e00 = t0031; mat415.e01 = t0131; mat415.e02 = t0231; mat415.e03 = t0315; mat415.e10 = t1031; mat415.e11 = t1131; mat415.e12 = t1231; mat415.e13 = t1315; mat415.e20 = t2031; mat415.e21 = t2131; mat415.e22 = t2231; mat415.e23 = t2315; mat415.e30 = t3015; mat415.e31 = t3115; mat415.e32 = t3215; mat415.e33 = t3315; if(_this44.sizeMat4 == _this44.stackMat4.length) { var newLength62 = _this44.sizeMat4 << 1; var this63 = new Array(newLength62); var newArray62 = this63; var _g73 = 0; var _g163 = _this44.sizeMat4; while(_g73 < _g163) { var i63 = _g73++; newArray62[i63] = _this44.stackMat4[i63]; _this44.stackMat4[i63] = null; } _this44.stackMat4 = newArray62; } _this44.stackMat4[_this44.sizeMat4++] = mat415; } if(quat15 != null) { var tx20 = 0; var ty20 = 0; var tz20 = 0; var tw15 = 1; quat15.x = tx20; quat15.y = ty20; quat15.z = tz20; quat15.w = tw15; if(_this44.sizeQuat == _this44.stackQuat.length) { var newLength63 = _this44.sizeQuat << 1; var this64 = new Array(newLength63); var newArray63 = this64; var _g74 = 0; var _g164 = _this44.sizeQuat; while(_g74 < _g164) { var i64 = _g74++; newArray63[i64] = _this44.stackQuat[i64]; _this44.stackQuat[i64] = null; } _this44.stackQuat = newArray63; } _this44.stackQuat[_this44.sizeQuat++] = quat15; } var _this45 = this._pool; var mat316 = null; var mat416 = null; var quat16 = null; if(basisY2 != null) { basisY2.zero(); if(_this45.sizeVec3 == _this45.stackVec3.length) { var newLength64 = _this45.sizeVec3 << 1; var this65 = new Array(newLength64); var newArray64 = this65; var _g75 = 0; var _g165 = _this45.sizeVec3; while(_g75 < _g165) { var i65 = _g75++; newArray64[i65] = _this45.stackVec3[i65]; _this45.stackVec3[i65] = null; } _this45.stackVec3 = newArray64; } _this45.stackVec3[_this45.sizeVec3++] = basisY2; } if(mat316 != null) { var t0032 = 1; var t0132 = 0; var t0232 = 0; var t1032 = 0; var t1132 = 1; var t1232 = 0; var t2032 = 0; var t2132 = 0; var t2232 = 1; mat316.e00 = t0032; mat316.e01 = t0132; mat316.e02 = t0232; mat316.e10 = t1032; mat316.e11 = t1132; mat316.e12 = t1232; mat316.e20 = t2032; mat316.e21 = t2132; mat316.e22 = t2232; if(_this45.sizeMat3 == _this45.stackMat3.length) { var newLength65 = _this45.sizeMat3 << 1; var this66 = new Array(newLength65); var newArray65 = this66; var _g76 = 0; var _g166 = _this45.sizeMat3; while(_g76 < _g166) { var i66 = _g76++; newArray65[i66] = _this45.stackMat3[i66]; _this45.stackMat3[i66] = null; } _this45.stackMat3 = newArray65; } _this45.stackMat3[_this45.sizeMat3++] = mat316; } if(mat416 != null) { var t0033 = 1; var t0133 = 0; var t0233 = 0; var t0316 = 0; var t1033 = 0; var t1133 = 1; var t1233 = 0; var t1316 = 0; var t2033 = 0; var t2133 = 0; var t2233 = 1; var t2316 = 0; var t3016 = 0; var t3116 = 0; var t3216 = 0; var t3316 = 1; mat416.e00 = t0033; mat416.e01 = t0133; mat416.e02 = t0233; mat416.e03 = t0316; mat416.e10 = t1033; mat416.e11 = t1133; mat416.e12 = t1233; mat416.e13 = t1316; mat416.e20 = t2033; mat416.e21 = t2133; mat416.e22 = t2233; mat416.e23 = t2316; mat416.e30 = t3016; mat416.e31 = t3116; mat416.e32 = t3216; mat416.e33 = t3316; if(_this45.sizeMat4 == _this45.stackMat4.length) { var newLength66 = _this45.sizeMat4 << 1; var this67 = new Array(newLength66); var newArray66 = this67; var _g77 = 0; var _g167 = _this45.sizeMat4; while(_g77 < _g167) { var i67 = _g77++; newArray66[i67] = _this45.stackMat4[i67]; _this45.stackMat4[i67] = null; } _this45.stackMat4 = newArray66; } _this45.stackMat4[_this45.sizeMat4++] = mat416; } if(quat16 != null) { var tx21 = 0; var ty21 = 0; var tz21 = 0; var tw16 = 1; quat16.x = tx21; quat16.y = ty21; quat16.z = tz21; quat16.w = tw16; if(_this45.sizeQuat == _this45.stackQuat.length) { var newLength67 = _this45.sizeQuat << 1; var this68 = new Array(newLength67); var newArray67 = this68; var _g78 = 0; var _g168 = _this45.sizeQuat; while(_g78 < _g168) { var i68 = _g78++; newArray67[i68] = _this45.stackQuat[i68]; _this45.stackQuat[i68] = null; } _this45.stackQuat = newArray67; } _this45.stackQuat[_this45.sizeQuat++] = quat16; } var _this46 = this._pool; var mat317 = null; var mat417 = null; var quat17 = null; if(basisZ2 != null) { basisZ2.zero(); if(_this46.sizeVec3 == _this46.stackVec3.length) { var newLength68 = _this46.sizeVec3 << 1; var this69 = new Array(newLength68); var newArray68 = this69; var _g79 = 0; var _g169 = _this46.sizeVec3; while(_g79 < _g169) { var i69 = _g79++; newArray68[i69] = _this46.stackVec3[i69]; _this46.stackVec3[i69] = null; } _this46.stackVec3 = newArray68; } _this46.stackVec3[_this46.sizeVec3++] = basisZ2; } if(mat317 != null) { var t0034 = 1; var t0134 = 0; var t0234 = 0; var t1034 = 0; var t1134 = 1; var t1234 = 0; var t2034 = 0; var t2134 = 0; var t2234 = 1; mat317.e00 = t0034; mat317.e01 = t0134; mat317.e02 = t0234; mat317.e10 = t1034; mat317.e11 = t1134; mat317.e12 = t1234; mat317.e20 = t2034; mat317.e21 = t2134; mat317.e22 = t2234; if(_this46.sizeMat3 == _this46.stackMat3.length) { var newLength69 = _this46.sizeMat3 << 1; var this70 = new Array(newLength69); var newArray69 = this70; var _g80 = 0; var _g170 = _this46.sizeMat3; while(_g80 < _g170) { var i70 = _g80++; newArray69[i70] = _this46.stackMat3[i70]; _this46.stackMat3[i70] = null; } _this46.stackMat3 = newArray69; } _this46.stackMat3[_this46.sizeMat3++] = mat317; } if(mat417 != null) { var t0035 = 1; var t0135 = 0; var t0235 = 0; var t0317 = 0; var t1035 = 0; var t1135 = 1; var t1235 = 0; var t1317 = 0; var t2035 = 0; var t2135 = 0; var t2235 = 1; var t2317 = 0; var t3017 = 0; var t3117 = 0; var t3217 = 0; var t3317 = 1; mat417.e00 = t0035; mat417.e01 = t0135; mat417.e02 = t0235; mat417.e03 = t0317; mat417.e10 = t1035; mat417.e11 = t1135; mat417.e12 = t1235; mat417.e13 = t1317; mat417.e20 = t2035; mat417.e21 = t2135; mat417.e22 = t2235; mat417.e23 = t2317; mat417.e30 = t3017; mat417.e31 = t3117; mat417.e32 = t3217; mat417.e33 = t3317; if(_this46.sizeMat4 == _this46.stackMat4.length) { var newLength70 = _this46.sizeMat4 << 1; var this71 = new Array(newLength70); var newArray70 = this71; var _g81 = 0; var _g171 = _this46.sizeMat4; while(_g81 < _g171) { var i71 = _g81++; newArray70[i71] = _this46.stackMat4[i71]; _this46.stackMat4[i71] = null; } _this46.stackMat4 = newArray70; } _this46.stackMat4[_this46.sizeMat4++] = mat417; } if(quat17 != null) { var tx22 = 0; var ty22 = 0; var tz22 = 0; var tw17 = 1; quat17.x = tx22; quat17.y = ty22; quat17.z = tz22; quat17.w = tw17; if(_this46.sizeQuat == _this46.stackQuat.length) { var newLength71 = _this46.sizeQuat << 1; var this72 = new Array(newLength71); var newArray71 = this72; var _g82 = 0; var _g172 = _this46.sizeQuat; while(_g82 < _g172) { var i72 = _g82++; newArray71[i72] = _this46.stackQuat[i72]; _this46.stackQuat[i72] = null; } _this46.stackQuat = newArray71; } _this46.stackQuat[_this46.sizeQuat++] = quat17; } j = n1; } } } _drawRotationalLimit(d,center,ex,ey,needle,radius,min,max,color) { if(min != max) { var _this = this._pool; var _this1 = _this.sizeVec3 == 0 ? new oimo.common.Vec3() : _this.stackVec3[--_this.sizeVec3]; _this1.x = center.x; _this1.y = center.y; _this1.z = center.z; var _this2 = _this1; var tx = _this2.x + needle.x * radius; var ty = _this2.y + needle.y * radius; var tz = _this2.z + needle.z * radius; _this2.x = tx; _this2.y = ty; _this2.z = tz; var to = _this2; d.line(center,to,color); var _this3 = this._pool; var mat3 = null; var mat4 = null; var quat = null; if(to != null) { to.zero(); if(_this3.sizeVec3 == _this3.stackVec3.length) { var newLength = _this3.sizeVec3 << 1; var this1 = new Array(newLength); var newArray = this1; var _g = 0; var _g1 = _this3.sizeVec3; while(_g < _g1) { var i = _g++; newArray[i] = _this3.stackVec3[i]; _this3.stackVec3[i] = null; } _this3.stackVec3 = newArray; } _this3.stackVec3[_this3.sizeVec3++] = to; } if(mat3 != null) { var t00 = 1; var t01 = 0; var t02 = 0; var t10 = 0; var t11 = 1; var t12 = 0; var t20 = 0; var t21 = 0; var t22 = 1; mat3.e00 = t00; mat3.e01 = t01; mat3.e02 = t02; mat3.e10 = t10; mat3.e11 = t11; mat3.e12 = t12; mat3.e20 = t20; mat3.e21 = t21; mat3.e22 = t22; if(_this3.sizeMat3 == _this3.stackMat3.length) { var newLength1 = _this3.sizeMat3 << 1; var this2 = new Array(newLength1); var newArray1 = this2; var _g2 = 0; var _g11 = _this3.sizeMat3; while(_g2 < _g11) { var i1 = _g2++; newArray1[i1] = _this3.stackMat3[i1]; _this3.stackMat3[i1] = null; } _this3.stackMat3 = newArray1; } _this3.stackMat3[_this3.sizeMat3++] = mat3; } if(mat4 != null) { var t001 = 1; var t011 = 0; var t021 = 0; var t03 = 0; var t101 = 0; var t111 = 1; var t121 = 0; var t13 = 0; var t201 = 0; var t211 = 0; var t221 = 1; var t23 = 0; var t30 = 0; var t31 = 0; var t32 = 0; var t33 = 1; mat4.e00 = t001; mat4.e01 = t011; mat4.e02 = t021; mat4.e03 = t03; mat4.e10 = t101; mat4.e11 = t111; mat4.e12 = t121; mat4.e13 = t13; mat4.e20 = t201; mat4.e21 = t211; mat4.e22 = t221; mat4.e23 = t23; mat4.e30 = t30; mat4.e31 = t31; mat4.e32 = t32; mat4.e33 = t33; if(_this3.sizeMat4 == _this3.stackMat4.length) { var newLength2 = _this3.sizeMat4 << 1; var this3 = new Array(newLength2); var newArray2 = this3; var _g3 = 0; var _g12 = _this3.sizeMat4; while(_g3 < _g12) { var i2 = _g3++; newArray2[i2] = _this3.stackMat4[i2]; _this3.stackMat4[i2] = null; } _this3.stackMat4 = newArray2; } _this3.stackMat4[_this3.sizeMat4++] = mat4; } if(quat != null) { var tx1 = 0; var ty1 = 0; var tz1 = 0; var tw = 1; quat.x = tx1; quat.y = ty1; quat.z = tz1; quat.w = tw; if(_this3.sizeQuat == _this3.stackQuat.length) { var newLength3 = _this3.sizeQuat << 1; var this4 = new Array(newLength3); var newArray3 = this4; var _g4 = 0; var _g13 = _this3.sizeQuat; while(_g4 < _g13) { var i3 = _g4++; newArray3[i3] = _this3.stackQuat[i3]; _this3.stackQuat[i3] = null; } _this3.stackQuat = newArray3; } _this3.stackQuat[_this3.sizeQuat++] = quat; } if(min > max) { d.ellipse(center,ex,ey,radius,radius,color); } else { d.arc(center,ex,ey,radius,radius,min,max,true,color); } } } _drawTranslationalLimit(d,center,ex,min,max,color) { if(min < max) { var _this = this._pool; var _this1 = _this.sizeVec3 == 0 ? new oimo.common.Vec3() : _this.stackVec3[--_this.sizeVec3]; _this1.x = center.x; _this1.y = center.y; _this1.z = center.z; var _this2 = _this1; var tx = _this2.x + ex.x * min; var ty = _this2.y + ex.y * min; var tz = _this2.z + ex.z * min; _this2.x = tx; _this2.y = ty; _this2.z = tz; var lower = _this2; var _this3 = this._pool; var _this4 = _this3.sizeVec3 == 0 ? new oimo.common.Vec3() : _this3.stackVec3[--_this3.sizeVec3]; _this4.x = center.x; _this4.y = center.y; _this4.z = center.z; var _this5 = _this4; var tx1 = _this5.x + ex.x * max; var ty1 = _this5.y + ex.y * max; var tz1 = _this5.z + ex.z * max; _this5.x = tx1; _this5.y = ty1; _this5.z = tz1; var upper = _this5; d.line(lower,upper,color); var _this6 = this._pool; var mat3 = null; var mat4 = null; var quat = null; if(lower != null) { lower.zero(); if(_this6.sizeVec3 == _this6.stackVec3.length) { var newLength = _this6.sizeVec3 << 1; var this1 = new Array(newLength); var newArray = this1; var _g = 0; var _g1 = _this6.sizeVec3; while(_g < _g1) { var i = _g++; newArray[i] = _this6.stackVec3[i]; _this6.stackVec3[i] = null; } _this6.stackVec3 = newArray; } _this6.stackVec3[_this6.sizeVec3++] = lower; } if(mat3 != null) { var t00 = 1; var t01 = 0; var t02 = 0; var t10 = 0; var t11 = 1; var t12 = 0; var t20 = 0; var t21 = 0; var t22 = 1; mat3.e00 = t00; mat3.e01 = t01; mat3.e02 = t02; mat3.e10 = t10; mat3.e11 = t11; mat3.e12 = t12; mat3.e20 = t20; mat3.e21 = t21; mat3.e22 = t22; if(_this6.sizeMat3 == _this6.stackMat3.length) { var newLength1 = _this6.sizeMat3 << 1; var this2 = new Array(newLength1); var newArray1 = this2; var _g2 = 0; var _g11 = _this6.sizeMat3; while(_g2 < _g11) { var i1 = _g2++; newArray1[i1] = _this6.stackMat3[i1]; _this6.stackMat3[i1] = null; } _this6.stackMat3 = newArray1; } _this6.stackMat3[_this6.sizeMat3++] = mat3; } if(mat4 != null) { var t001 = 1; var t011 = 0; var t021 = 0; var t03 = 0; var t101 = 0; var t111 = 1; var t121 = 0; var t13 = 0; var t201 = 0; var t211 = 0; var t221 = 1; var t23 = 0; var t30 = 0; var t31 = 0; var t32 = 0; var t33 = 1; mat4.e00 = t001; mat4.e01 = t011; mat4.e02 = t021; mat4.e03 = t03; mat4.e10 = t101; mat4.e11 = t111; mat4.e12 = t121; mat4.e13 = t13; mat4.e20 = t201; mat4.e21 = t211; mat4.e22 = t221; mat4.e23 = t23; mat4.e30 = t30; mat4.e31 = t31; mat4.e32 = t32; mat4.e33 = t33; if(_this6.sizeMat4 == _this6.stackMat4.length) { var newLength2 = _this6.sizeMat4 << 1; var this3 = new Array(newLength2); var newArray2 = this3; var _g3 = 0; var _g12 = _this6.sizeMat4; while(_g3 < _g12) { var i2 = _g3++; newArray2[i2] = _this6.stackMat4[i2]; _this6.stackMat4[i2] = null; } _this6.stackMat4 = newArray2; } _this6.stackMat4[_this6.sizeMat4++] = mat4; } if(quat != null) { var tx2 = 0; var ty2 = 0; var tz2 = 0; var tw = 1; quat.x = tx2; quat.y = ty2; quat.z = tz2; quat.w = tw; if(_this6.sizeQuat == _this6.stackQuat.length) { var newLength3 = _this6.sizeQuat << 1; var this4 = new Array(newLength3); var newArray3 = this4; var _g4 = 0; var _g13 = _this6.sizeQuat; while(_g4 < _g13) { var i3 = _g4++; newArray3[i3] = _this6.stackQuat[i3]; _this6.stackQuat[i3] = null; } _this6.stackQuat = newArray3; } _this6.stackQuat[_this6.sizeQuat++] = quat; } var _this7 = this._pool; var mat31 = null; var mat41 = null; var quat1 = null; if(upper != null) { upper.zero(); if(_this7.sizeVec3 == _this7.stackVec3.length) { var newLength4 = _this7.sizeVec3 << 1; var this5 = new Array(newLength4); var newArray4 = this5; var _g5 = 0; var _g14 = _this7.sizeVec3; while(_g5 < _g14) { var i4 = _g5++; newArray4[i4] = _this7.stackVec3[i4]; _this7.stackVec3[i4] = null; } _this7.stackVec3 = newArray4; } _this7.stackVec3[_this7.sizeVec3++] = upper; } if(mat31 != null) { var t002 = 1; var t012 = 0; var t022 = 0; var t102 = 0; var t112 = 1; var t122 = 0; var t202 = 0; var t212 = 0; var t222 = 1; mat31.e00 = t002; mat31.e01 = t012; mat31.e02 = t022; mat31.e10 = t102; mat31.e11 = t112; mat31.e12 = t122; mat31.e20 = t202; mat31.e21 = t212; mat31.e22 = t222; if(_this7.sizeMat3 == _this7.stackMat3.length) { var newLength5 = _this7.sizeMat3 << 1; var this6 = new Array(newLength5); var newArray5 = this6; var _g6 = 0; var _g15 = _this7.sizeMat3; while(_g6 < _g15) { var i5 = _g6++; newArray5[i5] = _this7.stackMat3[i5]; _this7.stackMat3[i5] = null; } _this7.stackMat3 = newArray5; } _this7.stackMat3[_this7.sizeMat3++] = mat31; } if(mat41 != null) { var t003 = 1; var t013 = 0; var t023 = 0; var t031 = 0; var t103 = 0; var t113 = 1; var t123 = 0; var t131 = 0; var t203 = 0; var t213 = 0; var t223 = 1; var t231 = 0; var t301 = 0; var t311 = 0; var t321 = 0; var t331 = 1; mat41.e00 = t003; mat41.e01 = t013; mat41.e02 = t023; mat41.e03 = t031; mat41.e10 = t103; mat41.e11 = t113; mat41.e12 = t123; mat41.e13 = t131; mat41.e20 = t203; mat41.e21 = t213; mat41.e22 = t223; mat41.e23 = t231; mat41.e30 = t301; mat41.e31 = t311; mat41.e32 = t321; mat41.e33 = t331; if(_this7.sizeMat4 == _this7.stackMat4.length) { var newLength6 = _this7.sizeMat4 << 1; var this7 = new Array(newLength6); var newArray6 = this7; var _g7 = 0; var _g16 = _this7.sizeMat4; while(_g7 < _g16) { var i6 = _g7++; newArray6[i6] = _this7.stackMat4[i6]; _this7.stackMat4[i6] = null; } _this7.stackMat4 = newArray6; } _this7.stackMat4[_this7.sizeMat4++] = mat41; } if(quat1 != null) { var tx3 = 0; var ty3 = 0; var tz3 = 0; var tw1 = 1; quat1.x = tx3; quat1.y = ty3; quat1.z = tz3; quat1.w = tw1; if(_this7.sizeQuat == _this7.stackQuat.length) { var newLength7 = _this7.sizeQuat << 1; var this8 = new Array(newLength7); var newArray7 = this8; var _g8 = 0; var _g17 = _this7.sizeQuat; while(_g8 < _g17) { var i7 = _g8++; newArray7[i7] = _this7.stackQuat[i7]; _this7.stackQuat[i7] = null; } _this7.stackQuat = newArray7; } _this7.stackQuat[_this7.sizeQuat++] = quat1; } } } _drawTranslationalLimit3D(d,center,ex,ey,ez,xlm,ylm,zlm,color) { var minx = xlm.lowerLimit; var maxx = xlm.upperLimit; var miny = ylm.lowerLimit; var maxy = ylm.upperLimit; var minz = zlm.lowerLimit; var maxz = zlm.upperLimit; var _this = this._pool; var lower = _this.sizeVec3 == 0 ? new oimo.common.Vec3() : _this.stackVec3[--_this.sizeVec3]; var _this1 = this._pool; var upper = _this1.sizeVec3 == 0 ? new oimo.common.Vec3() : _this1.stackVec3[--_this1.sizeVec3]; var _this2 = this._pool; var _this3 = _this2.sizeVec3 == 0 ? new oimo.common.Vec3() : _this2.stackVec3[--_this2.sizeVec3]; _this3.x = center.x; _this3.y = center.y; _this3.z = center.z; var _this4 = _this3; var tx = _this4.x + ex.x * minx; var ty = _this4.y + ex.y * minx; var tz = _this4.z + ex.z * minx; _this4.x = tx; _this4.y = ty; _this4.z = tz; var _this5 = _this4; var tx1 = _this5.x + ey.x * miny; var ty1 = _this5.y + ey.y * miny; var tz1 = _this5.z + ey.z * miny; _this5.x = tx1; _this5.y = ty1; _this5.z = tz1; var _this6 = _this5; var tx2 = _this6.x + ez.x * minz; var ty2 = _this6.y + ez.y * minz; var tz2 = _this6.z + ez.z * minz; _this6.x = tx2; _this6.y = ty2; _this6.z = tz2; var xyz = _this6; var _this7 = this._pool; var _this8 = _this7.sizeVec3 == 0 ? new oimo.common.Vec3() : _this7.stackVec3[--_this7.sizeVec3]; _this8.x = center.x; _this8.y = center.y; _this8.z = center.z; var _this9 = _this8; var tx3 = _this9.x + ex.x * minx; var ty3 = _this9.y + ex.y * minx; var tz3 = _this9.z + ex.z * minx; _this9.x = tx3; _this9.y = ty3; _this9.z = tz3; var _this10 = _this9; var tx4 = _this10.x + ey.x * miny; var ty4 = _this10.y + ey.y * miny; var tz4 = _this10.z + ey.z * miny; _this10.x = tx4; _this10.y = ty4; _this10.z = tz4; var _this11 = _this10; var tx5 = _this11.x + ez.x * maxz; var ty5 = _this11.y + ez.y * maxz; var tz5 = _this11.z + ez.z * maxz; _this11.x = tx5; _this11.y = ty5; _this11.z = tz5; var xyZ = _this11; var _this12 = this._pool; var _this13 = _this12.sizeVec3 == 0 ? new oimo.common.Vec3() : _this12.stackVec3[--_this12.sizeVec3]; _this13.x = center.x; _this13.y = center.y; _this13.z = center.z; var _this14 = _this13; var tx6 = _this14.x + ex.x * minx; var ty6 = _this14.y + ex.y * minx; var tz6 = _this14.z + ex.z * minx; _this14.x = tx6; _this14.y = ty6; _this14.z = tz6; var _this15 = _this14; var tx7 = _this15.x + ey.x * maxy; var ty7 = _this15.y + ey.y * maxy; var tz7 = _this15.z + ey.z * maxy; _this15.x = tx7; _this15.y = ty7; _this15.z = tz7; var _this16 = _this15; var tx8 = _this16.x + ez.x * minz; var ty8 = _this16.y + ez.y * minz; var tz8 = _this16.z + ez.z * minz; _this16.x = tx8; _this16.y = ty8; _this16.z = tz8; var xYz = _this16; var _this17 = this._pool; var _this18 = _this17.sizeVec3 == 0 ? new oimo.common.Vec3() : _this17.stackVec3[--_this17.sizeVec3]; _this18.x = center.x; _this18.y = center.y; _this18.z = center.z; var _this19 = _this18; var tx9 = _this19.x + ex.x * minx; var ty9 = _this19.y + ex.y * minx; var tz9 = _this19.z + ex.z * minx; _this19.x = tx9; _this19.y = ty9; _this19.z = tz9; var _this20 = _this19; var tx10 = _this20.x + ey.x * maxy; var ty10 = _this20.y + ey.y * maxy; var tz10 = _this20.z + ey.z * maxy; _this20.x = tx10; _this20.y = ty10; _this20.z = tz10; var _this21 = _this20; var tx11 = _this21.x + ez.x * maxz; var ty11 = _this21.y + ez.y * maxz; var tz11 = _this21.z + ez.z * maxz; _this21.x = tx11; _this21.y = ty11; _this21.z = tz11; var xYZ = _this21; var _this22 = this._pool; var _this23 = _this22.sizeVec3 == 0 ? new oimo.common.Vec3() : _this22.stackVec3[--_this22.sizeVec3]; _this23.x = center.x; _this23.y = center.y; _this23.z = center.z; var _this24 = _this23; var tx12 = _this24.x + ex.x * maxx; var ty12 = _this24.y + ex.y * maxx; var tz12 = _this24.z + ex.z * maxx; _this24.x = tx12; _this24.y = ty12; _this24.z = tz12; var _this25 = _this24; var tx13 = _this25.x + ey.x * miny; var ty13 = _this25.y + ey.y * miny; var tz13 = _this25.z + ey.z * miny; _this25.x = tx13; _this25.y = ty13; _this25.z = tz13; var _this26 = _this25; var tx14 = _this26.x + ez.x * minz; var ty14 = _this26.y + ez.y * minz; var tz14 = _this26.z + ez.z * minz; _this26.x = tx14; _this26.y = ty14; _this26.z = tz14; var Xyz = _this26; var _this27 = this._pool; var _this28 = _this27.sizeVec3 == 0 ? new oimo.common.Vec3() : _this27.stackVec3[--_this27.sizeVec3]; _this28.x = center.x; _this28.y = center.y; _this28.z = center.z; var _this29 = _this28; var tx15 = _this29.x + ex.x * maxx; var ty15 = _this29.y + ex.y * maxx; var tz15 = _this29.z + ex.z * maxx; _this29.x = tx15; _this29.y = ty15; _this29.z = tz15; var _this30 = _this29; var tx16 = _this30.x + ey.x * miny; var ty16 = _this30.y + ey.y * miny; var tz16 = _this30.z + ey.z * miny; _this30.x = tx16; _this30.y = ty16; _this30.z = tz16; var _this31 = _this30; var tx17 = _this31.x + ez.x * maxz; var ty17 = _this31.y + ez.y * maxz; var tz17 = _this31.z + ez.z * maxz; _this31.x = tx17; _this31.y = ty17; _this31.z = tz17; var XyZ = _this31; var _this32 = this._pool; var _this33 = _this32.sizeVec3 == 0 ? new oimo.common.Vec3() : _this32.stackVec3[--_this32.sizeVec3]; _this33.x = center.x; _this33.y = center.y; _this33.z = center.z; var _this34 = _this33; var tx18 = _this34.x + ex.x * maxx; var ty18 = _this34.y + ex.y * maxx; var tz18 = _this34.z + ex.z * maxx; _this34.x = tx18; _this34.y = ty18; _this34.z = tz18; var _this35 = _this34; var tx19 = _this35.x + ey.x * maxy; var ty19 = _this35.y + ey.y * maxy; var tz19 = _this35.z + ey.z * maxy; _this35.x = tx19; _this35.y = ty19; _this35.z = tz19; var _this36 = _this35; var tx20 = _this36.x + ez.x * minz; var ty20 = _this36.y + ez.y * minz; var tz20 = _this36.z + ez.z * minz; _this36.x = tx20; _this36.y = ty20; _this36.z = tz20; var XYz = _this36; var _this37 = this._pool; var _this38 = _this37.sizeVec3 == 0 ? new oimo.common.Vec3() : _this37.stackVec3[--_this37.sizeVec3]; _this38.x = center.x; _this38.y = center.y; _this38.z = center.z; var _this39 = _this38; var tx21 = _this39.x + ex.x * maxx; var ty21 = _this39.y + ex.y * maxx; var tz21 = _this39.z + ex.z * maxx; _this39.x = tx21; _this39.y = ty21; _this39.z = tz21; var _this40 = _this39; var tx22 = _this40.x + ey.x * maxy; var ty22 = _this40.y + ey.y * maxy; var tz22 = _this40.z + ey.z * maxy; _this40.x = tx22; _this40.y = ty22; _this40.z = tz22; var _this41 = _this40; var tx23 = _this41.x + ez.x * maxz; var ty23 = _this41.y + ez.y * maxz; var tz23 = _this41.z + ez.z * maxz; _this41.x = tx23; _this41.y = ty23; _this41.z = tz23; var XYZ = _this41; d.line(xyz,Xyz,color); d.line(xYz,XYz,color); d.line(xyZ,XyZ,color); d.line(xYZ,XYZ,color); d.line(xyz,xYz,color); d.line(Xyz,XYz,color); d.line(xyZ,xYZ,color); d.line(XyZ,XYZ,color); d.line(xyz,xyZ,color); d.line(Xyz,XyZ,color); d.line(xYz,xYZ,color); d.line(XYz,XYZ,color); var _this42 = this._pool; var mat3 = null; var mat4 = null; var quat = null; if(xyz != null) { xyz.zero(); if(_this42.sizeVec3 == _this42.stackVec3.length) { var newLength = _this42.sizeVec3 << 1; var this1 = new Array(newLength); var newArray = this1; var _g = 0; var _g1 = _this42.sizeVec3; while(_g < _g1) { var i = _g++; newArray[i] = _this42.stackVec3[i]; _this42.stackVec3[i] = null; } _this42.stackVec3 = newArray; } _this42.stackVec3[_this42.sizeVec3++] = xyz; } if(mat3 != null) { var t00 = 1; var t01 = 0; var t02 = 0; var t10 = 0; var t11 = 1; var t12 = 0; var t20 = 0; var t21 = 0; var t22 = 1; mat3.e00 = t00; mat3.e01 = t01; mat3.e02 = t02; mat3.e10 = t10; mat3.e11 = t11; mat3.e12 = t12; mat3.e20 = t20; mat3.e21 = t21; mat3.e22 = t22; if(_this42.sizeMat3 == _this42.stackMat3.length) { var newLength1 = _this42.sizeMat3 << 1; var this2 = new Array(newLength1); var newArray1 = this2; var _g2 = 0; var _g11 = _this42.sizeMat3; while(_g2 < _g11) { var i1 = _g2++; newArray1[i1] = _this42.stackMat3[i1]; _this42.stackMat3[i1] = null; } _this42.stackMat3 = newArray1; } _this42.stackMat3[_this42.sizeMat3++] = mat3; } if(mat4 != null) { var t001 = 1; var t011 = 0; var t021 = 0; var t03 = 0; var t101 = 0; var t111 = 1; var t121 = 0; var t13 = 0; var t201 = 0; var t211 = 0; var t221 = 1; var t23 = 0; var t30 = 0; var t31 = 0; var t32 = 0; var t33 = 1; mat4.e00 = t001; mat4.e01 = t011; mat4.e02 = t021; mat4.e03 = t03; mat4.e10 = t101; mat4.e11 = t111; mat4.e12 = t121; mat4.e13 = t13; mat4.e20 = t201; mat4.e21 = t211; mat4.e22 = t221; mat4.e23 = t23; mat4.e30 = t30; mat4.e31 = t31; mat4.e32 = t32; mat4.e33 = t33; if(_this42.sizeMat4 == _this42.stackMat4.length) { var newLength2 = _this42.sizeMat4 << 1; var this3 = new Array(newLength2); var newArray2 = this3; var _g3 = 0; var _g12 = _this42.sizeMat4; while(_g3 < _g12) { var i2 = _g3++; newArray2[i2] = _this42.stackMat4[i2]; _this42.stackMat4[i2] = null; } _this42.stackMat4 = newArray2; } _this42.stackMat4[_this42.sizeMat4++] = mat4; } if(quat != null) { var tx24 = 0; var ty24 = 0; var tz24 = 0; var tw = 1; quat.x = tx24; quat.y = ty24; quat.z = tz24; quat.w = tw; if(_this42.sizeQuat == _this42.stackQuat.length) { var newLength3 = _this42.sizeQuat << 1; var this4 = new Array(newLength3); var newArray3 = this4; var _g4 = 0; var _g13 = _this42.sizeQuat; while(_g4 < _g13) { var i3 = _g4++; newArray3[i3] = _this42.stackQuat[i3]; _this42.stackQuat[i3] = null; } _this42.stackQuat = newArray3; } _this42.stackQuat[_this42.sizeQuat++] = quat; } var _this43 = this._pool; var mat31 = null; var mat41 = null; var quat1 = null; if(xyZ != null) { xyZ.zero(); if(_this43.sizeVec3 == _this43.stackVec3.length) { var newLength4 = _this43.sizeVec3 << 1; var this5 = new Array(newLength4); var newArray4 = this5; var _g5 = 0; var _g14 = _this43.sizeVec3; while(_g5 < _g14) { var i4 = _g5++; newArray4[i4] = _this43.stackVec3[i4]; _this43.stackVec3[i4] = null; } _this43.stackVec3 = newArray4; } _this43.stackVec3[_this43.sizeVec3++] = xyZ; } if(mat31 != null) { var t002 = 1; var t012 = 0; var t022 = 0; var t102 = 0; var t112 = 1; var t122 = 0; var t202 = 0; var t212 = 0; var t222 = 1; mat31.e00 = t002; mat31.e01 = t012; mat31.e02 = t022; mat31.e10 = t102; mat31.e11 = t112; mat31.e12 = t122; mat31.e20 = t202; mat31.e21 = t212; mat31.e22 = t222; if(_this43.sizeMat3 == _this43.stackMat3.length) { var newLength5 = _this43.sizeMat3 << 1; var this6 = new Array(newLength5); var newArray5 = this6; var _g6 = 0; var _g15 = _this43.sizeMat3; while(_g6 < _g15) { var i5 = _g6++; newArray5[i5] = _this43.stackMat3[i5]; _this43.stackMat3[i5] = null; } _this43.stackMat3 = newArray5; } _this43.stackMat3[_this43.sizeMat3++] = mat31; } if(mat41 != null) { var t003 = 1; var t013 = 0; var t023 = 0; var t031 = 0; var t103 = 0; var t113 = 1; var t123 = 0; var t131 = 0; var t203 = 0; var t213 = 0; var t223 = 1; var t231 = 0; var t301 = 0; var t311 = 0; var t321 = 0; var t331 = 1; mat41.e00 = t003; mat41.e01 = t013; mat41.e02 = t023; mat41.e03 = t031; mat41.e10 = t103; mat41.e11 = t113; mat41.e12 = t123; mat41.e13 = t131; mat41.e20 = t203; mat41.e21 = t213; mat41.e22 = t223; mat41.e23 = t231; mat41.e30 = t301; mat41.e31 = t311; mat41.e32 = t321; mat41.e33 = t331; if(_this43.sizeMat4 == _this43.stackMat4.length) { var newLength6 = _this43.sizeMat4 << 1; var this7 = new Array(newLength6); var newArray6 = this7; var _g7 = 0; var _g16 = _this43.sizeMat4; while(_g7 < _g16) { var i6 = _g7++; newArray6[i6] = _this43.stackMat4[i6]; _this43.stackMat4[i6] = null; } _this43.stackMat4 = newArray6; } _this43.stackMat4[_this43.sizeMat4++] = mat41; } if(quat1 != null) { var tx25 = 0; var ty25 = 0; var tz25 = 0; var tw1 = 1; quat1.x = tx25; quat1.y = ty25; quat1.z = tz25; quat1.w = tw1; if(_this43.sizeQuat == _this43.stackQuat.length) { var newLength7 = _this43.sizeQuat << 1; var this8 = new Array(newLength7); var newArray7 = this8; var _g8 = 0; var _g17 = _this43.sizeQuat; while(_g8 < _g17) { var i7 = _g8++; newArray7[i7] = _this43.stackQuat[i7]; _this43.stackQuat[i7] = null; } _this43.stackQuat = newArray7; } _this43.stackQuat[_this43.sizeQuat++] = quat1; } var _this44 = this._pool; var mat32 = null; var mat42 = null; var quat2 = null; if(xYz != null) { xYz.zero(); if(_this44.sizeVec3 == _this44.stackVec3.length) { var newLength8 = _this44.sizeVec3 << 1; var this9 = new Array(newLength8); var newArray8 = this9; var _g9 = 0; var _g18 = _this44.sizeVec3; while(_g9 < _g18) { var i8 = _g9++; newArray8[i8] = _this44.stackVec3[i8]; _this44.stackVec3[i8] = null; } _this44.stackVec3 = newArray8; } _this44.stackVec3[_this44.sizeVec3++] = xYz; } if(mat32 != null) { var t004 = 1; var t014 = 0; var t024 = 0; var t104 = 0; var t114 = 1; var t124 = 0; var t204 = 0; var t214 = 0; var t224 = 1; mat32.e00 = t004; mat32.e01 = t014; mat32.e02 = t024; mat32.e10 = t104; mat32.e11 = t114; mat32.e12 = t124; mat32.e20 = t204; mat32.e21 = t214; mat32.e22 = t224; if(_this44.sizeMat3 == _this44.stackMat3.length) { var newLength9 = _this44.sizeMat3 << 1; var this10 = new Array(newLength9); var newArray9 = this10; var _g10 = 0; var _g19 = _this44.sizeMat3; while(_g10 < _g19) { var i9 = _g10++; newArray9[i9] = _this44.stackMat3[i9]; _this44.stackMat3[i9] = null; } _this44.stackMat3 = newArray9; } _this44.stackMat3[_this44.sizeMat3++] = mat32; } if(mat42 != null) { var t005 = 1; var t015 = 0; var t025 = 0; var t032 = 0; var t105 = 0; var t115 = 1; var t125 = 0; var t132 = 0; var t205 = 0; var t215 = 0; var t225 = 1; var t232 = 0; var t302 = 0; var t312 = 0; var t322 = 0; var t332 = 1; mat42.e00 = t005; mat42.e01 = t015; mat42.e02 = t025; mat42.e03 = t032; mat42.e10 = t105; mat42.e11 = t115; mat42.e12 = t125; mat42.e13 = t132; mat42.e20 = t205; mat42.e21 = t215; mat42.e22 = t225; mat42.e23 = t232; mat42.e30 = t302; mat42.e31 = t312; mat42.e32 = t322; mat42.e33 = t332; if(_this44.sizeMat4 == _this44.stackMat4.length) { var newLength10 = _this44.sizeMat4 << 1; var this11 = new Array(newLength10); var newArray10 = this11; var _g20 = 0; var _g110 = _this44.sizeMat4; while(_g20 < _g110) { var i10 = _g20++; newArray10[i10] = _this44.stackMat4[i10]; _this44.stackMat4[i10] = null; } _this44.stackMat4 = newArray10; } _this44.stackMat4[_this44.sizeMat4++] = mat42; } if(quat2 != null) { var tx26 = 0; var ty26 = 0; var tz26 = 0; var tw2 = 1; quat2.x = tx26; quat2.y = ty26; quat2.z = tz26; quat2.w = tw2; if(_this44.sizeQuat == _this44.stackQuat.length) { var newLength11 = _this44.sizeQuat << 1; var this12 = new Array(newLength11); var newArray11 = this12; var _g21 = 0; var _g111 = _this44.sizeQuat; while(_g21 < _g111) { var i11 = _g21++; newArray11[i11] = _this44.stackQuat[i11]; _this44.stackQuat[i11] = null; } _this44.stackQuat = newArray11; } _this44.stackQuat[_this44.sizeQuat++] = quat2; } var _this45 = this._pool; var mat33 = null; var mat43 = null; var quat3 = null; if(xYZ != null) { xYZ.zero(); if(_this45.sizeVec3 == _this45.stackVec3.length) { var newLength12 = _this45.sizeVec3 << 1; var this13 = new Array(newLength12); var newArray12 = this13; var _g22 = 0; var _g112 = _this45.sizeVec3; while(_g22 < _g112) { var i12 = _g22++; newArray12[i12] = _this45.stackVec3[i12]; _this45.stackVec3[i12] = null; } _this45.stackVec3 = newArray12; } _this45.stackVec3[_this45.sizeVec3++] = xYZ; } if(mat33 != null) { var t006 = 1; var t016 = 0; var t026 = 0; var t106 = 0; var t116 = 1; var t126 = 0; var t206 = 0; var t216 = 0; var t226 = 1; mat33.e00 = t006; mat33.e01 = t016; mat33.e02 = t026; mat33.e10 = t106; mat33.e11 = t116; mat33.e12 = t126; mat33.e20 = t206; mat33.e21 = t216; mat33.e22 = t226; if(_this45.sizeMat3 == _this45.stackMat3.length) { var newLength13 = _this45.sizeMat3 << 1; var this14 = new Array(newLength13); var newArray13 = this14; var _g23 = 0; var _g113 = _this45.sizeMat3; while(_g23 < _g113) { var i13 = _g23++; newArray13[i13] = _this45.stackMat3[i13]; _this45.stackMat3[i13] = null; } _this45.stackMat3 = newArray13; } _this45.stackMat3[_this45.sizeMat3++] = mat33; } if(mat43 != null) { var t007 = 1; var t017 = 0; var t027 = 0; var t033 = 0; var t107 = 0; var t117 = 1; var t127 = 0; var t133 = 0; var t207 = 0; var t217 = 0; var t227 = 1; var t233 = 0; var t303 = 0; var t313 = 0; var t323 = 0; var t333 = 1; mat43.e00 = t007; mat43.e01 = t017; mat43.e02 = t027; mat43.e03 = t033; mat43.e10 = t107; mat43.e11 = t117; mat43.e12 = t127; mat43.e13 = t133; mat43.e20 = t207; mat43.e21 = t217; mat43.e22 = t227; mat43.e23 = t233; mat43.e30 = t303; mat43.e31 = t313; mat43.e32 = t323; mat43.e33 = t333; if(_this45.sizeMat4 == _this45.stackMat4.length) { var newLength14 = _this45.sizeMat4 << 1; var this15 = new Array(newLength14); var newArray14 = this15; var _g24 = 0; var _g114 = _this45.sizeMat4; while(_g24 < _g114) { var i14 = _g24++; newArray14[i14] = _this45.stackMat4[i14]; _this45.stackMat4[i14] = null; } _this45.stackMat4 = newArray14; } _this45.stackMat4[_this45.sizeMat4++] = mat43; } if(quat3 != null) { var tx27 = 0; var ty27 = 0; var tz27 = 0; var tw3 = 1; quat3.x = tx27; quat3.y = ty27; quat3.z = tz27; quat3.w = tw3; if(_this45.sizeQuat == _this45.stackQuat.length) { var newLength15 = _this45.sizeQuat << 1; var this16 = new Array(newLength15); var newArray15 = this16; var _g25 = 0; var _g115 = _this45.sizeQuat; while(_g25 < _g115) { var i15 = _g25++; newArray15[i15] = _this45.stackQuat[i15]; _this45.stackQuat[i15] = null; } _this45.stackQuat = newArray15; } _this45.stackQuat[_this45.sizeQuat++] = quat3; } var _this46 = this._pool; var mat34 = null; var mat44 = null; var quat4 = null; if(Xyz != null) { Xyz.zero(); if(_this46.sizeVec3 == _this46.stackVec3.length) { var newLength16 = _this46.sizeVec3 << 1; var this17 = new Array(newLength16); var newArray16 = this17; var _g26 = 0; var _g116 = _this46.sizeVec3; while(_g26 < _g116) { var i16 = _g26++; newArray16[i16] = _this46.stackVec3[i16]; _this46.stackVec3[i16] = null; } _this46.stackVec3 = newArray16; } _this46.stackVec3[_this46.sizeVec3++] = Xyz; } if(mat34 != null) { var t008 = 1; var t018 = 0; var t028 = 0; var t108 = 0; var t118 = 1; var t128 = 0; var t208 = 0; var t218 = 0; var t228 = 1; mat34.e00 = t008; mat34.e01 = t018; mat34.e02 = t028; mat34.e10 = t108; mat34.e11 = t118; mat34.e12 = t128; mat34.e20 = t208; mat34.e21 = t218; mat34.e22 = t228; if(_this46.sizeMat3 == _this46.stackMat3.length) { var newLength17 = _this46.sizeMat3 << 1; var this18 = new Array(newLength17); var newArray17 = this18; var _g27 = 0; var _g117 = _this46.sizeMat3; while(_g27 < _g117) { var i17 = _g27++; newArray17[i17] = _this46.stackMat3[i17]; _this46.stackMat3[i17] = null; } _this46.stackMat3 = newArray17; } _this46.stackMat3[_this46.sizeMat3++] = mat34; } if(mat44 != null) { var t009 = 1; var t019 = 0; var t029 = 0; var t034 = 0; var t109 = 0; var t119 = 1; var t129 = 0; var t134 = 0; var t209 = 0; var t219 = 0; var t229 = 1; var t234 = 0; var t304 = 0; var t314 = 0; var t324 = 0; var t334 = 1; mat44.e00 = t009; mat44.e01 = t019; mat44.e02 = t029; mat44.e03 = t034; mat44.e10 = t109; mat44.e11 = t119; mat44.e12 = t129; mat44.e13 = t134; mat44.e20 = t209; mat44.e21 = t219; mat44.e22 = t229; mat44.e23 = t234; mat44.e30 = t304; mat44.e31 = t314; mat44.e32 = t324; mat44.e33 = t334; if(_this46.sizeMat4 == _this46.stackMat4.length) { var newLength18 = _this46.sizeMat4 << 1; var this19 = new Array(newLength18); var newArray18 = this19; var _g28 = 0; var _g118 = _this46.sizeMat4; while(_g28 < _g118) { var i18 = _g28++; newArray18[i18] = _this46.stackMat4[i18]; _this46.stackMat4[i18] = null; } _this46.stackMat4 = newArray18; } _this46.stackMat4[_this46.sizeMat4++] = mat44; } if(quat4 != null) { var tx28 = 0; var ty28 = 0; var tz28 = 0; var tw4 = 1; quat4.x = tx28; quat4.y = ty28; quat4.z = tz28; quat4.w = tw4; if(_this46.sizeQuat == _this46.stackQuat.length) { var newLength19 = _this46.sizeQuat << 1; var this20 = new Array(newLength19); var newArray19 = this20; var _g29 = 0; var _g119 = _this46.sizeQuat; while(_g29 < _g119) { var i19 = _g29++; newArray19[i19] = _this46.stackQuat[i19]; _this46.stackQuat[i19] = null; } _this46.stackQuat = newArray19; } _this46.stackQuat[_this46.sizeQuat++] = quat4; } var _this47 = this._pool; var mat35 = null; var mat45 = null; var quat5 = null; if(XyZ != null) { XyZ.zero(); if(_this47.sizeVec3 == _this47.stackVec3.length) { var newLength20 = _this47.sizeVec3 << 1; var this21 = new Array(newLength20); var newArray20 = this21; var _g30 = 0; var _g120 = _this47.sizeVec3; while(_g30 < _g120) { var i20 = _g30++; newArray20[i20] = _this47.stackVec3[i20]; _this47.stackVec3[i20] = null; } _this47.stackVec3 = newArray20; } _this47.stackVec3[_this47.sizeVec3++] = XyZ; } if(mat35 != null) { var t0010 = 1; var t0110 = 0; var t0210 = 0; var t1010 = 0; var t1110 = 1; var t1210 = 0; var t2010 = 0; var t2110 = 0; var t2210 = 1; mat35.e00 = t0010; mat35.e01 = t0110; mat35.e02 = t0210; mat35.e10 = t1010; mat35.e11 = t1110; mat35.e12 = t1210; mat35.e20 = t2010; mat35.e21 = t2110; mat35.e22 = t2210; if(_this47.sizeMat3 == _this47.stackMat3.length) { var newLength21 = _this47.sizeMat3 << 1; var this22 = new Array(newLength21); var newArray21 = this22; var _g31 = 0; var _g121 = _this47.sizeMat3; while(_g31 < _g121) { var i21 = _g31++; newArray21[i21] = _this47.stackMat3[i21]; _this47.stackMat3[i21] = null; } _this47.stackMat3 = newArray21; } _this47.stackMat3[_this47.sizeMat3++] = mat35; } if(mat45 != null) { var t0011 = 1; var t0111 = 0; var t0211 = 0; var t035 = 0; var t1011 = 0; var t1111 = 1; var t1211 = 0; var t135 = 0; var t2011 = 0; var t2111 = 0; var t2211 = 1; var t235 = 0; var t305 = 0; var t315 = 0; var t325 = 0; var t335 = 1; mat45.e00 = t0011; mat45.e01 = t0111; mat45.e02 = t0211; mat45.e03 = t035; mat45.e10 = t1011; mat45.e11 = t1111; mat45.e12 = t1211; mat45.e13 = t135; mat45.e20 = t2011; mat45.e21 = t2111; mat45.e22 = t2211; mat45.e23 = t235; mat45.e30 = t305; mat45.e31 = t315; mat45.e32 = t325; mat45.e33 = t335; if(_this47.sizeMat4 == _this47.stackMat4.length) { var newLength22 = _this47.sizeMat4 << 1; var this23 = new Array(newLength22); var newArray22 = this23; var _g32 = 0; var _g122 = _this47.sizeMat4; while(_g32 < _g122) { var i22 = _g32++; newArray22[i22] = _this47.stackMat4[i22]; _this47.stackMat4[i22] = null; } _this47.stackMat4 = newArray22; } _this47.stackMat4[_this47.sizeMat4++] = mat45; } if(quat5 != null) { var tx29 = 0; var ty29 = 0; var tz29 = 0; var tw5 = 1; quat5.x = tx29; quat5.y = ty29; quat5.z = tz29; quat5.w = tw5; if(_this47.sizeQuat == _this47.stackQuat.length) { var newLength23 = _this47.sizeQuat << 1; var this24 = new Array(newLength23); var newArray23 = this24; var _g33 = 0; var _g123 = _this47.sizeQuat; while(_g33 < _g123) { var i23 = _g33++; newArray23[i23] = _this47.stackQuat[i23]; _this47.stackQuat[i23] = null; } _this47.stackQuat = newArray23; } _this47.stackQuat[_this47.sizeQuat++] = quat5; } var _this48 = this._pool; var mat36 = null; var mat46 = null; var quat6 = null; if(XYz != null) { XYz.zero(); if(_this48.sizeVec3 == _this48.stackVec3.length) { var newLength24 = _this48.sizeVec3 << 1; var this25 = new Array(newLength24); var newArray24 = this25; var _g34 = 0; var _g124 = _this48.sizeVec3; while(_g34 < _g124) { var i24 = _g34++; newArray24[i24] = _this48.stackVec3[i24]; _this48.stackVec3[i24] = null; } _this48.stackVec3 = newArray24; } _this48.stackVec3[_this48.sizeVec3++] = XYz; } if(mat36 != null) { var t0012 = 1; var t0112 = 0; var t0212 = 0; var t1012 = 0; var t1112 = 1; var t1212 = 0; var t2012 = 0; var t2112 = 0; var t2212 = 1; mat36.e00 = t0012; mat36.e01 = t0112; mat36.e02 = t0212; mat36.e10 = t1012; mat36.e11 = t1112; mat36.e12 = t1212; mat36.e20 = t2012; mat36.e21 = t2112; mat36.e22 = t2212; if(_this48.sizeMat3 == _this48.stackMat3.length) { var newLength25 = _this48.sizeMat3 << 1; var this26 = new Array(newLength25); var newArray25 = this26; var _g35 = 0; var _g125 = _this48.sizeMat3; while(_g35 < _g125) { var i25 = _g35++; newArray25[i25] = _this48.stackMat3[i25]; _this48.stackMat3[i25] = null; } _this48.stackMat3 = newArray25; } _this48.stackMat3[_this48.sizeMat3++] = mat36; } if(mat46 != null) { var t0013 = 1; var t0113 = 0; var t0213 = 0; var t036 = 0; var t1013 = 0; var t1113 = 1; var t1213 = 0; var t136 = 0; var t2013 = 0; var t2113 = 0; var t2213 = 1; var t236 = 0; var t306 = 0; var t316 = 0; var t326 = 0; var t336 = 1; mat46.e00 = t0013; mat46.e01 = t0113; mat46.e02 = t0213; mat46.e03 = t036; mat46.e10 = t1013; mat46.e11 = t1113; mat46.e12 = t1213; mat46.e13 = t136; mat46.e20 = t2013; mat46.e21 = t2113; mat46.e22 = t2213; mat46.e23 = t236; mat46.e30 = t306; mat46.e31 = t316; mat46.e32 = t326; mat46.e33 = t336; if(_this48.sizeMat4 == _this48.stackMat4.length) { var newLength26 = _this48.sizeMat4 << 1; var this27 = new Array(newLength26); var newArray26 = this27; var _g36 = 0; var _g126 = _this48.sizeMat4; while(_g36 < _g126) { var i26 = _g36++; newArray26[i26] = _this48.stackMat4[i26]; _this48.stackMat4[i26] = null; } _this48.stackMat4 = newArray26; } _this48.stackMat4[_this48.sizeMat4++] = mat46; } if(quat6 != null) { var tx30 = 0; var ty30 = 0; var tz30 = 0; var tw6 = 1; quat6.x = tx30; quat6.y = ty30; quat6.z = tz30; quat6.w = tw6; if(_this48.sizeQuat == _this48.stackQuat.length) { var newLength27 = _this48.sizeQuat << 1; var this28 = new Array(newLength27); var newArray27 = this28; var _g37 = 0; var _g127 = _this48.sizeQuat; while(_g37 < _g127) { var i27 = _g37++; newArray27[i27] = _this48.stackQuat[i27]; _this48.stackQuat[i27] = null; } _this48.stackQuat = newArray27; } _this48.stackQuat[_this48.sizeQuat++] = quat6; } var _this49 = this._pool; var mat37 = null; var mat47 = null; var quat7 = null; if(XYZ != null) { XYZ.zero(); if(_this49.sizeVec3 == _this49.stackVec3.length) { var newLength28 = _this49.sizeVec3 << 1; var this29 = new Array(newLength28); var newArray28 = this29; var _g38 = 0; var _g128 = _this49.sizeVec3; while(_g38 < _g128) { var i28 = _g38++; newArray28[i28] = _this49.stackVec3[i28]; _this49.stackVec3[i28] = null; } _this49.stackVec3 = newArray28; } _this49.stackVec3[_this49.sizeVec3++] = XYZ; } if(mat37 != null) { var t0014 = 1; var t0114 = 0; var t0214 = 0; var t1014 = 0; var t1114 = 1; var t1214 = 0; var t2014 = 0; var t2114 = 0; var t2214 = 1; mat37.e00 = t0014; mat37.e01 = t0114; mat37.e02 = t0214; mat37.e10 = t1014; mat37.e11 = t1114; mat37.e12 = t1214; mat37.e20 = t2014; mat37.e21 = t2114; mat37.e22 = t2214; if(_this49.sizeMat3 == _this49.stackMat3.length) { var newLength29 = _this49.sizeMat3 << 1; var this30 = new Array(newLength29); var newArray29 = this30; var _g39 = 0; var _g129 = _this49.sizeMat3; while(_g39 < _g129) { var i29 = _g39++; newArray29[i29] = _this49.stackMat3[i29]; _this49.stackMat3[i29] = null; } _this49.stackMat3 = newArray29; } _this49.stackMat3[_this49.sizeMat3++] = mat37; } if(mat47 != null) { var t0015 = 1; var t0115 = 0; var t0215 = 0; var t037 = 0; var t1015 = 0; var t1115 = 1; var t1215 = 0; var t137 = 0; var t2015 = 0; var t2115 = 0; var t2215 = 1; var t237 = 0; var t307 = 0; var t317 = 0; var t327 = 0; var t337 = 1; mat47.e00 = t0015; mat47.e01 = t0115; mat47.e02 = t0215; mat47.e03 = t037; mat47.e10 = t1015; mat47.e11 = t1115; mat47.e12 = t1215; mat47.e13 = t137; mat47.e20 = t2015; mat47.e21 = t2115; mat47.e22 = t2215; mat47.e23 = t237; mat47.e30 = t307; mat47.e31 = t317; mat47.e32 = t327; mat47.e33 = t337; if(_this49.sizeMat4 == _this49.stackMat4.length) { var newLength30 = _this49.sizeMat4 << 1; var this31 = new Array(newLength30); var newArray30 = this31; var _g40 = 0; var _g130 = _this49.sizeMat4; while(_g40 < _g130) { var i30 = _g40++; newArray30[i30] = _this49.stackMat4[i30]; _this49.stackMat4[i30] = null; } _this49.stackMat4 = newArray30; } _this49.stackMat4[_this49.sizeMat4++] = mat47; } if(quat7 != null) { var tx31 = 0; var ty31 = 0; var tz31 = 0; var tw7 = 1; quat7.x = tx31; quat7.y = ty31; quat7.z = tz31; quat7.w = tw7; if(_this49.sizeQuat == _this49.stackQuat.length) { var newLength31 = _this49.sizeQuat << 1; var this32 = new Array(newLength31); var newArray31 = this32; var _g41 = 0; var _g131 = _this49.sizeQuat; while(_g41 < _g131) { var i31 = _g41++; newArray31[i31] = _this49.stackQuat[i31]; _this49.stackQuat[i31] = null; } _this49.stackQuat = newArray31; } _this49.stackQuat[_this49.sizeQuat++] = quat7; } } _drawEllipseOnSphere(d,center,normal,x,y,radiansX,radiansY,radius,color) { var n = 16; var theta = 0; var dTheta = 6.28318530717958 / n; var _this = this._pool; var rotVec = _this.sizeVec3 == 0 ? new oimo.common.Vec3() : _this.stackVec3[--_this.sizeVec3]; var _this1 = this._pool; var rotQ = _this1.sizeQuat == 0 ? new oimo.common.Quat() : _this1.stackQuat[--_this1.sizeQuat]; var _this2 = this._pool; var rotM = _this2.sizeMat3 == 0 ? new oimo.common.Mat3() : _this2.stackMat3[--_this2.sizeMat3]; var _this3 = this._pool; var prevV = _this3.sizeVec3 == 0 ? new oimo.common.Vec3() : _this3.stackVec3[--_this3.sizeVec3]; var _g = 0; var _g1 = n + 1; while(_g < _g1) { var i = _g++; var rx = Math.cos(theta) * radiansX; var ry = Math.sin(theta) * radiansY; var halfRotAng = Math.sqrt(rx * rx + ry * ry); var rotSin = Math.sin(halfRotAng * 0.5); var rotCos = Math.cos(halfRotAng * 0.5); var _this4 = rotVec.zero(); var tx = _this4.x + x.x * rx; var ty = _this4.y + x.y * rx; var tz = _this4.z + x.z * rx; _this4.x = tx; _this4.y = ty; _this4.z = tz; var _this5 = _this4; var tx1 = _this5.x + y.x * ry; var ty1 = _this5.y + y.y * ry; var tz1 = _this5.z + y.z * ry; _this5.x = tx1; _this5.y = ty1; _this5.z = tz1; var s = 1 / halfRotAng * rotSin; var tx2 = rotVec.x * s; var ty2 = rotVec.y * s; var tz2 = rotVec.z * s; rotVec.x = tx2; rotVec.y = ty2; rotVec.z = tz2; rotQ.x = rotVec.x; rotQ.y = rotVec.y; rotQ.z = rotVec.z; rotQ.w = rotCos; var x1 = rotQ.x; var y1 = rotQ.y; var z = rotQ.z; var w = rotQ.w; var x2 = 2 * x1; var y2 = 2 * y1; var z2 = 2 * z; var xx = x1 * x2; var yy = y1 * y2; var zz = z * z2; var xy = x1 * y2; var yz = y1 * z2; var xz = x1 * z2; var wx = w * x2; var wy = w * y2; var wz = w * z2; rotM.e00 = 1 - yy - zz; rotM.e01 = xy - wz; rotM.e02 = xz + wy; rotM.e10 = xy + wz; rotM.e11 = 1 - xx - zz; rotM.e12 = yz - wx; rotM.e20 = xz - wy; rotM.e21 = yz + wx; rotM.e22 = 1 - xx - yy; var _this6 = this._pool; var _this7 = _this6.sizeVec3 == 0 ? new oimo.common.Vec3() : _this6.stackVec3[--_this6.sizeVec3]; var tx3 = _this7.x + normal.x * radius; var ty3 = _this7.y + normal.y * radius; var tz3 = _this7.z + normal.z * radius; _this7.x = tx3; _this7.y = ty3; _this7.z = tz3; var v = _this7; var tx4 = v.x * rotM.e00 + v.y * rotM.e01 + v.z * rotM.e02; var ty4 = v.x * rotM.e10 + v.y * rotM.e11 + v.z * rotM.e12; var tz4 = v.x * rotM.e20 + v.y * rotM.e21 + v.z * rotM.e22; v.x = tx4; v.y = ty4; v.z = tz4; var _this8 = v; var tx5 = _this8.x + center.x; var ty5 = _this8.y + center.y; var tz5 = _this8.z + center.z; _this8.x = tx5; _this8.y = ty5; _this8.z = tz5; if(i >= 1) { d.line(prevV,v,color); } var _this9 = this._pool; var mat3 = null; var mat4 = null; var quat = null; if(prevV != null) { prevV.zero(); if(_this9.sizeVec3 == _this9.stackVec3.length) { var newLength = _this9.sizeVec3 << 1; var this1 = new Array(newLength); var newArray = this1; var _g2 = 0; var _g11 = _this9.sizeVec3; while(_g2 < _g11) { var i1 = _g2++; newArray[i1] = _this9.stackVec3[i1]; _this9.stackVec3[i1] = null; } _this9.stackVec3 = newArray; } _this9.stackVec3[_this9.sizeVec3++] = prevV; } if(mat3 != null) { var t00 = 1; var t01 = 0; var t02 = 0; var t10 = 0; var t11 = 1; var t12 = 0; var t20 = 0; var t21 = 0; var t22 = 1; mat3.e00 = t00; mat3.e01 = t01; mat3.e02 = t02; mat3.e10 = t10; mat3.e11 = t11; mat3.e12 = t12; mat3.e20 = t20; mat3.e21 = t21; mat3.e22 = t22; if(_this9.sizeMat3 == _this9.stackMat3.length) { var newLength1 = _this9.sizeMat3 << 1; var this2 = new Array(newLength1); var newArray1 = this2; var _g3 = 0; var _g12 = _this9.sizeMat3; while(_g3 < _g12) { var i2 = _g3++; newArray1[i2] = _this9.stackMat3[i2]; _this9.stackMat3[i2] = null; } _this9.stackMat3 = newArray1; } _this9.stackMat3[_this9.sizeMat3++] = mat3; } if(mat4 != null) { var t001 = 1; var t011 = 0; var t021 = 0; var t03 = 0; var t101 = 0; var t111 = 1; var t121 = 0; var t13 = 0; var t201 = 0; var t211 = 0; var t221 = 1; var t23 = 0; var t30 = 0; var t31 = 0; var t32 = 0; var t33 = 1; mat4.e00 = t001; mat4.e01 = t011; mat4.e02 = t021; mat4.e03 = t03; mat4.e10 = t101; mat4.e11 = t111; mat4.e12 = t121; mat4.e13 = t13; mat4.e20 = t201; mat4.e21 = t211; mat4.e22 = t221; mat4.e23 = t23; mat4.e30 = t30; mat4.e31 = t31; mat4.e32 = t32; mat4.e33 = t33; if(_this9.sizeMat4 == _this9.stackMat4.length) { var newLength2 = _this9.sizeMat4 << 1; var this3 = new Array(newLength2); var newArray2 = this3; var _g4 = 0; var _g13 = _this9.sizeMat4; while(_g4 < _g13) { var i3 = _g4++; newArray2[i3] = _this9.stackMat4[i3]; _this9.stackMat4[i3] = null; } _this9.stackMat4 = newArray2; } _this9.stackMat4[_this9.sizeMat4++] = mat4; } if(quat != null) { var tx6 = 0; var ty6 = 0; var tz6 = 0; var tw = 1; quat.x = tx6; quat.y = ty6; quat.z = tz6; quat.w = tw; if(_this9.sizeQuat == _this9.stackQuat.length) { var newLength3 = _this9.sizeQuat << 1; var this4 = new Array(newLength3); var newArray3 = this4; var _g5 = 0; var _g14 = _this9.sizeQuat; while(_g5 < _g14) { var i4 = _g5++; newArray3[i4] = _this9.stackQuat[i4]; _this9.stackQuat[i4] = null; } _this9.stackQuat = newArray3; } _this9.stackQuat[_this9.sizeQuat++] = quat; } prevV = v; theta += dTheta; } var _this10 = this._pool; var mat31 = null; var mat41 = null; var quat1 = null; if(rotVec != null) { rotVec.zero(); if(_this10.sizeVec3 == _this10.stackVec3.length) { var newLength4 = _this10.sizeVec3 << 1; var this5 = new Array(newLength4); var newArray4 = this5; var _g6 = 0; var _g15 = _this10.sizeVec3; while(_g6 < _g15) { var i5 = _g6++; newArray4[i5] = _this10.stackVec3[i5]; _this10.stackVec3[i5] = null; } _this10.stackVec3 = newArray4; } _this10.stackVec3[_this10.sizeVec3++] = rotVec; } if(mat31 != null) { var t002 = 1; var t012 = 0; var t022 = 0; var t102 = 0; var t112 = 1; var t122 = 0; var t202 = 0; var t212 = 0; var t222 = 1; mat31.e00 = t002; mat31.e01 = t012; mat31.e02 = t022; mat31.e10 = t102; mat31.e11 = t112; mat31.e12 = t122; mat31.e20 = t202; mat31.e21 = t212; mat31.e22 = t222; if(_this10.sizeMat3 == _this10.stackMat3.length) { var newLength5 = _this10.sizeMat3 << 1; var this6 = new Array(newLength5); var newArray5 = this6; var _g7 = 0; var _g16 = _this10.sizeMat3; while(_g7 < _g16) { var i6 = _g7++; newArray5[i6] = _this10.stackMat3[i6]; _this10.stackMat3[i6] = null; } _this10.stackMat3 = newArray5; } _this10.stackMat3[_this10.sizeMat3++] = mat31; } if(mat41 != null) { var t003 = 1; var t013 = 0; var t023 = 0; var t031 = 0; var t103 = 0; var t113 = 1; var t123 = 0; var t131 = 0; var t203 = 0; var t213 = 0; var t223 = 1; var t231 = 0; var t301 = 0; var t311 = 0; var t321 = 0; var t331 = 1; mat41.e00 = t003; mat41.e01 = t013; mat41.e02 = t023; mat41.e03 = t031; mat41.e10 = t103; mat41.e11 = t113; mat41.e12 = t123; mat41.e13 = t131; mat41.e20 = t203; mat41.e21 = t213; mat41.e22 = t223; mat41.e23 = t231; mat41.e30 = t301; mat41.e31 = t311; mat41.e32 = t321; mat41.e33 = t331; if(_this10.sizeMat4 == _this10.stackMat4.length) { var newLength6 = _this10.sizeMat4 << 1; var this7 = new Array(newLength6); var newArray6 = this7; var _g8 = 0; var _g17 = _this10.sizeMat4; while(_g8 < _g17) { var i7 = _g8++; newArray6[i7] = _this10.stackMat4[i7]; _this10.stackMat4[i7] = null; } _this10.stackMat4 = newArray6; } _this10.stackMat4[_this10.sizeMat4++] = mat41; } if(quat1 != null) { var tx7 = 0; var ty7 = 0; var tz7 = 0; var tw1 = 1; quat1.x = tx7; quat1.y = ty7; quat1.z = tz7; quat1.w = tw1; if(_this10.sizeQuat == _this10.stackQuat.length) { var newLength7 = _this10.sizeQuat << 1; var this8 = new Array(newLength7); var newArray7 = this8; var _g9 = 0; var _g18 = _this10.sizeQuat; while(_g9 < _g18) { var i8 = _g9++; newArray7[i8] = _this10.stackQuat[i8]; _this10.stackQuat[i8] = null; } _this10.stackQuat = newArray7; } _this10.stackQuat[_this10.sizeQuat++] = quat1; } var _this11 = this._pool; var vec3 = null; var mat32 = null; var mat42 = null; if(vec3 != null) { vec3.zero(); if(_this11.sizeVec3 == _this11.stackVec3.length) { var newLength8 = _this11.sizeVec3 << 1; var this9 = new Array(newLength8); var newArray8 = this9; var _g10 = 0; var _g19 = _this11.sizeVec3; while(_g10 < _g19) { var i9 = _g10++; newArray8[i9] = _this11.stackVec3[i9]; _this11.stackVec3[i9] = null; } _this11.stackVec3 = newArray8; } _this11.stackVec3[_this11.sizeVec3++] = vec3; } if(mat32 != null) { var t004 = 1; var t014 = 0; var t024 = 0; var t104 = 0; var t114 = 1; var t124 = 0; var t204 = 0; var t214 = 0; var t224 = 1; mat32.e00 = t004; mat32.e01 = t014; mat32.e02 = t024; mat32.e10 = t104; mat32.e11 = t114; mat32.e12 = t124; mat32.e20 = t204; mat32.e21 = t214; mat32.e22 = t224; if(_this11.sizeMat3 == _this11.stackMat3.length) { var newLength9 = _this11.sizeMat3 << 1; var this10 = new Array(newLength9); var newArray9 = this10; var _g20 = 0; var _g110 = _this11.sizeMat3; while(_g20 < _g110) { var i10 = _g20++; newArray9[i10] = _this11.stackMat3[i10]; _this11.stackMat3[i10] = null; } _this11.stackMat3 = newArray9; } _this11.stackMat3[_this11.sizeMat3++] = mat32; } if(mat42 != null) { var t005 = 1; var t015 = 0; var t025 = 0; var t032 = 0; var t105 = 0; var t115 = 1; var t125 = 0; var t132 = 0; var t205 = 0; var t215 = 0; var t225 = 1; var t232 = 0; var t302 = 0; var t312 = 0; var t322 = 0; var t332 = 1; mat42.e00 = t005; mat42.e01 = t015; mat42.e02 = t025; mat42.e03 = t032; mat42.e10 = t105; mat42.e11 = t115; mat42.e12 = t125; mat42.e13 = t132; mat42.e20 = t205; mat42.e21 = t215; mat42.e22 = t225; mat42.e23 = t232; mat42.e30 = t302; mat42.e31 = t312; mat42.e32 = t322; mat42.e33 = t332; if(_this11.sizeMat4 == _this11.stackMat4.length) { var newLength10 = _this11.sizeMat4 << 1; var this11 = new Array(newLength10); var newArray10 = this11; var _g21 = 0; var _g111 = _this11.sizeMat4; while(_g21 < _g111) { var i11 = _g21++; newArray10[i11] = _this11.stackMat4[i11]; _this11.stackMat4[i11] = null; } _this11.stackMat4 = newArray10; } _this11.stackMat4[_this11.sizeMat4++] = mat42; } if(rotQ != null) { var tx8 = 0; var ty8 = 0; var tz8 = 0; var tw2 = 1; rotQ.x = tx8; rotQ.y = ty8; rotQ.z = tz8; rotQ.w = tw2; if(_this11.sizeQuat == _this11.stackQuat.length) { var newLength11 = _this11.sizeQuat << 1; var this12 = new Array(newLength11); var newArray11 = this12; var _g22 = 0; var _g112 = _this11.sizeQuat; while(_g22 < _g112) { var i12 = _g22++; newArray11[i12] = _this11.stackQuat[i12]; _this11.stackQuat[i12] = null; } _this11.stackQuat = newArray11; } _this11.stackQuat[_this11.sizeQuat++] = rotQ; } var _this12 = this._pool; var vec31 = null; var mat43 = null; var quat2 = null; if(vec31 != null) { vec31.zero(); if(_this12.sizeVec3 == _this12.stackVec3.length) { var newLength12 = _this12.sizeVec3 << 1; var this13 = new Array(newLength12); var newArray12 = this13; var _g23 = 0; var _g113 = _this12.sizeVec3; while(_g23 < _g113) { var i13 = _g23++; newArray12[i13] = _this12.stackVec3[i13]; _this12.stackVec3[i13] = null; } _this12.stackVec3 = newArray12; } _this12.stackVec3[_this12.sizeVec3++] = vec31; } if(rotM != null) { var t006 = 1; var t016 = 0; var t026 = 0; var t106 = 0; var t116 = 1; var t126 = 0; var t206 = 0; var t216 = 0; var t226 = 1; rotM.e00 = t006; rotM.e01 = t016; rotM.e02 = t026; rotM.e10 = t106; rotM.e11 = t116; rotM.e12 = t126; rotM.e20 = t206; rotM.e21 = t216; rotM.e22 = t226; if(_this12.sizeMat3 == _this12.stackMat3.length) { var newLength13 = _this12.sizeMat3 << 1; var this14 = new Array(newLength13); var newArray13 = this14; var _g24 = 0; var _g114 = _this12.sizeMat3; while(_g24 < _g114) { var i14 = _g24++; newArray13[i14] = _this12.stackMat3[i14]; _this12.stackMat3[i14] = null; } _this12.stackMat3 = newArray13; } _this12.stackMat3[_this12.sizeMat3++] = rotM; } if(mat43 != null) { var t007 = 1; var t017 = 0; var t027 = 0; var t033 = 0; var t107 = 0; var t117 = 1; var t127 = 0; var t133 = 0; var t207 = 0; var t217 = 0; var t227 = 1; var t233 = 0; var t303 = 0; var t313 = 0; var t323 = 0; var t333 = 1; mat43.e00 = t007; mat43.e01 = t017; mat43.e02 = t027; mat43.e03 = t033; mat43.e10 = t107; mat43.e11 = t117; mat43.e12 = t127; mat43.e13 = t133; mat43.e20 = t207; mat43.e21 = t217; mat43.e22 = t227; mat43.e23 = t233; mat43.e30 = t303; mat43.e31 = t313; mat43.e32 = t323; mat43.e33 = t333; if(_this12.sizeMat4 == _this12.stackMat4.length) { var newLength14 = _this12.sizeMat4 << 1; var this15 = new Array(newLength14); var newArray14 = this15; var _g25 = 0; var _g115 = _this12.sizeMat4; while(_g25 < _g115) { var i15 = _g25++; newArray14[i15] = _this12.stackMat4[i15]; _this12.stackMat4[i15] = null; } _this12.stackMat4 = newArray14; } _this12.stackMat4[_this12.sizeMat4++] = mat43; } if(quat2 != null) { var tx9 = 0; var ty9 = 0; var tz9 = 0; var tw3 = 1; quat2.x = tx9; quat2.y = ty9; quat2.z = tz9; quat2.w = tw3; if(_this12.sizeQuat == _this12.stackQuat.length) { var newLength15 = _this12.sizeQuat << 1; var this16 = new Array(newLength15); var newArray15 = this16; var _g26 = 0; var _g116 = _this12.sizeQuat; while(_g26 < _g116) { var i16 = _g26++; newArray15[i16] = _this12.stackQuat[i16]; _this12.stackQuat[i16] = null; } _this12.stackQuat = newArray15; } _this12.stackQuat[_this12.sizeQuat++] = quat2; } var _this13 = this._pool; var mat33 = null; var mat44 = null; var quat3 = null; if(prevV != null) { prevV.zero(); if(_this13.sizeVec3 == _this13.stackVec3.length) { var newLength16 = _this13.sizeVec3 << 1; var this17 = new Array(newLength16); var newArray16 = this17; var _g27 = 0; var _g117 = _this13.sizeVec3; while(_g27 < _g117) { var i17 = _g27++; newArray16[i17] = _this13.stackVec3[i17]; _this13.stackVec3[i17] = null; } _this13.stackVec3 = newArray16; } _this13.stackVec3[_this13.sizeVec3++] = prevV; } if(mat33 != null) { var t008 = 1; var t018 = 0; var t028 = 0; var t108 = 0; var t118 = 1; var t128 = 0; var t208 = 0; var t218 = 0; var t228 = 1; mat33.e00 = t008; mat33.e01 = t018; mat33.e02 = t028; mat33.e10 = t108; mat33.e11 = t118; mat33.e12 = t128; mat33.e20 = t208; mat33.e21 = t218; mat33.e22 = t228; if(_this13.sizeMat3 == _this13.stackMat3.length) { var newLength17 = _this13.sizeMat3 << 1; var this18 = new Array(newLength17); var newArray17 = this18; var _g28 = 0; var _g118 = _this13.sizeMat3; while(_g28 < _g118) { var i18 = _g28++; newArray17[i18] = _this13.stackMat3[i18]; _this13.stackMat3[i18] = null; } _this13.stackMat3 = newArray17; } _this13.stackMat3[_this13.sizeMat3++] = mat33; } if(mat44 != null) { var t009 = 1; var t019 = 0; var t029 = 0; var t034 = 0; var t109 = 0; var t119 = 1; var t129 = 0; var t134 = 0; var t209 = 0; var t219 = 0; var t229 = 1; var t234 = 0; var t304 = 0; var t314 = 0; var t324 = 0; var t334 = 1; mat44.e00 = t009; mat44.e01 = t019; mat44.e02 = t029; mat44.e03 = t034; mat44.e10 = t109; mat44.e11 = t119; mat44.e12 = t129; mat44.e13 = t134; mat44.e20 = t209; mat44.e21 = t219; mat44.e22 = t229; mat44.e23 = t234; mat44.e30 = t304; mat44.e31 = t314; mat44.e32 = t324; mat44.e33 = t334; if(_this13.sizeMat4 == _this13.stackMat4.length) { var newLength18 = _this13.sizeMat4 << 1; var this19 = new Array(newLength18); var newArray18 = this19; var _g29 = 0; var _g119 = _this13.sizeMat4; while(_g29 < _g119) { var i19 = _g29++; newArray18[i19] = _this13.stackMat4[i19]; _this13.stackMat4[i19] = null; } _this13.stackMat4 = newArray18; } _this13.stackMat4[_this13.sizeMat4++] = mat44; } if(quat3 != null) { var tx10 = 0; var ty10 = 0; var tz10 = 0; var tw4 = 1; quat3.x = tx10; quat3.y = ty10; quat3.z = tz10; quat3.w = tw4; if(_this13.sizeQuat == _this13.stackQuat.length) { var newLength19 = _this13.sizeQuat << 1; var this20 = new Array(newLength19); var newArray19 = this20; var _g30 = 0; var _g120 = _this13.sizeQuat; while(_g30 < _g120) { var i20 = _g30++; newArray19[i20] = _this13.stackQuat[i20]; _this13.stackQuat[i20] = null; } _this13.stackQuat = newArray19; } _this13.stackQuat[_this13.sizeQuat++] = quat3; } } step(timeStep) { if(this._timeStep.dt > 0) { this._timeStep.dtRatio = timeStep / this._timeStep.dt; } this._timeStep.dt = timeStep; this._timeStep.invDt = 1 / timeStep; var st = Date.now() / 1000; this._updateContacts(); this._solveIslands(); var en = Date.now() / 1000; oimo.dynamics.common.Performance.totalTime = (en - st) * 1000; } addRigidBody(rigidBody) { if(rigidBody._world != null) { throw new Error("A rigid body cannot belong to multiple worlds."); } if(this._rigidBodyList == null) { this._rigidBodyList = rigidBody; this._rigidBodyListLast = rigidBody; } else { this._rigidBodyListLast._next = rigidBody; rigidBody._prev = this._rigidBodyListLast; this._rigidBodyListLast = rigidBody; } rigidBody._world = this; var s = rigidBody._shapeList; while(s != null) { var n = s._next; s._proxy = this._broadPhase.createProxy(s,s._aabb); s._id = this._shapeIdCount++; this._numShapes++; s = n; } this._numRigidBodies++; } removeRigidBody(rigidBody) { if(rigidBody._world != this) { throw new Error("The rigid body doesn't belong to the world."); } var prev = rigidBody._prev; var next = rigidBody._next; if(prev != null) { prev._next = next; } if(next != null) { next._prev = prev; } if(rigidBody == this._rigidBodyList) { this._rigidBodyList = this._rigidBodyList._next; } if(rigidBody == this._rigidBodyListLast) { this._rigidBodyListLast = this._rigidBodyListLast._prev; } rigidBody._next = null; rigidBody._prev = null; rigidBody._world = null; var s = rigidBody._shapeList; while(s != null) { var n = s._next; this._broadPhase.destroyProxy(s._proxy); s._proxy = null; s._id = -1; var cl = s._rigidBody._contactLinkList; while(cl != null) { var n1 = cl._next; var c = cl._contact; if(c._s1 == s || c._s2 == s) { var _this = cl._other; _this._sleeping = false; _this._sleepTime = 0; var _this1 = this._contactManager; var prev1 = c._prev; var next1 = c._next; if(prev1 != null) { prev1._next = next1; } if(next1 != null) { next1._prev = prev1; } if(c == _this1._contactList) { _this1._contactList = _this1._contactList._next; } if(c == _this1._contactListLast) { _this1._contactListLast = _this1._contactListLast._prev; } c._next = null; c._prev = null; if(c._touching) { var cc1 = c._s1._contactCallback; var cc2 = c._s2._contactCallback; if(cc1 == cc2) { cc2 = null; } if(cc1 != null) { cc1.endContact(c); } if(cc2 != null) { cc2.endContact(c); } } var prev2 = c._link1._prev; var next2 = c._link1._next; if(prev2 != null) { prev2._next = next2; } if(next2 != null) { next2._prev = prev2; } if(c._link1 == c._b1._contactLinkList) { c._b1._contactLinkList = c._b1._contactLinkList._next; } if(c._link1 == c._b1._contactLinkListLast) { c._b1._contactLinkListLast = c._b1._contactLinkListLast._prev; } c._link1._next = null; c._link1._prev = null; var prev3 = c._link2._prev; var next3 = c._link2._next; if(prev3 != null) { prev3._next = next3; } if(next3 != null) { next3._prev = prev3; } if(c._link2 == c._b2._contactLinkList) { c._b2._contactLinkList = c._b2._contactLinkList._next; } if(c._link2 == c._b2._contactLinkListLast) { c._b2._contactLinkListLast = c._b2._contactLinkListLast._prev; } c._link2._next = null; c._link2._prev = null; c._b1._numContactLinks--; c._b2._numContactLinks--; c._link1._other = null; c._link2._other = null; c._link1._contact = null; c._link2._contact = null; c._s1 = null; c._s2 = null; c._b1 = null; c._b2 = null; c._touching = false; c._cachedDetectorData._clear(); c._manifold._clear(); c._detector = null; var _this2 = c._contactConstraint; _this2._s1 = null; _this2._s2 = null; _this2._b1 = null; _this2._b2 = null; _this2._tf1 = null; _this2._tf2 = null; c._next = _this1._contactPool; _this1._contactPool = c; _this1._numContacts--; } cl = n1; } this._numShapes--; s = n; } this._numRigidBodies--; } addJoint(joint) { if(joint._world != null) { throw new Error("A joint cannot belong to multiple worlds."); } if(this._jointList == null) { this._jointList = joint; this._jointListLast = joint; } else { this._jointListLast._next = joint; joint._prev = this._jointListLast; this._jointListLast = joint; } joint._world = this; joint._link1._other = joint._b2; joint._link2._other = joint._b1; if(joint._b1._jointLinkList == null) { joint._b1._jointLinkList = joint._link1; joint._b1._jointLinkListLast = joint._link1; } else { joint._b1._jointLinkListLast._next = joint._link1; joint._link1._prev = joint._b1._jointLinkListLast; joint._b1._jointLinkListLast = joint._link1; } if(joint._b2._jointLinkList == null) { joint._b2._jointLinkList = joint._link2; joint._b2._jointLinkListLast = joint._link2; } else { joint._b2._jointLinkListLast._next = joint._link2; joint._link2._prev = joint._b2._jointLinkListLast; joint._b2._jointLinkListLast = joint._link2; } joint._b1._numJointLinks++; joint._b2._numJointLinks++; var _this = joint._b1; _this._sleeping = false; _this._sleepTime = 0; var _this1 = joint._b2; _this1._sleeping = false; _this1._sleepTime = 0; joint._syncAnchors(); this._numJoints++; } removeJoint(joint) { if(joint._world != this) { throw new Error("The joint doesn't belong to the world."); } var prev = joint._prev; var next = joint._next; if(prev != null) { prev._next = next; } if(next != null) { next._prev = prev; } if(joint == this._jointList) { this._jointList = this._jointList._next; } if(joint == this._jointListLast) { this._jointListLast = this._jointListLast._prev; } joint._next = null; joint._prev = null; joint._world = null; var prev1 = joint._link1._prev; var next1 = joint._link1._next; if(prev1 != null) { prev1._next = next1; } if(next1 != null) { next1._prev = prev1; } if(joint._link1 == joint._b1._jointLinkList) { joint._b1._jointLinkList = joint._b1._jointLinkList._next; } if(joint._link1 == joint._b1._jointLinkListLast) { joint._b1._jointLinkListLast = joint._b1._jointLinkListLast._prev; } joint._link1._next = null; joint._link1._prev = null; var prev2 = joint._link2._prev; var next2 = joint._link2._next; if(prev2 != null) { prev2._next = next2; } if(next2 != null) { next2._prev = prev2; } if(joint._link2 == joint._b2._jointLinkList) { joint._b2._jointLinkList = joint._b2._jointLinkList._next; } if(joint._link2 == joint._b2._jointLinkListLast) { joint._b2._jointLinkListLast = joint._b2._jointLinkListLast._prev; } joint._link2._next = null; joint._link2._prev = null; joint._link1._other = null; joint._link2._other = null; joint._b1._numJointLinks--; joint._b2._numJointLinks--; var _this = joint._b1; _this._sleeping = false; _this._sleepTime = 0; var _this1 = joint._b2; _this1._sleeping = false; _this1._sleepTime = 0; this._numJoints--; } setDebugDraw(debugDraw) { this._debugDraw = debugDraw; } getDebugDraw() { return this._debugDraw; } debugDraw() { if(this._debugDraw != null) { if(this._broadPhase._type == 2) { var bvhBroadPhase = this._broadPhase; this._drawBvh(this._debugDraw,bvhBroadPhase._tree); } this._drawRigidBodies(this._debugDraw); this._drawConstraints(this._debugDraw); } } rayCast(begin,end,callback) { var _this = this._rayCastWrapper.begin; _this.x = begin.x; _this.y = begin.y; _this.z = begin.z; var _this1 = this._rayCastWrapper.end; _this1.x = end.x; _this1.y = end.y; _this1.z = end.z; this._rayCastWrapper.callback = callback; this._broadPhase.rayCast(begin,end,this._rayCastWrapper); } convexCast(convex,begin,translation,callback) { this._convexCastWrapper.convex = convex; var _this = this._convexCastWrapper.begin; _this._positionX = begin._positionX; _this._positionY = begin._positionY; _this._positionZ = begin._positionZ; _this._rotation00 = begin._rotation00; _this._rotation01 = begin._rotation01; _this._rotation02 = begin._rotation02; _this._rotation10 = begin._rotation10; _this._rotation11 = begin._rotation11; _this._rotation12 = begin._rotation12; _this._rotation20 = begin._rotation20; _this._rotation21 = begin._rotation21; _this._rotation22 = begin._rotation22; var _this1 = this._convexCastWrapper.translation; _this1.x = translation.x; _this1.y = translation.y; _this1.z = translation.z; this._convexCastWrapper.callback = callback; this._broadPhase.convexCast(convex,begin,translation,this._convexCastWrapper); } aabbTest(aabb,callback) { this._aabbTestWrapper._aabb.copyFrom(aabb); this._aabbTestWrapper._callback = callback; this._broadPhase.aabbTest(aabb,this._aabbTestWrapper); } getRigidBodyList() { return this._rigidBodyList; } getJointList() { return this._jointList; } getBroadPhase() { return this._broadPhase; } getContactManager() { return this._contactManager; } getNumRigidBodies() { return this._numRigidBodies; } getNumJoints() { return this._numJoints; } getNumShapes() { return this._numShapes; } getNumIslands() { return this._numIslands; } getNumVelocityIterations() { return this._numVelocityIterations; } setNumVelocityIterations(numVelocityIterations) { this._numVelocityIterations = numVelocityIterations; } getNumPositionIterations() { return this._numPositionIterations; } setNumPositionIterations(numPositionIterations) { this._numPositionIterations = numPositionIterations; } getGravity() { return this._gravity; } setGravity(gravity) { var _this = this._gravity; _this.x = gravity.x; _this.y = gravity.y; _this.z = gravity.z; } } if(!oimo.dynamics._World) oimo.dynamics._World = {}; oimo.dynamics._World.RayCastWrapper = class oimo_dynamics__$World_RayCastWrapper extends oimo.collision.broadphase.BroadPhaseProxyCallback { constructor() { super(); this.rayCastHit = new oimo.collision.geometry.RayCastHit(); this.begin = new oimo.common.Vec3(); this.end = new oimo.common.Vec3(); this.callback = null; } process(proxy) { var shape = proxy.userData; if(shape._geom.rayCast(this.begin,this.end,shape._transform,this.rayCastHit)) { this.callback.process(shape,this.rayCastHit); } } } oimo.dynamics._World.ConvexCastWrapper = class oimo_dynamics__$World_ConvexCastWrapper extends oimo.collision.broadphase.BroadPhaseProxyCallback { constructor() { super(); this.rayCastHit = new oimo.collision.geometry.RayCastHit(); this.begin = new oimo.common.Transform(); this.translation = new oimo.common.Vec3(); this.zero = new oimo.common.Vec3(); this.callback = null; this.convex = null; } process(proxy) { var shape = proxy.userData; var type = shape._geom._type; if(type < 0 || type > 5) { return; } var geom = shape._geom; if(oimo.collision.narrowphase.detector.gjkepa.GjkEpa.instance.convexCast(this.convex,geom,this.begin,shape._transform,this.translation,this.zero,this.rayCastHit)) { this.callback.process(shape,this.rayCastHit); } } } oimo.dynamics._World.AabbTestWrapper = class oimo_dynamics__$World_AabbTestWrapper extends oimo.collision.broadphase.BroadPhaseProxyCallback { constructor() { super(); this._aabb = new oimo.collision.geometry.Aabb(); this._callback = null; } process(proxy) { var shape = proxy.userData; var shapeAabb = shape._aabb; if(shapeAabb._minX < this._aabb._maxX && shapeAabb._maxX > this._aabb._minX && shapeAabb._minY < this._aabb._maxY && shapeAabb._maxY > this._aabb._minY && shapeAabb._minZ < this._aabb._maxZ && shapeAabb._maxZ > this._aabb._minZ) { this._callback.process(shape); } } } if(!oimo.dynamics.callback) oimo.dynamics.callback = {}; oimo.dynamics.callback.AabbTestCallback = class oimo_dynamics_callback_AabbTestCallback { constructor() { } process(shape) { } } oimo.dynamics.callback.ContactCallback = class oimo_dynamics_callback_ContactCallback { constructor() { } beginContact(c) { } preSolve(c) { } postSolve(c) { } endContact(c) { } } oimo.dynamics.callback.RayCastCallback = class oimo_dynamics_callback_RayCastCallback { constructor() { } process(shape,hit) { } } oimo.dynamics.callback.RayCastClosest = class oimo_dynamics_callback_RayCastClosest extends oimo.dynamics.callback.RayCastCallback { constructor() { super(); this.position = new oimo.common.Vec3(); this.normal = new oimo.common.Vec3(); this.shape = null; this.fraction = 1; this.position.zero(); this.normal.zero(); this.hit = false; } clear() { this.shape = null; this.fraction = 1; this.position.zero(); this.normal.zero(); this.hit = false; } process(shape,hit) { if(hit.fraction < this.fraction) { this.shape = shape; this.hit = true; this.fraction = hit.fraction; var _this = this.position; var v = hit.position; _this.x = v.x; _this.y = v.y; _this.z = v.z; var _this1 = this.normal; var v1 = hit.normal; _this1.x = v1.x; _this1.y = v1.y; _this1.z = v1.z; } } } if(!oimo.dynamics.common) oimo.dynamics.common = {}; oimo.dynamics.common.DebugDraw = class oimo_dynamics_common_DebugDraw { constructor() { this.p = new oimo.common.Pool(); this.wireframe = false; this.drawShapes = true; this.drawBvh = false; this.drawBvhMinLevel = 0; this.drawBvhMaxLevel = 65536; this.drawAabbs = false; this.drawBases = false; this.drawPairs = false; this.drawContacts = false; this.drawJoints = true; this.drawJointLimits = false; var nt = 4; var dt = 3.14159265358979 / nt; var np = 8; var dp = 6.28318530717958 / np; var this1 = new Array(nt + 1); this.sphereCoords = this1; var this2 = new Array(nt + 1); this.tmpSphereVerts = this2; var this3 = new Array(nt + 1); this.tmpSphereNorms = this3; var _g = 0; var _g1 = nt + 1; while(_g < _g1) { var i = _g++; var num = i == 0 || i == nt ? 1 : np; var this4 = this.sphereCoords; var this5 = new Array(num); this4[i] = this5; var this6 = this.tmpSphereVerts; var this7 = new Array(num); this6[i] = this7; var this8 = this.tmpSphereNorms; var this9 = new Array(num); this8[i] = this9; var _g2 = 0; var _g11 = np; while(_g2 < _g11) { var j = _g2++; var theta = i * dt; var phi = j * dp; this.sphereCoords[i][j] = new oimo.common.Vec3(Math.sin(theta) * Math.cos(phi),Math.cos(theta),-Math.sin(theta) * Math.sin(phi)); this.tmpSphereVerts[i][j] = new oimo.common.Vec3(); this.tmpSphereNorms[i][j] = new oimo.common.Vec3(); } } var this10 = new Array(8); this.circleCoords = this10; var this11 = new Array(8); this.circleCoordsShift = this11; var this12 = new Array(8); this.tmpCircleVerts1 = this12; var this13 = new Array(8); this.tmpCircleVerts2 = this13; var this14 = new Array(8); this.tmpCircleNorms = this14; var td = 0.785398163397447502; var _g3 = 0; while(_g3 < 8) { var i1 = _g3++; this.circleCoords[i1] = new oimo.common.Vec3(Math.cos(i1 * td),0,-Math.sin(i1 * td)); this.circleCoordsShift[i1] = new oimo.common.Vec3(Math.cos((i1 + 0.5) * td),0,-Math.sin((i1 + 0.5) * td)); this.tmpCircleVerts1[i1] = new oimo.common.Vec3(); this.tmpCircleVerts2[i1] = new oimo.common.Vec3(); this.tmpCircleNorms[i1] = new oimo.common.Vec3(); } this.style = new oimo.dynamics.common.DebugDrawStyle(); } aabb(min,max,color) { var _this = this.p; var v1 = (_this.sizeVec3 == 0 ? new oimo.common.Vec3() : _this.stackVec3[--_this.sizeVec3]).init(min.x,min.y,min.z); var _this1 = this.p; var v2 = (_this1.sizeVec3 == 0 ? new oimo.common.Vec3() : _this1.stackVec3[--_this1.sizeVec3]).init(min.x,min.y,max.z); var _this2 = this.p; var v3 = (_this2.sizeVec3 == 0 ? new oimo.common.Vec3() : _this2.stackVec3[--_this2.sizeVec3]).init(min.x,max.y,min.z); var _this3 = this.p; var v4 = (_this3.sizeVec3 == 0 ? new oimo.common.Vec3() : _this3.stackVec3[--_this3.sizeVec3]).init(min.x,max.y,max.z); var _this4 = this.p; var v5 = (_this4.sizeVec3 == 0 ? new oimo.common.Vec3() : _this4.stackVec3[--_this4.sizeVec3]).init(max.x,min.y,min.z); var _this5 = this.p; var v6 = (_this5.sizeVec3 == 0 ? new oimo.common.Vec3() : _this5.stackVec3[--_this5.sizeVec3]).init(max.x,min.y,max.z); var _this6 = this.p; var v7 = (_this6.sizeVec3 == 0 ? new oimo.common.Vec3() : _this6.stackVec3[--_this6.sizeVec3]).init(max.x,max.y,min.z); var _this7 = this.p; var v8 = (_this7.sizeVec3 == 0 ? new oimo.common.Vec3() : _this7.stackVec3[--_this7.sizeVec3]).init(max.x,max.y,max.z); this.line(v1,v2,color); this.line(v3,v4,color); this.line(v5,v6,color); this.line(v7,v8,color); this.line(v1,v3,color); this.line(v2,v4,color); this.line(v5,v7,color); this.line(v6,v8,color); this.line(v1,v5,color); this.line(v2,v6,color); this.line(v3,v7,color); this.line(v4,v8,color); var _this8 = this.p; var mat3 = null; var mat4 = null; var quat = null; if(v1 != null) { v1.zero(); if(_this8.sizeVec3 == _this8.stackVec3.length) { var newLength = _this8.sizeVec3 << 1; var this1 = new Array(newLength); var newArray = this1; var _g = 0; var _g1 = _this8.sizeVec3; while(_g < _g1) { var i = _g++; newArray[i] = _this8.stackVec3[i]; _this8.stackVec3[i] = null; } _this8.stackVec3 = newArray; } _this8.stackVec3[_this8.sizeVec3++] = v1; } if(mat3 != null) { var t00 = 1; var t01 = 0; var t02 = 0; var t10 = 0; var t11 = 1; var t12 = 0; var t20 = 0; var t21 = 0; var t22 = 1; mat3.e00 = t00; mat3.e01 = t01; mat3.e02 = t02; mat3.e10 = t10; mat3.e11 = t11; mat3.e12 = t12; mat3.e20 = t20; mat3.e21 = t21; mat3.e22 = t22; if(_this8.sizeMat3 == _this8.stackMat3.length) { var newLength1 = _this8.sizeMat3 << 1; var this2 = new Array(newLength1); var newArray1 = this2; var _g2 = 0; var _g11 = _this8.sizeMat3; while(_g2 < _g11) { var i1 = _g2++; newArray1[i1] = _this8.stackMat3[i1]; _this8.stackMat3[i1] = null; } _this8.stackMat3 = newArray1; } _this8.stackMat3[_this8.sizeMat3++] = mat3; } if(mat4 != null) { var t001 = 1; var t011 = 0; var t021 = 0; var t03 = 0; var t101 = 0; var t111 = 1; var t121 = 0; var t13 = 0; var t201 = 0; var t211 = 0; var t221 = 1; var t23 = 0; var t30 = 0; var t31 = 0; var t32 = 0; var t33 = 1; mat4.e00 = t001; mat4.e01 = t011; mat4.e02 = t021; mat4.e03 = t03; mat4.e10 = t101; mat4.e11 = t111; mat4.e12 = t121; mat4.e13 = t13; mat4.e20 = t201; mat4.e21 = t211; mat4.e22 = t221; mat4.e23 = t23; mat4.e30 = t30; mat4.e31 = t31; mat4.e32 = t32; mat4.e33 = t33; if(_this8.sizeMat4 == _this8.stackMat4.length) { var newLength2 = _this8.sizeMat4 << 1; var this3 = new Array(newLength2); var newArray2 = this3; var _g3 = 0; var _g12 = _this8.sizeMat4; while(_g3 < _g12) { var i2 = _g3++; newArray2[i2] = _this8.stackMat4[i2]; _this8.stackMat4[i2] = null; } _this8.stackMat4 = newArray2; } _this8.stackMat4[_this8.sizeMat4++] = mat4; } if(quat != null) { var tx = 0; var ty = 0; var tz = 0; var tw = 1; quat.x = tx; quat.y = ty; quat.z = tz; quat.w = tw; if(_this8.sizeQuat == _this8.stackQuat.length) { var newLength3 = _this8.sizeQuat << 1; var this4 = new Array(newLength3); var newArray3 = this4; var _g4 = 0; var _g13 = _this8.sizeQuat; while(_g4 < _g13) { var i3 = _g4++; newArray3[i3] = _this8.stackQuat[i3]; _this8.stackQuat[i3] = null; } _this8.stackQuat = newArray3; } _this8.stackQuat[_this8.sizeQuat++] = quat; } var _this9 = this.p; var mat31 = null; var mat41 = null; var quat1 = null; if(v2 != null) { v2.zero(); if(_this9.sizeVec3 == _this9.stackVec3.length) { var newLength4 = _this9.sizeVec3 << 1; var this5 = new Array(newLength4); var newArray4 = this5; var _g5 = 0; var _g14 = _this9.sizeVec3; while(_g5 < _g14) { var i4 = _g5++; newArray4[i4] = _this9.stackVec3[i4]; _this9.stackVec3[i4] = null; } _this9.stackVec3 = newArray4; } _this9.stackVec3[_this9.sizeVec3++] = v2; } if(mat31 != null) { var t002 = 1; var t012 = 0; var t022 = 0; var t102 = 0; var t112 = 1; var t122 = 0; var t202 = 0; var t212 = 0; var t222 = 1; mat31.e00 = t002; mat31.e01 = t012; mat31.e02 = t022; mat31.e10 = t102; mat31.e11 = t112; mat31.e12 = t122; mat31.e20 = t202; mat31.e21 = t212; mat31.e22 = t222; if(_this9.sizeMat3 == _this9.stackMat3.length) { var newLength5 = _this9.sizeMat3 << 1; var this6 = new Array(newLength5); var newArray5 = this6; var _g6 = 0; var _g15 = _this9.sizeMat3; while(_g6 < _g15) { var i5 = _g6++; newArray5[i5] = _this9.stackMat3[i5]; _this9.stackMat3[i5] = null; } _this9.stackMat3 = newArray5; } _this9.stackMat3[_this9.sizeMat3++] = mat31; } if(mat41 != null) { var t003 = 1; var t013 = 0; var t023 = 0; var t031 = 0; var t103 = 0; var t113 = 1; var t123 = 0; var t131 = 0; var t203 = 0; var t213 = 0; var t223 = 1; var t231 = 0; var t301 = 0; var t311 = 0; var t321 = 0; var t331 = 1; mat41.e00 = t003; mat41.e01 = t013; mat41.e02 = t023; mat41.e03 = t031; mat41.e10 = t103; mat41.e11 = t113; mat41.e12 = t123; mat41.e13 = t131; mat41.e20 = t203; mat41.e21 = t213; mat41.e22 = t223; mat41.e23 = t231; mat41.e30 = t301; mat41.e31 = t311; mat41.e32 = t321; mat41.e33 = t331; if(_this9.sizeMat4 == _this9.stackMat4.length) { var newLength6 = _this9.sizeMat4 << 1; var this7 = new Array(newLength6); var newArray6 = this7; var _g7 = 0; var _g16 = _this9.sizeMat4; while(_g7 < _g16) { var i6 = _g7++; newArray6[i6] = _this9.stackMat4[i6]; _this9.stackMat4[i6] = null; } _this9.stackMat4 = newArray6; } _this9.stackMat4[_this9.sizeMat4++] = mat41; } if(quat1 != null) { var tx1 = 0; var ty1 = 0; var tz1 = 0; var tw1 = 1; quat1.x = tx1; quat1.y = ty1; quat1.z = tz1; quat1.w = tw1; if(_this9.sizeQuat == _this9.stackQuat.length) { var newLength7 = _this9.sizeQuat << 1; var this8 = new Array(newLength7); var newArray7 = this8; var _g8 = 0; var _g17 = _this9.sizeQuat; while(_g8 < _g17) { var i7 = _g8++; newArray7[i7] = _this9.stackQuat[i7]; _this9.stackQuat[i7] = null; } _this9.stackQuat = newArray7; } _this9.stackQuat[_this9.sizeQuat++] = quat1; } var _this10 = this.p; var mat32 = null; var mat42 = null; var quat2 = null; if(v3 != null) { v3.zero(); if(_this10.sizeVec3 == _this10.stackVec3.length) { var newLength8 = _this10.sizeVec3 << 1; var this9 = new Array(newLength8); var newArray8 = this9; var _g9 = 0; var _g18 = _this10.sizeVec3; while(_g9 < _g18) { var i8 = _g9++; newArray8[i8] = _this10.stackVec3[i8]; _this10.stackVec3[i8] = null; } _this10.stackVec3 = newArray8; } _this10.stackVec3[_this10.sizeVec3++] = v3; } if(mat32 != null) { var t004 = 1; var t014 = 0; var t024 = 0; var t104 = 0; var t114 = 1; var t124 = 0; var t204 = 0; var t214 = 0; var t224 = 1; mat32.e00 = t004; mat32.e01 = t014; mat32.e02 = t024; mat32.e10 = t104; mat32.e11 = t114; mat32.e12 = t124; mat32.e20 = t204; mat32.e21 = t214; mat32.e22 = t224; if(_this10.sizeMat3 == _this10.stackMat3.length) { var newLength9 = _this10.sizeMat3 << 1; var this10 = new Array(newLength9); var newArray9 = this10; var _g10 = 0; var _g19 = _this10.sizeMat3; while(_g10 < _g19) { var i9 = _g10++; newArray9[i9] = _this10.stackMat3[i9]; _this10.stackMat3[i9] = null; } _this10.stackMat3 = newArray9; } _this10.stackMat3[_this10.sizeMat3++] = mat32; } if(mat42 != null) { var t005 = 1; var t015 = 0; var t025 = 0; var t032 = 0; var t105 = 0; var t115 = 1; var t125 = 0; var t132 = 0; var t205 = 0; var t215 = 0; var t225 = 1; var t232 = 0; var t302 = 0; var t312 = 0; var t322 = 0; var t332 = 1; mat42.e00 = t005; mat42.e01 = t015; mat42.e02 = t025; mat42.e03 = t032; mat42.e10 = t105; mat42.e11 = t115; mat42.e12 = t125; mat42.e13 = t132; mat42.e20 = t205; mat42.e21 = t215; mat42.e22 = t225; mat42.e23 = t232; mat42.e30 = t302; mat42.e31 = t312; mat42.e32 = t322; mat42.e33 = t332; if(_this10.sizeMat4 == _this10.stackMat4.length) { var newLength10 = _this10.sizeMat4 << 1; var this11 = new Array(newLength10); var newArray10 = this11; var _g20 = 0; var _g110 = _this10.sizeMat4; while(_g20 < _g110) { var i10 = _g20++; newArray10[i10] = _this10.stackMat4[i10]; _this10.stackMat4[i10] = null; } _this10.stackMat4 = newArray10; } _this10.stackMat4[_this10.sizeMat4++] = mat42; } if(quat2 != null) { var tx2 = 0; var ty2 = 0; var tz2 = 0; var tw2 = 1; quat2.x = tx2; quat2.y = ty2; quat2.z = tz2; quat2.w = tw2; if(_this10.sizeQuat == _this10.stackQuat.length) { var newLength11 = _this10.sizeQuat << 1; var this12 = new Array(newLength11); var newArray11 = this12; var _g21 = 0; var _g111 = _this10.sizeQuat; while(_g21 < _g111) { var i11 = _g21++; newArray11[i11] = _this10.stackQuat[i11]; _this10.stackQuat[i11] = null; } _this10.stackQuat = newArray11; } _this10.stackQuat[_this10.sizeQuat++] = quat2; } var _this11 = this.p; var mat33 = null; var mat43 = null; var quat3 = null; if(v4 != null) { v4.zero(); if(_this11.sizeVec3 == _this11.stackVec3.length) { var newLength12 = _this11.sizeVec3 << 1; var this13 = new Array(newLength12); var newArray12 = this13; var _g22 = 0; var _g112 = _this11.sizeVec3; while(_g22 < _g112) { var i12 = _g22++; newArray12[i12] = _this11.stackVec3[i12]; _this11.stackVec3[i12] = null; } _this11.stackVec3 = newArray12; } _this11.stackVec3[_this11.sizeVec3++] = v4; } if(mat33 != null) { var t006 = 1; var t016 = 0; var t026 = 0; var t106 = 0; var t116 = 1; var t126 = 0; var t206 = 0; var t216 = 0; var t226 = 1; mat33.e00 = t006; mat33.e01 = t016; mat33.e02 = t026; mat33.e10 = t106; mat33.e11 = t116; mat33.e12 = t126; mat33.e20 = t206; mat33.e21 = t216; mat33.e22 = t226; if(_this11.sizeMat3 == _this11.stackMat3.length) { var newLength13 = _this11.sizeMat3 << 1; var this14 = new Array(newLength13); var newArray13 = this14; var _g23 = 0; var _g113 = _this11.sizeMat3; while(_g23 < _g113) { var i13 = _g23++; newArray13[i13] = _this11.stackMat3[i13]; _this11.stackMat3[i13] = null; } _this11.stackMat3 = newArray13; } _this11.stackMat3[_this11.sizeMat3++] = mat33; } if(mat43 != null) { var t007 = 1; var t017 = 0; var t027 = 0; var t033 = 0; var t107 = 0; var t117 = 1; var t127 = 0; var t133 = 0; var t207 = 0; var t217 = 0; var t227 = 1; var t233 = 0; var t303 = 0; var t313 = 0; var t323 = 0; var t333 = 1; mat43.e00 = t007; mat43.e01 = t017; mat43.e02 = t027; mat43.e03 = t033; mat43.e10 = t107; mat43.e11 = t117; mat43.e12 = t127; mat43.e13 = t133; mat43.e20 = t207; mat43.e21 = t217; mat43.e22 = t227; mat43.e23 = t233; mat43.e30 = t303; mat43.e31 = t313; mat43.e32 = t323; mat43.e33 = t333; if(_this11.sizeMat4 == _this11.stackMat4.length) { var newLength14 = _this11.sizeMat4 << 1; var this15 = new Array(newLength14); var newArray14 = this15; var _g24 = 0; var _g114 = _this11.sizeMat4; while(_g24 < _g114) { var i14 = _g24++; newArray14[i14] = _this11.stackMat4[i14]; _this11.stackMat4[i14] = null; } _this11.stackMat4 = newArray14; } _this11.stackMat4[_this11.sizeMat4++] = mat43; } if(quat3 != null) { var tx3 = 0; var ty3 = 0; var tz3 = 0; var tw3 = 1; quat3.x = tx3; quat3.y = ty3; quat3.z = tz3; quat3.w = tw3; if(_this11.sizeQuat == _this11.stackQuat.length) { var newLength15 = _this11.sizeQuat << 1; var this16 = new Array(newLength15); var newArray15 = this16; var _g25 = 0; var _g115 = _this11.sizeQuat; while(_g25 < _g115) { var i15 = _g25++; newArray15[i15] = _this11.stackQuat[i15]; _this11.stackQuat[i15] = null; } _this11.stackQuat = newArray15; } _this11.stackQuat[_this11.sizeQuat++] = quat3; } var _this12 = this.p; var mat34 = null; var mat44 = null; var quat4 = null; if(v5 != null) { v5.zero(); if(_this12.sizeVec3 == _this12.stackVec3.length) { var newLength16 = _this12.sizeVec3 << 1; var this17 = new Array(newLength16); var newArray16 = this17; var _g26 = 0; var _g116 = _this12.sizeVec3; while(_g26 < _g116) { var i16 = _g26++; newArray16[i16] = _this12.stackVec3[i16]; _this12.stackVec3[i16] = null; } _this12.stackVec3 = newArray16; } _this12.stackVec3[_this12.sizeVec3++] = v5; } if(mat34 != null) { var t008 = 1; var t018 = 0; var t028 = 0; var t108 = 0; var t118 = 1; var t128 = 0; var t208 = 0; var t218 = 0; var t228 = 1; mat34.e00 = t008; mat34.e01 = t018; mat34.e02 = t028; mat34.e10 = t108; mat34.e11 = t118; mat34.e12 = t128; mat34.e20 = t208; mat34.e21 = t218; mat34.e22 = t228; if(_this12.sizeMat3 == _this12.stackMat3.length) { var newLength17 = _this12.sizeMat3 << 1; var this18 = new Array(newLength17); var newArray17 = this18; var _g27 = 0; var _g117 = _this12.sizeMat3; while(_g27 < _g117) { var i17 = _g27++; newArray17[i17] = _this12.stackMat3[i17]; _this12.stackMat3[i17] = null; } _this12.stackMat3 = newArray17; } _this12.stackMat3[_this12.sizeMat3++] = mat34; } if(mat44 != null) { var t009 = 1; var t019 = 0; var t029 = 0; var t034 = 0; var t109 = 0; var t119 = 1; var t129 = 0; var t134 = 0; var t209 = 0; var t219 = 0; var t229 = 1; var t234 = 0; var t304 = 0; var t314 = 0; var t324 = 0; var t334 = 1; mat44.e00 = t009; mat44.e01 = t019; mat44.e02 = t029; mat44.e03 = t034; mat44.e10 = t109; mat44.e11 = t119; mat44.e12 = t129; mat44.e13 = t134; mat44.e20 = t209; mat44.e21 = t219; mat44.e22 = t229; mat44.e23 = t234; mat44.e30 = t304; mat44.e31 = t314; mat44.e32 = t324; mat44.e33 = t334; if(_this12.sizeMat4 == _this12.stackMat4.length) { var newLength18 = _this12.sizeMat4 << 1; var this19 = new Array(newLength18); var newArray18 = this19; var _g28 = 0; var _g118 = _this12.sizeMat4; while(_g28 < _g118) { var i18 = _g28++; newArray18[i18] = _this12.stackMat4[i18]; _this12.stackMat4[i18] = null; } _this12.stackMat4 = newArray18; } _this12.stackMat4[_this12.sizeMat4++] = mat44; } if(quat4 != null) { var tx4 = 0; var ty4 = 0; var tz4 = 0; var tw4 = 1; quat4.x = tx4; quat4.y = ty4; quat4.z = tz4; quat4.w = tw4; if(_this12.sizeQuat == _this12.stackQuat.length) { var newLength19 = _this12.sizeQuat << 1; var this20 = new Array(newLength19); var newArray19 = this20; var _g29 = 0; var _g119 = _this12.sizeQuat; while(_g29 < _g119) { var i19 = _g29++; newArray19[i19] = _this12.stackQuat[i19]; _this12.stackQuat[i19] = null; } _this12.stackQuat = newArray19; } _this12.stackQuat[_this12.sizeQuat++] = quat4; } var _this13 = this.p; var mat35 = null; var mat45 = null; var quat5 = null; if(v6 != null) { v6.zero(); if(_this13.sizeVec3 == _this13.stackVec3.length) { var newLength20 = _this13.sizeVec3 << 1; var this21 = new Array(newLength20); var newArray20 = this21; var _g30 = 0; var _g120 = _this13.sizeVec3; while(_g30 < _g120) { var i20 = _g30++; newArray20[i20] = _this13.stackVec3[i20]; _this13.stackVec3[i20] = null; } _this13.stackVec3 = newArray20; } _this13.stackVec3[_this13.sizeVec3++] = v6; } if(mat35 != null) { var t0010 = 1; var t0110 = 0; var t0210 = 0; var t1010 = 0; var t1110 = 1; var t1210 = 0; var t2010 = 0; var t2110 = 0; var t2210 = 1; mat35.e00 = t0010; mat35.e01 = t0110; mat35.e02 = t0210; mat35.e10 = t1010; mat35.e11 = t1110; mat35.e12 = t1210; mat35.e20 = t2010; mat35.e21 = t2110; mat35.e22 = t2210; if(_this13.sizeMat3 == _this13.stackMat3.length) { var newLength21 = _this13.sizeMat3 << 1; var this22 = new Array(newLength21); var newArray21 = this22; var _g31 = 0; var _g121 = _this13.sizeMat3; while(_g31 < _g121) { var i21 = _g31++; newArray21[i21] = _this13.stackMat3[i21]; _this13.stackMat3[i21] = null; } _this13.stackMat3 = newArray21; } _this13.stackMat3[_this13.sizeMat3++] = mat35; } if(mat45 != null) { var t0011 = 1; var t0111 = 0; var t0211 = 0; var t035 = 0; var t1011 = 0; var t1111 = 1; var t1211 = 0; var t135 = 0; var t2011 = 0; var t2111 = 0; var t2211 = 1; var t235 = 0; var t305 = 0; var t315 = 0; var t325 = 0; var t335 = 1; mat45.e00 = t0011; mat45.e01 = t0111; mat45.e02 = t0211; mat45.e03 = t035; mat45.e10 = t1011; mat45.e11 = t1111; mat45.e12 = t1211; mat45.e13 = t135; mat45.e20 = t2011; mat45.e21 = t2111; mat45.e22 = t2211; mat45.e23 = t235; mat45.e30 = t305; mat45.e31 = t315; mat45.e32 = t325; mat45.e33 = t335; if(_this13.sizeMat4 == _this13.stackMat4.length) { var newLength22 = _this13.sizeMat4 << 1; var this23 = new Array(newLength22); var newArray22 = this23; var _g32 = 0; var _g122 = _this13.sizeMat4; while(_g32 < _g122) { var i22 = _g32++; newArray22[i22] = _this13.stackMat4[i22]; _this13.stackMat4[i22] = null; } _this13.stackMat4 = newArray22; } _this13.stackMat4[_this13.sizeMat4++] = mat45; } if(quat5 != null) { var tx5 = 0; var ty5 = 0; var tz5 = 0; var tw5 = 1; quat5.x = tx5; quat5.y = ty5; quat5.z = tz5; quat5.w = tw5; if(_this13.sizeQuat == _this13.stackQuat.length) { var newLength23 = _this13.sizeQuat << 1; var this24 = new Array(newLength23); var newArray23 = this24; var _g33 = 0; var _g123 = _this13.sizeQuat; while(_g33 < _g123) { var i23 = _g33++; newArray23[i23] = _this13.stackQuat[i23]; _this13.stackQuat[i23] = null; } _this13.stackQuat = newArray23; } _this13.stackQuat[_this13.sizeQuat++] = quat5; } var _this14 = this.p; var mat36 = null; var mat46 = null; var quat6 = null; if(v7 != null) { v7.zero(); if(_this14.sizeVec3 == _this14.stackVec3.length) { var newLength24 = _this14.sizeVec3 << 1; var this25 = new Array(newLength24); var newArray24 = this25; var _g34 = 0; var _g124 = _this14.sizeVec3; while(_g34 < _g124) { var i24 = _g34++; newArray24[i24] = _this14.stackVec3[i24]; _this14.stackVec3[i24] = null; } _this14.stackVec3 = newArray24; } _this14.stackVec3[_this14.sizeVec3++] = v7; } if(mat36 != null) { var t0012 = 1; var t0112 = 0; var t0212 = 0; var t1012 = 0; var t1112 = 1; var t1212 = 0; var t2012 = 0; var t2112 = 0; var t2212 = 1; mat36.e00 = t0012; mat36.e01 = t0112; mat36.e02 = t0212; mat36.e10 = t1012; mat36.e11 = t1112; mat36.e12 = t1212; mat36.e20 = t2012; mat36.e21 = t2112; mat36.e22 = t2212; if(_this14.sizeMat3 == _this14.stackMat3.length) { var newLength25 = _this14.sizeMat3 << 1; var this26 = new Array(newLength25); var newArray25 = this26; var _g35 = 0; var _g125 = _this14.sizeMat3; while(_g35 < _g125) { var i25 = _g35++; newArray25[i25] = _this14.stackMat3[i25]; _this14.stackMat3[i25] = null; } _this14.stackMat3 = newArray25; } _this14.stackMat3[_this14.sizeMat3++] = mat36; } if(mat46 != null) { var t0013 = 1; var t0113 = 0; var t0213 = 0; var t036 = 0; var t1013 = 0; var t1113 = 1; var t1213 = 0; var t136 = 0; var t2013 = 0; var t2113 = 0; var t2213 = 1; var t236 = 0; var t306 = 0; var t316 = 0; var t326 = 0; var t336 = 1; mat46.e00 = t0013; mat46.e01 = t0113; mat46.e02 = t0213; mat46.e03 = t036; mat46.e10 = t1013; mat46.e11 = t1113; mat46.e12 = t1213; mat46.e13 = t136; mat46.e20 = t2013; mat46.e21 = t2113; mat46.e22 = t2213; mat46.e23 = t236; mat46.e30 = t306; mat46.e31 = t316; mat46.e32 = t326; mat46.e33 = t336; if(_this14.sizeMat4 == _this14.stackMat4.length) { var newLength26 = _this14.sizeMat4 << 1; var this27 = new Array(newLength26); var newArray26 = this27; var _g36 = 0; var _g126 = _this14.sizeMat4; while(_g36 < _g126) { var i26 = _g36++; newArray26[i26] = _this14.stackMat4[i26]; _this14.stackMat4[i26] = null; } _this14.stackMat4 = newArray26; } _this14.stackMat4[_this14.sizeMat4++] = mat46; } if(quat6 != null) { var tx6 = 0; var ty6 = 0; var tz6 = 0; var tw6 = 1; quat6.x = tx6; quat6.y = ty6; quat6.z = tz6; quat6.w = tw6; if(_this14.sizeQuat == _this14.stackQuat.length) { var newLength27 = _this14.sizeQuat << 1; var this28 = new Array(newLength27); var newArray27 = this28; var _g37 = 0; var _g127 = _this14.sizeQuat; while(_g37 < _g127) { var i27 = _g37++; newArray27[i27] = _this14.stackQuat[i27]; _this14.stackQuat[i27] = null; } _this14.stackQuat = newArray27; } _this14.stackQuat[_this14.sizeQuat++] = quat6; } var _this15 = this.p; var mat37 = null; var mat47 = null; var quat7 = null; if(v8 != null) { v8.zero(); if(_this15.sizeVec3 == _this15.stackVec3.length) { var newLength28 = _this15.sizeVec3 << 1; var this29 = new Array(newLength28); var newArray28 = this29; var _g38 = 0; var _g128 = _this15.sizeVec3; while(_g38 < _g128) { var i28 = _g38++; newArray28[i28] = _this15.stackVec3[i28]; _this15.stackVec3[i28] = null; } _this15.stackVec3 = newArray28; } _this15.stackVec3[_this15.sizeVec3++] = v8; } if(mat37 != null) { var t0014 = 1; var t0114 = 0; var t0214 = 0; var t1014 = 0; var t1114 = 1; var t1214 = 0; var t2014 = 0; var t2114 = 0; var t2214 = 1; mat37.e00 = t0014; mat37.e01 = t0114; mat37.e02 = t0214; mat37.e10 = t1014; mat37.e11 = t1114; mat37.e12 = t1214; mat37.e20 = t2014; mat37.e21 = t2114; mat37.e22 = t2214; if(_this15.sizeMat3 == _this15.stackMat3.length) { var newLength29 = _this15.sizeMat3 << 1; var this30 = new Array(newLength29); var newArray29 = this30; var _g39 = 0; var _g129 = _this15.sizeMat3; while(_g39 < _g129) { var i29 = _g39++; newArray29[i29] = _this15.stackMat3[i29]; _this15.stackMat3[i29] = null; } _this15.stackMat3 = newArray29; } _this15.stackMat3[_this15.sizeMat3++] = mat37; } if(mat47 != null) { var t0015 = 1; var t0115 = 0; var t0215 = 0; var t037 = 0; var t1015 = 0; var t1115 = 1; var t1215 = 0; var t137 = 0; var t2015 = 0; var t2115 = 0; var t2215 = 1; var t237 = 0; var t307 = 0; var t317 = 0; var t327 = 0; var t337 = 1; mat47.e00 = t0015; mat47.e01 = t0115; mat47.e02 = t0215; mat47.e03 = t037; mat47.e10 = t1015; mat47.e11 = t1115; mat47.e12 = t1215; mat47.e13 = t137; mat47.e20 = t2015; mat47.e21 = t2115; mat47.e22 = t2215; mat47.e23 = t237; mat47.e30 = t307; mat47.e31 = t317; mat47.e32 = t327; mat47.e33 = t337; if(_this15.sizeMat4 == _this15.stackMat4.length) { var newLength30 = _this15.sizeMat4 << 1; var this31 = new Array(newLength30); var newArray30 = this31; var _g40 = 0; var _g130 = _this15.sizeMat4; while(_g40 < _g130) { var i30 = _g40++; newArray30[i30] = _this15.stackMat4[i30]; _this15.stackMat4[i30] = null; } _this15.stackMat4 = newArray30; } _this15.stackMat4[_this15.sizeMat4++] = mat47; } if(quat7 != null) { var tx7 = 0; var ty7 = 0; var tz7 = 0; var tw7 = 1; quat7.x = tx7; quat7.y = ty7; quat7.z = tz7; quat7.w = tw7; if(_this15.sizeQuat == _this15.stackQuat.length) { var newLength31 = _this15.sizeQuat << 1; var this32 = new Array(newLength31); var newArray31 = this32; var _g41 = 0; var _g131 = _this15.sizeQuat; while(_g41 < _g131) { var i31 = _g41++; newArray31[i31] = _this15.stackQuat[i31]; _this15.stackQuat[i31] = null; } _this15.stackQuat = newArray31; } _this15.stackQuat[_this15.sizeQuat++] = quat7; } } basis(transform,length,colorX,colorY,colorZ) { var _this = this.p; var pos = _this.sizeVec3 == 0 ? new oimo.common.Vec3() : _this.stackVec3[--_this.sizeVec3]; var _this1 = this.p; var rot = _this1.sizeMat3 == 0 ? new oimo.common.Mat3() : _this1.stackMat3[--_this1.sizeMat3]; var _this2 = this.p; var ex = _this2.sizeVec3 == 0 ? new oimo.common.Vec3() : _this2.stackVec3[--_this2.sizeVec3]; var _this3 = this.p; var ey = _this3.sizeVec3 == 0 ? new oimo.common.Vec3() : _this3.stackVec3[--_this3.sizeVec3]; var _this4 = this.p; var ez = _this4.sizeVec3 == 0 ? new oimo.common.Vec3() : _this4.stackVec3[--_this4.sizeVec3]; var v = pos; v.x = transform._positionX; v.y = transform._positionY; v.z = transform._positionZ; var m = rot; m.e00 = transform._rotation00; m.e01 = transform._rotation01; m.e02 = transform._rotation02; m.e10 = transform._rotation10; m.e11 = transform._rotation11; m.e12 = transform._rotation12; m.e20 = transform._rotation20; m.e21 = transform._rotation21; m.e22 = transform._rotation22; ex.init(rot.e00,rot.e10,rot.e20); ey.init(rot.e01,rot.e11,rot.e21); ez.init(rot.e02,rot.e12,rot.e22); var tx = ex.x * length; var ty = ex.y * length; var tz = ex.z * length; ex.x = tx; ex.y = ty; ex.z = tz; var _this5 = ex; var tx1 = _this5.x + pos.x; var ty1 = _this5.y + pos.y; var tz1 = _this5.z + pos.z; _this5.x = tx1; _this5.y = ty1; _this5.z = tz1; var tx2 = ey.x * length; var ty2 = ey.y * length; var tz2 = ey.z * length; ey.x = tx2; ey.y = ty2; ey.z = tz2; var _this6 = ey; var tx3 = _this6.x + pos.x; var ty3 = _this6.y + pos.y; var tz3 = _this6.z + pos.z; _this6.x = tx3; _this6.y = ty3; _this6.z = tz3; var tx4 = ez.x * length; var ty4 = ez.y * length; var tz4 = ez.z * length; ez.x = tx4; ez.y = ty4; ez.z = tz4; var _this7 = ez; var tx5 = _this7.x + pos.x; var ty5 = _this7.y + pos.y; var tz5 = _this7.z + pos.z; _this7.x = tx5; _this7.y = ty5; _this7.z = tz5; this.line(pos,ex,colorX); this.line(pos,ey,colorY); this.line(pos,ez,colorZ); var _this8 = this.p; var mat3 = null; var mat4 = null; var quat = null; if(pos != null) { pos.zero(); if(_this8.sizeVec3 == _this8.stackVec3.length) { var newLength = _this8.sizeVec3 << 1; var this1 = new Array(newLength); var newArray = this1; var _g = 0; var _g1 = _this8.sizeVec3; while(_g < _g1) { var i = _g++; newArray[i] = _this8.stackVec3[i]; _this8.stackVec3[i] = null; } _this8.stackVec3 = newArray; } _this8.stackVec3[_this8.sizeVec3++] = pos; } if(mat3 != null) { var t00 = 1; var t01 = 0; var t02 = 0; var t10 = 0; var t11 = 1; var t12 = 0; var t20 = 0; var t21 = 0; var t22 = 1; mat3.e00 = t00; mat3.e01 = t01; mat3.e02 = t02; mat3.e10 = t10; mat3.e11 = t11; mat3.e12 = t12; mat3.e20 = t20; mat3.e21 = t21; mat3.e22 = t22; if(_this8.sizeMat3 == _this8.stackMat3.length) { var newLength1 = _this8.sizeMat3 << 1; var this2 = new Array(newLength1); var newArray1 = this2; var _g2 = 0; var _g11 = _this8.sizeMat3; while(_g2 < _g11) { var i1 = _g2++; newArray1[i1] = _this8.stackMat3[i1]; _this8.stackMat3[i1] = null; } _this8.stackMat3 = newArray1; } _this8.stackMat3[_this8.sizeMat3++] = mat3; } if(mat4 != null) { var t001 = 1; var t011 = 0; var t021 = 0; var t03 = 0; var t101 = 0; var t111 = 1; var t121 = 0; var t13 = 0; var t201 = 0; var t211 = 0; var t221 = 1; var t23 = 0; var t30 = 0; var t31 = 0; var t32 = 0; var t33 = 1; mat4.e00 = t001; mat4.e01 = t011; mat4.e02 = t021; mat4.e03 = t03; mat4.e10 = t101; mat4.e11 = t111; mat4.e12 = t121; mat4.e13 = t13; mat4.e20 = t201; mat4.e21 = t211; mat4.e22 = t221; mat4.e23 = t23; mat4.e30 = t30; mat4.e31 = t31; mat4.e32 = t32; mat4.e33 = t33; if(_this8.sizeMat4 == _this8.stackMat4.length) { var newLength2 = _this8.sizeMat4 << 1; var this3 = new Array(newLength2); var newArray2 = this3; var _g3 = 0; var _g12 = _this8.sizeMat4; while(_g3 < _g12) { var i2 = _g3++; newArray2[i2] = _this8.stackMat4[i2]; _this8.stackMat4[i2] = null; } _this8.stackMat4 = newArray2; } _this8.stackMat4[_this8.sizeMat4++] = mat4; } if(quat != null) { var tx6 = 0; var ty6 = 0; var tz6 = 0; var tw = 1; quat.x = tx6; quat.y = ty6; quat.z = tz6; quat.w = tw; if(_this8.sizeQuat == _this8.stackQuat.length) { var newLength3 = _this8.sizeQuat << 1; var this4 = new Array(newLength3); var newArray3 = this4; var _g4 = 0; var _g13 = _this8.sizeQuat; while(_g4 < _g13) { var i3 = _g4++; newArray3[i3] = _this8.stackQuat[i3]; _this8.stackQuat[i3] = null; } _this8.stackQuat = newArray3; } _this8.stackQuat[_this8.sizeQuat++] = quat; } var _this9 = this.p; var vec3 = null; var mat41 = null; var quat1 = null; if(vec3 != null) { vec3.zero(); if(_this9.sizeVec3 == _this9.stackVec3.length) { var newLength4 = _this9.sizeVec3 << 1; var this5 = new Array(newLength4); var newArray4 = this5; var _g5 = 0; var _g14 = _this9.sizeVec3; while(_g5 < _g14) { var i4 = _g5++; newArray4[i4] = _this9.stackVec3[i4]; _this9.stackVec3[i4] = null; } _this9.stackVec3 = newArray4; } _this9.stackVec3[_this9.sizeVec3++] = vec3; } if(rot != null) { var t002 = 1; var t012 = 0; var t022 = 0; var t102 = 0; var t112 = 1; var t122 = 0; var t202 = 0; var t212 = 0; var t222 = 1; rot.e00 = t002; rot.e01 = t012; rot.e02 = t022; rot.e10 = t102; rot.e11 = t112; rot.e12 = t122; rot.e20 = t202; rot.e21 = t212; rot.e22 = t222; if(_this9.sizeMat3 == _this9.stackMat3.length) { var newLength5 = _this9.sizeMat3 << 1; var this6 = new Array(newLength5); var newArray5 = this6; var _g6 = 0; var _g15 = _this9.sizeMat3; while(_g6 < _g15) { var i5 = _g6++; newArray5[i5] = _this9.stackMat3[i5]; _this9.stackMat3[i5] = null; } _this9.stackMat3 = newArray5; } _this9.stackMat3[_this9.sizeMat3++] = rot; } if(mat41 != null) { var t003 = 1; var t013 = 0; var t023 = 0; var t031 = 0; var t103 = 0; var t113 = 1; var t123 = 0; var t131 = 0; var t203 = 0; var t213 = 0; var t223 = 1; var t231 = 0; var t301 = 0; var t311 = 0; var t321 = 0; var t331 = 1; mat41.e00 = t003; mat41.e01 = t013; mat41.e02 = t023; mat41.e03 = t031; mat41.e10 = t103; mat41.e11 = t113; mat41.e12 = t123; mat41.e13 = t131; mat41.e20 = t203; mat41.e21 = t213; mat41.e22 = t223; mat41.e23 = t231; mat41.e30 = t301; mat41.e31 = t311; mat41.e32 = t321; mat41.e33 = t331; if(_this9.sizeMat4 == _this9.stackMat4.length) { var newLength6 = _this9.sizeMat4 << 1; var this7 = new Array(newLength6); var newArray6 = this7; var _g7 = 0; var _g16 = _this9.sizeMat4; while(_g7 < _g16) { var i6 = _g7++; newArray6[i6] = _this9.stackMat4[i6]; _this9.stackMat4[i6] = null; } _this9.stackMat4 = newArray6; } _this9.stackMat4[_this9.sizeMat4++] = mat41; } if(quat1 != null) { var tx7 = 0; var ty7 = 0; var tz7 = 0; var tw1 = 1; quat1.x = tx7; quat1.y = ty7; quat1.z = tz7; quat1.w = tw1; if(_this9.sizeQuat == _this9.stackQuat.length) { var newLength7 = _this9.sizeQuat << 1; var this8 = new Array(newLength7); var newArray7 = this8; var _g8 = 0; var _g17 = _this9.sizeQuat; while(_g8 < _g17) { var i7 = _g8++; newArray7[i7] = _this9.stackQuat[i7]; _this9.stackQuat[i7] = null; } _this9.stackQuat = newArray7; } _this9.stackQuat[_this9.sizeQuat++] = quat1; } var _this10 = this.p; var mat31 = null; var mat42 = null; var quat2 = null; if(ex != null) { ex.zero(); if(_this10.sizeVec3 == _this10.stackVec3.length) { var newLength8 = _this10.sizeVec3 << 1; var this9 = new Array(newLength8); var newArray8 = this9; var _g9 = 0; var _g18 = _this10.sizeVec3; while(_g9 < _g18) { var i8 = _g9++; newArray8[i8] = _this10.stackVec3[i8]; _this10.stackVec3[i8] = null; } _this10.stackVec3 = newArray8; } _this10.stackVec3[_this10.sizeVec3++] = ex; } if(mat31 != null) { var t004 = 1; var t014 = 0; var t024 = 0; var t104 = 0; var t114 = 1; var t124 = 0; var t204 = 0; var t214 = 0; var t224 = 1; mat31.e00 = t004; mat31.e01 = t014; mat31.e02 = t024; mat31.e10 = t104; mat31.e11 = t114; mat31.e12 = t124; mat31.e20 = t204; mat31.e21 = t214; mat31.e22 = t224; if(_this10.sizeMat3 == _this10.stackMat3.length) { var newLength9 = _this10.sizeMat3 << 1; var this10 = new Array(newLength9); var newArray9 = this10; var _g10 = 0; var _g19 = _this10.sizeMat3; while(_g10 < _g19) { var i9 = _g10++; newArray9[i9] = _this10.stackMat3[i9]; _this10.stackMat3[i9] = null; } _this10.stackMat3 = newArray9; } _this10.stackMat3[_this10.sizeMat3++] = mat31; } if(mat42 != null) { var t005 = 1; var t015 = 0; var t025 = 0; var t032 = 0; var t105 = 0; var t115 = 1; var t125 = 0; var t132 = 0; var t205 = 0; var t215 = 0; var t225 = 1; var t232 = 0; var t302 = 0; var t312 = 0; var t322 = 0; var t332 = 1; mat42.e00 = t005; mat42.e01 = t015; mat42.e02 = t025; mat42.e03 = t032; mat42.e10 = t105; mat42.e11 = t115; mat42.e12 = t125; mat42.e13 = t132; mat42.e20 = t205; mat42.e21 = t215; mat42.e22 = t225; mat42.e23 = t232; mat42.e30 = t302; mat42.e31 = t312; mat42.e32 = t322; mat42.e33 = t332; if(_this10.sizeMat4 == _this10.stackMat4.length) { var newLength10 = _this10.sizeMat4 << 1; var this11 = new Array(newLength10); var newArray10 = this11; var _g20 = 0; var _g110 = _this10.sizeMat4; while(_g20 < _g110) { var i10 = _g20++; newArray10[i10] = _this10.stackMat4[i10]; _this10.stackMat4[i10] = null; } _this10.stackMat4 = newArray10; } _this10.stackMat4[_this10.sizeMat4++] = mat42; } if(quat2 != null) { var tx8 = 0; var ty8 = 0; var tz8 = 0; var tw2 = 1; quat2.x = tx8; quat2.y = ty8; quat2.z = tz8; quat2.w = tw2; if(_this10.sizeQuat == _this10.stackQuat.length) { var newLength11 = _this10.sizeQuat << 1; var this12 = new Array(newLength11); var newArray11 = this12; var _g21 = 0; var _g111 = _this10.sizeQuat; while(_g21 < _g111) { var i11 = _g21++; newArray11[i11] = _this10.stackQuat[i11]; _this10.stackQuat[i11] = null; } _this10.stackQuat = newArray11; } _this10.stackQuat[_this10.sizeQuat++] = quat2; } var _this11 = this.p; var mat32 = null; var mat43 = null; var quat3 = null; if(ey != null) { ey.zero(); if(_this11.sizeVec3 == _this11.stackVec3.length) { var newLength12 = _this11.sizeVec3 << 1; var this13 = new Array(newLength12); var newArray12 = this13; var _g22 = 0; var _g112 = _this11.sizeVec3; while(_g22 < _g112) { var i12 = _g22++; newArray12[i12] = _this11.stackVec3[i12]; _this11.stackVec3[i12] = null; } _this11.stackVec3 = newArray12; } _this11.stackVec3[_this11.sizeVec3++] = ey; } if(mat32 != null) { var t006 = 1; var t016 = 0; var t026 = 0; var t106 = 0; var t116 = 1; var t126 = 0; var t206 = 0; var t216 = 0; var t226 = 1; mat32.e00 = t006; mat32.e01 = t016; mat32.e02 = t026; mat32.e10 = t106; mat32.e11 = t116; mat32.e12 = t126; mat32.e20 = t206; mat32.e21 = t216; mat32.e22 = t226; if(_this11.sizeMat3 == _this11.stackMat3.length) { var newLength13 = _this11.sizeMat3 << 1; var this14 = new Array(newLength13); var newArray13 = this14; var _g23 = 0; var _g113 = _this11.sizeMat3; while(_g23 < _g113) { var i13 = _g23++; newArray13[i13] = _this11.stackMat3[i13]; _this11.stackMat3[i13] = null; } _this11.stackMat3 = newArray13; } _this11.stackMat3[_this11.sizeMat3++] = mat32; } if(mat43 != null) { var t007 = 1; var t017 = 0; var t027 = 0; var t033 = 0; var t107 = 0; var t117 = 1; var t127 = 0; var t133 = 0; var t207 = 0; var t217 = 0; var t227 = 1; var t233 = 0; var t303 = 0; var t313 = 0; var t323 = 0; var t333 = 1; mat43.e00 = t007; mat43.e01 = t017; mat43.e02 = t027; mat43.e03 = t033; mat43.e10 = t107; mat43.e11 = t117; mat43.e12 = t127; mat43.e13 = t133; mat43.e20 = t207; mat43.e21 = t217; mat43.e22 = t227; mat43.e23 = t233; mat43.e30 = t303; mat43.e31 = t313; mat43.e32 = t323; mat43.e33 = t333; if(_this11.sizeMat4 == _this11.stackMat4.length) { var newLength14 = _this11.sizeMat4 << 1; var this15 = new Array(newLength14); var newArray14 = this15; var _g24 = 0; var _g114 = _this11.sizeMat4; while(_g24 < _g114) { var i14 = _g24++; newArray14[i14] = _this11.stackMat4[i14]; _this11.stackMat4[i14] = null; } _this11.stackMat4 = newArray14; } _this11.stackMat4[_this11.sizeMat4++] = mat43; } if(quat3 != null) { var tx9 = 0; var ty9 = 0; var tz9 = 0; var tw3 = 1; quat3.x = tx9; quat3.y = ty9; quat3.z = tz9; quat3.w = tw3; if(_this11.sizeQuat == _this11.stackQuat.length) { var newLength15 = _this11.sizeQuat << 1; var this16 = new Array(newLength15); var newArray15 = this16; var _g25 = 0; var _g115 = _this11.sizeQuat; while(_g25 < _g115) { var i15 = _g25++; newArray15[i15] = _this11.stackQuat[i15]; _this11.stackQuat[i15] = null; } _this11.stackQuat = newArray15; } _this11.stackQuat[_this11.sizeQuat++] = quat3; } var _this12 = this.p; var mat33 = null; var mat44 = null; var quat4 = null; if(ez != null) { ez.zero(); if(_this12.sizeVec3 == _this12.stackVec3.length) { var newLength16 = _this12.sizeVec3 << 1; var this17 = new Array(newLength16); var newArray16 = this17; var _g26 = 0; var _g116 = _this12.sizeVec3; while(_g26 < _g116) { var i16 = _g26++; newArray16[i16] = _this12.stackVec3[i16]; _this12.stackVec3[i16] = null; } _this12.stackVec3 = newArray16; } _this12.stackVec3[_this12.sizeVec3++] = ez; } if(mat33 != null) { var t008 = 1; var t018 = 0; var t028 = 0; var t108 = 0; var t118 = 1; var t128 = 0; var t208 = 0; var t218 = 0; var t228 = 1; mat33.e00 = t008; mat33.e01 = t018; mat33.e02 = t028; mat33.e10 = t108; mat33.e11 = t118; mat33.e12 = t128; mat33.e20 = t208; mat33.e21 = t218; mat33.e22 = t228; if(_this12.sizeMat3 == _this12.stackMat3.length) { var newLength17 = _this12.sizeMat3 << 1; var this18 = new Array(newLength17); var newArray17 = this18; var _g27 = 0; var _g117 = _this12.sizeMat3; while(_g27 < _g117) { var i17 = _g27++; newArray17[i17] = _this12.stackMat3[i17]; _this12.stackMat3[i17] = null; } _this12.stackMat3 = newArray17; } _this12.stackMat3[_this12.sizeMat3++] = mat33; } if(mat44 != null) { var t009 = 1; var t019 = 0; var t029 = 0; var t034 = 0; var t109 = 0; var t119 = 1; var t129 = 0; var t134 = 0; var t209 = 0; var t219 = 0; var t229 = 1; var t234 = 0; var t304 = 0; var t314 = 0; var t324 = 0; var t334 = 1; mat44.e00 = t009; mat44.e01 = t019; mat44.e02 = t029; mat44.e03 = t034; mat44.e10 = t109; mat44.e11 = t119; mat44.e12 = t129; mat44.e13 = t134; mat44.e20 = t209; mat44.e21 = t219; mat44.e22 = t229; mat44.e23 = t234; mat44.e30 = t304; mat44.e31 = t314; mat44.e32 = t324; mat44.e33 = t334; if(_this12.sizeMat4 == _this12.stackMat4.length) { var newLength18 = _this12.sizeMat4 << 1; var this19 = new Array(newLength18); var newArray18 = this19; var _g28 = 0; var _g118 = _this12.sizeMat4; while(_g28 < _g118) { var i18 = _g28++; newArray18[i18] = _this12.stackMat4[i18]; _this12.stackMat4[i18] = null; } _this12.stackMat4 = newArray18; } _this12.stackMat4[_this12.sizeMat4++] = mat44; } if(quat4 != null) { var tx10 = 0; var ty10 = 0; var tz10 = 0; var tw4 = 1; quat4.x = tx10; quat4.y = ty10; quat4.z = tz10; quat4.w = tw4; if(_this12.sizeQuat == _this12.stackQuat.length) { var newLength19 = _this12.sizeQuat << 1; var this20 = new Array(newLength19); var newArray19 = this20; var _g29 = 0; var _g119 = _this12.sizeQuat; while(_g29 < _g119) { var i19 = _g29++; newArray19[i19] = _this12.stackQuat[i19]; _this12.stackQuat[i19] = null; } _this12.stackQuat = newArray19; } _this12.stackQuat[_this12.sizeQuat++] = quat4; } } ellipse(center,ex,ey,radiusX,radiusY,color) { this.arc(center,ex,ey,radiusX,radiusY,0,6.28318530717958,false,color); } arc(center,ex,ey,radiusX,radiusY,startAngle,endAngle,drawSector,color) { var _this = this.p; var _this1 = _this.sizeVec3 == 0 ? new oimo.common.Vec3() : _this.stackVec3[--_this.sizeVec3]; _this1.x = ex.x; _this1.y = ex.y; _this1.z = ex.z; var _this2 = _this1; var tx = _this2.x * radiusX; var ty = _this2.y * radiusX; var tz = _this2.z * radiusX; _this2.x = tx; _this2.y = ty; _this2.z = tz; ex = _this2; var _this3 = this.p; var _this4 = _this3.sizeVec3 == 0 ? new oimo.common.Vec3() : _this3.stackVec3[--_this3.sizeVec3]; _this4.x = ey.x; _this4.y = ey.y; _this4.z = ey.z; var _this5 = _this4; var tx1 = _this5.x * radiusY; var ty1 = _this5.y * radiusY; var tz1 = _this5.z * radiusY; _this5.x = tx1; _this5.y = ty1; _this5.z = tz1; ey = _this5; var step = 0.523598775598298372; var angDiff = endAngle - startAngle; if(angDiff < 0) { angDiff = -angDiff; } var n = angDiff / step + 0.5 | 0; if(n == 0) { n = 1; } var theta = startAngle; var dt = (endAngle - startAngle) / n; var _this6 = this.p; var _this7 = _this6.sizeVec3 == 0 ? new oimo.common.Vec3() : _this6.stackVec3[--_this6.sizeVec3]; _this7.x = center.x; _this7.y = center.y; _this7.z = center.z; var _this8 = _this7; var s = Math.cos(theta); var tx2 = _this8.x + ex.x * s; var ty2 = _this8.y + ex.y * s; var tz2 = _this8.z + ex.z * s; _this8.x = tx2; _this8.y = ty2; _this8.z = tz2; var _this9 = _this8; var s1 = Math.sin(theta); var tx3 = _this9.x + ey.x * s1; var ty3 = _this9.y + ey.y * s1; var tz3 = _this9.z + ey.z * s1; _this9.x = tx3; _this9.y = ty3; _this9.z = tz3; var v = _this9; var prevV = v; if(drawSector) { this.line(center,prevV,color); } var _g = 0; var _g1 = n; while(_g < _g1) { var i = _g++; theta += dt; var _this10 = this.p; var _this11 = _this10.sizeVec3 == 0 ? new oimo.common.Vec3() : _this10.stackVec3[--_this10.sizeVec3]; _this11.x = center.x; _this11.y = center.y; _this11.z = center.z; var _this12 = _this11; var s2 = Math.cos(theta); var tx4 = _this12.x + ex.x * s2; var ty4 = _this12.y + ex.y * s2; var tz4 = _this12.z + ex.z * s2; _this12.x = tx4; _this12.y = ty4; _this12.z = tz4; var _this13 = _this12; var s3 = Math.sin(theta); var tx5 = _this13.x + ey.x * s3; var ty5 = _this13.y + ey.y * s3; var tz5 = _this13.z + ey.z * s3; _this13.x = tx5; _this13.y = ty5; _this13.z = tz5; var v1 = _this13; var v2 = v1; this.line(prevV,v2,color); var _this14 = this.p; var mat3 = null; var mat4 = null; var quat = null; if(prevV != null) { prevV.zero(); if(_this14.sizeVec3 == _this14.stackVec3.length) { var newLength = _this14.sizeVec3 << 1; var this1 = new Array(newLength); var newArray = this1; var _g2 = 0; var _g11 = _this14.sizeVec3; while(_g2 < _g11) { var i1 = _g2++; newArray[i1] = _this14.stackVec3[i1]; _this14.stackVec3[i1] = null; } _this14.stackVec3 = newArray; } _this14.stackVec3[_this14.sizeVec3++] = prevV; } if(mat3 != null) { var t00 = 1; var t01 = 0; var t02 = 0; var t10 = 0; var t11 = 1; var t12 = 0; var t20 = 0; var t21 = 0; var t22 = 1; mat3.e00 = t00; mat3.e01 = t01; mat3.e02 = t02; mat3.e10 = t10; mat3.e11 = t11; mat3.e12 = t12; mat3.e20 = t20; mat3.e21 = t21; mat3.e22 = t22; if(_this14.sizeMat3 == _this14.stackMat3.length) { var newLength1 = _this14.sizeMat3 << 1; var this2 = new Array(newLength1); var newArray1 = this2; var _g3 = 0; var _g12 = _this14.sizeMat3; while(_g3 < _g12) { var i2 = _g3++; newArray1[i2] = _this14.stackMat3[i2]; _this14.stackMat3[i2] = null; } _this14.stackMat3 = newArray1; } _this14.stackMat3[_this14.sizeMat3++] = mat3; } if(mat4 != null) { var t001 = 1; var t011 = 0; var t021 = 0; var t03 = 0; var t101 = 0; var t111 = 1; var t121 = 0; var t13 = 0; var t201 = 0; var t211 = 0; var t221 = 1; var t23 = 0; var t30 = 0; var t31 = 0; var t32 = 0; var t33 = 1; mat4.e00 = t001; mat4.e01 = t011; mat4.e02 = t021; mat4.e03 = t03; mat4.e10 = t101; mat4.e11 = t111; mat4.e12 = t121; mat4.e13 = t13; mat4.e20 = t201; mat4.e21 = t211; mat4.e22 = t221; mat4.e23 = t23; mat4.e30 = t30; mat4.e31 = t31; mat4.e32 = t32; mat4.e33 = t33; if(_this14.sizeMat4 == _this14.stackMat4.length) { var newLength2 = _this14.sizeMat4 << 1; var this3 = new Array(newLength2); var newArray2 = this3; var _g4 = 0; var _g13 = _this14.sizeMat4; while(_g4 < _g13) { var i3 = _g4++; newArray2[i3] = _this14.stackMat4[i3]; _this14.stackMat4[i3] = null; } _this14.stackMat4 = newArray2; } _this14.stackMat4[_this14.sizeMat4++] = mat4; } if(quat != null) { var tx6 = 0; var ty6 = 0; var tz6 = 0; var tw = 1; quat.x = tx6; quat.y = ty6; quat.z = tz6; quat.w = tw; if(_this14.sizeQuat == _this14.stackQuat.length) { var newLength3 = _this14.sizeQuat << 1; var this4 = new Array(newLength3); var newArray3 = this4; var _g5 = 0; var _g14 = _this14.sizeQuat; while(_g5 < _g14) { var i4 = _g5++; newArray3[i4] = _this14.stackQuat[i4]; _this14.stackQuat[i4] = null; } _this14.stackQuat = newArray3; } _this14.stackQuat[_this14.sizeQuat++] = quat; } prevV = v2; } if(drawSector) { this.line(center,prevV,color); } var _this15 = this.p; var mat31 = null; var mat41 = null; var quat1 = null; if(prevV != null) { prevV.zero(); if(_this15.sizeVec3 == _this15.stackVec3.length) { var newLength4 = _this15.sizeVec3 << 1; var this5 = new Array(newLength4); var newArray4 = this5; var _g6 = 0; var _g15 = _this15.sizeVec3; while(_g6 < _g15) { var i5 = _g6++; newArray4[i5] = _this15.stackVec3[i5]; _this15.stackVec3[i5] = null; } _this15.stackVec3 = newArray4; } _this15.stackVec3[_this15.sizeVec3++] = prevV; } if(mat31 != null) { var t002 = 1; var t012 = 0; var t022 = 0; var t102 = 0; var t112 = 1; var t122 = 0; var t202 = 0; var t212 = 0; var t222 = 1; mat31.e00 = t002; mat31.e01 = t012; mat31.e02 = t022; mat31.e10 = t102; mat31.e11 = t112; mat31.e12 = t122; mat31.e20 = t202; mat31.e21 = t212; mat31.e22 = t222; if(_this15.sizeMat3 == _this15.stackMat3.length) { var newLength5 = _this15.sizeMat3 << 1; var this6 = new Array(newLength5); var newArray5 = this6; var _g7 = 0; var _g16 = _this15.sizeMat3; while(_g7 < _g16) { var i6 = _g7++; newArray5[i6] = _this15.stackMat3[i6]; _this15.stackMat3[i6] = null; } _this15.stackMat3 = newArray5; } _this15.stackMat3[_this15.sizeMat3++] = mat31; } if(mat41 != null) { var t003 = 1; var t013 = 0; var t023 = 0; var t031 = 0; var t103 = 0; var t113 = 1; var t123 = 0; var t131 = 0; var t203 = 0; var t213 = 0; var t223 = 1; var t231 = 0; var t301 = 0; var t311 = 0; var t321 = 0; var t331 = 1; mat41.e00 = t003; mat41.e01 = t013; mat41.e02 = t023; mat41.e03 = t031; mat41.e10 = t103; mat41.e11 = t113; mat41.e12 = t123; mat41.e13 = t131; mat41.e20 = t203; mat41.e21 = t213; mat41.e22 = t223; mat41.e23 = t231; mat41.e30 = t301; mat41.e31 = t311; mat41.e32 = t321; mat41.e33 = t331; if(_this15.sizeMat4 == _this15.stackMat4.length) { var newLength6 = _this15.sizeMat4 << 1; var this7 = new Array(newLength6); var newArray6 = this7; var _g8 = 0; var _g17 = _this15.sizeMat4; while(_g8 < _g17) { var i7 = _g8++; newArray6[i7] = _this15.stackMat4[i7]; _this15.stackMat4[i7] = null; } _this15.stackMat4 = newArray6; } _this15.stackMat4[_this15.sizeMat4++] = mat41; } if(quat1 != null) { var tx7 = 0; var ty7 = 0; var tz7 = 0; var tw1 = 1; quat1.x = tx7; quat1.y = ty7; quat1.z = tz7; quat1.w = tw1; if(_this15.sizeQuat == _this15.stackQuat.length) { var newLength7 = _this15.sizeQuat << 1; var this8 = new Array(newLength7); var newArray7 = this8; var _g9 = 0; var _g18 = _this15.sizeQuat; while(_g9 < _g18) { var i8 = _g9++; newArray7[i8] = _this15.stackQuat[i8]; _this15.stackQuat[i8] = null; } _this15.stackQuat = newArray7; } _this15.stackQuat[_this15.sizeQuat++] = quat1; } var _this16 = this.p; var mat32 = null; var mat42 = null; var quat2 = null; if(ex != null) { ex.zero(); if(_this16.sizeVec3 == _this16.stackVec3.length) { var newLength8 = _this16.sizeVec3 << 1; var this9 = new Array(newLength8); var newArray8 = this9; var _g10 = 0; var _g19 = _this16.sizeVec3; while(_g10 < _g19) { var i9 = _g10++; newArray8[i9] = _this16.stackVec3[i9]; _this16.stackVec3[i9] = null; } _this16.stackVec3 = newArray8; } _this16.stackVec3[_this16.sizeVec3++] = ex; } if(mat32 != null) { var t004 = 1; var t014 = 0; var t024 = 0; var t104 = 0; var t114 = 1; var t124 = 0; var t204 = 0; var t214 = 0; var t224 = 1; mat32.e00 = t004; mat32.e01 = t014; mat32.e02 = t024; mat32.e10 = t104; mat32.e11 = t114; mat32.e12 = t124; mat32.e20 = t204; mat32.e21 = t214; mat32.e22 = t224; if(_this16.sizeMat3 == _this16.stackMat3.length) { var newLength9 = _this16.sizeMat3 << 1; var this10 = new Array(newLength9); var newArray9 = this10; var _g20 = 0; var _g110 = _this16.sizeMat3; while(_g20 < _g110) { var i10 = _g20++; newArray9[i10] = _this16.stackMat3[i10]; _this16.stackMat3[i10] = null; } _this16.stackMat3 = newArray9; } _this16.stackMat3[_this16.sizeMat3++] = mat32; } if(mat42 != null) { var t005 = 1; var t015 = 0; var t025 = 0; var t032 = 0; var t105 = 0; var t115 = 1; var t125 = 0; var t132 = 0; var t205 = 0; var t215 = 0; var t225 = 1; var t232 = 0; var t302 = 0; var t312 = 0; var t322 = 0; var t332 = 1; mat42.e00 = t005; mat42.e01 = t015; mat42.e02 = t025; mat42.e03 = t032; mat42.e10 = t105; mat42.e11 = t115; mat42.e12 = t125; mat42.e13 = t132; mat42.e20 = t205; mat42.e21 = t215; mat42.e22 = t225; mat42.e23 = t232; mat42.e30 = t302; mat42.e31 = t312; mat42.e32 = t322; mat42.e33 = t332; if(_this16.sizeMat4 == _this16.stackMat4.length) { var newLength10 = _this16.sizeMat4 << 1; var this11 = new Array(newLength10); var newArray10 = this11; var _g21 = 0; var _g111 = _this16.sizeMat4; while(_g21 < _g111) { var i11 = _g21++; newArray10[i11] = _this16.stackMat4[i11]; _this16.stackMat4[i11] = null; } _this16.stackMat4 = newArray10; } _this16.stackMat4[_this16.sizeMat4++] = mat42; } if(quat2 != null) { var tx8 = 0; var ty8 = 0; var tz8 = 0; var tw2 = 1; quat2.x = tx8; quat2.y = ty8; quat2.z = tz8; quat2.w = tw2; if(_this16.sizeQuat == _this16.stackQuat.length) { var newLength11 = _this16.sizeQuat << 1; var this12 = new Array(newLength11); var newArray11 = this12; var _g22 = 0; var _g112 = _this16.sizeQuat; while(_g22 < _g112) { var i12 = _g22++; newArray11[i12] = _this16.stackQuat[i12]; _this16.stackQuat[i12] = null; } _this16.stackQuat = newArray11; } _this16.stackQuat[_this16.sizeQuat++] = quat2; } var _this17 = this.p; var mat33 = null; var mat43 = null; var quat3 = null; if(ey != null) { ey.zero(); if(_this17.sizeVec3 == _this17.stackVec3.length) { var newLength12 = _this17.sizeVec3 << 1; var this13 = new Array(newLength12); var newArray12 = this13; var _g23 = 0; var _g113 = _this17.sizeVec3; while(_g23 < _g113) { var i13 = _g23++; newArray12[i13] = _this17.stackVec3[i13]; _this17.stackVec3[i13] = null; } _this17.stackVec3 = newArray12; } _this17.stackVec3[_this17.sizeVec3++] = ey; } if(mat33 != null) { var t006 = 1; var t016 = 0; var t026 = 0; var t106 = 0; var t116 = 1; var t126 = 0; var t206 = 0; var t216 = 0; var t226 = 1; mat33.e00 = t006; mat33.e01 = t016; mat33.e02 = t026; mat33.e10 = t106; mat33.e11 = t116; mat33.e12 = t126; mat33.e20 = t206; mat33.e21 = t216; mat33.e22 = t226; if(_this17.sizeMat3 == _this17.stackMat3.length) { var newLength13 = _this17.sizeMat3 << 1; var this14 = new Array(newLength13); var newArray13 = this14; var _g24 = 0; var _g114 = _this17.sizeMat3; while(_g24 < _g114) { var i14 = _g24++; newArray13[i14] = _this17.stackMat3[i14]; _this17.stackMat3[i14] = null; } _this17.stackMat3 = newArray13; } _this17.stackMat3[_this17.sizeMat3++] = mat33; } if(mat43 != null) { var t007 = 1; var t017 = 0; var t027 = 0; var t033 = 0; var t107 = 0; var t117 = 1; var t127 = 0; var t133 = 0; var t207 = 0; var t217 = 0; var t227 = 1; var t233 = 0; var t303 = 0; var t313 = 0; var t323 = 0; var t333 = 1; mat43.e00 = t007; mat43.e01 = t017; mat43.e02 = t027; mat43.e03 = t033; mat43.e10 = t107; mat43.e11 = t117; mat43.e12 = t127; mat43.e13 = t133; mat43.e20 = t207; mat43.e21 = t217; mat43.e22 = t227; mat43.e23 = t233; mat43.e30 = t303; mat43.e31 = t313; mat43.e32 = t323; mat43.e33 = t333; if(_this17.sizeMat4 == _this17.stackMat4.length) { var newLength14 = _this17.sizeMat4 << 1; var this15 = new Array(newLength14); var newArray14 = this15; var _g25 = 0; var _g115 = _this17.sizeMat4; while(_g25 < _g115) { var i15 = _g25++; newArray14[i15] = _this17.stackMat4[i15]; _this17.stackMat4[i15] = null; } _this17.stackMat4 = newArray14; } _this17.stackMat4[_this17.sizeMat4++] = mat43; } if(quat3 != null) { var tx9 = 0; var ty9 = 0; var tz9 = 0; var tw3 = 1; quat3.x = tx9; quat3.y = ty9; quat3.z = tz9; quat3.w = tw3; if(_this17.sizeQuat == _this17.stackQuat.length) { var newLength15 = _this17.sizeQuat << 1; var this16 = new Array(newLength15); var newArray15 = this16; var _g26 = 0; var _g116 = _this17.sizeQuat; while(_g26 < _g116) { var i16 = _g26++; newArray15[i16] = _this17.stackQuat[i16]; _this17.stackQuat[i16] = null; } _this17.stackQuat = newArray15; } _this17.stackQuat[_this17.sizeQuat++] = quat3; } } cone(tf,radius,halfHeight,color) { var _this = this.p; var ex = _this.sizeVec3 == 0 ? new oimo.common.Vec3() : _this.stackVec3[--_this.sizeVec3]; var _this1 = this.p; var ey = _this1.sizeVec3 == 0 ? new oimo.common.Vec3() : _this1.stackVec3[--_this1.sizeVec3]; var _this2 = this.p; var ez = _this2.sizeVec3 == 0 ? new oimo.common.Vec3() : _this2.stackVec3[--_this2.sizeVec3]; var _this3 = this.p; var o = _this3.sizeVec3 == 0 ? new oimo.common.Vec3() : _this3.stackVec3[--_this3.sizeVec3]; var _this4 = this.p; var m = _this4.sizeMat3 == 0 ? new oimo.common.Mat3() : _this4.stackMat3[--_this4.sizeMat3]; var v = o; v.x = tf._positionX; v.y = tf._positionY; v.z = tf._positionZ; var m1 = m; m1.e00 = tf._rotation00; m1.e01 = tf._rotation01; m1.e02 = tf._rotation02; m1.e10 = tf._rotation10; m1.e11 = tf._rotation11; m1.e12 = tf._rotation12; m1.e20 = tf._rotation20; m1.e21 = tf._rotation21; m1.e22 = tf._rotation22; ex.init(m.e00,m.e10,m.e20); ey.init(m.e01,m.e11,m.e21); ez.init(m.e02,m.e12,m.e22); var _this5 = this.p; var _this6 = _this5.sizeVec3 == 0 ? new oimo.common.Vec3() : _this5.stackVec3[--_this5.sizeVec3]; _this6.x = o.x; _this6.y = o.y; _this6.z = o.z; var _this7 = _this6; var tx = _this7.x + ey.x * halfHeight; var ty = _this7.y + ey.y * halfHeight; var tz = _this7.z + ey.z * halfHeight; _this7.x = tx; _this7.y = ty; _this7.z = tz; var top = _this7; var _this8 = this.p; var _this9 = _this8.sizeVec3 == 0 ? new oimo.common.Vec3() : _this8.stackVec3[--_this8.sizeVec3]; _this9.x = o.x; _this9.y = o.y; _this9.z = o.z; var _this10 = _this9; var s = -halfHeight; var tx1 = _this10.x + ey.x * s; var ty1 = _this10.y + ey.y * s; var tz1 = _this10.z + ey.z * s; _this10.x = tx1; _this10.y = ty1; _this10.z = tz1; var bottom = _this10; if(this.wireframe) { var _this11 = this.p; var _this12 = _this11.sizeVec3 == 0 ? new oimo.common.Vec3() : _this11.stackVec3[--_this11.sizeVec3]; _this12.x = bottom.x; _this12.y = bottom.y; _this12.z = bottom.z; var _this13 = _this12; var s1 = -radius; var tx2 = _this13.x + ex.x * s1; var ty2 = _this13.y + ex.y * s1; var tz2 = _this13.z + ex.z * s1; _this13.x = tx2; _this13.y = ty2; _this13.z = tz2; var _this14 = _this13; var tx3 = _this14.x + ez.x * 0; var ty3 = _this14.y + ez.y * 0; var tz3 = _this14.z + ez.z * 0; _this14.x = tx3; _this14.y = ty3; _this14.z = tz3; var bottom1 = _this14; var _this15 = this.p; var _this16 = _this15.sizeVec3 == 0 ? new oimo.common.Vec3() : _this15.stackVec3[--_this15.sizeVec3]; _this16.x = bottom.x; _this16.y = bottom.y; _this16.z = bottom.z; var _this17 = _this16; var tx4 = _this17.x + ex.x * radius; var ty4 = _this17.y + ex.y * radius; var tz4 = _this17.z + ex.z * radius; _this17.x = tx4; _this17.y = ty4; _this17.z = tz4; var _this18 = _this17; var tx5 = _this18.x + ez.x * 0; var ty5 = _this18.y + ez.y * 0; var tz5 = _this18.z + ez.z * 0; _this18.x = tx5; _this18.y = ty5; _this18.z = tz5; var bottom2 = _this18; var _this19 = this.p; var _this20 = _this19.sizeVec3 == 0 ? new oimo.common.Vec3() : _this19.stackVec3[--_this19.sizeVec3]; _this20.x = bottom.x; _this20.y = bottom.y; _this20.z = bottom.z; var _this21 = _this20; var tx6 = _this21.x + ex.x * 0; var ty6 = _this21.y + ex.y * 0; var tz6 = _this21.z + ex.z * 0; _this21.x = tx6; _this21.y = ty6; _this21.z = tz6; var _this22 = _this21; var s2 = -radius; var tx7 = _this22.x + ez.x * s2; var ty7 = _this22.y + ez.y * s2; var tz7 = _this22.z + ez.z * s2; _this22.x = tx7; _this22.y = ty7; _this22.z = tz7; var bottom3 = _this22; var _this23 = this.p; var _this24 = _this23.sizeVec3 == 0 ? new oimo.common.Vec3() : _this23.stackVec3[--_this23.sizeVec3]; _this24.x = bottom.x; _this24.y = bottom.y; _this24.z = bottom.z; var _this25 = _this24; var tx8 = _this25.x + ex.x * 0; var ty8 = _this25.y + ex.y * 0; var tz8 = _this25.z + ex.z * 0; _this25.x = tx8; _this25.y = ty8; _this25.z = tz8; var _this26 = _this25; var tx9 = _this26.x + ez.x * radius; var ty9 = _this26.y + ez.y * radius; var tz9 = _this26.z + ez.z * radius; _this26.x = tx9; _this26.y = ty9; _this26.z = tz9; var bottom4 = _this26; this.ellipse(bottom,ex,ez,radius,radius,color); this.line(top,bottom1,color); this.line(top,bottom2,color); this.line(top,bottom3,color); this.line(top,bottom4,color); var _this27 = this.p; var mat3 = null; var mat4 = null; var quat = null; if(bottom1 != null) { bottom1.zero(); if(_this27.sizeVec3 == _this27.stackVec3.length) { var newLength = _this27.sizeVec3 << 1; var this1 = new Array(newLength); var newArray = this1; var _g = 0; var _g1 = _this27.sizeVec3; while(_g < _g1) { var i = _g++; newArray[i] = _this27.stackVec3[i]; _this27.stackVec3[i] = null; } _this27.stackVec3 = newArray; } _this27.stackVec3[_this27.sizeVec3++] = bottom1; } if(mat3 != null) { var t00 = 1; var t01 = 0; var t02 = 0; var t10 = 0; var t11 = 1; var t12 = 0; var t20 = 0; var t21 = 0; var t22 = 1; mat3.e00 = t00; mat3.e01 = t01; mat3.e02 = t02; mat3.e10 = t10; mat3.e11 = t11; mat3.e12 = t12; mat3.e20 = t20; mat3.e21 = t21; mat3.e22 = t22; if(_this27.sizeMat3 == _this27.stackMat3.length) { var newLength1 = _this27.sizeMat3 << 1; var this2 = new Array(newLength1); var newArray1 = this2; var _g2 = 0; var _g11 = _this27.sizeMat3; while(_g2 < _g11) { var i1 = _g2++; newArray1[i1] = _this27.stackMat3[i1]; _this27.stackMat3[i1] = null; } _this27.stackMat3 = newArray1; } _this27.stackMat3[_this27.sizeMat3++] = mat3; } if(mat4 != null) { var t001 = 1; var t011 = 0; var t021 = 0; var t03 = 0; var t101 = 0; var t111 = 1; var t121 = 0; var t13 = 0; var t201 = 0; var t211 = 0; var t221 = 1; var t23 = 0; var t30 = 0; var t31 = 0; var t32 = 0; var t33 = 1; mat4.e00 = t001; mat4.e01 = t011; mat4.e02 = t021; mat4.e03 = t03; mat4.e10 = t101; mat4.e11 = t111; mat4.e12 = t121; mat4.e13 = t13; mat4.e20 = t201; mat4.e21 = t211; mat4.e22 = t221; mat4.e23 = t23; mat4.e30 = t30; mat4.e31 = t31; mat4.e32 = t32; mat4.e33 = t33; if(_this27.sizeMat4 == _this27.stackMat4.length) { var newLength2 = _this27.sizeMat4 << 1; var this3 = new Array(newLength2); var newArray2 = this3; var _g3 = 0; var _g12 = _this27.sizeMat4; while(_g3 < _g12) { var i2 = _g3++; newArray2[i2] = _this27.stackMat4[i2]; _this27.stackMat4[i2] = null; } _this27.stackMat4 = newArray2; } _this27.stackMat4[_this27.sizeMat4++] = mat4; } if(quat != null) { var tx10 = 0; var ty10 = 0; var tz10 = 0; var tw = 1; quat.x = tx10; quat.y = ty10; quat.z = tz10; quat.w = tw; if(_this27.sizeQuat == _this27.stackQuat.length) { var newLength3 = _this27.sizeQuat << 1; var this4 = new Array(newLength3); var newArray3 = this4; var _g4 = 0; var _g13 = _this27.sizeQuat; while(_g4 < _g13) { var i3 = _g4++; newArray3[i3] = _this27.stackQuat[i3]; _this27.stackQuat[i3] = null; } _this27.stackQuat = newArray3; } _this27.stackQuat[_this27.sizeQuat++] = quat; } var _this28 = this.p; var mat31 = null; var mat41 = null; var quat1 = null; if(bottom2 != null) { bottom2.zero(); if(_this28.sizeVec3 == _this28.stackVec3.length) { var newLength4 = _this28.sizeVec3 << 1; var this5 = new Array(newLength4); var newArray4 = this5; var _g5 = 0; var _g14 = _this28.sizeVec3; while(_g5 < _g14) { var i4 = _g5++; newArray4[i4] = _this28.stackVec3[i4]; _this28.stackVec3[i4] = null; } _this28.stackVec3 = newArray4; } _this28.stackVec3[_this28.sizeVec3++] = bottom2; } if(mat31 != null) { var t002 = 1; var t012 = 0; var t022 = 0; var t102 = 0; var t112 = 1; var t122 = 0; var t202 = 0; var t212 = 0; var t222 = 1; mat31.e00 = t002; mat31.e01 = t012; mat31.e02 = t022; mat31.e10 = t102; mat31.e11 = t112; mat31.e12 = t122; mat31.e20 = t202; mat31.e21 = t212; mat31.e22 = t222; if(_this28.sizeMat3 == _this28.stackMat3.length) { var newLength5 = _this28.sizeMat3 << 1; var this6 = new Array(newLength5); var newArray5 = this6; var _g6 = 0; var _g15 = _this28.sizeMat3; while(_g6 < _g15) { var i5 = _g6++; newArray5[i5] = _this28.stackMat3[i5]; _this28.stackMat3[i5] = null; } _this28.stackMat3 = newArray5; } _this28.stackMat3[_this28.sizeMat3++] = mat31; } if(mat41 != null) { var t003 = 1; var t013 = 0; var t023 = 0; var t031 = 0; var t103 = 0; var t113 = 1; var t123 = 0; var t131 = 0; var t203 = 0; var t213 = 0; var t223 = 1; var t231 = 0; var t301 = 0; var t311 = 0; var t321 = 0; var t331 = 1; mat41.e00 = t003; mat41.e01 = t013; mat41.e02 = t023; mat41.e03 = t031; mat41.e10 = t103; mat41.e11 = t113; mat41.e12 = t123; mat41.e13 = t131; mat41.e20 = t203; mat41.e21 = t213; mat41.e22 = t223; mat41.e23 = t231; mat41.e30 = t301; mat41.e31 = t311; mat41.e32 = t321; mat41.e33 = t331; if(_this28.sizeMat4 == _this28.stackMat4.length) { var newLength6 = _this28.sizeMat4 << 1; var this7 = new Array(newLength6); var newArray6 = this7; var _g7 = 0; var _g16 = _this28.sizeMat4; while(_g7 < _g16) { var i6 = _g7++; newArray6[i6] = _this28.stackMat4[i6]; _this28.stackMat4[i6] = null; } _this28.stackMat4 = newArray6; } _this28.stackMat4[_this28.sizeMat4++] = mat41; } if(quat1 != null) { var tx11 = 0; var ty11 = 0; var tz11 = 0; var tw1 = 1; quat1.x = tx11; quat1.y = ty11; quat1.z = tz11; quat1.w = tw1; if(_this28.sizeQuat == _this28.stackQuat.length) { var newLength7 = _this28.sizeQuat << 1; var this8 = new Array(newLength7); var newArray7 = this8; var _g8 = 0; var _g17 = _this28.sizeQuat; while(_g8 < _g17) { var i7 = _g8++; newArray7[i7] = _this28.stackQuat[i7]; _this28.stackQuat[i7] = null; } _this28.stackQuat = newArray7; } _this28.stackQuat[_this28.sizeQuat++] = quat1; } var _this29 = this.p; var mat32 = null; var mat42 = null; var quat2 = null; if(bottom3 != null) { bottom3.zero(); if(_this29.sizeVec3 == _this29.stackVec3.length) { var newLength8 = _this29.sizeVec3 << 1; var this9 = new Array(newLength8); var newArray8 = this9; var _g9 = 0; var _g18 = _this29.sizeVec3; while(_g9 < _g18) { var i8 = _g9++; newArray8[i8] = _this29.stackVec3[i8]; _this29.stackVec3[i8] = null; } _this29.stackVec3 = newArray8; } _this29.stackVec3[_this29.sizeVec3++] = bottom3; } if(mat32 != null) { var t004 = 1; var t014 = 0; var t024 = 0; var t104 = 0; var t114 = 1; var t124 = 0; var t204 = 0; var t214 = 0; var t224 = 1; mat32.e00 = t004; mat32.e01 = t014; mat32.e02 = t024; mat32.e10 = t104; mat32.e11 = t114; mat32.e12 = t124; mat32.e20 = t204; mat32.e21 = t214; mat32.e22 = t224; if(_this29.sizeMat3 == _this29.stackMat3.length) { var newLength9 = _this29.sizeMat3 << 1; var this10 = new Array(newLength9); var newArray9 = this10; var _g10 = 0; var _g19 = _this29.sizeMat3; while(_g10 < _g19) { var i9 = _g10++; newArray9[i9] = _this29.stackMat3[i9]; _this29.stackMat3[i9] = null; } _this29.stackMat3 = newArray9; } _this29.stackMat3[_this29.sizeMat3++] = mat32; } if(mat42 != null) { var t005 = 1; var t015 = 0; var t025 = 0; var t032 = 0; var t105 = 0; var t115 = 1; var t125 = 0; var t132 = 0; var t205 = 0; var t215 = 0; var t225 = 1; var t232 = 0; var t302 = 0; var t312 = 0; var t322 = 0; var t332 = 1; mat42.e00 = t005; mat42.e01 = t015; mat42.e02 = t025; mat42.e03 = t032; mat42.e10 = t105; mat42.e11 = t115; mat42.e12 = t125; mat42.e13 = t132; mat42.e20 = t205; mat42.e21 = t215; mat42.e22 = t225; mat42.e23 = t232; mat42.e30 = t302; mat42.e31 = t312; mat42.e32 = t322; mat42.e33 = t332; if(_this29.sizeMat4 == _this29.stackMat4.length) { var newLength10 = _this29.sizeMat4 << 1; var this11 = new Array(newLength10); var newArray10 = this11; var _g20 = 0; var _g110 = _this29.sizeMat4; while(_g20 < _g110) { var i10 = _g20++; newArray10[i10] = _this29.stackMat4[i10]; _this29.stackMat4[i10] = null; } _this29.stackMat4 = newArray10; } _this29.stackMat4[_this29.sizeMat4++] = mat42; } if(quat2 != null) { var tx12 = 0; var ty12 = 0; var tz12 = 0; var tw2 = 1; quat2.x = tx12; quat2.y = ty12; quat2.z = tz12; quat2.w = tw2; if(_this29.sizeQuat == _this29.stackQuat.length) { var newLength11 = _this29.sizeQuat << 1; var this12 = new Array(newLength11); var newArray11 = this12; var _g21 = 0; var _g111 = _this29.sizeQuat; while(_g21 < _g111) { var i11 = _g21++; newArray11[i11] = _this29.stackQuat[i11]; _this29.stackQuat[i11] = null; } _this29.stackQuat = newArray11; } _this29.stackQuat[_this29.sizeQuat++] = quat2; } var _this30 = this.p; var mat33 = null; var mat43 = null; var quat3 = null; if(bottom4 != null) { bottom4.zero(); if(_this30.sizeVec3 == _this30.stackVec3.length) { var newLength12 = _this30.sizeVec3 << 1; var this13 = new Array(newLength12); var newArray12 = this13; var _g22 = 0; var _g112 = _this30.sizeVec3; while(_g22 < _g112) { var i12 = _g22++; newArray12[i12] = _this30.stackVec3[i12]; _this30.stackVec3[i12] = null; } _this30.stackVec3 = newArray12; } _this30.stackVec3[_this30.sizeVec3++] = bottom4; } if(mat33 != null) { var t006 = 1; var t016 = 0; var t026 = 0; var t106 = 0; var t116 = 1; var t126 = 0; var t206 = 0; var t216 = 0; var t226 = 1; mat33.e00 = t006; mat33.e01 = t016; mat33.e02 = t026; mat33.e10 = t106; mat33.e11 = t116; mat33.e12 = t126; mat33.e20 = t206; mat33.e21 = t216; mat33.e22 = t226; if(_this30.sizeMat3 == _this30.stackMat3.length) { var newLength13 = _this30.sizeMat3 << 1; var this14 = new Array(newLength13); var newArray13 = this14; var _g23 = 0; var _g113 = _this30.sizeMat3; while(_g23 < _g113) { var i13 = _g23++; newArray13[i13] = _this30.stackMat3[i13]; _this30.stackMat3[i13] = null; } _this30.stackMat3 = newArray13; } _this30.stackMat3[_this30.sizeMat3++] = mat33; } if(mat43 != null) { var t007 = 1; var t017 = 0; var t027 = 0; var t033 = 0; var t107 = 0; var t117 = 1; var t127 = 0; var t133 = 0; var t207 = 0; var t217 = 0; var t227 = 1; var t233 = 0; var t303 = 0; var t313 = 0; var t323 = 0; var t333 = 1; mat43.e00 = t007; mat43.e01 = t017; mat43.e02 = t027; mat43.e03 = t033; mat43.e10 = t107; mat43.e11 = t117; mat43.e12 = t127; mat43.e13 = t133; mat43.e20 = t207; mat43.e21 = t217; mat43.e22 = t227; mat43.e23 = t233; mat43.e30 = t303; mat43.e31 = t313; mat43.e32 = t323; mat43.e33 = t333; if(_this30.sizeMat4 == _this30.stackMat4.length) { var newLength14 = _this30.sizeMat4 << 1; var this15 = new Array(newLength14); var newArray14 = this15; var _g24 = 0; var _g114 = _this30.sizeMat4; while(_g24 < _g114) { var i14 = _g24++; newArray14[i14] = _this30.stackMat4[i14]; _this30.stackMat4[i14] = null; } _this30.stackMat4 = newArray14; } _this30.stackMat4[_this30.sizeMat4++] = mat43; } if(quat3 != null) { var tx13 = 0; var ty13 = 0; var tz13 = 0; var tw3 = 1; quat3.x = tx13; quat3.y = ty13; quat3.z = tz13; quat3.w = tw3; if(_this30.sizeQuat == _this30.stackQuat.length) { var newLength15 = _this30.sizeQuat << 1; var this16 = new Array(newLength15); var newArray15 = this16; var _g25 = 0; var _g115 = _this30.sizeQuat; while(_g25 < _g115) { var i15 = _g25++; newArray15[i15] = _this30.stackQuat[i15]; _this30.stackQuat[i15] = null; } _this30.stackQuat = newArray15; } _this30.stackQuat[_this30.sizeQuat++] = quat3; } } else { var invDenom = 1 / Math.sqrt(radius * radius + 4 * halfHeight * halfHeight); var cos = 2 * halfHeight * invDenom; var sin = radius * invDenom; var invDenom2 = 1 / Math.sqrt(2 * (1 + cos)); var _g26 = 0; while(_g26 < 8) { var i16 = _g26++; var _this31 = this.tmpCircleNorms[i16]; var v1 = this.circleCoords[i16]; _this31.x = v1.x; _this31.y = v1.y; _this31.z = v1.z; var _this32 = _this31; var tx14 = _this32.x * cos; var ty14 = _this32.y * cos; var tz14 = _this32.z * cos; _this32.x = tx14; _this32.y = ty14; _this32.z = tz14; _this32.y += sin; var _this33 = this.tmpCircleNorms[i16]; var tx15 = _this33.x * m.e00 + _this33.y * m.e01 + _this33.z * m.e02; var ty15 = _this33.x * m.e10 + _this33.y * m.e11 + _this33.z * m.e12; var tz15 = _this33.x * m.e20 + _this33.y * m.e21 + _this33.z * m.e22; _this33.x = tx15; _this33.y = ty15; _this33.z = tz15; var _this34 = this.tmpCircleVerts1[i16]; var v2 = this.circleCoordsShift[i16]; _this34.x = v2.x; _this34.y = v2.y; _this34.z = v2.z; var _this35 = _this34; var tx16 = _this35.x * cos; var ty16 = _this35.y * cos; var tz16 = _this35.z * cos; _this35.x = tx16; _this35.y = ty16; _this35.z = tz16; _this35.y += sin; var _this36 = this.tmpCircleVerts1[i16]; var tx17 = _this36.x * m.e00 + _this36.y * m.e01 + _this36.z * m.e02; var ty17 = _this36.x * m.e10 + _this36.y * m.e11 + _this36.z * m.e12; var tz17 = _this36.x * m.e20 + _this36.y * m.e21 + _this36.z * m.e22; _this36.x = tx17; _this36.y = ty17; _this36.z = tz17; var _this37 = this.tmpCircleVerts2[i16]; var v3 = this.circleCoords[i16]; _this37.x = v3.x; _this37.y = v3.y; _this37.z = v3.z; var _this38 = _this37; var tx18 = _this38.x * m.e00 + _this38.y * m.e01 + _this38.z * m.e02; var ty18 = _this38.x * m.e10 + _this38.y * m.e11 + _this38.z * m.e12; var tz18 = _this38.x * m.e20 + _this38.y * m.e21 + _this38.z * m.e22; _this38.x = tx18; _this38.y = ty18; _this38.z = tz18; var _this39 = _this38; var tx19 = _this39.x * radius; var ty19 = _this39.y * radius; var tz19 = _this39.z * radius; _this39.x = tx19; _this39.y = ty19; _this39.z = tz19; var _this40 = _this39; var tx20 = _this40.x + o.x; var ty20 = _this40.y + o.y; var tz20 = _this40.z + o.z; _this40.x = tx20; _this40.y = ty20; _this40.z = tz20; var _this41 = this.tmpCircleVerts2[i16]; var s3 = -halfHeight; var tx21 = _this41.x + ey.x * s3; var ty21 = _this41.y + ey.y * s3; var tz21 = _this41.z + ey.z * s3; _this41.x = tx21; _this41.y = ty21; _this41.z = tz21; } var _g116 = 0; while(_g116 < 8) { var i17 = _g116++; var v11 = top; var v21 = this.tmpCircleVerts2[i17]; var v31 = this.tmpCircleVerts2[(i17 + 1) % 8]; var n1 = this.tmpCircleVerts1[i17]; var n2 = this.tmpCircleNorms[i17]; var n3 = this.tmpCircleNorms[(i17 + 1) % 8]; this.triangle(v11,v21,v31,n1,n2,n3,color); v11 = bottom; v21 = this.tmpCircleVerts2[(i17 + 1) % 8]; v31 = this.tmpCircleVerts2[i17]; var _this42 = this.p; var _this43 = _this42.sizeVec3 == 0 ? new oimo.common.Vec3() : _this42.stackVec3[--_this42.sizeVec3]; _this43.x = ey.x; _this43.y = ey.y; _this43.z = ey.z; var _this44 = _this43; var tx22 = -_this44.x; var ty22 = -_this44.y; var tz22 = -_this44.z; _this44.x = tx22; _this44.y = ty22; _this44.z = tz22; n1 = _this44; this.triangle(v11,v21,v31,n1,n1,n1,color); var _this45 = this.p; var mat34 = null; var mat44 = null; var quat4 = null; if(n1 != null) { n1.zero(); if(_this45.sizeVec3 == _this45.stackVec3.length) { var newLength16 = _this45.sizeVec3 << 1; var this17 = new Array(newLength16); var newArray16 = this17; var _g27 = 0; var _g117 = _this45.sizeVec3; while(_g27 < _g117) { var i18 = _g27++; newArray16[i18] = _this45.stackVec3[i18]; _this45.stackVec3[i18] = null; } _this45.stackVec3 = newArray16; } _this45.stackVec3[_this45.sizeVec3++] = n1; } if(mat34 != null) { var t008 = 1; var t018 = 0; var t028 = 0; var t108 = 0; var t118 = 1; var t128 = 0; var t208 = 0; var t218 = 0; var t228 = 1; mat34.e00 = t008; mat34.e01 = t018; mat34.e02 = t028; mat34.e10 = t108; mat34.e11 = t118; mat34.e12 = t128; mat34.e20 = t208; mat34.e21 = t218; mat34.e22 = t228; if(_this45.sizeMat3 == _this45.stackMat3.length) { var newLength17 = _this45.sizeMat3 << 1; var this18 = new Array(newLength17); var newArray17 = this18; var _g28 = 0; var _g118 = _this45.sizeMat3; while(_g28 < _g118) { var i19 = _g28++; newArray17[i19] = _this45.stackMat3[i19]; _this45.stackMat3[i19] = null; } _this45.stackMat3 = newArray17; } _this45.stackMat3[_this45.sizeMat3++] = mat34; } if(mat44 != null) { var t009 = 1; var t019 = 0; var t029 = 0; var t034 = 0; var t109 = 0; var t119 = 1; var t129 = 0; var t134 = 0; var t209 = 0; var t219 = 0; var t229 = 1; var t234 = 0; var t304 = 0; var t314 = 0; var t324 = 0; var t334 = 1; mat44.e00 = t009; mat44.e01 = t019; mat44.e02 = t029; mat44.e03 = t034; mat44.e10 = t109; mat44.e11 = t119; mat44.e12 = t129; mat44.e13 = t134; mat44.e20 = t209; mat44.e21 = t219; mat44.e22 = t229; mat44.e23 = t234; mat44.e30 = t304; mat44.e31 = t314; mat44.e32 = t324; mat44.e33 = t334; if(_this45.sizeMat4 == _this45.stackMat4.length) { var newLength18 = _this45.sizeMat4 << 1; var this19 = new Array(newLength18); var newArray18 = this19; var _g29 = 0; var _g119 = _this45.sizeMat4; while(_g29 < _g119) { var i20 = _g29++; newArray18[i20] = _this45.stackMat4[i20]; _this45.stackMat4[i20] = null; } _this45.stackMat4 = newArray18; } _this45.stackMat4[_this45.sizeMat4++] = mat44; } if(quat4 != null) { var tx23 = 0; var ty23 = 0; var tz23 = 0; var tw4 = 1; quat4.x = tx23; quat4.y = ty23; quat4.z = tz23; quat4.w = tw4; if(_this45.sizeQuat == _this45.stackQuat.length) { var newLength19 = _this45.sizeQuat << 1; var this20 = new Array(newLength19); var newArray19 = this20; var _g30 = 0; var _g120 = _this45.sizeQuat; while(_g30 < _g120) { var i21 = _g30++; newArray19[i21] = _this45.stackQuat[i21]; _this45.stackQuat[i21] = null; } _this45.stackQuat = newArray19; } _this45.stackQuat[_this45.sizeQuat++] = quat4; } } } var _this46 = this.p; var mat35 = null; var mat45 = null; var quat5 = null; if(top != null) { top.zero(); if(_this46.sizeVec3 == _this46.stackVec3.length) { var newLength20 = _this46.sizeVec3 << 1; var this21 = new Array(newLength20); var newArray20 = this21; var _g31 = 0; var _g121 = _this46.sizeVec3; while(_g31 < _g121) { var i22 = _g31++; newArray20[i22] = _this46.stackVec3[i22]; _this46.stackVec3[i22] = null; } _this46.stackVec3 = newArray20; } _this46.stackVec3[_this46.sizeVec3++] = top; } if(mat35 != null) { var t0010 = 1; var t0110 = 0; var t0210 = 0; var t1010 = 0; var t1110 = 1; var t1210 = 0; var t2010 = 0; var t2110 = 0; var t2210 = 1; mat35.e00 = t0010; mat35.e01 = t0110; mat35.e02 = t0210; mat35.e10 = t1010; mat35.e11 = t1110; mat35.e12 = t1210; mat35.e20 = t2010; mat35.e21 = t2110; mat35.e22 = t2210; if(_this46.sizeMat3 == _this46.stackMat3.length) { var newLength21 = _this46.sizeMat3 << 1; var this22 = new Array(newLength21); var newArray21 = this22; var _g32 = 0; var _g122 = _this46.sizeMat3; while(_g32 < _g122) { var i23 = _g32++; newArray21[i23] = _this46.stackMat3[i23]; _this46.stackMat3[i23] = null; } _this46.stackMat3 = newArray21; } _this46.stackMat3[_this46.sizeMat3++] = mat35; } if(mat45 != null) { var t0011 = 1; var t0111 = 0; var t0211 = 0; var t035 = 0; var t1011 = 0; var t1111 = 1; var t1211 = 0; var t135 = 0; var t2011 = 0; var t2111 = 0; var t2211 = 1; var t235 = 0; var t305 = 0; var t315 = 0; var t325 = 0; var t335 = 1; mat45.e00 = t0011; mat45.e01 = t0111; mat45.e02 = t0211; mat45.e03 = t035; mat45.e10 = t1011; mat45.e11 = t1111; mat45.e12 = t1211; mat45.e13 = t135; mat45.e20 = t2011; mat45.e21 = t2111; mat45.e22 = t2211; mat45.e23 = t235; mat45.e30 = t305; mat45.e31 = t315; mat45.e32 = t325; mat45.e33 = t335; if(_this46.sizeMat4 == _this46.stackMat4.length) { var newLength22 = _this46.sizeMat4 << 1; var this23 = new Array(newLength22); var newArray22 = this23; var _g33 = 0; var _g123 = _this46.sizeMat4; while(_g33 < _g123) { var i24 = _g33++; newArray22[i24] = _this46.stackMat4[i24]; _this46.stackMat4[i24] = null; } _this46.stackMat4 = newArray22; } _this46.stackMat4[_this46.sizeMat4++] = mat45; } if(quat5 != null) { var tx24 = 0; var ty24 = 0; var tz24 = 0; var tw5 = 1; quat5.x = tx24; quat5.y = ty24; quat5.z = tz24; quat5.w = tw5; if(_this46.sizeQuat == _this46.stackQuat.length) { var newLength23 = _this46.sizeQuat << 1; var this24 = new Array(newLength23); var newArray23 = this24; var _g34 = 0; var _g124 = _this46.sizeQuat; while(_g34 < _g124) { var i25 = _g34++; newArray23[i25] = _this46.stackQuat[i25]; _this46.stackQuat[i25] = null; } _this46.stackQuat = newArray23; } _this46.stackQuat[_this46.sizeQuat++] = quat5; } var _this47 = this.p; var mat36 = null; var mat46 = null; var quat6 = null; if(bottom != null) { bottom.zero(); if(_this47.sizeVec3 == _this47.stackVec3.length) { var newLength24 = _this47.sizeVec3 << 1; var this25 = new Array(newLength24); var newArray24 = this25; var _g35 = 0; var _g125 = _this47.sizeVec3; while(_g35 < _g125) { var i26 = _g35++; newArray24[i26] = _this47.stackVec3[i26]; _this47.stackVec3[i26] = null; } _this47.stackVec3 = newArray24; } _this47.stackVec3[_this47.sizeVec3++] = bottom; } if(mat36 != null) { var t0012 = 1; var t0112 = 0; var t0212 = 0; var t1012 = 0; var t1112 = 1; var t1212 = 0; var t2012 = 0; var t2112 = 0; var t2212 = 1; mat36.e00 = t0012; mat36.e01 = t0112; mat36.e02 = t0212; mat36.e10 = t1012; mat36.e11 = t1112; mat36.e12 = t1212; mat36.e20 = t2012; mat36.e21 = t2112; mat36.e22 = t2212; if(_this47.sizeMat3 == _this47.stackMat3.length) { var newLength25 = _this47.sizeMat3 << 1; var this26 = new Array(newLength25); var newArray25 = this26; var _g36 = 0; var _g126 = _this47.sizeMat3; while(_g36 < _g126) { var i27 = _g36++; newArray25[i27] = _this47.stackMat3[i27]; _this47.stackMat3[i27] = null; } _this47.stackMat3 = newArray25; } _this47.stackMat3[_this47.sizeMat3++] = mat36; } if(mat46 != null) { var t0013 = 1; var t0113 = 0; var t0213 = 0; var t036 = 0; var t1013 = 0; var t1113 = 1; var t1213 = 0; var t136 = 0; var t2013 = 0; var t2113 = 0; var t2213 = 1; var t236 = 0; var t306 = 0; var t316 = 0; var t326 = 0; var t336 = 1; mat46.e00 = t0013; mat46.e01 = t0113; mat46.e02 = t0213; mat46.e03 = t036; mat46.e10 = t1013; mat46.e11 = t1113; mat46.e12 = t1213; mat46.e13 = t136; mat46.e20 = t2013; mat46.e21 = t2113; mat46.e22 = t2213; mat46.e23 = t236; mat46.e30 = t306; mat46.e31 = t316; mat46.e32 = t326; mat46.e33 = t336; if(_this47.sizeMat4 == _this47.stackMat4.length) { var newLength26 = _this47.sizeMat4 << 1; var this27 = new Array(newLength26); var newArray26 = this27; var _g37 = 0; var _g127 = _this47.sizeMat4; while(_g37 < _g127) { var i28 = _g37++; newArray26[i28] = _this47.stackMat4[i28]; _this47.stackMat4[i28] = null; } _this47.stackMat4 = newArray26; } _this47.stackMat4[_this47.sizeMat4++] = mat46; } if(quat6 != null) { var tx25 = 0; var ty25 = 0; var tz25 = 0; var tw6 = 1; quat6.x = tx25; quat6.y = ty25; quat6.z = tz25; quat6.w = tw6; if(_this47.sizeQuat == _this47.stackQuat.length) { var newLength27 = _this47.sizeQuat << 1; var this28 = new Array(newLength27); var newArray27 = this28; var _g38 = 0; var _g128 = _this47.sizeQuat; while(_g38 < _g128) { var i29 = _g38++; newArray27[i29] = _this47.stackQuat[i29]; _this47.stackQuat[i29] = null; } _this47.stackQuat = newArray27; } _this47.stackQuat[_this47.sizeQuat++] = quat6; } var _this48 = this.p; var mat37 = null; var mat47 = null; var quat7 = null; if(o != null) { o.zero(); if(_this48.sizeVec3 == _this48.stackVec3.length) { var newLength28 = _this48.sizeVec3 << 1; var this29 = new Array(newLength28); var newArray28 = this29; var _g39 = 0; var _g129 = _this48.sizeVec3; while(_g39 < _g129) { var i30 = _g39++; newArray28[i30] = _this48.stackVec3[i30]; _this48.stackVec3[i30] = null; } _this48.stackVec3 = newArray28; } _this48.stackVec3[_this48.sizeVec3++] = o; } if(mat37 != null) { var t0014 = 1; var t0114 = 0; var t0214 = 0; var t1014 = 0; var t1114 = 1; var t1214 = 0; var t2014 = 0; var t2114 = 0; var t2214 = 1; mat37.e00 = t0014; mat37.e01 = t0114; mat37.e02 = t0214; mat37.e10 = t1014; mat37.e11 = t1114; mat37.e12 = t1214; mat37.e20 = t2014; mat37.e21 = t2114; mat37.e22 = t2214; if(_this48.sizeMat3 == _this48.stackMat3.length) { var newLength29 = _this48.sizeMat3 << 1; var this30 = new Array(newLength29); var newArray29 = this30; var _g40 = 0; var _g130 = _this48.sizeMat3; while(_g40 < _g130) { var i31 = _g40++; newArray29[i31] = _this48.stackMat3[i31]; _this48.stackMat3[i31] = null; } _this48.stackMat3 = newArray29; } _this48.stackMat3[_this48.sizeMat3++] = mat37; } if(mat47 != null) { var t0015 = 1; var t0115 = 0; var t0215 = 0; var t037 = 0; var t1015 = 0; var t1115 = 1; var t1215 = 0; var t137 = 0; var t2015 = 0; var t2115 = 0; var t2215 = 1; var t237 = 0; var t307 = 0; var t317 = 0; var t327 = 0; var t337 = 1; mat47.e00 = t0015; mat47.e01 = t0115; mat47.e02 = t0215; mat47.e03 = t037; mat47.e10 = t1015; mat47.e11 = t1115; mat47.e12 = t1215; mat47.e13 = t137; mat47.e20 = t2015; mat47.e21 = t2115; mat47.e22 = t2215; mat47.e23 = t237; mat47.e30 = t307; mat47.e31 = t317; mat47.e32 = t327; mat47.e33 = t337; if(_this48.sizeMat4 == _this48.stackMat4.length) { var newLength30 = _this48.sizeMat4 << 1; var this31 = new Array(newLength30); var newArray30 = this31; var _g41 = 0; var _g131 = _this48.sizeMat4; while(_g41 < _g131) { var i32 = _g41++; newArray30[i32] = _this48.stackMat4[i32]; _this48.stackMat4[i32] = null; } _this48.stackMat4 = newArray30; } _this48.stackMat4[_this48.sizeMat4++] = mat47; } if(quat7 != null) { var tx26 = 0; var ty26 = 0; var tz26 = 0; var tw7 = 1; quat7.x = tx26; quat7.y = ty26; quat7.z = tz26; quat7.w = tw7; if(_this48.sizeQuat == _this48.stackQuat.length) { var newLength31 = _this48.sizeQuat << 1; var this32 = new Array(newLength31); var newArray31 = this32; var _g42 = 0; var _g132 = _this48.sizeQuat; while(_g42 < _g132) { var i33 = _g42++; newArray31[i33] = _this48.stackQuat[i33]; _this48.stackQuat[i33] = null; } _this48.stackQuat = newArray31; } _this48.stackQuat[_this48.sizeQuat++] = quat7; } var _this49 = this.p; var vec3 = null; var mat48 = null; var quat8 = null; if(vec3 != null) { vec3.zero(); if(_this49.sizeVec3 == _this49.stackVec3.length) { var newLength32 = _this49.sizeVec3 << 1; var this33 = new Array(newLength32); var newArray32 = this33; var _g43 = 0; var _g133 = _this49.sizeVec3; while(_g43 < _g133) { var i34 = _g43++; newArray32[i34] = _this49.stackVec3[i34]; _this49.stackVec3[i34] = null; } _this49.stackVec3 = newArray32; } _this49.stackVec3[_this49.sizeVec3++] = vec3; } if(m != null) { var t0016 = 1; var t0116 = 0; var t0216 = 0; var t1016 = 0; var t1116 = 1; var t1216 = 0; var t2016 = 0; var t2116 = 0; var t2216 = 1; m.e00 = t0016; m.e01 = t0116; m.e02 = t0216; m.e10 = t1016; m.e11 = t1116; m.e12 = t1216; m.e20 = t2016; m.e21 = t2116; m.e22 = t2216; if(_this49.sizeMat3 == _this49.stackMat3.length) { var newLength33 = _this49.sizeMat3 << 1; var this34 = new Array(newLength33); var newArray33 = this34; var _g44 = 0; var _g134 = _this49.sizeMat3; while(_g44 < _g134) { var i35 = _g44++; newArray33[i35] = _this49.stackMat3[i35]; _this49.stackMat3[i35] = null; } _this49.stackMat3 = newArray33; } _this49.stackMat3[_this49.sizeMat3++] = m; } if(mat48 != null) { var t0017 = 1; var t0117 = 0; var t0217 = 0; var t038 = 0; var t1017 = 0; var t1117 = 1; var t1217 = 0; var t138 = 0; var t2017 = 0; var t2117 = 0; var t2217 = 1; var t238 = 0; var t308 = 0; var t318 = 0; var t328 = 0; var t338 = 1; mat48.e00 = t0017; mat48.e01 = t0117; mat48.e02 = t0217; mat48.e03 = t038; mat48.e10 = t1017; mat48.e11 = t1117; mat48.e12 = t1217; mat48.e13 = t138; mat48.e20 = t2017; mat48.e21 = t2117; mat48.e22 = t2217; mat48.e23 = t238; mat48.e30 = t308; mat48.e31 = t318; mat48.e32 = t328; mat48.e33 = t338; if(_this49.sizeMat4 == _this49.stackMat4.length) { var newLength34 = _this49.sizeMat4 << 1; var this35 = new Array(newLength34); var newArray34 = this35; var _g45 = 0; var _g135 = _this49.sizeMat4; while(_g45 < _g135) { var i36 = _g45++; newArray34[i36] = _this49.stackMat4[i36]; _this49.stackMat4[i36] = null; } _this49.stackMat4 = newArray34; } _this49.stackMat4[_this49.sizeMat4++] = mat48; } if(quat8 != null) { var tx27 = 0; var ty27 = 0; var tz27 = 0; var tw8 = 1; quat8.x = tx27; quat8.y = ty27; quat8.z = tz27; quat8.w = tw8; if(_this49.sizeQuat == _this49.stackQuat.length) { var newLength35 = _this49.sizeQuat << 1; var this36 = new Array(newLength35); var newArray35 = this36; var _g46 = 0; var _g136 = _this49.sizeQuat; while(_g46 < _g136) { var i37 = _g46++; newArray35[i37] = _this49.stackQuat[i37]; _this49.stackQuat[i37] = null; } _this49.stackQuat = newArray35; } _this49.stackQuat[_this49.sizeQuat++] = quat8; } var _this50 = this.p; var mat38 = null; var mat49 = null; var quat9 = null; if(ex != null) { ex.zero(); if(_this50.sizeVec3 == _this50.stackVec3.length) { var newLength36 = _this50.sizeVec3 << 1; var this37 = new Array(newLength36); var newArray36 = this37; var _g47 = 0; var _g137 = _this50.sizeVec3; while(_g47 < _g137) { var i38 = _g47++; newArray36[i38] = _this50.stackVec3[i38]; _this50.stackVec3[i38] = null; } _this50.stackVec3 = newArray36; } _this50.stackVec3[_this50.sizeVec3++] = ex; } if(mat38 != null) { var t0018 = 1; var t0118 = 0; var t0218 = 0; var t1018 = 0; var t1118 = 1; var t1218 = 0; var t2018 = 0; var t2118 = 0; var t2218 = 1; mat38.e00 = t0018; mat38.e01 = t0118; mat38.e02 = t0218; mat38.e10 = t1018; mat38.e11 = t1118; mat38.e12 = t1218; mat38.e20 = t2018; mat38.e21 = t2118; mat38.e22 = t2218; if(_this50.sizeMat3 == _this50.stackMat3.length) { var newLength37 = _this50.sizeMat3 << 1; var this38 = new Array(newLength37); var newArray37 = this38; var _g48 = 0; var _g138 = _this50.sizeMat3; while(_g48 < _g138) { var i39 = _g48++; newArray37[i39] = _this50.stackMat3[i39]; _this50.stackMat3[i39] = null; } _this50.stackMat3 = newArray37; } _this50.stackMat3[_this50.sizeMat3++] = mat38; } if(mat49 != null) { var t0019 = 1; var t0119 = 0; var t0219 = 0; var t039 = 0; var t1019 = 0; var t1119 = 1; var t1219 = 0; var t139 = 0; var t2019 = 0; var t2119 = 0; var t2219 = 1; var t239 = 0; var t309 = 0; var t319 = 0; var t329 = 0; var t339 = 1; mat49.e00 = t0019; mat49.e01 = t0119; mat49.e02 = t0219; mat49.e03 = t039; mat49.e10 = t1019; mat49.e11 = t1119; mat49.e12 = t1219; mat49.e13 = t139; mat49.e20 = t2019; mat49.e21 = t2119; mat49.e22 = t2219; mat49.e23 = t239; mat49.e30 = t309; mat49.e31 = t319; mat49.e32 = t329; mat49.e33 = t339; if(_this50.sizeMat4 == _this50.stackMat4.length) { var newLength38 = _this50.sizeMat4 << 1; var this39 = new Array(newLength38); var newArray38 = this39; var _g49 = 0; var _g139 = _this50.sizeMat4; while(_g49 < _g139) { var i40 = _g49++; newArray38[i40] = _this50.stackMat4[i40]; _this50.stackMat4[i40] = null; } _this50.stackMat4 = newArray38; } _this50.stackMat4[_this50.sizeMat4++] = mat49; } if(quat9 != null) { var tx28 = 0; var ty28 = 0; var tz28 = 0; var tw9 = 1; quat9.x = tx28; quat9.y = ty28; quat9.z = tz28; quat9.w = tw9; if(_this50.sizeQuat == _this50.stackQuat.length) { var newLength39 = _this50.sizeQuat << 1; var this40 = new Array(newLength39); var newArray39 = this40; var _g50 = 0; var _g140 = _this50.sizeQuat; while(_g50 < _g140) { var i41 = _g50++; newArray39[i41] = _this50.stackQuat[i41]; _this50.stackQuat[i41] = null; } _this50.stackQuat = newArray39; } _this50.stackQuat[_this50.sizeQuat++] = quat9; } var _this51 = this.p; var mat39 = null; var mat410 = null; var quat10 = null; if(ey != null) { ey.zero(); if(_this51.sizeVec3 == _this51.stackVec3.length) { var newLength40 = _this51.sizeVec3 << 1; var this41 = new Array(newLength40); var newArray40 = this41; var _g51 = 0; var _g141 = _this51.sizeVec3; while(_g51 < _g141) { var i42 = _g51++; newArray40[i42] = _this51.stackVec3[i42]; _this51.stackVec3[i42] = null; } _this51.stackVec3 = newArray40; } _this51.stackVec3[_this51.sizeVec3++] = ey; } if(mat39 != null) { var t0020 = 1; var t0120 = 0; var t0220 = 0; var t1020 = 0; var t1120 = 1; var t1220 = 0; var t2020 = 0; var t2120 = 0; var t2220 = 1; mat39.e00 = t0020; mat39.e01 = t0120; mat39.e02 = t0220; mat39.e10 = t1020; mat39.e11 = t1120; mat39.e12 = t1220; mat39.e20 = t2020; mat39.e21 = t2120; mat39.e22 = t2220; if(_this51.sizeMat3 == _this51.stackMat3.length) { var newLength41 = _this51.sizeMat3 << 1; var this42 = new Array(newLength41); var newArray41 = this42; var _g52 = 0; var _g142 = _this51.sizeMat3; while(_g52 < _g142) { var i43 = _g52++; newArray41[i43] = _this51.stackMat3[i43]; _this51.stackMat3[i43] = null; } _this51.stackMat3 = newArray41; } _this51.stackMat3[_this51.sizeMat3++] = mat39; } if(mat410 != null) { var t0021 = 1; var t0121 = 0; var t0221 = 0; var t0310 = 0; var t1021 = 0; var t1121 = 1; var t1221 = 0; var t1310 = 0; var t2021 = 0; var t2121 = 0; var t2221 = 1; var t2310 = 0; var t3010 = 0; var t3110 = 0; var t3210 = 0; var t3310 = 1; mat410.e00 = t0021; mat410.e01 = t0121; mat410.e02 = t0221; mat410.e03 = t0310; mat410.e10 = t1021; mat410.e11 = t1121; mat410.e12 = t1221; mat410.e13 = t1310; mat410.e20 = t2021; mat410.e21 = t2121; mat410.e22 = t2221; mat410.e23 = t2310; mat410.e30 = t3010; mat410.e31 = t3110; mat410.e32 = t3210; mat410.e33 = t3310; if(_this51.sizeMat4 == _this51.stackMat4.length) { var newLength42 = _this51.sizeMat4 << 1; var this43 = new Array(newLength42); var newArray42 = this43; var _g53 = 0; var _g143 = _this51.sizeMat4; while(_g53 < _g143) { var i44 = _g53++; newArray42[i44] = _this51.stackMat4[i44]; _this51.stackMat4[i44] = null; } _this51.stackMat4 = newArray42; } _this51.stackMat4[_this51.sizeMat4++] = mat410; } if(quat10 != null) { var tx29 = 0; var ty29 = 0; var tz29 = 0; var tw10 = 1; quat10.x = tx29; quat10.y = ty29; quat10.z = tz29; quat10.w = tw10; if(_this51.sizeQuat == _this51.stackQuat.length) { var newLength43 = _this51.sizeQuat << 1; var this44 = new Array(newLength43); var newArray43 = this44; var _g54 = 0; var _g144 = _this51.sizeQuat; while(_g54 < _g144) { var i45 = _g54++; newArray43[i45] = _this51.stackQuat[i45]; _this51.stackQuat[i45] = null; } _this51.stackQuat = newArray43; } _this51.stackQuat[_this51.sizeQuat++] = quat10; } var _this52 = this.p; var mat310 = null; var mat411 = null; var quat11 = null; if(ez != null) { ez.zero(); if(_this52.sizeVec3 == _this52.stackVec3.length) { var newLength44 = _this52.sizeVec3 << 1; var this45 = new Array(newLength44); var newArray44 = this45; var _g55 = 0; var _g145 = _this52.sizeVec3; while(_g55 < _g145) { var i46 = _g55++; newArray44[i46] = _this52.stackVec3[i46]; _this52.stackVec3[i46] = null; } _this52.stackVec3 = newArray44; } _this52.stackVec3[_this52.sizeVec3++] = ez; } if(mat310 != null) { var t0022 = 1; var t0122 = 0; var t0222 = 0; var t1022 = 0; var t1122 = 1; var t1222 = 0; var t2022 = 0; var t2122 = 0; var t2222 = 1; mat310.e00 = t0022; mat310.e01 = t0122; mat310.e02 = t0222; mat310.e10 = t1022; mat310.e11 = t1122; mat310.e12 = t1222; mat310.e20 = t2022; mat310.e21 = t2122; mat310.e22 = t2222; if(_this52.sizeMat3 == _this52.stackMat3.length) { var newLength45 = _this52.sizeMat3 << 1; var this46 = new Array(newLength45); var newArray45 = this46; var _g56 = 0; var _g146 = _this52.sizeMat3; while(_g56 < _g146) { var i47 = _g56++; newArray45[i47] = _this52.stackMat3[i47]; _this52.stackMat3[i47] = null; } _this52.stackMat3 = newArray45; } _this52.stackMat3[_this52.sizeMat3++] = mat310; } if(mat411 != null) { var t0023 = 1; var t0123 = 0; var t0223 = 0; var t0311 = 0; var t1023 = 0; var t1123 = 1; var t1223 = 0; var t1311 = 0; var t2023 = 0; var t2123 = 0; var t2223 = 1; var t2311 = 0; var t3011 = 0; var t3111 = 0; var t3211 = 0; var t3311 = 1; mat411.e00 = t0023; mat411.e01 = t0123; mat411.e02 = t0223; mat411.e03 = t0311; mat411.e10 = t1023; mat411.e11 = t1123; mat411.e12 = t1223; mat411.e13 = t1311; mat411.e20 = t2023; mat411.e21 = t2123; mat411.e22 = t2223; mat411.e23 = t2311; mat411.e30 = t3011; mat411.e31 = t3111; mat411.e32 = t3211; mat411.e33 = t3311; if(_this52.sizeMat4 == _this52.stackMat4.length) { var newLength46 = _this52.sizeMat4 << 1; var this47 = new Array(newLength46); var newArray46 = this47; var _g57 = 0; var _g147 = _this52.sizeMat4; while(_g57 < _g147) { var i48 = _g57++; newArray46[i48] = _this52.stackMat4[i48]; _this52.stackMat4[i48] = null; } _this52.stackMat4 = newArray46; } _this52.stackMat4[_this52.sizeMat4++] = mat411; } if(quat11 != null) { var tx30 = 0; var ty30 = 0; var tz30 = 0; var tw11 = 1; quat11.x = tx30; quat11.y = ty30; quat11.z = tz30; quat11.w = tw11; if(_this52.sizeQuat == _this52.stackQuat.length) { var newLength47 = _this52.sizeQuat << 1; var this48 = new Array(newLength47); var newArray47 = this48; var _g58 = 0; var _g148 = _this52.sizeQuat; while(_g58 < _g148) { var i49 = _g58++; newArray47[i49] = _this52.stackQuat[i49]; _this52.stackQuat[i49] = null; } _this52.stackQuat = newArray47; } _this52.stackQuat[_this52.sizeQuat++] = quat11; } } cylinder(tf,radius,halfHeight,color) { var _this = this.p; var ex = _this.sizeVec3 == 0 ? new oimo.common.Vec3() : _this.stackVec3[--_this.sizeVec3]; var _this1 = this.p; var ey = _this1.sizeVec3 == 0 ? new oimo.common.Vec3() : _this1.stackVec3[--_this1.sizeVec3]; var _this2 = this.p; var ez = _this2.sizeVec3 == 0 ? new oimo.common.Vec3() : _this2.stackVec3[--_this2.sizeVec3]; var _this3 = this.p; var o = _this3.sizeVec3 == 0 ? new oimo.common.Vec3() : _this3.stackVec3[--_this3.sizeVec3]; var _this4 = this.p; var m = _this4.sizeMat3 == 0 ? new oimo.common.Mat3() : _this4.stackMat3[--_this4.sizeMat3]; var v = o; v.x = tf._positionX; v.y = tf._positionY; v.z = tf._positionZ; var m1 = m; m1.e00 = tf._rotation00; m1.e01 = tf._rotation01; m1.e02 = tf._rotation02; m1.e10 = tf._rotation10; m1.e11 = tf._rotation11; m1.e12 = tf._rotation12; m1.e20 = tf._rotation20; m1.e21 = tf._rotation21; m1.e22 = tf._rotation22; ex.init(m.e00,m.e10,m.e20); ey.init(m.e01,m.e11,m.e21); ez.init(m.e02,m.e12,m.e22); var _this5 = this.p; var _this6 = _this5.sizeVec3 == 0 ? new oimo.common.Vec3() : _this5.stackVec3[--_this5.sizeVec3]; _this6.x = o.x; _this6.y = o.y; _this6.z = o.z; var _this7 = _this6; var tx = _this7.x + ey.x * halfHeight; var ty = _this7.y + ey.y * halfHeight; var tz = _this7.z + ey.z * halfHeight; _this7.x = tx; _this7.y = ty; _this7.z = tz; var top = _this7; var _this8 = this.p; var _this9 = _this8.sizeVec3 == 0 ? new oimo.common.Vec3() : _this8.stackVec3[--_this8.sizeVec3]; _this9.x = o.x; _this9.y = o.y; _this9.z = o.z; var _this10 = _this9; var s = -halfHeight; var tx1 = _this10.x + ey.x * s; var ty1 = _this10.y + ey.y * s; var tz1 = _this10.z + ey.z * s; _this10.x = tx1; _this10.y = ty1; _this10.z = tz1; var bottom = _this10; if(this.wireframe) { var _this11 = this.p; var _this12 = _this11.sizeVec3 == 0 ? new oimo.common.Vec3() : _this11.stackVec3[--_this11.sizeVec3]; _this12.x = top.x; _this12.y = top.y; _this12.z = top.z; var _this13 = _this12; var s1 = -radius; var tx2 = _this13.x + ex.x * s1; var ty2 = _this13.y + ex.y * s1; var tz2 = _this13.z + ex.z * s1; _this13.x = tx2; _this13.y = ty2; _this13.z = tz2; var _this14 = _this13; var tx3 = _this14.x + ez.x * 0; var ty3 = _this14.y + ez.y * 0; var tz3 = _this14.z + ez.z * 0; _this14.x = tx3; _this14.y = ty3; _this14.z = tz3; var top1 = _this14; var _this15 = this.p; var _this16 = _this15.sizeVec3 == 0 ? new oimo.common.Vec3() : _this15.stackVec3[--_this15.sizeVec3]; _this16.x = top.x; _this16.y = top.y; _this16.z = top.z; var _this17 = _this16; var tx4 = _this17.x + ex.x * radius; var ty4 = _this17.y + ex.y * radius; var tz4 = _this17.z + ex.z * radius; _this17.x = tx4; _this17.y = ty4; _this17.z = tz4; var _this18 = _this17; var tx5 = _this18.x + ez.x * 0; var ty5 = _this18.y + ez.y * 0; var tz5 = _this18.z + ez.z * 0; _this18.x = tx5; _this18.y = ty5; _this18.z = tz5; var top2 = _this18; var _this19 = this.p; var _this20 = _this19.sizeVec3 == 0 ? new oimo.common.Vec3() : _this19.stackVec3[--_this19.sizeVec3]; _this20.x = top.x; _this20.y = top.y; _this20.z = top.z; var _this21 = _this20; var tx6 = _this21.x + ex.x * 0; var ty6 = _this21.y + ex.y * 0; var tz6 = _this21.z + ex.z * 0; _this21.x = tx6; _this21.y = ty6; _this21.z = tz6; var _this22 = _this21; var s2 = -radius; var tx7 = _this22.x + ez.x * s2; var ty7 = _this22.y + ez.y * s2; var tz7 = _this22.z + ez.z * s2; _this22.x = tx7; _this22.y = ty7; _this22.z = tz7; var top3 = _this22; var _this23 = this.p; var _this24 = _this23.sizeVec3 == 0 ? new oimo.common.Vec3() : _this23.stackVec3[--_this23.sizeVec3]; _this24.x = top.x; _this24.y = top.y; _this24.z = top.z; var _this25 = _this24; var tx8 = _this25.x + ex.x * 0; var ty8 = _this25.y + ex.y * 0; var tz8 = _this25.z + ex.z * 0; _this25.x = tx8; _this25.y = ty8; _this25.z = tz8; var _this26 = _this25; var tx9 = _this26.x + ez.x * radius; var ty9 = _this26.y + ez.y * radius; var tz9 = _this26.z + ez.z * radius; _this26.x = tx9; _this26.y = ty9; _this26.z = tz9; var top4 = _this26; var _this27 = this.p; var _this28 = _this27.sizeVec3 == 0 ? new oimo.common.Vec3() : _this27.stackVec3[--_this27.sizeVec3]; _this28.x = bottom.x; _this28.y = bottom.y; _this28.z = bottom.z; var _this29 = _this28; var s3 = -radius; var tx10 = _this29.x + ex.x * s3; var ty10 = _this29.y + ex.y * s3; var tz10 = _this29.z + ex.z * s3; _this29.x = tx10; _this29.y = ty10; _this29.z = tz10; var _this30 = _this29; var tx11 = _this30.x + ez.x * 0; var ty11 = _this30.y + ez.y * 0; var tz11 = _this30.z + ez.z * 0; _this30.x = tx11; _this30.y = ty11; _this30.z = tz11; var bottom1 = _this30; var _this31 = this.p; var _this32 = _this31.sizeVec3 == 0 ? new oimo.common.Vec3() : _this31.stackVec3[--_this31.sizeVec3]; _this32.x = bottom.x; _this32.y = bottom.y; _this32.z = bottom.z; var _this33 = _this32; var tx12 = _this33.x + ex.x * radius; var ty12 = _this33.y + ex.y * radius; var tz12 = _this33.z + ex.z * radius; _this33.x = tx12; _this33.y = ty12; _this33.z = tz12; var _this34 = _this33; var tx13 = _this34.x + ez.x * 0; var ty13 = _this34.y + ez.y * 0; var tz13 = _this34.z + ez.z * 0; _this34.x = tx13; _this34.y = ty13; _this34.z = tz13; var bottom2 = _this34; var _this35 = this.p; var _this36 = _this35.sizeVec3 == 0 ? new oimo.common.Vec3() : _this35.stackVec3[--_this35.sizeVec3]; _this36.x = bottom.x; _this36.y = bottom.y; _this36.z = bottom.z; var _this37 = _this36; var tx14 = _this37.x + ex.x * 0; var ty14 = _this37.y + ex.y * 0; var tz14 = _this37.z + ex.z * 0; _this37.x = tx14; _this37.y = ty14; _this37.z = tz14; var _this38 = _this37; var s4 = -radius; var tx15 = _this38.x + ez.x * s4; var ty15 = _this38.y + ez.y * s4; var tz15 = _this38.z + ez.z * s4; _this38.x = tx15; _this38.y = ty15; _this38.z = tz15; var bottom3 = _this38; var _this39 = this.p; var _this40 = _this39.sizeVec3 == 0 ? new oimo.common.Vec3() : _this39.stackVec3[--_this39.sizeVec3]; _this40.x = bottom.x; _this40.y = bottom.y; _this40.z = bottom.z; var _this41 = _this40; var tx16 = _this41.x + ex.x * 0; var ty16 = _this41.y + ex.y * 0; var tz16 = _this41.z + ex.z * 0; _this41.x = tx16; _this41.y = ty16; _this41.z = tz16; var _this42 = _this41; var tx17 = _this42.x + ez.x * radius; var ty17 = _this42.y + ez.y * radius; var tz17 = _this42.z + ez.z * radius; _this42.x = tx17; _this42.y = ty17; _this42.z = tz17; var bottom4 = _this42; this.ellipse(top,ex,ez,radius,radius,color); this.ellipse(bottom,ex,ez,radius,radius,color); this.line(top1,bottom1,color); this.line(top2,bottom2,color); this.line(top3,bottom3,color); this.line(top4,bottom4,color); var _this43 = this.p; var mat3 = null; var mat4 = null; var quat = null; if(top1 != null) { top1.zero(); if(_this43.sizeVec3 == _this43.stackVec3.length) { var newLength = _this43.sizeVec3 << 1; var this1 = new Array(newLength); var newArray = this1; var _g = 0; var _g1 = _this43.sizeVec3; while(_g < _g1) { var i = _g++; newArray[i] = _this43.stackVec3[i]; _this43.stackVec3[i] = null; } _this43.stackVec3 = newArray; } _this43.stackVec3[_this43.sizeVec3++] = top1; } if(mat3 != null) { var t00 = 1; var t01 = 0; var t02 = 0; var t10 = 0; var t11 = 1; var t12 = 0; var t20 = 0; var t21 = 0; var t22 = 1; mat3.e00 = t00; mat3.e01 = t01; mat3.e02 = t02; mat3.e10 = t10; mat3.e11 = t11; mat3.e12 = t12; mat3.e20 = t20; mat3.e21 = t21; mat3.e22 = t22; if(_this43.sizeMat3 == _this43.stackMat3.length) { var newLength1 = _this43.sizeMat3 << 1; var this2 = new Array(newLength1); var newArray1 = this2; var _g2 = 0; var _g11 = _this43.sizeMat3; while(_g2 < _g11) { var i1 = _g2++; newArray1[i1] = _this43.stackMat3[i1]; _this43.stackMat3[i1] = null; } _this43.stackMat3 = newArray1; } _this43.stackMat3[_this43.sizeMat3++] = mat3; } if(mat4 != null) { var t001 = 1; var t011 = 0; var t021 = 0; var t03 = 0; var t101 = 0; var t111 = 1; var t121 = 0; var t13 = 0; var t201 = 0; var t211 = 0; var t221 = 1; var t23 = 0; var t30 = 0; var t31 = 0; var t32 = 0; var t33 = 1; mat4.e00 = t001; mat4.e01 = t011; mat4.e02 = t021; mat4.e03 = t03; mat4.e10 = t101; mat4.e11 = t111; mat4.e12 = t121; mat4.e13 = t13; mat4.e20 = t201; mat4.e21 = t211; mat4.e22 = t221; mat4.e23 = t23; mat4.e30 = t30; mat4.e31 = t31; mat4.e32 = t32; mat4.e33 = t33; if(_this43.sizeMat4 == _this43.stackMat4.length) { var newLength2 = _this43.sizeMat4 << 1; var this3 = new Array(newLength2); var newArray2 = this3; var _g3 = 0; var _g12 = _this43.sizeMat4; while(_g3 < _g12) { var i2 = _g3++; newArray2[i2] = _this43.stackMat4[i2]; _this43.stackMat4[i2] = null; } _this43.stackMat4 = newArray2; } _this43.stackMat4[_this43.sizeMat4++] = mat4; } if(quat != null) { var tx18 = 0; var ty18 = 0; var tz18 = 0; var tw = 1; quat.x = tx18; quat.y = ty18; quat.z = tz18; quat.w = tw; if(_this43.sizeQuat == _this43.stackQuat.length) { var newLength3 = _this43.sizeQuat << 1; var this4 = new Array(newLength3); var newArray3 = this4; var _g4 = 0; var _g13 = _this43.sizeQuat; while(_g4 < _g13) { var i3 = _g4++; newArray3[i3] = _this43.stackQuat[i3]; _this43.stackQuat[i3] = null; } _this43.stackQuat = newArray3; } _this43.stackQuat[_this43.sizeQuat++] = quat; } var _this44 = this.p; var mat31 = null; var mat41 = null; var quat1 = null; if(top2 != null) { top2.zero(); if(_this44.sizeVec3 == _this44.stackVec3.length) { var newLength4 = _this44.sizeVec3 << 1; var this5 = new Array(newLength4); var newArray4 = this5; var _g5 = 0; var _g14 = _this44.sizeVec3; while(_g5 < _g14) { var i4 = _g5++; newArray4[i4] = _this44.stackVec3[i4]; _this44.stackVec3[i4] = null; } _this44.stackVec3 = newArray4; } _this44.stackVec3[_this44.sizeVec3++] = top2; } if(mat31 != null) { var t002 = 1; var t012 = 0; var t022 = 0; var t102 = 0; var t112 = 1; var t122 = 0; var t202 = 0; var t212 = 0; var t222 = 1; mat31.e00 = t002; mat31.e01 = t012; mat31.e02 = t022; mat31.e10 = t102; mat31.e11 = t112; mat31.e12 = t122; mat31.e20 = t202; mat31.e21 = t212; mat31.e22 = t222; if(_this44.sizeMat3 == _this44.stackMat3.length) { var newLength5 = _this44.sizeMat3 << 1; var this6 = new Array(newLength5); var newArray5 = this6; var _g6 = 0; var _g15 = _this44.sizeMat3; while(_g6 < _g15) { var i5 = _g6++; newArray5[i5] = _this44.stackMat3[i5]; _this44.stackMat3[i5] = null; } _this44.stackMat3 = newArray5; } _this44.stackMat3[_this44.sizeMat3++] = mat31; } if(mat41 != null) { var t003 = 1; var t013 = 0; var t023 = 0; var t031 = 0; var t103 = 0; var t113 = 1; var t123 = 0; var t131 = 0; var t203 = 0; var t213 = 0; var t223 = 1; var t231 = 0; var t301 = 0; var t311 = 0; var t321 = 0; var t331 = 1; mat41.e00 = t003; mat41.e01 = t013; mat41.e02 = t023; mat41.e03 = t031; mat41.e10 = t103; mat41.e11 = t113; mat41.e12 = t123; mat41.e13 = t131; mat41.e20 = t203; mat41.e21 = t213; mat41.e22 = t223; mat41.e23 = t231; mat41.e30 = t301; mat41.e31 = t311; mat41.e32 = t321; mat41.e33 = t331; if(_this44.sizeMat4 == _this44.stackMat4.length) { var newLength6 = _this44.sizeMat4 << 1; var this7 = new Array(newLength6); var newArray6 = this7; var _g7 = 0; var _g16 = _this44.sizeMat4; while(_g7 < _g16) { var i6 = _g7++; newArray6[i6] = _this44.stackMat4[i6]; _this44.stackMat4[i6] = null; } _this44.stackMat4 = newArray6; } _this44.stackMat4[_this44.sizeMat4++] = mat41; } if(quat1 != null) { var tx19 = 0; var ty19 = 0; var tz19 = 0; var tw1 = 1; quat1.x = tx19; quat1.y = ty19; quat1.z = tz19; quat1.w = tw1; if(_this44.sizeQuat == _this44.stackQuat.length) { var newLength7 = _this44.sizeQuat << 1; var this8 = new Array(newLength7); var newArray7 = this8; var _g8 = 0; var _g17 = _this44.sizeQuat; while(_g8 < _g17) { var i7 = _g8++; newArray7[i7] = _this44.stackQuat[i7]; _this44.stackQuat[i7] = null; } _this44.stackQuat = newArray7; } _this44.stackQuat[_this44.sizeQuat++] = quat1; } var _this45 = this.p; var mat32 = null; var mat42 = null; var quat2 = null; if(top3 != null) { top3.zero(); if(_this45.sizeVec3 == _this45.stackVec3.length) { var newLength8 = _this45.sizeVec3 << 1; var this9 = new Array(newLength8); var newArray8 = this9; var _g9 = 0; var _g18 = _this45.sizeVec3; while(_g9 < _g18) { var i8 = _g9++; newArray8[i8] = _this45.stackVec3[i8]; _this45.stackVec3[i8] = null; } _this45.stackVec3 = newArray8; } _this45.stackVec3[_this45.sizeVec3++] = top3; } if(mat32 != null) { var t004 = 1; var t014 = 0; var t024 = 0; var t104 = 0; var t114 = 1; var t124 = 0; var t204 = 0; var t214 = 0; var t224 = 1; mat32.e00 = t004; mat32.e01 = t014; mat32.e02 = t024; mat32.e10 = t104; mat32.e11 = t114; mat32.e12 = t124; mat32.e20 = t204; mat32.e21 = t214; mat32.e22 = t224; if(_this45.sizeMat3 == _this45.stackMat3.length) { var newLength9 = _this45.sizeMat3 << 1; var this10 = new Array(newLength9); var newArray9 = this10; var _g10 = 0; var _g19 = _this45.sizeMat3; while(_g10 < _g19) { var i9 = _g10++; newArray9[i9] = _this45.stackMat3[i9]; _this45.stackMat3[i9] = null; } _this45.stackMat3 = newArray9; } _this45.stackMat3[_this45.sizeMat3++] = mat32; } if(mat42 != null) { var t005 = 1; var t015 = 0; var t025 = 0; var t032 = 0; var t105 = 0; var t115 = 1; var t125 = 0; var t132 = 0; var t205 = 0; var t215 = 0; var t225 = 1; var t232 = 0; var t302 = 0; var t312 = 0; var t322 = 0; var t332 = 1; mat42.e00 = t005; mat42.e01 = t015; mat42.e02 = t025; mat42.e03 = t032; mat42.e10 = t105; mat42.e11 = t115; mat42.e12 = t125; mat42.e13 = t132; mat42.e20 = t205; mat42.e21 = t215; mat42.e22 = t225; mat42.e23 = t232; mat42.e30 = t302; mat42.e31 = t312; mat42.e32 = t322; mat42.e33 = t332; if(_this45.sizeMat4 == _this45.stackMat4.length) { var newLength10 = _this45.sizeMat4 << 1; var this11 = new Array(newLength10); var newArray10 = this11; var _g20 = 0; var _g110 = _this45.sizeMat4; while(_g20 < _g110) { var i10 = _g20++; newArray10[i10] = _this45.stackMat4[i10]; _this45.stackMat4[i10] = null; } _this45.stackMat4 = newArray10; } _this45.stackMat4[_this45.sizeMat4++] = mat42; } if(quat2 != null) { var tx20 = 0; var ty20 = 0; var tz20 = 0; var tw2 = 1; quat2.x = tx20; quat2.y = ty20; quat2.z = tz20; quat2.w = tw2; if(_this45.sizeQuat == _this45.stackQuat.length) { var newLength11 = _this45.sizeQuat << 1; var this12 = new Array(newLength11); var newArray11 = this12; var _g21 = 0; var _g111 = _this45.sizeQuat; while(_g21 < _g111) { var i11 = _g21++; newArray11[i11] = _this45.stackQuat[i11]; _this45.stackQuat[i11] = null; } _this45.stackQuat = newArray11; } _this45.stackQuat[_this45.sizeQuat++] = quat2; } var _this46 = this.p; var mat33 = null; var mat43 = null; var quat3 = null; if(top4 != null) { top4.zero(); if(_this46.sizeVec3 == _this46.stackVec3.length) { var newLength12 = _this46.sizeVec3 << 1; var this13 = new Array(newLength12); var newArray12 = this13; var _g22 = 0; var _g112 = _this46.sizeVec3; while(_g22 < _g112) { var i12 = _g22++; newArray12[i12] = _this46.stackVec3[i12]; _this46.stackVec3[i12] = null; } _this46.stackVec3 = newArray12; } _this46.stackVec3[_this46.sizeVec3++] = top4; } if(mat33 != null) { var t006 = 1; var t016 = 0; var t026 = 0; var t106 = 0; var t116 = 1; var t126 = 0; var t206 = 0; var t216 = 0; var t226 = 1; mat33.e00 = t006; mat33.e01 = t016; mat33.e02 = t026; mat33.e10 = t106; mat33.e11 = t116; mat33.e12 = t126; mat33.e20 = t206; mat33.e21 = t216; mat33.e22 = t226; if(_this46.sizeMat3 == _this46.stackMat3.length) { var newLength13 = _this46.sizeMat3 << 1; var this14 = new Array(newLength13); var newArray13 = this14; var _g23 = 0; var _g113 = _this46.sizeMat3; while(_g23 < _g113) { var i13 = _g23++; newArray13[i13] = _this46.stackMat3[i13]; _this46.stackMat3[i13] = null; } _this46.stackMat3 = newArray13; } _this46.stackMat3[_this46.sizeMat3++] = mat33; } if(mat43 != null) { var t007 = 1; var t017 = 0; var t027 = 0; var t033 = 0; var t107 = 0; var t117 = 1; var t127 = 0; var t133 = 0; var t207 = 0; var t217 = 0; var t227 = 1; var t233 = 0; var t303 = 0; var t313 = 0; var t323 = 0; var t333 = 1; mat43.e00 = t007; mat43.e01 = t017; mat43.e02 = t027; mat43.e03 = t033; mat43.e10 = t107; mat43.e11 = t117; mat43.e12 = t127; mat43.e13 = t133; mat43.e20 = t207; mat43.e21 = t217; mat43.e22 = t227; mat43.e23 = t233; mat43.e30 = t303; mat43.e31 = t313; mat43.e32 = t323; mat43.e33 = t333; if(_this46.sizeMat4 == _this46.stackMat4.length) { var newLength14 = _this46.sizeMat4 << 1; var this15 = new Array(newLength14); var newArray14 = this15; var _g24 = 0; var _g114 = _this46.sizeMat4; while(_g24 < _g114) { var i14 = _g24++; newArray14[i14] = _this46.stackMat4[i14]; _this46.stackMat4[i14] = null; } _this46.stackMat4 = newArray14; } _this46.stackMat4[_this46.sizeMat4++] = mat43; } if(quat3 != null) { var tx21 = 0; var ty21 = 0; var tz21 = 0; var tw3 = 1; quat3.x = tx21; quat3.y = ty21; quat3.z = tz21; quat3.w = tw3; if(_this46.sizeQuat == _this46.stackQuat.length) { var newLength15 = _this46.sizeQuat << 1; var this16 = new Array(newLength15); var newArray15 = this16; var _g25 = 0; var _g115 = _this46.sizeQuat; while(_g25 < _g115) { var i15 = _g25++; newArray15[i15] = _this46.stackQuat[i15]; _this46.stackQuat[i15] = null; } _this46.stackQuat = newArray15; } _this46.stackQuat[_this46.sizeQuat++] = quat3; } var _this47 = this.p; var mat34 = null; var mat44 = null; var quat4 = null; if(bottom1 != null) { bottom1.zero(); if(_this47.sizeVec3 == _this47.stackVec3.length) { var newLength16 = _this47.sizeVec3 << 1; var this17 = new Array(newLength16); var newArray16 = this17; var _g26 = 0; var _g116 = _this47.sizeVec3; while(_g26 < _g116) { var i16 = _g26++; newArray16[i16] = _this47.stackVec3[i16]; _this47.stackVec3[i16] = null; } _this47.stackVec3 = newArray16; } _this47.stackVec3[_this47.sizeVec3++] = bottom1; } if(mat34 != null) { var t008 = 1; var t018 = 0; var t028 = 0; var t108 = 0; var t118 = 1; var t128 = 0; var t208 = 0; var t218 = 0; var t228 = 1; mat34.e00 = t008; mat34.e01 = t018; mat34.e02 = t028; mat34.e10 = t108; mat34.e11 = t118; mat34.e12 = t128; mat34.e20 = t208; mat34.e21 = t218; mat34.e22 = t228; if(_this47.sizeMat3 == _this47.stackMat3.length) { var newLength17 = _this47.sizeMat3 << 1; var this18 = new Array(newLength17); var newArray17 = this18; var _g27 = 0; var _g117 = _this47.sizeMat3; while(_g27 < _g117) { var i17 = _g27++; newArray17[i17] = _this47.stackMat3[i17]; _this47.stackMat3[i17] = null; } _this47.stackMat3 = newArray17; } _this47.stackMat3[_this47.sizeMat3++] = mat34; } if(mat44 != null) { var t009 = 1; var t019 = 0; var t029 = 0; var t034 = 0; var t109 = 0; var t119 = 1; var t129 = 0; var t134 = 0; var t209 = 0; var t219 = 0; var t229 = 1; var t234 = 0; var t304 = 0; var t314 = 0; var t324 = 0; var t334 = 1; mat44.e00 = t009; mat44.e01 = t019; mat44.e02 = t029; mat44.e03 = t034; mat44.e10 = t109; mat44.e11 = t119; mat44.e12 = t129; mat44.e13 = t134; mat44.e20 = t209; mat44.e21 = t219; mat44.e22 = t229; mat44.e23 = t234; mat44.e30 = t304; mat44.e31 = t314; mat44.e32 = t324; mat44.e33 = t334; if(_this47.sizeMat4 == _this47.stackMat4.length) { var newLength18 = _this47.sizeMat4 << 1; var this19 = new Array(newLength18); var newArray18 = this19; var _g28 = 0; var _g118 = _this47.sizeMat4; while(_g28 < _g118) { var i18 = _g28++; newArray18[i18] = _this47.stackMat4[i18]; _this47.stackMat4[i18] = null; } _this47.stackMat4 = newArray18; } _this47.stackMat4[_this47.sizeMat4++] = mat44; } if(quat4 != null) { var tx22 = 0; var ty22 = 0; var tz22 = 0; var tw4 = 1; quat4.x = tx22; quat4.y = ty22; quat4.z = tz22; quat4.w = tw4; if(_this47.sizeQuat == _this47.stackQuat.length) { var newLength19 = _this47.sizeQuat << 1; var this20 = new Array(newLength19); var newArray19 = this20; var _g29 = 0; var _g119 = _this47.sizeQuat; while(_g29 < _g119) { var i19 = _g29++; newArray19[i19] = _this47.stackQuat[i19]; _this47.stackQuat[i19] = null; } _this47.stackQuat = newArray19; } _this47.stackQuat[_this47.sizeQuat++] = quat4; } var _this48 = this.p; var mat35 = null; var mat45 = null; var quat5 = null; if(bottom2 != null) { bottom2.zero(); if(_this48.sizeVec3 == _this48.stackVec3.length) { var newLength20 = _this48.sizeVec3 << 1; var this21 = new Array(newLength20); var newArray20 = this21; var _g30 = 0; var _g120 = _this48.sizeVec3; while(_g30 < _g120) { var i20 = _g30++; newArray20[i20] = _this48.stackVec3[i20]; _this48.stackVec3[i20] = null; } _this48.stackVec3 = newArray20; } _this48.stackVec3[_this48.sizeVec3++] = bottom2; } if(mat35 != null) { var t0010 = 1; var t0110 = 0; var t0210 = 0; var t1010 = 0; var t1110 = 1; var t1210 = 0; var t2010 = 0; var t2110 = 0; var t2210 = 1; mat35.e00 = t0010; mat35.e01 = t0110; mat35.e02 = t0210; mat35.e10 = t1010; mat35.e11 = t1110; mat35.e12 = t1210; mat35.e20 = t2010; mat35.e21 = t2110; mat35.e22 = t2210; if(_this48.sizeMat3 == _this48.stackMat3.length) { var newLength21 = _this48.sizeMat3 << 1; var this22 = new Array(newLength21); var newArray21 = this22; var _g31 = 0; var _g121 = _this48.sizeMat3; while(_g31 < _g121) { var i21 = _g31++; newArray21[i21] = _this48.stackMat3[i21]; _this48.stackMat3[i21] = null; } _this48.stackMat3 = newArray21; } _this48.stackMat3[_this48.sizeMat3++] = mat35; } if(mat45 != null) { var t0011 = 1; var t0111 = 0; var t0211 = 0; var t035 = 0; var t1011 = 0; var t1111 = 1; var t1211 = 0; var t135 = 0; var t2011 = 0; var t2111 = 0; var t2211 = 1; var t235 = 0; var t305 = 0; var t315 = 0; var t325 = 0; var t335 = 1; mat45.e00 = t0011; mat45.e01 = t0111; mat45.e02 = t0211; mat45.e03 = t035; mat45.e10 = t1011; mat45.e11 = t1111; mat45.e12 = t1211; mat45.e13 = t135; mat45.e20 = t2011; mat45.e21 = t2111; mat45.e22 = t2211; mat45.e23 = t235; mat45.e30 = t305; mat45.e31 = t315; mat45.e32 = t325; mat45.e33 = t335; if(_this48.sizeMat4 == _this48.stackMat4.length) { var newLength22 = _this48.sizeMat4 << 1; var this23 = new Array(newLength22); var newArray22 = this23; var _g32 = 0; var _g122 = _this48.sizeMat4; while(_g32 < _g122) { var i22 = _g32++; newArray22[i22] = _this48.stackMat4[i22]; _this48.stackMat4[i22] = null; } _this48.stackMat4 = newArray22; } _this48.stackMat4[_this48.sizeMat4++] = mat45; } if(quat5 != null) { var tx23 = 0; var ty23 = 0; var tz23 = 0; var tw5 = 1; quat5.x = tx23; quat5.y = ty23; quat5.z = tz23; quat5.w = tw5; if(_this48.sizeQuat == _this48.stackQuat.length) { var newLength23 = _this48.sizeQuat << 1; var this24 = new Array(newLength23); var newArray23 = this24; var _g33 = 0; var _g123 = _this48.sizeQuat; while(_g33 < _g123) { var i23 = _g33++; newArray23[i23] = _this48.stackQuat[i23]; _this48.stackQuat[i23] = null; } _this48.stackQuat = newArray23; } _this48.stackQuat[_this48.sizeQuat++] = quat5; } var _this49 = this.p; var mat36 = null; var mat46 = null; var quat6 = null; if(bottom3 != null) { bottom3.zero(); if(_this49.sizeVec3 == _this49.stackVec3.length) { var newLength24 = _this49.sizeVec3 << 1; var this25 = new Array(newLength24); var newArray24 = this25; var _g34 = 0; var _g124 = _this49.sizeVec3; while(_g34 < _g124) { var i24 = _g34++; newArray24[i24] = _this49.stackVec3[i24]; _this49.stackVec3[i24] = null; } _this49.stackVec3 = newArray24; } _this49.stackVec3[_this49.sizeVec3++] = bottom3; } if(mat36 != null) { var t0012 = 1; var t0112 = 0; var t0212 = 0; var t1012 = 0; var t1112 = 1; var t1212 = 0; var t2012 = 0; var t2112 = 0; var t2212 = 1; mat36.e00 = t0012; mat36.e01 = t0112; mat36.e02 = t0212; mat36.e10 = t1012; mat36.e11 = t1112; mat36.e12 = t1212; mat36.e20 = t2012; mat36.e21 = t2112; mat36.e22 = t2212; if(_this49.sizeMat3 == _this49.stackMat3.length) { var newLength25 = _this49.sizeMat3 << 1; var this26 = new Array(newLength25); var newArray25 = this26; var _g35 = 0; var _g125 = _this49.sizeMat3; while(_g35 < _g125) { var i25 = _g35++; newArray25[i25] = _this49.stackMat3[i25]; _this49.stackMat3[i25] = null; } _this49.stackMat3 = newArray25; } _this49.stackMat3[_this49.sizeMat3++] = mat36; } if(mat46 != null) { var t0013 = 1; var t0113 = 0; var t0213 = 0; var t036 = 0; var t1013 = 0; var t1113 = 1; var t1213 = 0; var t136 = 0; var t2013 = 0; var t2113 = 0; var t2213 = 1; var t236 = 0; var t306 = 0; var t316 = 0; var t326 = 0; var t336 = 1; mat46.e00 = t0013; mat46.e01 = t0113; mat46.e02 = t0213; mat46.e03 = t036; mat46.e10 = t1013; mat46.e11 = t1113; mat46.e12 = t1213; mat46.e13 = t136; mat46.e20 = t2013; mat46.e21 = t2113; mat46.e22 = t2213; mat46.e23 = t236; mat46.e30 = t306; mat46.e31 = t316; mat46.e32 = t326; mat46.e33 = t336; if(_this49.sizeMat4 == _this49.stackMat4.length) { var newLength26 = _this49.sizeMat4 << 1; var this27 = new Array(newLength26); var newArray26 = this27; var _g36 = 0; var _g126 = _this49.sizeMat4; while(_g36 < _g126) { var i26 = _g36++; newArray26[i26] = _this49.stackMat4[i26]; _this49.stackMat4[i26] = null; } _this49.stackMat4 = newArray26; } _this49.stackMat4[_this49.sizeMat4++] = mat46; } if(quat6 != null) { var tx24 = 0; var ty24 = 0; var tz24 = 0; var tw6 = 1; quat6.x = tx24; quat6.y = ty24; quat6.z = tz24; quat6.w = tw6; if(_this49.sizeQuat == _this49.stackQuat.length) { var newLength27 = _this49.sizeQuat << 1; var this28 = new Array(newLength27); var newArray27 = this28; var _g37 = 0; var _g127 = _this49.sizeQuat; while(_g37 < _g127) { var i27 = _g37++; newArray27[i27] = _this49.stackQuat[i27]; _this49.stackQuat[i27] = null; } _this49.stackQuat = newArray27; } _this49.stackQuat[_this49.sizeQuat++] = quat6; } var _this50 = this.p; var mat37 = null; var mat47 = null; var quat7 = null; if(bottom4 != null) { bottom4.zero(); if(_this50.sizeVec3 == _this50.stackVec3.length) { var newLength28 = _this50.sizeVec3 << 1; var this29 = new Array(newLength28); var newArray28 = this29; var _g38 = 0; var _g128 = _this50.sizeVec3; while(_g38 < _g128) { var i28 = _g38++; newArray28[i28] = _this50.stackVec3[i28]; _this50.stackVec3[i28] = null; } _this50.stackVec3 = newArray28; } _this50.stackVec3[_this50.sizeVec3++] = bottom4; } if(mat37 != null) { var t0014 = 1; var t0114 = 0; var t0214 = 0; var t1014 = 0; var t1114 = 1; var t1214 = 0; var t2014 = 0; var t2114 = 0; var t2214 = 1; mat37.e00 = t0014; mat37.e01 = t0114; mat37.e02 = t0214; mat37.e10 = t1014; mat37.e11 = t1114; mat37.e12 = t1214; mat37.e20 = t2014; mat37.e21 = t2114; mat37.e22 = t2214; if(_this50.sizeMat3 == _this50.stackMat3.length) { var newLength29 = _this50.sizeMat3 << 1; var this30 = new Array(newLength29); var newArray29 = this30; var _g39 = 0; var _g129 = _this50.sizeMat3; while(_g39 < _g129) { var i29 = _g39++; newArray29[i29] = _this50.stackMat3[i29]; _this50.stackMat3[i29] = null; } _this50.stackMat3 = newArray29; } _this50.stackMat3[_this50.sizeMat3++] = mat37; } if(mat47 != null) { var t0015 = 1; var t0115 = 0; var t0215 = 0; var t037 = 0; var t1015 = 0; var t1115 = 1; var t1215 = 0; var t137 = 0; var t2015 = 0; var t2115 = 0; var t2215 = 1; var t237 = 0; var t307 = 0; var t317 = 0; var t327 = 0; var t337 = 1; mat47.e00 = t0015; mat47.e01 = t0115; mat47.e02 = t0215; mat47.e03 = t037; mat47.e10 = t1015; mat47.e11 = t1115; mat47.e12 = t1215; mat47.e13 = t137; mat47.e20 = t2015; mat47.e21 = t2115; mat47.e22 = t2215; mat47.e23 = t237; mat47.e30 = t307; mat47.e31 = t317; mat47.e32 = t327; mat47.e33 = t337; if(_this50.sizeMat4 == _this50.stackMat4.length) { var newLength30 = _this50.sizeMat4 << 1; var this31 = new Array(newLength30); var newArray30 = this31; var _g40 = 0; var _g130 = _this50.sizeMat4; while(_g40 < _g130) { var i30 = _g40++; newArray30[i30] = _this50.stackMat4[i30]; _this50.stackMat4[i30] = null; } _this50.stackMat4 = newArray30; } _this50.stackMat4[_this50.sizeMat4++] = mat47; } if(quat7 != null) { var tx25 = 0; var ty25 = 0; var tz25 = 0; var tw7 = 1; quat7.x = tx25; quat7.y = ty25; quat7.z = tz25; quat7.w = tw7; if(_this50.sizeQuat == _this50.stackQuat.length) { var newLength31 = _this50.sizeQuat << 1; var this32 = new Array(newLength31); var newArray31 = this32; var _g41 = 0; var _g131 = _this50.sizeQuat; while(_g41 < _g131) { var i31 = _g41++; newArray31[i31] = _this50.stackQuat[i31]; _this50.stackQuat[i31] = null; } _this50.stackQuat = newArray31; } _this50.stackQuat[_this50.sizeQuat++] = quat7; } } else { var _g42 = 0; while(_g42 < 8) { var i32 = _g42++; var _this51 = this.tmpCircleNorms[i32]; var v1 = this.circleCoords[i32]; _this51.x = v1.x; _this51.y = v1.y; _this51.z = v1.z; var _this52 = _this51; var tx26 = _this52.x * m.e00 + _this52.y * m.e01 + _this52.z * m.e02; var ty26 = _this52.x * m.e10 + _this52.y * m.e11 + _this52.z * m.e12; var tz26 = _this52.x * m.e20 + _this52.y * m.e21 + _this52.z * m.e22; _this52.x = tx26; _this52.y = ty26; _this52.z = tz26; var _this53 = this.tmpCircleVerts1[i32]; var v2 = this.tmpCircleNorms[i32]; _this53.x = v2.x; _this53.y = v2.y; _this53.z = v2.z; var _this54 = _this53; var tx27 = _this54.x * radius; var ty27 = _this54.y * radius; var tz27 = _this54.z * radius; _this54.x = tx27; _this54.y = ty27; _this54.z = tz27; var _this55 = _this54; var tx28 = _this55.x + o.x; var ty28 = _this55.y + o.y; var tz28 = _this55.z + o.z; _this55.x = tx28; _this55.y = ty28; _this55.z = tz28; var _this56 = this.tmpCircleVerts2[i32]; var v3 = this.tmpCircleVerts1[i32]; _this56.x = v3.x; _this56.y = v3.y; _this56.z = v3.z; var _this57 = this.tmpCircleVerts1[i32]; var tx29 = _this57.x + ey.x * halfHeight; var ty29 = _this57.y + ey.y * halfHeight; var tz29 = _this57.z + ey.z * halfHeight; _this57.x = tx29; _this57.y = ty29; _this57.z = tz29; var _this58 = this.tmpCircleVerts2[i32]; var s5 = -halfHeight; var tx30 = _this58.x + ey.x * s5; var ty30 = _this58.y + ey.y * s5; var tz30 = _this58.z + ey.z * s5; _this58.x = tx30; _this58.y = ty30; _this58.z = tz30; } var _g132 = 0; while(_g132 < 8) { var i33 = _g132++; var n3; var n4; var v11 = top; var v21 = this.tmpCircleVerts1[i33]; var v31 = this.tmpCircleVerts1[(i33 + 1) % 8]; var n1 = ey; this.triangle(v11,v21,v31,n1,n1,n1,color); v11 = bottom; v21 = this.tmpCircleVerts2[(i33 + 1) % 8]; v31 = this.tmpCircleVerts2[i33]; var _this59 = this.p; var _this60 = _this59.sizeVec3 == 0 ? new oimo.common.Vec3() : _this59.stackVec3[--_this59.sizeVec3]; _this60.x = ey.x; _this60.y = ey.y; _this60.z = ey.z; var _this61 = _this60; var tx31 = -_this61.x; var ty31 = -_this61.y; var tz31 = -_this61.z; _this61.x = tx31; _this61.y = ty31; _this61.z = tz31; n1 = _this61; this.triangle(v11,v21,v31,n1,n1,n1,color); var _this62 = this.p; var mat38 = null; var mat48 = null; var quat8 = null; if(n1 != null) { n1.zero(); if(_this62.sizeVec3 == _this62.stackVec3.length) { var newLength32 = _this62.sizeVec3 << 1; var this33 = new Array(newLength32); var newArray32 = this33; var _g43 = 0; var _g133 = _this62.sizeVec3; while(_g43 < _g133) { var i34 = _g43++; newArray32[i34] = _this62.stackVec3[i34]; _this62.stackVec3[i34] = null; } _this62.stackVec3 = newArray32; } _this62.stackVec3[_this62.sizeVec3++] = n1; } if(mat38 != null) { var t0016 = 1; var t0116 = 0; var t0216 = 0; var t1016 = 0; var t1116 = 1; var t1216 = 0; var t2016 = 0; var t2116 = 0; var t2216 = 1; mat38.e00 = t0016; mat38.e01 = t0116; mat38.e02 = t0216; mat38.e10 = t1016; mat38.e11 = t1116; mat38.e12 = t1216; mat38.e20 = t2016; mat38.e21 = t2116; mat38.e22 = t2216; if(_this62.sizeMat3 == _this62.stackMat3.length) { var newLength33 = _this62.sizeMat3 << 1; var this34 = new Array(newLength33); var newArray33 = this34; var _g44 = 0; var _g134 = _this62.sizeMat3; while(_g44 < _g134) { var i35 = _g44++; newArray33[i35] = _this62.stackMat3[i35]; _this62.stackMat3[i35] = null; } _this62.stackMat3 = newArray33; } _this62.stackMat3[_this62.sizeMat3++] = mat38; } if(mat48 != null) { var t0017 = 1; var t0117 = 0; var t0217 = 0; var t038 = 0; var t1017 = 0; var t1117 = 1; var t1217 = 0; var t138 = 0; var t2017 = 0; var t2117 = 0; var t2217 = 1; var t238 = 0; var t308 = 0; var t318 = 0; var t328 = 0; var t338 = 1; mat48.e00 = t0017; mat48.e01 = t0117; mat48.e02 = t0217; mat48.e03 = t038; mat48.e10 = t1017; mat48.e11 = t1117; mat48.e12 = t1217; mat48.e13 = t138; mat48.e20 = t2017; mat48.e21 = t2117; mat48.e22 = t2217; mat48.e23 = t238; mat48.e30 = t308; mat48.e31 = t318; mat48.e32 = t328; mat48.e33 = t338; if(_this62.sizeMat4 == _this62.stackMat4.length) { var newLength34 = _this62.sizeMat4 << 1; var this35 = new Array(newLength34); var newArray34 = this35; var _g45 = 0; var _g135 = _this62.sizeMat4; while(_g45 < _g135) { var i36 = _g45++; newArray34[i36] = _this62.stackMat4[i36]; _this62.stackMat4[i36] = null; } _this62.stackMat4 = newArray34; } _this62.stackMat4[_this62.sizeMat4++] = mat48; } if(quat8 != null) { var tx32 = 0; var ty32 = 0; var tz32 = 0; var tw8 = 1; quat8.x = tx32; quat8.y = ty32; quat8.z = tz32; quat8.w = tw8; if(_this62.sizeQuat == _this62.stackQuat.length) { var newLength35 = _this62.sizeQuat << 1; var this36 = new Array(newLength35); var newArray35 = this36; var _g46 = 0; var _g136 = _this62.sizeQuat; while(_g46 < _g136) { var i37 = _g46++; newArray35[i37] = _this62.stackQuat[i37]; _this62.stackQuat[i37] = null; } _this62.stackQuat = newArray35; } _this62.stackQuat[_this62.sizeQuat++] = quat8; } v11 = this.tmpCircleVerts1[i33]; v21 = this.tmpCircleVerts2[i33]; v31 = this.tmpCircleVerts2[(i33 + 1) % 8]; var v4 = this.tmpCircleVerts1[(i33 + 1) % 8]; n1 = this.tmpCircleNorms[i33]; var n2 = this.tmpCircleNorms[(i33 + 1) % 8]; this.rect(v11,v21,v31,v4,n1,n1,n2,n2,color); } } var _this63 = this.p; var mat39 = null; var mat49 = null; var quat9 = null; if(top != null) { top.zero(); if(_this63.sizeVec3 == _this63.stackVec3.length) { var newLength36 = _this63.sizeVec3 << 1; var this37 = new Array(newLength36); var newArray36 = this37; var _g47 = 0; var _g137 = _this63.sizeVec3; while(_g47 < _g137) { var i38 = _g47++; newArray36[i38] = _this63.stackVec3[i38]; _this63.stackVec3[i38] = null; } _this63.stackVec3 = newArray36; } _this63.stackVec3[_this63.sizeVec3++] = top; } if(mat39 != null) { var t0018 = 1; var t0118 = 0; var t0218 = 0; var t1018 = 0; var t1118 = 1; var t1218 = 0; var t2018 = 0; var t2118 = 0; var t2218 = 1; mat39.e00 = t0018; mat39.e01 = t0118; mat39.e02 = t0218; mat39.e10 = t1018; mat39.e11 = t1118; mat39.e12 = t1218; mat39.e20 = t2018; mat39.e21 = t2118; mat39.e22 = t2218; if(_this63.sizeMat3 == _this63.stackMat3.length) { var newLength37 = _this63.sizeMat3 << 1; var this38 = new Array(newLength37); var newArray37 = this38; var _g48 = 0; var _g138 = _this63.sizeMat3; while(_g48 < _g138) { var i39 = _g48++; newArray37[i39] = _this63.stackMat3[i39]; _this63.stackMat3[i39] = null; } _this63.stackMat3 = newArray37; } _this63.stackMat3[_this63.sizeMat3++] = mat39; } if(mat49 != null) { var t0019 = 1; var t0119 = 0; var t0219 = 0; var t039 = 0; var t1019 = 0; var t1119 = 1; var t1219 = 0; var t139 = 0; var t2019 = 0; var t2119 = 0; var t2219 = 1; var t239 = 0; var t309 = 0; var t319 = 0; var t329 = 0; var t339 = 1; mat49.e00 = t0019; mat49.e01 = t0119; mat49.e02 = t0219; mat49.e03 = t039; mat49.e10 = t1019; mat49.e11 = t1119; mat49.e12 = t1219; mat49.e13 = t139; mat49.e20 = t2019; mat49.e21 = t2119; mat49.e22 = t2219; mat49.e23 = t239; mat49.e30 = t309; mat49.e31 = t319; mat49.e32 = t329; mat49.e33 = t339; if(_this63.sizeMat4 == _this63.stackMat4.length) { var newLength38 = _this63.sizeMat4 << 1; var this39 = new Array(newLength38); var newArray38 = this39; var _g49 = 0; var _g139 = _this63.sizeMat4; while(_g49 < _g139) { var i40 = _g49++; newArray38[i40] = _this63.stackMat4[i40]; _this63.stackMat4[i40] = null; } _this63.stackMat4 = newArray38; } _this63.stackMat4[_this63.sizeMat4++] = mat49; } if(quat9 != null) { var tx33 = 0; var ty33 = 0; var tz33 = 0; var tw9 = 1; quat9.x = tx33; quat9.y = ty33; quat9.z = tz33; quat9.w = tw9; if(_this63.sizeQuat == _this63.stackQuat.length) { var newLength39 = _this63.sizeQuat << 1; var this40 = new Array(newLength39); var newArray39 = this40; var _g50 = 0; var _g140 = _this63.sizeQuat; while(_g50 < _g140) { var i41 = _g50++; newArray39[i41] = _this63.stackQuat[i41]; _this63.stackQuat[i41] = null; } _this63.stackQuat = newArray39; } _this63.stackQuat[_this63.sizeQuat++] = quat9; } var _this64 = this.p; var mat310 = null; var mat410 = null; var quat10 = null; if(bottom != null) { bottom.zero(); if(_this64.sizeVec3 == _this64.stackVec3.length) { var newLength40 = _this64.sizeVec3 << 1; var this41 = new Array(newLength40); var newArray40 = this41; var _g51 = 0; var _g141 = _this64.sizeVec3; while(_g51 < _g141) { var i42 = _g51++; newArray40[i42] = _this64.stackVec3[i42]; _this64.stackVec3[i42] = null; } _this64.stackVec3 = newArray40; } _this64.stackVec3[_this64.sizeVec3++] = bottom; } if(mat310 != null) { var t0020 = 1; var t0120 = 0; var t0220 = 0; var t1020 = 0; var t1120 = 1; var t1220 = 0; var t2020 = 0; var t2120 = 0; var t2220 = 1; mat310.e00 = t0020; mat310.e01 = t0120; mat310.e02 = t0220; mat310.e10 = t1020; mat310.e11 = t1120; mat310.e12 = t1220; mat310.e20 = t2020; mat310.e21 = t2120; mat310.e22 = t2220; if(_this64.sizeMat3 == _this64.stackMat3.length) { var newLength41 = _this64.sizeMat3 << 1; var this42 = new Array(newLength41); var newArray41 = this42; var _g52 = 0; var _g142 = _this64.sizeMat3; while(_g52 < _g142) { var i43 = _g52++; newArray41[i43] = _this64.stackMat3[i43]; _this64.stackMat3[i43] = null; } _this64.stackMat3 = newArray41; } _this64.stackMat3[_this64.sizeMat3++] = mat310; } if(mat410 != null) { var t0021 = 1; var t0121 = 0; var t0221 = 0; var t0310 = 0; var t1021 = 0; var t1121 = 1; var t1221 = 0; var t1310 = 0; var t2021 = 0; var t2121 = 0; var t2221 = 1; var t2310 = 0; var t3010 = 0; var t3110 = 0; var t3210 = 0; var t3310 = 1; mat410.e00 = t0021; mat410.e01 = t0121; mat410.e02 = t0221; mat410.e03 = t0310; mat410.e10 = t1021; mat410.e11 = t1121; mat410.e12 = t1221; mat410.e13 = t1310; mat410.e20 = t2021; mat410.e21 = t2121; mat410.e22 = t2221; mat410.e23 = t2310; mat410.e30 = t3010; mat410.e31 = t3110; mat410.e32 = t3210; mat410.e33 = t3310; if(_this64.sizeMat4 == _this64.stackMat4.length) { var newLength42 = _this64.sizeMat4 << 1; var this43 = new Array(newLength42); var newArray42 = this43; var _g53 = 0; var _g143 = _this64.sizeMat4; while(_g53 < _g143) { var i44 = _g53++; newArray42[i44] = _this64.stackMat4[i44]; _this64.stackMat4[i44] = null; } _this64.stackMat4 = newArray42; } _this64.stackMat4[_this64.sizeMat4++] = mat410; } if(quat10 != null) { var tx34 = 0; var ty34 = 0; var tz34 = 0; var tw10 = 1; quat10.x = tx34; quat10.y = ty34; quat10.z = tz34; quat10.w = tw10; if(_this64.sizeQuat == _this64.stackQuat.length) { var newLength43 = _this64.sizeQuat << 1; var this44 = new Array(newLength43); var newArray43 = this44; var _g54 = 0; var _g144 = _this64.sizeQuat; while(_g54 < _g144) { var i45 = _g54++; newArray43[i45] = _this64.stackQuat[i45]; _this64.stackQuat[i45] = null; } _this64.stackQuat = newArray43; } _this64.stackQuat[_this64.sizeQuat++] = quat10; } var _this65 = this.p; var mat311 = null; var mat411 = null; var quat11 = null; if(o != null) { o.zero(); if(_this65.sizeVec3 == _this65.stackVec3.length) { var newLength44 = _this65.sizeVec3 << 1; var this45 = new Array(newLength44); var newArray44 = this45; var _g55 = 0; var _g145 = _this65.sizeVec3; while(_g55 < _g145) { var i46 = _g55++; newArray44[i46] = _this65.stackVec3[i46]; _this65.stackVec3[i46] = null; } _this65.stackVec3 = newArray44; } _this65.stackVec3[_this65.sizeVec3++] = o; } if(mat311 != null) { var t0022 = 1; var t0122 = 0; var t0222 = 0; var t1022 = 0; var t1122 = 1; var t1222 = 0; var t2022 = 0; var t2122 = 0; var t2222 = 1; mat311.e00 = t0022; mat311.e01 = t0122; mat311.e02 = t0222; mat311.e10 = t1022; mat311.e11 = t1122; mat311.e12 = t1222; mat311.e20 = t2022; mat311.e21 = t2122; mat311.e22 = t2222; if(_this65.sizeMat3 == _this65.stackMat3.length) { var newLength45 = _this65.sizeMat3 << 1; var this46 = new Array(newLength45); var newArray45 = this46; var _g56 = 0; var _g146 = _this65.sizeMat3; while(_g56 < _g146) { var i47 = _g56++; newArray45[i47] = _this65.stackMat3[i47]; _this65.stackMat3[i47] = null; } _this65.stackMat3 = newArray45; } _this65.stackMat3[_this65.sizeMat3++] = mat311; } if(mat411 != null) { var t0023 = 1; var t0123 = 0; var t0223 = 0; var t0311 = 0; var t1023 = 0; var t1123 = 1; var t1223 = 0; var t1311 = 0; var t2023 = 0; var t2123 = 0; var t2223 = 1; var t2311 = 0; var t3011 = 0; var t3111 = 0; var t3211 = 0; var t3311 = 1; mat411.e00 = t0023; mat411.e01 = t0123; mat411.e02 = t0223; mat411.e03 = t0311; mat411.e10 = t1023; mat411.e11 = t1123; mat411.e12 = t1223; mat411.e13 = t1311; mat411.e20 = t2023; mat411.e21 = t2123; mat411.e22 = t2223; mat411.e23 = t2311; mat411.e30 = t3011; mat411.e31 = t3111; mat411.e32 = t3211; mat411.e33 = t3311; if(_this65.sizeMat4 == _this65.stackMat4.length) { var newLength46 = _this65.sizeMat4 << 1; var this47 = new Array(newLength46); var newArray46 = this47; var _g57 = 0; var _g147 = _this65.sizeMat4; while(_g57 < _g147) { var i48 = _g57++; newArray46[i48] = _this65.stackMat4[i48]; _this65.stackMat4[i48] = null; } _this65.stackMat4 = newArray46; } _this65.stackMat4[_this65.sizeMat4++] = mat411; } if(quat11 != null) { var tx35 = 0; var ty35 = 0; var tz35 = 0; var tw11 = 1; quat11.x = tx35; quat11.y = ty35; quat11.z = tz35; quat11.w = tw11; if(_this65.sizeQuat == _this65.stackQuat.length) { var newLength47 = _this65.sizeQuat << 1; var this48 = new Array(newLength47); var newArray47 = this48; var _g58 = 0; var _g148 = _this65.sizeQuat; while(_g58 < _g148) { var i49 = _g58++; newArray47[i49] = _this65.stackQuat[i49]; _this65.stackQuat[i49] = null; } _this65.stackQuat = newArray47; } _this65.stackQuat[_this65.sizeQuat++] = quat11; } var _this66 = this.p; var vec3 = null; var mat412 = null; var quat12 = null; if(vec3 != null) { vec3.zero(); if(_this66.sizeVec3 == _this66.stackVec3.length) { var newLength48 = _this66.sizeVec3 << 1; var this49 = new Array(newLength48); var newArray48 = this49; var _g59 = 0; var _g149 = _this66.sizeVec3; while(_g59 < _g149) { var i50 = _g59++; newArray48[i50] = _this66.stackVec3[i50]; _this66.stackVec3[i50] = null; } _this66.stackVec3 = newArray48; } _this66.stackVec3[_this66.sizeVec3++] = vec3; } if(m != null) { var t0024 = 1; var t0124 = 0; var t0224 = 0; var t1024 = 0; var t1124 = 1; var t1224 = 0; var t2024 = 0; var t2124 = 0; var t2224 = 1; m.e00 = t0024; m.e01 = t0124; m.e02 = t0224; m.e10 = t1024; m.e11 = t1124; m.e12 = t1224; m.e20 = t2024; m.e21 = t2124; m.e22 = t2224; if(_this66.sizeMat3 == _this66.stackMat3.length) { var newLength49 = _this66.sizeMat3 << 1; var this50 = new Array(newLength49); var newArray49 = this50; var _g60 = 0; var _g150 = _this66.sizeMat3; while(_g60 < _g150) { var i51 = _g60++; newArray49[i51] = _this66.stackMat3[i51]; _this66.stackMat3[i51] = null; } _this66.stackMat3 = newArray49; } _this66.stackMat3[_this66.sizeMat3++] = m; } if(mat412 != null) { var t0025 = 1; var t0125 = 0; var t0225 = 0; var t0312 = 0; var t1025 = 0; var t1125 = 1; var t1225 = 0; var t1312 = 0; var t2025 = 0; var t2125 = 0; var t2225 = 1; var t2312 = 0; var t3012 = 0; var t3112 = 0; var t3212 = 0; var t3312 = 1; mat412.e00 = t0025; mat412.e01 = t0125; mat412.e02 = t0225; mat412.e03 = t0312; mat412.e10 = t1025; mat412.e11 = t1125; mat412.e12 = t1225; mat412.e13 = t1312; mat412.e20 = t2025; mat412.e21 = t2125; mat412.e22 = t2225; mat412.e23 = t2312; mat412.e30 = t3012; mat412.e31 = t3112; mat412.e32 = t3212; mat412.e33 = t3312; if(_this66.sizeMat4 == _this66.stackMat4.length) { var newLength50 = _this66.sizeMat4 << 1; var this51 = new Array(newLength50); var newArray50 = this51; var _g61 = 0; var _g151 = _this66.sizeMat4; while(_g61 < _g151) { var i52 = _g61++; newArray50[i52] = _this66.stackMat4[i52]; _this66.stackMat4[i52] = null; } _this66.stackMat4 = newArray50; } _this66.stackMat4[_this66.sizeMat4++] = mat412; } if(quat12 != null) { var tx36 = 0; var ty36 = 0; var tz36 = 0; var tw12 = 1; quat12.x = tx36; quat12.y = ty36; quat12.z = tz36; quat12.w = tw12; if(_this66.sizeQuat == _this66.stackQuat.length) { var newLength51 = _this66.sizeQuat << 1; var this52 = new Array(newLength51); var newArray51 = this52; var _g62 = 0; var _g152 = _this66.sizeQuat; while(_g62 < _g152) { var i53 = _g62++; newArray51[i53] = _this66.stackQuat[i53]; _this66.stackQuat[i53] = null; } _this66.stackQuat = newArray51; } _this66.stackQuat[_this66.sizeQuat++] = quat12; } var _this67 = this.p; var mat312 = null; var mat413 = null; var quat13 = null; if(ex != null) { ex.zero(); if(_this67.sizeVec3 == _this67.stackVec3.length) { var newLength52 = _this67.sizeVec3 << 1; var this53 = new Array(newLength52); var newArray52 = this53; var _g63 = 0; var _g153 = _this67.sizeVec3; while(_g63 < _g153) { var i54 = _g63++; newArray52[i54] = _this67.stackVec3[i54]; _this67.stackVec3[i54] = null; } _this67.stackVec3 = newArray52; } _this67.stackVec3[_this67.sizeVec3++] = ex; } if(mat312 != null) { var t0026 = 1; var t0126 = 0; var t0226 = 0; var t1026 = 0; var t1126 = 1; var t1226 = 0; var t2026 = 0; var t2126 = 0; var t2226 = 1; mat312.e00 = t0026; mat312.e01 = t0126; mat312.e02 = t0226; mat312.e10 = t1026; mat312.e11 = t1126; mat312.e12 = t1226; mat312.e20 = t2026; mat312.e21 = t2126; mat312.e22 = t2226; if(_this67.sizeMat3 == _this67.stackMat3.length) { var newLength53 = _this67.sizeMat3 << 1; var this54 = new Array(newLength53); var newArray53 = this54; var _g64 = 0; var _g154 = _this67.sizeMat3; while(_g64 < _g154) { var i55 = _g64++; newArray53[i55] = _this67.stackMat3[i55]; _this67.stackMat3[i55] = null; } _this67.stackMat3 = newArray53; } _this67.stackMat3[_this67.sizeMat3++] = mat312; } if(mat413 != null) { var t0027 = 1; var t0127 = 0; var t0227 = 0; var t0313 = 0; var t1027 = 0; var t1127 = 1; var t1227 = 0; var t1313 = 0; var t2027 = 0; var t2127 = 0; var t2227 = 1; var t2313 = 0; var t3013 = 0; var t3113 = 0; var t3213 = 0; var t3313 = 1; mat413.e00 = t0027; mat413.e01 = t0127; mat413.e02 = t0227; mat413.e03 = t0313; mat413.e10 = t1027; mat413.e11 = t1127; mat413.e12 = t1227; mat413.e13 = t1313; mat413.e20 = t2027; mat413.e21 = t2127; mat413.e22 = t2227; mat413.e23 = t2313; mat413.e30 = t3013; mat413.e31 = t3113; mat413.e32 = t3213; mat413.e33 = t3313; if(_this67.sizeMat4 == _this67.stackMat4.length) { var newLength54 = _this67.sizeMat4 << 1; var this55 = new Array(newLength54); var newArray54 = this55; var _g65 = 0; var _g155 = _this67.sizeMat4; while(_g65 < _g155) { var i56 = _g65++; newArray54[i56] = _this67.stackMat4[i56]; _this67.stackMat4[i56] = null; } _this67.stackMat4 = newArray54; } _this67.stackMat4[_this67.sizeMat4++] = mat413; } if(quat13 != null) { var tx37 = 0; var ty37 = 0; var tz37 = 0; var tw13 = 1; quat13.x = tx37; quat13.y = ty37; quat13.z = tz37; quat13.w = tw13; if(_this67.sizeQuat == _this67.stackQuat.length) { var newLength55 = _this67.sizeQuat << 1; var this56 = new Array(newLength55); var newArray55 = this56; var _g66 = 0; var _g156 = _this67.sizeQuat; while(_g66 < _g156) { var i57 = _g66++; newArray55[i57] = _this67.stackQuat[i57]; _this67.stackQuat[i57] = null; } _this67.stackQuat = newArray55; } _this67.stackQuat[_this67.sizeQuat++] = quat13; } var _this68 = this.p; var mat313 = null; var mat414 = null; var quat14 = null; if(ey != null) { ey.zero(); if(_this68.sizeVec3 == _this68.stackVec3.length) { var newLength56 = _this68.sizeVec3 << 1; var this57 = new Array(newLength56); var newArray56 = this57; var _g67 = 0; var _g157 = _this68.sizeVec3; while(_g67 < _g157) { var i58 = _g67++; newArray56[i58] = _this68.stackVec3[i58]; _this68.stackVec3[i58] = null; } _this68.stackVec3 = newArray56; } _this68.stackVec3[_this68.sizeVec3++] = ey; } if(mat313 != null) { var t0028 = 1; var t0128 = 0; var t0228 = 0; var t1028 = 0; var t1128 = 1; var t1228 = 0; var t2028 = 0; var t2128 = 0; var t2228 = 1; mat313.e00 = t0028; mat313.e01 = t0128; mat313.e02 = t0228; mat313.e10 = t1028; mat313.e11 = t1128; mat313.e12 = t1228; mat313.e20 = t2028; mat313.e21 = t2128; mat313.e22 = t2228; if(_this68.sizeMat3 == _this68.stackMat3.length) { var newLength57 = _this68.sizeMat3 << 1; var this58 = new Array(newLength57); var newArray57 = this58; var _g68 = 0; var _g158 = _this68.sizeMat3; while(_g68 < _g158) { var i59 = _g68++; newArray57[i59] = _this68.stackMat3[i59]; _this68.stackMat3[i59] = null; } _this68.stackMat3 = newArray57; } _this68.stackMat3[_this68.sizeMat3++] = mat313; } if(mat414 != null) { var t0029 = 1; var t0129 = 0; var t0229 = 0; var t0314 = 0; var t1029 = 0; var t1129 = 1; var t1229 = 0; var t1314 = 0; var t2029 = 0; var t2129 = 0; var t2229 = 1; var t2314 = 0; var t3014 = 0; var t3114 = 0; var t3214 = 0; var t3314 = 1; mat414.e00 = t0029; mat414.e01 = t0129; mat414.e02 = t0229; mat414.e03 = t0314; mat414.e10 = t1029; mat414.e11 = t1129; mat414.e12 = t1229; mat414.e13 = t1314; mat414.e20 = t2029; mat414.e21 = t2129; mat414.e22 = t2229; mat414.e23 = t2314; mat414.e30 = t3014; mat414.e31 = t3114; mat414.e32 = t3214; mat414.e33 = t3314; if(_this68.sizeMat4 == _this68.stackMat4.length) { var newLength58 = _this68.sizeMat4 << 1; var this59 = new Array(newLength58); var newArray58 = this59; var _g69 = 0; var _g159 = _this68.sizeMat4; while(_g69 < _g159) { var i60 = _g69++; newArray58[i60] = _this68.stackMat4[i60]; _this68.stackMat4[i60] = null; } _this68.stackMat4 = newArray58; } _this68.stackMat4[_this68.sizeMat4++] = mat414; } if(quat14 != null) { var tx38 = 0; var ty38 = 0; var tz38 = 0; var tw14 = 1; quat14.x = tx38; quat14.y = ty38; quat14.z = tz38; quat14.w = tw14; if(_this68.sizeQuat == _this68.stackQuat.length) { var newLength59 = _this68.sizeQuat << 1; var this60 = new Array(newLength59); var newArray59 = this60; var _g70 = 0; var _g160 = _this68.sizeQuat; while(_g70 < _g160) { var i61 = _g70++; newArray59[i61] = _this68.stackQuat[i61]; _this68.stackQuat[i61] = null; } _this68.stackQuat = newArray59; } _this68.stackQuat[_this68.sizeQuat++] = quat14; } var _this69 = this.p; var mat314 = null; var mat415 = null; var quat15 = null; if(ez != null) { ez.zero(); if(_this69.sizeVec3 == _this69.stackVec3.length) { var newLength60 = _this69.sizeVec3 << 1; var this61 = new Array(newLength60); var newArray60 = this61; var _g71 = 0; var _g161 = _this69.sizeVec3; while(_g71 < _g161) { var i62 = _g71++; newArray60[i62] = _this69.stackVec3[i62]; _this69.stackVec3[i62] = null; } _this69.stackVec3 = newArray60; } _this69.stackVec3[_this69.sizeVec3++] = ez; } if(mat314 != null) { var t0030 = 1; var t0130 = 0; var t0230 = 0; var t1030 = 0; var t1130 = 1; var t1230 = 0; var t2030 = 0; var t2130 = 0; var t2230 = 1; mat314.e00 = t0030; mat314.e01 = t0130; mat314.e02 = t0230; mat314.e10 = t1030; mat314.e11 = t1130; mat314.e12 = t1230; mat314.e20 = t2030; mat314.e21 = t2130; mat314.e22 = t2230; if(_this69.sizeMat3 == _this69.stackMat3.length) { var newLength61 = _this69.sizeMat3 << 1; var this62 = new Array(newLength61); var newArray61 = this62; var _g72 = 0; var _g162 = _this69.sizeMat3; while(_g72 < _g162) { var i63 = _g72++; newArray61[i63] = _this69.stackMat3[i63]; _this69.stackMat3[i63] = null; } _this69.stackMat3 = newArray61; } _this69.stackMat3[_this69.sizeMat3++] = mat314; } if(mat415 != null) { var t0031 = 1; var t0131 = 0; var t0231 = 0; var t0315 = 0; var t1031 = 0; var t1131 = 1; var t1231 = 0; var t1315 = 0; var t2031 = 0; var t2131 = 0; var t2231 = 1; var t2315 = 0; var t3015 = 0; var t3115 = 0; var t3215 = 0; var t3315 = 1; mat415.e00 = t0031; mat415.e01 = t0131; mat415.e02 = t0231; mat415.e03 = t0315; mat415.e10 = t1031; mat415.e11 = t1131; mat415.e12 = t1231; mat415.e13 = t1315; mat415.e20 = t2031; mat415.e21 = t2131; mat415.e22 = t2231; mat415.e23 = t2315; mat415.e30 = t3015; mat415.e31 = t3115; mat415.e32 = t3215; mat415.e33 = t3315; if(_this69.sizeMat4 == _this69.stackMat4.length) { var newLength62 = _this69.sizeMat4 << 1; var this63 = new Array(newLength62); var newArray62 = this63; var _g73 = 0; var _g163 = _this69.sizeMat4; while(_g73 < _g163) { var i64 = _g73++; newArray62[i64] = _this69.stackMat4[i64]; _this69.stackMat4[i64] = null; } _this69.stackMat4 = newArray62; } _this69.stackMat4[_this69.sizeMat4++] = mat415; } if(quat15 != null) { var tx39 = 0; var ty39 = 0; var tz39 = 0; var tw15 = 1; quat15.x = tx39; quat15.y = ty39; quat15.z = tz39; quat15.w = tw15; if(_this69.sizeQuat == _this69.stackQuat.length) { var newLength63 = _this69.sizeQuat << 1; var this64 = new Array(newLength63); var newArray63 = this64; var _g74 = 0; var _g164 = _this69.sizeQuat; while(_g74 < _g164) { var i65 = _g74++; newArray63[i65] = _this69.stackQuat[i65]; _this69.stackQuat[i65] = null; } _this69.stackQuat = newArray63; } _this69.stackQuat[_this69.sizeQuat++] = quat15; } } capsule(tf,radius,halfHeight,color) { var _this = this.p; var ex = _this.sizeVec3 == 0 ? new oimo.common.Vec3() : _this.stackVec3[--_this.sizeVec3]; var _this1 = this.p; var ey = _this1.sizeVec3 == 0 ? new oimo.common.Vec3() : _this1.stackVec3[--_this1.sizeVec3]; var _this2 = this.p; var ez = _this2.sizeVec3 == 0 ? new oimo.common.Vec3() : _this2.stackVec3[--_this2.sizeVec3]; var _this3 = this.p; var o = _this3.sizeVec3 == 0 ? new oimo.common.Vec3() : _this3.stackVec3[--_this3.sizeVec3]; var _this4 = this.p; var m = _this4.sizeMat3 == 0 ? new oimo.common.Mat3() : _this4.stackMat3[--_this4.sizeMat3]; var v = o; v.x = tf._positionX; v.y = tf._positionY; v.z = tf._positionZ; var m1 = m; m1.e00 = tf._rotation00; m1.e01 = tf._rotation01; m1.e02 = tf._rotation02; m1.e10 = tf._rotation10; m1.e11 = tf._rotation11; m1.e12 = tf._rotation12; m1.e20 = tf._rotation20; m1.e21 = tf._rotation21; m1.e22 = tf._rotation22; ex.init(m.e00,m.e10,m.e20); ey.init(m.e01,m.e11,m.e21); ez.init(m.e02,m.e12,m.e22); var nt = 4; var np = 8; var vs = this.tmpSphereVerts; var ns = this.tmpSphereNorms; var _g = 0; var _g1 = nt + 1; while(_g < _g1) { var i2 = _g++; var n = this.tmpSphereVerts[i2].length; var _g2 = 0; var _g11 = n; while(_g2 < _g11) { var j2 = _g2++; var _this5 = ns[i2][j2]; var v1 = this.sphereCoords[i2][j2]; _this5.x = v1.x; _this5.y = v1.y; _this5.z = v1.z; var _this6 = _this5; var tx = _this6.x * m.e00 + _this6.y * m.e01 + _this6.z * m.e02; var ty = _this6.x * m.e10 + _this6.y * m.e11 + _this6.z * m.e12; var tz = _this6.x * m.e20 + _this6.y * m.e21 + _this6.z * m.e22; _this6.x = tx; _this6.y = ty; _this6.z = tz; } } var _g21 = 0; var _g3 = nt; while(_g21 < _g3) { var i = _g21++; if(i == 0) { var half = nt >> 1; var _g22 = 0; var _g31 = half + 1; while(_g22 < _g31) { var i21 = _g22++; var n1 = this.tmpSphereVerts[i21].length; var _g23 = 0; var _g32 = n1; while(_g23 < _g32) { var j21 = _g23++; var _this7 = vs[i21][j21]; var v2 = ns[i21][j21]; _this7.x = v2.x; _this7.y = v2.y; _this7.z = v2.z; var _this8 = _this7; var tx1 = _this8.x * radius; var ty1 = _this8.y * radius; var tz1 = _this8.z * radius; _this8.x = tx1; _this8.y = ty1; _this8.z = tz1; var _this9 = _this8; var tx2 = _this9.x + o.x; var ty2 = _this9.y + o.y; var tz2 = _this9.z + o.z; _this9.x = tx2; _this9.y = ty2; _this9.z = tz2; var _this10 = _this9; var tx3 = _this10.x + ey.x * halfHeight; var ty3 = _this10.y + ey.y * halfHeight; var tz3 = _this10.z + ey.z * halfHeight; _this10.x = tx3; _this10.y = ty3; _this10.z = tz3; } } } if(i == nt >> 1) { var half1 = nt >> 1; var _g24 = half1; var _g33 = nt + 1; while(_g24 < _g33) { var i22 = _g24++; var n2 = this.tmpSphereVerts[i22].length; var _g25 = 0; var _g34 = n2; while(_g25 < _g34) { var j22 = _g25++; var _this11 = vs[i22][j22]; var v3 = ns[i22][j22]; _this11.x = v3.x; _this11.y = v3.y; _this11.z = v3.z; var _this12 = _this11; var tx4 = _this12.x * radius; var ty4 = _this12.y * radius; var tz4 = _this12.z * radius; _this12.x = tx4; _this12.y = ty4; _this12.z = tz4; var _this13 = _this12; var tx5 = _this13.x + o.x; var ty5 = _this13.y + o.y; var tz5 = _this13.z + o.z; _this13.x = tx5; _this13.y = ty5; _this13.z = tz5; var _this14 = _this13; var s = -halfHeight; var tx6 = _this14.x + ey.x * s; var ty6 = _this14.y + ey.y * s; var tz6 = _this14.z + ey.z * s; _this14.x = tx6; _this14.y = ty6; _this14.z = tz6; } } } var _g26 = 0; var _g35 = np; while(_g26 < _g35) { var j = _g26++; var v11; var v21; var v31; var v4; var n11; var n21; var n3; var n4; if(i == 0) { if(this.wireframe) { v11 = vs[0][0]; v21 = vs[1][j]; this.line(v11,v21,color); } else { v11 = vs[0][0]; v21 = vs[1][j]; v31 = vs[1][(j + 1) % np]; n11 = ns[0][0]; n21 = ns[1][j]; n3 = ns[1][(j + 1) % np]; this.triangle(v11,v21,v31,n11,n21,n3,color); } } else if(i == nt - 1) { if(this.wireframe) { v11 = vs[nt][0]; v21 = vs[i][(j + 1) % np]; v31 = vs[i][j]; this.line(v11,v21,color); this.line(v21,v31,color); } else { v11 = vs[nt][0]; v21 = vs[i][(j + 1) % np]; v31 = vs[i][j]; n11 = ns[nt][0]; n21 = ns[i][(j + 1) % np]; n3 = ns[i][j]; this.triangle(v11,v21,v31,n11,n21,n3,color); } } else if(this.wireframe) { v11 = vs[i][j]; v21 = vs[i][(j + 1) % np]; v31 = vs[i + 1][j]; this.line(v11,v21,color); this.line(v11,v31,color); } else { v11 = vs[i][j]; v21 = vs[i][(j + 1) % np]; v31 = vs[i + 1][j]; v4 = vs[i + 1][(j + 1) % np]; n11 = ns[i][j]; n21 = ns[i][(j + 1) % np]; n3 = ns[i + 1][j]; n4 = ns[i + 1][(j + 1) % np]; this.rect(v11,v31,v4,v21,n11,n3,n4,n21,color); } } } var _this15 = this.p; var _this16 = _this15.sizeVec3 == 0 ? new oimo.common.Vec3() : _this15.stackVec3[--_this15.sizeVec3]; _this16.x = o.x; _this16.y = o.y; _this16.z = o.z; var _this17 = _this16; var tx7 = _this17.x + ey.x * halfHeight; var ty7 = _this17.y + ey.y * halfHeight; var tz7 = _this17.z + ey.z * halfHeight; _this17.x = tx7; _this17.y = ty7; _this17.z = tz7; var top = _this17; var _this18 = this.p; var _this19 = _this18.sizeVec3 == 0 ? new oimo.common.Vec3() : _this18.stackVec3[--_this18.sizeVec3]; _this19.x = o.x; _this19.y = o.y; _this19.z = o.z; var _this20 = _this19; var s1 = -halfHeight; var tx8 = _this20.x + ey.x * s1; var ty8 = _this20.y + ey.y * s1; var tz8 = _this20.z + ey.z * s1; _this20.x = tx8; _this20.y = ty8; _this20.z = tz8; var bottom = _this20; if(this.wireframe) { var _this21 = this.p; var _this22 = _this21.sizeVec3 == 0 ? new oimo.common.Vec3() : _this21.stackVec3[--_this21.sizeVec3]; _this22.x = top.x; _this22.y = top.y; _this22.z = top.z; var _this23 = _this22; var s2 = -radius; var tx9 = _this23.x + ex.x * s2; var ty9 = _this23.y + ex.y * s2; var tz9 = _this23.z + ex.z * s2; _this23.x = tx9; _this23.y = ty9; _this23.z = tz9; var _this24 = _this23; var tx10 = _this24.x + ez.x * 0; var ty10 = _this24.y + ez.y * 0; var tz10 = _this24.z + ez.z * 0; _this24.x = tx10; _this24.y = ty10; _this24.z = tz10; var top1 = _this24; var _this25 = this.p; var _this26 = _this25.sizeVec3 == 0 ? new oimo.common.Vec3() : _this25.stackVec3[--_this25.sizeVec3]; _this26.x = top.x; _this26.y = top.y; _this26.z = top.z; var _this27 = _this26; var tx11 = _this27.x + ex.x * radius; var ty11 = _this27.y + ex.y * radius; var tz11 = _this27.z + ex.z * radius; _this27.x = tx11; _this27.y = ty11; _this27.z = tz11; var _this28 = _this27; var tx12 = _this28.x + ez.x * 0; var ty12 = _this28.y + ez.y * 0; var tz12 = _this28.z + ez.z * 0; _this28.x = tx12; _this28.y = ty12; _this28.z = tz12; var top2 = _this28; var _this29 = this.p; var _this30 = _this29.sizeVec3 == 0 ? new oimo.common.Vec3() : _this29.stackVec3[--_this29.sizeVec3]; _this30.x = top.x; _this30.y = top.y; _this30.z = top.z; var _this31 = _this30; var tx13 = _this31.x + ex.x * 0; var ty13 = _this31.y + ex.y * 0; var tz13 = _this31.z + ex.z * 0; _this31.x = tx13; _this31.y = ty13; _this31.z = tz13; var _this32 = _this31; var s3 = -radius; var tx14 = _this32.x + ez.x * s3; var ty14 = _this32.y + ez.y * s3; var tz14 = _this32.z + ez.z * s3; _this32.x = tx14; _this32.y = ty14; _this32.z = tz14; var top3 = _this32; var _this33 = this.p; var _this34 = _this33.sizeVec3 == 0 ? new oimo.common.Vec3() : _this33.stackVec3[--_this33.sizeVec3]; _this34.x = top.x; _this34.y = top.y; _this34.z = top.z; var _this35 = _this34; var tx15 = _this35.x + ex.x * 0; var ty15 = _this35.y + ex.y * 0; var tz15 = _this35.z + ex.z * 0; _this35.x = tx15; _this35.y = ty15; _this35.z = tz15; var _this36 = _this35; var tx16 = _this36.x + ez.x * radius; var ty16 = _this36.y + ez.y * radius; var tz16 = _this36.z + ez.z * radius; _this36.x = tx16; _this36.y = ty16; _this36.z = tz16; var top4 = _this36; var _this37 = this.p; var _this38 = _this37.sizeVec3 == 0 ? new oimo.common.Vec3() : _this37.stackVec3[--_this37.sizeVec3]; _this38.x = bottom.x; _this38.y = bottom.y; _this38.z = bottom.z; var _this39 = _this38; var s4 = -radius; var tx17 = _this39.x + ex.x * s4; var ty17 = _this39.y + ex.y * s4; var tz17 = _this39.z + ex.z * s4; _this39.x = tx17; _this39.y = ty17; _this39.z = tz17; var _this40 = _this39; var tx18 = _this40.x + ez.x * 0; var ty18 = _this40.y + ez.y * 0; var tz18 = _this40.z + ez.z * 0; _this40.x = tx18; _this40.y = ty18; _this40.z = tz18; var bottom1 = _this40; var _this41 = this.p; var _this42 = _this41.sizeVec3 == 0 ? new oimo.common.Vec3() : _this41.stackVec3[--_this41.sizeVec3]; _this42.x = bottom.x; _this42.y = bottom.y; _this42.z = bottom.z; var _this43 = _this42; var tx19 = _this43.x + ex.x * radius; var ty19 = _this43.y + ex.y * radius; var tz19 = _this43.z + ex.z * radius; _this43.x = tx19; _this43.y = ty19; _this43.z = tz19; var _this44 = _this43; var tx20 = _this44.x + ez.x * 0; var ty20 = _this44.y + ez.y * 0; var tz20 = _this44.z + ez.z * 0; _this44.x = tx20; _this44.y = ty20; _this44.z = tz20; var bottom2 = _this44; var _this45 = this.p; var _this46 = _this45.sizeVec3 == 0 ? new oimo.common.Vec3() : _this45.stackVec3[--_this45.sizeVec3]; _this46.x = bottom.x; _this46.y = bottom.y; _this46.z = bottom.z; var _this47 = _this46; var tx21 = _this47.x + ex.x * 0; var ty21 = _this47.y + ex.y * 0; var tz21 = _this47.z + ex.z * 0; _this47.x = tx21; _this47.y = ty21; _this47.z = tz21; var _this48 = _this47; var s5 = -radius; var tx22 = _this48.x + ez.x * s5; var ty22 = _this48.y + ez.y * s5; var tz22 = _this48.z + ez.z * s5; _this48.x = tx22; _this48.y = ty22; _this48.z = tz22; var bottom3 = _this48; var _this49 = this.p; var _this50 = _this49.sizeVec3 == 0 ? new oimo.common.Vec3() : _this49.stackVec3[--_this49.sizeVec3]; _this50.x = bottom.x; _this50.y = bottom.y; _this50.z = bottom.z; var _this51 = _this50; var tx23 = _this51.x + ex.x * 0; var ty23 = _this51.y + ex.y * 0; var tz23 = _this51.z + ex.z * 0; _this51.x = tx23; _this51.y = ty23; _this51.z = tz23; var _this52 = _this51; var tx24 = _this52.x + ez.x * radius; var ty24 = _this52.y + ez.y * radius; var tz24 = _this52.z + ez.z * radius; _this52.x = tx24; _this52.y = ty24; _this52.z = tz24; var bottom4 = _this52; this.ellipse(top,ex,ez,radius,radius,color); this.ellipse(bottom,ex,ez,radius,radius,color); this.line(top1,bottom1,color); this.line(top2,bottom2,color); this.line(top3,bottom3,color); this.line(top4,bottom4,color); var _this53 = this.p; var mat3 = null; var mat4 = null; var quat = null; if(top1 != null) { top1.zero(); if(_this53.sizeVec3 == _this53.stackVec3.length) { var newLength = _this53.sizeVec3 << 1; var this1 = new Array(newLength); var newArray = this1; var _g4 = 0; var _g12 = _this53.sizeVec3; while(_g4 < _g12) { var i1 = _g4++; newArray[i1] = _this53.stackVec3[i1]; _this53.stackVec3[i1] = null; } _this53.stackVec3 = newArray; } _this53.stackVec3[_this53.sizeVec3++] = top1; } if(mat3 != null) { var t00 = 1; var t01 = 0; var t02 = 0; var t10 = 0; var t11 = 1; var t12 = 0; var t20 = 0; var t21 = 0; var t22 = 1; mat3.e00 = t00; mat3.e01 = t01; mat3.e02 = t02; mat3.e10 = t10; mat3.e11 = t11; mat3.e12 = t12; mat3.e20 = t20; mat3.e21 = t21; mat3.e22 = t22; if(_this53.sizeMat3 == _this53.stackMat3.length) { var newLength1 = _this53.sizeMat3 << 1; var this2 = new Array(newLength1); var newArray1 = this2; var _g5 = 0; var _g13 = _this53.sizeMat3; while(_g5 < _g13) { var i3 = _g5++; newArray1[i3] = _this53.stackMat3[i3]; _this53.stackMat3[i3] = null; } _this53.stackMat3 = newArray1; } _this53.stackMat3[_this53.sizeMat3++] = mat3; } if(mat4 != null) { var t001 = 1; var t011 = 0; var t021 = 0; var t03 = 0; var t101 = 0; var t111 = 1; var t121 = 0; var t13 = 0; var t201 = 0; var t211 = 0; var t221 = 1; var t23 = 0; var t30 = 0; var t31 = 0; var t32 = 0; var t33 = 1; mat4.e00 = t001; mat4.e01 = t011; mat4.e02 = t021; mat4.e03 = t03; mat4.e10 = t101; mat4.e11 = t111; mat4.e12 = t121; mat4.e13 = t13; mat4.e20 = t201; mat4.e21 = t211; mat4.e22 = t221; mat4.e23 = t23; mat4.e30 = t30; mat4.e31 = t31; mat4.e32 = t32; mat4.e33 = t33; if(_this53.sizeMat4 == _this53.stackMat4.length) { var newLength2 = _this53.sizeMat4 << 1; var this3 = new Array(newLength2); var newArray2 = this3; var _g6 = 0; var _g14 = _this53.sizeMat4; while(_g6 < _g14) { var i4 = _g6++; newArray2[i4] = _this53.stackMat4[i4]; _this53.stackMat4[i4] = null; } _this53.stackMat4 = newArray2; } _this53.stackMat4[_this53.sizeMat4++] = mat4; } if(quat != null) { var tx25 = 0; var ty25 = 0; var tz25 = 0; var tw = 1; quat.x = tx25; quat.y = ty25; quat.z = tz25; quat.w = tw; if(_this53.sizeQuat == _this53.stackQuat.length) { var newLength3 = _this53.sizeQuat << 1; var this4 = new Array(newLength3); var newArray3 = this4; var _g7 = 0; var _g15 = _this53.sizeQuat; while(_g7 < _g15) { var i5 = _g7++; newArray3[i5] = _this53.stackQuat[i5]; _this53.stackQuat[i5] = null; } _this53.stackQuat = newArray3; } _this53.stackQuat[_this53.sizeQuat++] = quat; } var _this54 = this.p; var mat31 = null; var mat41 = null; var quat1 = null; if(top2 != null) { top2.zero(); if(_this54.sizeVec3 == _this54.stackVec3.length) { var newLength4 = _this54.sizeVec3 << 1; var this5 = new Array(newLength4); var newArray4 = this5; var _g8 = 0; var _g16 = _this54.sizeVec3; while(_g8 < _g16) { var i6 = _g8++; newArray4[i6] = _this54.stackVec3[i6]; _this54.stackVec3[i6] = null; } _this54.stackVec3 = newArray4; } _this54.stackVec3[_this54.sizeVec3++] = top2; } if(mat31 != null) { var t002 = 1; var t012 = 0; var t022 = 0; var t102 = 0; var t112 = 1; var t122 = 0; var t202 = 0; var t212 = 0; var t222 = 1; mat31.e00 = t002; mat31.e01 = t012; mat31.e02 = t022; mat31.e10 = t102; mat31.e11 = t112; mat31.e12 = t122; mat31.e20 = t202; mat31.e21 = t212; mat31.e22 = t222; if(_this54.sizeMat3 == _this54.stackMat3.length) { var newLength5 = _this54.sizeMat3 << 1; var this6 = new Array(newLength5); var newArray5 = this6; var _g9 = 0; var _g17 = _this54.sizeMat3; while(_g9 < _g17) { var i7 = _g9++; newArray5[i7] = _this54.stackMat3[i7]; _this54.stackMat3[i7] = null; } _this54.stackMat3 = newArray5; } _this54.stackMat3[_this54.sizeMat3++] = mat31; } if(mat41 != null) { var t003 = 1; var t013 = 0; var t023 = 0; var t031 = 0; var t103 = 0; var t113 = 1; var t123 = 0; var t131 = 0; var t203 = 0; var t213 = 0; var t223 = 1; var t231 = 0; var t301 = 0; var t311 = 0; var t321 = 0; var t331 = 1; mat41.e00 = t003; mat41.e01 = t013; mat41.e02 = t023; mat41.e03 = t031; mat41.e10 = t103; mat41.e11 = t113; mat41.e12 = t123; mat41.e13 = t131; mat41.e20 = t203; mat41.e21 = t213; mat41.e22 = t223; mat41.e23 = t231; mat41.e30 = t301; mat41.e31 = t311; mat41.e32 = t321; mat41.e33 = t331; if(_this54.sizeMat4 == _this54.stackMat4.length) { var newLength6 = _this54.sizeMat4 << 1; var this7 = new Array(newLength6); var newArray6 = this7; var _g10 = 0; var _g18 = _this54.sizeMat4; while(_g10 < _g18) { var i8 = _g10++; newArray6[i8] = _this54.stackMat4[i8]; _this54.stackMat4[i8] = null; } _this54.stackMat4 = newArray6; } _this54.stackMat4[_this54.sizeMat4++] = mat41; } if(quat1 != null) { var tx26 = 0; var ty26 = 0; var tz26 = 0; var tw1 = 1; quat1.x = tx26; quat1.y = ty26; quat1.z = tz26; quat1.w = tw1; if(_this54.sizeQuat == _this54.stackQuat.length) { var newLength7 = _this54.sizeQuat << 1; var this8 = new Array(newLength7); var newArray7 = this8; var _g19 = 0; var _g110 = _this54.sizeQuat; while(_g19 < _g110) { var i9 = _g19++; newArray7[i9] = _this54.stackQuat[i9]; _this54.stackQuat[i9] = null; } _this54.stackQuat = newArray7; } _this54.stackQuat[_this54.sizeQuat++] = quat1; } var _this55 = this.p; var mat32 = null; var mat42 = null; var quat2 = null; if(top3 != null) { top3.zero(); if(_this55.sizeVec3 == _this55.stackVec3.length) { var newLength8 = _this55.sizeVec3 << 1; var this9 = new Array(newLength8); var newArray8 = this9; var _g20 = 0; var _g111 = _this55.sizeVec3; while(_g20 < _g111) { var i10 = _g20++; newArray8[i10] = _this55.stackVec3[i10]; _this55.stackVec3[i10] = null; } _this55.stackVec3 = newArray8; } _this55.stackVec3[_this55.sizeVec3++] = top3; } if(mat32 != null) { var t004 = 1; var t014 = 0; var t024 = 0; var t104 = 0; var t114 = 1; var t124 = 0; var t204 = 0; var t214 = 0; var t224 = 1; mat32.e00 = t004; mat32.e01 = t014; mat32.e02 = t024; mat32.e10 = t104; mat32.e11 = t114; mat32.e12 = t124; mat32.e20 = t204; mat32.e21 = t214; mat32.e22 = t224; if(_this55.sizeMat3 == _this55.stackMat3.length) { var newLength9 = _this55.sizeMat3 << 1; var this10 = new Array(newLength9); var newArray9 = this10; var _g27 = 0; var _g112 = _this55.sizeMat3; while(_g27 < _g112) { var i11 = _g27++; newArray9[i11] = _this55.stackMat3[i11]; _this55.stackMat3[i11] = null; } _this55.stackMat3 = newArray9; } _this55.stackMat3[_this55.sizeMat3++] = mat32; } if(mat42 != null) { var t005 = 1; var t015 = 0; var t025 = 0; var t032 = 0; var t105 = 0; var t115 = 1; var t125 = 0; var t132 = 0; var t205 = 0; var t215 = 0; var t225 = 1; var t232 = 0; var t302 = 0; var t312 = 0; var t322 = 0; var t332 = 1; mat42.e00 = t005; mat42.e01 = t015; mat42.e02 = t025; mat42.e03 = t032; mat42.e10 = t105; mat42.e11 = t115; mat42.e12 = t125; mat42.e13 = t132; mat42.e20 = t205; mat42.e21 = t215; mat42.e22 = t225; mat42.e23 = t232; mat42.e30 = t302; mat42.e31 = t312; mat42.e32 = t322; mat42.e33 = t332; if(_this55.sizeMat4 == _this55.stackMat4.length) { var newLength10 = _this55.sizeMat4 << 1; var this11 = new Array(newLength10); var newArray10 = this11; var _g28 = 0; var _g113 = _this55.sizeMat4; while(_g28 < _g113) { var i12 = _g28++; newArray10[i12] = _this55.stackMat4[i12]; _this55.stackMat4[i12] = null; } _this55.stackMat4 = newArray10; } _this55.stackMat4[_this55.sizeMat4++] = mat42; } if(quat2 != null) { var tx27 = 0; var ty27 = 0; var tz27 = 0; var tw2 = 1; quat2.x = tx27; quat2.y = ty27; quat2.z = tz27; quat2.w = tw2; if(_this55.sizeQuat == _this55.stackQuat.length) { var newLength11 = _this55.sizeQuat << 1; var this12 = new Array(newLength11); var newArray11 = this12; var _g29 = 0; var _g114 = _this55.sizeQuat; while(_g29 < _g114) { var i13 = _g29++; newArray11[i13] = _this55.stackQuat[i13]; _this55.stackQuat[i13] = null; } _this55.stackQuat = newArray11; } _this55.stackQuat[_this55.sizeQuat++] = quat2; } var _this56 = this.p; var mat33 = null; var mat43 = null; var quat3 = null; if(top4 != null) { top4.zero(); if(_this56.sizeVec3 == _this56.stackVec3.length) { var newLength12 = _this56.sizeVec3 << 1; var this13 = new Array(newLength12); var newArray12 = this13; var _g30 = 0; var _g115 = _this56.sizeVec3; while(_g30 < _g115) { var i14 = _g30++; newArray12[i14] = _this56.stackVec3[i14]; _this56.stackVec3[i14] = null; } _this56.stackVec3 = newArray12; } _this56.stackVec3[_this56.sizeVec3++] = top4; } if(mat33 != null) { var t006 = 1; var t016 = 0; var t026 = 0; var t106 = 0; var t116 = 1; var t126 = 0; var t206 = 0; var t216 = 0; var t226 = 1; mat33.e00 = t006; mat33.e01 = t016; mat33.e02 = t026; mat33.e10 = t106; mat33.e11 = t116; mat33.e12 = t126; mat33.e20 = t206; mat33.e21 = t216; mat33.e22 = t226; if(_this56.sizeMat3 == _this56.stackMat3.length) { var newLength13 = _this56.sizeMat3 << 1; var this14 = new Array(newLength13); var newArray13 = this14; var _g36 = 0; var _g116 = _this56.sizeMat3; while(_g36 < _g116) { var i15 = _g36++; newArray13[i15] = _this56.stackMat3[i15]; _this56.stackMat3[i15] = null; } _this56.stackMat3 = newArray13; } _this56.stackMat3[_this56.sizeMat3++] = mat33; } if(mat43 != null) { var t007 = 1; var t017 = 0; var t027 = 0; var t033 = 0; var t107 = 0; var t117 = 1; var t127 = 0; var t133 = 0; var t207 = 0; var t217 = 0; var t227 = 1; var t233 = 0; var t303 = 0; var t313 = 0; var t323 = 0; var t333 = 1; mat43.e00 = t007; mat43.e01 = t017; mat43.e02 = t027; mat43.e03 = t033; mat43.e10 = t107; mat43.e11 = t117; mat43.e12 = t127; mat43.e13 = t133; mat43.e20 = t207; mat43.e21 = t217; mat43.e22 = t227; mat43.e23 = t233; mat43.e30 = t303; mat43.e31 = t313; mat43.e32 = t323; mat43.e33 = t333; if(_this56.sizeMat4 == _this56.stackMat4.length) { var newLength14 = _this56.sizeMat4 << 1; var this15 = new Array(newLength14); var newArray14 = this15; var _g37 = 0; var _g117 = _this56.sizeMat4; while(_g37 < _g117) { var i16 = _g37++; newArray14[i16] = _this56.stackMat4[i16]; _this56.stackMat4[i16] = null; } _this56.stackMat4 = newArray14; } _this56.stackMat4[_this56.sizeMat4++] = mat43; } if(quat3 != null) { var tx28 = 0; var ty28 = 0; var tz28 = 0; var tw3 = 1; quat3.x = tx28; quat3.y = ty28; quat3.z = tz28; quat3.w = tw3; if(_this56.sizeQuat == _this56.stackQuat.length) { var newLength15 = _this56.sizeQuat << 1; var this16 = new Array(newLength15); var newArray15 = this16; var _g38 = 0; var _g118 = _this56.sizeQuat; while(_g38 < _g118) { var i17 = _g38++; newArray15[i17] = _this56.stackQuat[i17]; _this56.stackQuat[i17] = null; } _this56.stackQuat = newArray15; } _this56.stackQuat[_this56.sizeQuat++] = quat3; } var _this57 = this.p; var mat34 = null; var mat44 = null; var quat4 = null; if(bottom1 != null) { bottom1.zero(); if(_this57.sizeVec3 == _this57.stackVec3.length) { var newLength16 = _this57.sizeVec3 << 1; var this17 = new Array(newLength16); var newArray16 = this17; var _g39 = 0; var _g119 = _this57.sizeVec3; while(_g39 < _g119) { var i18 = _g39++; newArray16[i18] = _this57.stackVec3[i18]; _this57.stackVec3[i18] = null; } _this57.stackVec3 = newArray16; } _this57.stackVec3[_this57.sizeVec3++] = bottom1; } if(mat34 != null) { var t008 = 1; var t018 = 0; var t028 = 0; var t108 = 0; var t118 = 1; var t128 = 0; var t208 = 0; var t218 = 0; var t228 = 1; mat34.e00 = t008; mat34.e01 = t018; mat34.e02 = t028; mat34.e10 = t108; mat34.e11 = t118; mat34.e12 = t128; mat34.e20 = t208; mat34.e21 = t218; mat34.e22 = t228; if(_this57.sizeMat3 == _this57.stackMat3.length) { var newLength17 = _this57.sizeMat3 << 1; var this18 = new Array(newLength17); var newArray17 = this18; var _g40 = 0; var _g120 = _this57.sizeMat3; while(_g40 < _g120) { var i19 = _g40++; newArray17[i19] = _this57.stackMat3[i19]; _this57.stackMat3[i19] = null; } _this57.stackMat3 = newArray17; } _this57.stackMat3[_this57.sizeMat3++] = mat34; } if(mat44 != null) { var t009 = 1; var t019 = 0; var t029 = 0; var t034 = 0; var t109 = 0; var t119 = 1; var t129 = 0; var t134 = 0; var t209 = 0; var t219 = 0; var t229 = 1; var t234 = 0; var t304 = 0; var t314 = 0; var t324 = 0; var t334 = 1; mat44.e00 = t009; mat44.e01 = t019; mat44.e02 = t029; mat44.e03 = t034; mat44.e10 = t109; mat44.e11 = t119; mat44.e12 = t129; mat44.e13 = t134; mat44.e20 = t209; mat44.e21 = t219; mat44.e22 = t229; mat44.e23 = t234; mat44.e30 = t304; mat44.e31 = t314; mat44.e32 = t324; mat44.e33 = t334; if(_this57.sizeMat4 == _this57.stackMat4.length) { var newLength18 = _this57.sizeMat4 << 1; var this19 = new Array(newLength18); var newArray18 = this19; var _g41 = 0; var _g121 = _this57.sizeMat4; while(_g41 < _g121) { var i20 = _g41++; newArray18[i20] = _this57.stackMat4[i20]; _this57.stackMat4[i20] = null; } _this57.stackMat4 = newArray18; } _this57.stackMat4[_this57.sizeMat4++] = mat44; } if(quat4 != null) { var tx29 = 0; var ty29 = 0; var tz29 = 0; var tw4 = 1; quat4.x = tx29; quat4.y = ty29; quat4.z = tz29; quat4.w = tw4; if(_this57.sizeQuat == _this57.stackQuat.length) { var newLength19 = _this57.sizeQuat << 1; var this20 = new Array(newLength19); var newArray19 = this20; var _g42 = 0; var _g122 = _this57.sizeQuat; while(_g42 < _g122) { var i23 = _g42++; newArray19[i23] = _this57.stackQuat[i23]; _this57.stackQuat[i23] = null; } _this57.stackQuat = newArray19; } _this57.stackQuat[_this57.sizeQuat++] = quat4; } var _this58 = this.p; var mat35 = null; var mat45 = null; var quat5 = null; if(bottom2 != null) { bottom2.zero(); if(_this58.sizeVec3 == _this58.stackVec3.length) { var newLength20 = _this58.sizeVec3 << 1; var this21 = new Array(newLength20); var newArray20 = this21; var _g43 = 0; var _g123 = _this58.sizeVec3; while(_g43 < _g123) { var i24 = _g43++; newArray20[i24] = _this58.stackVec3[i24]; _this58.stackVec3[i24] = null; } _this58.stackVec3 = newArray20; } _this58.stackVec3[_this58.sizeVec3++] = bottom2; } if(mat35 != null) { var t0010 = 1; var t0110 = 0; var t0210 = 0; var t1010 = 0; var t1110 = 1; var t1210 = 0; var t2010 = 0; var t2110 = 0; var t2210 = 1; mat35.e00 = t0010; mat35.e01 = t0110; mat35.e02 = t0210; mat35.e10 = t1010; mat35.e11 = t1110; mat35.e12 = t1210; mat35.e20 = t2010; mat35.e21 = t2110; mat35.e22 = t2210; if(_this58.sizeMat3 == _this58.stackMat3.length) { var newLength21 = _this58.sizeMat3 << 1; var this22 = new Array(newLength21); var newArray21 = this22; var _g44 = 0; var _g124 = _this58.sizeMat3; while(_g44 < _g124) { var i25 = _g44++; newArray21[i25] = _this58.stackMat3[i25]; _this58.stackMat3[i25] = null; } _this58.stackMat3 = newArray21; } _this58.stackMat3[_this58.sizeMat3++] = mat35; } if(mat45 != null) { var t0011 = 1; var t0111 = 0; var t0211 = 0; var t035 = 0; var t1011 = 0; var t1111 = 1; var t1211 = 0; var t135 = 0; var t2011 = 0; var t2111 = 0; var t2211 = 1; var t235 = 0; var t305 = 0; var t315 = 0; var t325 = 0; var t335 = 1; mat45.e00 = t0011; mat45.e01 = t0111; mat45.e02 = t0211; mat45.e03 = t035; mat45.e10 = t1011; mat45.e11 = t1111; mat45.e12 = t1211; mat45.e13 = t135; mat45.e20 = t2011; mat45.e21 = t2111; mat45.e22 = t2211; mat45.e23 = t235; mat45.e30 = t305; mat45.e31 = t315; mat45.e32 = t325; mat45.e33 = t335; if(_this58.sizeMat4 == _this58.stackMat4.length) { var newLength22 = _this58.sizeMat4 << 1; var this23 = new Array(newLength22); var newArray22 = this23; var _g45 = 0; var _g125 = _this58.sizeMat4; while(_g45 < _g125) { var i26 = _g45++; newArray22[i26] = _this58.stackMat4[i26]; _this58.stackMat4[i26] = null; } _this58.stackMat4 = newArray22; } _this58.stackMat4[_this58.sizeMat4++] = mat45; } if(quat5 != null) { var tx30 = 0; var ty30 = 0; var tz30 = 0; var tw5 = 1; quat5.x = tx30; quat5.y = ty30; quat5.z = tz30; quat5.w = tw5; if(_this58.sizeQuat == _this58.stackQuat.length) { var newLength23 = _this58.sizeQuat << 1; var this24 = new Array(newLength23); var newArray23 = this24; var _g46 = 0; var _g126 = _this58.sizeQuat; while(_g46 < _g126) { var i27 = _g46++; newArray23[i27] = _this58.stackQuat[i27]; _this58.stackQuat[i27] = null; } _this58.stackQuat = newArray23; } _this58.stackQuat[_this58.sizeQuat++] = quat5; } var _this59 = this.p; var mat36 = null; var mat46 = null; var quat6 = null; if(bottom3 != null) { bottom3.zero(); if(_this59.sizeVec3 == _this59.stackVec3.length) { var newLength24 = _this59.sizeVec3 << 1; var this25 = new Array(newLength24); var newArray24 = this25; var _g47 = 0; var _g127 = _this59.sizeVec3; while(_g47 < _g127) { var i28 = _g47++; newArray24[i28] = _this59.stackVec3[i28]; _this59.stackVec3[i28] = null; } _this59.stackVec3 = newArray24; } _this59.stackVec3[_this59.sizeVec3++] = bottom3; } if(mat36 != null) { var t0012 = 1; var t0112 = 0; var t0212 = 0; var t1012 = 0; var t1112 = 1; var t1212 = 0; var t2012 = 0; var t2112 = 0; var t2212 = 1; mat36.e00 = t0012; mat36.e01 = t0112; mat36.e02 = t0212; mat36.e10 = t1012; mat36.e11 = t1112; mat36.e12 = t1212; mat36.e20 = t2012; mat36.e21 = t2112; mat36.e22 = t2212; if(_this59.sizeMat3 == _this59.stackMat3.length) { var newLength25 = _this59.sizeMat3 << 1; var this26 = new Array(newLength25); var newArray25 = this26; var _g48 = 0; var _g128 = _this59.sizeMat3; while(_g48 < _g128) { var i29 = _g48++; newArray25[i29] = _this59.stackMat3[i29]; _this59.stackMat3[i29] = null; } _this59.stackMat3 = newArray25; } _this59.stackMat3[_this59.sizeMat3++] = mat36; } if(mat46 != null) { var t0013 = 1; var t0113 = 0; var t0213 = 0; var t036 = 0; var t1013 = 0; var t1113 = 1; var t1213 = 0; var t136 = 0; var t2013 = 0; var t2113 = 0; var t2213 = 1; var t236 = 0; var t306 = 0; var t316 = 0; var t326 = 0; var t336 = 1; mat46.e00 = t0013; mat46.e01 = t0113; mat46.e02 = t0213; mat46.e03 = t036; mat46.e10 = t1013; mat46.e11 = t1113; mat46.e12 = t1213; mat46.e13 = t136; mat46.e20 = t2013; mat46.e21 = t2113; mat46.e22 = t2213; mat46.e23 = t236; mat46.e30 = t306; mat46.e31 = t316; mat46.e32 = t326; mat46.e33 = t336; if(_this59.sizeMat4 == _this59.stackMat4.length) { var newLength26 = _this59.sizeMat4 << 1; var this27 = new Array(newLength26); var newArray26 = this27; var _g49 = 0; var _g129 = _this59.sizeMat4; while(_g49 < _g129) { var i30 = _g49++; newArray26[i30] = _this59.stackMat4[i30]; _this59.stackMat4[i30] = null; } _this59.stackMat4 = newArray26; } _this59.stackMat4[_this59.sizeMat4++] = mat46; } if(quat6 != null) { var tx31 = 0; var ty31 = 0; var tz31 = 0; var tw6 = 1; quat6.x = tx31; quat6.y = ty31; quat6.z = tz31; quat6.w = tw6; if(_this59.sizeQuat == _this59.stackQuat.length) { var newLength27 = _this59.sizeQuat << 1; var this28 = new Array(newLength27); var newArray27 = this28; var _g50 = 0; var _g130 = _this59.sizeQuat; while(_g50 < _g130) { var i31 = _g50++; newArray27[i31] = _this59.stackQuat[i31]; _this59.stackQuat[i31] = null; } _this59.stackQuat = newArray27; } _this59.stackQuat[_this59.sizeQuat++] = quat6; } var _this60 = this.p; var mat37 = null; var mat47 = null; var quat7 = null; if(bottom4 != null) { bottom4.zero(); if(_this60.sizeVec3 == _this60.stackVec3.length) { var newLength28 = _this60.sizeVec3 << 1; var this29 = new Array(newLength28); var newArray28 = this29; var _g51 = 0; var _g131 = _this60.sizeVec3; while(_g51 < _g131) { var i32 = _g51++; newArray28[i32] = _this60.stackVec3[i32]; _this60.stackVec3[i32] = null; } _this60.stackVec3 = newArray28; } _this60.stackVec3[_this60.sizeVec3++] = bottom4; } if(mat37 != null) { var t0014 = 1; var t0114 = 0; var t0214 = 0; var t1014 = 0; var t1114 = 1; var t1214 = 0; var t2014 = 0; var t2114 = 0; var t2214 = 1; mat37.e00 = t0014; mat37.e01 = t0114; mat37.e02 = t0214; mat37.e10 = t1014; mat37.e11 = t1114; mat37.e12 = t1214; mat37.e20 = t2014; mat37.e21 = t2114; mat37.e22 = t2214; if(_this60.sizeMat3 == _this60.stackMat3.length) { var newLength29 = _this60.sizeMat3 << 1; var this30 = new Array(newLength29); var newArray29 = this30; var _g52 = 0; var _g132 = _this60.sizeMat3; while(_g52 < _g132) { var i33 = _g52++; newArray29[i33] = _this60.stackMat3[i33]; _this60.stackMat3[i33] = null; } _this60.stackMat3 = newArray29; } _this60.stackMat3[_this60.sizeMat3++] = mat37; } if(mat47 != null) { var t0015 = 1; var t0115 = 0; var t0215 = 0; var t037 = 0; var t1015 = 0; var t1115 = 1; var t1215 = 0; var t137 = 0; var t2015 = 0; var t2115 = 0; var t2215 = 1; var t237 = 0; var t307 = 0; var t317 = 0; var t327 = 0; var t337 = 1; mat47.e00 = t0015; mat47.e01 = t0115; mat47.e02 = t0215; mat47.e03 = t037; mat47.e10 = t1015; mat47.e11 = t1115; mat47.e12 = t1215; mat47.e13 = t137; mat47.e20 = t2015; mat47.e21 = t2115; mat47.e22 = t2215; mat47.e23 = t237; mat47.e30 = t307; mat47.e31 = t317; mat47.e32 = t327; mat47.e33 = t337; if(_this60.sizeMat4 == _this60.stackMat4.length) { var newLength30 = _this60.sizeMat4 << 1; var this31 = new Array(newLength30); var newArray30 = this31; var _g53 = 0; var _g133 = _this60.sizeMat4; while(_g53 < _g133) { var i34 = _g53++; newArray30[i34] = _this60.stackMat4[i34]; _this60.stackMat4[i34] = null; } _this60.stackMat4 = newArray30; } _this60.stackMat4[_this60.sizeMat4++] = mat47; } if(quat7 != null) { var tx32 = 0; var ty32 = 0; var tz32 = 0; var tw7 = 1; quat7.x = tx32; quat7.y = ty32; quat7.z = tz32; quat7.w = tw7; if(_this60.sizeQuat == _this60.stackQuat.length) { var newLength31 = _this60.sizeQuat << 1; var this32 = new Array(newLength31); var newArray31 = this32; var _g54 = 0; var _g134 = _this60.sizeQuat; while(_g54 < _g134) { var i35 = _g54++; newArray31[i35] = _this60.stackQuat[i35]; _this60.stackQuat[i35] = null; } _this60.stackQuat = newArray31; } _this60.stackQuat[_this60.sizeQuat++] = quat7; } } else { var _g410 = 0; while(_g410 < 8) { var i36 = _g410++; var _this61 = this.tmpCircleNorms[i36]; var v5 = this.circleCoords[i36]; _this61.x = v5.x; _this61.y = v5.y; _this61.z = v5.z; var _this62 = _this61; var tx33 = _this62.x * m.e00 + _this62.y * m.e01 + _this62.z * m.e02; var ty33 = _this62.x * m.e10 + _this62.y * m.e11 + _this62.z * m.e12; var tz33 = _this62.x * m.e20 + _this62.y * m.e21 + _this62.z * m.e22; _this62.x = tx33; _this62.y = ty33; _this62.z = tz33; var _this63 = this.tmpCircleVerts1[i36]; var v6 = this.tmpCircleNorms[i36]; _this63.x = v6.x; _this63.y = v6.y; _this63.z = v6.z; var _this64 = _this63; var tx34 = _this64.x * radius; var ty34 = _this64.y * radius; var tz34 = _this64.z * radius; _this64.x = tx34; _this64.y = ty34; _this64.z = tz34; var _this65 = _this64; var tx35 = _this65.x + o.x; var ty35 = _this65.y + o.y; var tz35 = _this65.z + o.z; _this65.x = tx35; _this65.y = ty35; _this65.z = tz35; var _this66 = this.tmpCircleVerts2[i36]; var v7 = this.tmpCircleVerts1[i36]; _this66.x = v7.x; _this66.y = v7.y; _this66.z = v7.z; var _this67 = this.tmpCircleVerts1[i36]; var tx36 = _this67.x + ey.x * halfHeight; var ty36 = _this67.y + ey.y * halfHeight; var tz36 = _this67.z + ey.z * halfHeight; _this67.x = tx36; _this67.y = ty36; _this67.z = tz36; var _this68 = this.tmpCircleVerts2[i36]; var s6 = -halfHeight; var tx37 = _this68.x + ey.x * s6; var ty37 = _this68.y + ey.y * s6; var tz37 = _this68.z + ey.z * s6; _this68.x = tx37; _this68.y = ty37; _this68.z = tz37; } var _g55 = 0; while(_g55 < 8) { var i37 = _g55++; var v12 = this.tmpCircleVerts1[i37]; var v22 = this.tmpCircleVerts2[i37]; var v32 = this.tmpCircleVerts2[(i37 + 1) % 8]; var v41 = this.tmpCircleVerts1[(i37 + 1) % 8]; var n12 = this.tmpCircleNorms[i37]; var n22 = this.tmpCircleNorms[(i37 + 1) % 8]; this.rect(v12,v22,v32,v41,n12,n12,n22,n22,color); } } var _this69 = this.p; var mat38 = null; var mat48 = null; var quat8 = null; if(top != null) { top.zero(); if(_this69.sizeVec3 == _this69.stackVec3.length) { var newLength32 = _this69.sizeVec3 << 1; var this33 = new Array(newLength32); var newArray32 = this33; var _g56 = 0; var _g135 = _this69.sizeVec3; while(_g56 < _g135) { var i38 = _g56++; newArray32[i38] = _this69.stackVec3[i38]; _this69.stackVec3[i38] = null; } _this69.stackVec3 = newArray32; } _this69.stackVec3[_this69.sizeVec3++] = top; } if(mat38 != null) { var t0016 = 1; var t0116 = 0; var t0216 = 0; var t1016 = 0; var t1116 = 1; var t1216 = 0; var t2016 = 0; var t2116 = 0; var t2216 = 1; mat38.e00 = t0016; mat38.e01 = t0116; mat38.e02 = t0216; mat38.e10 = t1016; mat38.e11 = t1116; mat38.e12 = t1216; mat38.e20 = t2016; mat38.e21 = t2116; mat38.e22 = t2216; if(_this69.sizeMat3 == _this69.stackMat3.length) { var newLength33 = _this69.sizeMat3 << 1; var this34 = new Array(newLength33); var newArray33 = this34; var _g57 = 0; var _g136 = _this69.sizeMat3; while(_g57 < _g136) { var i39 = _g57++; newArray33[i39] = _this69.stackMat3[i39]; _this69.stackMat3[i39] = null; } _this69.stackMat3 = newArray33; } _this69.stackMat3[_this69.sizeMat3++] = mat38; } if(mat48 != null) { var t0017 = 1; var t0117 = 0; var t0217 = 0; var t038 = 0; var t1017 = 0; var t1117 = 1; var t1217 = 0; var t138 = 0; var t2017 = 0; var t2117 = 0; var t2217 = 1; var t238 = 0; var t308 = 0; var t318 = 0; var t328 = 0; var t338 = 1; mat48.e00 = t0017; mat48.e01 = t0117; mat48.e02 = t0217; mat48.e03 = t038; mat48.e10 = t1017; mat48.e11 = t1117; mat48.e12 = t1217; mat48.e13 = t138; mat48.e20 = t2017; mat48.e21 = t2117; mat48.e22 = t2217; mat48.e23 = t238; mat48.e30 = t308; mat48.e31 = t318; mat48.e32 = t328; mat48.e33 = t338; if(_this69.sizeMat4 == _this69.stackMat4.length) { var newLength34 = _this69.sizeMat4 << 1; var this35 = new Array(newLength34); var newArray34 = this35; var _g58 = 0; var _g137 = _this69.sizeMat4; while(_g58 < _g137) { var i40 = _g58++; newArray34[i40] = _this69.stackMat4[i40]; _this69.stackMat4[i40] = null; } _this69.stackMat4 = newArray34; } _this69.stackMat4[_this69.sizeMat4++] = mat48; } if(quat8 != null) { var tx38 = 0; var ty38 = 0; var tz38 = 0; var tw8 = 1; quat8.x = tx38; quat8.y = ty38; quat8.z = tz38; quat8.w = tw8; if(_this69.sizeQuat == _this69.stackQuat.length) { var newLength35 = _this69.sizeQuat << 1; var this36 = new Array(newLength35); var newArray35 = this36; var _g59 = 0; var _g138 = _this69.sizeQuat; while(_g59 < _g138) { var i41 = _g59++; newArray35[i41] = _this69.stackQuat[i41]; _this69.stackQuat[i41] = null; } _this69.stackQuat = newArray35; } _this69.stackQuat[_this69.sizeQuat++] = quat8; } var _this70 = this.p; var mat39 = null; var mat49 = null; var quat9 = null; if(bottom != null) { bottom.zero(); if(_this70.sizeVec3 == _this70.stackVec3.length) { var newLength36 = _this70.sizeVec3 << 1; var this37 = new Array(newLength36); var newArray36 = this37; var _g60 = 0; var _g139 = _this70.sizeVec3; while(_g60 < _g139) { var i42 = _g60++; newArray36[i42] = _this70.stackVec3[i42]; _this70.stackVec3[i42] = null; } _this70.stackVec3 = newArray36; } _this70.stackVec3[_this70.sizeVec3++] = bottom; } if(mat39 != null) { var t0018 = 1; var t0118 = 0; var t0218 = 0; var t1018 = 0; var t1118 = 1; var t1218 = 0; var t2018 = 0; var t2118 = 0; var t2218 = 1; mat39.e00 = t0018; mat39.e01 = t0118; mat39.e02 = t0218; mat39.e10 = t1018; mat39.e11 = t1118; mat39.e12 = t1218; mat39.e20 = t2018; mat39.e21 = t2118; mat39.e22 = t2218; if(_this70.sizeMat3 == _this70.stackMat3.length) { var newLength37 = _this70.sizeMat3 << 1; var this38 = new Array(newLength37); var newArray37 = this38; var _g61 = 0; var _g140 = _this70.sizeMat3; while(_g61 < _g140) { var i43 = _g61++; newArray37[i43] = _this70.stackMat3[i43]; _this70.stackMat3[i43] = null; } _this70.stackMat3 = newArray37; } _this70.stackMat3[_this70.sizeMat3++] = mat39; } if(mat49 != null) { var t0019 = 1; var t0119 = 0; var t0219 = 0; var t039 = 0; var t1019 = 0; var t1119 = 1; var t1219 = 0; var t139 = 0; var t2019 = 0; var t2119 = 0; var t2219 = 1; var t239 = 0; var t309 = 0; var t319 = 0; var t329 = 0; var t339 = 1; mat49.e00 = t0019; mat49.e01 = t0119; mat49.e02 = t0219; mat49.e03 = t039; mat49.e10 = t1019; mat49.e11 = t1119; mat49.e12 = t1219; mat49.e13 = t139; mat49.e20 = t2019; mat49.e21 = t2119; mat49.e22 = t2219; mat49.e23 = t239; mat49.e30 = t309; mat49.e31 = t319; mat49.e32 = t329; mat49.e33 = t339; if(_this70.sizeMat4 == _this70.stackMat4.length) { var newLength38 = _this70.sizeMat4 << 1; var this39 = new Array(newLength38); var newArray38 = this39; var _g62 = 0; var _g141 = _this70.sizeMat4; while(_g62 < _g141) { var i44 = _g62++; newArray38[i44] = _this70.stackMat4[i44]; _this70.stackMat4[i44] = null; } _this70.stackMat4 = newArray38; } _this70.stackMat4[_this70.sizeMat4++] = mat49; } if(quat9 != null) { var tx39 = 0; var ty39 = 0; var tz39 = 0; var tw9 = 1; quat9.x = tx39; quat9.y = ty39; quat9.z = tz39; quat9.w = tw9; if(_this70.sizeQuat == _this70.stackQuat.length) { var newLength39 = _this70.sizeQuat << 1; var this40 = new Array(newLength39); var newArray39 = this40; var _g63 = 0; var _g142 = _this70.sizeQuat; while(_g63 < _g142) { var i45 = _g63++; newArray39[i45] = _this70.stackQuat[i45]; _this70.stackQuat[i45] = null; } _this70.stackQuat = newArray39; } _this70.stackQuat[_this70.sizeQuat++] = quat9; } var _this71 = this.p; var mat310 = null; var mat410 = null; var quat10 = null; if(o != null) { o.zero(); if(_this71.sizeVec3 == _this71.stackVec3.length) { var newLength40 = _this71.sizeVec3 << 1; var this41 = new Array(newLength40); var newArray40 = this41; var _g64 = 0; var _g143 = _this71.sizeVec3; while(_g64 < _g143) { var i46 = _g64++; newArray40[i46] = _this71.stackVec3[i46]; _this71.stackVec3[i46] = null; } _this71.stackVec3 = newArray40; } _this71.stackVec3[_this71.sizeVec3++] = o; } if(mat310 != null) { var t0020 = 1; var t0120 = 0; var t0220 = 0; var t1020 = 0; var t1120 = 1; var t1220 = 0; var t2020 = 0; var t2120 = 0; var t2220 = 1; mat310.e00 = t0020; mat310.e01 = t0120; mat310.e02 = t0220; mat310.e10 = t1020; mat310.e11 = t1120; mat310.e12 = t1220; mat310.e20 = t2020; mat310.e21 = t2120; mat310.e22 = t2220; if(_this71.sizeMat3 == _this71.stackMat3.length) { var newLength41 = _this71.sizeMat3 << 1; var this42 = new Array(newLength41); var newArray41 = this42; var _g65 = 0; var _g144 = _this71.sizeMat3; while(_g65 < _g144) { var i47 = _g65++; newArray41[i47] = _this71.stackMat3[i47]; _this71.stackMat3[i47] = null; } _this71.stackMat3 = newArray41; } _this71.stackMat3[_this71.sizeMat3++] = mat310; } if(mat410 != null) { var t0021 = 1; var t0121 = 0; var t0221 = 0; var t0310 = 0; var t1021 = 0; var t1121 = 1; var t1221 = 0; var t1310 = 0; var t2021 = 0; var t2121 = 0; var t2221 = 1; var t2310 = 0; var t3010 = 0; var t3110 = 0; var t3210 = 0; var t3310 = 1; mat410.e00 = t0021; mat410.e01 = t0121; mat410.e02 = t0221; mat410.e03 = t0310; mat410.e10 = t1021; mat410.e11 = t1121; mat410.e12 = t1221; mat410.e13 = t1310; mat410.e20 = t2021; mat410.e21 = t2121; mat410.e22 = t2221; mat410.e23 = t2310; mat410.e30 = t3010; mat410.e31 = t3110; mat410.e32 = t3210; mat410.e33 = t3310; if(_this71.sizeMat4 == _this71.stackMat4.length) { var newLength42 = _this71.sizeMat4 << 1; var this43 = new Array(newLength42); var newArray42 = this43; var _g66 = 0; var _g145 = _this71.sizeMat4; while(_g66 < _g145) { var i48 = _g66++; newArray42[i48] = _this71.stackMat4[i48]; _this71.stackMat4[i48] = null; } _this71.stackMat4 = newArray42; } _this71.stackMat4[_this71.sizeMat4++] = mat410; } if(quat10 != null) { var tx40 = 0; var ty40 = 0; var tz40 = 0; var tw10 = 1; quat10.x = tx40; quat10.y = ty40; quat10.z = tz40; quat10.w = tw10; if(_this71.sizeQuat == _this71.stackQuat.length) { var newLength43 = _this71.sizeQuat << 1; var this44 = new Array(newLength43); var newArray43 = this44; var _g67 = 0; var _g146 = _this71.sizeQuat; while(_g67 < _g146) { var i49 = _g67++; newArray43[i49] = _this71.stackQuat[i49]; _this71.stackQuat[i49] = null; } _this71.stackQuat = newArray43; } _this71.stackQuat[_this71.sizeQuat++] = quat10; } var _this72 = this.p; var vec3 = null; var mat411 = null; var quat11 = null; if(vec3 != null) { vec3.zero(); if(_this72.sizeVec3 == _this72.stackVec3.length) { var newLength44 = _this72.sizeVec3 << 1; var this45 = new Array(newLength44); var newArray44 = this45; var _g68 = 0; var _g147 = _this72.sizeVec3; while(_g68 < _g147) { var i50 = _g68++; newArray44[i50] = _this72.stackVec3[i50]; _this72.stackVec3[i50] = null; } _this72.stackVec3 = newArray44; } _this72.stackVec3[_this72.sizeVec3++] = vec3; } if(m != null) { var t0022 = 1; var t0122 = 0; var t0222 = 0; var t1022 = 0; var t1122 = 1; var t1222 = 0; var t2022 = 0; var t2122 = 0; var t2222 = 1; m.e00 = t0022; m.e01 = t0122; m.e02 = t0222; m.e10 = t1022; m.e11 = t1122; m.e12 = t1222; m.e20 = t2022; m.e21 = t2122; m.e22 = t2222; if(_this72.sizeMat3 == _this72.stackMat3.length) { var newLength45 = _this72.sizeMat3 << 1; var this46 = new Array(newLength45); var newArray45 = this46; var _g69 = 0; var _g148 = _this72.sizeMat3; while(_g69 < _g148) { var i51 = _g69++; newArray45[i51] = _this72.stackMat3[i51]; _this72.stackMat3[i51] = null; } _this72.stackMat3 = newArray45; } _this72.stackMat3[_this72.sizeMat3++] = m; } if(mat411 != null) { var t0023 = 1; var t0123 = 0; var t0223 = 0; var t0311 = 0; var t1023 = 0; var t1123 = 1; var t1223 = 0; var t1311 = 0; var t2023 = 0; var t2123 = 0; var t2223 = 1; var t2311 = 0; var t3011 = 0; var t3111 = 0; var t3211 = 0; var t3311 = 1; mat411.e00 = t0023; mat411.e01 = t0123; mat411.e02 = t0223; mat411.e03 = t0311; mat411.e10 = t1023; mat411.e11 = t1123; mat411.e12 = t1223; mat411.e13 = t1311; mat411.e20 = t2023; mat411.e21 = t2123; mat411.e22 = t2223; mat411.e23 = t2311; mat411.e30 = t3011; mat411.e31 = t3111; mat411.e32 = t3211; mat411.e33 = t3311; if(_this72.sizeMat4 == _this72.stackMat4.length) { var newLength46 = _this72.sizeMat4 << 1; var this47 = new Array(newLength46); var newArray46 = this47; var _g70 = 0; var _g149 = _this72.sizeMat4; while(_g70 < _g149) { var i52 = _g70++; newArray46[i52] = _this72.stackMat4[i52]; _this72.stackMat4[i52] = null; } _this72.stackMat4 = newArray46; } _this72.stackMat4[_this72.sizeMat4++] = mat411; } if(quat11 != null) { var tx41 = 0; var ty41 = 0; var tz41 = 0; var tw11 = 1; quat11.x = tx41; quat11.y = ty41; quat11.z = tz41; quat11.w = tw11; if(_this72.sizeQuat == _this72.stackQuat.length) { var newLength47 = _this72.sizeQuat << 1; var this48 = new Array(newLength47); var newArray47 = this48; var _g71 = 0; var _g150 = _this72.sizeQuat; while(_g71 < _g150) { var i53 = _g71++; newArray47[i53] = _this72.stackQuat[i53]; _this72.stackQuat[i53] = null; } _this72.stackQuat = newArray47; } _this72.stackQuat[_this72.sizeQuat++] = quat11; } var _this73 = this.p; var mat311 = null; var mat412 = null; var quat12 = null; if(ex != null) { ex.zero(); if(_this73.sizeVec3 == _this73.stackVec3.length) { var newLength48 = _this73.sizeVec3 << 1; var this49 = new Array(newLength48); var newArray48 = this49; var _g72 = 0; var _g151 = _this73.sizeVec3; while(_g72 < _g151) { var i54 = _g72++; newArray48[i54] = _this73.stackVec3[i54]; _this73.stackVec3[i54] = null; } _this73.stackVec3 = newArray48; } _this73.stackVec3[_this73.sizeVec3++] = ex; } if(mat311 != null) { var t0024 = 1; var t0124 = 0; var t0224 = 0; var t1024 = 0; var t1124 = 1; var t1224 = 0; var t2024 = 0; var t2124 = 0; var t2224 = 1; mat311.e00 = t0024; mat311.e01 = t0124; mat311.e02 = t0224; mat311.e10 = t1024; mat311.e11 = t1124; mat311.e12 = t1224; mat311.e20 = t2024; mat311.e21 = t2124; mat311.e22 = t2224; if(_this73.sizeMat3 == _this73.stackMat3.length) { var newLength49 = _this73.sizeMat3 << 1; var this50 = new Array(newLength49); var newArray49 = this50; var _g73 = 0; var _g152 = _this73.sizeMat3; while(_g73 < _g152) { var i55 = _g73++; newArray49[i55] = _this73.stackMat3[i55]; _this73.stackMat3[i55] = null; } _this73.stackMat3 = newArray49; } _this73.stackMat3[_this73.sizeMat3++] = mat311; } if(mat412 != null) { var t0025 = 1; var t0125 = 0; var t0225 = 0; var t0312 = 0; var t1025 = 0; var t1125 = 1; var t1225 = 0; var t1312 = 0; var t2025 = 0; var t2125 = 0; var t2225 = 1; var t2312 = 0; var t3012 = 0; var t3112 = 0; var t3212 = 0; var t3312 = 1; mat412.e00 = t0025; mat412.e01 = t0125; mat412.e02 = t0225; mat412.e03 = t0312; mat412.e10 = t1025; mat412.e11 = t1125; mat412.e12 = t1225; mat412.e13 = t1312; mat412.e20 = t2025; mat412.e21 = t2125; mat412.e22 = t2225; mat412.e23 = t2312; mat412.e30 = t3012; mat412.e31 = t3112; mat412.e32 = t3212; mat412.e33 = t3312; if(_this73.sizeMat4 == _this73.stackMat4.length) { var newLength50 = _this73.sizeMat4 << 1; var this51 = new Array(newLength50); var newArray50 = this51; var _g74 = 0; var _g153 = _this73.sizeMat4; while(_g74 < _g153) { var i56 = _g74++; newArray50[i56] = _this73.stackMat4[i56]; _this73.stackMat4[i56] = null; } _this73.stackMat4 = newArray50; } _this73.stackMat4[_this73.sizeMat4++] = mat412; } if(quat12 != null) { var tx42 = 0; var ty42 = 0; var tz42 = 0; var tw12 = 1; quat12.x = tx42; quat12.y = ty42; quat12.z = tz42; quat12.w = tw12; if(_this73.sizeQuat == _this73.stackQuat.length) { var newLength51 = _this73.sizeQuat << 1; var this52 = new Array(newLength51); var newArray51 = this52; var _g75 = 0; var _g154 = _this73.sizeQuat; while(_g75 < _g154) { var i57 = _g75++; newArray51[i57] = _this73.stackQuat[i57]; _this73.stackQuat[i57] = null; } _this73.stackQuat = newArray51; } _this73.stackQuat[_this73.sizeQuat++] = quat12; } var _this74 = this.p; var mat312 = null; var mat413 = null; var quat13 = null; if(ey != null) { ey.zero(); if(_this74.sizeVec3 == _this74.stackVec3.length) { var newLength52 = _this74.sizeVec3 << 1; var this53 = new Array(newLength52); var newArray52 = this53; var _g76 = 0; var _g155 = _this74.sizeVec3; while(_g76 < _g155) { var i58 = _g76++; newArray52[i58] = _this74.stackVec3[i58]; _this74.stackVec3[i58] = null; } _this74.stackVec3 = newArray52; } _this74.stackVec3[_this74.sizeVec3++] = ey; } if(mat312 != null) { var t0026 = 1; var t0126 = 0; var t0226 = 0; var t1026 = 0; var t1126 = 1; var t1226 = 0; var t2026 = 0; var t2126 = 0; var t2226 = 1; mat312.e00 = t0026; mat312.e01 = t0126; mat312.e02 = t0226; mat312.e10 = t1026; mat312.e11 = t1126; mat312.e12 = t1226; mat312.e20 = t2026; mat312.e21 = t2126; mat312.e22 = t2226; if(_this74.sizeMat3 == _this74.stackMat3.length) { var newLength53 = _this74.sizeMat3 << 1; var this54 = new Array(newLength53); var newArray53 = this54; var _g77 = 0; var _g156 = _this74.sizeMat3; while(_g77 < _g156) { var i59 = _g77++; newArray53[i59] = _this74.stackMat3[i59]; _this74.stackMat3[i59] = null; } _this74.stackMat3 = newArray53; } _this74.stackMat3[_this74.sizeMat3++] = mat312; } if(mat413 != null) { var t0027 = 1; var t0127 = 0; var t0227 = 0; var t0313 = 0; var t1027 = 0; var t1127 = 1; var t1227 = 0; var t1313 = 0; var t2027 = 0; var t2127 = 0; var t2227 = 1; var t2313 = 0; var t3013 = 0; var t3113 = 0; var t3213 = 0; var t3313 = 1; mat413.e00 = t0027; mat413.e01 = t0127; mat413.e02 = t0227; mat413.e03 = t0313; mat413.e10 = t1027; mat413.e11 = t1127; mat413.e12 = t1227; mat413.e13 = t1313; mat413.e20 = t2027; mat413.e21 = t2127; mat413.e22 = t2227; mat413.e23 = t2313; mat413.e30 = t3013; mat413.e31 = t3113; mat413.e32 = t3213; mat413.e33 = t3313; if(_this74.sizeMat4 == _this74.stackMat4.length) { var newLength54 = _this74.sizeMat4 << 1; var this55 = new Array(newLength54); var newArray54 = this55; var _g78 = 0; var _g157 = _this74.sizeMat4; while(_g78 < _g157) { var i60 = _g78++; newArray54[i60] = _this74.stackMat4[i60]; _this74.stackMat4[i60] = null; } _this74.stackMat4 = newArray54; } _this74.stackMat4[_this74.sizeMat4++] = mat413; } if(quat13 != null) { var tx43 = 0; var ty43 = 0; var tz43 = 0; var tw13 = 1; quat13.x = tx43; quat13.y = ty43; quat13.z = tz43; quat13.w = tw13; if(_this74.sizeQuat == _this74.stackQuat.length) { var newLength55 = _this74.sizeQuat << 1; var this56 = new Array(newLength55); var newArray55 = this56; var _g79 = 0; var _g158 = _this74.sizeQuat; while(_g79 < _g158) { var i61 = _g79++; newArray55[i61] = _this74.stackQuat[i61]; _this74.stackQuat[i61] = null; } _this74.stackQuat = newArray55; } _this74.stackQuat[_this74.sizeQuat++] = quat13; } var _this75 = this.p; var mat313 = null; var mat414 = null; var quat14 = null; if(ez != null) { ez.zero(); if(_this75.sizeVec3 == _this75.stackVec3.length) { var newLength56 = _this75.sizeVec3 << 1; var this57 = new Array(newLength56); var newArray56 = this57; var _g80 = 0; var _g159 = _this75.sizeVec3; while(_g80 < _g159) { var i62 = _g80++; newArray56[i62] = _this75.stackVec3[i62]; _this75.stackVec3[i62] = null; } _this75.stackVec3 = newArray56; } _this75.stackVec3[_this75.sizeVec3++] = ez; } if(mat313 != null) { var t0028 = 1; var t0128 = 0; var t0228 = 0; var t1028 = 0; var t1128 = 1; var t1228 = 0; var t2028 = 0; var t2128 = 0; var t2228 = 1; mat313.e00 = t0028; mat313.e01 = t0128; mat313.e02 = t0228; mat313.e10 = t1028; mat313.e11 = t1128; mat313.e12 = t1228; mat313.e20 = t2028; mat313.e21 = t2128; mat313.e22 = t2228; if(_this75.sizeMat3 == _this75.stackMat3.length) { var newLength57 = _this75.sizeMat3 << 1; var this58 = new Array(newLength57); var newArray57 = this58; var _g81 = 0; var _g160 = _this75.sizeMat3; while(_g81 < _g160) { var i63 = _g81++; newArray57[i63] = _this75.stackMat3[i63]; _this75.stackMat3[i63] = null; } _this75.stackMat3 = newArray57; } _this75.stackMat3[_this75.sizeMat3++] = mat313; } if(mat414 != null) { var t0029 = 1; var t0129 = 0; var t0229 = 0; var t0314 = 0; var t1029 = 0; var t1129 = 1; var t1229 = 0; var t1314 = 0; var t2029 = 0; var t2129 = 0; var t2229 = 1; var t2314 = 0; var t3014 = 0; var t3114 = 0; var t3214 = 0; var t3314 = 1; mat414.e00 = t0029; mat414.e01 = t0129; mat414.e02 = t0229; mat414.e03 = t0314; mat414.e10 = t1029; mat414.e11 = t1129; mat414.e12 = t1229; mat414.e13 = t1314; mat414.e20 = t2029; mat414.e21 = t2129; mat414.e22 = t2229; mat414.e23 = t2314; mat414.e30 = t3014; mat414.e31 = t3114; mat414.e32 = t3214; mat414.e33 = t3314; if(_this75.sizeMat4 == _this75.stackMat4.length) { var newLength58 = _this75.sizeMat4 << 1; var this59 = new Array(newLength58); var newArray58 = this59; var _g82 = 0; var _g161 = _this75.sizeMat4; while(_g82 < _g161) { var i64 = _g82++; newArray58[i64] = _this75.stackMat4[i64]; _this75.stackMat4[i64] = null; } _this75.stackMat4 = newArray58; } _this75.stackMat4[_this75.sizeMat4++] = mat414; } if(quat14 != null) { var tx44 = 0; var ty44 = 0; var tz44 = 0; var tw14 = 1; quat14.x = tx44; quat14.y = ty44; quat14.z = tz44; quat14.w = tw14; if(_this75.sizeQuat == _this75.stackQuat.length) { var newLength59 = _this75.sizeQuat << 1; var this60 = new Array(newLength59); var newArray59 = this60; var _g83 = 0; var _g162 = _this75.sizeQuat; while(_g83 < _g162) { var i65 = _g83++; newArray59[i65] = _this75.stackQuat[i65]; _this75.stackQuat[i65] = null; } _this75.stackQuat = newArray59; } _this75.stackQuat[_this75.sizeQuat++] = quat14; } } sphere(tf,radius,color) { var _this = this.p; var o = _this.sizeVec3 == 0 ? new oimo.common.Vec3() : _this.stackVec3[--_this.sizeVec3]; var _this1 = this.p; var m = _this1.sizeMat3 == 0 ? new oimo.common.Mat3() : _this1.stackMat3[--_this1.sizeMat3]; var v = o; v.x = tf._positionX; v.y = tf._positionY; v.z = tf._positionZ; var m1 = m; m1.e00 = tf._rotation00; m1.e01 = tf._rotation01; m1.e02 = tf._rotation02; m1.e10 = tf._rotation10; m1.e11 = tf._rotation11; m1.e12 = tf._rotation12; m1.e20 = tf._rotation20; m1.e21 = tf._rotation21; m1.e22 = tf._rotation22; var nt = 4; var np = 8; var vs = this.tmpSphereVerts; var ns = this.tmpSphereNorms; var _g = 0; var _g1 = nt + 1; while(_g < _g1) { var i = _g++; var n = this.tmpSphereVerts[i].length; var _g2 = 0; var _g11 = n; while(_g2 < _g11) { var j = _g2++; var _this2 = ns[i][j]; var v1 = this.sphereCoords[i][j]; _this2.x = v1.x; _this2.y = v1.y; _this2.z = v1.z; var _this3 = _this2; var tx = _this3.x * m.e00 + _this3.y * m.e01 + _this3.z * m.e02; var ty = _this3.x * m.e10 + _this3.y * m.e11 + _this3.z * m.e12; var tz = _this3.x * m.e20 + _this3.y * m.e21 + _this3.z * m.e22; _this3.x = tx; _this3.y = ty; _this3.z = tz; var _this4 = vs[i][j]; var v2 = ns[i][j]; _this4.x = v2.x; _this4.y = v2.y; _this4.z = v2.z; var _this5 = _this4; var tx1 = _this5.x * radius; var ty1 = _this5.y * radius; var tz1 = _this5.z * radius; _this5.x = tx1; _this5.y = ty1; _this5.z = tz1; var _this6 = _this5; var tx2 = _this6.x + o.x; var ty2 = _this6.y + o.y; var tz2 = _this6.z + o.z; _this6.x = tx2; _this6.y = ty2; _this6.z = tz2; } } var _g21 = 0; var _g3 = nt; while(_g21 < _g3) { var i1 = _g21++; var _g22 = 0; var _g31 = np; while(_g22 < _g31) { var j1 = _g22++; var v11; var v21; var v3; var v4; var n1; var n2; var n3; var n4; if(i1 == 0) { if(this.wireframe) { v11 = vs[0][0]; v21 = vs[1][j1]; this.line(v11,v21,color); } else { v11 = vs[0][0]; v21 = vs[1][j1]; v3 = vs[1][(j1 + 1) % np]; n1 = ns[0][0]; n2 = ns[1][j1]; n3 = ns[1][(j1 + 1) % np]; this.triangle(v11,v21,v3,n1,n2,n3,color); } } else if(i1 == nt - 1) { if(this.wireframe) { v11 = vs[nt][0]; v21 = vs[i1][(j1 + 1) % np]; v3 = vs[i1][j1]; this.line(v11,v21,color); this.line(v21,v3,color); } else { v11 = vs[nt][0]; v21 = vs[i1][(j1 + 1) % np]; v3 = vs[i1][j1]; n1 = ns[nt][0]; n2 = ns[i1][(j1 + 1) % np]; n3 = ns[i1][j1]; this.triangle(v11,v21,v3,n1,n2,n3,color); } } else if(this.wireframe) { v11 = vs[i1][j1]; v21 = vs[i1][(j1 + 1) % np]; v3 = vs[i1 + 1][j1]; this.line(v11,v21,color); this.line(v11,v3,color); } else { v11 = vs[i1][j1]; v21 = vs[i1][(j1 + 1) % np]; v3 = vs[i1 + 1][j1]; v4 = vs[i1 + 1][(j1 + 1) % np]; n1 = ns[i1][j1]; n2 = ns[i1][(j1 + 1) % np]; n3 = ns[i1 + 1][j1]; n4 = ns[i1 + 1][(j1 + 1) % np]; this.rect(v11,v3,v4,v21,n1,n3,n4,n2,color); } } } var _this7 = this.p; var mat3 = null; var mat4 = null; var quat = null; if(o != null) { o.zero(); if(_this7.sizeVec3 == _this7.stackVec3.length) { var newLength = _this7.sizeVec3 << 1; var this1 = new Array(newLength); var newArray = this1; var _g4 = 0; var _g12 = _this7.sizeVec3; while(_g4 < _g12) { var i2 = _g4++; newArray[i2] = _this7.stackVec3[i2]; _this7.stackVec3[i2] = null; } _this7.stackVec3 = newArray; } _this7.stackVec3[_this7.sizeVec3++] = o; } if(mat3 != null) { var t00 = 1; var t01 = 0; var t02 = 0; var t10 = 0; var t11 = 1; var t12 = 0; var t20 = 0; var t21 = 0; var t22 = 1; mat3.e00 = t00; mat3.e01 = t01; mat3.e02 = t02; mat3.e10 = t10; mat3.e11 = t11; mat3.e12 = t12; mat3.e20 = t20; mat3.e21 = t21; mat3.e22 = t22; if(_this7.sizeMat3 == _this7.stackMat3.length) { var newLength1 = _this7.sizeMat3 << 1; var this2 = new Array(newLength1); var newArray1 = this2; var _g5 = 0; var _g13 = _this7.sizeMat3; while(_g5 < _g13) { var i3 = _g5++; newArray1[i3] = _this7.stackMat3[i3]; _this7.stackMat3[i3] = null; } _this7.stackMat3 = newArray1; } _this7.stackMat3[_this7.sizeMat3++] = mat3; } if(mat4 != null) { var t001 = 1; var t011 = 0; var t021 = 0; var t03 = 0; var t101 = 0; var t111 = 1; var t121 = 0; var t13 = 0; var t201 = 0; var t211 = 0; var t221 = 1; var t23 = 0; var t30 = 0; var t31 = 0; var t32 = 0; var t33 = 1; mat4.e00 = t001; mat4.e01 = t011; mat4.e02 = t021; mat4.e03 = t03; mat4.e10 = t101; mat4.e11 = t111; mat4.e12 = t121; mat4.e13 = t13; mat4.e20 = t201; mat4.e21 = t211; mat4.e22 = t221; mat4.e23 = t23; mat4.e30 = t30; mat4.e31 = t31; mat4.e32 = t32; mat4.e33 = t33; if(_this7.sizeMat4 == _this7.stackMat4.length) { var newLength2 = _this7.sizeMat4 << 1; var this3 = new Array(newLength2); var newArray2 = this3; var _g6 = 0; var _g14 = _this7.sizeMat4; while(_g6 < _g14) { var i4 = _g6++; newArray2[i4] = _this7.stackMat4[i4]; _this7.stackMat4[i4] = null; } _this7.stackMat4 = newArray2; } _this7.stackMat4[_this7.sizeMat4++] = mat4; } if(quat != null) { var tx3 = 0; var ty3 = 0; var tz3 = 0; var tw = 1; quat.x = tx3; quat.y = ty3; quat.z = tz3; quat.w = tw; if(_this7.sizeQuat == _this7.stackQuat.length) { var newLength3 = _this7.sizeQuat << 1; var this4 = new Array(newLength3); var newArray3 = this4; var _g7 = 0; var _g15 = _this7.sizeQuat; while(_g7 < _g15) { var i5 = _g7++; newArray3[i5] = _this7.stackQuat[i5]; _this7.stackQuat[i5] = null; } _this7.stackQuat = newArray3; } _this7.stackQuat[_this7.sizeQuat++] = quat; } var _this8 = this.p; var vec3 = null; var mat41 = null; var quat1 = null; if(vec3 != null) { vec3.zero(); if(_this8.sizeVec3 == _this8.stackVec3.length) { var newLength4 = _this8.sizeVec3 << 1; var this5 = new Array(newLength4); var newArray4 = this5; var _g8 = 0; var _g16 = _this8.sizeVec3; while(_g8 < _g16) { var i6 = _g8++; newArray4[i6] = _this8.stackVec3[i6]; _this8.stackVec3[i6] = null; } _this8.stackVec3 = newArray4; } _this8.stackVec3[_this8.sizeVec3++] = vec3; } if(m != null) { var t002 = 1; var t012 = 0; var t022 = 0; var t102 = 0; var t112 = 1; var t122 = 0; var t202 = 0; var t212 = 0; var t222 = 1; m.e00 = t002; m.e01 = t012; m.e02 = t022; m.e10 = t102; m.e11 = t112; m.e12 = t122; m.e20 = t202; m.e21 = t212; m.e22 = t222; if(_this8.sizeMat3 == _this8.stackMat3.length) { var newLength5 = _this8.sizeMat3 << 1; var this6 = new Array(newLength5); var newArray5 = this6; var _g9 = 0; var _g17 = _this8.sizeMat3; while(_g9 < _g17) { var i7 = _g9++; newArray5[i7] = _this8.stackMat3[i7]; _this8.stackMat3[i7] = null; } _this8.stackMat3 = newArray5; } _this8.stackMat3[_this8.sizeMat3++] = m; } if(mat41 != null) { var t003 = 1; var t013 = 0; var t023 = 0; var t031 = 0; var t103 = 0; var t113 = 1; var t123 = 0; var t131 = 0; var t203 = 0; var t213 = 0; var t223 = 1; var t231 = 0; var t301 = 0; var t311 = 0; var t321 = 0; var t331 = 1; mat41.e00 = t003; mat41.e01 = t013; mat41.e02 = t023; mat41.e03 = t031; mat41.e10 = t103; mat41.e11 = t113; mat41.e12 = t123; mat41.e13 = t131; mat41.e20 = t203; mat41.e21 = t213; mat41.e22 = t223; mat41.e23 = t231; mat41.e30 = t301; mat41.e31 = t311; mat41.e32 = t321; mat41.e33 = t331; if(_this8.sizeMat4 == _this8.stackMat4.length) { var newLength6 = _this8.sizeMat4 << 1; var this7 = new Array(newLength6); var newArray6 = this7; var _g10 = 0; var _g18 = _this8.sizeMat4; while(_g10 < _g18) { var i8 = _g10++; newArray6[i8] = _this8.stackMat4[i8]; _this8.stackMat4[i8] = null; } _this8.stackMat4 = newArray6; } _this8.stackMat4[_this8.sizeMat4++] = mat41; } if(quat1 != null) { var tx4 = 0; var ty4 = 0; var tz4 = 0; var tw1 = 1; quat1.x = tx4; quat1.y = ty4; quat1.z = tz4; quat1.w = tw1; if(_this8.sizeQuat == _this8.stackQuat.length) { var newLength7 = _this8.sizeQuat << 1; var this8 = new Array(newLength7); var newArray7 = this8; var _g19 = 0; var _g110 = _this8.sizeQuat; while(_g19 < _g110) { var i9 = _g19++; newArray7[i9] = _this8.stackQuat[i9]; _this8.stackQuat[i9] = null; } _this8.stackQuat = newArray7; } _this8.stackQuat[_this8.sizeQuat++] = quat1; } } box(tf,halfExtents,color) { var _this = this.p; var ex = _this.sizeVec3 == 0 ? new oimo.common.Vec3() : _this.stackVec3[--_this.sizeVec3]; var _this1 = this.p; var ey = _this1.sizeVec3 == 0 ? new oimo.common.Vec3() : _this1.stackVec3[--_this1.sizeVec3]; var _this2 = this.p; var ez = _this2.sizeVec3 == 0 ? new oimo.common.Vec3() : _this2.stackVec3[--_this2.sizeVec3]; var _this3 = this.p; var o = _this3.sizeVec3 == 0 ? new oimo.common.Vec3() : _this3.stackVec3[--_this3.sizeVec3]; var _this4 = this.p; var m = _this4.sizeMat3 == 0 ? new oimo.common.Mat3() : _this4.stackMat3[--_this4.sizeMat3]; var v = o; v.x = tf._positionX; v.y = tf._positionY; v.z = tf._positionZ; var m1 = m; m1.e00 = tf._rotation00; m1.e01 = tf._rotation01; m1.e02 = tf._rotation02; m1.e10 = tf._rotation10; m1.e11 = tf._rotation11; m1.e12 = tf._rotation12; m1.e20 = tf._rotation20; m1.e21 = tf._rotation21; m1.e22 = tf._rotation22; ex.init(m.e00,m.e10,m.e20); ey.init(m.e01,m.e11,m.e21); ez.init(m.e02,m.e12,m.e22); var hx = halfExtents.x; var hy = halfExtents.y; var hz = halfExtents.z; var _this5 = this.p; var _this6 = _this5.sizeVec3 == 0 ? new oimo.common.Vec3() : _this5.stackVec3[--_this5.sizeVec3]; _this6.x = o.x; _this6.y = o.y; _this6.z = o.z; var _this7 = _this6; var s = -hx; var tx = _this7.x + ex.x * s; var ty = _this7.y + ex.y * s; var tz = _this7.z + ex.z * s; _this7.x = tx; _this7.y = ty; _this7.z = tz; var _this8 = _this7; var s1 = -hy; var tx1 = _this8.x + ey.x * s1; var ty1 = _this8.y + ey.y * s1; var tz1 = _this8.z + ey.z * s1; _this8.x = tx1; _this8.y = ty1; _this8.z = tz1; var _this9 = _this8; var s2 = -hz; var tx2 = _this9.x + ez.x * s2; var ty2 = _this9.y + ez.y * s2; var tz2 = _this9.z + ez.z * s2; _this9.x = tx2; _this9.y = ty2; _this9.z = tz2; var v1 = _this9; var _this10 = this.p; var _this11 = _this10.sizeVec3 == 0 ? new oimo.common.Vec3() : _this10.stackVec3[--_this10.sizeVec3]; _this11.x = o.x; _this11.y = o.y; _this11.z = o.z; var _this12 = _this11; var s3 = -hx; var tx3 = _this12.x + ex.x * s3; var ty3 = _this12.y + ex.y * s3; var tz3 = _this12.z + ex.z * s3; _this12.x = tx3; _this12.y = ty3; _this12.z = tz3; var _this13 = _this12; var s4 = -hy; var tx4 = _this13.x + ey.x * s4; var ty4 = _this13.y + ey.y * s4; var tz4 = _this13.z + ey.z * s4; _this13.x = tx4; _this13.y = ty4; _this13.z = tz4; var _this14 = _this13; var tx5 = _this14.x + ez.x * hz; var ty5 = _this14.y + ez.y * hz; var tz5 = _this14.z + ez.z * hz; _this14.x = tx5; _this14.y = ty5; _this14.z = tz5; var v2 = _this14; var _this15 = this.p; var _this16 = _this15.sizeVec3 == 0 ? new oimo.common.Vec3() : _this15.stackVec3[--_this15.sizeVec3]; _this16.x = o.x; _this16.y = o.y; _this16.z = o.z; var _this17 = _this16; var s5 = -hx; var tx6 = _this17.x + ex.x * s5; var ty6 = _this17.y + ex.y * s5; var tz6 = _this17.z + ex.z * s5; _this17.x = tx6; _this17.y = ty6; _this17.z = tz6; var _this18 = _this17; var tx7 = _this18.x + ey.x * hy; var ty7 = _this18.y + ey.y * hy; var tz7 = _this18.z + ey.z * hy; _this18.x = tx7; _this18.y = ty7; _this18.z = tz7; var _this19 = _this18; var s6 = -hz; var tx8 = _this19.x + ez.x * s6; var ty8 = _this19.y + ez.y * s6; var tz8 = _this19.z + ez.z * s6; _this19.x = tx8; _this19.y = ty8; _this19.z = tz8; var v3 = _this19; var _this20 = this.p; var _this21 = _this20.sizeVec3 == 0 ? new oimo.common.Vec3() : _this20.stackVec3[--_this20.sizeVec3]; _this21.x = o.x; _this21.y = o.y; _this21.z = o.z; var _this22 = _this21; var s7 = -hx; var tx9 = _this22.x + ex.x * s7; var ty9 = _this22.y + ex.y * s7; var tz9 = _this22.z + ex.z * s7; _this22.x = tx9; _this22.y = ty9; _this22.z = tz9; var _this23 = _this22; var tx10 = _this23.x + ey.x * hy; var ty10 = _this23.y + ey.y * hy; var tz10 = _this23.z + ey.z * hy; _this23.x = tx10; _this23.y = ty10; _this23.z = tz10; var _this24 = _this23; var tx11 = _this24.x + ez.x * hz; var ty11 = _this24.y + ez.y * hz; var tz11 = _this24.z + ez.z * hz; _this24.x = tx11; _this24.y = ty11; _this24.z = tz11; var v4 = _this24; var _this25 = this.p; var _this26 = _this25.sizeVec3 == 0 ? new oimo.common.Vec3() : _this25.stackVec3[--_this25.sizeVec3]; _this26.x = o.x; _this26.y = o.y; _this26.z = o.z; var _this27 = _this26; var tx12 = _this27.x + ex.x * hx; var ty12 = _this27.y + ex.y * hx; var tz12 = _this27.z + ex.z * hx; _this27.x = tx12; _this27.y = ty12; _this27.z = tz12; var _this28 = _this27; var s8 = -hy; var tx13 = _this28.x + ey.x * s8; var ty13 = _this28.y + ey.y * s8; var tz13 = _this28.z + ey.z * s8; _this28.x = tx13; _this28.y = ty13; _this28.z = tz13; var _this29 = _this28; var s9 = -hz; var tx14 = _this29.x + ez.x * s9; var ty14 = _this29.y + ez.y * s9; var tz14 = _this29.z + ez.z * s9; _this29.x = tx14; _this29.y = ty14; _this29.z = tz14; var v5 = _this29; var _this30 = this.p; var _this31 = _this30.sizeVec3 == 0 ? new oimo.common.Vec3() : _this30.stackVec3[--_this30.sizeVec3]; _this31.x = o.x; _this31.y = o.y; _this31.z = o.z; var _this32 = _this31; var tx15 = _this32.x + ex.x * hx; var ty15 = _this32.y + ex.y * hx; var tz15 = _this32.z + ex.z * hx; _this32.x = tx15; _this32.y = ty15; _this32.z = tz15; var _this33 = _this32; var s10 = -hy; var tx16 = _this33.x + ey.x * s10; var ty16 = _this33.y + ey.y * s10; var tz16 = _this33.z + ey.z * s10; _this33.x = tx16; _this33.y = ty16; _this33.z = tz16; var _this34 = _this33; var tx17 = _this34.x + ez.x * hz; var ty17 = _this34.y + ez.y * hz; var tz17 = _this34.z + ez.z * hz; _this34.x = tx17; _this34.y = ty17; _this34.z = tz17; var v6 = _this34; var _this35 = this.p; var _this36 = _this35.sizeVec3 == 0 ? new oimo.common.Vec3() : _this35.stackVec3[--_this35.sizeVec3]; _this36.x = o.x; _this36.y = o.y; _this36.z = o.z; var _this37 = _this36; var tx18 = _this37.x + ex.x * hx; var ty18 = _this37.y + ex.y * hx; var tz18 = _this37.z + ex.z * hx; _this37.x = tx18; _this37.y = ty18; _this37.z = tz18; var _this38 = _this37; var tx19 = _this38.x + ey.x * hy; var ty19 = _this38.y + ey.y * hy; var tz19 = _this38.z + ey.z * hy; _this38.x = tx19; _this38.y = ty19; _this38.z = tz19; var _this39 = _this38; var s11 = -hz; var tx20 = _this39.x + ez.x * s11; var ty20 = _this39.y + ez.y * s11; var tz20 = _this39.z + ez.z * s11; _this39.x = tx20; _this39.y = ty20; _this39.z = tz20; var v7 = _this39; var _this40 = this.p; var _this41 = _this40.sizeVec3 == 0 ? new oimo.common.Vec3() : _this40.stackVec3[--_this40.sizeVec3]; _this41.x = o.x; _this41.y = o.y; _this41.z = o.z; var _this42 = _this41; var tx21 = _this42.x + ex.x * hx; var ty21 = _this42.y + ex.y * hx; var tz21 = _this42.z + ex.z * hx; _this42.x = tx21; _this42.y = ty21; _this42.z = tz21; var _this43 = _this42; var tx22 = _this43.x + ey.x * hy; var ty22 = _this43.y + ey.y * hy; var tz22 = _this43.z + ey.z * hy; _this43.x = tx22; _this43.y = ty22; _this43.z = tz22; var _this44 = _this43; var tx23 = _this44.x + ez.x * hz; var ty23 = _this44.y + ez.y * hz; var tz23 = _this44.z + ez.z * hz; _this44.x = tx23; _this44.y = ty23; _this44.z = tz23; var v8 = _this44; if(this.wireframe) { this.line(v1,v2,color); this.line(v3,v4,color); this.line(v5,v6,color); this.line(v7,v8,color); this.line(v1,v3,color); this.line(v2,v4,color); this.line(v5,v7,color); this.line(v6,v8,color); this.line(v1,v5,color); this.line(v2,v6,color); this.line(v3,v7,color); this.line(v4,v8,color); } else { var _this45 = this.p; var _this46 = _this45.sizeVec3 == 0 ? new oimo.common.Vec3() : _this45.stackVec3[--_this45.sizeVec3]; _this46.x = ex.x; _this46.y = ex.y; _this46.z = ex.z; var _this47 = _this46; var tx24 = -_this47.x; var ty24 = -_this47.y; var tz24 = -_this47.z; _this47.x = tx24; _this47.y = ty24; _this47.z = tz24; var nex = _this47; var _this48 = this.p; var _this49 = _this48.sizeVec3 == 0 ? new oimo.common.Vec3() : _this48.stackVec3[--_this48.sizeVec3]; _this49.x = ey.x; _this49.y = ey.y; _this49.z = ey.z; var _this50 = _this49; var tx25 = -_this50.x; var ty25 = -_this50.y; var tz25 = -_this50.z; _this50.x = tx25; _this50.y = ty25; _this50.z = tz25; var ney = _this50; var _this51 = this.p; var _this52 = _this51.sizeVec3 == 0 ? new oimo.common.Vec3() : _this51.stackVec3[--_this51.sizeVec3]; _this52.x = ez.x; _this52.y = ez.y; _this52.z = ez.z; var _this53 = _this52; var tx26 = -_this53.x; var ty26 = -_this53.y; var tz26 = -_this53.z; _this53.x = tx26; _this53.y = ty26; _this53.z = tz26; var nez = _this53; this.rect(v1,v2,v4,v3,nex,nex,nex,nex,color); this.rect(v5,v7,v8,v6,ex,ex,ex,ex,color); this.rect(v1,v5,v6,v2,ney,ney,ney,ney,color); this.rect(v3,v4,v8,v7,ey,ey,ey,ey,color); this.rect(v1,v3,v7,v5,nez,nez,nez,nez,color); this.rect(v2,v6,v8,v4,ez,ez,ez,ez,color); var _this54 = this.p; var mat3 = null; var mat4 = null; var quat = null; if(nex != null) { nex.zero(); if(_this54.sizeVec3 == _this54.stackVec3.length) { var newLength = _this54.sizeVec3 << 1; var this1 = new Array(newLength); var newArray = this1; var _g = 0; var _g1 = _this54.sizeVec3; while(_g < _g1) { var i = _g++; newArray[i] = _this54.stackVec3[i]; _this54.stackVec3[i] = null; } _this54.stackVec3 = newArray; } _this54.stackVec3[_this54.sizeVec3++] = nex; } if(mat3 != null) { var t00 = 1; var t01 = 0; var t02 = 0; var t10 = 0; var t11 = 1; var t12 = 0; var t20 = 0; var t21 = 0; var t22 = 1; mat3.e00 = t00; mat3.e01 = t01; mat3.e02 = t02; mat3.e10 = t10; mat3.e11 = t11; mat3.e12 = t12; mat3.e20 = t20; mat3.e21 = t21; mat3.e22 = t22; if(_this54.sizeMat3 == _this54.stackMat3.length) { var newLength1 = _this54.sizeMat3 << 1; var this2 = new Array(newLength1); var newArray1 = this2; var _g2 = 0; var _g11 = _this54.sizeMat3; while(_g2 < _g11) { var i1 = _g2++; newArray1[i1] = _this54.stackMat3[i1]; _this54.stackMat3[i1] = null; } _this54.stackMat3 = newArray1; } _this54.stackMat3[_this54.sizeMat3++] = mat3; } if(mat4 != null) { var t001 = 1; var t011 = 0; var t021 = 0; var t03 = 0; var t101 = 0; var t111 = 1; var t121 = 0; var t13 = 0; var t201 = 0; var t211 = 0; var t221 = 1; var t23 = 0; var t30 = 0; var t31 = 0; var t32 = 0; var t33 = 1; mat4.e00 = t001; mat4.e01 = t011; mat4.e02 = t021; mat4.e03 = t03; mat4.e10 = t101; mat4.e11 = t111; mat4.e12 = t121; mat4.e13 = t13; mat4.e20 = t201; mat4.e21 = t211; mat4.e22 = t221; mat4.e23 = t23; mat4.e30 = t30; mat4.e31 = t31; mat4.e32 = t32; mat4.e33 = t33; if(_this54.sizeMat4 == _this54.stackMat4.length) { var newLength2 = _this54.sizeMat4 << 1; var this3 = new Array(newLength2); var newArray2 = this3; var _g3 = 0; var _g12 = _this54.sizeMat4; while(_g3 < _g12) { var i2 = _g3++; newArray2[i2] = _this54.stackMat4[i2]; _this54.stackMat4[i2] = null; } _this54.stackMat4 = newArray2; } _this54.stackMat4[_this54.sizeMat4++] = mat4; } if(quat != null) { var tx27 = 0; var ty27 = 0; var tz27 = 0; var tw = 1; quat.x = tx27; quat.y = ty27; quat.z = tz27; quat.w = tw; if(_this54.sizeQuat == _this54.stackQuat.length) { var newLength3 = _this54.sizeQuat << 1; var this4 = new Array(newLength3); var newArray3 = this4; var _g4 = 0; var _g13 = _this54.sizeQuat; while(_g4 < _g13) { var i3 = _g4++; newArray3[i3] = _this54.stackQuat[i3]; _this54.stackQuat[i3] = null; } _this54.stackQuat = newArray3; } _this54.stackQuat[_this54.sizeQuat++] = quat; } var _this55 = this.p; var mat31 = null; var mat41 = null; var quat1 = null; if(ney != null) { ney.zero(); if(_this55.sizeVec3 == _this55.stackVec3.length) { var newLength4 = _this55.sizeVec3 << 1; var this5 = new Array(newLength4); var newArray4 = this5; var _g5 = 0; var _g14 = _this55.sizeVec3; while(_g5 < _g14) { var i4 = _g5++; newArray4[i4] = _this55.stackVec3[i4]; _this55.stackVec3[i4] = null; } _this55.stackVec3 = newArray4; } _this55.stackVec3[_this55.sizeVec3++] = ney; } if(mat31 != null) { var t002 = 1; var t012 = 0; var t022 = 0; var t102 = 0; var t112 = 1; var t122 = 0; var t202 = 0; var t212 = 0; var t222 = 1; mat31.e00 = t002; mat31.e01 = t012; mat31.e02 = t022; mat31.e10 = t102; mat31.e11 = t112; mat31.e12 = t122; mat31.e20 = t202; mat31.e21 = t212; mat31.e22 = t222; if(_this55.sizeMat3 == _this55.stackMat3.length) { var newLength5 = _this55.sizeMat3 << 1; var this6 = new Array(newLength5); var newArray5 = this6; var _g6 = 0; var _g15 = _this55.sizeMat3; while(_g6 < _g15) { var i5 = _g6++; newArray5[i5] = _this55.stackMat3[i5]; _this55.stackMat3[i5] = null; } _this55.stackMat3 = newArray5; } _this55.stackMat3[_this55.sizeMat3++] = mat31; } if(mat41 != null) { var t003 = 1; var t013 = 0; var t023 = 0; var t031 = 0; var t103 = 0; var t113 = 1; var t123 = 0; var t131 = 0; var t203 = 0; var t213 = 0; var t223 = 1; var t231 = 0; var t301 = 0; var t311 = 0; var t321 = 0; var t331 = 1; mat41.e00 = t003; mat41.e01 = t013; mat41.e02 = t023; mat41.e03 = t031; mat41.e10 = t103; mat41.e11 = t113; mat41.e12 = t123; mat41.e13 = t131; mat41.e20 = t203; mat41.e21 = t213; mat41.e22 = t223; mat41.e23 = t231; mat41.e30 = t301; mat41.e31 = t311; mat41.e32 = t321; mat41.e33 = t331; if(_this55.sizeMat4 == _this55.stackMat4.length) { var newLength6 = _this55.sizeMat4 << 1; var this7 = new Array(newLength6); var newArray6 = this7; var _g7 = 0; var _g16 = _this55.sizeMat4; while(_g7 < _g16) { var i6 = _g7++; newArray6[i6] = _this55.stackMat4[i6]; _this55.stackMat4[i6] = null; } _this55.stackMat4 = newArray6; } _this55.stackMat4[_this55.sizeMat4++] = mat41; } if(quat1 != null) { var tx28 = 0; var ty28 = 0; var tz28 = 0; var tw1 = 1; quat1.x = tx28; quat1.y = ty28; quat1.z = tz28; quat1.w = tw1; if(_this55.sizeQuat == _this55.stackQuat.length) { var newLength7 = _this55.sizeQuat << 1; var this8 = new Array(newLength7); var newArray7 = this8; var _g8 = 0; var _g17 = _this55.sizeQuat; while(_g8 < _g17) { var i7 = _g8++; newArray7[i7] = _this55.stackQuat[i7]; _this55.stackQuat[i7] = null; } _this55.stackQuat = newArray7; } _this55.stackQuat[_this55.sizeQuat++] = quat1; } var _this56 = this.p; var mat32 = null; var mat42 = null; var quat2 = null; if(nez != null) { nez.zero(); if(_this56.sizeVec3 == _this56.stackVec3.length) { var newLength8 = _this56.sizeVec3 << 1; var this9 = new Array(newLength8); var newArray8 = this9; var _g9 = 0; var _g18 = _this56.sizeVec3; while(_g9 < _g18) { var i8 = _g9++; newArray8[i8] = _this56.stackVec3[i8]; _this56.stackVec3[i8] = null; } _this56.stackVec3 = newArray8; } _this56.stackVec3[_this56.sizeVec3++] = nez; } if(mat32 != null) { var t004 = 1; var t014 = 0; var t024 = 0; var t104 = 0; var t114 = 1; var t124 = 0; var t204 = 0; var t214 = 0; var t224 = 1; mat32.e00 = t004; mat32.e01 = t014; mat32.e02 = t024; mat32.e10 = t104; mat32.e11 = t114; mat32.e12 = t124; mat32.e20 = t204; mat32.e21 = t214; mat32.e22 = t224; if(_this56.sizeMat3 == _this56.stackMat3.length) { var newLength9 = _this56.sizeMat3 << 1; var this10 = new Array(newLength9); var newArray9 = this10; var _g10 = 0; var _g19 = _this56.sizeMat3; while(_g10 < _g19) { var i9 = _g10++; newArray9[i9] = _this56.stackMat3[i9]; _this56.stackMat3[i9] = null; } _this56.stackMat3 = newArray9; } _this56.stackMat3[_this56.sizeMat3++] = mat32; } if(mat42 != null) { var t005 = 1; var t015 = 0; var t025 = 0; var t032 = 0; var t105 = 0; var t115 = 1; var t125 = 0; var t132 = 0; var t205 = 0; var t215 = 0; var t225 = 1; var t232 = 0; var t302 = 0; var t312 = 0; var t322 = 0; var t332 = 1; mat42.e00 = t005; mat42.e01 = t015; mat42.e02 = t025; mat42.e03 = t032; mat42.e10 = t105; mat42.e11 = t115; mat42.e12 = t125; mat42.e13 = t132; mat42.e20 = t205; mat42.e21 = t215; mat42.e22 = t225; mat42.e23 = t232; mat42.e30 = t302; mat42.e31 = t312; mat42.e32 = t322; mat42.e33 = t332; if(_this56.sizeMat4 == _this56.stackMat4.length) { var newLength10 = _this56.sizeMat4 << 1; var this11 = new Array(newLength10); var newArray10 = this11; var _g20 = 0; var _g110 = _this56.sizeMat4; while(_g20 < _g110) { var i10 = _g20++; newArray10[i10] = _this56.stackMat4[i10]; _this56.stackMat4[i10] = null; } _this56.stackMat4 = newArray10; } _this56.stackMat4[_this56.sizeMat4++] = mat42; } if(quat2 != null) { var tx29 = 0; var ty29 = 0; var tz29 = 0; var tw2 = 1; quat2.x = tx29; quat2.y = ty29; quat2.z = tz29; quat2.w = tw2; if(_this56.sizeQuat == _this56.stackQuat.length) { var newLength11 = _this56.sizeQuat << 1; var this12 = new Array(newLength11); var newArray11 = this12; var _g21 = 0; var _g111 = _this56.sizeQuat; while(_g21 < _g111) { var i11 = _g21++; newArray11[i11] = _this56.stackQuat[i11]; _this56.stackQuat[i11] = null; } _this56.stackQuat = newArray11; } _this56.stackQuat[_this56.sizeQuat++] = quat2; } } var _this57 = this.p; var mat33 = null; var mat43 = null; var quat3 = null; if(v1 != null) { v1.zero(); if(_this57.sizeVec3 == _this57.stackVec3.length) { var newLength12 = _this57.sizeVec3 << 1; var this13 = new Array(newLength12); var newArray12 = this13; var _g22 = 0; var _g112 = _this57.sizeVec3; while(_g22 < _g112) { var i12 = _g22++; newArray12[i12] = _this57.stackVec3[i12]; _this57.stackVec3[i12] = null; } _this57.stackVec3 = newArray12; } _this57.stackVec3[_this57.sizeVec3++] = v1; } if(mat33 != null) { var t006 = 1; var t016 = 0; var t026 = 0; var t106 = 0; var t116 = 1; var t126 = 0; var t206 = 0; var t216 = 0; var t226 = 1; mat33.e00 = t006; mat33.e01 = t016; mat33.e02 = t026; mat33.e10 = t106; mat33.e11 = t116; mat33.e12 = t126; mat33.e20 = t206; mat33.e21 = t216; mat33.e22 = t226; if(_this57.sizeMat3 == _this57.stackMat3.length) { var newLength13 = _this57.sizeMat3 << 1; var this14 = new Array(newLength13); var newArray13 = this14; var _g23 = 0; var _g113 = _this57.sizeMat3; while(_g23 < _g113) { var i13 = _g23++; newArray13[i13] = _this57.stackMat3[i13]; _this57.stackMat3[i13] = null; } _this57.stackMat3 = newArray13; } _this57.stackMat3[_this57.sizeMat3++] = mat33; } if(mat43 != null) { var t007 = 1; var t017 = 0; var t027 = 0; var t033 = 0; var t107 = 0; var t117 = 1; var t127 = 0; var t133 = 0; var t207 = 0; var t217 = 0; var t227 = 1; var t233 = 0; var t303 = 0; var t313 = 0; var t323 = 0; var t333 = 1; mat43.e00 = t007; mat43.e01 = t017; mat43.e02 = t027; mat43.e03 = t033; mat43.e10 = t107; mat43.e11 = t117; mat43.e12 = t127; mat43.e13 = t133; mat43.e20 = t207; mat43.e21 = t217; mat43.e22 = t227; mat43.e23 = t233; mat43.e30 = t303; mat43.e31 = t313; mat43.e32 = t323; mat43.e33 = t333; if(_this57.sizeMat4 == _this57.stackMat4.length) { var newLength14 = _this57.sizeMat4 << 1; var this15 = new Array(newLength14); var newArray14 = this15; var _g24 = 0; var _g114 = _this57.sizeMat4; while(_g24 < _g114) { var i14 = _g24++; newArray14[i14] = _this57.stackMat4[i14]; _this57.stackMat4[i14] = null; } _this57.stackMat4 = newArray14; } _this57.stackMat4[_this57.sizeMat4++] = mat43; } if(quat3 != null) { var tx30 = 0; var ty30 = 0; var tz30 = 0; var tw3 = 1; quat3.x = tx30; quat3.y = ty30; quat3.z = tz30; quat3.w = tw3; if(_this57.sizeQuat == _this57.stackQuat.length) { var newLength15 = _this57.sizeQuat << 1; var this16 = new Array(newLength15); var newArray15 = this16; var _g25 = 0; var _g115 = _this57.sizeQuat; while(_g25 < _g115) { var i15 = _g25++; newArray15[i15] = _this57.stackQuat[i15]; _this57.stackQuat[i15] = null; } _this57.stackQuat = newArray15; } _this57.stackQuat[_this57.sizeQuat++] = quat3; } var _this58 = this.p; var mat34 = null; var mat44 = null; var quat4 = null; if(v2 != null) { v2.zero(); if(_this58.sizeVec3 == _this58.stackVec3.length) { var newLength16 = _this58.sizeVec3 << 1; var this17 = new Array(newLength16); var newArray16 = this17; var _g26 = 0; var _g116 = _this58.sizeVec3; while(_g26 < _g116) { var i16 = _g26++; newArray16[i16] = _this58.stackVec3[i16]; _this58.stackVec3[i16] = null; } _this58.stackVec3 = newArray16; } _this58.stackVec3[_this58.sizeVec3++] = v2; } if(mat34 != null) { var t008 = 1; var t018 = 0; var t028 = 0; var t108 = 0; var t118 = 1; var t128 = 0; var t208 = 0; var t218 = 0; var t228 = 1; mat34.e00 = t008; mat34.e01 = t018; mat34.e02 = t028; mat34.e10 = t108; mat34.e11 = t118; mat34.e12 = t128; mat34.e20 = t208; mat34.e21 = t218; mat34.e22 = t228; if(_this58.sizeMat3 == _this58.stackMat3.length) { var newLength17 = _this58.sizeMat3 << 1; var this18 = new Array(newLength17); var newArray17 = this18; var _g27 = 0; var _g117 = _this58.sizeMat3; while(_g27 < _g117) { var i17 = _g27++; newArray17[i17] = _this58.stackMat3[i17]; _this58.stackMat3[i17] = null; } _this58.stackMat3 = newArray17; } _this58.stackMat3[_this58.sizeMat3++] = mat34; } if(mat44 != null) { var t009 = 1; var t019 = 0; var t029 = 0; var t034 = 0; var t109 = 0; var t119 = 1; var t129 = 0; var t134 = 0; var t209 = 0; var t219 = 0; var t229 = 1; var t234 = 0; var t304 = 0; var t314 = 0; var t324 = 0; var t334 = 1; mat44.e00 = t009; mat44.e01 = t019; mat44.e02 = t029; mat44.e03 = t034; mat44.e10 = t109; mat44.e11 = t119; mat44.e12 = t129; mat44.e13 = t134; mat44.e20 = t209; mat44.e21 = t219; mat44.e22 = t229; mat44.e23 = t234; mat44.e30 = t304; mat44.e31 = t314; mat44.e32 = t324; mat44.e33 = t334; if(_this58.sizeMat4 == _this58.stackMat4.length) { var newLength18 = _this58.sizeMat4 << 1; var this19 = new Array(newLength18); var newArray18 = this19; var _g28 = 0; var _g118 = _this58.sizeMat4; while(_g28 < _g118) { var i18 = _g28++; newArray18[i18] = _this58.stackMat4[i18]; _this58.stackMat4[i18] = null; } _this58.stackMat4 = newArray18; } _this58.stackMat4[_this58.sizeMat4++] = mat44; } if(quat4 != null) { var tx31 = 0; var ty31 = 0; var tz31 = 0; var tw4 = 1; quat4.x = tx31; quat4.y = ty31; quat4.z = tz31; quat4.w = tw4; if(_this58.sizeQuat == _this58.stackQuat.length) { var newLength19 = _this58.sizeQuat << 1; var this20 = new Array(newLength19); var newArray19 = this20; var _g29 = 0; var _g119 = _this58.sizeQuat; while(_g29 < _g119) { var i19 = _g29++; newArray19[i19] = _this58.stackQuat[i19]; _this58.stackQuat[i19] = null; } _this58.stackQuat = newArray19; } _this58.stackQuat[_this58.sizeQuat++] = quat4; } var _this59 = this.p; var mat35 = null; var mat45 = null; var quat5 = null; if(v3 != null) { v3.zero(); if(_this59.sizeVec3 == _this59.stackVec3.length) { var newLength20 = _this59.sizeVec3 << 1; var this21 = new Array(newLength20); var newArray20 = this21; var _g30 = 0; var _g120 = _this59.sizeVec3; while(_g30 < _g120) { var i20 = _g30++; newArray20[i20] = _this59.stackVec3[i20]; _this59.stackVec3[i20] = null; } _this59.stackVec3 = newArray20; } _this59.stackVec3[_this59.sizeVec3++] = v3; } if(mat35 != null) { var t0010 = 1; var t0110 = 0; var t0210 = 0; var t1010 = 0; var t1110 = 1; var t1210 = 0; var t2010 = 0; var t2110 = 0; var t2210 = 1; mat35.e00 = t0010; mat35.e01 = t0110; mat35.e02 = t0210; mat35.e10 = t1010; mat35.e11 = t1110; mat35.e12 = t1210; mat35.e20 = t2010; mat35.e21 = t2110; mat35.e22 = t2210; if(_this59.sizeMat3 == _this59.stackMat3.length) { var newLength21 = _this59.sizeMat3 << 1; var this22 = new Array(newLength21); var newArray21 = this22; var _g31 = 0; var _g121 = _this59.sizeMat3; while(_g31 < _g121) { var i21 = _g31++; newArray21[i21] = _this59.stackMat3[i21]; _this59.stackMat3[i21] = null; } _this59.stackMat3 = newArray21; } _this59.stackMat3[_this59.sizeMat3++] = mat35; } if(mat45 != null) { var t0011 = 1; var t0111 = 0; var t0211 = 0; var t035 = 0; var t1011 = 0; var t1111 = 1; var t1211 = 0; var t135 = 0; var t2011 = 0; var t2111 = 0; var t2211 = 1; var t235 = 0; var t305 = 0; var t315 = 0; var t325 = 0; var t335 = 1; mat45.e00 = t0011; mat45.e01 = t0111; mat45.e02 = t0211; mat45.e03 = t035; mat45.e10 = t1011; mat45.e11 = t1111; mat45.e12 = t1211; mat45.e13 = t135; mat45.e20 = t2011; mat45.e21 = t2111; mat45.e22 = t2211; mat45.e23 = t235; mat45.e30 = t305; mat45.e31 = t315; mat45.e32 = t325; mat45.e33 = t335; if(_this59.sizeMat4 == _this59.stackMat4.length) { var newLength22 = _this59.sizeMat4 << 1; var this23 = new Array(newLength22); var newArray22 = this23; var _g32 = 0; var _g122 = _this59.sizeMat4; while(_g32 < _g122) { var i22 = _g32++; newArray22[i22] = _this59.stackMat4[i22]; _this59.stackMat4[i22] = null; } _this59.stackMat4 = newArray22; } _this59.stackMat4[_this59.sizeMat4++] = mat45; } if(quat5 != null) { var tx32 = 0; var ty32 = 0; var tz32 = 0; var tw5 = 1; quat5.x = tx32; quat5.y = ty32; quat5.z = tz32; quat5.w = tw5; if(_this59.sizeQuat == _this59.stackQuat.length) { var newLength23 = _this59.sizeQuat << 1; var this24 = new Array(newLength23); var newArray23 = this24; var _g33 = 0; var _g123 = _this59.sizeQuat; while(_g33 < _g123) { var i23 = _g33++; newArray23[i23] = _this59.stackQuat[i23]; _this59.stackQuat[i23] = null; } _this59.stackQuat = newArray23; } _this59.stackQuat[_this59.sizeQuat++] = quat5; } var _this60 = this.p; var mat36 = null; var mat46 = null; var quat6 = null; if(v4 != null) { v4.zero(); if(_this60.sizeVec3 == _this60.stackVec3.length) { var newLength24 = _this60.sizeVec3 << 1; var this25 = new Array(newLength24); var newArray24 = this25; var _g34 = 0; var _g124 = _this60.sizeVec3; while(_g34 < _g124) { var i24 = _g34++; newArray24[i24] = _this60.stackVec3[i24]; _this60.stackVec3[i24] = null; } _this60.stackVec3 = newArray24; } _this60.stackVec3[_this60.sizeVec3++] = v4; } if(mat36 != null) { var t0012 = 1; var t0112 = 0; var t0212 = 0; var t1012 = 0; var t1112 = 1; var t1212 = 0; var t2012 = 0; var t2112 = 0; var t2212 = 1; mat36.e00 = t0012; mat36.e01 = t0112; mat36.e02 = t0212; mat36.e10 = t1012; mat36.e11 = t1112; mat36.e12 = t1212; mat36.e20 = t2012; mat36.e21 = t2112; mat36.e22 = t2212; if(_this60.sizeMat3 == _this60.stackMat3.length) { var newLength25 = _this60.sizeMat3 << 1; var this26 = new Array(newLength25); var newArray25 = this26; var _g35 = 0; var _g125 = _this60.sizeMat3; while(_g35 < _g125) { var i25 = _g35++; newArray25[i25] = _this60.stackMat3[i25]; _this60.stackMat3[i25] = null; } _this60.stackMat3 = newArray25; } _this60.stackMat3[_this60.sizeMat3++] = mat36; } if(mat46 != null) { var t0013 = 1; var t0113 = 0; var t0213 = 0; var t036 = 0; var t1013 = 0; var t1113 = 1; var t1213 = 0; var t136 = 0; var t2013 = 0; var t2113 = 0; var t2213 = 1; var t236 = 0; var t306 = 0; var t316 = 0; var t326 = 0; var t336 = 1; mat46.e00 = t0013; mat46.e01 = t0113; mat46.e02 = t0213; mat46.e03 = t036; mat46.e10 = t1013; mat46.e11 = t1113; mat46.e12 = t1213; mat46.e13 = t136; mat46.e20 = t2013; mat46.e21 = t2113; mat46.e22 = t2213; mat46.e23 = t236; mat46.e30 = t306; mat46.e31 = t316; mat46.e32 = t326; mat46.e33 = t336; if(_this60.sizeMat4 == _this60.stackMat4.length) { var newLength26 = _this60.sizeMat4 << 1; var this27 = new Array(newLength26); var newArray26 = this27; var _g36 = 0; var _g126 = _this60.sizeMat4; while(_g36 < _g126) { var i26 = _g36++; newArray26[i26] = _this60.stackMat4[i26]; _this60.stackMat4[i26] = null; } _this60.stackMat4 = newArray26; } _this60.stackMat4[_this60.sizeMat4++] = mat46; } if(quat6 != null) { var tx33 = 0; var ty33 = 0; var tz33 = 0; var tw6 = 1; quat6.x = tx33; quat6.y = ty33; quat6.z = tz33; quat6.w = tw6; if(_this60.sizeQuat == _this60.stackQuat.length) { var newLength27 = _this60.sizeQuat << 1; var this28 = new Array(newLength27); var newArray27 = this28; var _g37 = 0; var _g127 = _this60.sizeQuat; while(_g37 < _g127) { var i27 = _g37++; newArray27[i27] = _this60.stackQuat[i27]; _this60.stackQuat[i27] = null; } _this60.stackQuat = newArray27; } _this60.stackQuat[_this60.sizeQuat++] = quat6; } var _this61 = this.p; var mat37 = null; var mat47 = null; var quat7 = null; if(v5 != null) { v5.zero(); if(_this61.sizeVec3 == _this61.stackVec3.length) { var newLength28 = _this61.sizeVec3 << 1; var this29 = new Array(newLength28); var newArray28 = this29; var _g38 = 0; var _g128 = _this61.sizeVec3; while(_g38 < _g128) { var i28 = _g38++; newArray28[i28] = _this61.stackVec3[i28]; _this61.stackVec3[i28] = null; } _this61.stackVec3 = newArray28; } _this61.stackVec3[_this61.sizeVec3++] = v5; } if(mat37 != null) { var t0014 = 1; var t0114 = 0; var t0214 = 0; var t1014 = 0; var t1114 = 1; var t1214 = 0; var t2014 = 0; var t2114 = 0; var t2214 = 1; mat37.e00 = t0014; mat37.e01 = t0114; mat37.e02 = t0214; mat37.e10 = t1014; mat37.e11 = t1114; mat37.e12 = t1214; mat37.e20 = t2014; mat37.e21 = t2114; mat37.e22 = t2214; if(_this61.sizeMat3 == _this61.stackMat3.length) { var newLength29 = _this61.sizeMat3 << 1; var this30 = new Array(newLength29); var newArray29 = this30; var _g39 = 0; var _g129 = _this61.sizeMat3; while(_g39 < _g129) { var i29 = _g39++; newArray29[i29] = _this61.stackMat3[i29]; _this61.stackMat3[i29] = null; } _this61.stackMat3 = newArray29; } _this61.stackMat3[_this61.sizeMat3++] = mat37; } if(mat47 != null) { var t0015 = 1; var t0115 = 0; var t0215 = 0; var t037 = 0; var t1015 = 0; var t1115 = 1; var t1215 = 0; var t137 = 0; var t2015 = 0; var t2115 = 0; var t2215 = 1; var t237 = 0; var t307 = 0; var t317 = 0; var t327 = 0; var t337 = 1; mat47.e00 = t0015; mat47.e01 = t0115; mat47.e02 = t0215; mat47.e03 = t037; mat47.e10 = t1015; mat47.e11 = t1115; mat47.e12 = t1215; mat47.e13 = t137; mat47.e20 = t2015; mat47.e21 = t2115; mat47.e22 = t2215; mat47.e23 = t237; mat47.e30 = t307; mat47.e31 = t317; mat47.e32 = t327; mat47.e33 = t337; if(_this61.sizeMat4 == _this61.stackMat4.length) { var newLength30 = _this61.sizeMat4 << 1; var this31 = new Array(newLength30); var newArray30 = this31; var _g40 = 0; var _g130 = _this61.sizeMat4; while(_g40 < _g130) { var i30 = _g40++; newArray30[i30] = _this61.stackMat4[i30]; _this61.stackMat4[i30] = null; } _this61.stackMat4 = newArray30; } _this61.stackMat4[_this61.sizeMat4++] = mat47; } if(quat7 != null) { var tx34 = 0; var ty34 = 0; var tz34 = 0; var tw7 = 1; quat7.x = tx34; quat7.y = ty34; quat7.z = tz34; quat7.w = tw7; if(_this61.sizeQuat == _this61.stackQuat.length) { var newLength31 = _this61.sizeQuat << 1; var this32 = new Array(newLength31); var newArray31 = this32; var _g41 = 0; var _g131 = _this61.sizeQuat; while(_g41 < _g131) { var i31 = _g41++; newArray31[i31] = _this61.stackQuat[i31]; _this61.stackQuat[i31] = null; } _this61.stackQuat = newArray31; } _this61.stackQuat[_this61.sizeQuat++] = quat7; } var _this62 = this.p; var mat38 = null; var mat48 = null; var quat8 = null; if(v6 != null) { v6.zero(); if(_this62.sizeVec3 == _this62.stackVec3.length) { var newLength32 = _this62.sizeVec3 << 1; var this33 = new Array(newLength32); var newArray32 = this33; var _g42 = 0; var _g132 = _this62.sizeVec3; while(_g42 < _g132) { var i32 = _g42++; newArray32[i32] = _this62.stackVec3[i32]; _this62.stackVec3[i32] = null; } _this62.stackVec3 = newArray32; } _this62.stackVec3[_this62.sizeVec3++] = v6; } if(mat38 != null) { var t0016 = 1; var t0116 = 0; var t0216 = 0; var t1016 = 0; var t1116 = 1; var t1216 = 0; var t2016 = 0; var t2116 = 0; var t2216 = 1; mat38.e00 = t0016; mat38.e01 = t0116; mat38.e02 = t0216; mat38.e10 = t1016; mat38.e11 = t1116; mat38.e12 = t1216; mat38.e20 = t2016; mat38.e21 = t2116; mat38.e22 = t2216; if(_this62.sizeMat3 == _this62.stackMat3.length) { var newLength33 = _this62.sizeMat3 << 1; var this34 = new Array(newLength33); var newArray33 = this34; var _g43 = 0; var _g133 = _this62.sizeMat3; while(_g43 < _g133) { var i33 = _g43++; newArray33[i33] = _this62.stackMat3[i33]; _this62.stackMat3[i33] = null; } _this62.stackMat3 = newArray33; } _this62.stackMat3[_this62.sizeMat3++] = mat38; } if(mat48 != null) { var t0017 = 1; var t0117 = 0; var t0217 = 0; var t038 = 0; var t1017 = 0; var t1117 = 1; var t1217 = 0; var t138 = 0; var t2017 = 0; var t2117 = 0; var t2217 = 1; var t238 = 0; var t308 = 0; var t318 = 0; var t328 = 0; var t338 = 1; mat48.e00 = t0017; mat48.e01 = t0117; mat48.e02 = t0217; mat48.e03 = t038; mat48.e10 = t1017; mat48.e11 = t1117; mat48.e12 = t1217; mat48.e13 = t138; mat48.e20 = t2017; mat48.e21 = t2117; mat48.e22 = t2217; mat48.e23 = t238; mat48.e30 = t308; mat48.e31 = t318; mat48.e32 = t328; mat48.e33 = t338; if(_this62.sizeMat4 == _this62.stackMat4.length) { var newLength34 = _this62.sizeMat4 << 1; var this35 = new Array(newLength34); var newArray34 = this35; var _g44 = 0; var _g134 = _this62.sizeMat4; while(_g44 < _g134) { var i34 = _g44++; newArray34[i34] = _this62.stackMat4[i34]; _this62.stackMat4[i34] = null; } _this62.stackMat4 = newArray34; } _this62.stackMat4[_this62.sizeMat4++] = mat48; } if(quat8 != null) { var tx35 = 0; var ty35 = 0; var tz35 = 0; var tw8 = 1; quat8.x = tx35; quat8.y = ty35; quat8.z = tz35; quat8.w = tw8; if(_this62.sizeQuat == _this62.stackQuat.length) { var newLength35 = _this62.sizeQuat << 1; var this36 = new Array(newLength35); var newArray35 = this36; var _g45 = 0; var _g135 = _this62.sizeQuat; while(_g45 < _g135) { var i35 = _g45++; newArray35[i35] = _this62.stackQuat[i35]; _this62.stackQuat[i35] = null; } _this62.stackQuat = newArray35; } _this62.stackQuat[_this62.sizeQuat++] = quat8; } var _this63 = this.p; var mat39 = null; var mat49 = null; var quat9 = null; if(v7 != null) { v7.zero(); if(_this63.sizeVec3 == _this63.stackVec3.length) { var newLength36 = _this63.sizeVec3 << 1; var this37 = new Array(newLength36); var newArray36 = this37; var _g46 = 0; var _g136 = _this63.sizeVec3; while(_g46 < _g136) { var i36 = _g46++; newArray36[i36] = _this63.stackVec3[i36]; _this63.stackVec3[i36] = null; } _this63.stackVec3 = newArray36; } _this63.stackVec3[_this63.sizeVec3++] = v7; } if(mat39 != null) { var t0018 = 1; var t0118 = 0; var t0218 = 0; var t1018 = 0; var t1118 = 1; var t1218 = 0; var t2018 = 0; var t2118 = 0; var t2218 = 1; mat39.e00 = t0018; mat39.e01 = t0118; mat39.e02 = t0218; mat39.e10 = t1018; mat39.e11 = t1118; mat39.e12 = t1218; mat39.e20 = t2018; mat39.e21 = t2118; mat39.e22 = t2218; if(_this63.sizeMat3 == _this63.stackMat3.length) { var newLength37 = _this63.sizeMat3 << 1; var this38 = new Array(newLength37); var newArray37 = this38; var _g47 = 0; var _g137 = _this63.sizeMat3; while(_g47 < _g137) { var i37 = _g47++; newArray37[i37] = _this63.stackMat3[i37]; _this63.stackMat3[i37] = null; } _this63.stackMat3 = newArray37; } _this63.stackMat3[_this63.sizeMat3++] = mat39; } if(mat49 != null) { var t0019 = 1; var t0119 = 0; var t0219 = 0; var t039 = 0; var t1019 = 0; var t1119 = 1; var t1219 = 0; var t139 = 0; var t2019 = 0; var t2119 = 0; var t2219 = 1; var t239 = 0; var t309 = 0; var t319 = 0; var t329 = 0; var t339 = 1; mat49.e00 = t0019; mat49.e01 = t0119; mat49.e02 = t0219; mat49.e03 = t039; mat49.e10 = t1019; mat49.e11 = t1119; mat49.e12 = t1219; mat49.e13 = t139; mat49.e20 = t2019; mat49.e21 = t2119; mat49.e22 = t2219; mat49.e23 = t239; mat49.e30 = t309; mat49.e31 = t319; mat49.e32 = t329; mat49.e33 = t339; if(_this63.sizeMat4 == _this63.stackMat4.length) { var newLength38 = _this63.sizeMat4 << 1; var this39 = new Array(newLength38); var newArray38 = this39; var _g48 = 0; var _g138 = _this63.sizeMat4; while(_g48 < _g138) { var i38 = _g48++; newArray38[i38] = _this63.stackMat4[i38]; _this63.stackMat4[i38] = null; } _this63.stackMat4 = newArray38; } _this63.stackMat4[_this63.sizeMat4++] = mat49; } if(quat9 != null) { var tx36 = 0; var ty36 = 0; var tz36 = 0; var tw9 = 1; quat9.x = tx36; quat9.y = ty36; quat9.z = tz36; quat9.w = tw9; if(_this63.sizeQuat == _this63.stackQuat.length) { var newLength39 = _this63.sizeQuat << 1; var this40 = new Array(newLength39); var newArray39 = this40; var _g49 = 0; var _g139 = _this63.sizeQuat; while(_g49 < _g139) { var i39 = _g49++; newArray39[i39] = _this63.stackQuat[i39]; _this63.stackQuat[i39] = null; } _this63.stackQuat = newArray39; } _this63.stackQuat[_this63.sizeQuat++] = quat9; } var _this64 = this.p; var mat310 = null; var mat410 = null; var quat10 = null; if(v8 != null) { v8.zero(); if(_this64.sizeVec3 == _this64.stackVec3.length) { var newLength40 = _this64.sizeVec3 << 1; var this41 = new Array(newLength40); var newArray40 = this41; var _g50 = 0; var _g140 = _this64.sizeVec3; while(_g50 < _g140) { var i40 = _g50++; newArray40[i40] = _this64.stackVec3[i40]; _this64.stackVec3[i40] = null; } _this64.stackVec3 = newArray40; } _this64.stackVec3[_this64.sizeVec3++] = v8; } if(mat310 != null) { var t0020 = 1; var t0120 = 0; var t0220 = 0; var t1020 = 0; var t1120 = 1; var t1220 = 0; var t2020 = 0; var t2120 = 0; var t2220 = 1; mat310.e00 = t0020; mat310.e01 = t0120; mat310.e02 = t0220; mat310.e10 = t1020; mat310.e11 = t1120; mat310.e12 = t1220; mat310.e20 = t2020; mat310.e21 = t2120; mat310.e22 = t2220; if(_this64.sizeMat3 == _this64.stackMat3.length) { var newLength41 = _this64.sizeMat3 << 1; var this42 = new Array(newLength41); var newArray41 = this42; var _g51 = 0; var _g141 = _this64.sizeMat3; while(_g51 < _g141) { var i41 = _g51++; newArray41[i41] = _this64.stackMat3[i41]; _this64.stackMat3[i41] = null; } _this64.stackMat3 = newArray41; } _this64.stackMat3[_this64.sizeMat3++] = mat310; } if(mat410 != null) { var t0021 = 1; var t0121 = 0; var t0221 = 0; var t0310 = 0; var t1021 = 0; var t1121 = 1; var t1221 = 0; var t1310 = 0; var t2021 = 0; var t2121 = 0; var t2221 = 1; var t2310 = 0; var t3010 = 0; var t3110 = 0; var t3210 = 0; var t3310 = 1; mat410.e00 = t0021; mat410.e01 = t0121; mat410.e02 = t0221; mat410.e03 = t0310; mat410.e10 = t1021; mat410.e11 = t1121; mat410.e12 = t1221; mat410.e13 = t1310; mat410.e20 = t2021; mat410.e21 = t2121; mat410.e22 = t2221; mat410.e23 = t2310; mat410.e30 = t3010; mat410.e31 = t3110; mat410.e32 = t3210; mat410.e33 = t3310; if(_this64.sizeMat4 == _this64.stackMat4.length) { var newLength42 = _this64.sizeMat4 << 1; var this43 = new Array(newLength42); var newArray42 = this43; var _g52 = 0; var _g142 = _this64.sizeMat4; while(_g52 < _g142) { var i42 = _g52++; newArray42[i42] = _this64.stackMat4[i42]; _this64.stackMat4[i42] = null; } _this64.stackMat4 = newArray42; } _this64.stackMat4[_this64.sizeMat4++] = mat410; } if(quat10 != null) { var tx37 = 0; var ty37 = 0; var tz37 = 0; var tw10 = 1; quat10.x = tx37; quat10.y = ty37; quat10.z = tz37; quat10.w = tw10; if(_this64.sizeQuat == _this64.stackQuat.length) { var newLength43 = _this64.sizeQuat << 1; var this44 = new Array(newLength43); var newArray43 = this44; var _g53 = 0; var _g143 = _this64.sizeQuat; while(_g53 < _g143) { var i43 = _g53++; newArray43[i43] = _this64.stackQuat[i43]; _this64.stackQuat[i43] = null; } _this64.stackQuat = newArray43; } _this64.stackQuat[_this64.sizeQuat++] = quat10; } var _this65 = this.p; var mat311 = null; var mat411 = null; var quat11 = null; if(o != null) { o.zero(); if(_this65.sizeVec3 == _this65.stackVec3.length) { var newLength44 = _this65.sizeVec3 << 1; var this45 = new Array(newLength44); var newArray44 = this45; var _g54 = 0; var _g144 = _this65.sizeVec3; while(_g54 < _g144) { var i44 = _g54++; newArray44[i44] = _this65.stackVec3[i44]; _this65.stackVec3[i44] = null; } _this65.stackVec3 = newArray44; } _this65.stackVec3[_this65.sizeVec3++] = o; } if(mat311 != null) { var t0022 = 1; var t0122 = 0; var t0222 = 0; var t1022 = 0; var t1122 = 1; var t1222 = 0; var t2022 = 0; var t2122 = 0; var t2222 = 1; mat311.e00 = t0022; mat311.e01 = t0122; mat311.e02 = t0222; mat311.e10 = t1022; mat311.e11 = t1122; mat311.e12 = t1222; mat311.e20 = t2022; mat311.e21 = t2122; mat311.e22 = t2222; if(_this65.sizeMat3 == _this65.stackMat3.length) { var newLength45 = _this65.sizeMat3 << 1; var this46 = new Array(newLength45); var newArray45 = this46; var _g55 = 0; var _g145 = _this65.sizeMat3; while(_g55 < _g145) { var i45 = _g55++; newArray45[i45] = _this65.stackMat3[i45]; _this65.stackMat3[i45] = null; } _this65.stackMat3 = newArray45; } _this65.stackMat3[_this65.sizeMat3++] = mat311; } if(mat411 != null) { var t0023 = 1; var t0123 = 0; var t0223 = 0; var t0311 = 0; var t1023 = 0; var t1123 = 1; var t1223 = 0; var t1311 = 0; var t2023 = 0; var t2123 = 0; var t2223 = 1; var t2311 = 0; var t3011 = 0; var t3111 = 0; var t3211 = 0; var t3311 = 1; mat411.e00 = t0023; mat411.e01 = t0123; mat411.e02 = t0223; mat411.e03 = t0311; mat411.e10 = t1023; mat411.e11 = t1123; mat411.e12 = t1223; mat411.e13 = t1311; mat411.e20 = t2023; mat411.e21 = t2123; mat411.e22 = t2223; mat411.e23 = t2311; mat411.e30 = t3011; mat411.e31 = t3111; mat411.e32 = t3211; mat411.e33 = t3311; if(_this65.sizeMat4 == _this65.stackMat4.length) { var newLength46 = _this65.sizeMat4 << 1; var this47 = new Array(newLength46); var newArray46 = this47; var _g56 = 0; var _g146 = _this65.sizeMat4; while(_g56 < _g146) { var i46 = _g56++; newArray46[i46] = _this65.stackMat4[i46]; _this65.stackMat4[i46] = null; } _this65.stackMat4 = newArray46; } _this65.stackMat4[_this65.sizeMat4++] = mat411; } if(quat11 != null) { var tx38 = 0; var ty38 = 0; var tz38 = 0; var tw11 = 1; quat11.x = tx38; quat11.y = ty38; quat11.z = tz38; quat11.w = tw11; if(_this65.sizeQuat == _this65.stackQuat.length) { var newLength47 = _this65.sizeQuat << 1; var this48 = new Array(newLength47); var newArray47 = this48; var _g57 = 0; var _g147 = _this65.sizeQuat; while(_g57 < _g147) { var i47 = _g57++; newArray47[i47] = _this65.stackQuat[i47]; _this65.stackQuat[i47] = null; } _this65.stackQuat = newArray47; } _this65.stackQuat[_this65.sizeQuat++] = quat11; } var _this66 = this.p; var vec3 = null; var mat412 = null; var quat12 = null; if(vec3 != null) { vec3.zero(); if(_this66.sizeVec3 == _this66.stackVec3.length) { var newLength48 = _this66.sizeVec3 << 1; var this49 = new Array(newLength48); var newArray48 = this49; var _g58 = 0; var _g148 = _this66.sizeVec3; while(_g58 < _g148) { var i48 = _g58++; newArray48[i48] = _this66.stackVec3[i48]; _this66.stackVec3[i48] = null; } _this66.stackVec3 = newArray48; } _this66.stackVec3[_this66.sizeVec3++] = vec3; } if(m != null) { var t0024 = 1; var t0124 = 0; var t0224 = 0; var t1024 = 0; var t1124 = 1; var t1224 = 0; var t2024 = 0; var t2124 = 0; var t2224 = 1; m.e00 = t0024; m.e01 = t0124; m.e02 = t0224; m.e10 = t1024; m.e11 = t1124; m.e12 = t1224; m.e20 = t2024; m.e21 = t2124; m.e22 = t2224; if(_this66.sizeMat3 == _this66.stackMat3.length) { var newLength49 = _this66.sizeMat3 << 1; var this50 = new Array(newLength49); var newArray49 = this50; var _g59 = 0; var _g149 = _this66.sizeMat3; while(_g59 < _g149) { var i49 = _g59++; newArray49[i49] = _this66.stackMat3[i49]; _this66.stackMat3[i49] = null; } _this66.stackMat3 = newArray49; } _this66.stackMat3[_this66.sizeMat3++] = m; } if(mat412 != null) { var t0025 = 1; var t0125 = 0; var t0225 = 0; var t0312 = 0; var t1025 = 0; var t1125 = 1; var t1225 = 0; var t1312 = 0; var t2025 = 0; var t2125 = 0; var t2225 = 1; var t2312 = 0; var t3012 = 0; var t3112 = 0; var t3212 = 0; var t3312 = 1; mat412.e00 = t0025; mat412.e01 = t0125; mat412.e02 = t0225; mat412.e03 = t0312; mat412.e10 = t1025; mat412.e11 = t1125; mat412.e12 = t1225; mat412.e13 = t1312; mat412.e20 = t2025; mat412.e21 = t2125; mat412.e22 = t2225; mat412.e23 = t2312; mat412.e30 = t3012; mat412.e31 = t3112; mat412.e32 = t3212; mat412.e33 = t3312; if(_this66.sizeMat4 == _this66.stackMat4.length) { var newLength50 = _this66.sizeMat4 << 1; var this51 = new Array(newLength50); var newArray50 = this51; var _g60 = 0; var _g150 = _this66.sizeMat4; while(_g60 < _g150) { var i50 = _g60++; newArray50[i50] = _this66.stackMat4[i50]; _this66.stackMat4[i50] = null; } _this66.stackMat4 = newArray50; } _this66.stackMat4[_this66.sizeMat4++] = mat412; } if(quat12 != null) { var tx39 = 0; var ty39 = 0; var tz39 = 0; var tw12 = 1; quat12.x = tx39; quat12.y = ty39; quat12.z = tz39; quat12.w = tw12; if(_this66.sizeQuat == _this66.stackQuat.length) { var newLength51 = _this66.sizeQuat << 1; var this52 = new Array(newLength51); var newArray51 = this52; var _g61 = 0; var _g151 = _this66.sizeQuat; while(_g61 < _g151) { var i51 = _g61++; newArray51[i51] = _this66.stackQuat[i51]; _this66.stackQuat[i51] = null; } _this66.stackQuat = newArray51; } _this66.stackQuat[_this66.sizeQuat++] = quat12; } var _this67 = this.p; var mat312 = null; var mat413 = null; var quat13 = null; if(ex != null) { ex.zero(); if(_this67.sizeVec3 == _this67.stackVec3.length) { var newLength52 = _this67.sizeVec3 << 1; var this53 = new Array(newLength52); var newArray52 = this53; var _g62 = 0; var _g152 = _this67.sizeVec3; while(_g62 < _g152) { var i52 = _g62++; newArray52[i52] = _this67.stackVec3[i52]; _this67.stackVec3[i52] = null; } _this67.stackVec3 = newArray52; } _this67.stackVec3[_this67.sizeVec3++] = ex; } if(mat312 != null) { var t0026 = 1; var t0126 = 0; var t0226 = 0; var t1026 = 0; var t1126 = 1; var t1226 = 0; var t2026 = 0; var t2126 = 0; var t2226 = 1; mat312.e00 = t0026; mat312.e01 = t0126; mat312.e02 = t0226; mat312.e10 = t1026; mat312.e11 = t1126; mat312.e12 = t1226; mat312.e20 = t2026; mat312.e21 = t2126; mat312.e22 = t2226; if(_this67.sizeMat3 == _this67.stackMat3.length) { var newLength53 = _this67.sizeMat3 << 1; var this54 = new Array(newLength53); var newArray53 = this54; var _g63 = 0; var _g153 = _this67.sizeMat3; while(_g63 < _g153) { var i53 = _g63++; newArray53[i53] = _this67.stackMat3[i53]; _this67.stackMat3[i53] = null; } _this67.stackMat3 = newArray53; } _this67.stackMat3[_this67.sizeMat3++] = mat312; } if(mat413 != null) { var t0027 = 1; var t0127 = 0; var t0227 = 0; var t0313 = 0; var t1027 = 0; var t1127 = 1; var t1227 = 0; var t1313 = 0; var t2027 = 0; var t2127 = 0; var t2227 = 1; var t2313 = 0; var t3013 = 0; var t3113 = 0; var t3213 = 0; var t3313 = 1; mat413.e00 = t0027; mat413.e01 = t0127; mat413.e02 = t0227; mat413.e03 = t0313; mat413.e10 = t1027; mat413.e11 = t1127; mat413.e12 = t1227; mat413.e13 = t1313; mat413.e20 = t2027; mat413.e21 = t2127; mat413.e22 = t2227; mat413.e23 = t2313; mat413.e30 = t3013; mat413.e31 = t3113; mat413.e32 = t3213; mat413.e33 = t3313; if(_this67.sizeMat4 == _this67.stackMat4.length) { var newLength54 = _this67.sizeMat4 << 1; var this55 = new Array(newLength54); var newArray54 = this55; var _g64 = 0; var _g154 = _this67.sizeMat4; while(_g64 < _g154) { var i54 = _g64++; newArray54[i54] = _this67.stackMat4[i54]; _this67.stackMat4[i54] = null; } _this67.stackMat4 = newArray54; } _this67.stackMat4[_this67.sizeMat4++] = mat413; } if(quat13 != null) { var tx40 = 0; var ty40 = 0; var tz40 = 0; var tw13 = 1; quat13.x = tx40; quat13.y = ty40; quat13.z = tz40; quat13.w = tw13; if(_this67.sizeQuat == _this67.stackQuat.length) { var newLength55 = _this67.sizeQuat << 1; var this56 = new Array(newLength55); var newArray55 = this56; var _g65 = 0; var _g155 = _this67.sizeQuat; while(_g65 < _g155) { var i55 = _g65++; newArray55[i55] = _this67.stackQuat[i55]; _this67.stackQuat[i55] = null; } _this67.stackQuat = newArray55; } _this67.stackQuat[_this67.sizeQuat++] = quat13; } var _this68 = this.p; var mat313 = null; var mat414 = null; var quat14 = null; if(ey != null) { ey.zero(); if(_this68.sizeVec3 == _this68.stackVec3.length) { var newLength56 = _this68.sizeVec3 << 1; var this57 = new Array(newLength56); var newArray56 = this57; var _g66 = 0; var _g156 = _this68.sizeVec3; while(_g66 < _g156) { var i56 = _g66++; newArray56[i56] = _this68.stackVec3[i56]; _this68.stackVec3[i56] = null; } _this68.stackVec3 = newArray56; } _this68.stackVec3[_this68.sizeVec3++] = ey; } if(mat313 != null) { var t0028 = 1; var t0128 = 0; var t0228 = 0; var t1028 = 0; var t1128 = 1; var t1228 = 0; var t2028 = 0; var t2128 = 0; var t2228 = 1; mat313.e00 = t0028; mat313.e01 = t0128; mat313.e02 = t0228; mat313.e10 = t1028; mat313.e11 = t1128; mat313.e12 = t1228; mat313.e20 = t2028; mat313.e21 = t2128; mat313.e22 = t2228; if(_this68.sizeMat3 == _this68.stackMat3.length) { var newLength57 = _this68.sizeMat3 << 1; var this58 = new Array(newLength57); var newArray57 = this58; var _g67 = 0; var _g157 = _this68.sizeMat3; while(_g67 < _g157) { var i57 = _g67++; newArray57[i57] = _this68.stackMat3[i57]; _this68.stackMat3[i57] = null; } _this68.stackMat3 = newArray57; } _this68.stackMat3[_this68.sizeMat3++] = mat313; } if(mat414 != null) { var t0029 = 1; var t0129 = 0; var t0229 = 0; var t0314 = 0; var t1029 = 0; var t1129 = 1; var t1229 = 0; var t1314 = 0; var t2029 = 0; var t2129 = 0; var t2229 = 1; var t2314 = 0; var t3014 = 0; var t3114 = 0; var t3214 = 0; var t3314 = 1; mat414.e00 = t0029; mat414.e01 = t0129; mat414.e02 = t0229; mat414.e03 = t0314; mat414.e10 = t1029; mat414.e11 = t1129; mat414.e12 = t1229; mat414.e13 = t1314; mat414.e20 = t2029; mat414.e21 = t2129; mat414.e22 = t2229; mat414.e23 = t2314; mat414.e30 = t3014; mat414.e31 = t3114; mat414.e32 = t3214; mat414.e33 = t3314; if(_this68.sizeMat4 == _this68.stackMat4.length) { var newLength58 = _this68.sizeMat4 << 1; var this59 = new Array(newLength58); var newArray58 = this59; var _g68 = 0; var _g158 = _this68.sizeMat4; while(_g68 < _g158) { var i58 = _g68++; newArray58[i58] = _this68.stackMat4[i58]; _this68.stackMat4[i58] = null; } _this68.stackMat4 = newArray58; } _this68.stackMat4[_this68.sizeMat4++] = mat414; } if(quat14 != null) { var tx41 = 0; var ty41 = 0; var tz41 = 0; var tw14 = 1; quat14.x = tx41; quat14.y = ty41; quat14.z = tz41; quat14.w = tw14; if(_this68.sizeQuat == _this68.stackQuat.length) { var newLength59 = _this68.sizeQuat << 1; var this60 = new Array(newLength59); var newArray59 = this60; var _g69 = 0; var _g159 = _this68.sizeQuat; while(_g69 < _g159) { var i59 = _g69++; newArray59[i59] = _this68.stackQuat[i59]; _this68.stackQuat[i59] = null; } _this68.stackQuat = newArray59; } _this68.stackQuat[_this68.sizeQuat++] = quat14; } var _this69 = this.p; var mat314 = null; var mat415 = null; var quat15 = null; if(ez != null) { ez.zero(); if(_this69.sizeVec3 == _this69.stackVec3.length) { var newLength60 = _this69.sizeVec3 << 1; var this61 = new Array(newLength60); var newArray60 = this61; var _g70 = 0; var _g160 = _this69.sizeVec3; while(_g70 < _g160) { var i60 = _g70++; newArray60[i60] = _this69.stackVec3[i60]; _this69.stackVec3[i60] = null; } _this69.stackVec3 = newArray60; } _this69.stackVec3[_this69.sizeVec3++] = ez; } if(mat314 != null) { var t0030 = 1; var t0130 = 0; var t0230 = 0; var t1030 = 0; var t1130 = 1; var t1230 = 0; var t2030 = 0; var t2130 = 0; var t2230 = 1; mat314.e00 = t0030; mat314.e01 = t0130; mat314.e02 = t0230; mat314.e10 = t1030; mat314.e11 = t1130; mat314.e12 = t1230; mat314.e20 = t2030; mat314.e21 = t2130; mat314.e22 = t2230; if(_this69.sizeMat3 == _this69.stackMat3.length) { var newLength61 = _this69.sizeMat3 << 1; var this62 = new Array(newLength61); var newArray61 = this62; var _g71 = 0; var _g161 = _this69.sizeMat3; while(_g71 < _g161) { var i61 = _g71++; newArray61[i61] = _this69.stackMat3[i61]; _this69.stackMat3[i61] = null; } _this69.stackMat3 = newArray61; } _this69.stackMat3[_this69.sizeMat3++] = mat314; } if(mat415 != null) { var t0031 = 1; var t0131 = 0; var t0231 = 0; var t0315 = 0; var t1031 = 0; var t1131 = 1; var t1231 = 0; var t1315 = 0; var t2031 = 0; var t2131 = 0; var t2231 = 1; var t2315 = 0; var t3015 = 0; var t3115 = 0; var t3215 = 0; var t3315 = 1; mat415.e00 = t0031; mat415.e01 = t0131; mat415.e02 = t0231; mat415.e03 = t0315; mat415.e10 = t1031; mat415.e11 = t1131; mat415.e12 = t1231; mat415.e13 = t1315; mat415.e20 = t2031; mat415.e21 = t2131; mat415.e22 = t2231; mat415.e23 = t2315; mat415.e30 = t3015; mat415.e31 = t3115; mat415.e32 = t3215; mat415.e33 = t3315; if(_this69.sizeMat4 == _this69.stackMat4.length) { var newLength62 = _this69.sizeMat4 << 1; var this63 = new Array(newLength62); var newArray62 = this63; var _g72 = 0; var _g162 = _this69.sizeMat4; while(_g72 < _g162) { var i62 = _g72++; newArray62[i62] = _this69.stackMat4[i62]; _this69.stackMat4[i62] = null; } _this69.stackMat4 = newArray62; } _this69.stackMat4[_this69.sizeMat4++] = mat415; } if(quat15 != null) { var tx42 = 0; var ty42 = 0; var tz42 = 0; var tw15 = 1; quat15.x = tx42; quat15.y = ty42; quat15.z = tz42; quat15.w = tw15; if(_this69.sizeQuat == _this69.stackQuat.length) { var newLength63 = _this69.sizeQuat << 1; var this64 = new Array(newLength63); var newArray63 = this64; var _g73 = 0; var _g163 = _this69.sizeQuat; while(_g73 < _g163) { var i63 = _g73++; newArray63[i63] = _this69.stackQuat[i63]; _this69.stackQuat[i63] = null; } _this69.stackQuat = newArray63; } _this69.stackQuat[_this69.sizeQuat++] = quat15; } } rect(v1,v2,v3,v4,n1,n2,n3,n4,color) { this.triangle(v1,v2,v3,n1,n2,n3,color); this.triangle(v1,v3,v4,n1,n3,n4,color); } point(v,color) { } triangle(v1,v2,v3,n1,n2,n3,color) { } line(v1,v2,color) { } } oimo.dynamics.common.DebugDrawStyle = class oimo_dynamics_common_DebugDrawStyle { constructor() { this.basisColorZ = new oimo.common.Vec3(0.0,0.0,1.0); this.basisColorY = new oimo.common.Vec3(0.0,1.0,0.0); this.basisColorX = new oimo.common.Vec3(1.0,0.0,0.0); this.basisLength = 0.5; this.jointRotationalConstraintRadius = 0.3; this.jointErrorColor = new oimo.common.Vec3(1.0,0.1,0.1); this.jointLineColor = new oimo.common.Vec3(0.8,0.8,0.8); this.contactBinormalLength = 0.5; this.contactTangentLength = 0.5; this.contactNormalLength = 0.5; this.contactBinormalColor = new oimo.common.Vec3(0.2,0.2,1.0); this.contactTangentColor = new oimo.common.Vec3(0.1,0.8,0.1); this.contactNormalColor = new oimo.common.Vec3(1.0,0.1,0.1); this.disabledContactColor = new oimo.common.Vec3(0.5,0.1,0.1); this.newContactColor = new oimo.common.Vec3(1.0,1.0,0.1); this.contactColor4 = new oimo.common.Vec3(0.8,0.1,1.0); this.contactColor3 = new oimo.common.Vec3(0.1,0.8,0.6); this.contactColor2 = new oimo.common.Vec3(1.0,0.6,0.1); this.contactColor = new oimo.common.Vec3(1.0,0.1,0.1); this.pairColor = new oimo.common.Vec3(1.0,1.0,0.1); this.bvhNodeColor = new oimo.common.Vec3(0.4,0.4,0.4); this.aabbColor = new oimo.common.Vec3(1.0,0.1,0.1); this.kinematicShapeColor = new oimo.common.Vec3(1.0,0.5,0.1); this.staticShapeColor = new oimo.common.Vec3(0.7,0.7,0.7); this.sleepingShapeColor2 = new oimo.common.Vec3(0.2,0.8,0.5); this.sleepingShapeColor1 = new oimo.common.Vec3(0.3,0.3,0.8); this.sleepyShapeColor2 = new oimo.common.Vec3(0.6,0.8,0.3); this.sleepyShapeColor1 = new oimo.common.Vec3(0.5,0.25,0.6); this.shapeColor2 = new oimo.common.Vec3(1.0,0.8,0.1); this.shapeColor1 = new oimo.common.Vec3(0.7,0.2,0.4); } } oimo.dynamics.common.Performance = class oimo_dynamics_common_Performance { } if(!oimo.dynamics.constraint) oimo.dynamics.constraint = {}; oimo.dynamics.constraint.ConstraintSolver = class oimo_dynamics_constraint_ConstraintSolver { constructor() { this._b1 = null; this._b2 = null; this._addedToIsland = false; } preSolveVelocity(timeStep) { } warmStart(timeStep) { } solveVelocity() { } postSolveVelocity(timeStep) { } preSolvePosition(timeStep) { } solvePositionSplitImpulse() { } solvePositionNgs(timeStep) { } postSolve() { } } oimo.dynamics.constraint.PositionCorrectionAlgorithm = class oimo_dynamics_constraint_PositionCorrectionAlgorithm { } if(!oimo.dynamics.constraint.contact) oimo.dynamics.constraint.contact = {}; oimo.dynamics.constraint.contact.ContactConstraint = class oimo_dynamics_constraint_contact_ContactConstraint { constructor(manifold) { this._solver = new oimo.dynamics.constraint.solver.pgs.PgsContactConstraintSolver(this); this._manifold = manifold; } _getVelocitySolverInfo(timeStep,info) { info.b1 = this._b1; info.b2 = this._b2; var normal; var normalX; var normalY; var normalZ; var tangent; var tangentX; var tangentY; var tangentZ; var binormal; var binormalX; var binormalY; var binormalZ; normalX = this._manifold._normalX; normalY = this._manifold._normalY; normalZ = this._manifold._normalZ; tangentX = this._manifold._tangentX; tangentY = this._manifold._tangentY; tangentZ = this._manifold._tangentZ; binormalX = this._manifold._binormalX; binormalY = this._manifold._binormalY; binormalZ = this._manifold._binormalZ; var friction = Math.sqrt(this._s1._friction * this._s2._friction); var restitution = Math.sqrt(this._s1._restitution * this._s2._restitution); var num = this._manifold._numPoints; info.numRows = 0; var posDiff; var posDiffX; var posDiffY; var posDiffZ; posDiffX = this._tf1._positionX - this._tf2._positionX; posDiffY = this._tf1._positionY - this._tf2._positionY; posDiffZ = this._tf1._positionZ - this._tf2._positionZ; var _g = 0; var _g1 = num; while(_g < _g1) { var i = _g++; var p = this._manifold._points[i]; if(p._depth < 0) { p._disabled = true; var _this = p._impulse; _this.impulseN = 0; _this.impulseT = 0; _this.impulseB = 0; _this.impulseP = 0; _this.impulseLX = 0; _this.impulseLY = 0; _this.impulseLZ = 0; continue; } else { p._disabled = false; } var row = info.rows[info.numRows++]; row.friction = friction; row.cfm = 0; var j = row.jacobianN; j.lin1X = normalX; j.lin1Y = normalY; j.lin1Z = normalZ; j.lin2X = normalX; j.lin2Y = normalY; j.lin2Z = normalZ; j.ang1X = p._relPos1Y * normalZ - p._relPos1Z * normalY; j.ang1Y = p._relPos1Z * normalX - p._relPos1X * normalZ; j.ang1Z = p._relPos1X * normalY - p._relPos1Y * normalX; j.ang2X = p._relPos2Y * normalZ - p._relPos2Z * normalY; j.ang2Y = p._relPos2Z * normalX - p._relPos2X * normalZ; j.ang2Z = p._relPos2X * normalY - p._relPos2Y * normalX; j = row.jacobianT; j.lin1X = tangentX; j.lin1Y = tangentY; j.lin1Z = tangentZ; j.lin2X = tangentX; j.lin2Y = tangentY; j.lin2Z = tangentZ; j.ang1X = p._relPos1Y * tangentZ - p._relPos1Z * tangentY; j.ang1Y = p._relPos1Z * tangentX - p._relPos1X * tangentZ; j.ang1Z = p._relPos1X * tangentY - p._relPos1Y * tangentX; j.ang2X = p._relPos2Y * tangentZ - p._relPos2Z * tangentY; j.ang2Y = p._relPos2Z * tangentX - p._relPos2X * tangentZ; j.ang2Z = p._relPos2X * tangentY - p._relPos2Y * tangentX; j = row.jacobianB; j.lin1X = binormalX; j.lin1Y = binormalY; j.lin1Z = binormalZ; j.lin2X = binormalX; j.lin2Y = binormalY; j.lin2Z = binormalZ; j.ang1X = p._relPos1Y * binormalZ - p._relPos1Z * binormalY; j.ang1Y = p._relPos1Z * binormalX - p._relPos1X * binormalZ; j.ang1Z = p._relPos1X * binormalY - p._relPos1Y * binormalX; j.ang2X = p._relPos2Y * binormalZ - p._relPos2Z * binormalY; j.ang2Y = p._relPos2Z * binormalX - p._relPos2X * binormalZ; j.ang2Z = p._relPos2X * binormalY - p._relPos2Y * binormalX; j = row.jacobianN; var rvn = j.lin1X * this._b1._velX + j.lin1Y * this._b1._velY + j.lin1Z * this._b1._velZ + (j.ang1X * this._b1._angVelX + j.ang1Y * this._b1._angVelY + j.ang1Z * this._b1._angVelZ) - (j.lin2X * this._b2._velX + j.lin2Y * this._b2._velY + j.lin2Z * this._b2._velZ + (j.ang2X * this._b2._angVelX + j.ang2Y * this._b2._angVelY + j.ang2Z * this._b2._angVelZ)); if(rvn < -oimo.common.Setting.contactEnableBounceThreshold && !p._warmStarted) { row.rhs = -rvn * restitution; } else { row.rhs = 0; } if(this._positionCorrectionAlgorithm == oimo.dynamics.constraint.PositionCorrectionAlgorithm.BAUMGARTE) { if(p._depth > oimo.common.Setting.linearSlop) { var minRhs = (p._depth - oimo.common.Setting.linearSlop) * oimo.common.Setting.velocityBaumgarte * timeStep.invDt; if(row.rhs < minRhs) { row.rhs = minRhs; } } } if(!p._warmStarted) { var _this1 = p._impulse; _this1.impulseN = 0; _this1.impulseT = 0; _this1.impulseB = 0; _this1.impulseP = 0; _this1.impulseLX = 0; _this1.impulseLY = 0; _this1.impulseLZ = 0; } row.impulse = p._impulse; } } _getPositionSolverInfo(info) { info.b1 = this._b1; info.b2 = this._b2; var normal; var normalX; var normalY; var normalZ; normalX = this._manifold._normalX; normalY = this._manifold._normalY; normalZ = this._manifold._normalZ; var num = this._manifold._numPoints; info.numRows = 0; var _g = 0; var _g1 = num; while(_g < _g1) { var i = _g++; var p = this._manifold._points[i]; if(p._disabled) { continue; } var row = info.rows[info.numRows++]; var j = row.jacobianN; j.lin1X = normalX; j.lin1Y = normalY; j.lin1Z = normalZ; j.lin2X = normalX; j.lin2Y = normalY; j.lin2Z = normalZ; j.ang1X = p._relPos1Y * normalZ - p._relPos1Z * normalY; j.ang1Y = p._relPos1Z * normalX - p._relPos1X * normalZ; j.ang1Z = p._relPos1X * normalY - p._relPos1Y * normalX; j.ang2X = p._relPos2Y * normalZ - p._relPos2Z * normalY; j.ang2Y = p._relPos2Z * normalX - p._relPos2X * normalZ; j.ang2Z = p._relPos2X * normalY - p._relPos2Y * normalX; row.rhs = p._depth - oimo.common.Setting.linearSlop; if(row.rhs < 0) { row.rhs = 0; } row.impulse = p._impulse; } } _syncManifold() { this._manifold._updateDepthsAndPositions(this._tf1,this._tf2); } getShape1() { return this._s1; } getShape2() { return this._s2; } getManifold() { return this._manifold; } isTouching() { var _g = 0; var _g1 = this._manifold._numPoints; while(_g < _g1) { var i = _g++; if(this._manifold._points[i]._depth >= 0) { return true; } } return false; } } oimo.dynamics.constraint.contact.ContactImpulse = class oimo_dynamics_constraint_contact_ContactImpulse { constructor() { this.impulseN = 0; this.impulseT = 0; this.impulseB = 0; this.impulseP = 0; this.impulseLX = 0; this.impulseLY = 0; this.impulseLZ = 0; } copyFrom(imp) { this.impulseN = imp.impulseN; this.impulseT = imp.impulseT; this.impulseB = imp.impulseB; this.impulseLX = imp.impulseLX; this.impulseLY = imp.impulseLY; this.impulseLZ = imp.impulseLZ; } } oimo.dynamics.constraint.contact.Manifold = class oimo_dynamics_constraint_contact_Manifold { constructor() { this._normalX = 0; this._normalY = 0; this._normalZ = 0; this._tangentX = 0; this._tangentY = 0; this._tangentZ = 0; this._binormalX = 0; this._binormalY = 0; this._binormalZ = 0; this._numPoints = 0; var this1 = new Array(oimo.common.Setting.maxManifoldPoints); this._points = this1; var _g = 0; var _g1 = oimo.common.Setting.maxManifoldPoints; while(_g < _g1) { var i = _g++; this._points[i] = new oimo.dynamics.constraint.contact.ManifoldPoint(); } } _clear() { var _g = 0; var _g1 = this._numPoints; while(_g < _g1) { var i = _g++; var _this = this._points[i]; _this._localPos1X = 0; _this._localPos1Y = 0; _this._localPos1Z = 0; _this._localPos2X = 0; _this._localPos2Y = 0; _this._localPos2Z = 0; _this._relPos1X = 0; _this._relPos1Y = 0; _this._relPos1Z = 0; _this._relPos2X = 0; _this._relPos2Y = 0; _this._relPos2Z = 0; _this._pos1X = 0; _this._pos1Y = 0; _this._pos1Z = 0; _this._pos2X = 0; _this._pos2Y = 0; _this._pos2Z = 0; _this._depth = 0; var _this1 = _this._impulse; _this1.impulseN = 0; _this1.impulseT = 0; _this1.impulseB = 0; _this1.impulseP = 0; _this1.impulseLX = 0; _this1.impulseLY = 0; _this1.impulseLZ = 0; _this._warmStarted = false; _this._disabled = false; _this._id = -1; } this._numPoints = 0; } _buildBasis(normal) { var v = normal; this._normalX = v.x; this._normalY = v.y; this._normalZ = v.z; var nx = normal.x; var ny = normal.y; var nz = normal.z; var nx2 = nx * nx; var ny2 = ny * ny; var nz2 = nz * nz; var tx; var ty; var tz; var bx; var by; var bz; if(nx2 < ny2) { if(nx2 < nz2) { var invL = 1 / Math.sqrt(ny2 + nz2); tx = 0; ty = -nz * invL; tz = ny * invL; bx = ny * tz - nz * ty; by = -nx * tz; bz = nx * ty; } else { var invL1 = 1 / Math.sqrt(nx2 + ny2); tx = -ny * invL1; ty = nx * invL1; tz = 0; bx = -nz * ty; by = nz * tx; bz = nx * ty - ny * tx; } } else if(ny2 < nz2) { var invL2 = 1 / Math.sqrt(nx2 + nz2); tx = nz * invL2; ty = 0; tz = -nx * invL2; bx = ny * tz; by = nz * tx - nx * tz; bz = -ny * tx; } else { var invL3 = 1 / Math.sqrt(nx2 + ny2); tx = -ny * invL3; ty = nx * invL3; tz = 0; bx = -nz * ty; by = nz * tx; bz = nx * ty - ny * tx; } this._tangentX = tx; this._tangentY = ty; this._tangentZ = tz; this._binormalX = bx; this._binormalY = by; this._binormalZ = bz; } _updateDepthsAndPositions(tf1,tf2) { var _g = 0; var _g1 = this._numPoints; while(_g < _g1) { var i = _g++; var p = this._points[i]; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = tf1._rotation00 * p._localPos1X + tf1._rotation01 * p._localPos1Y + tf1._rotation02 * p._localPos1Z; __tmp__Y = tf1._rotation10 * p._localPos1X + tf1._rotation11 * p._localPos1Y + tf1._rotation12 * p._localPos1Z; __tmp__Z = tf1._rotation20 * p._localPos1X + tf1._rotation21 * p._localPos1Y + tf1._rotation22 * p._localPos1Z; p._relPos1X = __tmp__X; p._relPos1Y = __tmp__Y; p._relPos1Z = __tmp__Z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = tf2._rotation00 * p._localPos2X + tf2._rotation01 * p._localPos2Y + tf2._rotation02 * p._localPos2Z; __tmp__Y1 = tf2._rotation10 * p._localPos2X + tf2._rotation11 * p._localPos2Y + tf2._rotation12 * p._localPos2Z; __tmp__Z1 = tf2._rotation20 * p._localPos2X + tf2._rotation21 * p._localPos2Y + tf2._rotation22 * p._localPos2Z; p._relPos2X = __tmp__X1; p._relPos2Y = __tmp__Y1; p._relPos2Z = __tmp__Z1; p._pos1X = p._relPos1X + tf1._positionX; p._pos1Y = p._relPos1Y + tf1._positionY; p._pos1Z = p._relPos1Z + tf1._positionZ; p._pos2X = p._relPos2X + tf2._positionX; p._pos2Y = p._relPos2Y + tf2._positionY; p._pos2Z = p._relPos2Z + tf2._positionZ; var diff; var diffX; var diffY; var diffZ; diffX = p._pos1X - p._pos2X; diffY = p._pos1Y - p._pos2Y; diffZ = p._pos1Z - p._pos2Z; var dotN = diffX * this._normalX + diffY * this._normalY + diffZ * this._normalZ; p._depth = -dotN; } } getNormal() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._normalX; v1.y = this._normalY; v1.z = this._normalZ; return v; } getNormalTo(normal) { var v = normal; v.x = this._normalX; v.y = this._normalY; v.z = this._normalZ; } getTangent() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._tangentX; v1.y = this._tangentY; v1.z = this._tangentZ; return v; } getTangentTo(tangent) { var v = tangent; v.x = this._tangentX; v.y = this._tangentY; v.z = this._tangentZ; } getBinormal() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._binormalX; v1.y = this._binormalY; v1.z = this._binormalZ; return v; } getBinormalTo(binormal) { var v = binormal; v.x = this._binormalX; v.y = this._binormalY; v.z = this._binormalZ; } getPoints() { return this._points; } getNumPoints() { return this._numPoints; } } oimo.dynamics.constraint.contact.ManifoldPoint = class oimo_dynamics_constraint_contact_ManifoldPoint { constructor() { this._localPos1X = 0; this._localPos1Y = 0; this._localPos1Z = 0; this._localPos2X = 0; this._localPos2Y = 0; this._localPos2Z = 0; this._relPos1X = 0; this._relPos1Y = 0; this._relPos1Z = 0; this._relPos2X = 0; this._relPos2Y = 0; this._relPos2Z = 0; this._pos1X = 0; this._pos1Y = 0; this._pos1Z = 0; this._pos2X = 0; this._pos2Y = 0; this._pos2Z = 0; this._depth = 0; this._impulse = new oimo.dynamics.constraint.contact.ContactImpulse(); this._warmStarted = false; this._disabled = false; this._id = -1; } getPosition1() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._pos1X; v1.y = this._pos1Y; v1.z = this._pos1Z; return v; } getPosition1To(position) { var v = position; v.x = this._pos1X; v.y = this._pos1Y; v.z = this._pos1Z; } getPosition2() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._pos2X; v1.y = this._pos2Y; v1.z = this._pos2Z; return v; } getPosition2To(position) { var v = position; v.x = this._pos2X; v.y = this._pos2Y; v.z = this._pos2Z; } getDepth() { return this._depth; } isWarmStarted() { return this._warmStarted; } getNormalImpulse() { return this._impulse.impulseN; } getTangentImpulse() { return this._impulse.impulseT; } getBinormalImpulse() { return this._impulse.impulseB; } isEnabled() { return !this._disabled; } } oimo.dynamics.constraint.contact.ManifoldUpdater = class oimo_dynamics_constraint_contact_ManifoldUpdater { constructor(manifold) { this._manifold = manifold; this.numOldPoints = 0; var this1 = new Array(oimo.common.Setting.maxManifoldPoints); this.oldPoints = this1; var _g = 0; var _g1 = oimo.common.Setting.maxManifoldPoints; while(_g < _g1) { var i = _g++; this.oldPoints[i] = new oimo.dynamics.constraint.contact.ManifoldPoint(); } } removeOutdatedPoints() { var num = this._manifold._numPoints; var index = num; while(--index >= 0) { var p = this._manifold._points[index]; var diff; var diffX; var diffY; var diffZ; diffX = p._pos1X - p._pos2X; diffY = p._pos1Y - p._pos2Y; diffZ = p._pos1Z - p._pos2Z; var dotN = this._manifold._normalX * diffX + this._manifold._normalY * diffY + this._manifold._normalZ * diffZ; if(dotN > oimo.common.Setting.contactPersistenceThreshold) { this.removeManifoldPoint(index); continue; } diffX += this._manifold._normalX * -dotN; diffY += this._manifold._normalY * -dotN; diffZ += this._manifold._normalZ * -dotN; if(diffX * diffX + diffY * diffY + diffZ * diffZ > oimo.common.Setting.contactPersistenceThreshold * oimo.common.Setting.contactPersistenceThreshold) { this.removeManifoldPoint(index); continue; } } } removeManifoldPoint(index) { var lastIndex = --this._manifold._numPoints; if(index != lastIndex) { var tmp = this._manifold._points[index]; this._manifold._points[index] = this._manifold._points[lastIndex]; this._manifold._points[lastIndex] = tmp; } var _this = this._manifold._points[lastIndex]; _this._localPos1X = 0; _this._localPos1Y = 0; _this._localPos1Z = 0; _this._localPos2X = 0; _this._localPos2Y = 0; _this._localPos2Z = 0; _this._relPos1X = 0; _this._relPos1Y = 0; _this._relPos1Z = 0; _this._relPos2X = 0; _this._relPos2Y = 0; _this._relPos2Z = 0; _this._pos1X = 0; _this._pos1Y = 0; _this._pos1Z = 0; _this._pos2X = 0; _this._pos2Y = 0; _this._pos2Z = 0; _this._depth = 0; var _this1 = _this._impulse; _this1.impulseN = 0; _this1.impulseT = 0; _this1.impulseB = 0; _this1.impulseP = 0; _this1.impulseLX = 0; _this1.impulseLY = 0; _this1.impulseLZ = 0; _this._warmStarted = false; _this._disabled = false; _this._id = -1; } addManifoldPoint(point,tf1,tf2) { var num = this._manifold._numPoints; if(num == oimo.common.Setting.maxManifoldPoints) { var targetIndex = this.computeTargetIndex(point,tf1,tf2); var _this = this._manifold._points[targetIndex]; var v = point.position1; _this._pos1X = v.x; _this._pos1Y = v.y; _this._pos1Z = v.z; var v1 = point.position2; _this._pos2X = v1.x; _this._pos2Y = v1.y; _this._pos2Z = v1.z; _this._relPos1X = _this._pos1X - tf1._positionX; _this._relPos1Y = _this._pos1Y - tf1._positionY; _this._relPos1Z = _this._pos1Z - tf1._positionZ; _this._relPos2X = _this._pos2X - tf2._positionX; _this._relPos2Y = _this._pos2Y - tf2._positionY; _this._relPos2Z = _this._pos2Z - tf2._positionZ; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = tf1._rotation00 * _this._relPos1X + tf1._rotation10 * _this._relPos1Y + tf1._rotation20 * _this._relPos1Z; __tmp__Y = tf1._rotation01 * _this._relPos1X + tf1._rotation11 * _this._relPos1Y + tf1._rotation21 * _this._relPos1Z; __tmp__Z = tf1._rotation02 * _this._relPos1X + tf1._rotation12 * _this._relPos1Y + tf1._rotation22 * _this._relPos1Z; _this._localPos1X = __tmp__X; _this._localPos1Y = __tmp__Y; _this._localPos1Z = __tmp__Z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = tf2._rotation00 * _this._relPos2X + tf2._rotation10 * _this._relPos2Y + tf2._rotation20 * _this._relPos2Z; __tmp__Y1 = tf2._rotation01 * _this._relPos2X + tf2._rotation11 * _this._relPos2Y + tf2._rotation21 * _this._relPos2Z; __tmp__Z1 = tf2._rotation02 * _this._relPos2X + tf2._rotation12 * _this._relPos2Y + tf2._rotation22 * _this._relPos2Z; _this._localPos2X = __tmp__X1; _this._localPos2Y = __tmp__Y1; _this._localPos2Z = __tmp__Z1; _this._depth = point.depth; var _this1 = _this._impulse; _this1.impulseN = 0; _this1.impulseT = 0; _this1.impulseB = 0; _this1.impulseP = 0; _this1.impulseLX = 0; _this1.impulseLY = 0; _this1.impulseLZ = 0; _this._id = point.id; _this._warmStarted = false; _this._disabled = false; return; } var _this2 = this._manifold._points[num]; var v2 = point.position1; _this2._pos1X = v2.x; _this2._pos1Y = v2.y; _this2._pos1Z = v2.z; var v3 = point.position2; _this2._pos2X = v3.x; _this2._pos2Y = v3.y; _this2._pos2Z = v3.z; _this2._relPos1X = _this2._pos1X - tf1._positionX; _this2._relPos1Y = _this2._pos1Y - tf1._positionY; _this2._relPos1Z = _this2._pos1Z - tf1._positionZ; _this2._relPos2X = _this2._pos2X - tf2._positionX; _this2._relPos2Y = _this2._pos2Y - tf2._positionY; _this2._relPos2Z = _this2._pos2Z - tf2._positionZ; var __tmp__X2; var __tmp__Y2; var __tmp__Z2; __tmp__X2 = tf1._rotation00 * _this2._relPos1X + tf1._rotation10 * _this2._relPos1Y + tf1._rotation20 * _this2._relPos1Z; __tmp__Y2 = tf1._rotation01 * _this2._relPos1X + tf1._rotation11 * _this2._relPos1Y + tf1._rotation21 * _this2._relPos1Z; __tmp__Z2 = tf1._rotation02 * _this2._relPos1X + tf1._rotation12 * _this2._relPos1Y + tf1._rotation22 * _this2._relPos1Z; _this2._localPos1X = __tmp__X2; _this2._localPos1Y = __tmp__Y2; _this2._localPos1Z = __tmp__Z2; var __tmp__X3; var __tmp__Y3; var __tmp__Z3; __tmp__X3 = tf2._rotation00 * _this2._relPos2X + tf2._rotation10 * _this2._relPos2Y + tf2._rotation20 * _this2._relPos2Z; __tmp__Y3 = tf2._rotation01 * _this2._relPos2X + tf2._rotation11 * _this2._relPos2Y + tf2._rotation21 * _this2._relPos2Z; __tmp__Z3 = tf2._rotation02 * _this2._relPos2X + tf2._rotation12 * _this2._relPos2Y + tf2._rotation22 * _this2._relPos2Z; _this2._localPos2X = __tmp__X3; _this2._localPos2Y = __tmp__Y3; _this2._localPos2Z = __tmp__Z3; _this2._depth = point.depth; var _this3 = _this2._impulse; _this3.impulseN = 0; _this3.impulseT = 0; _this3.impulseB = 0; _this3.impulseP = 0; _this3.impulseLX = 0; _this3.impulseLY = 0; _this3.impulseLZ = 0; _this2._id = point.id; _this2._warmStarted = false; _this2._disabled = false; this._manifold._numPoints++; } computeTargetIndex(newPoint,tf1,tf2) { var p1 = this._manifold._points[0]; var p2 = this._manifold._points[1]; var p3 = this._manifold._points[2]; var p4 = this._manifold._points[3]; var maxDepth = p1._depth; var maxDepthIndex = 0; if(p2._depth > maxDepth) { maxDepth = p2._depth; maxDepthIndex = 1; } if(p3._depth > maxDepth) { maxDepth = p3._depth; maxDepthIndex = 2; } if(p4._depth > maxDepth) { maxDepth = p4._depth; maxDepthIndex = 3; } var rp1; var rp1X; var rp1Y; var rp1Z; var v = newPoint.position1; rp1X = v.x; rp1Y = v.y; rp1Z = v.z; rp1X -= tf1._positionX; rp1Y -= tf1._positionY; rp1Z -= tf1._positionZ; var p1X = p2._relPos1X; var p1Y = p2._relPos1Y; var p1Z = p2._relPos1Z; var p2X = p3._relPos1X; var p2Y = p3._relPos1Y; var p2Z = p3._relPos1Z; var p3X = p4._relPos1X; var p3Y = p4._relPos1Y; var p3Z = p4._relPos1Z; var v12; var v12X; var v12Y; var v12Z; var v34; var v34X; var v34Y; var v34Z; var v13; var v13X; var v13Y; var v13Z; var v24; var v24X; var v24Y; var v24Z; var v14; var v14X; var v14Y; var v14Z; var v23; var v23X; var v23Y; var v23Z; v12X = p2X - p1X; v12Y = p2Y - p1Y; v12Z = p2Z - p1Z; v34X = rp1X - p3X; v34Y = rp1Y - p3Y; v34Z = rp1Z - p3Z; v13X = p3X - p1X; v13Y = p3Y - p1Y; v13Z = p3Z - p1Z; v24X = rp1X - p2X; v24Y = rp1Y - p2Y; v24Z = rp1Z - p2Z; v14X = rp1X - p1X; v14Y = rp1Y - p1Y; v14Z = rp1Z - p1Z; v23X = p3X - p2X; v23Y = p3Y - p2Y; v23Z = p3Z - p2Z; var cross1; var cross1X; var cross1Y; var cross1Z; var cross2; var cross2X; var cross2Y; var cross2Z; var cross3; var cross3X; var cross3Y; var cross3Z; cross1X = v12Y * v34Z - v12Z * v34Y; cross1Y = v12Z * v34X - v12X * v34Z; cross1Z = v12X * v34Y - v12Y * v34X; cross2X = v13Y * v24Z - v13Z * v24Y; cross2Y = v13Z * v24X - v13X * v24Z; cross2Z = v13X * v24Y - v13Y * v24X; cross3X = v14Y * v23Z - v14Z * v23Y; cross3Y = v14Z * v23X - v14X * v23Z; cross3Z = v14X * v23Y - v14Y * v23X; var a1 = cross1X * cross1X + cross1Y * cross1Y + cross1Z * cross1Z; var a2 = cross2X * cross2X + cross2Y * cross2Y + cross2Z * cross2Z; var a3 = cross3X * cross3X + cross3Y * cross3Y + cross3Z * cross3Z; var a11 = a1 > a2 ? a1 > a3 ? a1 : a3 : a2 > a3 ? a2 : a3; var p1X1 = p1._relPos1X; var p1Y1 = p1._relPos1Y; var p1Z1 = p1._relPos1Z; var p2X1 = p3._relPos1X; var p2Y1 = p3._relPos1Y; var p2Z1 = p3._relPos1Z; var p3X1 = p4._relPos1X; var p3Y1 = p4._relPos1Y; var p3Z1 = p4._relPos1Z; var v121; var v12X1; var v12Y1; var v12Z1; var v341; var v34X1; var v34Y1; var v34Z1; var v131; var v13X1; var v13Y1; var v13Z1; var v241; var v24X1; var v24Y1; var v24Z1; var v141; var v14X1; var v14Y1; var v14Z1; var v231; var v23X1; var v23Y1; var v23Z1; v12X1 = p2X1 - p1X1; v12Y1 = p2Y1 - p1Y1; v12Z1 = p2Z1 - p1Z1; v34X1 = rp1X - p3X1; v34Y1 = rp1Y - p3Y1; v34Z1 = rp1Z - p3Z1; v13X1 = p3X1 - p1X1; v13Y1 = p3Y1 - p1Y1; v13Z1 = p3Z1 - p1Z1; v24X1 = rp1X - p2X1; v24Y1 = rp1Y - p2Y1; v24Z1 = rp1Z - p2Z1; v14X1 = rp1X - p1X1; v14Y1 = rp1Y - p1Y1; v14Z1 = rp1Z - p1Z1; v23X1 = p3X1 - p2X1; v23Y1 = p3Y1 - p2Y1; v23Z1 = p3Z1 - p2Z1; var cross11; var cross1X1; var cross1Y1; var cross1Z1; var cross21; var cross2X1; var cross2Y1; var cross2Z1; var cross31; var cross3X1; var cross3Y1; var cross3Z1; cross1X1 = v12Y1 * v34Z1 - v12Z1 * v34Y1; cross1Y1 = v12Z1 * v34X1 - v12X1 * v34Z1; cross1Z1 = v12X1 * v34Y1 - v12Y1 * v34X1; cross2X1 = v13Y1 * v24Z1 - v13Z1 * v24Y1; cross2Y1 = v13Z1 * v24X1 - v13X1 * v24Z1; cross2Z1 = v13X1 * v24Y1 - v13Y1 * v24X1; cross3X1 = v14Y1 * v23Z1 - v14Z1 * v23Y1; cross3Y1 = v14Z1 * v23X1 - v14X1 * v23Z1; cross3Z1 = v14X1 * v23Y1 - v14Y1 * v23X1; var a12 = cross1X1 * cross1X1 + cross1Y1 * cross1Y1 + cross1Z1 * cross1Z1; var a21 = cross2X1 * cross2X1 + cross2Y1 * cross2Y1 + cross2Z1 * cross2Z1; var a31 = cross3X1 * cross3X1 + cross3Y1 * cross3Y1 + cross3Z1 * cross3Z1; var a22 = a12 > a21 ? a12 > a31 ? a12 : a31 : a21 > a31 ? a21 : a31; var p1X2 = p1._relPos1X; var p1Y2 = p1._relPos1Y; var p1Z2 = p1._relPos1Z; var p2X2 = p2._relPos1X; var p2Y2 = p2._relPos1Y; var p2Z2 = p2._relPos1Z; var p3X2 = p4._relPos1X; var p3Y2 = p4._relPos1Y; var p3Z2 = p4._relPos1Z; var v122; var v12X2; var v12Y2; var v12Z2; var v342; var v34X2; var v34Y2; var v34Z2; var v132; var v13X2; var v13Y2; var v13Z2; var v242; var v24X2; var v24Y2; var v24Z2; var v142; var v14X2; var v14Y2; var v14Z2; var v232; var v23X2; var v23Y2; var v23Z2; v12X2 = p2X2 - p1X2; v12Y2 = p2Y2 - p1Y2; v12Z2 = p2Z2 - p1Z2; v34X2 = rp1X - p3X2; v34Y2 = rp1Y - p3Y2; v34Z2 = rp1Z - p3Z2; v13X2 = p3X2 - p1X2; v13Y2 = p3Y2 - p1Y2; v13Z2 = p3Z2 - p1Z2; v24X2 = rp1X - p2X2; v24Y2 = rp1Y - p2Y2; v24Z2 = rp1Z - p2Z2; v14X2 = rp1X - p1X2; v14Y2 = rp1Y - p1Y2; v14Z2 = rp1Z - p1Z2; v23X2 = p3X2 - p2X2; v23Y2 = p3Y2 - p2Y2; v23Z2 = p3Z2 - p2Z2; var cross12; var cross1X2; var cross1Y2; var cross1Z2; var cross22; var cross2X2; var cross2Y2; var cross2Z2; var cross32; var cross3X2; var cross3Y2; var cross3Z2; cross1X2 = v12Y2 * v34Z2 - v12Z2 * v34Y2; cross1Y2 = v12Z2 * v34X2 - v12X2 * v34Z2; cross1Z2 = v12X2 * v34Y2 - v12Y2 * v34X2; cross2X2 = v13Y2 * v24Z2 - v13Z2 * v24Y2; cross2Y2 = v13Z2 * v24X2 - v13X2 * v24Z2; cross2Z2 = v13X2 * v24Y2 - v13Y2 * v24X2; cross3X2 = v14Y2 * v23Z2 - v14Z2 * v23Y2; cross3Y2 = v14Z2 * v23X2 - v14X2 * v23Z2; cross3Z2 = v14X2 * v23Y2 - v14Y2 * v23X2; var a13 = cross1X2 * cross1X2 + cross1Y2 * cross1Y2 + cross1Z2 * cross1Z2; var a23 = cross2X2 * cross2X2 + cross2Y2 * cross2Y2 + cross2Z2 * cross2Z2; var a32 = cross3X2 * cross3X2 + cross3Y2 * cross3Y2 + cross3Z2 * cross3Z2; var a33 = a13 > a23 ? a13 > a32 ? a13 : a32 : a23 > a32 ? a23 : a32; var p1X3 = p1._relPos1X; var p1Y3 = p1._relPos1Y; var p1Z3 = p1._relPos1Z; var p2X3 = p2._relPos1X; var p2Y3 = p2._relPos1Y; var p2Z3 = p2._relPos1Z; var p3X3 = p3._relPos1X; var p3Y3 = p3._relPos1Y; var p3Z3 = p3._relPos1Z; var v123; var v12X3; var v12Y3; var v12Z3; var v343; var v34X3; var v34Y3; var v34Z3; var v133; var v13X3; var v13Y3; var v13Z3; var v243; var v24X3; var v24Y3; var v24Z3; var v143; var v14X3; var v14Y3; var v14Z3; var v233; var v23X3; var v23Y3; var v23Z3; v12X3 = p2X3 - p1X3; v12Y3 = p2Y3 - p1Y3; v12Z3 = p2Z3 - p1Z3; v34X3 = rp1X - p3X3; v34Y3 = rp1Y - p3Y3; v34Z3 = rp1Z - p3Z3; v13X3 = p3X3 - p1X3; v13Y3 = p3Y3 - p1Y3; v13Z3 = p3Z3 - p1Z3; v24X3 = rp1X - p2X3; v24Y3 = rp1Y - p2Y3; v24Z3 = rp1Z - p2Z3; v14X3 = rp1X - p1X3; v14Y3 = rp1Y - p1Y3; v14Z3 = rp1Z - p1Z3; v23X3 = p3X3 - p2X3; v23Y3 = p3Y3 - p2Y3; v23Z3 = p3Z3 - p2Z3; var cross13; var cross1X3; var cross1Y3; var cross1Z3; var cross23; var cross2X3; var cross2Y3; var cross2Z3; var cross33; var cross3X3; var cross3Y3; var cross3Z3; cross1X3 = v12Y3 * v34Z3 - v12Z3 * v34Y3; cross1Y3 = v12Z3 * v34X3 - v12X3 * v34Z3; cross1Z3 = v12X3 * v34Y3 - v12Y3 * v34X3; cross2X3 = v13Y3 * v24Z3 - v13Z3 * v24Y3; cross2Y3 = v13Z3 * v24X3 - v13X3 * v24Z3; cross2Z3 = v13X3 * v24Y3 - v13Y3 * v24X3; cross3X3 = v14Y3 * v23Z3 - v14Z3 * v23Y3; cross3Y3 = v14Z3 * v23X3 - v14X3 * v23Z3; cross3Z3 = v14X3 * v23Y3 - v14Y3 * v23X3; var a14 = cross1X3 * cross1X3 + cross1Y3 * cross1Y3 + cross1Z3 * cross1Z3; var a24 = cross2X3 * cross2X3 + cross2Y3 * cross2Y3 + cross2Z3 * cross2Z3; var a34 = cross3X3 * cross3X3 + cross3Y3 * cross3Y3 + cross3Z3 * cross3Z3; var a4 = a14 > a24 ? a14 > a34 ? a14 : a34 : a24 > a34 ? a24 : a34; var max = a11; var target = 0; if(a22 > max && maxDepthIndex != 1 || maxDepthIndex == 0) { max = a22; target = 1; } if(a33 > max && maxDepthIndex != 2) { max = a33; target = 2; } if(a4 > max && maxDepthIndex != 3) { max = a4; target = 3; } return target; } computeRelativePositions(tf1,tf2) { var num = this._manifold._numPoints; var _g = 0; var _g1 = num; while(_g < _g1) { var i = _g++; var p = this._manifold._points[i]; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = tf1._rotation00 * p._localPos1X + tf1._rotation01 * p._localPos1Y + tf1._rotation02 * p._localPos1Z; __tmp__Y = tf1._rotation10 * p._localPos1X + tf1._rotation11 * p._localPos1Y + tf1._rotation12 * p._localPos1Z; __tmp__Z = tf1._rotation20 * p._localPos1X + tf1._rotation21 * p._localPos1Y + tf1._rotation22 * p._localPos1Z; p._relPos1X = __tmp__X; p._relPos1Y = __tmp__Y; p._relPos1Z = __tmp__Z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = tf2._rotation00 * p._localPos2X + tf2._rotation01 * p._localPos2Y + tf2._rotation02 * p._localPos2Z; __tmp__Y1 = tf2._rotation10 * p._localPos2X + tf2._rotation11 * p._localPos2Y + tf2._rotation12 * p._localPos2Z; __tmp__Z1 = tf2._rotation20 * p._localPos2X + tf2._rotation21 * p._localPos2Y + tf2._rotation22 * p._localPos2Z; p._relPos2X = __tmp__X1; p._relPos2Y = __tmp__Y1; p._relPos2Z = __tmp__Z1; p._warmStarted = true; } } findNearestContactPointIndex(target,tf1,tf2) { var nearestSq = oimo.common.Setting.contactPersistenceThreshold * oimo.common.Setting.contactPersistenceThreshold; var idx = -1; var _g = 0; var _g1 = this._manifold._numPoints; while(_g < _g1) { var i = _g++; var mp = this._manifold._points[i]; var rp1; var rp1X; var rp1Y; var rp1Z; var rp2; var rp2X; var rp2Y; var rp2Z; var v = target.position1; rp1X = v.x; rp1Y = v.y; rp1Z = v.z; var v1 = target.position2; rp2X = v1.x; rp2Y = v1.y; rp2Z = v1.z; rp1X -= tf1._positionX; rp1Y -= tf1._positionY; rp1Z -= tf1._positionZ; rp2X -= tf2._positionX; rp2Y -= tf2._positionY; rp2Z -= tf2._positionZ; var diff1; var diff1X; var diff1Y; var diff1Z; var diff2; var diff2X; var diff2Y; var diff2Z; diff1X = mp._relPos1X - rp1X; diff1Y = mp._relPos1Y - rp1Y; diff1Z = mp._relPos1Z - rp1Z; diff2X = mp._relPos2X - rp2X; diff2Y = mp._relPos2Y - rp2Y; diff2Z = mp._relPos2Z - rp2Z; var sq1 = diff1X * diff1X + diff1Y * diff1Y + diff1Z * diff1Z; var sq2 = diff2X * diff2X + diff2Y * diff2Y + diff2Z * diff2Z; var d = sq1 < sq2 ? sq1 : sq2; if(d < nearestSq) { nearestSq = d; idx = i; } } return idx; } totalUpdate(result,tf1,tf2) { this.numOldPoints = this._manifold._numPoints; var _g = 0; var _g1 = this.numOldPoints; while(_g < _g1) { var i = _g++; var _this = this.oldPoints[i]; var cp = this._manifold._points[i]; _this._localPos1X = cp._localPos1X; _this._localPos1Y = cp._localPos1Y; _this._localPos1Z = cp._localPos1Z; _this._localPos2X = cp._localPos2X; _this._localPos2Y = cp._localPos2Y; _this._localPos2Z = cp._localPos2Z; _this._relPos1X = cp._relPos1X; _this._relPos1Y = cp._relPos1Y; _this._relPos1Z = cp._relPos1Z; _this._relPos2X = cp._relPos2X; _this._relPos2Y = cp._relPos2Y; _this._relPos2Z = cp._relPos2Z; _this._pos1X = cp._pos1X; _this._pos1Y = cp._pos1Y; _this._pos1Z = cp._pos1Z; _this._pos2X = cp._pos2X; _this._pos2Y = cp._pos2Y; _this._pos2Z = cp._pos2Z; _this._depth = cp._depth; _this._impulse.copyFrom(cp._impulse); _this._id = cp._id; _this._warmStarted = cp._warmStarted; _this._disabled = false; } var num = result.numPoints; this._manifold._numPoints = num; var _g2 = 0; var _g11 = num; while(_g2 < _g11) { var i1 = _g2++; var p = this._manifold._points[i1]; var ref = result.points[i1]; var v = ref.position1; p._pos1X = v.x; p._pos1Y = v.y; p._pos1Z = v.z; var v1 = ref.position2; p._pos2X = v1.x; p._pos2Y = v1.y; p._pos2Z = v1.z; p._relPos1X = p._pos1X - tf1._positionX; p._relPos1Y = p._pos1Y - tf1._positionY; p._relPos1Z = p._pos1Z - tf1._positionZ; p._relPos2X = p._pos2X - tf2._positionX; p._relPos2Y = p._pos2Y - tf2._positionY; p._relPos2Z = p._pos2Z - tf2._positionZ; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = tf1._rotation00 * p._relPos1X + tf1._rotation10 * p._relPos1Y + tf1._rotation20 * p._relPos1Z; __tmp__Y = tf1._rotation01 * p._relPos1X + tf1._rotation11 * p._relPos1Y + tf1._rotation21 * p._relPos1Z; __tmp__Z = tf1._rotation02 * p._relPos1X + tf1._rotation12 * p._relPos1Y + tf1._rotation22 * p._relPos1Z; p._localPos1X = __tmp__X; p._localPos1Y = __tmp__Y; p._localPos1Z = __tmp__Z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = tf2._rotation00 * p._relPos2X + tf2._rotation10 * p._relPos2Y + tf2._rotation20 * p._relPos2Z; __tmp__Y1 = tf2._rotation01 * p._relPos2X + tf2._rotation11 * p._relPos2Y + tf2._rotation21 * p._relPos2Z; __tmp__Z1 = tf2._rotation02 * p._relPos2X + tf2._rotation12 * p._relPos2Y + tf2._rotation22 * p._relPos2Z; p._localPos2X = __tmp__X1; p._localPos2Y = __tmp__Y1; p._localPos2Z = __tmp__Z1; p._depth = ref.depth; var _this1 = p._impulse; _this1.impulseN = 0; _this1.impulseT = 0; _this1.impulseB = 0; _this1.impulseP = 0; _this1.impulseLX = 0; _this1.impulseLY = 0; _this1.impulseLZ = 0; p._id = ref.id; p._warmStarted = false; p._disabled = false; var _g3 = 0; var _g12 = this.numOldPoints; while(_g3 < _g12) { var i2 = _g3++; var ocp = this.oldPoints[i2]; if(p._id == ocp._id) { p._impulse.copyFrom(ocp._impulse); p._warmStarted = true; break; } } } } incrementalUpdate(result,tf1,tf2) { this._manifold._updateDepthsAndPositions(tf1,tf2); var _g = 0; var _g1 = this._manifold._numPoints; while(_g < _g1) { var i = _g++; this._manifold._points[i]._warmStarted = true; } var newPoint = result.points[0]; var index = this.findNearestContactPointIndex(newPoint,tf1,tf2); if(index == -1) { this.addManifoldPoint(newPoint,tf1,tf2); } else { var cp = this._manifold._points[index]; var v = newPoint.position1; cp._pos1X = v.x; cp._pos1Y = v.y; cp._pos1Z = v.z; var v1 = newPoint.position2; cp._pos2X = v1.x; cp._pos2Y = v1.y; cp._pos2Z = v1.z; cp._relPos1X = cp._pos1X - tf1._positionX; cp._relPos1Y = cp._pos1Y - tf1._positionY; cp._relPos1Z = cp._pos1Z - tf1._positionZ; cp._relPos2X = cp._pos2X - tf2._positionX; cp._relPos2Y = cp._pos2Y - tf2._positionY; cp._relPos2Z = cp._pos2Z - tf2._positionZ; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = tf1._rotation00 * cp._relPos1X + tf1._rotation10 * cp._relPos1Y + tf1._rotation20 * cp._relPos1Z; __tmp__Y = tf1._rotation01 * cp._relPos1X + tf1._rotation11 * cp._relPos1Y + tf1._rotation21 * cp._relPos1Z; __tmp__Z = tf1._rotation02 * cp._relPos1X + tf1._rotation12 * cp._relPos1Y + tf1._rotation22 * cp._relPos1Z; cp._localPos1X = __tmp__X; cp._localPos1Y = __tmp__Y; cp._localPos1Z = __tmp__Z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = tf2._rotation00 * cp._relPos2X + tf2._rotation10 * cp._relPos2Y + tf2._rotation20 * cp._relPos2Z; __tmp__Y1 = tf2._rotation01 * cp._relPos2X + tf2._rotation11 * cp._relPos2Y + tf2._rotation21 * cp._relPos2Z; __tmp__Z1 = tf2._rotation02 * cp._relPos2X + tf2._rotation12 * cp._relPos2Y + tf2._rotation22 * cp._relPos2Z; cp._localPos2X = __tmp__X1; cp._localPos2Y = __tmp__Y1; cp._localPos2Z = __tmp__Z1; cp._depth = newPoint.depth; } this.removeOutdatedPoints(); } } if(!oimo.dynamics.constraint.info) oimo.dynamics.constraint.info = {}; oimo.dynamics.constraint.info.JacobianRow = class oimo_dynamics_constraint_info_JacobianRow { constructor() { this.lin1X = 0; this.lin1Y = 0; this.lin1Z = 0; this.lin2X = 0; this.lin2Y = 0; this.lin2Z = 0; this.ang1X = 0; this.ang1Y = 0; this.ang1Z = 0; this.ang2X = 0; this.ang2Y = 0; this.ang2Z = 0; this.flag = 0; } updateSparsity() { this.flag = 0; if(!(this.lin1X == 0 && this.lin1Y == 0 && this.lin1Z == 0) || !(this.lin2X == 0 && this.lin2Y == 0 && this.lin2Z == 0)) { this.flag |= 1; } if(!(this.ang1X == 0 && this.ang1Y == 0 && this.ang1Z == 0) || !(this.ang2X == 0 && this.ang2Y == 0 && this.ang2Z == 0)) { this.flag |= 2; } } } if(!oimo.dynamics.constraint.info.contact) oimo.dynamics.constraint.info.contact = {}; oimo.dynamics.constraint.info.contact.ContactSolverInfo = class oimo_dynamics_constraint_info_contact_ContactSolverInfo { constructor() { this.b1 = null; this.b2 = null; this.numRows = 0; var this1 = new Array(oimo.common.Setting.maxManifoldPoints); this.rows = this1; var _g = 0; var _g1 = this.rows.length; while(_g < _g1) { var i = _g++; this.rows[i] = new oimo.dynamics.constraint.info.contact.ContactSolverInfoRow(); } } } oimo.dynamics.constraint.info.contact.ContactSolverInfoRow = class oimo_dynamics_constraint_info_contact_ContactSolverInfoRow { constructor() { this.jacobianN = new oimo.dynamics.constraint.info.JacobianRow(); this.jacobianT = new oimo.dynamics.constraint.info.JacobianRow(); this.jacobianB = new oimo.dynamics.constraint.info.JacobianRow(); this.rhs = 0; this.cfm = 0; this.friction = 0; this.impulse = null; } } if(!oimo.dynamics.constraint.info.joint) oimo.dynamics.constraint.info.joint = {}; oimo.dynamics.constraint.info.joint.JointSolverInfo = class oimo_dynamics_constraint_info_joint_JointSolverInfo { constructor() { this.b1 = null; this.b2 = null; this.numRows = 0; var this1 = new Array(oimo.common.Setting.maxJacobianRows); this.rows = this1; var _g = 0; var _g1 = this.rows.length; while(_g < _g1) { var i = _g++; this.rows[i] = new oimo.dynamics.constraint.info.joint.JointSolverInfoRow(); } } } oimo.dynamics.constraint.info.joint.JointSolverInfoRow = class oimo_dynamics_constraint_info_joint_JointSolverInfoRow { constructor() { this.jacobian = new oimo.dynamics.constraint.info.JacobianRow(); this.rhs = 0; this.cfm = 0; this.minImpulse = 0; this.maxImpulse = 0; this.motorSpeed = 0; this.motorMaxImpulse = 0; this.impulse = null; } } if(!oimo.dynamics.constraint.joint) oimo.dynamics.constraint.joint = {}; oimo.dynamics.constraint.joint.BasisTracker = class oimo_dynamics_constraint_joint_BasisTracker { constructor(joint) { this.joint = joint; this.xX = 0; this.xY = 0; this.xZ = 0; this.yX = 0; this.yY = 0; this.yZ = 0; this.zX = 0; this.zY = 0; this.zZ = 0; } } oimo.dynamics.constraint.joint.Joint = class oimo_dynamics_constraint_joint_Joint { constructor(config,type) { this._link1 = new oimo.dynamics.constraint.joint.JointLink(this); this._link2 = new oimo.dynamics.constraint.joint.JointLink(this); this._positionCorrectionAlgorithm = oimo.common.Setting.defaultJointPositionCorrectionAlgorithm; this._type = type; this._world = null; this._b1 = config.rigidBody1; this._b2 = config.rigidBody2; this._allowCollision = config.allowCollision; this._breakForce = config.breakForce; this._breakTorque = config.breakTorque; switch(config.solverType) { case 0: this._solver = new oimo.dynamics.constraint.solver.pgs.PgsJointConstraintSolver(this); break; case 1: this._solver = new oimo.dynamics.constraint.solver.direct.DirectJointConstraintSolver(this); break; } var v = config.localAnchor1; this._localAnchor1X = v.x; this._localAnchor1Y = v.y; this._localAnchor1Z = v.z; var v1 = config.localAnchor2; this._localAnchor2X = v1.x; this._localAnchor2Y = v1.y; this._localAnchor2Z = v1.z; this._relativeAnchor1X = 0; this._relativeAnchor1Y = 0; this._relativeAnchor1Z = 0; this._relativeAnchor2X = 0; this._relativeAnchor2Y = 0; this._relativeAnchor2Z = 0; this._anchor1X = 0; this._anchor1Y = 0; this._anchor1Z = 0; this._anchor2X = 0; this._anchor2Y = 0; this._anchor2Z = 0; this._localBasisX1X = 0; this._localBasisX1Y = 0; this._localBasisX1Z = 0; this._localBasisY1X = 0; this._localBasisY1Y = 0; this._localBasisY1Z = 0; this._localBasisZ1X = 0; this._localBasisZ1Y = 0; this._localBasisZ1Z = 0; this._localBasisX2X = 0; this._localBasisX2Y = 0; this._localBasisX2Z = 0; this._localBasisY2X = 0; this._localBasisY2Y = 0; this._localBasisY2Z = 0; this._localBasisZ2X = 0; this._localBasisZ2Y = 0; this._localBasisZ2Z = 0; var this1 = new Array(oimo.common.Setting.maxJacobianRows); this._impulses = this1; var _g1 = 0; var _g2 = oimo.common.Setting.maxJacobianRows; while(_g1 < _g2) { var i = _g1++; this._impulses[i] = new oimo.dynamics.constraint.joint.JointImpulse(); } } buildLocalBasesFromX() { if(this._localBasisX1X * this._localBasisX1X + this._localBasisX1Y * this._localBasisX1Y + this._localBasisX1Z * this._localBasisX1Z == 0) { this._localBasisX1X = 1; this._localBasisX1Y = 0; this._localBasisX1Z = 0; } else { var l = this._localBasisX1X * this._localBasisX1X + this._localBasisX1Y * this._localBasisX1Y + this._localBasisX1Z * this._localBasisX1Z; if(l > 0) { l = 1 / Math.sqrt(l); } this._localBasisX1X *= l; this._localBasisX1Y *= l; this._localBasisX1Z *= l; } if(this._localBasisX2X * this._localBasisX2X + this._localBasisX2Y * this._localBasisX2Y + this._localBasisX2Z * this._localBasisX2Z == 0) { this._localBasisX2X = 1; this._localBasisX2Y = 0; this._localBasisX2Z = 0; } else { var l1 = this._localBasisX2X * this._localBasisX2X + this._localBasisX2Y * this._localBasisX2Y + this._localBasisX2Z * this._localBasisX2Z; if(l1 > 0) { l1 = 1 / Math.sqrt(l1); } this._localBasisX2X *= l1; this._localBasisX2Y *= l1; this._localBasisX2Z *= l1; } var slerpQ; var slerpQX; var slerpQY; var slerpQZ; var slerpQW; var slerpM; var slerpM00; var slerpM01; var slerpM02; var slerpM10; var slerpM11; var slerpM12; var slerpM20; var slerpM21; var slerpM22; var d = this._localBasisX1X * this._localBasisX2X + this._localBasisX1Y * this._localBasisX2Y + this._localBasisX1Z * this._localBasisX2Z; if(d < -0.999999999) { var vX; var vY; var vZ; var x1 = this._localBasisX1X; var y1 = this._localBasisX1Y; var z1 = this._localBasisX1Z; var x2 = x1 * x1; var y2 = y1 * y1; var z2 = z1 * z1; var d1; if(x2 < y2) { if(x2 < z2) { d1 = 1 / Math.sqrt(y2 + z2); vX = 0; vY = z1 * d1; vZ = -y1 * d1; } else { d1 = 1 / Math.sqrt(x2 + y2); vX = y1 * d1; vY = -x1 * d1; vZ = 0; } } else if(y2 < z2) { d1 = 1 / Math.sqrt(z2 + x2); vX = -z1 * d1; vY = 0; vZ = x1 * d1; } else { d1 = 1 / Math.sqrt(x2 + y2); vX = y1 * d1; vY = -x1 * d1; vZ = 0; } slerpQX = vX; slerpQY = vY; slerpQZ = vZ; slerpQW = 0; } else { var cX; var cY; var cZ; cX = this._localBasisX1Y * this._localBasisX2Z - this._localBasisX1Z * this._localBasisX2Y; cY = this._localBasisX1Z * this._localBasisX2X - this._localBasisX1X * this._localBasisX2Z; cZ = this._localBasisX1X * this._localBasisX2Y - this._localBasisX1Y * this._localBasisX2X; var w = Math.sqrt((1 + d) * 0.5); d = 0.5 / w; cX *= d; cY *= d; cZ *= d; slerpQX = cX; slerpQY = cY; slerpQZ = cZ; slerpQW = w; } var x = slerpQX; var y = slerpQY; var z = slerpQZ; var w1 = slerpQW; var x21 = 2 * x; var y21 = 2 * y; var z21 = 2 * z; var xx = x * x21; var yy = y * y21; var zz = z * z21; var xy = x * y21; var yz = y * z21; var xz = x * z21; var wx = w1 * x21; var wy = w1 * y21; var wz = w1 * z21; slerpM00 = 1 - yy - zz; slerpM01 = xy - wz; slerpM02 = xz + wy; slerpM10 = xy + wz; slerpM11 = 1 - xx - zz; slerpM12 = yz - wx; slerpM20 = xz - wy; slerpM21 = yz + wx; slerpM22 = 1 - xx - yy; var x11 = this._localBasisX1X; var y11 = this._localBasisX1Y; var z11 = this._localBasisX1Z; var x22 = x11 * x11; var y22 = y11 * y11; var z22 = z11 * z11; var d2; if(x22 < y22) { if(x22 < z22) { d2 = 1 / Math.sqrt(y22 + z22); this._localBasisY1X = 0; this._localBasisY1Y = z11 * d2; this._localBasisY1Z = -y11 * d2; } else { d2 = 1 / Math.sqrt(x22 + y22); this._localBasisY1X = y11 * d2; this._localBasisY1Y = -x11 * d2; this._localBasisY1Z = 0; } } else if(y22 < z22) { d2 = 1 / Math.sqrt(z22 + x22); this._localBasisY1X = -z11 * d2; this._localBasisY1Y = 0; this._localBasisY1Z = x11 * d2; } else { d2 = 1 / Math.sqrt(x22 + y22); this._localBasisY1X = y11 * d2; this._localBasisY1Y = -x11 * d2; this._localBasisY1Z = 0; } this._localBasisZ1X = this._localBasisX1Y * this._localBasisY1Z - this._localBasisX1Z * this._localBasisY1Y; this._localBasisZ1Y = this._localBasisX1Z * this._localBasisY1X - this._localBasisX1X * this._localBasisY1Z; this._localBasisZ1Z = this._localBasisX1X * this._localBasisY1Y - this._localBasisX1Y * this._localBasisY1X; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = slerpM00 * this._localBasisX1X + slerpM01 * this._localBasisX1Y + slerpM02 * this._localBasisX1Z; __tmp__Y = slerpM10 * this._localBasisX1X + slerpM11 * this._localBasisX1Y + slerpM12 * this._localBasisX1Z; __tmp__Z = slerpM20 * this._localBasisX1X + slerpM21 * this._localBasisX1Y + slerpM22 * this._localBasisX1Z; this._localBasisX2X = __tmp__X; this._localBasisX2Y = __tmp__Y; this._localBasisX2Z = __tmp__Z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = slerpM00 * this._localBasisY1X + slerpM01 * this._localBasisY1Y + slerpM02 * this._localBasisY1Z; __tmp__Y1 = slerpM10 * this._localBasisY1X + slerpM11 * this._localBasisY1Y + slerpM12 * this._localBasisY1Z; __tmp__Z1 = slerpM20 * this._localBasisY1X + slerpM21 * this._localBasisY1Y + slerpM22 * this._localBasisY1Z; this._localBasisY2X = __tmp__X1; this._localBasisY2Y = __tmp__Y1; this._localBasisY2Z = __tmp__Z1; var __tmp__X2; var __tmp__Y2; var __tmp__Z2; __tmp__X2 = slerpM00 * this._localBasisZ1X + slerpM01 * this._localBasisZ1Y + slerpM02 * this._localBasisZ1Z; __tmp__Y2 = slerpM10 * this._localBasisZ1X + slerpM11 * this._localBasisZ1Y + slerpM12 * this._localBasisZ1Z; __tmp__Z2 = slerpM20 * this._localBasisZ1X + slerpM21 * this._localBasisZ1Y + slerpM22 * this._localBasisZ1Z; this._localBasisZ2X = __tmp__X2; this._localBasisZ2Y = __tmp__Y2; this._localBasisZ2Z = __tmp__Z2; } buildLocalBasesFromXY() { if(this._localBasisX1X * this._localBasisX1X + this._localBasisX1Y * this._localBasisX1Y + this._localBasisX1Z * this._localBasisX1Z == 0) { this._localBasisX1X = 1; this._localBasisX1Y = 0; this._localBasisX1Z = 0; } else { var l = this._localBasisX1X * this._localBasisX1X + this._localBasisX1Y * this._localBasisX1Y + this._localBasisX1Z * this._localBasisX1Z; if(l > 0) { l = 1 / Math.sqrt(l); } this._localBasisX1X *= l; this._localBasisX1Y *= l; this._localBasisX1Z *= l; } if(this._localBasisX2X * this._localBasisX2X + this._localBasisX2Y * this._localBasisX2Y + this._localBasisX2Z * this._localBasisX2Z == 0) { this._localBasisX2X = 1; this._localBasisX2Y = 0; this._localBasisX2Z = 0; } else { var l1 = this._localBasisX2X * this._localBasisX2X + this._localBasisX2Y * this._localBasisX2Y + this._localBasisX2Z * this._localBasisX2Z; if(l1 > 0) { l1 = 1 / Math.sqrt(l1); } this._localBasisX2X *= l1; this._localBasisX2Y *= l1; this._localBasisX2Z *= l1; } this._localBasisZ1X = this._localBasisX1Y * this._localBasisY1Z - this._localBasisX1Z * this._localBasisY1Y; this._localBasisZ1Y = this._localBasisX1Z * this._localBasisY1X - this._localBasisX1X * this._localBasisY1Z; this._localBasisZ1Z = this._localBasisX1X * this._localBasisY1Y - this._localBasisX1Y * this._localBasisY1X; this._localBasisZ2X = this._localBasisX2Y * this._localBasisY2Z - this._localBasisX2Z * this._localBasisY2Y; this._localBasisZ2Y = this._localBasisX2Z * this._localBasisY2X - this._localBasisX2X * this._localBasisY2Z; this._localBasisZ2Z = this._localBasisX2X * this._localBasisY2Y - this._localBasisX2Y * this._localBasisY2X; if(this._localBasisZ1X * this._localBasisZ1X + this._localBasisZ1Y * this._localBasisZ1Y + this._localBasisZ1Z * this._localBasisZ1Z == 0) { var x1 = this._localBasisX1X; var y1 = this._localBasisX1Y; var z1 = this._localBasisX1Z; var x2 = x1 * x1; var y2 = y1 * y1; var z2 = z1 * z1; var d; if(x2 < y2) { if(x2 < z2) { d = 1 / Math.sqrt(y2 + z2); this._localBasisY1X = 0; this._localBasisY1Y = z1 * d; this._localBasisY1Z = -y1 * d; } else { d = 1 / Math.sqrt(x2 + y2); this._localBasisY1X = y1 * d; this._localBasisY1Y = -x1 * d; this._localBasisY1Z = 0; } } else if(y2 < z2) { d = 1 / Math.sqrt(z2 + x2); this._localBasisY1X = -z1 * d; this._localBasisY1Y = 0; this._localBasisY1Z = x1 * d; } else { d = 1 / Math.sqrt(x2 + y2); this._localBasisY1X = y1 * d; this._localBasisY1Y = -x1 * d; this._localBasisY1Z = 0; } this._localBasisZ1X = this._localBasisX1Y * this._localBasisY1Z - this._localBasisX1Z * this._localBasisY1Y; this._localBasisZ1Y = this._localBasisX1Z * this._localBasisY1X - this._localBasisX1X * this._localBasisY1Z; this._localBasisZ1Z = this._localBasisX1X * this._localBasisY1Y - this._localBasisX1Y * this._localBasisY1X; } else { var l2 = this._localBasisZ1X * this._localBasisZ1X + this._localBasisZ1Y * this._localBasisZ1Y + this._localBasisZ1Z * this._localBasisZ1Z; if(l2 > 0) { l2 = 1 / Math.sqrt(l2); } this._localBasisZ1X *= l2; this._localBasisZ1Y *= l2; this._localBasisZ1Z *= l2; this._localBasisY1X = this._localBasisZ1Y * this._localBasisX1Z - this._localBasisZ1Z * this._localBasisX1Y; this._localBasisY1Y = this._localBasisZ1Z * this._localBasisX1X - this._localBasisZ1X * this._localBasisX1Z; this._localBasisY1Z = this._localBasisZ1X * this._localBasisX1Y - this._localBasisZ1Y * this._localBasisX1X; } if(this._localBasisZ2X * this._localBasisZ2X + this._localBasisZ2Y * this._localBasisZ2Y + this._localBasisZ2Z * this._localBasisZ2Z == 0) { var x11 = this._localBasisX2X; var y11 = this._localBasisX2Y; var z11 = this._localBasisX2Z; var x21 = x11 * x11; var y21 = y11 * y11; var z21 = z11 * z11; var d1; if(x21 < y21) { if(x21 < z21) { d1 = 1 / Math.sqrt(y21 + z21); this._localBasisY2X = 0; this._localBasisY2Y = z11 * d1; this._localBasisY2Z = -y11 * d1; } else { d1 = 1 / Math.sqrt(x21 + y21); this._localBasisY2X = y11 * d1; this._localBasisY2Y = -x11 * d1; this._localBasisY2Z = 0; } } else if(y21 < z21) { d1 = 1 / Math.sqrt(z21 + x21); this._localBasisY2X = -z11 * d1; this._localBasisY2Y = 0; this._localBasisY2Z = x11 * d1; } else { d1 = 1 / Math.sqrt(x21 + y21); this._localBasisY2X = y11 * d1; this._localBasisY2Y = -x11 * d1; this._localBasisY2Z = 0; } this._localBasisZ2X = this._localBasisX2Y * this._localBasisY2Z - this._localBasisX2Z * this._localBasisY2Y; this._localBasisZ2Y = this._localBasisX2Z * this._localBasisY2X - this._localBasisX2X * this._localBasisY2Z; this._localBasisZ2Z = this._localBasisX2X * this._localBasisY2Y - this._localBasisX2Y * this._localBasisY2X; } else { var l3 = this._localBasisZ2X * this._localBasisZ2X + this._localBasisZ2Y * this._localBasisZ2Y + this._localBasisZ2Z * this._localBasisZ2Z; if(l3 > 0) { l3 = 1 / Math.sqrt(l3); } this._localBasisZ2X *= l3; this._localBasisZ2Y *= l3; this._localBasisZ2Z *= l3; this._localBasisY2X = this._localBasisZ2Y * this._localBasisX2Z - this._localBasisZ2Z * this._localBasisX2Y; this._localBasisY2Y = this._localBasisZ2Z * this._localBasisX2X - this._localBasisZ2X * this._localBasisX2Z; this._localBasisY2Z = this._localBasisZ2X * this._localBasisX2Y - this._localBasisZ2Y * this._localBasisX2X; } } buildLocalBasesFromX1Z2() { if(this._localBasisX1X * this._localBasisX1X + this._localBasisX1Y * this._localBasisX1Y + this._localBasisX1Z * this._localBasisX1Z == 0) { this._localBasisX1X = 1; this._localBasisX1Y = 0; this._localBasisX1Z = 0; } else { var l = this._localBasisX1X * this._localBasisX1X + this._localBasisX1Y * this._localBasisX1Y + this._localBasisX1Z * this._localBasisX1Z; if(l > 0) { l = 1 / Math.sqrt(l); } this._localBasisX1X *= l; this._localBasisX1Y *= l; this._localBasisX1Z *= l; } if(this._localBasisZ2X * this._localBasisZ2X + this._localBasisZ2Y * this._localBasisZ2Y + this._localBasisZ2Z * this._localBasisZ2Z == 0) { this._localBasisZ2X = 0; this._localBasisZ2Y = 0; this._localBasisZ2Z = 1; } else { var l1 = this._localBasisZ2X * this._localBasisZ2X + this._localBasisZ2Y * this._localBasisZ2Y + this._localBasisZ2Z * this._localBasisZ2Z; if(l1 > 0) { l1 = 1 / Math.sqrt(l1); } this._localBasisZ2X *= l1; this._localBasisZ2Y *= l1; this._localBasisZ2Z *= l1; } var tf1 = this._b1._transform; var tf2 = this._b2._transform; var worldX1; var worldX1X; var worldX1Y; var worldX1Z; var worldZ1; var worldZ1X; var worldZ1Y; var worldZ1Z; var worldY; var worldYX; var worldYY; var worldYZ; var worldX2; var worldX2X; var worldX2Y; var worldX2Z; var worldZ2; var worldZ2X; var worldZ2Y; var worldZ2Z; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = tf1._rotation00 * this._localBasisX1X + tf1._rotation01 * this._localBasisX1Y + tf1._rotation02 * this._localBasisX1Z; __tmp__Y = tf1._rotation10 * this._localBasisX1X + tf1._rotation11 * this._localBasisX1Y + tf1._rotation12 * this._localBasisX1Z; __tmp__Z = tf1._rotation20 * this._localBasisX1X + tf1._rotation21 * this._localBasisX1Y + tf1._rotation22 * this._localBasisX1Z; worldX1X = __tmp__X; worldX1Y = __tmp__Y; worldX1Z = __tmp__Z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = tf2._rotation00 * this._localBasisZ2X + tf2._rotation01 * this._localBasisZ2Y + tf2._rotation02 * this._localBasisZ2Z; __tmp__Y1 = tf2._rotation10 * this._localBasisZ2X + tf2._rotation11 * this._localBasisZ2Y + tf2._rotation12 * this._localBasisZ2Z; __tmp__Z1 = tf2._rotation20 * this._localBasisZ2X + tf2._rotation21 * this._localBasisZ2Y + tf2._rotation22 * this._localBasisZ2Z; worldZ2X = __tmp__X1; worldZ2Y = __tmp__Y1; worldZ2Z = __tmp__Z1; worldYX = worldZ2Y * worldX1Z - worldZ2Z * worldX1Y; worldYY = worldZ2Z * worldX1X - worldZ2X * worldX1Z; worldYZ = worldZ2X * worldX1Y - worldZ2Y * worldX1X; if(worldYX * worldYX + worldYY * worldYY + worldYZ * worldYZ == 0) { var x1 = worldX1X; var y1 = worldX1Y; var z1 = worldX1Z; var x2 = x1 * x1; var y2 = y1 * y1; var z2 = z1 * z1; var d; if(x2 < y2) { if(x2 < z2) { d = 1 / Math.sqrt(y2 + z2); worldYX = 0; worldYY = z1 * d; worldYZ = -y1 * d; } else { d = 1 / Math.sqrt(x2 + y2); worldYX = y1 * d; worldYY = -x1 * d; worldYZ = 0; } } else if(y2 < z2) { d = 1 / Math.sqrt(z2 + x2); worldYX = -z1 * d; worldYY = 0; worldYZ = x1 * d; } else { d = 1 / Math.sqrt(x2 + y2); worldYX = y1 * d; worldYY = -x1 * d; worldYZ = 0; } } worldZ1X = worldX1Y * worldYZ - worldX1Z * worldYY; worldZ1Y = worldX1Z * worldYX - worldX1X * worldYZ; worldZ1Z = worldX1X * worldYY - worldX1Y * worldYX; worldX2X = worldYY * worldZ2Z - worldYZ * worldZ2Y; worldX2Y = worldYZ * worldZ2X - worldYX * worldZ2Z; worldX2Z = worldYX * worldZ2Y - worldYY * worldZ2X; var __tmp__X2; var __tmp__Y2; var __tmp__Z2; __tmp__X2 = tf1._rotation00 * worldX1X + tf1._rotation10 * worldX1Y + tf1._rotation20 * worldX1Z; __tmp__Y2 = tf1._rotation01 * worldX1X + tf1._rotation11 * worldX1Y + tf1._rotation21 * worldX1Z; __tmp__Z2 = tf1._rotation02 * worldX1X + tf1._rotation12 * worldX1Y + tf1._rotation22 * worldX1Z; this._localBasisX1X = __tmp__X2; this._localBasisX1Y = __tmp__Y2; this._localBasisX1Z = __tmp__Z2; var __tmp__X3; var __tmp__Y3; var __tmp__Z3; __tmp__X3 = tf1._rotation00 * worldYX + tf1._rotation10 * worldYY + tf1._rotation20 * worldYZ; __tmp__Y3 = tf1._rotation01 * worldYX + tf1._rotation11 * worldYY + tf1._rotation21 * worldYZ; __tmp__Z3 = tf1._rotation02 * worldYX + tf1._rotation12 * worldYY + tf1._rotation22 * worldYZ; this._localBasisY1X = __tmp__X3; this._localBasisY1Y = __tmp__Y3; this._localBasisY1Z = __tmp__Z3; var __tmp__X4; var __tmp__Y4; var __tmp__Z4; __tmp__X4 = tf1._rotation00 * worldZ1X + tf1._rotation10 * worldZ1Y + tf1._rotation20 * worldZ1Z; __tmp__Y4 = tf1._rotation01 * worldZ1X + tf1._rotation11 * worldZ1Y + tf1._rotation21 * worldZ1Z; __tmp__Z4 = tf1._rotation02 * worldZ1X + tf1._rotation12 * worldZ1Y + tf1._rotation22 * worldZ1Z; this._localBasisZ1X = __tmp__X4; this._localBasisZ1Y = __tmp__Y4; this._localBasisZ1Z = __tmp__Z4; var __tmp__X5; var __tmp__Y5; var __tmp__Z5; __tmp__X5 = tf2._rotation00 * worldX2X + tf2._rotation10 * worldX2Y + tf2._rotation20 * worldX2Z; __tmp__Y5 = tf2._rotation01 * worldX2X + tf2._rotation11 * worldX2Y + tf2._rotation21 * worldX2Z; __tmp__Z5 = tf2._rotation02 * worldX2X + tf2._rotation12 * worldX2Y + tf2._rotation22 * worldX2Z; this._localBasisX2X = __tmp__X5; this._localBasisX2Y = __tmp__Y5; this._localBasisX2Z = __tmp__Z5; var __tmp__X6; var __tmp__Y6; var __tmp__Z6; __tmp__X6 = tf2._rotation00 * worldYX + tf2._rotation10 * worldYY + tf2._rotation20 * worldYZ; __tmp__Y6 = tf2._rotation01 * worldYX + tf2._rotation11 * worldYY + tf2._rotation21 * worldYZ; __tmp__Z6 = tf2._rotation02 * worldYX + tf2._rotation12 * worldYY + tf2._rotation22 * worldYZ; this._localBasisY2X = __tmp__X6; this._localBasisY2Y = __tmp__Y6; this._localBasisY2Z = __tmp__Z6; var __tmp__X7; var __tmp__Y7; var __tmp__Z7; __tmp__X7 = tf2._rotation00 * worldZ2X + tf2._rotation10 * worldZ2Y + tf2._rotation20 * worldZ2Z; __tmp__Y7 = tf2._rotation01 * worldZ2X + tf2._rotation11 * worldZ2Y + tf2._rotation21 * worldZ2Z; __tmp__Z7 = tf2._rotation02 * worldZ2X + tf2._rotation12 * worldZ2Y + tf2._rotation22 * worldZ2Z; this._localBasisZ2X = __tmp__X7; this._localBasisZ2Y = __tmp__Y7; this._localBasisZ2Z = __tmp__Z7; } buildLocalBasesFromXY1X2() { if(this._localBasisX1X * this._localBasisX1X + this._localBasisX1Y * this._localBasisX1Y + this._localBasisX1Z * this._localBasisX1Z == 0) { this._localBasisX1X = 1; this._localBasisX1Y = 0; this._localBasisX1Z = 0; } else { var l = this._localBasisX1X * this._localBasisX1X + this._localBasisX1Y * this._localBasisX1Y + this._localBasisX1Z * this._localBasisX1Z; if(l > 0) { l = 1 / Math.sqrt(l); } this._localBasisX1X *= l; this._localBasisX1Y *= l; this._localBasisX1Z *= l; } this._localBasisZ1X = this._localBasisX1Y * this._localBasisY1Z - this._localBasisX1Z * this._localBasisY1Y; this._localBasisZ1Y = this._localBasisX1Z * this._localBasisY1X - this._localBasisX1X * this._localBasisY1Z; this._localBasisZ1Z = this._localBasisX1X * this._localBasisY1Y - this._localBasisX1Y * this._localBasisY1X; if(this._localBasisZ1X * this._localBasisZ1X + this._localBasisZ1Y * this._localBasisZ1Y + this._localBasisZ1Z * this._localBasisZ1Z == 0) { var x1 = this._localBasisX1X; var y1 = this._localBasisX1Y; var z1 = this._localBasisX1Z; var x2 = x1 * x1; var y2 = y1 * y1; var z2 = z1 * z1; var d; if(x2 < y2) { if(x2 < z2) { d = 1 / Math.sqrt(y2 + z2); this._localBasisY1X = 0; this._localBasisY1Y = z1 * d; this._localBasisY1Z = -y1 * d; } else { d = 1 / Math.sqrt(x2 + y2); this._localBasisY1X = y1 * d; this._localBasisY1Y = -x1 * d; this._localBasisY1Z = 0; } } else if(y2 < z2) { d = 1 / Math.sqrt(z2 + x2); this._localBasisY1X = -z1 * d; this._localBasisY1Y = 0; this._localBasisY1Z = x1 * d; } else { d = 1 / Math.sqrt(x2 + y2); this._localBasisY1X = y1 * d; this._localBasisY1Y = -x1 * d; this._localBasisY1Z = 0; } this._localBasisZ1X = this._localBasisX1Y * this._localBasisY1Z - this._localBasisX1Z * this._localBasisY1Y; this._localBasisZ1Y = this._localBasisX1Z * this._localBasisY1X - this._localBasisX1X * this._localBasisY1Z; this._localBasisZ1Z = this._localBasisX1X * this._localBasisY1Y - this._localBasisX1Y * this._localBasisY1X; } else { var l1 = this._localBasisZ1X * this._localBasisZ1X + this._localBasisZ1Y * this._localBasisZ1Y + this._localBasisZ1Z * this._localBasisZ1Z; if(l1 > 0) { l1 = 1 / Math.sqrt(l1); } this._localBasisZ1X *= l1; this._localBasisZ1Y *= l1; this._localBasisZ1Z *= l1; this._localBasisY1X = this._localBasisZ1Y * this._localBasisX1Z - this._localBasisZ1Z * this._localBasisX1Y; this._localBasisY1Y = this._localBasisZ1Z * this._localBasisX1X - this._localBasisZ1X * this._localBasisX1Z; this._localBasisY1Z = this._localBasisZ1X * this._localBasisX1Y - this._localBasisZ1Y * this._localBasisX1X; } var slerpQ; var slerpQX; var slerpQY; var slerpQZ; var slerpQW; var slerpM; var slerpM00; var slerpM01; var slerpM02; var slerpM10; var slerpM11; var slerpM12; var slerpM20; var slerpM21; var slerpM22; var d1 = this._localBasisX1X * this._localBasisX2X + this._localBasisX1Y * this._localBasisX2Y + this._localBasisX1Z * this._localBasisX2Z; if(d1 < -0.999999999) { var vX; var vY; var vZ; var x11 = this._localBasisX1X; var y11 = this._localBasisX1Y; var z11 = this._localBasisX1Z; var x21 = x11 * x11; var y21 = y11 * y11; var z21 = z11 * z11; var d2; if(x21 < y21) { if(x21 < z21) { d2 = 1 / Math.sqrt(y21 + z21); vX = 0; vY = z11 * d2; vZ = -y11 * d2; } else { d2 = 1 / Math.sqrt(x21 + y21); vX = y11 * d2; vY = -x11 * d2; vZ = 0; } } else if(y21 < z21) { d2 = 1 / Math.sqrt(z21 + x21); vX = -z11 * d2; vY = 0; vZ = x11 * d2; } else { d2 = 1 / Math.sqrt(x21 + y21); vX = y11 * d2; vY = -x11 * d2; vZ = 0; } slerpQX = vX; slerpQY = vY; slerpQZ = vZ; slerpQW = 0; } else { var cX; var cY; var cZ; cX = this._localBasisX1Y * this._localBasisX2Z - this._localBasisX1Z * this._localBasisX2Y; cY = this._localBasisX1Z * this._localBasisX2X - this._localBasisX1X * this._localBasisX2Z; cZ = this._localBasisX1X * this._localBasisX2Y - this._localBasisX1Y * this._localBasisX2X; var w = Math.sqrt((1 + d1) * 0.5); d1 = 0.5 / w; cX *= d1; cY *= d1; cZ *= d1; slerpQX = cX; slerpQY = cY; slerpQZ = cZ; slerpQW = w; } var x = slerpQX; var y = slerpQY; var z = slerpQZ; var w1 = slerpQW; var x22 = 2 * x; var y22 = 2 * y; var z22 = 2 * z; var xx = x * x22; var yy = y * y22; var zz = z * z22; var xy = x * y22; var yz = y * z22; var xz = x * z22; var wx = w1 * x22; var wy = w1 * y22; var wz = w1 * z22; slerpM00 = 1 - yy - zz; slerpM01 = xy - wz; slerpM02 = xz + wy; slerpM10 = xy + wz; slerpM11 = 1 - xx - zz; slerpM12 = yz - wx; slerpM20 = xz - wy; slerpM21 = yz + wx; slerpM22 = 1 - xx - yy; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = slerpM00 * this._localBasisX1X + slerpM01 * this._localBasisX1Y + slerpM02 * this._localBasisX1Z; __tmp__Y = slerpM10 * this._localBasisX1X + slerpM11 * this._localBasisX1Y + slerpM12 * this._localBasisX1Z; __tmp__Z = slerpM20 * this._localBasisX1X + slerpM21 * this._localBasisX1Y + slerpM22 * this._localBasisX1Z; this._localBasisX2X = __tmp__X; this._localBasisX2Y = __tmp__Y; this._localBasisX2Z = __tmp__Z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = slerpM00 * this._localBasisY1X + slerpM01 * this._localBasisY1Y + slerpM02 * this._localBasisY1Z; __tmp__Y1 = slerpM10 * this._localBasisY1X + slerpM11 * this._localBasisY1Y + slerpM12 * this._localBasisY1Z; __tmp__Z1 = slerpM20 * this._localBasisY1X + slerpM21 * this._localBasisY1Y + slerpM22 * this._localBasisY1Z; this._localBasisY2X = __tmp__X1; this._localBasisY2Y = __tmp__Y1; this._localBasisY2Z = __tmp__Z1; var __tmp__X2; var __tmp__Y2; var __tmp__Z2; __tmp__X2 = slerpM00 * this._localBasisZ1X + slerpM01 * this._localBasisZ1Y + slerpM02 * this._localBasisZ1Z; __tmp__Y2 = slerpM10 * this._localBasisZ1X + slerpM11 * this._localBasisZ1Y + slerpM12 * this._localBasisZ1Z; __tmp__Z2 = slerpM20 * this._localBasisZ1X + slerpM21 * this._localBasisZ1Y + slerpM22 * this._localBasisZ1Z; this._localBasisZ2X = __tmp__X2; this._localBasisZ2Y = __tmp__Y2; this._localBasisZ2Z = __tmp__Z2; } setSolverInfoRowLinear(row,diff,lm,mass,sd,timeStep,isPositionPart) { var cfmFactor; var erp; var slop = oimo.common.Setting.linearSlop; if(isPositionPart) { cfmFactor = 0; erp = 1; } else { if(sd.frequency > 0) { slop = 0; var omega = 6.28318530717958 * sd.frequency; var zeta = sd.dampingRatio; if(zeta < oimo.common.Setting.minSpringDamperDampingRatio) { zeta = oimo.common.Setting.minSpringDamperDampingRatio; } var h = timeStep.dt; var c = 2 * zeta * omega; var k = omega * omega; if(sd.useSymplecticEuler) { cfmFactor = 1 / (h * c); erp = k / c; } else { cfmFactor = 1 / (h * (h * k + c)); erp = k / (h * k + c); } } else { cfmFactor = 0; erp = this.getErp(timeStep,false); } if(lm.motorForce > 0) { row.motorSpeed = lm.motorSpeed; row.motorMaxImpulse = lm.motorForce * timeStep.dt; } else { row.motorSpeed = 0; row.motorMaxImpulse = 0; } } var lower = lm.lowerLimit; var upper = lm.upperLimit; var minImp; var maxImp; var error; if(lower > upper) { minImp = 0; maxImp = 0; error = 0; } else if(lower == upper) { minImp = -1e65536; maxImp = 1e65536; error = diff - lower; } else if(diff < lower) { minImp = -1e65536; maxImp = 0; error = diff - lower + slop; if(error > 0) { error = 0; } } else if(diff > upper) { minImp = 0; maxImp = 1e65536; error = diff - upper - slop; if(error < 0) { error = 0; } } else { minImp = 0; maxImp = 0; error = 0; } var invMass = mass == 0 ? 0 : 1 / mass; row.minImpulse = minImp; row.maxImpulse = maxImp; row.cfm = cfmFactor * invMass; row.rhs = error * erp; } setSolverInfoRowAngular(row,diff,lm,mass,sd,timeStep,isPositionPart) { var cfmFactor; var erp; var slop = oimo.common.Setting.angularSlop; if(isPositionPart) { cfmFactor = 0; erp = 1; } else { if(sd.frequency > 0) { slop = 0; var omega = 6.28318530717958 * sd.frequency; var zeta = sd.dampingRatio; if(zeta < oimo.common.Setting.minSpringDamperDampingRatio) { zeta = oimo.common.Setting.minSpringDamperDampingRatio; } var h = timeStep.dt; var c = 2 * zeta * omega; var k = omega * omega; if(sd.useSymplecticEuler) { cfmFactor = 1 / (h * c); erp = k / c; } else { cfmFactor = 1 / (h * (h * k + c)); erp = k / (h * k + c); } } else { cfmFactor = 0; erp = this.getErp(timeStep,false); } if(lm.motorTorque > 0) { row.motorSpeed = lm.motorSpeed; row.motorMaxImpulse = lm.motorTorque * timeStep.dt; } else { row.motorSpeed = 0; row.motorMaxImpulse = 0; } } var lower = lm.lowerLimit; var upper = lm.upperLimit; var mid = (lower + upper) * 0.5; diff -= mid; diff = ((diff + 3.14159265358979) % 6.28318530717958 + 6.28318530717958) % 6.28318530717958 - 3.14159265358979; diff += mid; var minImp; var maxImp; var error; if(lower > upper) { minImp = 0; maxImp = 0; error = 0; } else if(lower == upper) { minImp = -1e65536; maxImp = 1e65536; error = diff - lower; } else if(diff < lower) { minImp = -1e65536; maxImp = 0; error = diff - lower + slop; if(error > 0) { error = 0; } } else if(diff > upper) { minImp = 0; maxImp = 1e65536; error = diff - upper - slop; if(error < 0) { error = 0; } } else { minImp = 0; maxImp = 0; error = 0; } var invMass = mass == 0 ? 0 : 1 / mass; row.minImpulse = minImp; row.maxImpulse = maxImp; row.cfm = cfmFactor * invMass; row.rhs = error * erp; } getErp(timeStep,isPositionPart) { if(isPositionPart) { return 1; } else if(this._positionCorrectionAlgorithm == oimo.dynamics.constraint.PositionCorrectionAlgorithm.BAUMGARTE) { return timeStep.invDt * oimo.common.Setting.velocityBaumgarte; } else { return 0; } } computeEffectiveInertiaMoment(axisX,axisY,axisZ) { var ia1; var ia1X; var ia1Y; var ia1Z; var ia2; var ia2X; var ia2Y; var ia2Z; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = this._b1._invInertia00 * axisX + this._b1._invInertia01 * axisY + this._b1._invInertia02 * axisZ; __tmp__Y = this._b1._invInertia10 * axisX + this._b1._invInertia11 * axisY + this._b1._invInertia12 * axisZ; __tmp__Z = this._b1._invInertia20 * axisX + this._b1._invInertia21 * axisY + this._b1._invInertia22 * axisZ; ia1X = __tmp__X; ia1Y = __tmp__Y; ia1Z = __tmp__Z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = this._b2._invInertia00 * axisX + this._b2._invInertia01 * axisY + this._b2._invInertia02 * axisZ; __tmp__Y1 = this._b2._invInertia10 * axisX + this._b2._invInertia11 * axisY + this._b2._invInertia12 * axisZ; __tmp__Z1 = this._b2._invInertia20 * axisX + this._b2._invInertia21 * axisY + this._b2._invInertia22 * axisZ; ia2X = __tmp__X1; ia2Y = __tmp__Y1; ia2Z = __tmp__Z1; var invI1 = ia1X * axisX + ia1Y * axisY + ia1Z * axisZ; var invI2 = ia2X * axisX + ia2Y * axisY + ia2Z * axisZ; if(invI1 > 0) { var rsq = this._relativeAnchor1X * this._relativeAnchor1X + this._relativeAnchor1Y * this._relativeAnchor1Y + this._relativeAnchor1Z * this._relativeAnchor1Z; var dot = axisX * this._relativeAnchor1X + axisY * this._relativeAnchor1Y + axisZ * this._relativeAnchor1Z; var projsq = rsq - dot * dot; if(projsq > 0) { if(this._b1._invMass > 0) { invI1 = 1 / (1 / invI1 + this._b1._mass * projsq); } else { invI1 = 0; } } } if(invI2 > 0) { var rsq1 = this._relativeAnchor2X * this._relativeAnchor2X + this._relativeAnchor2Y * this._relativeAnchor2Y + this._relativeAnchor2Z * this._relativeAnchor2Z; var dot1 = axisX * this._relativeAnchor2X + axisY * this._relativeAnchor2Y + axisZ * this._relativeAnchor2Z; var projsq1 = rsq1 - dot1 * dot1; if(projsq1 > 0) { if(this._b2._invMass > 0) { invI2 = 1 / (1 / invI2 + this._b2._mass * projsq1); } else { invI2 = 0; } } } if(invI1 + invI2 == 0) { return 0; } else { return 1 / (invI1 + invI2); } } computeEffectiveInertiaMoment2(axis1X,axis1Y,axis1Z,axis2X,axis2Y,axis2Z) { var ia1; var ia1X; var ia1Y; var ia1Z; var ia2; var ia2X; var ia2Y; var ia2Z; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = this._b1._invInertia00 * axis1X + this._b1._invInertia01 * axis1Y + this._b1._invInertia02 * axis1Z; __tmp__Y = this._b1._invInertia10 * axis1X + this._b1._invInertia11 * axis1Y + this._b1._invInertia12 * axis1Z; __tmp__Z = this._b1._invInertia20 * axis1X + this._b1._invInertia21 * axis1Y + this._b1._invInertia22 * axis1Z; ia1X = __tmp__X; ia1Y = __tmp__Y; ia1Z = __tmp__Z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = this._b2._invInertia00 * axis2X + this._b2._invInertia01 * axis2Y + this._b2._invInertia02 * axis2Z; __tmp__Y1 = this._b2._invInertia10 * axis2X + this._b2._invInertia11 * axis2Y + this._b2._invInertia12 * axis2Z; __tmp__Z1 = this._b2._invInertia20 * axis2X + this._b2._invInertia21 * axis2Y + this._b2._invInertia22 * axis2Z; ia2X = __tmp__X1; ia2Y = __tmp__Y1; ia2Z = __tmp__Z1; var invI1 = ia1X * axis1X + ia1Y * axis1Y + ia1Z * axis1Z; var invI2 = ia2X * axis2X + ia2Y * axis2Y + ia2Z * axis2Z; if(invI1 > 0) { var rsq = this._relativeAnchor1X * this._relativeAnchor1X + this._relativeAnchor1Y * this._relativeAnchor1Y + this._relativeAnchor1Z * this._relativeAnchor1Z; var dot = axis1X * this._relativeAnchor1X + axis1Y * this._relativeAnchor1Y + axis1Z * this._relativeAnchor1Z; var projsq = rsq * rsq - dot * dot; if(projsq > 0) { if(this._b1._invMass > 0) { invI1 = 1 / (1 / invI1 + this._b1._mass * projsq); } else { invI1 = 0; } } } if(invI2 > 0) { var rsq1 = this._relativeAnchor2X * this._relativeAnchor2X + this._relativeAnchor2Y * this._relativeAnchor2Y + this._relativeAnchor2Z * this._relativeAnchor2Z; var dot1 = axis2X * this._relativeAnchor2X + axis2Y * this._relativeAnchor2Y + axis2Z * this._relativeAnchor2Z; var projsq1 = rsq1 * rsq1 - dot1 * dot1; if(projsq1 > 0) { if(this._b2._invMass > 0) { invI2 = 1 / (1 / invI2 + this._b2._mass * projsq1); } else { invI2 = 0; } } } if(invI1 + invI2 == 0) { return 0; } else { return 1 / (invI1 + invI2); } } _syncAnchors() { var tf1 = this._b1._transform; var tf2 = this._b2._transform; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = tf1._rotation00 * this._localAnchor1X + tf1._rotation01 * this._localAnchor1Y + tf1._rotation02 * this._localAnchor1Z; __tmp__Y = tf1._rotation10 * this._localAnchor1X + tf1._rotation11 * this._localAnchor1Y + tf1._rotation12 * this._localAnchor1Z; __tmp__Z = tf1._rotation20 * this._localAnchor1X + tf1._rotation21 * this._localAnchor1Y + tf1._rotation22 * this._localAnchor1Z; this._relativeAnchor1X = __tmp__X; this._relativeAnchor1Y = __tmp__Y; this._relativeAnchor1Z = __tmp__Z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = tf2._rotation00 * this._localAnchor2X + tf2._rotation01 * this._localAnchor2Y + tf2._rotation02 * this._localAnchor2Z; __tmp__Y1 = tf2._rotation10 * this._localAnchor2X + tf2._rotation11 * this._localAnchor2Y + tf2._rotation12 * this._localAnchor2Z; __tmp__Z1 = tf2._rotation20 * this._localAnchor2X + tf2._rotation21 * this._localAnchor2Y + tf2._rotation22 * this._localAnchor2Z; this._relativeAnchor2X = __tmp__X1; this._relativeAnchor2Y = __tmp__Y1; this._relativeAnchor2Z = __tmp__Z1; this._anchor1X = this._relativeAnchor1X + tf1._positionX; this._anchor1Y = this._relativeAnchor1Y + tf1._positionY; this._anchor1Z = this._relativeAnchor1Z + tf1._positionZ; this._anchor2X = this._relativeAnchor2X + tf2._positionX; this._anchor2Y = this._relativeAnchor2Y + tf2._positionY; this._anchor2Z = this._relativeAnchor2Z + tf2._positionZ; var __tmp__X2; var __tmp__Y2; var __tmp__Z2; __tmp__X2 = tf1._rotation00 * this._localBasisX1X + tf1._rotation01 * this._localBasisX1Y + tf1._rotation02 * this._localBasisX1Z; __tmp__Y2 = tf1._rotation10 * this._localBasisX1X + tf1._rotation11 * this._localBasisX1Y + tf1._rotation12 * this._localBasisX1Z; __tmp__Z2 = tf1._rotation20 * this._localBasisX1X + tf1._rotation21 * this._localBasisX1Y + tf1._rotation22 * this._localBasisX1Z; this._basisX1X = __tmp__X2; this._basisX1Y = __tmp__Y2; this._basisX1Z = __tmp__Z2; var __tmp__X3; var __tmp__Y3; var __tmp__Z3; __tmp__X3 = tf1._rotation00 * this._localBasisY1X + tf1._rotation01 * this._localBasisY1Y + tf1._rotation02 * this._localBasisY1Z; __tmp__Y3 = tf1._rotation10 * this._localBasisY1X + tf1._rotation11 * this._localBasisY1Y + tf1._rotation12 * this._localBasisY1Z; __tmp__Z3 = tf1._rotation20 * this._localBasisY1X + tf1._rotation21 * this._localBasisY1Y + tf1._rotation22 * this._localBasisY1Z; this._basisY1X = __tmp__X3; this._basisY1Y = __tmp__Y3; this._basisY1Z = __tmp__Z3; var __tmp__X4; var __tmp__Y4; var __tmp__Z4; __tmp__X4 = tf1._rotation00 * this._localBasisZ1X + tf1._rotation01 * this._localBasisZ1Y + tf1._rotation02 * this._localBasisZ1Z; __tmp__Y4 = tf1._rotation10 * this._localBasisZ1X + tf1._rotation11 * this._localBasisZ1Y + tf1._rotation12 * this._localBasisZ1Z; __tmp__Z4 = tf1._rotation20 * this._localBasisZ1X + tf1._rotation21 * this._localBasisZ1Y + tf1._rotation22 * this._localBasisZ1Z; this._basisZ1X = __tmp__X4; this._basisZ1Y = __tmp__Y4; this._basisZ1Z = __tmp__Z4; var __tmp__X5; var __tmp__Y5; var __tmp__Z5; __tmp__X5 = tf2._rotation00 * this._localBasisX2X + tf2._rotation01 * this._localBasisX2Y + tf2._rotation02 * this._localBasisX2Z; __tmp__Y5 = tf2._rotation10 * this._localBasisX2X + tf2._rotation11 * this._localBasisX2Y + tf2._rotation12 * this._localBasisX2Z; __tmp__Z5 = tf2._rotation20 * this._localBasisX2X + tf2._rotation21 * this._localBasisX2Y + tf2._rotation22 * this._localBasisX2Z; this._basisX2X = __tmp__X5; this._basisX2Y = __tmp__Y5; this._basisX2Z = __tmp__Z5; var __tmp__X6; var __tmp__Y6; var __tmp__Z6; __tmp__X6 = tf2._rotation00 * this._localBasisY2X + tf2._rotation01 * this._localBasisY2Y + tf2._rotation02 * this._localBasisY2Z; __tmp__Y6 = tf2._rotation10 * this._localBasisY2X + tf2._rotation11 * this._localBasisY2Y + tf2._rotation12 * this._localBasisY2Z; __tmp__Z6 = tf2._rotation20 * this._localBasisY2X + tf2._rotation21 * this._localBasisY2Y + tf2._rotation22 * this._localBasisY2Z; this._basisY2X = __tmp__X6; this._basisY2Y = __tmp__Y6; this._basisY2Z = __tmp__Z6; var __tmp__X7; var __tmp__Y7; var __tmp__Z7; __tmp__X7 = tf2._rotation00 * this._localBasisZ2X + tf2._rotation01 * this._localBasisZ2Y + tf2._rotation02 * this._localBasisZ2Z; __tmp__Y7 = tf2._rotation10 * this._localBasisZ2X + tf2._rotation11 * this._localBasisZ2Y + tf2._rotation12 * this._localBasisZ2Z; __tmp__Z7 = tf2._rotation20 * this._localBasisZ2X + tf2._rotation21 * this._localBasisZ2Y + tf2._rotation22 * this._localBasisZ2Z; this._basisZ2X = __tmp__X7; this._basisZ2Y = __tmp__Y7; this._basisZ2Z = __tmp__Z7; } _getVelocitySolverInfo(timeStep,info) { info.b1 = this._b1; info.b2 = this._b2; info.numRows = 0; } _getPositionSolverInfo(info) { info.b1 = this._b1; info.b2 = this._b2; info.numRows = 0; } _checkDestruction() { var forceSq = this._appliedForceX * this._appliedForceX + this._appliedForceY * this._appliedForceY + this._appliedForceZ * this._appliedForceZ; var torqueSq = this._appliedTorqueX * this._appliedTorqueX + this._appliedTorqueY * this._appliedTorqueY + this._appliedTorqueZ * this._appliedTorqueZ; if(this._breakForce > 0 && forceSq > this._breakForce * this._breakForce) { this._world.removeJoint(this); return; } if(this._breakTorque > 0 && torqueSq > this._breakTorque * this._breakTorque) { this._world.removeJoint(this); return; } } getRigidBody1() { return this._b1; } getRigidBody2() { return this._b2; } getType() { return this._type; } getAnchor1() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._anchor1X; v1.y = this._anchor1Y; v1.z = this._anchor1Z; return v; } getAnchor2() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._anchor2X; v1.y = this._anchor2Y; v1.z = this._anchor2Z; return v; } getAnchor1To(anchor) { var v = anchor; v.x = this._anchor1X; v.y = this._anchor1Y; v.z = this._anchor1Z; } getAnchor2To(anchor) { var v = anchor; v.x = this._anchor2X; v.y = this._anchor2Y; v.z = this._anchor2Z; } getLocalAnchor1() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._localAnchor1X; v1.y = this._localAnchor1Y; v1.z = this._localAnchor1Z; return v; } getLocalAnchor2() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._localAnchor2X; v1.y = this._localAnchor2Y; v1.z = this._localAnchor2Z; return v; } getLocalAnchor1To(localAnchor) { var v = localAnchor; v.x = this._localAnchor1X; v.y = this._localAnchor1Y; v.z = this._localAnchor1Z; } getLocalAnchor2To(localAnchor) { var v = localAnchor; v.x = this._localAnchor2X; v.y = this._localAnchor2Y; v.z = this._localAnchor2Z; } getBasis1() { var m = new oimo.common.Mat3(); var b; var b00; var b01; var b02; var b10; var b11; var b12; var b20; var b21; var b22; b00 = this._basisX1X; b01 = this._basisY1X; b02 = this._basisZ1X; b10 = this._basisX1Y; b11 = this._basisY1Y; b12 = this._basisZ1Y; b20 = this._basisX1Z; b21 = this._basisY1Z; b22 = this._basisZ1Z; var m1 = m; m1.e00 = b00; m1.e01 = b01; m1.e02 = b02; m1.e10 = b10; m1.e11 = b11; m1.e12 = b12; m1.e20 = b20; m1.e21 = b21; m1.e22 = b22; return m; } getBasis2() { var m = new oimo.common.Mat3(); var b; var b00; var b01; var b02; var b10; var b11; var b12; var b20; var b21; var b22; b00 = this._basisX2X; b01 = this._basisY2X; b02 = this._basisZ2X; b10 = this._basisX2Y; b11 = this._basisY2Y; b12 = this._basisZ2Y; b20 = this._basisX2Z; b21 = this._basisY2Z; b22 = this._basisZ2Z; var m1 = m; m1.e00 = b00; m1.e01 = b01; m1.e02 = b02; m1.e10 = b10; m1.e11 = b11; m1.e12 = b12; m1.e20 = b20; m1.e21 = b21; m1.e22 = b22; return m; } getBasis1To(basis) { var b; var b00; var b01; var b02; var b10; var b11; var b12; var b20; var b21; var b22; b00 = this._basisX1X; b01 = this._basisY1X; b02 = this._basisZ1X; b10 = this._basisX1Y; b11 = this._basisY1Y; b12 = this._basisZ1Y; b20 = this._basisX1Z; b21 = this._basisY1Z; b22 = this._basisZ1Z; var m = basis; m.e00 = b00; m.e01 = b01; m.e02 = b02; m.e10 = b10; m.e11 = b11; m.e12 = b12; m.e20 = b20; m.e21 = b21; m.e22 = b22; } getBasis2To(basis) { var b; var b00; var b01; var b02; var b10; var b11; var b12; var b20; var b21; var b22; b00 = this._basisX2X; b01 = this._basisY2X; b02 = this._basisZ2X; b10 = this._basisX2Y; b11 = this._basisY2Y; b12 = this._basisZ2Y; b20 = this._basisX2Z; b21 = this._basisY2Z; b22 = this._basisZ2Z; var m = basis; m.e00 = b00; m.e01 = b01; m.e02 = b02; m.e10 = b10; m.e11 = b11; m.e12 = b12; m.e20 = b20; m.e21 = b21; m.e22 = b22; } getAllowCollision() { return this._allowCollision; } setAllowCollision(allowCollision) { this._allowCollision = allowCollision; } getBreakForce() { return this._breakForce; } setBreakForce(breakForce) { this._breakForce = breakForce; } getBreakTorque() { return this._breakTorque; } setBreakTorque(breakTorque) { this._breakTorque = breakTorque; } getPositionCorrectionAlgorithm() { return this._positionCorrectionAlgorithm; } setPositionCorrectionAlgorithm(positionCorrectionAlgorithm) { switch(positionCorrectionAlgorithm) { case 0:case 1:case 2: break; default: throw new Error("invalid position correction algorithm id: " + positionCorrectionAlgorithm); } this._positionCorrectionAlgorithm = positionCorrectionAlgorithm; } getAppliedForce() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._appliedForceX; v1.y = this._appliedForceY; v1.z = this._appliedForceZ; return v; } getAppliedForceTo(appliedForce) { var v = appliedForce; v.x = this._appliedForceX; v.y = this._appliedForceY; v.z = this._appliedForceZ; } getAppliedTorque() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._appliedTorqueX; v1.y = this._appliedTorqueY; v1.z = this._appliedTorqueZ; return v; } getAppliedTorqueTo(appliedTorque) { var v = appliedTorque; v.x = this._appliedTorqueX; v.y = this._appliedTorqueY; v.z = this._appliedTorqueZ; } getPrev() { return this._prev; } getNext() { return this._next; } } oimo.dynamics.constraint.joint.CylindricalJoint = class oimo_dynamics_constraint_joint_CylindricalJoint extends oimo.dynamics.constraint.joint.Joint { constructor(config) { super(config,2); var v = config.localAxis1; this._localBasisX1X = v.x; this._localBasisX1Y = v.y; this._localBasisX1Z = v.z; var v1 = config.localAxis2; this._localBasisX2X = v1.x; this._localBasisX2Y = v1.y; this._localBasisX2Z = v1.z; this.buildLocalBasesFromX(); this.angle = 0; this.angularErrorY = 0; this.angularErrorZ = 0; this.translation = 0; this.linearErrorY = 0; this.linearErrorZ = 0; this._basis = new oimo.dynamics.constraint.joint.BasisTracker(this); this._translSd = config.translationalSpringDamper.clone(); this._translLm = config.translationalLimitMotor.clone(); this._rotSd = config.rotationalSpringDamper.clone(); this._rotLm = config.rotationalLimitMotor.clone(); } getInfo(info,timeStep,isPositionPart) { var erp = this.getErp(timeStep,isPositionPart); var linRhsY = this.linearErrorY * erp; var linRhsZ = this.linearErrorZ * erp; var angRhsY = this.angularErrorY * erp; var angRhsZ = this.angularErrorZ * erp; var row; var j; var translationalMotorMass = 1 / (this._b1._invMass + this._b2._invMass); var rotationalMotorMass = this.computeEffectiveInertiaMoment(this._basis.xX,this._basis.xY,this._basis.xZ); if(this._translSd.frequency <= 0 || !isPositionPart) { var impulse = this._impulses[0]; var row1 = info.rows[info.numRows++]; var _this = row1.jacobian; _this.lin1X = 0; _this.lin1Y = 0; _this.lin1Z = 0; _this.lin2X = 0; _this.lin2Y = 0; _this.lin2Z = 0; _this.ang1X = 0; _this.ang1Y = 0; _this.ang1Z = 0; _this.ang2X = 0; _this.ang2Y = 0; _this.ang2Z = 0; row1.rhs = 0; row1.cfm = 0; row1.minImpulse = 0; row1.maxImpulse = 0; row1.motorSpeed = 0; row1.motorMaxImpulse = 0; row1.impulse = null; row1.impulse = impulse; row = row1; this.setSolverInfoRowLinear(row,this.translation,this._translLm,translationalMotorMass,this._translSd,timeStep,isPositionPart); j = row.jacobian; j.lin1X = this._basis.xX; j.lin1Y = this._basis.xY; j.lin1Z = this._basis.xZ; j.lin2X = this._basis.xX; j.lin2Y = this._basis.xY; j.lin2Z = this._basis.xZ; j.ang1X = this._relativeAnchor1Y * this._basis.xZ - this._relativeAnchor1Z * this._basis.xY; j.ang1Y = this._relativeAnchor1Z * this._basis.xX - this._relativeAnchor1X * this._basis.xZ; j.ang1Z = this._relativeAnchor1X * this._basis.xY - this._relativeAnchor1Y * this._basis.xX; j.ang2X = this._relativeAnchor2Y * this._basis.xZ - this._relativeAnchor2Z * this._basis.xY; j.ang2Y = this._relativeAnchor2Z * this._basis.xX - this._relativeAnchor2X * this._basis.xZ; j.ang2Z = this._relativeAnchor2X * this._basis.xY - this._relativeAnchor2Y * this._basis.xX; } var impulse1 = this._impulses[1]; var row2 = info.rows[info.numRows++]; var _this1 = row2.jacobian; _this1.lin1X = 0; _this1.lin1Y = 0; _this1.lin1Z = 0; _this1.lin2X = 0; _this1.lin2Y = 0; _this1.lin2Z = 0; _this1.ang1X = 0; _this1.ang1Y = 0; _this1.ang1Z = 0; _this1.ang2X = 0; _this1.ang2Y = 0; _this1.ang2Z = 0; row2.rhs = 0; row2.cfm = 0; row2.minImpulse = 0; row2.maxImpulse = 0; row2.motorSpeed = 0; row2.motorMaxImpulse = 0; row2.impulse = null; row2.impulse = impulse1; row = row2; row.rhs = linRhsY; row.cfm = 0; row.minImpulse = -1e65536; row.maxImpulse = 1e65536; j = row.jacobian; j.lin1X = this._basis.yX; j.lin1Y = this._basis.yY; j.lin1Z = this._basis.yZ; j.lin2X = this._basis.yX; j.lin2Y = this._basis.yY; j.lin2Z = this._basis.yZ; j.ang1X = this._relativeAnchor1Y * this._basis.yZ - this._relativeAnchor1Z * this._basis.yY; j.ang1Y = this._relativeAnchor1Z * this._basis.yX - this._relativeAnchor1X * this._basis.yZ; j.ang1Z = this._relativeAnchor1X * this._basis.yY - this._relativeAnchor1Y * this._basis.yX; j.ang2X = this._relativeAnchor2Y * this._basis.yZ - this._relativeAnchor2Z * this._basis.yY; j.ang2Y = this._relativeAnchor2Z * this._basis.yX - this._relativeAnchor2X * this._basis.yZ; j.ang2Z = this._relativeAnchor2X * this._basis.yY - this._relativeAnchor2Y * this._basis.yX; var impulse2 = this._impulses[2]; var row3 = info.rows[info.numRows++]; var _this2 = row3.jacobian; _this2.lin1X = 0; _this2.lin1Y = 0; _this2.lin1Z = 0; _this2.lin2X = 0; _this2.lin2Y = 0; _this2.lin2Z = 0; _this2.ang1X = 0; _this2.ang1Y = 0; _this2.ang1Z = 0; _this2.ang2X = 0; _this2.ang2Y = 0; _this2.ang2Z = 0; row3.rhs = 0; row3.cfm = 0; row3.minImpulse = 0; row3.maxImpulse = 0; row3.motorSpeed = 0; row3.motorMaxImpulse = 0; row3.impulse = null; row3.impulse = impulse2; row = row3; row.rhs = linRhsZ; row.cfm = 0; row.minImpulse = -1e65536; row.maxImpulse = 1e65536; j = row.jacobian; j.lin1X = this._basis.zX; j.lin1Y = this._basis.zY; j.lin1Z = this._basis.zZ; j.lin2X = this._basis.zX; j.lin2Y = this._basis.zY; j.lin2Z = this._basis.zZ; j.ang1X = this._relativeAnchor1Y * this._basis.zZ - this._relativeAnchor1Z * this._basis.zY; j.ang1Y = this._relativeAnchor1Z * this._basis.zX - this._relativeAnchor1X * this._basis.zZ; j.ang1Z = this._relativeAnchor1X * this._basis.zY - this._relativeAnchor1Y * this._basis.zX; j.ang2X = this._relativeAnchor2Y * this._basis.zZ - this._relativeAnchor2Z * this._basis.zY; j.ang2Y = this._relativeAnchor2Z * this._basis.zX - this._relativeAnchor2X * this._basis.zZ; j.ang2Z = this._relativeAnchor2X * this._basis.zY - this._relativeAnchor2Y * this._basis.zX; if(this._rotSd.frequency <= 0 || !isPositionPart) { var impulse3 = this._impulses[3]; var row4 = info.rows[info.numRows++]; var _this3 = row4.jacobian; _this3.lin1X = 0; _this3.lin1Y = 0; _this3.lin1Z = 0; _this3.lin2X = 0; _this3.lin2Y = 0; _this3.lin2Z = 0; _this3.ang1X = 0; _this3.ang1Y = 0; _this3.ang1Z = 0; _this3.ang2X = 0; _this3.ang2Y = 0; _this3.ang2Z = 0; row4.rhs = 0; row4.cfm = 0; row4.minImpulse = 0; row4.maxImpulse = 0; row4.motorSpeed = 0; row4.motorMaxImpulse = 0; row4.impulse = null; row4.impulse = impulse3; row = row4; this.setSolverInfoRowAngular(row,this.angle,this._rotLm,rotationalMotorMass,this._rotSd,timeStep,isPositionPart); j = row.jacobian; j.ang1X = this._basis.xX; j.ang1Y = this._basis.xY; j.ang1Z = this._basis.xZ; j.ang2X = this._basis.xX; j.ang2Y = this._basis.xY; j.ang2Z = this._basis.xZ; } var impulse4 = this._impulses[4]; var row5 = info.rows[info.numRows++]; var _this4 = row5.jacobian; _this4.lin1X = 0; _this4.lin1Y = 0; _this4.lin1Z = 0; _this4.lin2X = 0; _this4.lin2Y = 0; _this4.lin2Z = 0; _this4.ang1X = 0; _this4.ang1Y = 0; _this4.ang1Z = 0; _this4.ang2X = 0; _this4.ang2Y = 0; _this4.ang2Z = 0; row5.rhs = 0; row5.cfm = 0; row5.minImpulse = 0; row5.maxImpulse = 0; row5.motorSpeed = 0; row5.motorMaxImpulse = 0; row5.impulse = null; row5.impulse = impulse4; row = row5; row.rhs = angRhsY; row.cfm = 0; row.minImpulse = -1e65536; row.maxImpulse = 1e65536; j = row.jacobian; j.ang1X = this._basis.yX; j.ang1Y = this._basis.yY; j.ang1Z = this._basis.yZ; j.ang2X = this._basis.yX; j.ang2Y = this._basis.yY; j.ang2Z = this._basis.yZ; var impulse5 = this._impulses[5]; var row6 = info.rows[info.numRows++]; var _this5 = row6.jacobian; _this5.lin1X = 0; _this5.lin1Y = 0; _this5.lin1Z = 0; _this5.lin2X = 0; _this5.lin2Y = 0; _this5.lin2Z = 0; _this5.ang1X = 0; _this5.ang1Y = 0; _this5.ang1Z = 0; _this5.ang2X = 0; _this5.ang2Y = 0; _this5.ang2Z = 0; row6.rhs = 0; row6.cfm = 0; row6.minImpulse = 0; row6.maxImpulse = 0; row6.motorSpeed = 0; row6.motorMaxImpulse = 0; row6.impulse = null; row6.impulse = impulse5; row = row6; row.rhs = angRhsZ; row.cfm = 0; row.minImpulse = -1e65536; row.maxImpulse = 1e65536; j = row.jacobian; j.ang1X = this._basis.zX; j.ang1Y = this._basis.zY; j.ang1Z = this._basis.zZ; j.ang2X = this._basis.zX; j.ang2Y = this._basis.zY; j.ang2Z = this._basis.zZ; } _syncAnchors() { super._syncAnchors(); var _this = this._basis; var invM1 = _this.joint._b1._invMass; var invM2 = _this.joint._b2._invMass; var q; var qX; var qY; var qZ; var qW; var idQ; var idQX; var idQY; var idQZ; var idQW; var slerpQ; var slerpQX; var slerpQY; var slerpQZ; var slerpQW; var slerpM; var slerpM00; var slerpM01; var slerpM02; var slerpM10; var slerpM11; var slerpM12; var slerpM20; var slerpM21; var slerpM22; var newX; var newXX; var newXY; var newXZ; var newY; var newYX; var newYY; var newYZ; var newZ; var newZX; var newZY; var newZZ; var prevX; var prevXX; var prevXY; var prevXZ; var prevY; var prevYX; var prevYY; var prevYZ; var d = _this.joint._basisX1X * _this.joint._basisX2X + _this.joint._basisX1Y * _this.joint._basisX2Y + _this.joint._basisX1Z * _this.joint._basisX2Z; if(d < -0.999999999) { var vX; var vY; var vZ; var x1 = _this.joint._basisX1X; var y1 = _this.joint._basisX1Y; var z1 = _this.joint._basisX1Z; var x2 = x1 * x1; var y2 = y1 * y1; var z2 = z1 * z1; var d1; if(x2 < y2) { if(x2 < z2) { d1 = 1 / Math.sqrt(y2 + z2); vX = 0; vY = z1 * d1; vZ = -y1 * d1; } else { d1 = 1 / Math.sqrt(x2 + y2); vX = y1 * d1; vY = -x1 * d1; vZ = 0; } } else if(y2 < z2) { d1 = 1 / Math.sqrt(z2 + x2); vX = -z1 * d1; vY = 0; vZ = x1 * d1; } else { d1 = 1 / Math.sqrt(x2 + y2); vX = y1 * d1; vY = -x1 * d1; vZ = 0; } qX = vX; qY = vY; qZ = vZ; qW = 0; } else { var cX; var cY; var cZ; cX = _this.joint._basisX1Y * _this.joint._basisX2Z - _this.joint._basisX1Z * _this.joint._basisX2Y; cY = _this.joint._basisX1Z * _this.joint._basisX2X - _this.joint._basisX1X * _this.joint._basisX2Z; cZ = _this.joint._basisX1X * _this.joint._basisX2Y - _this.joint._basisX1Y * _this.joint._basisX2X; var w = Math.sqrt((1 + d) * 0.5); d = 0.5 / w; cX *= d; cY *= d; cZ *= d; qX = cX; qY = cY; qZ = cZ; qW = w; } idQX = 0; idQY = 0; idQZ = 0; idQW = 1; var qx; var qy; var qz; var qw; var q1X; var q1Y; var q1Z; var q1W; var q2X; var q2Y; var q2Z; var q2W; q1X = idQX; q1Y = idQY; q1Z = idQZ; q1W = idQW; q2X = qX; q2Y = qY; q2Z = qZ; q2W = qW; var d2 = q1X * q2X + q1Y * q2Y + q1Z * q2Z + q1W * q2W; if(d2 < 0) { d2 = -d2; q2X = -q2X; q2Y = -q2Y; q2Z = -q2Z; q2W = -q2W; } if(d2 > 0.999999) { var dqX; var dqY; var dqZ; var dqW; dqX = q2X - q1X; dqY = q2Y - q1Y; dqZ = q2Z - q1Z; dqW = q2W - q1W; q2X = q1X + dqX * (invM1 / (invM1 + invM2)); q2Y = q1Y + dqY * (invM1 / (invM1 + invM2)); q2Z = q1Z + dqZ * (invM1 / (invM1 + invM2)); q2W = q1W + dqW * (invM1 / (invM1 + invM2)); var l = q2X * q2X + q2Y * q2Y + q2Z * q2Z + q2W * q2W; if(l > 1e-32) { l = 1 / Math.sqrt(l); } slerpQX = q2X * l; slerpQY = q2Y * l; slerpQZ = q2Z * l; slerpQW = q2W * l; } else { var theta = invM1 / (invM1 + invM2) * Math.acos(d2); q2X += q1X * -d2; q2Y += q1Y * -d2; q2Z += q1Z * -d2; q2W += q1W * -d2; var l1 = q2X * q2X + q2Y * q2Y + q2Z * q2Z + q2W * q2W; if(l1 > 1e-32) { l1 = 1 / Math.sqrt(l1); } q2X *= l1; q2Y *= l1; q2Z *= l1; q2W *= l1; var sin = Math.sin(theta); var cos = Math.cos(theta); q1X *= cos; q1Y *= cos; q1Z *= cos; q1W *= cos; slerpQX = q1X + q2X * sin; slerpQY = q1Y + q2Y * sin; slerpQZ = q1Z + q2Z * sin; slerpQW = q1W + q2W * sin; } var x = slerpQX; var y = slerpQY; var z = slerpQZ; var w1 = slerpQW; var x21 = 2 * x; var y21 = 2 * y; var z21 = 2 * z; var xx = x * x21; var yy = y * y21; var zz = z * z21; var xy = x * y21; var yz = y * z21; var xz = x * z21; var wx = w1 * x21; var wy = w1 * y21; var wz = w1 * z21; slerpM00 = 1 - yy - zz; slerpM01 = xy - wz; slerpM02 = xz + wy; slerpM10 = xy + wz; slerpM11 = 1 - xx - zz; slerpM12 = yz - wx; slerpM20 = xz - wy; slerpM21 = yz + wx; slerpM22 = 1 - xx - yy; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = slerpM00 * _this.joint._basisX1X + slerpM01 * _this.joint._basisX1Y + slerpM02 * _this.joint._basisX1Z; __tmp__Y = slerpM10 * _this.joint._basisX1X + slerpM11 * _this.joint._basisX1Y + slerpM12 * _this.joint._basisX1Z; __tmp__Z = slerpM20 * _this.joint._basisX1X + slerpM21 * _this.joint._basisX1Y + slerpM22 * _this.joint._basisX1Z; newXX = __tmp__X; newXY = __tmp__Y; newXZ = __tmp__Z; prevXX = _this.xX; prevXY = _this.xY; prevXZ = _this.xZ; prevYX = _this.yX; prevYY = _this.yY; prevYZ = _this.yZ; var d3 = prevXX * newXX + prevXY * newXY + prevXZ * newXZ; if(d3 < -0.999999999) { var vX1; var vY1; var vZ1; var x11 = prevXX; var y11 = prevXY; var z11 = prevXZ; var x22 = x11 * x11; var y22 = y11 * y11; var z22 = z11 * z11; var d4; if(x22 < y22) { if(x22 < z22) { d4 = 1 / Math.sqrt(y22 + z22); vX1 = 0; vY1 = z11 * d4; vZ1 = -y11 * d4; } else { d4 = 1 / Math.sqrt(x22 + y22); vX1 = y11 * d4; vY1 = -x11 * d4; vZ1 = 0; } } else if(y22 < z22) { d4 = 1 / Math.sqrt(z22 + x22); vX1 = -z11 * d4; vY1 = 0; vZ1 = x11 * d4; } else { d4 = 1 / Math.sqrt(x22 + y22); vX1 = y11 * d4; vY1 = -x11 * d4; vZ1 = 0; } slerpQX = vX1; slerpQY = vY1; slerpQZ = vZ1; slerpQW = 0; } else { var cX1; var cY1; var cZ1; cX1 = prevXY * newXZ - prevXZ * newXY; cY1 = prevXZ * newXX - prevXX * newXZ; cZ1 = prevXX * newXY - prevXY * newXX; var w2 = Math.sqrt((1 + d3) * 0.5); d3 = 0.5 / w2; cX1 *= d3; cY1 *= d3; cZ1 *= d3; slerpQX = cX1; slerpQY = cY1; slerpQZ = cZ1; slerpQW = w2; } var x3 = slerpQX; var y3 = slerpQY; var z3 = slerpQZ; var w3 = slerpQW; var x23 = 2 * x3; var y23 = 2 * y3; var z23 = 2 * z3; var xx1 = x3 * x23; var yy1 = y3 * y23; var zz1 = z3 * z23; var xy1 = x3 * y23; var yz1 = y3 * z23; var xz1 = x3 * z23; var wx1 = w3 * x23; var wy1 = w3 * y23; var wz1 = w3 * z23; slerpM00 = 1 - yy1 - zz1; slerpM01 = xy1 - wz1; slerpM02 = xz1 + wy1; slerpM10 = xy1 + wz1; slerpM11 = 1 - xx1 - zz1; slerpM12 = yz1 - wx1; slerpM20 = xz1 - wy1; slerpM21 = yz1 + wx1; slerpM22 = 1 - xx1 - yy1; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = slerpM00 * prevYX + slerpM01 * prevYY + slerpM02 * prevYZ; __tmp__Y1 = slerpM10 * prevYX + slerpM11 * prevYY + slerpM12 * prevYZ; __tmp__Z1 = slerpM20 * prevYX + slerpM21 * prevYY + slerpM22 * prevYZ; newYX = __tmp__X1; newYY = __tmp__Y1; newYZ = __tmp__Z1; newZX = newXY * newYZ - newXZ * newYY; newZY = newXZ * newYX - newXX * newYZ; newZZ = newXX * newYY - newXY * newYX; if(newZX * newZX + newZY * newZY + newZZ * newZZ > 1e-6) { var l2 = newZX * newZX + newZY * newZY + newZZ * newZZ; if(l2 > 0) { l2 = 1 / Math.sqrt(l2); } newZX *= l2; newZY *= l2; newZZ *= l2; } else { var x12 = newXX; var y12 = newXY; var z12 = newXZ; var x24 = x12 * x12; var y24 = y12 * y12; var z24 = z12 * z12; var d5; if(x24 < y24) { if(x24 < z24) { d5 = 1 / Math.sqrt(y24 + z24); newZX = 0; newZY = z12 * d5; newZZ = -y12 * d5; } else { d5 = 1 / Math.sqrt(x24 + y24); newZX = y12 * d5; newZY = -x12 * d5; newZZ = 0; } } else if(y24 < z24) { d5 = 1 / Math.sqrt(z24 + x24); newZX = -z12 * d5; newZY = 0; newZZ = x12 * d5; } else { d5 = 1 / Math.sqrt(x24 + y24); newZX = y12 * d5; newZY = -x12 * d5; newZZ = 0; } } newYX = newZY * newXZ - newZZ * newXY; newYY = newZZ * newXX - newZX * newXZ; newYZ = newZX * newXY - newZY * newXX; _this.xX = newXX; _this.xY = newXY; _this.xZ = newXZ; _this.yX = newYX; _this.yY = newYY; _this.yZ = newYZ; _this.zX = newZX; _this.zY = newZY; _this.zZ = newZZ; var angError; var angErrorX; var angErrorY; var angErrorZ; angErrorX = this._basisX1Y * this._basisX2Z - this._basisX1Z * this._basisX2Y; angErrorY = this._basisX1Z * this._basisX2X - this._basisX1X * this._basisX2Z; angErrorZ = this._basisX1X * this._basisX2Y - this._basisX1Y * this._basisX2X; var cos1 = this._basisX1X * this._basisX2X + this._basisX1Y * this._basisX2Y + this._basisX1Z * this._basisX2Z; var theta1 = cos1 <= -1 ? 3.14159265358979 : cos1 >= 1 ? 0 : Math.acos(cos1); var l3 = angErrorX * angErrorX + angErrorY * angErrorY + angErrorZ * angErrorZ; if(l3 > 0) { l3 = 1 / Math.sqrt(l3); } angErrorX *= l3; angErrorY *= l3; angErrorZ *= l3; angErrorX *= theta1; angErrorY *= theta1; angErrorZ *= theta1; this.angularErrorY = angErrorX * this._basis.yX + angErrorY * this._basis.yY + angErrorZ * this._basis.yZ; this.angularErrorZ = angErrorX * this._basis.zX + angErrorY * this._basis.zY + angErrorZ * this._basis.zZ; var perpCross; var perpCrossX; var perpCrossY; var perpCrossZ; perpCrossX = this._basisY1Y * this._basisY2Z - this._basisY1Z * this._basisY2Y; perpCrossY = this._basisY1Z * this._basisY2X - this._basisY1X * this._basisY2Z; perpCrossZ = this._basisY1X * this._basisY2Y - this._basisY1Y * this._basisY2X; cos1 = this._basisY1X * this._basisY2X + this._basisY1Y * this._basisY2Y + this._basisY1Z * this._basisY2Z; this.angle = cos1 <= -1 ? 3.14159265358979 : cos1 >= 1 ? 0 : Math.acos(cos1); if(perpCrossX * this._basis.xX + perpCrossY * this._basis.xY + perpCrossZ * this._basis.xZ < 0) { this.angle = -this.angle; } var anchorDiff; var anchorDiffX; var anchorDiffY; var anchorDiffZ; anchorDiffX = this._anchor2X - this._anchor1X; anchorDiffY = this._anchor2Y - this._anchor1Y; anchorDiffZ = this._anchor2Z - this._anchor1Z; this.translation = anchorDiffX * this._basis.xX + anchorDiffY * this._basis.xY + anchorDiffZ * this._basis.xZ; this.linearErrorY = anchorDiffX * this._basis.yX + anchorDiffY * this._basis.yY + anchorDiffZ * this._basis.yZ; this.linearErrorZ = anchorDiffX * this._basis.zX + anchorDiffY * this._basis.zY + anchorDiffZ * this._basis.zZ; } _getVelocitySolverInfo(timeStep,info) { super._getVelocitySolverInfo(timeStep,info); this.getInfo(info,timeStep,false); } _getPositionSolverInfo(info) { super._getPositionSolverInfo(info); this.getInfo(info,null,true); } getAxis1() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._basisX1X; v1.y = this._basisX1Y; v1.z = this._basisX1Z; return v; } getAxis2() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._basisX2X; v1.y = this._basisX2Y; v1.z = this._basisX2Z; return v; } getAxis1To(axis) { var v = axis; v.x = this._basisX1X; v.y = this._basisX1Y; v.z = this._basisX1Z; } getAxis2To(axis) { var v = axis; v.x = this._basisX2X; v.y = this._basisX2Y; v.z = this._basisX2Z; } getLocalAxis1() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._localBasisX1X; v1.y = this._localBasisX1Y; v1.z = this._localBasisX1Z; return v; } getLocalAxis2() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._localBasisX2X; v1.y = this._localBasisX2Y; v1.z = this._localBasisX2Z; return v; } getLocalAxis1To(axis) { var v = axis; v.x = this._localBasisX1X; v.y = this._localBasisX1Y; v.z = this._localBasisX1Z; } getLocalAxis2To(axis) { var v = axis; v.x = this._localBasisX2X; v.y = this._localBasisX2Y; v.z = this._localBasisX2Z; } getTranslationalSpringDamper() { return this._translSd; } getRotationalSpringDamper() { return this._rotSd; } getTranslationalLimitMotor() { return this._translLm; } getRotationalLimitMotor() { return this._rotLm; } getAngle() { return this.angle; } getTranslation() { return this.translation; } } oimo.dynamics.constraint.joint.JointConfig = class oimo_dynamics_constraint_joint_JointConfig { constructor() { this.rigidBody1 = null; this.rigidBody2 = null; this.localAnchor1 = new oimo.common.Vec3(); this.localAnchor2 = new oimo.common.Vec3(); this.allowCollision = false; this.solverType = oimo.common.Setting.defaultJointConstraintSolverType; this.positionCorrectionAlgorithm = oimo.common.Setting.defaultJointPositionCorrectionAlgorithm; this.breakForce = 0; this.breakTorque = 0; } _init(rb1,rb2,worldAnchor) { this.rigidBody1 = rb1; this.rigidBody2 = rb2; var _this = this.rigidBody1; var v; var vX; var vY; var vZ; var v1 = worldAnchor; vX = v1.x; vY = v1.y; vZ = v1.z; vX -= _this._transform._positionX; vY -= _this._transform._positionY; vZ -= _this._transform._positionZ; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = _this._transform._rotation00 * vX + _this._transform._rotation10 * vY + _this._transform._rotation20 * vZ; __tmp__Y = _this._transform._rotation01 * vX + _this._transform._rotation11 * vY + _this._transform._rotation21 * vZ; __tmp__Z = _this._transform._rotation02 * vX + _this._transform._rotation12 * vY + _this._transform._rotation22 * vZ; vX = __tmp__X; vY = __tmp__Y; vZ = __tmp__Z; var v2 = this.localAnchor1; v2.x = vX; v2.y = vY; v2.z = vZ; var _this1 = this.rigidBody2; var v3; var vX1; var vY1; var vZ1; var v4 = worldAnchor; vX1 = v4.x; vY1 = v4.y; vZ1 = v4.z; vX1 -= _this1._transform._positionX; vY1 -= _this1._transform._positionY; vZ1 -= _this1._transform._positionZ; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = _this1._transform._rotation00 * vX1 + _this1._transform._rotation10 * vY1 + _this1._transform._rotation20 * vZ1; __tmp__Y1 = _this1._transform._rotation01 * vX1 + _this1._transform._rotation11 * vY1 + _this1._transform._rotation21 * vZ1; __tmp__Z1 = _this1._transform._rotation02 * vX1 + _this1._transform._rotation12 * vY1 + _this1._transform._rotation22 * vZ1; vX1 = __tmp__X1; vY1 = __tmp__Y1; vZ1 = __tmp__Z1; var v5 = this.localAnchor2; v5.x = vX1; v5.y = vY1; v5.z = vZ1; } } oimo.dynamics.constraint.joint.CylindricalJointConfig = class oimo_dynamics_constraint_joint_CylindricalJointConfig extends oimo.dynamics.constraint.joint.JointConfig { constructor() { super(); this.localAxis1 = new oimo.common.Vec3(1,0,0); this.localAxis2 = new oimo.common.Vec3(1,0,0); this.translationalLimitMotor = new oimo.dynamics.constraint.joint.TranslationalLimitMotor(); this.translationalSpringDamper = new oimo.dynamics.constraint.joint.SpringDamper(); this.rotationalLimitMotor = new oimo.dynamics.constraint.joint.RotationalLimitMotor(); this.rotationalSpringDamper = new oimo.dynamics.constraint.joint.SpringDamper(); } init(rigidBody1,rigidBody2,worldAnchor,worldAxis) { this._init(rigidBody1,rigidBody2,worldAnchor); var v; var vX; var vY; var vZ; var v1 = worldAxis; vX = v1.x; vY = v1.y; vZ = v1.z; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = rigidBody1._transform._rotation00 * vX + rigidBody1._transform._rotation10 * vY + rigidBody1._transform._rotation20 * vZ; __tmp__Y = rigidBody1._transform._rotation01 * vX + rigidBody1._transform._rotation11 * vY + rigidBody1._transform._rotation21 * vZ; __tmp__Z = rigidBody1._transform._rotation02 * vX + rigidBody1._transform._rotation12 * vY + rigidBody1._transform._rotation22 * vZ; vX = __tmp__X; vY = __tmp__Y; vZ = __tmp__Z; var v2 = this.localAxis1; v2.x = vX; v2.y = vY; v2.z = vZ; var v3; var vX1; var vY1; var vZ1; var v4 = worldAxis; vX1 = v4.x; vY1 = v4.y; vZ1 = v4.z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = rigidBody2._transform._rotation00 * vX1 + rigidBody2._transform._rotation10 * vY1 + rigidBody2._transform._rotation20 * vZ1; __tmp__Y1 = rigidBody2._transform._rotation01 * vX1 + rigidBody2._transform._rotation11 * vY1 + rigidBody2._transform._rotation21 * vZ1; __tmp__Z1 = rigidBody2._transform._rotation02 * vX1 + rigidBody2._transform._rotation12 * vY1 + rigidBody2._transform._rotation22 * vZ1; vX1 = __tmp__X1; vY1 = __tmp__Y1; vZ1 = __tmp__Z1; var v5 = this.localAxis2; v5.x = vX1; v5.y = vY1; v5.z = vZ1; return this; } } oimo.dynamics.constraint.joint.GenericJoint = class oimo_dynamics_constraint_joint_GenericJoint extends oimo.dynamics.constraint.joint.Joint { constructor(config) { super(config,oimo.dynamics.constraint.joint.JointType.GENERIC); var tmp; var _this = config.localBasis1; if(!(_this.e00 * (_this.e11 * _this.e22 - _this.e12 * _this.e21) - _this.e01 * (_this.e10 * _this.e22 - _this.e12 * _this.e20) + _this.e02 * (_this.e10 * _this.e21 - _this.e11 * _this.e20) < 0)) { var _this1 = config.localBasis2; tmp = _this1.e00 * (_this1.e11 * _this1.e22 - _this1.e12 * _this1.e21) - _this1.e01 * (_this1.e10 * _this1.e22 - _this1.e12 * _this1.e20) + _this1.e02 * (_this1.e10 * _this1.e21 - _this1.e11 * _this1.e20) < 0; } else { tmp = true; } if(tmp) { console.log("src/oimo/dynamics/constraint/joint/GenericJoint.hx:50:","[warning] joint basis must be right handed"); } var lb1; var lb100; var lb101; var lb102; var lb110; var lb111; var lb112; var lb120; var lb121; var lb122; var lb2; var lb200; var lb201; var lb202; var lb210; var lb211; var lb212; var lb220; var lb221; var lb222; var m = config.localBasis1; lb100 = m.e00; lb101 = m.e01; lb102 = m.e02; lb110 = m.e10; lb111 = m.e11; lb112 = m.e12; lb120 = m.e20; lb121 = m.e21; lb122 = m.e22; var m1 = config.localBasis2; lb200 = m1.e00; lb201 = m1.e01; lb202 = m1.e02; lb210 = m1.e10; lb211 = m1.e11; lb212 = m1.e12; lb220 = m1.e20; lb221 = m1.e21; lb222 = m1.e22; this._localBasisX1X = lb100; this._localBasisX1Y = lb110; this._localBasisX1Z = lb120; this._localBasisY1X = lb101; this._localBasisY1Y = lb111; this._localBasisY1Z = lb121; this._localBasisZ1X = lb102; this._localBasisZ1Y = lb112; this._localBasisZ1Z = lb122; this._localBasisX2X = lb200; this._localBasisX2Y = lb210; this._localBasisX2Z = lb220; this._localBasisY2X = lb201; this._localBasisY2Y = lb211; this._localBasisY2Z = lb221; this._localBasisZ2X = lb202; this._localBasisZ2Y = lb212; this._localBasisZ2Z = lb222; this._angleX = 0; this._angleY = 0; this._angleZ = 0; this.translationX = 0; this.translationY = 0; this.translationZ = 0; this.xSingular = false; this.ySingular = false; this.zSingular = false; var this1 = new Array(3); this._translLms = this1; var this2 = new Array(3); this._translSds = this2; var this3 = new Array(3); this._rotLms = this3; var this4 = new Array(3); this._rotSds = this4; this._translLms[0] = config.translationalLimitMotors[0].clone(); this._translLms[1] = config.translationalLimitMotors[1].clone(); this._translLms[2] = config.translationalLimitMotors[2].clone(); this._translSds[0] = config.translationalSpringDampers[0].clone(); this._translSds[1] = config.translationalSpringDampers[1].clone(); this._translSds[2] = config.translationalSpringDampers[2].clone(); this._rotLms[0] = config.rotationalLimitMotors[0].clone(); this._rotLms[1] = config.rotationalLimitMotors[1].clone(); this._rotLms[2] = config.rotationalLimitMotors[2].clone(); this._rotSds[0] = config.rotationalSpringDampers[0].clone(); this._rotSds[1] = config.rotationalSpringDampers[1].clone(); this._rotSds[2] = config.rotationalSpringDampers[2].clone(); } getInfo(info,timeStep,isPositionPart) { var row; var j; var translMotorMass = 1 / (this._b1._invMass + this._b2._invMass); var motorMassX = this.computeEffectiveInertiaMoment(this._axisXX,this._axisXY,this._axisXZ); var motorMassY = this.computeEffectiveInertiaMoment(this._axisYX,this._axisYY,this._axisYZ); var motorMassZ = this.computeEffectiveInertiaMoment(this._axisZX,this._axisZY,this._axisZZ); if(this._translSds[0].frequency <= 0 || !isPositionPart) { var impulse = this._impulses[0]; var row1 = info.rows[info.numRows++]; var _this = row1.jacobian; _this.lin1X = 0; _this.lin1Y = 0; _this.lin1Z = 0; _this.lin2X = 0; _this.lin2Y = 0; _this.lin2Z = 0; _this.ang1X = 0; _this.ang1Y = 0; _this.ang1Z = 0; _this.ang2X = 0; _this.ang2Y = 0; _this.ang2Z = 0; row1.rhs = 0; row1.cfm = 0; row1.minImpulse = 0; row1.maxImpulse = 0; row1.motorSpeed = 0; row1.motorMaxImpulse = 0; row1.impulse = null; row1.impulse = impulse; row = row1; this.setSolverInfoRowLinear(row,this.translationX,this._translLms[0],translMotorMass,this._translSds[0],timeStep,isPositionPart); j = row.jacobian; j.lin1X = this._basisX1X; j.lin1Y = this._basisX1Y; j.lin1Z = this._basisX1Z; j.lin2X = this._basisX1X; j.lin2Y = this._basisX1Y; j.lin2Z = this._basisX1Z; j.ang1X = this._relativeAnchor1Y * this._basisX1Z - this._relativeAnchor1Z * this._basisX1Y; j.ang1Y = this._relativeAnchor1Z * this._basisX1X - this._relativeAnchor1X * this._basisX1Z; j.ang1Z = this._relativeAnchor1X * this._basisX1Y - this._relativeAnchor1Y * this._basisX1X; j.ang2X = this._relativeAnchor2Y * this._basisX1Z - this._relativeAnchor2Z * this._basisX1Y; j.ang2Y = this._relativeAnchor2Z * this._basisX1X - this._relativeAnchor2X * this._basisX1Z; j.ang2Z = this._relativeAnchor2X * this._basisX1Y - this._relativeAnchor2Y * this._basisX1X; } if(this._translSds[1].frequency <= 0 || !isPositionPart) { var impulse1 = this._impulses[1]; var row2 = info.rows[info.numRows++]; var _this1 = row2.jacobian; _this1.lin1X = 0; _this1.lin1Y = 0; _this1.lin1Z = 0; _this1.lin2X = 0; _this1.lin2Y = 0; _this1.lin2Z = 0; _this1.ang1X = 0; _this1.ang1Y = 0; _this1.ang1Z = 0; _this1.ang2X = 0; _this1.ang2Y = 0; _this1.ang2Z = 0; row2.rhs = 0; row2.cfm = 0; row2.minImpulse = 0; row2.maxImpulse = 0; row2.motorSpeed = 0; row2.motorMaxImpulse = 0; row2.impulse = null; row2.impulse = impulse1; row = row2; this.setSolverInfoRowLinear(row,this.translationY,this._translLms[1],translMotorMass,this._translSds[1],timeStep,isPositionPart); j = row.jacobian; j.lin1X = this._basisY1X; j.lin1Y = this._basisY1Y; j.lin1Z = this._basisY1Z; j.lin2X = this._basisY1X; j.lin2Y = this._basisY1Y; j.lin2Z = this._basisY1Z; j.ang1X = this._relativeAnchor1Y * this._basisY1Z - this._relativeAnchor1Z * this._basisY1Y; j.ang1Y = this._relativeAnchor1Z * this._basisY1X - this._relativeAnchor1X * this._basisY1Z; j.ang1Z = this._relativeAnchor1X * this._basisY1Y - this._relativeAnchor1Y * this._basisY1X; j.ang2X = this._relativeAnchor2Y * this._basisY1Z - this._relativeAnchor2Z * this._basisY1Y; j.ang2Y = this._relativeAnchor2Z * this._basisY1X - this._relativeAnchor2X * this._basisY1Z; j.ang2Z = this._relativeAnchor2X * this._basisY1Y - this._relativeAnchor2Y * this._basisY1X; } if(this._translSds[2].frequency <= 0 || !isPositionPart) { var impulse2 = this._impulses[2]; var row3 = info.rows[info.numRows++]; var _this2 = row3.jacobian; _this2.lin1X = 0; _this2.lin1Y = 0; _this2.lin1Z = 0; _this2.lin2X = 0; _this2.lin2Y = 0; _this2.lin2Z = 0; _this2.ang1X = 0; _this2.ang1Y = 0; _this2.ang1Z = 0; _this2.ang2X = 0; _this2.ang2Y = 0; _this2.ang2Z = 0; row3.rhs = 0; row3.cfm = 0; row3.minImpulse = 0; row3.maxImpulse = 0; row3.motorSpeed = 0; row3.motorMaxImpulse = 0; row3.impulse = null; row3.impulse = impulse2; row = row3; this.setSolverInfoRowLinear(row,this.translationZ,this._translLms[2],translMotorMass,this._translSds[2],timeStep,isPositionPart); j = row.jacobian; j.lin1X = this._basisZ1X; j.lin1Y = this._basisZ1Y; j.lin1Z = this._basisZ1Z; j.lin2X = this._basisZ1X; j.lin2Y = this._basisZ1Y; j.lin2Z = this._basisZ1Z; j.ang1X = this._relativeAnchor1Y * this._basisZ1Z - this._relativeAnchor1Z * this._basisZ1Y; j.ang1Y = this._relativeAnchor1Z * this._basisZ1X - this._relativeAnchor1X * this._basisZ1Z; j.ang1Z = this._relativeAnchor1X * this._basisZ1Y - this._relativeAnchor1Y * this._basisZ1X; j.ang2X = this._relativeAnchor2Y * this._basisZ1Z - this._relativeAnchor2Z * this._basisZ1Y; j.ang2Y = this._relativeAnchor2Z * this._basisZ1X - this._relativeAnchor2X * this._basisZ1Z; j.ang2Z = this._relativeAnchor2X * this._basisZ1Y - this._relativeAnchor2Y * this._basisZ1X; } if(!this.xSingular && (this._rotSds[0].frequency <= 0 || !isPositionPart)) { var impulse3 = this._impulses[3]; var row4 = info.rows[info.numRows++]; var _this3 = row4.jacobian; _this3.lin1X = 0; _this3.lin1Y = 0; _this3.lin1Z = 0; _this3.lin2X = 0; _this3.lin2Y = 0; _this3.lin2Z = 0; _this3.ang1X = 0; _this3.ang1Y = 0; _this3.ang1Z = 0; _this3.ang2X = 0; _this3.ang2Y = 0; _this3.ang2Z = 0; row4.rhs = 0; row4.cfm = 0; row4.minImpulse = 0; row4.maxImpulse = 0; row4.motorSpeed = 0; row4.motorMaxImpulse = 0; row4.impulse = null; row4.impulse = impulse3; row = row4; this.setSolverInfoRowAngular(row,this._angleX,this._rotLms[0],motorMassX,this._rotSds[0],timeStep,isPositionPart); j = row.jacobian; j.ang1X = this._axisXX; j.ang1Y = this._axisXY; j.ang1Z = this._axisXZ; j.ang2X = this._axisXX; j.ang2Y = this._axisXY; j.ang2Z = this._axisXZ; } if(!this.ySingular && (this._rotSds[1].frequency <= 0 || !isPositionPart)) { var impulse4 = this._impulses[4]; var row5 = info.rows[info.numRows++]; var _this4 = row5.jacobian; _this4.lin1X = 0; _this4.lin1Y = 0; _this4.lin1Z = 0; _this4.lin2X = 0; _this4.lin2Y = 0; _this4.lin2Z = 0; _this4.ang1X = 0; _this4.ang1Y = 0; _this4.ang1Z = 0; _this4.ang2X = 0; _this4.ang2Y = 0; _this4.ang2Z = 0; row5.rhs = 0; row5.cfm = 0; row5.minImpulse = 0; row5.maxImpulse = 0; row5.motorSpeed = 0; row5.motorMaxImpulse = 0; row5.impulse = null; row5.impulse = impulse4; row = row5; this.setSolverInfoRowAngular(row,this._angleY,this._rotLms[1],motorMassY,this._rotSds[1],timeStep,isPositionPart); j = row.jacobian; j.ang1X = this._axisYX; j.ang1Y = this._axisYY; j.ang1Z = this._axisYZ; j.ang2X = this._axisYX; j.ang2Y = this._axisYY; j.ang2Z = this._axisYZ; } if(!this.zSingular && (this._rotSds[2].frequency <= 0 || !isPositionPart)) { var impulse5 = this._impulses[5]; var row6 = info.rows[info.numRows++]; var _this5 = row6.jacobian; _this5.lin1X = 0; _this5.lin1Y = 0; _this5.lin1Z = 0; _this5.lin2X = 0; _this5.lin2Y = 0; _this5.lin2Z = 0; _this5.ang1X = 0; _this5.ang1Y = 0; _this5.ang1Z = 0; _this5.ang2X = 0; _this5.ang2Y = 0; _this5.ang2Z = 0; row6.rhs = 0; row6.cfm = 0; row6.minImpulse = 0; row6.maxImpulse = 0; row6.motorSpeed = 0; row6.motorMaxImpulse = 0; row6.impulse = null; row6.impulse = impulse5; row = row6; this.setSolverInfoRowAngular(row,this._angleZ,this._rotLms[2],motorMassZ,this._rotSds[2],timeStep,isPositionPart); j = row.jacobian; j.ang1X = this._axisZX; j.ang1Y = this._axisZY; j.ang1Z = this._axisZZ; j.ang2X = this._axisZX; j.ang2Y = this._axisZY; j.ang2Z = this._axisZZ; } } _syncAnchors() { super._syncAnchors(); var rot1; var rot100; var rot101; var rot102; var rot110; var rot111; var rot112; var rot120; var rot121; var rot122; var rot2; var rot200; var rot201; var rot202; var rot210; var rot211; var rot212; var rot220; var rot221; var rot222; rot100 = this._basisX1X; rot101 = this._basisY1X; rot102 = this._basisZ1X; rot110 = this._basisX1Y; rot111 = this._basisY1Y; rot112 = this._basisZ1Y; rot120 = this._basisX1Z; rot121 = this._basisY1Z; rot122 = this._basisZ1Z; rot200 = this._basisX2X; rot201 = this._basisY2X; rot202 = this._basisZ2X; rot210 = this._basisX2Y; rot211 = this._basisY2Y; rot212 = this._basisZ2Y; rot220 = this._basisX2Z; rot221 = this._basisY2Z; rot222 = this._basisZ2Z; var relRot; var relRot00; var relRot01; var relRot02; var relRot10; var relRot11; var relRot12; var relRot20; var relRot21; var relRot22; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = rot100 * rot200 + rot110 * rot210 + rot120 * rot220; __tmp__01 = rot100 * rot201 + rot110 * rot211 + rot120 * rot221; __tmp__02 = rot100 * rot202 + rot110 * rot212 + rot120 * rot222; __tmp__10 = rot101 * rot200 + rot111 * rot210 + rot121 * rot220; __tmp__11 = rot101 * rot201 + rot111 * rot211 + rot121 * rot221; __tmp__12 = rot101 * rot202 + rot111 * rot212 + rot121 * rot222; __tmp__20 = rot102 * rot200 + rot112 * rot210 + rot122 * rot220; __tmp__21 = rot102 * rot201 + rot112 * rot211 + rot122 * rot221; __tmp__22 = rot102 * rot202 + rot112 * rot212 + rot122 * rot222; relRot00 = __tmp__00; relRot01 = __tmp__01; relRot02 = __tmp__02; relRot10 = __tmp__10; relRot11 = __tmp__11; relRot12 = __tmp__12; relRot20 = __tmp__20; relRot21 = __tmp__21; relRot22 = __tmp__22; var angleAxisX; var angleAxisXX; var angleAxisXY; var angleAxisXZ; var angleAxisY; var angleAxisYX; var angleAxisYY; var angleAxisYZ; var angleAxisZ; var angleAxisZX; var angleAxisZY; var angleAxisZZ; angleAxisXX = this._basisX1X; angleAxisXY = this._basisX1Y; angleAxisXZ = this._basisX1Z; angleAxisZX = this._basisZ2X; angleAxisZY = this._basisZ2Y; angleAxisZZ = this._basisZ2Z; angleAxisYX = angleAxisZY * angleAxisXZ - angleAxisZZ * angleAxisXY; angleAxisYY = angleAxisZZ * angleAxisXX - angleAxisZX * angleAxisXZ; angleAxisYZ = angleAxisZX * angleAxisXY - angleAxisZY * angleAxisXX; this._axisXX = angleAxisYY * angleAxisZZ - angleAxisYZ * angleAxisZY; this._axisXY = angleAxisYZ * angleAxisZX - angleAxisYX * angleAxisZZ; this._axisXZ = angleAxisYX * angleAxisZY - angleAxisYY * angleAxisZX; this._axisYX = angleAxisYX; this._axisYY = angleAxisYY; this._axisYZ = angleAxisYZ; this._axisZX = angleAxisXY * angleAxisYZ - angleAxisXZ * angleAxisYY; this._axisZY = angleAxisXZ * angleAxisYX - angleAxisXX * angleAxisYZ; this._axisZZ = angleAxisXX * angleAxisYY - angleAxisXY * angleAxisYX; var l = this._axisXX * this._axisXX + this._axisXY * this._axisXY + this._axisXZ * this._axisXZ; if(l > 0) { l = 1 / Math.sqrt(l); } this._axisXX *= l; this._axisXY *= l; this._axisXZ *= l; var l1 = this._axisYX * this._axisYX + this._axisYY * this._axisYY + this._axisYZ * this._axisYZ; if(l1 > 0) { l1 = 1 / Math.sqrt(l1); } this._axisYX *= l1; this._axisYY *= l1; this._axisYZ *= l1; var l2 = this._axisZX * this._axisZX + this._axisZY * this._axisZY + this._axisZZ * this._axisZZ; if(l2 > 0) { l2 = 1 / Math.sqrt(l2); } this._axisZX *= l2; this._axisZY *= l2; this._axisZZ *= l2; this.xSingular = this._axisXX * this._axisXX + this._axisXY * this._axisXY + this._axisXZ * this._axisXZ == 0; this.ySingular = this._axisYX * this._axisYX + this._axisYY * this._axisYY + this._axisYZ * this._axisYZ == 0; this.zSingular = this._axisZX * this._axisZX + this._axisZY * this._axisZY + this._axisZZ * this._axisZZ == 0; var rot11; var rot1001; var rot1011; var rot1021; var rot1101; var rot1111; var rot1121; var rot1201; var rot1211; var rot1221; var rot21; var rot2001; var rot2011; var rot2021; var rot2101; var rot2111; var rot2121; var rot2201; var rot2211; var rot2221; rot1001 = this._basisX1X; rot1011 = this._basisY1X; rot1021 = this._basisZ1X; rot1101 = this._basisX1Y; rot1111 = this._basisY1Y; rot1121 = this._basisZ1Y; rot1201 = this._basisX1Z; rot1211 = this._basisY1Z; rot1221 = this._basisZ1Z; rot2001 = this._basisX2X; rot2011 = this._basisY2X; rot2021 = this._basisZ2X; rot2101 = this._basisX2Y; rot2111 = this._basisY2Y; rot2121 = this._basisZ2Y; rot2201 = this._basisX2Z; rot2211 = this._basisY2Z; rot2221 = this._basisZ2Z; var relRot1; var relRot001; var relRot011; var relRot021; var relRot101; var relRot111; var relRot121; var relRot201; var relRot211; var relRot221; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = rot1001 * rot2001 + rot1101 * rot2101 + rot1201 * rot2201; __tmp__011 = rot1001 * rot2011 + rot1101 * rot2111 + rot1201 * rot2211; __tmp__021 = rot1001 * rot2021 + rot1101 * rot2121 + rot1201 * rot2221; __tmp__101 = rot1011 * rot2001 + rot1111 * rot2101 + rot1211 * rot2201; __tmp__111 = rot1011 * rot2011 + rot1111 * rot2111 + rot1211 * rot2211; __tmp__121 = rot1011 * rot2021 + rot1111 * rot2121 + rot1211 * rot2221; __tmp__201 = rot1021 * rot2001 + rot1121 * rot2101 + rot1221 * rot2201; __tmp__211 = rot1021 * rot2011 + rot1121 * rot2111 + rot1221 * rot2211; __tmp__221 = rot1021 * rot2021 + rot1121 * rot2121 + rot1221 * rot2221; relRot001 = __tmp__001; relRot011 = __tmp__011; relRot021 = __tmp__021; relRot101 = __tmp__101; relRot111 = __tmp__111; relRot121 = __tmp__121; relRot201 = __tmp__201; relRot211 = __tmp__211; relRot221 = __tmp__221; var angles; var anglesX; var anglesY; var anglesZ; var sy = relRot021; if(sy <= -1) { var xSubZ = Math.atan2(relRot211,relRot111); anglesX = xSubZ * 0.5; anglesY = -1.570796326794895; anglesZ = -xSubZ * 0.5; } else if(sy >= 1) { var xAddZ = Math.atan2(relRot211,relRot111); anglesX = xAddZ * 0.5; anglesY = 1.570796326794895; anglesZ = xAddZ * 0.5; } else { var y = Math.asin(sy); var x = Math.atan2(-relRot121,relRot221); var z = Math.atan2(-relRot011,relRot001); anglesX = x; anglesY = y; anglesZ = z; } this._angleX = anglesX; this._angleY = anglesY; this._angleZ = anglesZ; var anchorDiff; var anchorDiffX; var anchorDiffY; var anchorDiffZ; anchorDiffX = this._anchor2X - this._anchor1X; anchorDiffY = this._anchor2Y - this._anchor1Y; anchorDiffZ = this._anchor2Z - this._anchor1Z; this.translationX = anchorDiffX * this._basisX1X + anchorDiffY * this._basisX1Y + anchorDiffZ * this._basisX1Z; this.translationY = anchorDiffX * this._basisY1X + anchorDiffY * this._basisY1Y + anchorDiffZ * this._basisY1Z; this.translationZ = anchorDiffX * this._basisZ1X + anchorDiffY * this._basisZ1Y + anchorDiffZ * this._basisZ1Z; } _getVelocitySolverInfo(timeStep,info) { super._getVelocitySolverInfo(timeStep,info); this.getInfo(info,timeStep,false); } _getPositionSolverInfo(info) { super._getPositionSolverInfo(info); this.getInfo(info,null,true); } getAxisX() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._basisX1X; v1.y = this._basisX1Y; v1.z = this._basisX1Z; return v; } getAxisY() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._axisYX; v1.y = this._axisYY; v1.z = this._axisYZ; return v; } getAxisZ() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._basisZ2X; v1.y = this._basisZ2Y; v1.z = this._basisZ2Z; return v; } getTranslationalSpringDampers() { return this._translSds.slice(0); } getRotationalSpringDampers() { return this._translSds.slice(0); } getTranslationalLimitMotors() { return this._translLms.slice(0); } getRotationalLimitMotors() { return this._rotLms.slice(0); } getAngles() { return new oimo.common.Vec3(this._angleX,this._angleY,this._angleZ); } getTranslations() { return new oimo.common.Vec3(this.translationX,this.translationY,this.translationZ); } } oimo.dynamics.constraint.joint.GenericJointConfig = class oimo_dynamics_constraint_joint_GenericJointConfig extends oimo.dynamics.constraint.joint.JointConfig { constructor() { super(); this.localBasis1 = new oimo.common.Mat3(); this.localBasis2 = new oimo.common.Mat3(); var _g = []; _g.push(new oimo.dynamics.constraint.joint.TranslationalLimitMotor().setLimits(0,0)); _g.push(new oimo.dynamics.constraint.joint.TranslationalLimitMotor().setLimits(0,0)); _g.push(new oimo.dynamics.constraint.joint.TranslationalLimitMotor().setLimits(0,0)); this.translationalLimitMotors = _g; var _g1 = []; _g1.push(new oimo.dynamics.constraint.joint.RotationalLimitMotor().setLimits(0,0)); _g1.push(new oimo.dynamics.constraint.joint.RotationalLimitMotor().setLimits(0,0)); _g1.push(new oimo.dynamics.constraint.joint.RotationalLimitMotor().setLimits(0,0)); this.rotationalLimitMotors = _g1; this.translationalSpringDampers = [new oimo.dynamics.constraint.joint.SpringDamper(),new oimo.dynamics.constraint.joint.SpringDamper(),new oimo.dynamics.constraint.joint.SpringDamper()]; this.rotationalSpringDampers = [new oimo.dynamics.constraint.joint.SpringDamper(),new oimo.dynamics.constraint.joint.SpringDamper(),new oimo.dynamics.constraint.joint.SpringDamper()]; } init(rigidBody1,rigidBody2,worldAnchor,worldBasis1,worldBasis2) { this._init(rigidBody1,rigidBody2,worldAnchor); var tf1 = rigidBody1._transform; var tf2 = rigidBody2._transform; var wb1; var wb100; var wb101; var wb102; var wb110; var wb111; var wb112; var wb120; var wb121; var wb122; var wb2; var wb200; var wb201; var wb202; var wb210; var wb211; var wb212; var wb220; var wb221; var wb222; var lb1; var lb100; var lb101; var lb102; var lb110; var lb111; var lb112; var lb120; var lb121; var lb122; var lb2; var lb200; var lb201; var lb202; var lb210; var lb211; var lb212; var lb220; var lb221; var lb222; var m = worldBasis1; wb100 = m.e00; wb101 = m.e01; wb102 = m.e02; wb110 = m.e10; wb111 = m.e11; wb112 = m.e12; wb120 = m.e20; wb121 = m.e21; wb122 = m.e22; var m1 = worldBasis2; wb200 = m1.e00; wb201 = m1.e01; wb202 = m1.e02; wb210 = m1.e10; wb211 = m1.e11; wb212 = m1.e12; wb220 = m1.e20; wb221 = m1.e21; wb222 = m1.e22; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = tf1._rotation00 * wb100 + tf1._rotation10 * wb110 + tf1._rotation20 * wb120; __tmp__01 = tf1._rotation00 * wb101 + tf1._rotation10 * wb111 + tf1._rotation20 * wb121; __tmp__02 = tf1._rotation00 * wb102 + tf1._rotation10 * wb112 + tf1._rotation20 * wb122; __tmp__10 = tf1._rotation01 * wb100 + tf1._rotation11 * wb110 + tf1._rotation21 * wb120; __tmp__11 = tf1._rotation01 * wb101 + tf1._rotation11 * wb111 + tf1._rotation21 * wb121; __tmp__12 = tf1._rotation01 * wb102 + tf1._rotation11 * wb112 + tf1._rotation21 * wb122; __tmp__20 = tf1._rotation02 * wb100 + tf1._rotation12 * wb110 + tf1._rotation22 * wb120; __tmp__21 = tf1._rotation02 * wb101 + tf1._rotation12 * wb111 + tf1._rotation22 * wb121; __tmp__22 = tf1._rotation02 * wb102 + tf1._rotation12 * wb112 + tf1._rotation22 * wb122; lb100 = __tmp__00; lb101 = __tmp__01; lb102 = __tmp__02; lb110 = __tmp__10; lb111 = __tmp__11; lb112 = __tmp__12; lb120 = __tmp__20; lb121 = __tmp__21; lb122 = __tmp__22; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = tf2._rotation00 * wb200 + tf2._rotation10 * wb210 + tf2._rotation20 * wb220; __tmp__011 = tf2._rotation00 * wb201 + tf2._rotation10 * wb211 + tf2._rotation20 * wb221; __tmp__021 = tf2._rotation00 * wb202 + tf2._rotation10 * wb212 + tf2._rotation20 * wb222; __tmp__101 = tf2._rotation01 * wb200 + tf2._rotation11 * wb210 + tf2._rotation21 * wb220; __tmp__111 = tf2._rotation01 * wb201 + tf2._rotation11 * wb211 + tf2._rotation21 * wb221; __tmp__121 = tf2._rotation01 * wb202 + tf2._rotation11 * wb212 + tf2._rotation21 * wb222; __tmp__201 = tf2._rotation02 * wb200 + tf2._rotation12 * wb210 + tf2._rotation22 * wb220; __tmp__211 = tf2._rotation02 * wb201 + tf2._rotation12 * wb211 + tf2._rotation22 * wb221; __tmp__221 = tf2._rotation02 * wb202 + tf2._rotation12 * wb212 + tf2._rotation22 * wb222; lb200 = __tmp__001; lb201 = __tmp__011; lb202 = __tmp__021; lb210 = __tmp__101; lb211 = __tmp__111; lb212 = __tmp__121; lb220 = __tmp__201; lb221 = __tmp__211; lb222 = __tmp__221; var m2 = this.localBasis1; m2.e00 = lb100; m2.e01 = lb101; m2.e02 = lb102; m2.e10 = lb110; m2.e11 = lb111; m2.e12 = lb112; m2.e20 = lb120; m2.e21 = lb121; m2.e22 = lb122; var m3 = this.localBasis2; m3.e00 = lb200; m3.e01 = lb201; m3.e02 = lb202; m3.e10 = lb210; m3.e11 = lb211; m3.e12 = lb212; m3.e20 = lb220; m3.e21 = lb221; m3.e22 = lb222; return this; } } oimo.dynamics.constraint.joint.JointImpulse = class oimo_dynamics_constraint_joint_JointImpulse { constructor() { this.impulse = 0; this.impulseM = 0; this.impulseP = 0; } } oimo.dynamics.constraint.joint.JointLink = class oimo_dynamics_constraint_joint_JointLink { constructor(joint) { this._joint = joint; } getContact() { return this._joint; } getOther() { return this._other; } getPrev() { return this._prev; } getNext() { return this._next; } } oimo.dynamics.constraint.joint.JointMacro = class oimo_dynamics_constraint_joint_JointMacro { } oimo.dynamics.constraint.joint.JointType = class oimo_dynamics_constraint_joint_JointType { } oimo.dynamics.constraint.joint.PrismaticJoint = class oimo_dynamics_constraint_joint_PrismaticJoint extends oimo.dynamics.constraint.joint.Joint { constructor(config) { super(config,oimo.dynamics.constraint.joint.JointType.PRISMATIC); var v = config.localAxis1; this._localBasisX1X = v.x; this._localBasisX1Y = v.y; this._localBasisX1Z = v.z; var v1 = config.localAxis2; this._localBasisX2X = v1.x; this._localBasisX2Y = v1.y; this._localBasisX2Z = v1.z; this.buildLocalBasesFromX(); this._basis = new oimo.dynamics.constraint.joint.BasisTracker(this); this.translation = 0; this.linearErrorY = 0; this.linearErrorZ = 0; this.angularErrorX = 0; this.angularErrorY = 0; this.angularErrorZ = 0; this._sd = config.springDamper.clone(); this._lm = config.limitMotor.clone(); } getInfo(info,timeStep,isPositionPart) { var erp = this.getErp(timeStep,isPositionPart); var linRhsY = this.linearErrorY * erp; var linRhsZ = this.linearErrorZ * erp; var angRhsX = this.angularErrorX * erp; var angRhsY = this.angularErrorY * erp; var angRhsZ = this.angularErrorZ * erp; var row; var j; var motorMass = 1 / (this._b1._invMass + this._b2._invMass); if(this._sd.frequency <= 0 || !isPositionPart) { var impulse = this._impulses[0]; var row1 = info.rows[info.numRows++]; var _this = row1.jacobian; _this.lin1X = 0; _this.lin1Y = 0; _this.lin1Z = 0; _this.lin2X = 0; _this.lin2Y = 0; _this.lin2Z = 0; _this.ang1X = 0; _this.ang1Y = 0; _this.ang1Z = 0; _this.ang2X = 0; _this.ang2Y = 0; _this.ang2Z = 0; row1.rhs = 0; row1.cfm = 0; row1.minImpulse = 0; row1.maxImpulse = 0; row1.motorSpeed = 0; row1.motorMaxImpulse = 0; row1.impulse = null; row1.impulse = impulse; row = row1; this.setSolverInfoRowLinear(row,this.translation,this._lm,motorMass,this._sd,timeStep,isPositionPart); j = row.jacobian; j.lin1X = this._basis.xX; j.lin1Y = this._basis.xY; j.lin1Z = this._basis.xZ; j.lin2X = this._basis.xX; j.lin2Y = this._basis.xY; j.lin2Z = this._basis.xZ; j.ang1X = this._relativeAnchor1Y * this._basis.xZ - this._relativeAnchor1Z * this._basis.xY; j.ang1Y = this._relativeAnchor1Z * this._basis.xX - this._relativeAnchor1X * this._basis.xZ; j.ang1Z = this._relativeAnchor1X * this._basis.xY - this._relativeAnchor1Y * this._basis.xX; j.ang2X = this._relativeAnchor2Y * this._basis.xZ - this._relativeAnchor2Z * this._basis.xY; j.ang2Y = this._relativeAnchor2Z * this._basis.xX - this._relativeAnchor2X * this._basis.xZ; j.ang2Z = this._relativeAnchor2X * this._basis.xY - this._relativeAnchor2Y * this._basis.xX; } var impulse1 = this._impulses[1]; var row2 = info.rows[info.numRows++]; var _this1 = row2.jacobian; _this1.lin1X = 0; _this1.lin1Y = 0; _this1.lin1Z = 0; _this1.lin2X = 0; _this1.lin2Y = 0; _this1.lin2Z = 0; _this1.ang1X = 0; _this1.ang1Y = 0; _this1.ang1Z = 0; _this1.ang2X = 0; _this1.ang2Y = 0; _this1.ang2Z = 0; row2.rhs = 0; row2.cfm = 0; row2.minImpulse = 0; row2.maxImpulse = 0; row2.motorSpeed = 0; row2.motorMaxImpulse = 0; row2.impulse = null; row2.impulse = impulse1; row = row2; row.rhs = linRhsY; row.cfm = 0; row.minImpulse = -1e65536; row.maxImpulse = 1e65536; j = row.jacobian; j.lin1X = this._basis.yX; j.lin1Y = this._basis.yY; j.lin1Z = this._basis.yZ; j.lin2X = this._basis.yX; j.lin2Y = this._basis.yY; j.lin2Z = this._basis.yZ; j.ang1X = this._relativeAnchor1Y * this._basis.yZ - this._relativeAnchor1Z * this._basis.yY; j.ang1Y = this._relativeAnchor1Z * this._basis.yX - this._relativeAnchor1X * this._basis.yZ; j.ang1Z = this._relativeAnchor1X * this._basis.yY - this._relativeAnchor1Y * this._basis.yX; j.ang2X = this._relativeAnchor2Y * this._basis.yZ - this._relativeAnchor2Z * this._basis.yY; j.ang2Y = this._relativeAnchor2Z * this._basis.yX - this._relativeAnchor2X * this._basis.yZ; j.ang2Z = this._relativeAnchor2X * this._basis.yY - this._relativeAnchor2Y * this._basis.yX; var impulse2 = this._impulses[2]; var row3 = info.rows[info.numRows++]; var _this2 = row3.jacobian; _this2.lin1X = 0; _this2.lin1Y = 0; _this2.lin1Z = 0; _this2.lin2X = 0; _this2.lin2Y = 0; _this2.lin2Z = 0; _this2.ang1X = 0; _this2.ang1Y = 0; _this2.ang1Z = 0; _this2.ang2X = 0; _this2.ang2Y = 0; _this2.ang2Z = 0; row3.rhs = 0; row3.cfm = 0; row3.minImpulse = 0; row3.maxImpulse = 0; row3.motorSpeed = 0; row3.motorMaxImpulse = 0; row3.impulse = null; row3.impulse = impulse2; row = row3; row.rhs = linRhsZ; row.cfm = 0; row.minImpulse = -1e65536; row.maxImpulse = 1e65536; j = row.jacobian; j.lin1X = this._basis.zX; j.lin1Y = this._basis.zY; j.lin1Z = this._basis.zZ; j.lin2X = this._basis.zX; j.lin2Y = this._basis.zY; j.lin2Z = this._basis.zZ; j.ang1X = this._relativeAnchor1Y * this._basis.zZ - this._relativeAnchor1Z * this._basis.zY; j.ang1Y = this._relativeAnchor1Z * this._basis.zX - this._relativeAnchor1X * this._basis.zZ; j.ang1Z = this._relativeAnchor1X * this._basis.zY - this._relativeAnchor1Y * this._basis.zX; j.ang2X = this._relativeAnchor2Y * this._basis.zZ - this._relativeAnchor2Z * this._basis.zY; j.ang2Y = this._relativeAnchor2Z * this._basis.zX - this._relativeAnchor2X * this._basis.zZ; j.ang2Z = this._relativeAnchor2X * this._basis.zY - this._relativeAnchor2Y * this._basis.zX; var impulse3 = this._impulses[3]; var row4 = info.rows[info.numRows++]; var _this3 = row4.jacobian; _this3.lin1X = 0; _this3.lin1Y = 0; _this3.lin1Z = 0; _this3.lin2X = 0; _this3.lin2Y = 0; _this3.lin2Z = 0; _this3.ang1X = 0; _this3.ang1Y = 0; _this3.ang1Z = 0; _this3.ang2X = 0; _this3.ang2Y = 0; _this3.ang2Z = 0; row4.rhs = 0; row4.cfm = 0; row4.minImpulse = 0; row4.maxImpulse = 0; row4.motorSpeed = 0; row4.motorMaxImpulse = 0; row4.impulse = null; row4.impulse = impulse3; row = row4; row.rhs = angRhsX; row.cfm = 0; row.minImpulse = -1e65536; row.maxImpulse = 1e65536; j = row.jacobian; j.ang1X = 1; j.ang1Y = 0; j.ang1Z = 0; j.ang2X = 1; j.ang2Y = 0; j.ang2Z = 0; var impulse4 = this._impulses[4]; var row5 = info.rows[info.numRows++]; var _this4 = row5.jacobian; _this4.lin1X = 0; _this4.lin1Y = 0; _this4.lin1Z = 0; _this4.lin2X = 0; _this4.lin2Y = 0; _this4.lin2Z = 0; _this4.ang1X = 0; _this4.ang1Y = 0; _this4.ang1Z = 0; _this4.ang2X = 0; _this4.ang2Y = 0; _this4.ang2Z = 0; row5.rhs = 0; row5.cfm = 0; row5.minImpulse = 0; row5.maxImpulse = 0; row5.motorSpeed = 0; row5.motorMaxImpulse = 0; row5.impulse = null; row5.impulse = impulse4; row = row5; row.rhs = angRhsY; row.cfm = 0; row.minImpulse = -1e65536; row.maxImpulse = 1e65536; j = row.jacobian; j.ang1X = 0; j.ang1Y = 1; j.ang1Z = 0; j.ang2X = 0; j.ang2Y = 1; j.ang2Z = 0; var impulse5 = this._impulses[5]; var row6 = info.rows[info.numRows++]; var _this5 = row6.jacobian; _this5.lin1X = 0; _this5.lin1Y = 0; _this5.lin1Z = 0; _this5.lin2X = 0; _this5.lin2Y = 0; _this5.lin2Z = 0; _this5.ang1X = 0; _this5.ang1Y = 0; _this5.ang1Z = 0; _this5.ang2X = 0; _this5.ang2Y = 0; _this5.ang2Z = 0; row6.rhs = 0; row6.cfm = 0; row6.minImpulse = 0; row6.maxImpulse = 0; row6.motorSpeed = 0; row6.motorMaxImpulse = 0; row6.impulse = null; row6.impulse = impulse5; row = row6; row.rhs = angRhsZ; row.cfm = 0; row.minImpulse = -1e65536; row.maxImpulse = 1e65536; j = row.jacobian; j.ang1X = 0; j.ang1Y = 0; j.ang1Z = 1; j.ang2X = 0; j.ang2Y = 0; j.ang2Z = 1; } _syncAnchors() { super._syncAnchors(); var _this = this._basis; var invM1 = _this.joint._b1._invMass; var invM2 = _this.joint._b2._invMass; var q; var qX; var qY; var qZ; var qW; var idQ; var idQX; var idQY; var idQZ; var idQW; var slerpQ; var slerpQX; var slerpQY; var slerpQZ; var slerpQW; var slerpM; var slerpM00; var slerpM01; var slerpM02; var slerpM10; var slerpM11; var slerpM12; var slerpM20; var slerpM21; var slerpM22; var newX; var newXX; var newXY; var newXZ; var newY; var newYX; var newYY; var newYZ; var newZ; var newZX; var newZY; var newZZ; var prevX; var prevXX; var prevXY; var prevXZ; var prevY; var prevYX; var prevYY; var prevYZ; var d = _this.joint._basisX1X * _this.joint._basisX2X + _this.joint._basisX1Y * _this.joint._basisX2Y + _this.joint._basisX1Z * _this.joint._basisX2Z; if(d < -0.999999999) { var vX; var vY; var vZ; var x1 = _this.joint._basisX1X; var y1 = _this.joint._basisX1Y; var z1 = _this.joint._basisX1Z; var x2 = x1 * x1; var y2 = y1 * y1; var z2 = z1 * z1; var d1; if(x2 < y2) { if(x2 < z2) { d1 = 1 / Math.sqrt(y2 + z2); vX = 0; vY = z1 * d1; vZ = -y1 * d1; } else { d1 = 1 / Math.sqrt(x2 + y2); vX = y1 * d1; vY = -x1 * d1; vZ = 0; } } else if(y2 < z2) { d1 = 1 / Math.sqrt(z2 + x2); vX = -z1 * d1; vY = 0; vZ = x1 * d1; } else { d1 = 1 / Math.sqrt(x2 + y2); vX = y1 * d1; vY = -x1 * d1; vZ = 0; } qX = vX; qY = vY; qZ = vZ; qW = 0; } else { var cX; var cY; var cZ; cX = _this.joint._basisX1Y * _this.joint._basisX2Z - _this.joint._basisX1Z * _this.joint._basisX2Y; cY = _this.joint._basisX1Z * _this.joint._basisX2X - _this.joint._basisX1X * _this.joint._basisX2Z; cZ = _this.joint._basisX1X * _this.joint._basisX2Y - _this.joint._basisX1Y * _this.joint._basisX2X; var w = Math.sqrt((1 + d) * 0.5); d = 0.5 / w; cX *= d; cY *= d; cZ *= d; qX = cX; qY = cY; qZ = cZ; qW = w; } idQX = 0; idQY = 0; idQZ = 0; idQW = 1; var qx; var qy; var qz; var qw; var q1X; var q1Y; var q1Z; var q1W; var q2X; var q2Y; var q2Z; var q2W; q1X = idQX; q1Y = idQY; q1Z = idQZ; q1W = idQW; q2X = qX; q2Y = qY; q2Z = qZ; q2W = qW; var d2 = q1X * q2X + q1Y * q2Y + q1Z * q2Z + q1W * q2W; if(d2 < 0) { d2 = -d2; q2X = -q2X; q2Y = -q2Y; q2Z = -q2Z; q2W = -q2W; } if(d2 > 0.999999) { var dqX; var dqY; var dqZ; var dqW; dqX = q2X - q1X; dqY = q2Y - q1Y; dqZ = q2Z - q1Z; dqW = q2W - q1W; q2X = q1X + dqX * (invM1 / (invM1 + invM2)); q2Y = q1Y + dqY * (invM1 / (invM1 + invM2)); q2Z = q1Z + dqZ * (invM1 / (invM1 + invM2)); q2W = q1W + dqW * (invM1 / (invM1 + invM2)); var l = q2X * q2X + q2Y * q2Y + q2Z * q2Z + q2W * q2W; if(l > 1e-32) { l = 1 / Math.sqrt(l); } slerpQX = q2X * l; slerpQY = q2Y * l; slerpQZ = q2Z * l; slerpQW = q2W * l; } else { var theta = invM1 / (invM1 + invM2) * Math.acos(d2); q2X += q1X * -d2; q2Y += q1Y * -d2; q2Z += q1Z * -d2; q2W += q1W * -d2; var l1 = q2X * q2X + q2Y * q2Y + q2Z * q2Z + q2W * q2W; if(l1 > 1e-32) { l1 = 1 / Math.sqrt(l1); } q2X *= l1; q2Y *= l1; q2Z *= l1; q2W *= l1; var sin = Math.sin(theta); var cos = Math.cos(theta); q1X *= cos; q1Y *= cos; q1Z *= cos; q1W *= cos; slerpQX = q1X + q2X * sin; slerpQY = q1Y + q2Y * sin; slerpQZ = q1Z + q2Z * sin; slerpQW = q1W + q2W * sin; } var x = slerpQX; var y = slerpQY; var z = slerpQZ; var w1 = slerpQW; var x21 = 2 * x; var y21 = 2 * y; var z21 = 2 * z; var xx = x * x21; var yy = y * y21; var zz = z * z21; var xy = x * y21; var yz = y * z21; var xz = x * z21; var wx = w1 * x21; var wy = w1 * y21; var wz = w1 * z21; slerpM00 = 1 - yy - zz; slerpM01 = xy - wz; slerpM02 = xz + wy; slerpM10 = xy + wz; slerpM11 = 1 - xx - zz; slerpM12 = yz - wx; slerpM20 = xz - wy; slerpM21 = yz + wx; slerpM22 = 1 - xx - yy; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = slerpM00 * _this.joint._basisX1X + slerpM01 * _this.joint._basisX1Y + slerpM02 * _this.joint._basisX1Z; __tmp__Y = slerpM10 * _this.joint._basisX1X + slerpM11 * _this.joint._basisX1Y + slerpM12 * _this.joint._basisX1Z; __tmp__Z = slerpM20 * _this.joint._basisX1X + slerpM21 * _this.joint._basisX1Y + slerpM22 * _this.joint._basisX1Z; newXX = __tmp__X; newXY = __tmp__Y; newXZ = __tmp__Z; prevXX = _this.xX; prevXY = _this.xY; prevXZ = _this.xZ; prevYX = _this.yX; prevYY = _this.yY; prevYZ = _this.yZ; var d3 = prevXX * newXX + prevXY * newXY + prevXZ * newXZ; if(d3 < -0.999999999) { var vX1; var vY1; var vZ1; var x11 = prevXX; var y11 = prevXY; var z11 = prevXZ; var x22 = x11 * x11; var y22 = y11 * y11; var z22 = z11 * z11; var d4; if(x22 < y22) { if(x22 < z22) { d4 = 1 / Math.sqrt(y22 + z22); vX1 = 0; vY1 = z11 * d4; vZ1 = -y11 * d4; } else { d4 = 1 / Math.sqrt(x22 + y22); vX1 = y11 * d4; vY1 = -x11 * d4; vZ1 = 0; } } else if(y22 < z22) { d4 = 1 / Math.sqrt(z22 + x22); vX1 = -z11 * d4; vY1 = 0; vZ1 = x11 * d4; } else { d4 = 1 / Math.sqrt(x22 + y22); vX1 = y11 * d4; vY1 = -x11 * d4; vZ1 = 0; } slerpQX = vX1; slerpQY = vY1; slerpQZ = vZ1; slerpQW = 0; } else { var cX1; var cY1; var cZ1; cX1 = prevXY * newXZ - prevXZ * newXY; cY1 = prevXZ * newXX - prevXX * newXZ; cZ1 = prevXX * newXY - prevXY * newXX; var w2 = Math.sqrt((1 + d3) * 0.5); d3 = 0.5 / w2; cX1 *= d3; cY1 *= d3; cZ1 *= d3; slerpQX = cX1; slerpQY = cY1; slerpQZ = cZ1; slerpQW = w2; } var x3 = slerpQX; var y3 = slerpQY; var z3 = slerpQZ; var w3 = slerpQW; var x23 = 2 * x3; var y23 = 2 * y3; var z23 = 2 * z3; var xx1 = x3 * x23; var yy1 = y3 * y23; var zz1 = z3 * z23; var xy1 = x3 * y23; var yz1 = y3 * z23; var xz1 = x3 * z23; var wx1 = w3 * x23; var wy1 = w3 * y23; var wz1 = w3 * z23; slerpM00 = 1 - yy1 - zz1; slerpM01 = xy1 - wz1; slerpM02 = xz1 + wy1; slerpM10 = xy1 + wz1; slerpM11 = 1 - xx1 - zz1; slerpM12 = yz1 - wx1; slerpM20 = xz1 - wy1; slerpM21 = yz1 + wx1; slerpM22 = 1 - xx1 - yy1; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = slerpM00 * prevYX + slerpM01 * prevYY + slerpM02 * prevYZ; __tmp__Y1 = slerpM10 * prevYX + slerpM11 * prevYY + slerpM12 * prevYZ; __tmp__Z1 = slerpM20 * prevYX + slerpM21 * prevYY + slerpM22 * prevYZ; newYX = __tmp__X1; newYY = __tmp__Y1; newYZ = __tmp__Z1; newZX = newXY * newYZ - newXZ * newYY; newZY = newXZ * newYX - newXX * newYZ; newZZ = newXX * newYY - newXY * newYX; if(newZX * newZX + newZY * newZY + newZZ * newZZ > 1e-6) { var l2 = newZX * newZX + newZY * newZY + newZZ * newZZ; if(l2 > 0) { l2 = 1 / Math.sqrt(l2); } newZX *= l2; newZY *= l2; newZZ *= l2; } else { var x12 = newXX; var y12 = newXY; var z12 = newXZ; var x24 = x12 * x12; var y24 = y12 * y12; var z24 = z12 * z12; var d5; if(x24 < y24) { if(x24 < z24) { d5 = 1 / Math.sqrt(y24 + z24); newZX = 0; newZY = z12 * d5; newZZ = -y12 * d5; } else { d5 = 1 / Math.sqrt(x24 + y24); newZX = y12 * d5; newZY = -x12 * d5; newZZ = 0; } } else if(y24 < z24) { d5 = 1 / Math.sqrt(z24 + x24); newZX = -z12 * d5; newZY = 0; newZZ = x12 * d5; } else { d5 = 1 / Math.sqrt(x24 + y24); newZX = y12 * d5; newZY = -x12 * d5; newZZ = 0; } } newYX = newZY * newXZ - newZZ * newXY; newYY = newZZ * newXX - newZX * newXZ; newYZ = newZX * newXY - newZY * newXX; _this.xX = newXX; _this.xY = newXY; _this.xZ = newXZ; _this.yX = newYX; _this.yY = newYY; _this.yZ = newYZ; _this.zX = newZX; _this.zY = newZY; _this.zZ = newZZ; var rot1; var rot100; var rot101; var rot102; var rot110; var rot111; var rot112; var rot120; var rot121; var rot122; var rot2; var rot200; var rot201; var rot202; var rot210; var rot211; var rot212; var rot220; var rot221; var rot222; rot100 = this._basisX1X; rot101 = this._basisY1X; rot102 = this._basisZ1X; rot110 = this._basisX1Y; rot111 = this._basisY1Y; rot112 = this._basisZ1Y; rot120 = this._basisX1Z; rot121 = this._basisY1Z; rot122 = this._basisZ1Z; rot200 = this._basisX2X; rot201 = this._basisY2X; rot202 = this._basisZ2X; rot210 = this._basisX2Y; rot211 = this._basisY2Y; rot212 = this._basisZ2Y; rot220 = this._basisX2Z; rot221 = this._basisY2Z; rot222 = this._basisZ2Z; var relRot; var relRot00; var relRot01; var relRot02; var relRot10; var relRot11; var relRot12; var relRot20; var relRot21; var relRot22; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = rot200 * rot100 + rot201 * rot101 + rot202 * rot102; __tmp__01 = rot200 * rot110 + rot201 * rot111 + rot202 * rot112; __tmp__02 = rot200 * rot120 + rot201 * rot121 + rot202 * rot122; __tmp__10 = rot210 * rot100 + rot211 * rot101 + rot212 * rot102; __tmp__11 = rot210 * rot110 + rot211 * rot111 + rot212 * rot112; __tmp__12 = rot210 * rot120 + rot211 * rot121 + rot212 * rot122; __tmp__20 = rot220 * rot100 + rot221 * rot101 + rot222 * rot102; __tmp__21 = rot220 * rot110 + rot221 * rot111 + rot222 * rot112; __tmp__22 = rot220 * rot120 + rot221 * rot121 + rot222 * rot122; relRot00 = __tmp__00; relRot01 = __tmp__01; relRot02 = __tmp__02; relRot10 = __tmp__10; relRot11 = __tmp__11; relRot12 = __tmp__12; relRot20 = __tmp__20; relRot21 = __tmp__21; relRot22 = __tmp__22; var relQ; var relQX; var relQY; var relQZ; var relQW; var e00 = relRot00; var e11 = relRot11; var e22 = relRot22; var t = e00 + e11 + e22; var s; if(t > 0) { s = Math.sqrt(t + 1); relQW = 0.5 * s; s = 0.5 / s; relQX = (relRot21 - relRot12) * s; relQY = (relRot02 - relRot20) * s; relQZ = (relRot10 - relRot01) * s; } else if(e00 > e11) { if(e00 > e22) { s = Math.sqrt(e00 - e11 - e22 + 1); relQX = 0.5 * s; s = 0.5 / s; relQY = (relRot01 + relRot10) * s; relQZ = (relRot02 + relRot20) * s; relQW = (relRot21 - relRot12) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); relQZ = 0.5 * s; s = 0.5 / s; relQX = (relRot02 + relRot20) * s; relQY = (relRot12 + relRot21) * s; relQW = (relRot10 - relRot01) * s; } } else if(e11 > e22) { s = Math.sqrt(e11 - e22 - e00 + 1); relQY = 0.5 * s; s = 0.5 / s; relQX = (relRot01 + relRot10) * s; relQZ = (relRot12 + relRot21) * s; relQW = (relRot02 - relRot20) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); relQZ = 0.5 * s; s = 0.5 / s; relQX = (relRot02 + relRot20) * s; relQY = (relRot12 + relRot21) * s; relQW = (relRot10 - relRot01) * s; } var cosHalfTheta = relQW; var theta1 = (cosHalfTheta <= -1 ? 3.14159265358979 : cosHalfTheta >= 1 ? 0 : Math.acos(cosHalfTheta)) * 2; this.angularErrorX = relQX; this.angularErrorY = relQY; this.angularErrorZ = relQZ; var l3 = this.angularErrorX * this.angularErrorX + this.angularErrorY * this.angularErrorY + this.angularErrorZ * this.angularErrorZ; if(l3 > 0) { l3 = 1 / Math.sqrt(l3); } this.angularErrorX *= l3; this.angularErrorY *= l3; this.angularErrorZ *= l3; this.angularErrorX *= theta1; this.angularErrorY *= theta1; this.angularErrorZ *= theta1; var anchorDiff; var anchorDiffX; var anchorDiffY; var anchorDiffZ; anchorDiffX = this._anchor2X - this._anchor1X; anchorDiffY = this._anchor2Y - this._anchor1Y; anchorDiffZ = this._anchor2Z - this._anchor1Z; this.translation = anchorDiffX * this._basis.xX + anchorDiffY * this._basis.xY + anchorDiffZ * this._basis.xZ; this.linearErrorY = anchorDiffX * this._basis.yX + anchorDiffY * this._basis.yY + anchorDiffZ * this._basis.yZ; this.linearErrorZ = anchorDiffX * this._basis.zX + anchorDiffY * this._basis.zY + anchorDiffZ * this._basis.zZ; } _getVelocitySolverInfo(timeStep,info) { super._getVelocitySolverInfo(timeStep,info); this.getInfo(info,timeStep,false); } _getPositionSolverInfo(info) { super._getPositionSolverInfo(info); this.getInfo(info,null,true); } getAxis1() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._basisX1X; v1.y = this._basisX1Y; v1.z = this._basisX1Z; return v; } getAxis2() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._basisX2X; v1.y = this._basisX2Y; v1.z = this._basisX2Z; return v; } getAxis1To(axis) { var v = axis; v.x = this._basisX1X; v.y = this._basisX1Y; v.z = this._basisX1Z; } getAxis2To(axis) { var v = axis; v.x = this._basisX2X; v.y = this._basisX2Y; v.z = this._basisX2Z; } getLocalAxis1() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._localBasisX1X; v1.y = this._localBasisX1Y; v1.z = this._localBasisX1Z; return v; } getLocalAxis2() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._localBasisX2X; v1.y = this._localBasisX2Y; v1.z = this._localBasisX2Z; return v; } getLocalAxis1To(axis) { var v = axis; v.x = this._localBasisX1X; v.y = this._localBasisX1Y; v.z = this._localBasisX1Z; } getLocalAxis2To(axis) { var v = axis; v.x = this._localBasisX2X; v.y = this._localBasisX2Y; v.z = this._localBasisX2Z; } getSpringDamper() { return this._sd; } getLimitMotor() { return this._lm; } getTranslation() { return this.translation; } } oimo.dynamics.constraint.joint.PrismaticJointConfig = class oimo_dynamics_constraint_joint_PrismaticJointConfig extends oimo.dynamics.constraint.joint.JointConfig { constructor() { super(); this.localAxis1 = new oimo.common.Vec3(1,0,0); this.localAxis2 = new oimo.common.Vec3(1,0,0); this.limitMotor = new oimo.dynamics.constraint.joint.TranslationalLimitMotor(); this.springDamper = new oimo.dynamics.constraint.joint.SpringDamper(); } init(rigidBody1,rigidBody2,worldAnchor,worldAxis) { this._init(rigidBody1,rigidBody2,worldAnchor); var v; var vX; var vY; var vZ; var v1 = worldAxis; vX = v1.x; vY = v1.y; vZ = v1.z; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = rigidBody1._transform._rotation00 * vX + rigidBody1._transform._rotation10 * vY + rigidBody1._transform._rotation20 * vZ; __tmp__Y = rigidBody1._transform._rotation01 * vX + rigidBody1._transform._rotation11 * vY + rigidBody1._transform._rotation21 * vZ; __tmp__Z = rigidBody1._transform._rotation02 * vX + rigidBody1._transform._rotation12 * vY + rigidBody1._transform._rotation22 * vZ; vX = __tmp__X; vY = __tmp__Y; vZ = __tmp__Z; var v2 = this.localAxis1; v2.x = vX; v2.y = vY; v2.z = vZ; var v3; var vX1; var vY1; var vZ1; var v4 = worldAxis; vX1 = v4.x; vY1 = v4.y; vZ1 = v4.z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = rigidBody2._transform._rotation00 * vX1 + rigidBody2._transform._rotation10 * vY1 + rigidBody2._transform._rotation20 * vZ1; __tmp__Y1 = rigidBody2._transform._rotation01 * vX1 + rigidBody2._transform._rotation11 * vY1 + rigidBody2._transform._rotation21 * vZ1; __tmp__Z1 = rigidBody2._transform._rotation02 * vX1 + rigidBody2._transform._rotation12 * vY1 + rigidBody2._transform._rotation22 * vZ1; vX1 = __tmp__X1; vY1 = __tmp__Y1; vZ1 = __tmp__Z1; var v5 = this.localAxis2; v5.x = vX1; v5.y = vY1; v5.z = vZ1; return this; } } oimo.dynamics.constraint.joint.RagdollJoint = class oimo_dynamics_constraint_joint_RagdollJoint extends oimo.dynamics.constraint.joint.Joint { constructor(config) { super(config,oimo.dynamics.constraint.joint.JointType.RAGDOLL); var v = config.localTwistAxis1; this._localBasisX1X = v.x; this._localBasisX1Y = v.y; this._localBasisX1Z = v.z; var v1 = config.localSwingAxis1; this._localBasisY1X = v1.x; this._localBasisY1Y = v1.y; this._localBasisY1Z = v1.z; var v2 = config.localTwistAxis2; this._localBasisX2X = v2.x; this._localBasisX2Y = v2.y; this._localBasisX2Z = v2.z; this.buildLocalBasesFromXY1X2(); this._twistSd = config.twistSpringDamper.clone(); this._twistLm = config.twistLimitMotor.clone(); this._swingSd = config.swingSpringDamper.clone(); this._maxSwingAngle1 = config.maxSwingAngle1; this._maxSwingAngle2 = config.maxSwingAngle2; if(this._maxSwingAngle1 < oimo.common.Setting.minRagdollMaxSwingAngle) { this._maxSwingAngle1 = oimo.common.Setting.minRagdollMaxSwingAngle; } if(this._maxSwingAngle2 < oimo.common.Setting.minRagdollMaxSwingAngle) { this._maxSwingAngle2 = oimo.common.Setting.minRagdollMaxSwingAngle; } this.dummySwingLm = new oimo.dynamics.constraint.joint.RotationalLimitMotor(); this.dummySwingLm.lowerLimit = -1; this.dummySwingLm.upperLimit = 0; this._swingAngle = 0; this._twistAngle = 0; this.swingError = 0; this.swingAxisX = 0; this.swingAxisY = 0; this.swingAxisZ = 0; this.twistAxisX = 0; this.twistAxisY = 0; this.twistAxisZ = 0; } getInfo(info,timeStep,isPositionPart) { var erp = this.getErp(timeStep,isPositionPart); var linearRhs; var linearRhsX; var linearRhsY; var linearRhsZ; linearRhsX = this.linearErrorX * erp; linearRhsY = this.linearErrorY * erp; linearRhsZ = this.linearErrorZ * erp; var linRhsX = linearRhsX; var linRhsY = linearRhsY; var linRhsZ = linearRhsZ; var crossR1; var crossR100; var crossR101; var crossR102; var crossR110; var crossR111; var crossR112; var crossR120; var crossR121; var crossR122; var crossR2; var crossR200; var crossR201; var crossR202; var crossR210; var crossR211; var crossR212; var crossR220; var crossR221; var crossR222; crossR100 = 0; crossR101 = -this._relativeAnchor1Z; crossR102 = this._relativeAnchor1Y; crossR110 = this._relativeAnchor1Z; crossR111 = 0; crossR112 = -this._relativeAnchor1X; crossR120 = -this._relativeAnchor1Y; crossR121 = this._relativeAnchor1X; crossR122 = 0; crossR200 = 0; crossR201 = -this._relativeAnchor2Z; crossR202 = this._relativeAnchor2Y; crossR210 = this._relativeAnchor2Z; crossR211 = 0; crossR212 = -this._relativeAnchor2X; crossR220 = -this._relativeAnchor2Y; crossR221 = this._relativeAnchor2X; crossR222 = 0; crossR100 = -crossR100; crossR101 = -crossR101; crossR102 = -crossR102; crossR110 = -crossR110; crossR111 = -crossR111; crossR112 = -crossR112; crossR120 = -crossR120; crossR121 = -crossR121; crossR122 = -crossR122; crossR200 = -crossR200; crossR201 = -crossR201; crossR202 = -crossR202; crossR210 = -crossR210; crossR211 = -crossR211; crossR212 = -crossR212; crossR220 = -crossR220; crossR221 = -crossR221; crossR222 = -crossR222; var swingMass = this.computeEffectiveInertiaMoment(this.swingAxisX,this.swingAxisY,this.swingAxisZ); var twistMass = this.computeEffectiveInertiaMoment(this._basisX2X,this._basisX2Y,this._basisX2Z); var impulse = this._impulses[0]; var row = info.rows[info.numRows++]; var _this = row.jacobian; _this.lin1X = 0; _this.lin1Y = 0; _this.lin1Z = 0; _this.lin2X = 0; _this.lin2Y = 0; _this.lin2Z = 0; _this.ang1X = 0; _this.ang1Y = 0; _this.ang1Z = 0; _this.ang2X = 0; _this.ang2Y = 0; _this.ang2Z = 0; row.rhs = 0; row.cfm = 0; row.minImpulse = 0; row.maxImpulse = 0; row.motorSpeed = 0; row.motorMaxImpulse = 0; row.impulse = null; row.impulse = impulse; var row1 = row; row1.rhs = linRhsX; row1.cfm = 0; row1.minImpulse = -1e65536; row1.maxImpulse = 1e65536; var j = row1.jacobian; j.lin1X = 1; j.lin1Y = 0; j.lin1Z = 0; j.lin2X = 1; j.lin2Y = 0; j.lin2Z = 0; j.ang1X = crossR100; j.ang1Y = crossR101; j.ang1Z = crossR102; j.ang2X = crossR200; j.ang2Y = crossR201; j.ang2Z = crossR202; var impulse1 = this._impulses[1]; var row2 = info.rows[info.numRows++]; var _this1 = row2.jacobian; _this1.lin1X = 0; _this1.lin1Y = 0; _this1.lin1Z = 0; _this1.lin2X = 0; _this1.lin2Y = 0; _this1.lin2Z = 0; _this1.ang1X = 0; _this1.ang1Y = 0; _this1.ang1Z = 0; _this1.ang2X = 0; _this1.ang2Y = 0; _this1.ang2Z = 0; row2.rhs = 0; row2.cfm = 0; row2.minImpulse = 0; row2.maxImpulse = 0; row2.motorSpeed = 0; row2.motorMaxImpulse = 0; row2.impulse = null; row2.impulse = impulse1; row1 = row2; row1.rhs = linRhsY; row1.cfm = 0; row1.minImpulse = -1e65536; row1.maxImpulse = 1e65536; j = row1.jacobian; j.lin1X = 0; j.lin1Y = 1; j.lin1Z = 0; j.lin2X = 0; j.lin2Y = 1; j.lin2Z = 0; j.ang1X = crossR110; j.ang1Y = crossR111; j.ang1Z = crossR112; j.ang2X = crossR210; j.ang2Y = crossR211; j.ang2Z = crossR212; var impulse2 = this._impulses[2]; var row3 = info.rows[info.numRows++]; var _this2 = row3.jacobian; _this2.lin1X = 0; _this2.lin1Y = 0; _this2.lin1Z = 0; _this2.lin2X = 0; _this2.lin2Y = 0; _this2.lin2Z = 0; _this2.ang1X = 0; _this2.ang1Y = 0; _this2.ang1Z = 0; _this2.ang2X = 0; _this2.ang2Y = 0; _this2.ang2Z = 0; row3.rhs = 0; row3.cfm = 0; row3.minImpulse = 0; row3.maxImpulse = 0; row3.motorSpeed = 0; row3.motorMaxImpulse = 0; row3.impulse = null; row3.impulse = impulse2; row1 = row3; row1.rhs = linRhsZ; row1.cfm = 0; row1.minImpulse = -1e65536; row1.maxImpulse = 1e65536; j = row1.jacobian; j.lin1X = 0; j.lin1Y = 0; j.lin1Z = 1; j.lin2X = 0; j.lin2Y = 0; j.lin2Z = 1; j.ang1X = crossR120; j.ang1Y = crossR121; j.ang1Z = crossR122; j.ang2X = crossR220; j.ang2Y = crossR221; j.ang2Z = crossR222; if(this.swingError > 0 && (this._swingSd.frequency <= 0 || !isPositionPart)) { var impulse3 = this._impulses[3]; var row4 = info.rows[info.numRows++]; var _this3 = row4.jacobian; _this3.lin1X = 0; _this3.lin1Y = 0; _this3.lin1Z = 0; _this3.lin2X = 0; _this3.lin2Y = 0; _this3.lin2Z = 0; _this3.ang1X = 0; _this3.ang1Y = 0; _this3.ang1Z = 0; _this3.ang2X = 0; _this3.ang2Y = 0; _this3.ang2Z = 0; row4.rhs = 0; row4.cfm = 0; row4.minImpulse = 0; row4.maxImpulse = 0; row4.motorSpeed = 0; row4.motorMaxImpulse = 0; row4.impulse = null; row4.impulse = impulse3; row1 = row4; this.setSolverInfoRowAngular(row1,this.swingError,this.dummySwingLm,swingMass,this._swingSd,timeStep,isPositionPart); j = row1.jacobian; j.ang1X = this.swingAxisX; j.ang1Y = this.swingAxisY; j.ang1Z = this.swingAxisZ; j.ang2X = this.swingAxisX; j.ang2Y = this.swingAxisY; j.ang2Z = this.swingAxisZ; } if(this._twistSd.frequency <= 0 || !isPositionPart) { var impulse4 = this._impulses[4]; var row5 = info.rows[info.numRows++]; var _this4 = row5.jacobian; _this4.lin1X = 0; _this4.lin1Y = 0; _this4.lin1Z = 0; _this4.lin2X = 0; _this4.lin2Y = 0; _this4.lin2Z = 0; _this4.ang1X = 0; _this4.ang1Y = 0; _this4.ang1Z = 0; _this4.ang2X = 0; _this4.ang2Y = 0; _this4.ang2Z = 0; row5.rhs = 0; row5.cfm = 0; row5.minImpulse = 0; row5.maxImpulse = 0; row5.motorSpeed = 0; row5.motorMaxImpulse = 0; row5.impulse = null; row5.impulse = impulse4; row1 = row5; this.setSolverInfoRowAngular(row1,this._twistAngle,this._twistLm,twistMass,this._twistSd,timeStep,isPositionPart); j = row1.jacobian; j.ang1X = this.twistAxisX; j.ang1Y = this.twistAxisY; j.ang1Z = this.twistAxisZ; j.ang2X = this.twistAxisX; j.ang2Y = this.twistAxisY; j.ang2Z = this.twistAxisZ; } } _syncAnchors() { super._syncAnchors(); var tf1 = this._b1._transform; var tf2 = this._b2._transform; var axis1; var axis1X; var axis1Y; var axis1Z; var axis2; var axis2X; var axis2Y; var axis2Z; axis1X = this._basisX1X; axis1Y = this._basisX1Y; axis1Z = this._basisX1Z; axis2X = this._basisX2X; axis2Y = this._basisX2Y; axis2Z = this._basisX2Z; var basis1Mat; var basis1Mat00; var basis1Mat01; var basis1Mat02; var basis1Mat10; var basis1Mat11; var basis1Mat12; var basis1Mat20; var basis1Mat21; var basis1Mat22; var basis2Mat; var basis2Mat00; var basis2Mat01; var basis2Mat02; var basis2Mat10; var basis2Mat11; var basis2Mat12; var basis2Mat20; var basis2Mat21; var basis2Mat22; basis1Mat00 = this._basisX1X; basis1Mat01 = this._basisY1X; basis1Mat02 = this._basisZ1X; basis1Mat10 = this._basisX1Y; basis1Mat11 = this._basisY1Y; basis1Mat12 = this._basisZ1Y; basis1Mat20 = this._basisX1Z; basis1Mat21 = this._basisY1Z; basis1Mat22 = this._basisZ1Z; basis2Mat00 = this._basisX2X; basis2Mat01 = this._basisY2X; basis2Mat02 = this._basisZ2X; basis2Mat10 = this._basisX2Y; basis2Mat11 = this._basisY2Y; basis2Mat12 = this._basisZ2Y; basis2Mat20 = this._basisX2Z; basis2Mat21 = this._basisY2Z; basis2Mat22 = this._basisZ2Z; var swingQ; var swingQX; var swingQY; var swingQZ; var swingQW; var swingM; var swingM00; var swingM01; var swingM02; var swingM10; var swingM11; var swingM12; var swingM20; var swingM21; var swingM22; var swingV; var swingVX; var swingVY; var swingVZ; var d = axis1X * axis2X + axis1Y * axis2Y + axis1Z * axis2Z; if(d < -0.999999999) { var vX; var vY; var vZ; var x1 = axis1X; var y1 = axis1Y; var z1 = axis1Z; var x2 = x1 * x1; var y2 = y1 * y1; var z2 = z1 * z1; var d1; if(x2 < y2) { if(x2 < z2) { d1 = 1 / Math.sqrt(y2 + z2); vX = 0; vY = z1 * d1; vZ = -y1 * d1; } else { d1 = 1 / Math.sqrt(x2 + y2); vX = y1 * d1; vY = -x1 * d1; vZ = 0; } } else if(y2 < z2) { d1 = 1 / Math.sqrt(z2 + x2); vX = -z1 * d1; vY = 0; vZ = x1 * d1; } else { d1 = 1 / Math.sqrt(x2 + y2); vX = y1 * d1; vY = -x1 * d1; vZ = 0; } swingQX = vX; swingQY = vY; swingQZ = vZ; swingQW = 0; } else { var cX; var cY; var cZ; cX = axis1Y * axis2Z - axis1Z * axis2Y; cY = axis1Z * axis2X - axis1X * axis2Z; cZ = axis1X * axis2Y - axis1Y * axis2X; var w = Math.sqrt((1 + d) * 0.5); d = 0.5 / w; cX *= d; cY *= d; cZ *= d; swingQX = cX; swingQY = cY; swingQZ = cZ; swingQW = w; } var x = swingQX; var y = swingQY; var z = swingQZ; var w1 = swingQW; var x21 = 2 * x; var y21 = 2 * y; var z21 = 2 * z; var xx = x * x21; var yy = y * y21; var zz = z * z21; var xy = x * y21; var yz = y * z21; var xz = x * z21; var wx = w1 * x21; var wy = w1 * y21; var wz = w1 * z21; swingM00 = 1 - yy - zz; swingM01 = xy - wz; swingM02 = xz + wy; swingM10 = xy + wz; swingM11 = 1 - xx - zz; swingM12 = yz - wx; swingM20 = xz - wy; swingM21 = yz + wx; swingM22 = 1 - xx - yy; this._swingAngle = (swingQW <= -1 ? 3.14159265358979 : swingQW >= 1 ? 0 : Math.acos(swingQW)) * 2; swingVX = swingQX; swingVY = swingQY; swingVZ = swingQZ; var basisY2In1; var basisY2In1X; var basisY2In1Y; var basisY2In1Z; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = swingM00 * this._basisY2X + swingM10 * this._basisY2Y + swingM20 * this._basisY2Z; __tmp__Y = swingM01 * this._basisY2X + swingM11 * this._basisY2Y + swingM21 * this._basisY2Z; __tmp__Z = swingM02 * this._basisY2X + swingM12 * this._basisY2Y + swingM22 * this._basisY2Z; basisY2In1X = __tmp__X; basisY2In1Y = __tmp__Y; basisY2In1Z = __tmp__Z; var yCoord = this._basisY1X * basisY2In1X + this._basisY1Y * basisY2In1Y + this._basisY1Z * basisY2In1Z; var zCoord = this._basisZ1X * basisY2In1X + this._basisZ1Y * basisY2In1Y + this._basisZ1Z * basisY2In1Z; this._twistAngle = Math.atan2(zCoord,yCoord); this.twistAxisX = this._basisX1X + this._basisX2X; this.twistAxisY = this._basisX1Y + this._basisX2Y; this.twistAxisZ = this._basisX1Z + this._basisX2Z; var l = this.twistAxisX * this.twistAxisX + this.twistAxisY * this.twistAxisY + this.twistAxisZ * this.twistAxisZ; if(l > 0) { l = 1 / Math.sqrt(l); } this.twistAxisX *= l; this.twistAxisY *= l; this.twistAxisZ *= l; var invLen = Math.sqrt(swingVX * swingVX + swingVY * swingVY + swingVZ * swingVZ); if(invLen > 0) { invLen = 1 / invLen; } swingVX *= invLen * this._swingAngle; swingVY *= invLen * this._swingAngle; swingVZ *= invLen * this._swingAngle; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = basis1Mat00 * swingVX + basis1Mat10 * swingVY + basis1Mat20 * swingVZ; __tmp__Y1 = basis1Mat01 * swingVX + basis1Mat11 * swingVY + basis1Mat21 * swingVZ; __tmp__Z1 = basis1Mat02 * swingVX + basis1Mat12 * swingVY + basis1Mat22 * swingVZ; swingVX = __tmp__X1; swingVY = __tmp__Y1; swingVZ = __tmp__Z1; var x3 = swingVY; var y3 = swingVZ; var a = this._maxSwingAngle1; var b = this._maxSwingAngle2; var invA2 = 1 / (a * a); var invB2 = 1 / (b * b); var w2 = x3 * x3 * invA2 + y3 * y3 * invB2; if(w2 == 0) { this.swingAxisX = 0; this.swingAxisY = 0; this.swingAxisZ = 0; this.swingError = 0; } else { var t = Math.sqrt(1 / w2); var x0 = x3 * t; var y0 = y3 * t; var nx = x0 * invA2; var ny = y0 * invB2; invLen = 1 / Math.sqrt(nx * nx + ny * ny); nx *= invLen; ny *= invLen; var depth = (x3 - x0) * nx + (y3 - y0) * ny; if(depth > 0) { this.swingError = depth; this.swingAxisX = 0; this.swingAxisY = nx; this.swingAxisZ = ny; var __tmp__X2; var __tmp__Y2; var __tmp__Z2; __tmp__X2 = basis1Mat00 * this.swingAxisX + basis1Mat01 * this.swingAxisY + basis1Mat02 * this.swingAxisZ; __tmp__Y2 = basis1Mat10 * this.swingAxisX + basis1Mat11 * this.swingAxisY + basis1Mat12 * this.swingAxisZ; __tmp__Z2 = basis1Mat20 * this.swingAxisX + basis1Mat21 * this.swingAxisY + basis1Mat22 * this.swingAxisZ; this.swingAxisX = __tmp__X2; this.swingAxisY = __tmp__Y2; this.swingAxisZ = __tmp__Z2; var __tmp__X3; var __tmp__Y3; var __tmp__Z3; __tmp__X3 = swingM00 * this.swingAxisX + swingM01 * this.swingAxisY + swingM02 * this.swingAxisZ; __tmp__Y3 = swingM10 * this.swingAxisX + swingM11 * this.swingAxisY + swingM12 * this.swingAxisZ; __tmp__Z3 = swingM20 * this.swingAxisX + swingM21 * this.swingAxisY + swingM22 * this.swingAxisZ; this.swingAxisX = __tmp__X3; this.swingAxisY = __tmp__Y3; this.swingAxisZ = __tmp__Z3; } else { this.swingError = 0; } } this.linearErrorX = this._anchor2X - this._anchor1X; this.linearErrorY = this._anchor2Y - this._anchor1Y; this.linearErrorZ = this._anchor2Z - this._anchor1Z; } _getVelocitySolverInfo(timeStep,info) { super._getVelocitySolverInfo(timeStep,info); this.getInfo(info,timeStep,false); } _getPositionSolverInfo(info) { super._getPositionSolverInfo(info); this.getInfo(info,null,true); } getAxis1() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._basisX1X; v1.y = this._basisX1Y; v1.z = this._basisX1Z; return v; } getAxis2() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._basisX2X; v1.y = this._basisX2Y; v1.z = this._basisX2Z; return v; } getAxis1To(axis) { var v = axis; v.x = this._basisX1X; v.y = this._basisX1Y; v.z = this._basisX1Z; } getAxis2To(axis) { var v = axis; v.x = this._basisX2X; v.y = this._basisX2Y; v.z = this._basisX2Z; } getLocalAxis1() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._localBasisX1X; v1.y = this._localBasisX1Y; v1.z = this._localBasisX1Z; return v; } getLocalAxis2() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._localBasisX2X; v1.y = this._localBasisX2Y; v1.z = this._localBasisX2Z; return v; } getLocalAxis1To(axis) { var v = axis; v.x = this._localBasisX1X; v.y = this._localBasisX1Y; v.z = this._localBasisX1Z; } getLocalAxis2To(axis) { var v = axis; v.x = this._localBasisX2X; v.y = this._localBasisX2Y; v.z = this._localBasisX2Z; } getTwistSpringDamper() { return this._twistSd; } getTwistLimitMotor() { return this._twistLm; } getSwingSpringDamper() { return this._swingSd; } getSwingAxis() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this.swingAxisX; v1.y = this.swingAxisY; v1.z = this.swingAxisZ; return v; } getSwingAxisTo(axis) { var v = axis; v.x = this.swingAxisX; v.y = this.swingAxisY; v.z = this.swingAxisZ; } getSwingAngle() { return this._swingAngle; } getTwistAngle() { return this._twistAngle; } } oimo.dynamics.constraint.joint.RagdollJointConfig = class oimo_dynamics_constraint_joint_RagdollJointConfig extends oimo.dynamics.constraint.joint.JointConfig { constructor() { super(); this.localTwistAxis1 = new oimo.common.Vec3(1,0,0); this.localTwistAxis2 = new oimo.common.Vec3(1,0,0); this.localSwingAxis1 = new oimo.common.Vec3(0,1,0); this.twistSpringDamper = new oimo.dynamics.constraint.joint.SpringDamper(); this.swingSpringDamper = new oimo.dynamics.constraint.joint.SpringDamper(); this.twistLimitMotor = new oimo.dynamics.constraint.joint.RotationalLimitMotor(); this.maxSwingAngle1 = 3.14159265358979; this.maxSwingAngle2 = 3.14159265358979; } init(rigidBody1,rigidBody2,worldAnchor,worldTwistAxis,worldSwingAxis) { this._init(rigidBody1,rigidBody2,worldAnchor); var v; var vX; var vY; var vZ; var v1 = worldTwistAxis; vX = v1.x; vY = v1.y; vZ = v1.z; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = rigidBody1._transform._rotation00 * vX + rigidBody1._transform._rotation10 * vY + rigidBody1._transform._rotation20 * vZ; __tmp__Y = rigidBody1._transform._rotation01 * vX + rigidBody1._transform._rotation11 * vY + rigidBody1._transform._rotation21 * vZ; __tmp__Z = rigidBody1._transform._rotation02 * vX + rigidBody1._transform._rotation12 * vY + rigidBody1._transform._rotation22 * vZ; vX = __tmp__X; vY = __tmp__Y; vZ = __tmp__Z; var v2 = this.localTwistAxis1; v2.x = vX; v2.y = vY; v2.z = vZ; var v3; var vX1; var vY1; var vZ1; var v4 = worldTwistAxis; vX1 = v4.x; vY1 = v4.y; vZ1 = v4.z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = rigidBody2._transform._rotation00 * vX1 + rigidBody2._transform._rotation10 * vY1 + rigidBody2._transform._rotation20 * vZ1; __tmp__Y1 = rigidBody2._transform._rotation01 * vX1 + rigidBody2._transform._rotation11 * vY1 + rigidBody2._transform._rotation21 * vZ1; __tmp__Z1 = rigidBody2._transform._rotation02 * vX1 + rigidBody2._transform._rotation12 * vY1 + rigidBody2._transform._rotation22 * vZ1; vX1 = __tmp__X1; vY1 = __tmp__Y1; vZ1 = __tmp__Z1; var v5 = this.localTwistAxis2; v5.x = vX1; v5.y = vY1; v5.z = vZ1; var v6; var vX2; var vY2; var vZ2; var v7 = worldSwingAxis; vX2 = v7.x; vY2 = v7.y; vZ2 = v7.z; var __tmp__X2; var __tmp__Y2; var __tmp__Z2; __tmp__X2 = rigidBody1._transform._rotation00 * vX2 + rigidBody1._transform._rotation10 * vY2 + rigidBody1._transform._rotation20 * vZ2; __tmp__Y2 = rigidBody1._transform._rotation01 * vX2 + rigidBody1._transform._rotation11 * vY2 + rigidBody1._transform._rotation21 * vZ2; __tmp__Z2 = rigidBody1._transform._rotation02 * vX2 + rigidBody1._transform._rotation12 * vY2 + rigidBody1._transform._rotation22 * vZ2; vX2 = __tmp__X2; vY2 = __tmp__Y2; vZ2 = __tmp__Z2; var v8 = this.localSwingAxis1; v8.x = vX2; v8.y = vY2; v8.z = vZ2; return this; } } oimo.dynamics.constraint.joint.RevoluteJoint = class oimo_dynamics_constraint_joint_RevoluteJoint extends oimo.dynamics.constraint.joint.Joint { constructor(config) { super(config,1); var v = config.localAxis1; this._localBasisX1X = v.x; this._localBasisX1Y = v.y; this._localBasisX1Z = v.z; var v1 = config.localAxis2; this._localBasisX2X = v1.x; this._localBasisX2Y = v1.y; this._localBasisX2Z = v1.z; this.buildLocalBasesFromX(); this.angle = 0; this.angularErrorY = 0; this.angularErrorZ = 0; this._basis = new oimo.dynamics.constraint.joint.BasisTracker(this); this._sd = config.springDamper.clone(); this._lm = config.limitMotor.clone(); } getInfo(info,timeStep,isPositionPart) { var erp = this.getErp(timeStep,isPositionPart); var linearRhs; var linearRhsX; var linearRhsY; var linearRhsZ; linearRhsX = this.linearErrorX * erp; linearRhsY = this.linearErrorY * erp; linearRhsZ = this.linearErrorZ * erp; var linRhsX = linearRhsX; var linRhsY = linearRhsY; var linRhsZ = linearRhsZ; var angRhsY = this.angularErrorY * erp; var angRhsZ = this.angularErrorZ * erp; var crossR1; var crossR100; var crossR101; var crossR102; var crossR110; var crossR111; var crossR112; var crossR120; var crossR121; var crossR122; var crossR2; var crossR200; var crossR201; var crossR202; var crossR210; var crossR211; var crossR212; var crossR220; var crossR221; var crossR222; crossR100 = 0; crossR101 = -this._relativeAnchor1Z; crossR102 = this._relativeAnchor1Y; crossR110 = this._relativeAnchor1Z; crossR111 = 0; crossR112 = -this._relativeAnchor1X; crossR120 = -this._relativeAnchor1Y; crossR121 = this._relativeAnchor1X; crossR122 = 0; crossR200 = 0; crossR201 = -this._relativeAnchor2Z; crossR202 = this._relativeAnchor2Y; crossR210 = this._relativeAnchor2Z; crossR211 = 0; crossR212 = -this._relativeAnchor2X; crossR220 = -this._relativeAnchor2Y; crossR221 = this._relativeAnchor2X; crossR222 = 0; crossR100 = -crossR100; crossR101 = -crossR101; crossR102 = -crossR102; crossR110 = -crossR110; crossR111 = -crossR111; crossR112 = -crossR112; crossR120 = -crossR120; crossR121 = -crossR121; crossR122 = -crossR122; crossR200 = -crossR200; crossR201 = -crossR201; crossR202 = -crossR202; crossR210 = -crossR210; crossR211 = -crossR211; crossR212 = -crossR212; crossR220 = -crossR220; crossR221 = -crossR221; crossR222 = -crossR222; var motorMass = this.computeEffectiveInertiaMoment(this._basis.xX,this._basis.xY,this._basis.xZ); var impulse = this._impulses[0]; var row = info.rows[info.numRows++]; var _this = row.jacobian; _this.lin1X = 0; _this.lin1Y = 0; _this.lin1Z = 0; _this.lin2X = 0; _this.lin2Y = 0; _this.lin2Z = 0; _this.ang1X = 0; _this.ang1Y = 0; _this.ang1Z = 0; _this.ang2X = 0; _this.ang2Y = 0; _this.ang2Z = 0; row.rhs = 0; row.cfm = 0; row.minImpulse = 0; row.maxImpulse = 0; row.motorSpeed = 0; row.motorMaxImpulse = 0; row.impulse = null; row.impulse = impulse; var row1 = row; row1.rhs = linRhsX; row1.cfm = 0; row1.minImpulse = -1e65536; row1.maxImpulse = 1e65536; var j = row1.jacobian; j.lin1X = 1; j.lin1Y = 0; j.lin1Z = 0; j.lin2X = 1; j.lin2Y = 0; j.lin2Z = 0; j.ang1X = crossR100; j.ang1Y = crossR101; j.ang1Z = crossR102; j.ang2X = crossR200; j.ang2Y = crossR201; j.ang2Z = crossR202; var impulse1 = this._impulses[1]; var row2 = info.rows[info.numRows++]; var _this1 = row2.jacobian; _this1.lin1X = 0; _this1.lin1Y = 0; _this1.lin1Z = 0; _this1.lin2X = 0; _this1.lin2Y = 0; _this1.lin2Z = 0; _this1.ang1X = 0; _this1.ang1Y = 0; _this1.ang1Z = 0; _this1.ang2X = 0; _this1.ang2Y = 0; _this1.ang2Z = 0; row2.rhs = 0; row2.cfm = 0; row2.minImpulse = 0; row2.maxImpulse = 0; row2.motorSpeed = 0; row2.motorMaxImpulse = 0; row2.impulse = null; row2.impulse = impulse1; row1 = row2; row1.rhs = linRhsY; row1.cfm = 0; row1.minImpulse = -1e65536; row1.maxImpulse = 1e65536; j = row1.jacobian; j.lin1X = 0; j.lin1Y = 1; j.lin1Z = 0; j.lin2X = 0; j.lin2Y = 1; j.lin2Z = 0; j.ang1X = crossR110; j.ang1Y = crossR111; j.ang1Z = crossR112; j.ang2X = crossR210; j.ang2Y = crossR211; j.ang2Z = crossR212; var impulse2 = this._impulses[2]; var row3 = info.rows[info.numRows++]; var _this2 = row3.jacobian; _this2.lin1X = 0; _this2.lin1Y = 0; _this2.lin1Z = 0; _this2.lin2X = 0; _this2.lin2Y = 0; _this2.lin2Z = 0; _this2.ang1X = 0; _this2.ang1Y = 0; _this2.ang1Z = 0; _this2.ang2X = 0; _this2.ang2Y = 0; _this2.ang2Z = 0; row3.rhs = 0; row3.cfm = 0; row3.minImpulse = 0; row3.maxImpulse = 0; row3.motorSpeed = 0; row3.motorMaxImpulse = 0; row3.impulse = null; row3.impulse = impulse2; row1 = row3; row1.rhs = linRhsZ; row1.cfm = 0; row1.minImpulse = -1e65536; row1.maxImpulse = 1e65536; j = row1.jacobian; j.lin1X = 0; j.lin1Y = 0; j.lin1Z = 1; j.lin2X = 0; j.lin2Y = 0; j.lin2Z = 1; j.ang1X = crossR120; j.ang1Y = crossR121; j.ang1Z = crossR122; j.ang2X = crossR220; j.ang2Y = crossR221; j.ang2Z = crossR222; if(this._sd.frequency <= 0 || !isPositionPart) { var impulse3 = this._impulses[3]; var row4 = info.rows[info.numRows++]; var _this3 = row4.jacobian; _this3.lin1X = 0; _this3.lin1Y = 0; _this3.lin1Z = 0; _this3.lin2X = 0; _this3.lin2Y = 0; _this3.lin2Z = 0; _this3.ang1X = 0; _this3.ang1Y = 0; _this3.ang1Z = 0; _this3.ang2X = 0; _this3.ang2Y = 0; _this3.ang2Z = 0; row4.rhs = 0; row4.cfm = 0; row4.minImpulse = 0; row4.maxImpulse = 0; row4.motorSpeed = 0; row4.motorMaxImpulse = 0; row4.impulse = null; row4.impulse = impulse3; row1 = row4; this.setSolverInfoRowAngular(row1,this.angle,this._lm,motorMass,this._sd,timeStep,isPositionPart); j = row1.jacobian; j.ang1X = this._basis.xX; j.ang1Y = this._basis.xY; j.ang1Z = this._basis.xZ; j.ang2X = this._basis.xX; j.ang2Y = this._basis.xY; j.ang2Z = this._basis.xZ; } var impulse4 = this._impulses[4]; var row5 = info.rows[info.numRows++]; var _this4 = row5.jacobian; _this4.lin1X = 0; _this4.lin1Y = 0; _this4.lin1Z = 0; _this4.lin2X = 0; _this4.lin2Y = 0; _this4.lin2Z = 0; _this4.ang1X = 0; _this4.ang1Y = 0; _this4.ang1Z = 0; _this4.ang2X = 0; _this4.ang2Y = 0; _this4.ang2Z = 0; row5.rhs = 0; row5.cfm = 0; row5.minImpulse = 0; row5.maxImpulse = 0; row5.motorSpeed = 0; row5.motorMaxImpulse = 0; row5.impulse = null; row5.impulse = impulse4; row1 = row5; row1.rhs = angRhsY; row1.cfm = 0; row1.minImpulse = -1e65536; row1.maxImpulse = 1e65536; j = row1.jacobian; j.ang1X = this._basis.yX; j.ang1Y = this._basis.yY; j.ang1Z = this._basis.yZ; j.ang2X = this._basis.yX; j.ang2Y = this._basis.yY; j.ang2Z = this._basis.yZ; var impulse5 = this._impulses[5]; var row6 = info.rows[info.numRows++]; var _this5 = row6.jacobian; _this5.lin1X = 0; _this5.lin1Y = 0; _this5.lin1Z = 0; _this5.lin2X = 0; _this5.lin2Y = 0; _this5.lin2Z = 0; _this5.ang1X = 0; _this5.ang1Y = 0; _this5.ang1Z = 0; _this5.ang2X = 0; _this5.ang2Y = 0; _this5.ang2Z = 0; row6.rhs = 0; row6.cfm = 0; row6.minImpulse = 0; row6.maxImpulse = 0; row6.motorSpeed = 0; row6.motorMaxImpulse = 0; row6.impulse = null; row6.impulse = impulse5; row1 = row6; row1.rhs = angRhsZ; row1.cfm = 0; row1.minImpulse = -1e65536; row1.maxImpulse = 1e65536; j = row1.jacobian; j.ang1X = this._basis.zX; j.ang1Y = this._basis.zY; j.ang1Z = this._basis.zZ; j.ang2X = this._basis.zX; j.ang2Y = this._basis.zY; j.ang2Z = this._basis.zZ; } _syncAnchors() { super._syncAnchors(); var _this = this._basis; var invM1 = _this.joint._b1._invMass; var invM2 = _this.joint._b2._invMass; var q; var qX; var qY; var qZ; var qW; var idQ; var idQX; var idQY; var idQZ; var idQW; var slerpQ; var slerpQX; var slerpQY; var slerpQZ; var slerpQW; var slerpM; var slerpM00; var slerpM01; var slerpM02; var slerpM10; var slerpM11; var slerpM12; var slerpM20; var slerpM21; var slerpM22; var newX; var newXX; var newXY; var newXZ; var newY; var newYX; var newYY; var newYZ; var newZ; var newZX; var newZY; var newZZ; var prevX; var prevXX; var prevXY; var prevXZ; var prevY; var prevYX; var prevYY; var prevYZ; var d = _this.joint._basisX1X * _this.joint._basisX2X + _this.joint._basisX1Y * _this.joint._basisX2Y + _this.joint._basisX1Z * _this.joint._basisX2Z; if(d < -0.999999999) { var vX; var vY; var vZ; var x1 = _this.joint._basisX1X; var y1 = _this.joint._basisX1Y; var z1 = _this.joint._basisX1Z; var x2 = x1 * x1; var y2 = y1 * y1; var z2 = z1 * z1; var d1; if(x2 < y2) { if(x2 < z2) { d1 = 1 / Math.sqrt(y2 + z2); vX = 0; vY = z1 * d1; vZ = -y1 * d1; } else { d1 = 1 / Math.sqrt(x2 + y2); vX = y1 * d1; vY = -x1 * d1; vZ = 0; } } else if(y2 < z2) { d1 = 1 / Math.sqrt(z2 + x2); vX = -z1 * d1; vY = 0; vZ = x1 * d1; } else { d1 = 1 / Math.sqrt(x2 + y2); vX = y1 * d1; vY = -x1 * d1; vZ = 0; } qX = vX; qY = vY; qZ = vZ; qW = 0; } else { var cX; var cY; var cZ; cX = _this.joint._basisX1Y * _this.joint._basisX2Z - _this.joint._basisX1Z * _this.joint._basisX2Y; cY = _this.joint._basisX1Z * _this.joint._basisX2X - _this.joint._basisX1X * _this.joint._basisX2Z; cZ = _this.joint._basisX1X * _this.joint._basisX2Y - _this.joint._basisX1Y * _this.joint._basisX2X; var w = Math.sqrt((1 + d) * 0.5); d = 0.5 / w; cX *= d; cY *= d; cZ *= d; qX = cX; qY = cY; qZ = cZ; qW = w; } idQX = 0; idQY = 0; idQZ = 0; idQW = 1; var qx; var qy; var qz; var qw; var q1X; var q1Y; var q1Z; var q1W; var q2X; var q2Y; var q2Z; var q2W; q1X = idQX; q1Y = idQY; q1Z = idQZ; q1W = idQW; q2X = qX; q2Y = qY; q2Z = qZ; q2W = qW; var d2 = q1X * q2X + q1Y * q2Y + q1Z * q2Z + q1W * q2W; if(d2 < 0) { d2 = -d2; q2X = -q2X; q2Y = -q2Y; q2Z = -q2Z; q2W = -q2W; } if(d2 > 0.999999) { var dqX; var dqY; var dqZ; var dqW; dqX = q2X - q1X; dqY = q2Y - q1Y; dqZ = q2Z - q1Z; dqW = q2W - q1W; q2X = q1X + dqX * (invM1 / (invM1 + invM2)); q2Y = q1Y + dqY * (invM1 / (invM1 + invM2)); q2Z = q1Z + dqZ * (invM1 / (invM1 + invM2)); q2W = q1W + dqW * (invM1 / (invM1 + invM2)); var l = q2X * q2X + q2Y * q2Y + q2Z * q2Z + q2W * q2W; if(l > 1e-32) { l = 1 / Math.sqrt(l); } slerpQX = q2X * l; slerpQY = q2Y * l; slerpQZ = q2Z * l; slerpQW = q2W * l; } else { var theta = invM1 / (invM1 + invM2) * Math.acos(d2); q2X += q1X * -d2; q2Y += q1Y * -d2; q2Z += q1Z * -d2; q2W += q1W * -d2; var l1 = q2X * q2X + q2Y * q2Y + q2Z * q2Z + q2W * q2W; if(l1 > 1e-32) { l1 = 1 / Math.sqrt(l1); } q2X *= l1; q2Y *= l1; q2Z *= l1; q2W *= l1; var sin = Math.sin(theta); var cos = Math.cos(theta); q1X *= cos; q1Y *= cos; q1Z *= cos; q1W *= cos; slerpQX = q1X + q2X * sin; slerpQY = q1Y + q2Y * sin; slerpQZ = q1Z + q2Z * sin; slerpQW = q1W + q2W * sin; } var x = slerpQX; var y = slerpQY; var z = slerpQZ; var w1 = slerpQW; var x21 = 2 * x; var y21 = 2 * y; var z21 = 2 * z; var xx = x * x21; var yy = y * y21; var zz = z * z21; var xy = x * y21; var yz = y * z21; var xz = x * z21; var wx = w1 * x21; var wy = w1 * y21; var wz = w1 * z21; slerpM00 = 1 - yy - zz; slerpM01 = xy - wz; slerpM02 = xz + wy; slerpM10 = xy + wz; slerpM11 = 1 - xx - zz; slerpM12 = yz - wx; slerpM20 = xz - wy; slerpM21 = yz + wx; slerpM22 = 1 - xx - yy; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = slerpM00 * _this.joint._basisX1X + slerpM01 * _this.joint._basisX1Y + slerpM02 * _this.joint._basisX1Z; __tmp__Y = slerpM10 * _this.joint._basisX1X + slerpM11 * _this.joint._basisX1Y + slerpM12 * _this.joint._basisX1Z; __tmp__Z = slerpM20 * _this.joint._basisX1X + slerpM21 * _this.joint._basisX1Y + slerpM22 * _this.joint._basisX1Z; newXX = __tmp__X; newXY = __tmp__Y; newXZ = __tmp__Z; prevXX = _this.xX; prevXY = _this.xY; prevXZ = _this.xZ; prevYX = _this.yX; prevYY = _this.yY; prevYZ = _this.yZ; var d3 = prevXX * newXX + prevXY * newXY + prevXZ * newXZ; if(d3 < -0.999999999) { var vX1; var vY1; var vZ1; var x11 = prevXX; var y11 = prevXY; var z11 = prevXZ; var x22 = x11 * x11; var y22 = y11 * y11; var z22 = z11 * z11; var d4; if(x22 < y22) { if(x22 < z22) { d4 = 1 / Math.sqrt(y22 + z22); vX1 = 0; vY1 = z11 * d4; vZ1 = -y11 * d4; } else { d4 = 1 / Math.sqrt(x22 + y22); vX1 = y11 * d4; vY1 = -x11 * d4; vZ1 = 0; } } else if(y22 < z22) { d4 = 1 / Math.sqrt(z22 + x22); vX1 = -z11 * d4; vY1 = 0; vZ1 = x11 * d4; } else { d4 = 1 / Math.sqrt(x22 + y22); vX1 = y11 * d4; vY1 = -x11 * d4; vZ1 = 0; } slerpQX = vX1; slerpQY = vY1; slerpQZ = vZ1; slerpQW = 0; } else { var cX1; var cY1; var cZ1; cX1 = prevXY * newXZ - prevXZ * newXY; cY1 = prevXZ * newXX - prevXX * newXZ; cZ1 = prevXX * newXY - prevXY * newXX; var w2 = Math.sqrt((1 + d3) * 0.5); d3 = 0.5 / w2; cX1 *= d3; cY1 *= d3; cZ1 *= d3; slerpQX = cX1; slerpQY = cY1; slerpQZ = cZ1; slerpQW = w2; } var x3 = slerpQX; var y3 = slerpQY; var z3 = slerpQZ; var w3 = slerpQW; var x23 = 2 * x3; var y23 = 2 * y3; var z23 = 2 * z3; var xx1 = x3 * x23; var yy1 = y3 * y23; var zz1 = z3 * z23; var xy1 = x3 * y23; var yz1 = y3 * z23; var xz1 = x3 * z23; var wx1 = w3 * x23; var wy1 = w3 * y23; var wz1 = w3 * z23; slerpM00 = 1 - yy1 - zz1; slerpM01 = xy1 - wz1; slerpM02 = xz1 + wy1; slerpM10 = xy1 + wz1; slerpM11 = 1 - xx1 - zz1; slerpM12 = yz1 - wx1; slerpM20 = xz1 - wy1; slerpM21 = yz1 + wx1; slerpM22 = 1 - xx1 - yy1; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = slerpM00 * prevYX + slerpM01 * prevYY + slerpM02 * prevYZ; __tmp__Y1 = slerpM10 * prevYX + slerpM11 * prevYY + slerpM12 * prevYZ; __tmp__Z1 = slerpM20 * prevYX + slerpM21 * prevYY + slerpM22 * prevYZ; newYX = __tmp__X1; newYY = __tmp__Y1; newYZ = __tmp__Z1; newZX = newXY * newYZ - newXZ * newYY; newZY = newXZ * newYX - newXX * newYZ; newZZ = newXX * newYY - newXY * newYX; if(newZX * newZX + newZY * newZY + newZZ * newZZ > 1e-6) { var l2 = newZX * newZX + newZY * newZY + newZZ * newZZ; if(l2 > 0) { l2 = 1 / Math.sqrt(l2); } newZX *= l2; newZY *= l2; newZZ *= l2; } else { var x12 = newXX; var y12 = newXY; var z12 = newXZ; var x24 = x12 * x12; var y24 = y12 * y12; var z24 = z12 * z12; var d5; if(x24 < y24) { if(x24 < z24) { d5 = 1 / Math.sqrt(y24 + z24); newZX = 0; newZY = z12 * d5; newZZ = -y12 * d5; } else { d5 = 1 / Math.sqrt(x24 + y24); newZX = y12 * d5; newZY = -x12 * d5; newZZ = 0; } } else if(y24 < z24) { d5 = 1 / Math.sqrt(z24 + x24); newZX = -z12 * d5; newZY = 0; newZZ = x12 * d5; } else { d5 = 1 / Math.sqrt(x24 + y24); newZX = y12 * d5; newZY = -x12 * d5; newZZ = 0; } } newYX = newZY * newXZ - newZZ * newXY; newYY = newZZ * newXX - newZX * newXZ; newYZ = newZX * newXY - newZY * newXX; _this.xX = newXX; _this.xY = newXY; _this.xZ = newXZ; _this.yX = newYX; _this.yY = newYY; _this.yZ = newYZ; _this.zX = newZX; _this.zY = newZY; _this.zZ = newZZ; var angError; var angErrorX; var angErrorY; var angErrorZ; angErrorX = this._basisX1Y * this._basisX2Z - this._basisX1Z * this._basisX2Y; angErrorY = this._basisX1Z * this._basisX2X - this._basisX1X * this._basisX2Z; angErrorZ = this._basisX1X * this._basisX2Y - this._basisX1Y * this._basisX2X; var cos1 = this._basisX1X * this._basisX2X + this._basisX1Y * this._basisX2Y + this._basisX1Z * this._basisX2Z; var theta1 = cos1 <= -1 ? 3.14159265358979 : cos1 >= 1 ? 0 : Math.acos(cos1); var l3 = angErrorX * angErrorX + angErrorY * angErrorY + angErrorZ * angErrorZ; if(l3 > 0) { l3 = 1 / Math.sqrt(l3); } angErrorX *= l3; angErrorY *= l3; angErrorZ *= l3; angErrorX *= theta1; angErrorY *= theta1; angErrorZ *= theta1; this.angularErrorY = angErrorX * this._basis.yX + angErrorY * this._basis.yY + angErrorZ * this._basis.yZ; this.angularErrorZ = angErrorX * this._basis.zX + angErrorY * this._basis.zY + angErrorZ * this._basis.zZ; var perpCross; var perpCrossX; var perpCrossY; var perpCrossZ; perpCrossX = this._basisY1Y * this._basisY2Z - this._basisY1Z * this._basisY2Y; perpCrossY = this._basisY1Z * this._basisY2X - this._basisY1X * this._basisY2Z; perpCrossZ = this._basisY1X * this._basisY2Y - this._basisY1Y * this._basisY2X; cos1 = this._basisY1X * this._basisY2X + this._basisY1Y * this._basisY2Y + this._basisY1Z * this._basisY2Z; this.angle = cos1 <= -1 ? 3.14159265358979 : cos1 >= 1 ? 0 : Math.acos(cos1); if(perpCrossX * this._basis.xX + perpCrossY * this._basis.xY + perpCrossZ * this._basis.xZ < 0) { this.angle = -this.angle; } this.linearErrorX = this._anchor2X - this._anchor1X; this.linearErrorY = this._anchor2Y - this._anchor1Y; this.linearErrorZ = this._anchor2Z - this._anchor1Z; } _getVelocitySolverInfo(timeStep,info) { super._getVelocitySolverInfo(timeStep,info); this.getInfo(info,timeStep,false); } _getPositionSolverInfo(info) { super._getPositionSolverInfo(info); this.getInfo(info,null,true); } getAxis1() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._basisX1X; v1.y = this._basisX1Y; v1.z = this._basisX1Z; return v; } getAxis2() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._basisX2X; v1.y = this._basisX2Y; v1.z = this._basisX2Z; return v; } getAxis1To(axis) { var v = axis; v.x = this._basisX1X; v.y = this._basisX1Y; v.z = this._basisX1Z; } getAxis2To(axis) { var v = axis; v.x = this._basisX2X; v.y = this._basisX2Y; v.z = this._basisX2Z; } getLocalAxis1() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._localBasisX1X; v1.y = this._localBasisX1Y; v1.z = this._localBasisX1Z; return v; } getLocalAxis2() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._localBasisX2X; v1.y = this._localBasisX2Y; v1.z = this._localBasisX2Z; return v; } getLocalAxis1To(axis) { var v = axis; v.x = this._localBasisX1X; v.y = this._localBasisX1Y; v.z = this._localBasisX1Z; } getLocalAxis2To(axis) { var v = axis; v.x = this._localBasisX2X; v.y = this._localBasisX2Y; v.z = this._localBasisX2Z; } getSpringDamper() { return this._sd; } getLimitMotor() { return this._lm; } getAngle() { return this.angle; } } oimo.dynamics.constraint.joint.RevoluteJointConfig = class oimo_dynamics_constraint_joint_RevoluteJointConfig extends oimo.dynamics.constraint.joint.JointConfig { constructor() { super(); this.localAxis1 = new oimo.common.Vec3(1,0,0); this.localAxis2 = new oimo.common.Vec3(1,0,0); this.springDamper = new oimo.dynamics.constraint.joint.SpringDamper(); this.limitMotor = new oimo.dynamics.constraint.joint.RotationalLimitMotor(); } init(rigidBody1,rigidBody2,worldAnchor,worldAxis) { this._init(rigidBody1,rigidBody2,worldAnchor); var v; var vX; var vY; var vZ; var v1 = worldAxis; vX = v1.x; vY = v1.y; vZ = v1.z; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = rigidBody1._transform._rotation00 * vX + rigidBody1._transform._rotation10 * vY + rigidBody1._transform._rotation20 * vZ; __tmp__Y = rigidBody1._transform._rotation01 * vX + rigidBody1._transform._rotation11 * vY + rigidBody1._transform._rotation21 * vZ; __tmp__Z = rigidBody1._transform._rotation02 * vX + rigidBody1._transform._rotation12 * vY + rigidBody1._transform._rotation22 * vZ; vX = __tmp__X; vY = __tmp__Y; vZ = __tmp__Z; var v2 = this.localAxis1; v2.x = vX; v2.y = vY; v2.z = vZ; var v3; var vX1; var vY1; var vZ1; var v4 = worldAxis; vX1 = v4.x; vY1 = v4.y; vZ1 = v4.z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = rigidBody2._transform._rotation00 * vX1 + rigidBody2._transform._rotation10 * vY1 + rigidBody2._transform._rotation20 * vZ1; __tmp__Y1 = rigidBody2._transform._rotation01 * vX1 + rigidBody2._transform._rotation11 * vY1 + rigidBody2._transform._rotation21 * vZ1; __tmp__Z1 = rigidBody2._transform._rotation02 * vX1 + rigidBody2._transform._rotation12 * vY1 + rigidBody2._transform._rotation22 * vZ1; vX1 = __tmp__X1; vY1 = __tmp__Y1; vZ1 = __tmp__Z1; var v5 = this.localAxis2; v5.x = vX1; v5.y = vY1; v5.z = vZ1; return this; } } oimo.dynamics.constraint.joint.RotationalLimitMotor = class oimo_dynamics_constraint_joint_RotationalLimitMotor { constructor() { this.lowerLimit = 1; this.upperLimit = 0; this.motorTorque = 0; } setLimits(lower,upper) { this.lowerLimit = lower; this.upperLimit = upper; return this; } setMotor(speed,torque) { this.motorSpeed = speed; this.motorTorque = torque; return this; } clone() { var lm = new oimo.dynamics.constraint.joint.RotationalLimitMotor(); lm.lowerLimit = this.lowerLimit; lm.upperLimit = this.upperLimit; lm.motorSpeed = this.motorSpeed; lm.motorTorque = this.motorTorque; return lm; } } oimo.dynamics.constraint.joint.SphericalJoint = class oimo_dynamics_constraint_joint_SphericalJoint extends oimo.dynamics.constraint.joint.Joint { constructor(config) { super(config,0); this._sd = config.springDamper.clone(); } getInfo(info,timeStep,isPositionPart) { if(this._sd.frequency > 0 && isPositionPart) { return; } var error; var errorX; var errorY; var errorZ; errorX = this._anchor2X - this._anchor1X; errorY = this._anchor2Y - this._anchor1Y; errorZ = this._anchor2Z - this._anchor1Z; var cfm; var erp; if(this._sd.frequency > 0) { var omega = 6.28318530717958 * this._sd.frequency; var zeta = this._sd.dampingRatio; if(zeta < oimo.common.Setting.minSpringDamperDampingRatio) { zeta = oimo.common.Setting.minSpringDamperDampingRatio; } var h = timeStep.dt; var c = 2 * zeta * omega; var k = omega * omega; if(this._sd.useSymplecticEuler) { cfm = 1 / (h * c); erp = k / c; } else { cfm = 1 / (h * (h * k + c)); erp = k / (h * k + c); } cfm *= this._b1._invMass + this._b2._invMass; } else { cfm = 0; erp = this.getErp(timeStep,isPositionPart); } var linearRhs; var linearRhsX; var linearRhsY; var linearRhsZ; linearRhsX = errorX * erp; linearRhsY = errorY * erp; linearRhsZ = errorZ * erp; var linRhsX = linearRhsX; var linRhsY = linearRhsY; var linRhsZ = linearRhsZ; var crossR1; var crossR100; var crossR101; var crossR102; var crossR110; var crossR111; var crossR112; var crossR120; var crossR121; var crossR122; var crossR2; var crossR200; var crossR201; var crossR202; var crossR210; var crossR211; var crossR212; var crossR220; var crossR221; var crossR222; crossR100 = 0; crossR101 = -this._relativeAnchor1Z; crossR102 = this._relativeAnchor1Y; crossR110 = this._relativeAnchor1Z; crossR111 = 0; crossR112 = -this._relativeAnchor1X; crossR120 = -this._relativeAnchor1Y; crossR121 = this._relativeAnchor1X; crossR122 = 0; crossR200 = 0; crossR201 = -this._relativeAnchor2Z; crossR202 = this._relativeAnchor2Y; crossR210 = this._relativeAnchor2Z; crossR211 = 0; crossR212 = -this._relativeAnchor2X; crossR220 = -this._relativeAnchor2Y; crossR221 = this._relativeAnchor2X; crossR222 = 0; crossR100 = -crossR100; crossR101 = -crossR101; crossR102 = -crossR102; crossR110 = -crossR110; crossR111 = -crossR111; crossR112 = -crossR112; crossR120 = -crossR120; crossR121 = -crossR121; crossR122 = -crossR122; crossR200 = -crossR200; crossR201 = -crossR201; crossR202 = -crossR202; crossR210 = -crossR210; crossR211 = -crossR211; crossR212 = -crossR212; crossR220 = -crossR220; crossR221 = -crossR221; crossR222 = -crossR222; var impulse = this._impulses[0]; var row = info.rows[info.numRows++]; var _this = row.jacobian; _this.lin1X = 0; _this.lin1Y = 0; _this.lin1Z = 0; _this.lin2X = 0; _this.lin2Y = 0; _this.lin2Z = 0; _this.ang1X = 0; _this.ang1Y = 0; _this.ang1Z = 0; _this.ang2X = 0; _this.ang2Y = 0; _this.ang2Z = 0; row.rhs = 0; row.cfm = 0; row.minImpulse = 0; row.maxImpulse = 0; row.motorSpeed = 0; row.motorMaxImpulse = 0; row.impulse = null; row.impulse = impulse; var row1 = row; row1.rhs = linRhsX; row1.cfm = cfm; row1.minImpulse = -1e65536; row1.maxImpulse = 1e65536; var j = row1.jacobian; j.lin1X = 1; j.lin1Y = 0; j.lin1Z = 0; j.lin2X = 1; j.lin2Y = 0; j.lin2Z = 0; j.ang1X = crossR100; j.ang1Y = crossR101; j.ang1Z = crossR102; j.ang2X = crossR200; j.ang2Y = crossR201; j.ang2Z = crossR202; var impulse1 = this._impulses[1]; var row2 = info.rows[info.numRows++]; var _this1 = row2.jacobian; _this1.lin1X = 0; _this1.lin1Y = 0; _this1.lin1Z = 0; _this1.lin2X = 0; _this1.lin2Y = 0; _this1.lin2Z = 0; _this1.ang1X = 0; _this1.ang1Y = 0; _this1.ang1Z = 0; _this1.ang2X = 0; _this1.ang2Y = 0; _this1.ang2Z = 0; row2.rhs = 0; row2.cfm = 0; row2.minImpulse = 0; row2.maxImpulse = 0; row2.motorSpeed = 0; row2.motorMaxImpulse = 0; row2.impulse = null; row2.impulse = impulse1; row1 = row2; row1.rhs = linRhsY; row1.cfm = cfm; row1.minImpulse = -1e65536; row1.maxImpulse = 1e65536; j = row1.jacobian; j.lin1X = 0; j.lin1Y = 1; j.lin1Z = 0; j.lin2X = 0; j.lin2Y = 1; j.lin2Z = 0; j.ang1X = crossR110; j.ang1Y = crossR111; j.ang1Z = crossR112; j.ang2X = crossR210; j.ang2Y = crossR211; j.ang2Z = crossR212; var impulse2 = this._impulses[2]; var row3 = info.rows[info.numRows++]; var _this2 = row3.jacobian; _this2.lin1X = 0; _this2.lin1Y = 0; _this2.lin1Z = 0; _this2.lin2X = 0; _this2.lin2Y = 0; _this2.lin2Z = 0; _this2.ang1X = 0; _this2.ang1Y = 0; _this2.ang1Z = 0; _this2.ang2X = 0; _this2.ang2Y = 0; _this2.ang2Z = 0; row3.rhs = 0; row3.cfm = 0; row3.minImpulse = 0; row3.maxImpulse = 0; row3.motorSpeed = 0; row3.motorMaxImpulse = 0; row3.impulse = null; row3.impulse = impulse2; row1 = row3; row1.rhs = linRhsZ; row1.cfm = cfm; row1.minImpulse = -1e65536; row1.maxImpulse = 1e65536; j = row1.jacobian; j.lin1X = 0; j.lin1Y = 0; j.lin1Z = 1; j.lin2X = 0; j.lin2Y = 0; j.lin2Z = 1; j.ang1X = crossR120; j.ang1Y = crossR121; j.ang1Z = crossR122; j.ang2X = crossR220; j.ang2Y = crossR221; j.ang2Z = crossR222; } _getVelocitySolverInfo(timeStep,info) { super._getVelocitySolverInfo(timeStep,info); this.getInfo(info,timeStep,false); } _getPositionSolverInfo(info) { super._getPositionSolverInfo(info); this.getInfo(info,null,true); } getSpringDamper() { return this._sd; } } oimo.dynamics.constraint.joint.SphericalJointConfig = class oimo_dynamics_constraint_joint_SphericalJointConfig extends oimo.dynamics.constraint.joint.JointConfig { constructor() { super(); this.springDamper = new oimo.dynamics.constraint.joint.SpringDamper(); } init(rigidBody1,rigidBody2,worldAnchor) { this._init(rigidBody1,rigidBody2,worldAnchor); return this; } } oimo.dynamics.constraint.joint.SpringDamper = class oimo_dynamics_constraint_joint_SpringDamper { constructor() { this.frequency = 0; this.dampingRatio = 0; this.useSymplecticEuler = false; } setSpring(frequency,dampingRatio) { this.frequency = frequency; this.dampingRatio = dampingRatio; return this; } setSymplecticEuler(useSymplecticEuler) { this.useSymplecticEuler = useSymplecticEuler; return this; } clone() { var sd = new oimo.dynamics.constraint.joint.SpringDamper(); sd.frequency = this.frequency; sd.dampingRatio = this.dampingRatio; sd.useSymplecticEuler = this.useSymplecticEuler; return sd; } } oimo.dynamics.constraint.joint.TranslationalLimitMotor = class oimo_dynamics_constraint_joint_TranslationalLimitMotor { constructor() { this.lowerLimit = 1; this.upperLimit = 0; this.motorForce = 0; } setLimits(lower,upper) { this.lowerLimit = lower; this.upperLimit = upper; return this; } setMotor(speed,force) { this.motorSpeed = speed; this.motorForce = force; return this; } clone() { var lm = new oimo.dynamics.constraint.joint.TranslationalLimitMotor(); lm.lowerLimit = this.lowerLimit; lm.upperLimit = this.upperLimit; lm.motorSpeed = this.motorSpeed; lm.motorForce = this.motorForce; return lm; } } oimo.dynamics.constraint.joint.UniversalJoint = class oimo_dynamics_constraint_joint_UniversalJoint extends oimo.dynamics.constraint.joint.Joint { constructor(config) { super(config,oimo.dynamics.constraint.joint.JointType.UNIVERSAL); var v = config.localAxis1; this._localBasisX1X = v.x; this._localBasisX1Y = v.y; this._localBasisX1Z = v.z; var v1 = config.localAxis2; this._localBasisZ2X = v1.x; this._localBasisZ2Y = v1.y; this._localBasisZ2Z = v1.z; this.buildLocalBasesFromX1Z2(); this._angleX = 0; this._angleY = 0; this._angleZ = 0; this.xSingular = false; this.ySingular = false; this.zSingular = false; this._sd1 = config.springDamper1.clone(); this._sd2 = config.springDamper2.clone(); this._lm1 = config.limitMotor1.clone(); this._lm2 = config.limitMotor2.clone(); } getInfo(info,timeStep,isPositionPart) { var erp = this.getErp(timeStep,isPositionPart); var linearRhs; var linearRhsX; var linearRhsY; var linearRhsZ; linearRhsX = this.linearErrorX * erp; linearRhsY = this.linearErrorY * erp; linearRhsZ = this.linearErrorZ * erp; var linRhsX = linearRhsX; var linRhsY = linearRhsY; var linRhsZ = linearRhsZ; var angRhsY = this._angleY * erp; var crossR1; var crossR100; var crossR101; var crossR102; var crossR110; var crossR111; var crossR112; var crossR120; var crossR121; var crossR122; var crossR2; var crossR200; var crossR201; var crossR202; var crossR210; var crossR211; var crossR212; var crossR220; var crossR221; var crossR222; crossR100 = 0; crossR101 = -this._relativeAnchor1Z; crossR102 = this._relativeAnchor1Y; crossR110 = this._relativeAnchor1Z; crossR111 = 0; crossR112 = -this._relativeAnchor1X; crossR120 = -this._relativeAnchor1Y; crossR121 = this._relativeAnchor1X; crossR122 = 0; crossR200 = 0; crossR201 = -this._relativeAnchor2Z; crossR202 = this._relativeAnchor2Y; crossR210 = this._relativeAnchor2Z; crossR211 = 0; crossR212 = -this._relativeAnchor2X; crossR220 = -this._relativeAnchor2Y; crossR221 = this._relativeAnchor2X; crossR222 = 0; crossR100 = -crossR100; crossR101 = -crossR101; crossR102 = -crossR102; crossR110 = -crossR110; crossR111 = -crossR111; crossR112 = -crossR112; crossR120 = -crossR120; crossR121 = -crossR121; crossR122 = -crossR122; crossR200 = -crossR200; crossR201 = -crossR201; crossR202 = -crossR202; crossR210 = -crossR210; crossR211 = -crossR211; crossR212 = -crossR212; crossR220 = -crossR220; crossR221 = -crossR221; crossR222 = -crossR222; var motorMassX = this.computeEffectiveInertiaMoment(this._axisXX,this._axisXY,this._axisXZ); var motorMassZ = this.computeEffectiveInertiaMoment(this._axisZX,this._axisZY,this._axisZZ); var impulse = this._impulses[0]; var row = info.rows[info.numRows++]; var _this = row.jacobian; _this.lin1X = 0; _this.lin1Y = 0; _this.lin1Z = 0; _this.lin2X = 0; _this.lin2Y = 0; _this.lin2Z = 0; _this.ang1X = 0; _this.ang1Y = 0; _this.ang1Z = 0; _this.ang2X = 0; _this.ang2Y = 0; _this.ang2Z = 0; row.rhs = 0; row.cfm = 0; row.minImpulse = 0; row.maxImpulse = 0; row.motorSpeed = 0; row.motorMaxImpulse = 0; row.impulse = null; row.impulse = impulse; var row1 = row; row1.rhs = linRhsX; row1.cfm = 0; row1.minImpulse = -1e65536; row1.maxImpulse = 1e65536; var j = row1.jacobian; j.lin1X = 1; j.lin1Y = 0; j.lin1Z = 0; j.lin2X = 1; j.lin2Y = 0; j.lin2Z = 0; j.ang1X = crossR100; j.ang1Y = crossR101; j.ang1Z = crossR102; j.ang2X = crossR200; j.ang2Y = crossR201; j.ang2Z = crossR202; var impulse1 = this._impulses[1]; var row2 = info.rows[info.numRows++]; var _this1 = row2.jacobian; _this1.lin1X = 0; _this1.lin1Y = 0; _this1.lin1Z = 0; _this1.lin2X = 0; _this1.lin2Y = 0; _this1.lin2Z = 0; _this1.ang1X = 0; _this1.ang1Y = 0; _this1.ang1Z = 0; _this1.ang2X = 0; _this1.ang2Y = 0; _this1.ang2Z = 0; row2.rhs = 0; row2.cfm = 0; row2.minImpulse = 0; row2.maxImpulse = 0; row2.motorSpeed = 0; row2.motorMaxImpulse = 0; row2.impulse = null; row2.impulse = impulse1; row1 = row2; row1.rhs = linRhsY; row1.cfm = 0; row1.minImpulse = -1e65536; row1.maxImpulse = 1e65536; j = row1.jacobian; j.lin1X = 0; j.lin1Y = 1; j.lin1Z = 0; j.lin2X = 0; j.lin2Y = 1; j.lin2Z = 0; j.ang1X = crossR110; j.ang1Y = crossR111; j.ang1Z = crossR112; j.ang2X = crossR210; j.ang2Y = crossR211; j.ang2Z = crossR212; var impulse2 = this._impulses[2]; var row3 = info.rows[info.numRows++]; var _this2 = row3.jacobian; _this2.lin1X = 0; _this2.lin1Y = 0; _this2.lin1Z = 0; _this2.lin2X = 0; _this2.lin2Y = 0; _this2.lin2Z = 0; _this2.ang1X = 0; _this2.ang1Y = 0; _this2.ang1Z = 0; _this2.ang2X = 0; _this2.ang2Y = 0; _this2.ang2Z = 0; row3.rhs = 0; row3.cfm = 0; row3.minImpulse = 0; row3.maxImpulse = 0; row3.motorSpeed = 0; row3.motorMaxImpulse = 0; row3.impulse = null; row3.impulse = impulse2; row1 = row3; row1.rhs = linRhsZ; row1.cfm = 0; row1.minImpulse = -1e65536; row1.maxImpulse = 1e65536; j = row1.jacobian; j.lin1X = 0; j.lin1Y = 0; j.lin1Z = 1; j.lin2X = 0; j.lin2Y = 0; j.lin2Z = 1; j.ang1X = crossR120; j.ang1Y = crossR121; j.ang1Z = crossR122; j.ang2X = crossR220; j.ang2Y = crossR221; j.ang2Z = crossR222; if(!this.xSingular && (this._sd1.frequency <= 0 || !isPositionPart)) { var impulse3 = this._impulses[3]; var row4 = info.rows[info.numRows++]; var _this3 = row4.jacobian; _this3.lin1X = 0; _this3.lin1Y = 0; _this3.lin1Z = 0; _this3.lin2X = 0; _this3.lin2Y = 0; _this3.lin2Z = 0; _this3.ang1X = 0; _this3.ang1Y = 0; _this3.ang1Z = 0; _this3.ang2X = 0; _this3.ang2Y = 0; _this3.ang2Z = 0; row4.rhs = 0; row4.cfm = 0; row4.minImpulse = 0; row4.maxImpulse = 0; row4.motorSpeed = 0; row4.motorMaxImpulse = 0; row4.impulse = null; row4.impulse = impulse3; row1 = row4; this.setSolverInfoRowAngular(row1,this._angleX,this._lm1,motorMassX,this._sd1,timeStep,isPositionPart); j = row1.jacobian; j.ang1X = this._axisXX; j.ang1Y = this._axisXY; j.ang1Z = this._axisXZ; j.ang2X = this._axisXX; j.ang2Y = this._axisXY; j.ang2Z = this._axisXZ; } if(!this.ySingular) { var impulse4 = this._impulses[4]; var row5 = info.rows[info.numRows++]; var _this4 = row5.jacobian; _this4.lin1X = 0; _this4.lin1Y = 0; _this4.lin1Z = 0; _this4.lin2X = 0; _this4.lin2Y = 0; _this4.lin2Z = 0; _this4.ang1X = 0; _this4.ang1Y = 0; _this4.ang1Z = 0; _this4.ang2X = 0; _this4.ang2Y = 0; _this4.ang2Z = 0; row5.rhs = 0; row5.cfm = 0; row5.minImpulse = 0; row5.maxImpulse = 0; row5.motorSpeed = 0; row5.motorMaxImpulse = 0; row5.impulse = null; row5.impulse = impulse4; row1 = row5; row1.rhs = angRhsY; row1.cfm = 0; row1.minImpulse = -1e65536; row1.maxImpulse = 1e65536; j = row1.jacobian; j.ang1X = this._axisYX; j.ang1Y = this._axisYY; j.ang1Z = this._axisYZ; j.ang2X = this._axisYX; j.ang2Y = this._axisYY; j.ang2Z = this._axisYZ; } if(!this.zSingular && (this._sd2.frequency <= 0 || !isPositionPart)) { var impulse5 = this._impulses[5]; var row6 = info.rows[info.numRows++]; var _this5 = row6.jacobian; _this5.lin1X = 0; _this5.lin1Y = 0; _this5.lin1Z = 0; _this5.lin2X = 0; _this5.lin2Y = 0; _this5.lin2Z = 0; _this5.ang1X = 0; _this5.ang1Y = 0; _this5.ang1Z = 0; _this5.ang2X = 0; _this5.ang2Y = 0; _this5.ang2Z = 0; row6.rhs = 0; row6.cfm = 0; row6.minImpulse = 0; row6.maxImpulse = 0; row6.motorSpeed = 0; row6.motorMaxImpulse = 0; row6.impulse = null; row6.impulse = impulse5; row1 = row6; this.setSolverInfoRowAngular(row1,this._angleZ,this._lm2,motorMassZ,this._sd2,timeStep,isPositionPart); j = row1.jacobian; j.ang1X = this._axisZX; j.ang1Y = this._axisZY; j.ang1Z = this._axisZZ; j.ang2X = this._axisZX; j.ang2Y = this._axisZY; j.ang2Z = this._axisZZ; } } _syncAnchors() { super._syncAnchors(); var rot1; var rot100; var rot101; var rot102; var rot110; var rot111; var rot112; var rot120; var rot121; var rot122; var rot2; var rot200; var rot201; var rot202; var rot210; var rot211; var rot212; var rot220; var rot221; var rot222; rot100 = this._basisX1X; rot101 = this._basisY1X; rot102 = this._basisZ1X; rot110 = this._basisX1Y; rot111 = this._basisY1Y; rot112 = this._basisZ1Y; rot120 = this._basisX1Z; rot121 = this._basisY1Z; rot122 = this._basisZ1Z; rot200 = this._basisX2X; rot201 = this._basisY2X; rot202 = this._basisZ2X; rot210 = this._basisX2Y; rot211 = this._basisY2Y; rot212 = this._basisZ2Y; rot220 = this._basisX2Z; rot221 = this._basisY2Z; rot222 = this._basisZ2Z; var relRot; var relRot00; var relRot01; var relRot02; var relRot10; var relRot11; var relRot12; var relRot20; var relRot21; var relRot22; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = rot100 * rot200 + rot110 * rot210 + rot120 * rot220; __tmp__01 = rot100 * rot201 + rot110 * rot211 + rot120 * rot221; __tmp__02 = rot100 * rot202 + rot110 * rot212 + rot120 * rot222; __tmp__10 = rot101 * rot200 + rot111 * rot210 + rot121 * rot220; __tmp__11 = rot101 * rot201 + rot111 * rot211 + rot121 * rot221; __tmp__12 = rot101 * rot202 + rot111 * rot212 + rot121 * rot222; __tmp__20 = rot102 * rot200 + rot112 * rot210 + rot122 * rot220; __tmp__21 = rot102 * rot201 + rot112 * rot211 + rot122 * rot221; __tmp__22 = rot102 * rot202 + rot112 * rot212 + rot122 * rot222; relRot00 = __tmp__00; relRot01 = __tmp__01; relRot02 = __tmp__02; relRot10 = __tmp__10; relRot11 = __tmp__11; relRot12 = __tmp__12; relRot20 = __tmp__20; relRot21 = __tmp__21; relRot22 = __tmp__22; var angleAxisX; var angleAxisXX; var angleAxisXY; var angleAxisXZ; var angleAxisY; var angleAxisYX; var angleAxisYY; var angleAxisYZ; var angleAxisZ; var angleAxisZX; var angleAxisZY; var angleAxisZZ; angleAxisXX = this._basisX1X; angleAxisXY = this._basisX1Y; angleAxisXZ = this._basisX1Z; angleAxisZX = this._basisZ2X; angleAxisZY = this._basisZ2Y; angleAxisZZ = this._basisZ2Z; angleAxisYX = angleAxisZY * angleAxisXZ - angleAxisZZ * angleAxisXY; angleAxisYY = angleAxisZZ * angleAxisXX - angleAxisZX * angleAxisXZ; angleAxisYZ = angleAxisZX * angleAxisXY - angleAxisZY * angleAxisXX; this._axisXX = angleAxisYY * angleAxisZZ - angleAxisYZ * angleAxisZY; this._axisXY = angleAxisYZ * angleAxisZX - angleAxisYX * angleAxisZZ; this._axisXZ = angleAxisYX * angleAxisZY - angleAxisYY * angleAxisZX; this._axisYX = angleAxisYX; this._axisYY = angleAxisYY; this._axisYZ = angleAxisYZ; this._axisZX = angleAxisXY * angleAxisYZ - angleAxisXZ * angleAxisYY; this._axisZY = angleAxisXZ * angleAxisYX - angleAxisXX * angleAxisYZ; this._axisZZ = angleAxisXX * angleAxisYY - angleAxisXY * angleAxisYX; var l = this._axisXX * this._axisXX + this._axisXY * this._axisXY + this._axisXZ * this._axisXZ; if(l > 0) { l = 1 / Math.sqrt(l); } this._axisXX *= l; this._axisXY *= l; this._axisXZ *= l; var l1 = this._axisYX * this._axisYX + this._axisYY * this._axisYY + this._axisYZ * this._axisYZ; if(l1 > 0) { l1 = 1 / Math.sqrt(l1); } this._axisYX *= l1; this._axisYY *= l1; this._axisYZ *= l1; var l2 = this._axisZX * this._axisZX + this._axisZY * this._axisZY + this._axisZZ * this._axisZZ; if(l2 > 0) { l2 = 1 / Math.sqrt(l2); } this._axisZX *= l2; this._axisZY *= l2; this._axisZZ *= l2; this.xSingular = this._axisXX * this._axisXX + this._axisXY * this._axisXY + this._axisXZ * this._axisXZ == 0; this.ySingular = this._axisYX * this._axisYX + this._axisYY * this._axisYY + this._axisYZ * this._axisYZ == 0; this.zSingular = this._axisZX * this._axisZX + this._axisZY * this._axisZY + this._axisZZ * this._axisZZ == 0; var rot11; var rot1001; var rot1011; var rot1021; var rot1101; var rot1111; var rot1121; var rot1201; var rot1211; var rot1221; var rot21; var rot2001; var rot2011; var rot2021; var rot2101; var rot2111; var rot2121; var rot2201; var rot2211; var rot2221; rot1001 = this._basisX1X; rot1011 = this._basisY1X; rot1021 = this._basisZ1X; rot1101 = this._basisX1Y; rot1111 = this._basisY1Y; rot1121 = this._basisZ1Y; rot1201 = this._basisX1Z; rot1211 = this._basisY1Z; rot1221 = this._basisZ1Z; rot2001 = this._basisX2X; rot2011 = this._basisY2X; rot2021 = this._basisZ2X; rot2101 = this._basisX2Y; rot2111 = this._basisY2Y; rot2121 = this._basisZ2Y; rot2201 = this._basisX2Z; rot2211 = this._basisY2Z; rot2221 = this._basisZ2Z; var relRot1; var relRot001; var relRot011; var relRot021; var relRot101; var relRot111; var relRot121; var relRot201; var relRot211; var relRot221; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = rot1001 * rot2001 + rot1101 * rot2101 + rot1201 * rot2201; __tmp__011 = rot1001 * rot2011 + rot1101 * rot2111 + rot1201 * rot2211; __tmp__021 = rot1001 * rot2021 + rot1101 * rot2121 + rot1201 * rot2221; __tmp__101 = rot1011 * rot2001 + rot1111 * rot2101 + rot1211 * rot2201; __tmp__111 = rot1011 * rot2011 + rot1111 * rot2111 + rot1211 * rot2211; __tmp__121 = rot1011 * rot2021 + rot1111 * rot2121 + rot1211 * rot2221; __tmp__201 = rot1021 * rot2001 + rot1121 * rot2101 + rot1221 * rot2201; __tmp__211 = rot1021 * rot2011 + rot1121 * rot2111 + rot1221 * rot2211; __tmp__221 = rot1021 * rot2021 + rot1121 * rot2121 + rot1221 * rot2221; relRot001 = __tmp__001; relRot011 = __tmp__011; relRot021 = __tmp__021; relRot101 = __tmp__101; relRot111 = __tmp__111; relRot121 = __tmp__121; relRot201 = __tmp__201; relRot211 = __tmp__211; relRot221 = __tmp__221; var angles; var anglesX; var anglesY; var anglesZ; var sy = relRot021; if(sy <= -1) { var xSubZ = Math.atan2(relRot211,relRot111); anglesX = xSubZ * 0.5; anglesY = -1.570796326794895; anglesZ = -xSubZ * 0.5; } else if(sy >= 1) { var xAddZ = Math.atan2(relRot211,relRot111); anglesX = xAddZ * 0.5; anglesY = 1.570796326794895; anglesZ = xAddZ * 0.5; } else { var y = Math.asin(sy); var x = Math.atan2(-relRot121,relRot221); var z = Math.atan2(-relRot011,relRot001); anglesX = x; anglesY = y; anglesZ = z; } this._angleX = anglesX; this._angleY = anglesY; this._angleZ = anglesZ; this.linearErrorX = this._anchor2X - this._anchor1X; this.linearErrorY = this._anchor2Y - this._anchor1Y; this.linearErrorZ = this._anchor2Z - this._anchor1Z; } _getVelocitySolverInfo(timeStep,info) { super._getVelocitySolverInfo(timeStep,info); this.getInfo(info,timeStep,false); } _getPositionSolverInfo(info) { super._getPositionSolverInfo(info); this.getInfo(info,null,true); } getAxis1() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._basisX1X; v1.y = this._basisX1Y; v1.z = this._basisX1Z; return v; } getAxis2() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._basisZ2X; v1.y = this._basisZ2Y; v1.z = this._basisZ2Z; return v; } getAxis1To(axis) { var v = axis; v.x = this._basisX1X; v.y = this._basisX1Y; v.z = this._basisX1Z; } getAxis2To(axis) { var v = axis; v.x = this._basisZ2X; v.y = this._basisZ2Y; v.z = this._basisZ2Z; } getLocalAxis1() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._localBasisX1X; v1.y = this._localBasisX1Y; v1.z = this._localBasisX1Z; return v; } getLocalAxis2() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._localBasisZ2X; v1.y = this._localBasisZ2Y; v1.z = this._localBasisZ2Z; return v; } getLocalAxis1To(axis) { var v = axis; v.x = this._localBasisX1X; v.y = this._localBasisX1Y; v.z = this._localBasisX1Z; } getLocalAxis2To(axis) { var v = axis; v.x = this._localBasisZ2X; v.y = this._localBasisZ2Y; v.z = this._localBasisZ2Z; } getSpringDamper1() { return this._sd1; } getSpringDamper2() { return this._sd2; } getLimitMotor1() { return this._lm1; } getLimitMotor2() { return this._lm2; } getAngle1() { return this._angleX; } getAngle2() { return this._angleZ; } } oimo.dynamics.constraint.joint.UniversalJointConfig = class oimo_dynamics_constraint_joint_UniversalJointConfig extends oimo.dynamics.constraint.joint.JointConfig { constructor() { super(); this.localAxis1 = new oimo.common.Vec3(1,0,0); this.localAxis2 = new oimo.common.Vec3(1,0,0); this.springDamper1 = new oimo.dynamics.constraint.joint.SpringDamper(); this.springDamper2 = new oimo.dynamics.constraint.joint.SpringDamper(); this.limitMotor1 = new oimo.dynamics.constraint.joint.RotationalLimitMotor(); this.limitMotor2 = new oimo.dynamics.constraint.joint.RotationalLimitMotor(); } init(rigidBody1,rigidBody2,worldAnchor,worldAxis1,worldAxis2) { this._init(rigidBody1,rigidBody2,worldAnchor); var v; var vX; var vY; var vZ; var v1 = worldAxis1; vX = v1.x; vY = v1.y; vZ = v1.z; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = rigidBody1._transform._rotation00 * vX + rigidBody1._transform._rotation10 * vY + rigidBody1._transform._rotation20 * vZ; __tmp__Y = rigidBody1._transform._rotation01 * vX + rigidBody1._transform._rotation11 * vY + rigidBody1._transform._rotation21 * vZ; __tmp__Z = rigidBody1._transform._rotation02 * vX + rigidBody1._transform._rotation12 * vY + rigidBody1._transform._rotation22 * vZ; vX = __tmp__X; vY = __tmp__Y; vZ = __tmp__Z; var v2 = this.localAxis1; v2.x = vX; v2.y = vY; v2.z = vZ; var v3; var vX1; var vY1; var vZ1; var v4 = worldAxis2; vX1 = v4.x; vY1 = v4.y; vZ1 = v4.z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = rigidBody2._transform._rotation00 * vX1 + rigidBody2._transform._rotation10 * vY1 + rigidBody2._transform._rotation20 * vZ1; __tmp__Y1 = rigidBody2._transform._rotation01 * vX1 + rigidBody2._transform._rotation11 * vY1 + rigidBody2._transform._rotation21 * vZ1; __tmp__Z1 = rigidBody2._transform._rotation02 * vX1 + rigidBody2._transform._rotation12 * vY1 + rigidBody2._transform._rotation22 * vZ1; vX1 = __tmp__X1; vY1 = __tmp__Y1; vZ1 = __tmp__Z1; var v5 = this.localAxis2; v5.x = vX1; v5.y = vY1; v5.z = vZ1; return this; } } if(!oimo.dynamics.constraint.solver) oimo.dynamics.constraint.solver = {}; oimo.dynamics.constraint.solver.ConstraintSolverType = class oimo_dynamics_constraint_solver_ConstraintSolverType { } if(!oimo.dynamics.constraint.solver.common) oimo.dynamics.constraint.solver.common = {}; oimo.dynamics.constraint.solver.common.ContactSolverMassDataRow = class oimo_dynamics_constraint_solver_common_ContactSolverMassDataRow { constructor() { this.invMLinN1X = 0; this.invMLinN1Y = 0; this.invMLinN1Z = 0; this.invMLinN2X = 0; this.invMLinN2Y = 0; this.invMLinN2Z = 0; this.invMAngN1X = 0; this.invMAngN1Y = 0; this.invMAngN1Z = 0; this.invMAngN2X = 0; this.invMAngN2Y = 0; this.invMAngN2Z = 0; this.invMLinT1X = 0; this.invMLinT1Y = 0; this.invMLinT1Z = 0; this.invMLinT2X = 0; this.invMLinT2Y = 0; this.invMLinT2Z = 0; this.invMAngT1X = 0; this.invMAngT1Y = 0; this.invMAngT1Z = 0; this.invMAngT2X = 0; this.invMAngT2Y = 0; this.invMAngT2Z = 0; this.invMLinB1X = 0; this.invMLinB1Y = 0; this.invMLinB1Z = 0; this.invMLinB2X = 0; this.invMLinB2Y = 0; this.invMLinB2Z = 0; this.invMAngB1X = 0; this.invMAngB1Y = 0; this.invMAngB1Z = 0; this.invMAngB2X = 0; this.invMAngB2Y = 0; this.invMAngB2Z = 0; this.massN = 0; this.massTB00 = 0; this.massTB01 = 0; this.massTB10 = 0; this.massTB11 = 0; } } oimo.dynamics.constraint.solver.common.JointSolverMassDataRow = class oimo_dynamics_constraint_solver_common_JointSolverMassDataRow { constructor() { this.invMLin1X = 0; this.invMLin1Y = 0; this.invMLin1Z = 0; this.invMLin2X = 0; this.invMLin2Y = 0; this.invMLin2Z = 0; this.invMAng1X = 0; this.invMAng1Y = 0; this.invMAng1Z = 0; this.invMAng2X = 0; this.invMAng2Y = 0; this.invMAng2Z = 0; this.mass = 0; this.massWithoutCfm = 0; } } if(!oimo.dynamics.constraint.solver.direct) oimo.dynamics.constraint.solver.direct = {}; oimo.dynamics.constraint.solver.direct.Boundary = class oimo_dynamics_constraint_solver_direct_Boundary { constructor(maxRows) { var this1 = new Array(maxRows); this.iBounded = this1; var this2 = new Array(maxRows); this.iUnbounded = this2; var this3 = new Array(maxRows); this.signs = this3; var this4 = new Array(maxRows); this.b = this4; this.numBounded = 0; this.numUnbounded = 0; this.matrixId = 0; } init(buildInfo) { this.numBounded = buildInfo.numBounded; var _g = 0; var _g1 = this.numBounded; while(_g < _g1) { var i = _g++; this.iBounded[i] = buildInfo.iBounded[i]; this.signs[i] = buildInfo.signs[i]; } this.numUnbounded = buildInfo.numUnbounded; this.matrixId = 0; var _g2 = 0; var _g3 = this.numUnbounded; while(_g2 < _g3) { var i1 = _g2++; var idx = buildInfo.iUnbounded[i1]; this.iUnbounded[i1] = idx; this.matrixId |= 1 << idx; } } computeImpulses(info,mass,relVels,impulses,dImpulses,impulseFactor,noCheck) { var _g = 0; var _g1 = this.numUnbounded; while(_g < _g1) { var i = _g++; var idx = this.iUnbounded[i]; var row = info.rows[idx]; var relVel = relVels[idx]; this.b[idx] = row.rhs * impulseFactor - relVel - row.cfm * impulses[idx]; } var invMassWithoutCfm = mass._invMassWithoutCfm; var _g2 = 0; var _g3 = this.numBounded; while(_g2 < _g3) { var i1 = _g2++; var idx1 = this.iBounded[i1]; var sign = this.signs[i1]; var row1 = info.rows[idx1]; var oldImpulse = impulses[idx1]; var impulse = sign < 0 ? row1.minImpulse : sign > 0 ? row1.maxImpulse : 0; var dImpulse = impulse - oldImpulse; dImpulses[idx1] = dImpulse; if(dImpulse != 0) { var _g21 = 0; var _g31 = this.numUnbounded; while(_g21 < _g31) { var j = _g21++; var idx2 = this.iUnbounded[j]; var dRelVel = invMassWithoutCfm[idx1][idx2] * dImpulse; var _g22 = idx2; var _g32 = this.b; _g32[_g22] = _g32[_g22] - dRelVel; } } } var indices = this.iUnbounded; var n = this.numUnbounded; var id = 0; var _g4 = 0; var _g11 = n; while(_g4 < _g11) { var i2 = _g4++; id |= 1 << indices[i2]; } var massMatrix; if(mass._cacheComputed[id]) { massMatrix = mass._cachedSubmatrices[id]; } else { mass.computeSubmatrix(id,indices,n); mass._cacheComputed[id] = true; massMatrix = mass._cachedSubmatrices[id]; } var ok = true; var _g41 = 0; var _g5 = this.numUnbounded; while(_g41 < _g5) { var i3 = _g41++; var idx3 = this.iUnbounded[i3]; var row2 = info.rows[idx3]; var oldImpulse1 = impulses[idx3]; var impulse1 = oldImpulse1; var _g42 = 0; var _g51 = this.numUnbounded; while(_g42 < _g51) { var j1 = _g42++; var idx21 = this.iUnbounded[j1]; impulse1 += this.b[idx21] * massMatrix[i3][j1]; } if(impulse1 < row2.minImpulse - oimo.common.Setting.directMlcpSolverEps || impulse1 > row2.maxImpulse + oimo.common.Setting.directMlcpSolverEps) { ok = false; break; } dImpulses[idx3] = impulse1 - oldImpulse1; } if(noCheck) { return true; } if(!ok) { return false; } var _g6 = 0; var _g7 = this.numBounded; while(_g6 < _g7) { var i4 = _g6++; var idx4 = this.iBounded[i4]; var row3 = info.rows[idx4]; var sign1 = this.signs[i4]; var error = 0; var newImpulse = impulses[idx4] + dImpulses[idx4]; var relVel1 = relVels[idx4]; var _g61 = 0; var _g71 = info.numRows; while(_g61 < _g71) { var j2 = _g61++; relVel1 += invMassWithoutCfm[idx4][j2] * dImpulses[j2]; } error = row3.rhs * impulseFactor - relVel1 - row3.cfm * newImpulse; if(sign1 < 0 && error > oimo.common.Setting.directMlcpSolverEps || sign1 > 0 && error < -oimo.common.Setting.directMlcpSolverEps) { ok = false; break; } } return ok; } } oimo.dynamics.constraint.solver.direct.BoundaryBuildInfo = class oimo_dynamics_constraint_solver_direct_BoundaryBuildInfo { constructor(size) { this.size = size; this.numBounded = 0; var this1 = new Array(size); this.iBounded = this1; var this2 = new Array(size); this.signs = this2; this.numUnbounded = 0; var this3 = new Array(size); this.iUnbounded = this3; } } oimo.dynamics.constraint.solver.direct.BoundaryBuilder = class oimo_dynamics_constraint_solver_direct_BoundaryBuilder { constructor(maxRows) { this.maxRows = maxRows; this.numBoundaries = 0; var this1 = new Array(1 << maxRows); this.boundaries = this1; this.bbInfo = new oimo.dynamics.constraint.solver.direct.BoundaryBuildInfo(maxRows); } buildBoundariesRecursive(info,i) { if(i == info.numRows) { if(this.boundaries[this.numBoundaries] == null) { this.boundaries[this.numBoundaries] = new oimo.dynamics.constraint.solver.direct.Boundary(this.maxRows); } this.boundaries[this.numBoundaries++].init(this.bbInfo); return; } var row = info.rows[i]; var lowerLimitEnabled = row.minImpulse > -1e65536; var upperLimitEnabled = row.maxImpulse < 1e65536; var disabled = row.minImpulse == 0 && row.maxImpulse == 0; if(disabled) { var _this = this.bbInfo; _this.iBounded[_this.numBounded] = i; _this.signs[_this.numBounded] = 0; _this.numBounded++; this.buildBoundariesRecursive(info,i + 1); this.bbInfo.numBounded--; return; } var _this1 = this.bbInfo; _this1.iUnbounded[_this1.numUnbounded] = i; _this1.numUnbounded++; this.buildBoundariesRecursive(info,i + 1); this.bbInfo.numUnbounded--; if(lowerLimitEnabled) { var _this2 = this.bbInfo; _this2.iBounded[_this2.numBounded] = i; _this2.signs[_this2.numBounded] = -1; _this2.numBounded++; this.buildBoundariesRecursive(info,i + 1); this.bbInfo.numBounded--; } if(upperLimitEnabled) { var _this3 = this.bbInfo; _this3.iBounded[_this3.numBounded] = i; _this3.signs[_this3.numBounded] = 1; _this3.numBounded++; this.buildBoundariesRecursive(info,i + 1); this.bbInfo.numBounded--; } } buildBoundaries(info) { this.numBoundaries = 0; var _this = this.bbInfo; _this.numBounded = 0; _this.numUnbounded = 0; this.buildBoundariesRecursive(info,0); } } oimo.dynamics.constraint.solver.direct.BoundarySelector = class oimo_dynamics_constraint_solver_direct_BoundarySelector { constructor(n) { this.n = n; var this1 = new Array(n); this.indices = this1; var this2 = new Array(n); this.tmpIndices = this2; var _g = 0; var _g1 = n; while(_g < _g1) { var i = _g++; this.indices[i] = i; } } getIndex(i) { return this.indices[i]; } select(index) { var i = 0; while(this.indices[i] != index) ++i; while(i > 0) { var tmp = this.indices[i]; this.indices[i] = this.indices[i - 1]; this.indices[i - 1] = tmp; --i; } } setSize(size) { var numSmaller = 0; var numGreater = 0; var _g = 0; var _g1 = this.n; while(_g < _g1) { var i = _g++; var idx = this.indices[i]; if(idx < size) { this.tmpIndices[numSmaller] = idx; ++numSmaller; } else { this.tmpIndices[size + numGreater] = idx; ++numGreater; } } var tmp = this.indices; this.indices = this.tmpIndices; this.tmpIndices = tmp; } } oimo.dynamics.constraint.solver.direct.DirectJointConstraintSolver = class oimo_dynamics_constraint_solver_direct_DirectJointConstraintSolver extends oimo.dynamics.constraint.ConstraintSolver { constructor(joint) { super(); this.joint = joint; this.info = new oimo.dynamics.constraint.info.joint.JointSolverInfo(); var maxRows = oimo.common.Setting.maxJacobianRows; this.massMatrix = new oimo.dynamics.constraint.solver.direct.MassMatrix(maxRows); this.boundaryBuilder = new oimo.dynamics.constraint.solver.direct.BoundaryBuilder(maxRows); var this1 = new Array(maxRows); this.massData = this1; var _g = 0; var _g1 = this.massData.length; while(_g < _g1) { var i = _g++; this.massData[i] = new oimo.dynamics.constraint.solver.common.JointSolverMassDataRow(); } var numMaxBoundaries = this.boundaryBuilder.boundaries.length; this.velBoundarySelector = new oimo.dynamics.constraint.solver.direct.BoundarySelector(numMaxBoundaries); this.posBoundarySelector = new oimo.dynamics.constraint.solver.direct.BoundarySelector(numMaxBoundaries); var this2 = new Array(maxRows); this.relVels = this2; var this3 = new Array(maxRows); this.impulses = this3; var this4 = new Array(maxRows); this.dImpulses = this4; var this5 = new Array(maxRows); this.dTotalImpulses = this5; var _g2 = 0; var _g3 = maxRows; while(_g2 < _g3) { var i1 = _g2++; this.relVels[i1] = 0; this.impulses[i1] = 0; this.dImpulses[i1] = 0; this.dTotalImpulses[i1] = 0; } } preSolveVelocity(timeStep) { this.joint._syncAnchors(); this.joint._getVelocitySolverInfo(timeStep,this.info); this._b1 = this.info.b1; this._b2 = this.info.b2; this.massMatrix.computeInvMass(this.info,this.massData); var _this = this.boundaryBuilder; _this.numBoundaries = 0; var _this1 = _this.bbInfo; _this1.numBounded = 0; _this1.numUnbounded = 0; _this.buildBoundariesRecursive(this.info,0); var _this2 = this.velBoundarySelector; var size = this.boundaryBuilder.numBoundaries; var numSmaller = 0; var numGreater = 0; var _g = 0; var _g1 = _this2.n; while(_g < _g1) { var i = _g++; var idx = _this2.indices[i]; if(idx < size) { _this2.tmpIndices[numSmaller] = idx; ++numSmaller; } else { _this2.tmpIndices[size + numGreater] = idx; ++numGreater; } } var tmp = _this2.indices; _this2.indices = _this2.tmpIndices; _this2.tmpIndices = tmp; } warmStart(timeStep) { var factor = this.joint._positionCorrectionAlgorithm == oimo.dynamics.constraint.PositionCorrectionAlgorithm.BAUMGARTE ? oimo.common.Setting.jointWarmStartingFactorForBaungarte : oimo.common.Setting.jointWarmStartingFactor; factor *= timeStep.dtRatio; if(factor <= 0) { var _g = 0; var _g1 = this.info.numRows; while(_g < _g1) { var i = _g++; var row = this.info.rows[i]; var _this = row.impulse; _this.impulse = 0; _this.impulseM = 0; _this.impulseP = 0; } return; } var _g2 = 0; var _g11 = this.info.numRows; while(_g2 < _g11) { var i1 = _g2++; var row1 = this.info.rows[i1]; var imp = row1.impulse; var impulse = imp.impulse * factor; if(impulse < row1.minImpulse) { impulse = row1.minImpulse; } else if(impulse > row1.maxImpulse) { impulse = row1.maxImpulse; } imp.impulse = impulse; if(row1.motorMaxImpulse > 0) { var impulseM = imp.impulseM * factor; var max = row1.motorMaxImpulse; if(impulseM < -max) { impulseM = -max; } else if(impulseM > max) { impulseM = max; } imp.impulseM = impulseM; } else { imp.impulseM = 0; } this.dImpulses[i1] = imp.impulse + imp.impulseM; } var impulses = this.dImpulses; var linearSet = false; var angularSet = false; var lv1; var lv1X; var lv1Y; var lv1Z; var lv2; var lv2X; var lv2Y; var lv2Z; var av1; var av1X; var av1Y; var av1Z; var av2; var av2X; var av2Y; var av2Z; lv1X = this._b1._velX; lv1Y = this._b1._velY; lv1Z = this._b1._velZ; lv2X = this._b2._velX; lv2Y = this._b2._velY; lv2Z = this._b2._velZ; av1X = this._b1._angVelX; av1Y = this._b1._angVelY; av1Z = this._b1._angVelZ; av2X = this._b2._angVelX; av2Y = this._b2._angVelY; av2Z = this._b2._angVelZ; var _g3 = 0; var _g12 = this.info.numRows; while(_g3 < _g12) { var i2 = _g3++; var row2 = this.info.rows[i2]; var j = row2.jacobian; var md = this.massData[i2]; var imp1 = impulses[i2]; if((j.flag & 1) != 0) { lv1X += md.invMLin1X * imp1; lv1Y += md.invMLin1Y * imp1; lv1Z += md.invMLin1Z * imp1; lv2X += md.invMLin2X * -imp1; lv2Y += md.invMLin2Y * -imp1; lv2Z += md.invMLin2Z * -imp1; linearSet = true; } if((j.flag & 2) != 0) { av1X += md.invMAng1X * imp1; av1Y += md.invMAng1Y * imp1; av1Z += md.invMAng1Z * imp1; av2X += md.invMAng2X * -imp1; av2Y += md.invMAng2Y * -imp1; av2Z += md.invMAng2Z * -imp1; angularSet = true; } } if(linearSet) { this._b1._velX = lv1X; this._b1._velY = lv1Y; this._b1._velZ = lv1Z; this._b2._velX = lv2X; this._b2._velY = lv2Y; this._b2._velZ = lv2Z; } if(angularSet) { this._b1._angVelX = av1X; this._b1._angVelY = av1Y; this._b1._angVelZ = av1Z; this._b2._angVelX = av2X; this._b2._angVelY = av2Y; this._b2._angVelZ = av2Z; } } solveVelocity() { var numRows = this.info.numRows; var lv1; var lv1X; var lv1Y; var lv1Z; var lv2; var lv2X; var lv2Y; var lv2Z; var av1; var av1X; var av1Y; var av1Z; var av2; var av2X; var av2Y; var av2Z; lv1X = this._b1._velX; lv1Y = this._b1._velY; lv1Z = this._b1._velZ; lv2X = this._b2._velX; lv2Y = this._b2._velY; lv2Z = this._b2._velZ; av1X = this._b1._angVelX; av1Y = this._b1._angVelY; av1Z = this._b1._angVelZ; av2X = this._b2._angVelX; av2Y = this._b2._angVelY; av2Z = this._b2._angVelZ; var _g = 0; var _g1 = numRows; while(_g < _g1) { var i = _g++; var row = this.info.rows[i]; var imp = row.impulse; var j = row.jacobian; var relVel = 0; relVel += lv1X * j.lin1X + lv1Y * j.lin1Y + lv1Z * j.lin1Z; relVel -= lv2X * j.lin2X + lv2Y * j.lin2Y + lv2Z * j.lin2Z; relVel += av1X * j.ang1X + av1Y * j.ang1Y + av1Z * j.ang1Z; relVel -= av2X * j.ang2X + av2Y * j.ang2Y + av2Z * j.ang2Z; this.relVels[i] = relVel; this.impulses[i] = imp.impulse; this.dTotalImpulses[i] = 0; } var invMass = this.massMatrix._invMassWithoutCfm; var _g2 = 0; var _g3 = numRows; while(_g2 < _g3) { var i1 = _g2++; var row1 = this.info.rows[i1]; var imp1 = row1.impulse; var md = this.massData[i1]; if(row1.motorMaxImpulse > 0) { var oldImpulseM = imp1.impulseM; var impulseM = oldImpulseM + md.massWithoutCfm * (-row1.motorSpeed - this.relVels[i1]); var maxImpulseM = row1.motorMaxImpulse; if(impulseM < -maxImpulseM) { impulseM = -maxImpulseM; } else if(impulseM > maxImpulseM) { impulseM = maxImpulseM; } imp1.impulseM = impulseM; var dImpulseM = impulseM - oldImpulseM; this.dTotalImpulses[i1] = dImpulseM; var _g21 = 0; var _g31 = numRows; while(_g21 < _g31) { var j1 = _g21++; var _g22 = j1; var _g32 = this.relVels; _g32[_g22] = _g32[_g22] + dImpulseM * invMass[i1][j1]; } } } var solved = false; var _g4 = 0; var _g5 = this.boundaryBuilder.numBoundaries; while(_g4 < _g5) { var i2 = _g4++; var idx = this.velBoundarySelector.indices[i2]; var b = this.boundaryBuilder.boundaries[idx]; if(b.computeImpulses(this.info,this.massMatrix,this.relVels,this.impulses,this.dImpulses,1,false)) { var _g41 = 0; var _g51 = numRows; while(_g41 < _g51) { var j2 = _g41++; var row2 = this.info.rows[j2]; var imp2 = row2.impulse; var dimp = this.dImpulses[j2]; imp2.impulse += dimp; var _g42 = j2; var _g52 = this.dTotalImpulses; _g52[_g42] = _g52[_g42] + dimp; } var impulses = this.dTotalImpulses; var linearSet = false; var angularSet = false; var lv11; var lv1X1; var lv1Y1; var lv1Z1; var lv21; var lv2X1; var lv2Y1; var lv2Z1; var av11; var av1X1; var av1Y1; var av1Z1; var av21; var av2X1; var av2Y1; var av2Z1; lv1X1 = this._b1._velX; lv1Y1 = this._b1._velY; lv1Z1 = this._b1._velZ; lv2X1 = this._b2._velX; lv2Y1 = this._b2._velY; lv2Z1 = this._b2._velZ; av1X1 = this._b1._angVelX; av1Y1 = this._b1._angVelY; av1Z1 = this._b1._angVelZ; av2X1 = this._b2._angVelX; av2Y1 = this._b2._angVelY; av2Z1 = this._b2._angVelZ; var _g6 = 0; var _g11 = this.info.numRows; while(_g6 < _g11) { var i3 = _g6++; var row3 = this.info.rows[i3]; var j3 = row3.jacobian; var md1 = this.massData[i3]; var imp3 = impulses[i3]; if((j3.flag & 1) != 0) { lv1X1 += md1.invMLin1X * imp3; lv1Y1 += md1.invMLin1Y * imp3; lv1Z1 += md1.invMLin1Z * imp3; lv2X1 += md1.invMLin2X * -imp3; lv2Y1 += md1.invMLin2Y * -imp3; lv2Z1 += md1.invMLin2Z * -imp3; linearSet = true; } if((j3.flag & 2) != 0) { av1X1 += md1.invMAng1X * imp3; av1Y1 += md1.invMAng1Y * imp3; av1Z1 += md1.invMAng1Z * imp3; av2X1 += md1.invMAng2X * -imp3; av2Y1 += md1.invMAng2Y * -imp3; av2Z1 += md1.invMAng2Z * -imp3; angularSet = true; } } if(linearSet) { this._b1._velX = lv1X1; this._b1._velY = lv1Y1; this._b1._velZ = lv1Z1; this._b2._velX = lv2X1; this._b2._velY = lv2Y1; this._b2._velZ = lv2Z1; } if(angularSet) { this._b1._angVelX = av1X1; this._b1._angVelY = av1Y1; this._b1._angVelZ = av1Z1; this._b2._angVelX = av2X1; this._b2._angVelY = av2Y1; this._b2._angVelZ = av2Z1; } var _this = this.velBoundarySelector; var i4 = 0; while(_this.indices[i4] != idx) ++i4; while(i4 > 0) { var tmp = _this.indices[i4]; _this.indices[i4] = _this.indices[i4 - 1]; _this.indices[i4 - 1] = tmp; --i4; } solved = true; break; } } if(!solved) { console.log("src/oimo/dynamics/constraint/solver/direct/DirectJointConstraintSolver.hx:335:","could not find solution. (velocity)"); return; } } postSolveVelocity(timeStep) { var lin; var linX; var linY; var linZ; var ang; var angX; var angY; var angZ; linX = 0; linY = 0; linZ = 0; angX = 0; angY = 0; angZ = 0; var _g = 0; var _g1 = this.info.numRows; while(_g < _g1) { var i = _g++; var row = this.info.rows[i]; var imp = row.impulse; var j = row.jacobian; if((j.flag & 1) != 0) { linX += j.lin1X * imp.impulse; linY += j.lin1Y * imp.impulse; linZ += j.lin1Z * imp.impulse; } else if((j.flag & 2) != 0) { angX += j.ang1X * imp.impulse; angY += j.ang1Y * imp.impulse; angZ += j.ang1Z * imp.impulse; } } this.joint._appliedForceX = linX * timeStep.invDt; this.joint._appliedForceY = linY * timeStep.invDt; this.joint._appliedForceZ = linZ * timeStep.invDt; this.joint._appliedTorqueX = angX * timeStep.invDt; this.joint._appliedTorqueY = angY * timeStep.invDt; this.joint._appliedTorqueZ = angZ * timeStep.invDt; } preSolvePosition(timeStep) { this.joint._syncAnchors(); this.joint._getPositionSolverInfo(this.info); this._b1 = this.info.b1; this._b2 = this.info.b2; this.massMatrix.computeInvMass(this.info,this.massData); var _this = this.boundaryBuilder; _this.numBoundaries = 0; var _this1 = _this.bbInfo; _this1.numBounded = 0; _this1.numUnbounded = 0; _this.buildBoundariesRecursive(this.info,0); var _this2 = this.posBoundarySelector; var size = this.boundaryBuilder.numBoundaries; var numSmaller = 0; var numGreater = 0; var _g = 0; var _g1 = _this2.n; while(_g < _g1) { var i = _g++; var idx = _this2.indices[i]; if(idx < size) { _this2.tmpIndices[numSmaller] = idx; ++numSmaller; } else { _this2.tmpIndices[size + numGreater] = idx; ++numGreater; } } var tmp = _this2.indices; _this2.indices = _this2.tmpIndices; _this2.tmpIndices = tmp; var _g2 = 0; var _g11 = this.info.numRows; while(_g2 < _g11) { var i1 = _g2++; this.info.rows[i1].impulse.impulseP = 0; } } solvePositionSplitImpulse() { var numRows = this.info.numRows; var lv1; var lv1X; var lv1Y; var lv1Z; var lv2; var lv2X; var lv2Y; var lv2Z; var av1; var av1X; var av1Y; var av1Z; var av2; var av2X; var av2Y; var av2Z; lv1X = this._b1._pseudoVelX; lv1Y = this._b1._pseudoVelY; lv1Z = this._b1._pseudoVelZ; lv2X = this._b2._pseudoVelX; lv2Y = this._b2._pseudoVelY; lv2Z = this._b2._pseudoVelZ; av1X = this._b1._angPseudoVelX; av1Y = this._b1._angPseudoVelY; av1Z = this._b1._angPseudoVelZ; av2X = this._b2._angPseudoVelX; av2Y = this._b2._angPseudoVelY; av2Z = this._b2._angPseudoVelZ; var _g = 0; var _g1 = numRows; while(_g < _g1) { var i = _g++; var row = this.info.rows[i]; var imp = row.impulse; var j = row.jacobian; var relVel = 0; relVel += lv1X * j.lin1X + lv1Y * j.lin1Y + lv1Z * j.lin1Z; relVel -= lv2X * j.lin2X + lv2Y * j.lin2Y + lv2Z * j.lin2Z; relVel += av1X * j.ang1X + av1Y * j.ang1Y + av1Z * j.ang1Z; relVel -= av2X * j.ang2X + av2Y * j.ang2Y + av2Z * j.ang2Z; this.relVels[i] = relVel; this.impulses[i] = imp.impulseP; } var solved = false; var _g2 = 0; var _g3 = this.boundaryBuilder.numBoundaries; while(_g2 < _g3) { var i1 = _g2++; var idx = this.posBoundarySelector.indices[i1]; var b = this.boundaryBuilder.boundaries[idx]; if(b.computeImpulses(this.info,this.massMatrix,this.relVels,this.impulses,this.dImpulses,oimo.common.Setting.positionSplitImpulseBaumgarte,false)) { var _g21 = 0; var _g31 = numRows; while(_g21 < _g31) { var j1 = _g21++; var row1 = this.info.rows[j1]; var imp1 = row1.impulse; var dimp = this.dImpulses[j1]; imp1.impulseP += dimp; } var impulses = this.dImpulses; var linearSet = false; var angularSet = false; var lv11; var lv1X1; var lv1Y1; var lv1Z1; var lv21; var lv2X1; var lv2Y1; var lv2Z1; var av11; var av1X1; var av1Y1; var av1Z1; var av21; var av2X1; var av2Y1; var av2Z1; lv1X1 = this._b1._pseudoVelX; lv1Y1 = this._b1._pseudoVelY; lv1Z1 = this._b1._pseudoVelZ; lv2X1 = this._b2._pseudoVelX; lv2Y1 = this._b2._pseudoVelY; lv2Z1 = this._b2._pseudoVelZ; av1X1 = this._b1._angPseudoVelX; av1Y1 = this._b1._angPseudoVelY; av1Z1 = this._b1._angPseudoVelZ; av2X1 = this._b2._angPseudoVelX; av2Y1 = this._b2._angPseudoVelY; av2Z1 = this._b2._angPseudoVelZ; var _g4 = 0; var _g11 = this.info.numRows; while(_g4 < _g11) { var i2 = _g4++; var row2 = this.info.rows[i2]; var j2 = row2.jacobian; var md = this.massData[i2]; var imp2 = impulses[i2]; if((j2.flag & 1) != 0) { lv1X1 += md.invMLin1X * imp2; lv1Y1 += md.invMLin1Y * imp2; lv1Z1 += md.invMLin1Z * imp2; lv2X1 += md.invMLin2X * -imp2; lv2Y1 += md.invMLin2Y * -imp2; lv2Z1 += md.invMLin2Z * -imp2; linearSet = true; } if((j2.flag & 2) != 0) { av1X1 += md.invMAng1X * imp2; av1Y1 += md.invMAng1Y * imp2; av1Z1 += md.invMAng1Z * imp2; av2X1 += md.invMAng2X * -imp2; av2Y1 += md.invMAng2Y * -imp2; av2Z1 += md.invMAng2Z * -imp2; angularSet = true; } } if(linearSet) { this._b1._pseudoVelX = lv1X1; this._b1._pseudoVelY = lv1Y1; this._b1._pseudoVelZ = lv1Z1; this._b2._pseudoVelX = lv2X1; this._b2._pseudoVelY = lv2Y1; this._b2._pseudoVelZ = lv2Z1; } if(angularSet) { this._b1._angPseudoVelX = av1X1; this._b1._angPseudoVelY = av1Y1; this._b1._angPseudoVelZ = av1Z1; this._b2._angPseudoVelX = av2X1; this._b2._angPseudoVelY = av2Y1; this._b2._angPseudoVelZ = av2Z1; } var _this = this.posBoundarySelector; var i3 = 0; while(_this.indices[i3] != idx) ++i3; while(i3 > 0) { var tmp = _this.indices[i3]; _this.indices[i3] = _this.indices[i3 - 1]; _this.indices[i3 - 1] = tmp; --i3; } solved = true; break; } } if(!solved) { console.log("src/oimo/dynamics/constraint/solver/direct/DirectJointConstraintSolver.hx:450:","could not find solution. (split impulse)"); return; } } solvePositionNgs(timeStep) { this.joint._syncAnchors(); this.joint._getPositionSolverInfo(this.info); this._b1 = this.info.b1; this._b2 = this.info.b2; this.massMatrix.computeInvMass(this.info,this.massData); var _this = this.boundaryBuilder; _this.numBoundaries = 0; var _this1 = _this.bbInfo; _this1.numBounded = 0; _this1.numUnbounded = 0; _this.buildBoundariesRecursive(this.info,0); var _this2 = this.posBoundarySelector; var size = this.boundaryBuilder.numBoundaries; var numSmaller = 0; var numGreater = 0; var _g = 0; var _g1 = _this2.n; while(_g < _g1) { var i = _g++; var idx = _this2.indices[i]; if(idx < size) { _this2.tmpIndices[numSmaller] = idx; ++numSmaller; } else { _this2.tmpIndices[size + numGreater] = idx; ++numGreater; } } var tmp = _this2.indices; _this2.indices = _this2.tmpIndices; _this2.tmpIndices = tmp; var numRows = this.info.numRows; var _g2 = 0; var _g11 = numRows; while(_g2 < _g11) { var i1 = _g2++; var row = this.info.rows[i1]; var imp = row.impulse; var j = row.jacobian; this.relVels[i1] = 0; this.impulses[i1] = imp.impulseP; } var solved = false; var _g21 = 0; var _g3 = this.boundaryBuilder.numBoundaries; while(_g21 < _g3) { var i2 = _g21++; var idx1 = this.posBoundarySelector.indices[i2]; var b = this.boundaryBuilder.boundaries[idx1]; if(b.computeImpulses(this.info,this.massMatrix,this.relVels,this.impulses,this.dImpulses,oimo.common.Setting.positionNgsBaumgarte,false)) { var _g22 = 0; var _g31 = numRows; while(_g22 < _g31) { var j1 = _g22++; var row1 = this.info.rows[j1]; var imp1 = row1.impulse; var dimp = this.dImpulses[j1]; imp1.impulseP += dimp; } var impulses = this.dImpulses; var linearSet = false; var angularSet = false; var lv1; var lv1X; var lv1Y; var lv1Z; var lv2; var lv2X; var lv2Y; var lv2Z; var av1; var av1X; var av1Y; var av1Z; var av2; var av2X; var av2Y; var av2Z; lv1X = 0; lv1Y = 0; lv1Z = 0; lv2X = 0; lv2Y = 0; lv2Z = 0; av1X = 0; av1Y = 0; av1Z = 0; av2X = 0; av2Y = 0; av2Z = 0; var _g4 = 0; var _g12 = this.info.numRows; while(_g4 < _g12) { var i3 = _g4++; var row2 = this.info.rows[i3]; var j2 = row2.jacobian; var md = this.massData[i3]; var imp2 = impulses[i3]; if((j2.flag & 1) != 0) { lv1X += md.invMLin1X * imp2; lv1Y += md.invMLin1Y * imp2; lv1Z += md.invMLin1Z * imp2; lv2X += md.invMLin2X * -imp2; lv2Y += md.invMLin2Y * -imp2; lv2Z += md.invMLin2Z * -imp2; linearSet = true; } if((j2.flag & 2) != 0) { av1X += md.invMAng1X * imp2; av1Y += md.invMAng1Y * imp2; av1Z += md.invMAng1Z * imp2; av2X += md.invMAng2X * -imp2; av2Y += md.invMAng2Y * -imp2; av2Z += md.invMAng2Z * -imp2; angularSet = true; } } if(linearSet) { var _this3 = this._b1; _this3._transform._positionX += lv1X; _this3._transform._positionY += lv1Y; _this3._transform._positionZ += lv1Z; var _this4 = this._b2; _this4._transform._positionX += lv2X; _this4._transform._positionY += lv2Y; _this4._transform._positionZ += lv2Z; } if(angularSet) { var _this5 = this._b1; var theta = Math.sqrt(av1X * av1X + av1Y * av1Y + av1Z * av1Z); var halfTheta = theta * 0.5; var rotationToSinAxisFactor; var cosHalfTheta; if(halfTheta < 0.5) { var ht2 = halfTheta * halfTheta; rotationToSinAxisFactor = 0.5 * (1 - ht2 * 0.166666666666666657 + ht2 * ht2 * 0.00833333333333333322); cosHalfTheta = 1 - ht2 * 0.5 + ht2 * ht2 * 0.0416666666666666644; } else { rotationToSinAxisFactor = Math.sin(halfTheta) / theta; cosHalfTheta = Math.cos(halfTheta); } var sinAxis; var sinAxisX; var sinAxisY; var sinAxisZ; sinAxisX = av1X * rotationToSinAxisFactor; sinAxisY = av1Y * rotationToSinAxisFactor; sinAxisZ = av1Z * rotationToSinAxisFactor; var dq; var dqX; var dqY; var dqZ; var dqW; dqX = sinAxisX; dqY = sinAxisY; dqZ = sinAxisZ; dqW = cosHalfTheta; var q; var qX; var qY; var qZ; var qW; var e00 = _this5._transform._rotation00; var e11 = _this5._transform._rotation11; var e22 = _this5._transform._rotation22; var t = e00 + e11 + e22; var s; if(t > 0) { s = Math.sqrt(t + 1); qW = 0.5 * s; s = 0.5 / s; qX = (_this5._transform._rotation21 - _this5._transform._rotation12) * s; qY = (_this5._transform._rotation02 - _this5._transform._rotation20) * s; qZ = (_this5._transform._rotation10 - _this5._transform._rotation01) * s; } else if(e00 > e11) { if(e00 > e22) { s = Math.sqrt(e00 - e11 - e22 + 1); qX = 0.5 * s; s = 0.5 / s; qY = (_this5._transform._rotation01 + _this5._transform._rotation10) * s; qZ = (_this5._transform._rotation02 + _this5._transform._rotation20) * s; qW = (_this5._transform._rotation21 - _this5._transform._rotation12) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); qZ = 0.5 * s; s = 0.5 / s; qX = (_this5._transform._rotation02 + _this5._transform._rotation20) * s; qY = (_this5._transform._rotation12 + _this5._transform._rotation21) * s; qW = (_this5._transform._rotation10 - _this5._transform._rotation01) * s; } } else if(e11 > e22) { s = Math.sqrt(e11 - e22 - e00 + 1); qY = 0.5 * s; s = 0.5 / s; qX = (_this5._transform._rotation01 + _this5._transform._rotation10) * s; qZ = (_this5._transform._rotation12 + _this5._transform._rotation21) * s; qW = (_this5._transform._rotation02 - _this5._transform._rotation20) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); qZ = 0.5 * s; s = 0.5 / s; qX = (_this5._transform._rotation02 + _this5._transform._rotation20) * s; qY = (_this5._transform._rotation12 + _this5._transform._rotation21) * s; qW = (_this5._transform._rotation10 - _this5._transform._rotation01) * s; } qX = dqW * qX + dqX * qW + dqY * qZ - dqZ * qY; qY = dqW * qY - dqX * qZ + dqY * qW + dqZ * qX; qZ = dqW * qZ + dqX * qY - dqY * qX + dqZ * qW; qW = dqW * qW - dqX * qX - dqY * qY - dqZ * qZ; var l = qX * qX + qY * qY + qZ * qZ + qW * qW; if(l > 1e-32) { l = 1 / Math.sqrt(l); } qX *= l; qY *= l; qZ *= l; qW *= l; var x = qX; var y = qY; var z = qZ; var w = qW; var x2 = 2 * x; var y2 = 2 * y; var z2 = 2 * z; var xx = x * x2; var yy = y * y2; var zz = z * z2; var xy = x * y2; var yz = y * z2; var xz = x * z2; var wx = w * x2; var wy = w * y2; var wz = w * z2; _this5._transform._rotation00 = 1 - yy - zz; _this5._transform._rotation01 = xy - wz; _this5._transform._rotation02 = xz + wy; _this5._transform._rotation10 = xy + wz; _this5._transform._rotation11 = 1 - xx - zz; _this5._transform._rotation12 = yz - wx; _this5._transform._rotation20 = xz - wy; _this5._transform._rotation21 = yz + wx; _this5._transform._rotation22 = 1 - xx - yy; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = _this5._transform._rotation00 * _this5._invLocalInertia00 + _this5._transform._rotation01 * _this5._invLocalInertia10 + _this5._transform._rotation02 * _this5._invLocalInertia20; __tmp__01 = _this5._transform._rotation00 * _this5._invLocalInertia01 + _this5._transform._rotation01 * _this5._invLocalInertia11 + _this5._transform._rotation02 * _this5._invLocalInertia21; __tmp__02 = _this5._transform._rotation00 * _this5._invLocalInertia02 + _this5._transform._rotation01 * _this5._invLocalInertia12 + _this5._transform._rotation02 * _this5._invLocalInertia22; __tmp__10 = _this5._transform._rotation10 * _this5._invLocalInertia00 + _this5._transform._rotation11 * _this5._invLocalInertia10 + _this5._transform._rotation12 * _this5._invLocalInertia20; __tmp__11 = _this5._transform._rotation10 * _this5._invLocalInertia01 + _this5._transform._rotation11 * _this5._invLocalInertia11 + _this5._transform._rotation12 * _this5._invLocalInertia21; __tmp__12 = _this5._transform._rotation10 * _this5._invLocalInertia02 + _this5._transform._rotation11 * _this5._invLocalInertia12 + _this5._transform._rotation12 * _this5._invLocalInertia22; __tmp__20 = _this5._transform._rotation20 * _this5._invLocalInertia00 + _this5._transform._rotation21 * _this5._invLocalInertia10 + _this5._transform._rotation22 * _this5._invLocalInertia20; __tmp__21 = _this5._transform._rotation20 * _this5._invLocalInertia01 + _this5._transform._rotation21 * _this5._invLocalInertia11 + _this5._transform._rotation22 * _this5._invLocalInertia21; __tmp__22 = _this5._transform._rotation20 * _this5._invLocalInertia02 + _this5._transform._rotation21 * _this5._invLocalInertia12 + _this5._transform._rotation22 * _this5._invLocalInertia22; _this5._invInertia00 = __tmp__00; _this5._invInertia01 = __tmp__01; _this5._invInertia02 = __tmp__02; _this5._invInertia10 = __tmp__10; _this5._invInertia11 = __tmp__11; _this5._invInertia12 = __tmp__12; _this5._invInertia20 = __tmp__20; _this5._invInertia21 = __tmp__21; _this5._invInertia22 = __tmp__22; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = _this5._invInertia00 * _this5._transform._rotation00 + _this5._invInertia01 * _this5._transform._rotation01 + _this5._invInertia02 * _this5._transform._rotation02; __tmp__011 = _this5._invInertia00 * _this5._transform._rotation10 + _this5._invInertia01 * _this5._transform._rotation11 + _this5._invInertia02 * _this5._transform._rotation12; __tmp__021 = _this5._invInertia00 * _this5._transform._rotation20 + _this5._invInertia01 * _this5._transform._rotation21 + _this5._invInertia02 * _this5._transform._rotation22; __tmp__101 = _this5._invInertia10 * _this5._transform._rotation00 + _this5._invInertia11 * _this5._transform._rotation01 + _this5._invInertia12 * _this5._transform._rotation02; __tmp__111 = _this5._invInertia10 * _this5._transform._rotation10 + _this5._invInertia11 * _this5._transform._rotation11 + _this5._invInertia12 * _this5._transform._rotation12; __tmp__121 = _this5._invInertia10 * _this5._transform._rotation20 + _this5._invInertia11 * _this5._transform._rotation21 + _this5._invInertia12 * _this5._transform._rotation22; __tmp__201 = _this5._invInertia20 * _this5._transform._rotation00 + _this5._invInertia21 * _this5._transform._rotation01 + _this5._invInertia22 * _this5._transform._rotation02; __tmp__211 = _this5._invInertia20 * _this5._transform._rotation10 + _this5._invInertia21 * _this5._transform._rotation11 + _this5._invInertia22 * _this5._transform._rotation12; __tmp__221 = _this5._invInertia20 * _this5._transform._rotation20 + _this5._invInertia21 * _this5._transform._rotation21 + _this5._invInertia22 * _this5._transform._rotation22; _this5._invInertia00 = __tmp__001; _this5._invInertia01 = __tmp__011; _this5._invInertia02 = __tmp__021; _this5._invInertia10 = __tmp__101; _this5._invInertia11 = __tmp__111; _this5._invInertia12 = __tmp__121; _this5._invInertia20 = __tmp__201; _this5._invInertia21 = __tmp__211; _this5._invInertia22 = __tmp__221; _this5._invInertia00 *= _this5._rotFactor.x; _this5._invInertia01 *= _this5._rotFactor.x; _this5._invInertia02 *= _this5._rotFactor.x; _this5._invInertia10 *= _this5._rotFactor.y; _this5._invInertia11 *= _this5._rotFactor.y; _this5._invInertia12 *= _this5._rotFactor.y; _this5._invInertia20 *= _this5._rotFactor.z; _this5._invInertia21 *= _this5._rotFactor.z; _this5._invInertia22 *= _this5._rotFactor.z; var _this6 = this._b2; var theta1 = Math.sqrt(av2X * av2X + av2Y * av2Y + av2Z * av2Z); var halfTheta1 = theta1 * 0.5; var rotationToSinAxisFactor1; var cosHalfTheta1; if(halfTheta1 < 0.5) { var ht21 = halfTheta1 * halfTheta1; rotationToSinAxisFactor1 = 0.5 * (1 - ht21 * 0.166666666666666657 + ht21 * ht21 * 0.00833333333333333322); cosHalfTheta1 = 1 - ht21 * 0.5 + ht21 * ht21 * 0.0416666666666666644; } else { rotationToSinAxisFactor1 = Math.sin(halfTheta1) / theta1; cosHalfTheta1 = Math.cos(halfTheta1); } var sinAxis1; var sinAxisX1; var sinAxisY1; var sinAxisZ1; sinAxisX1 = av2X * rotationToSinAxisFactor1; sinAxisY1 = av2Y * rotationToSinAxisFactor1; sinAxisZ1 = av2Z * rotationToSinAxisFactor1; var dq1; var dqX1; var dqY1; var dqZ1; var dqW1; dqX1 = sinAxisX1; dqY1 = sinAxisY1; dqZ1 = sinAxisZ1; dqW1 = cosHalfTheta1; var q1; var qX1; var qY1; var qZ1; var qW1; var e001 = _this6._transform._rotation00; var e111 = _this6._transform._rotation11; var e221 = _this6._transform._rotation22; var t1 = e001 + e111 + e221; var s1; if(t1 > 0) { s1 = Math.sqrt(t1 + 1); qW1 = 0.5 * s1; s1 = 0.5 / s1; qX1 = (_this6._transform._rotation21 - _this6._transform._rotation12) * s1; qY1 = (_this6._transform._rotation02 - _this6._transform._rotation20) * s1; qZ1 = (_this6._transform._rotation10 - _this6._transform._rotation01) * s1; } else if(e001 > e111) { if(e001 > e221) { s1 = Math.sqrt(e001 - e111 - e221 + 1); qX1 = 0.5 * s1; s1 = 0.5 / s1; qY1 = (_this6._transform._rotation01 + _this6._transform._rotation10) * s1; qZ1 = (_this6._transform._rotation02 + _this6._transform._rotation20) * s1; qW1 = (_this6._transform._rotation21 - _this6._transform._rotation12) * s1; } else { s1 = Math.sqrt(e221 - e001 - e111 + 1); qZ1 = 0.5 * s1; s1 = 0.5 / s1; qX1 = (_this6._transform._rotation02 + _this6._transform._rotation20) * s1; qY1 = (_this6._transform._rotation12 + _this6._transform._rotation21) * s1; qW1 = (_this6._transform._rotation10 - _this6._transform._rotation01) * s1; } } else if(e111 > e221) { s1 = Math.sqrt(e111 - e221 - e001 + 1); qY1 = 0.5 * s1; s1 = 0.5 / s1; qX1 = (_this6._transform._rotation01 + _this6._transform._rotation10) * s1; qZ1 = (_this6._transform._rotation12 + _this6._transform._rotation21) * s1; qW1 = (_this6._transform._rotation02 - _this6._transform._rotation20) * s1; } else { s1 = Math.sqrt(e221 - e001 - e111 + 1); qZ1 = 0.5 * s1; s1 = 0.5 / s1; qX1 = (_this6._transform._rotation02 + _this6._transform._rotation20) * s1; qY1 = (_this6._transform._rotation12 + _this6._transform._rotation21) * s1; qW1 = (_this6._transform._rotation10 - _this6._transform._rotation01) * s1; } qX1 = dqW1 * qX1 + dqX1 * qW1 + dqY1 * qZ1 - dqZ1 * qY1; qY1 = dqW1 * qY1 - dqX1 * qZ1 + dqY1 * qW1 + dqZ1 * qX1; qZ1 = dqW1 * qZ1 + dqX1 * qY1 - dqY1 * qX1 + dqZ1 * qW1; qW1 = dqW1 * qW1 - dqX1 * qX1 - dqY1 * qY1 - dqZ1 * qZ1; var l1 = qX1 * qX1 + qY1 * qY1 + qZ1 * qZ1 + qW1 * qW1; if(l1 > 1e-32) { l1 = 1 / Math.sqrt(l1); } qX1 *= l1; qY1 *= l1; qZ1 *= l1; qW1 *= l1; var x1 = qX1; var y1 = qY1; var z1 = qZ1; var w1 = qW1; var x21 = 2 * x1; var y21 = 2 * y1; var z21 = 2 * z1; var xx1 = x1 * x21; var yy1 = y1 * y21; var zz1 = z1 * z21; var xy1 = x1 * y21; var yz1 = y1 * z21; var xz1 = x1 * z21; var wx1 = w1 * x21; var wy1 = w1 * y21; var wz1 = w1 * z21; _this6._transform._rotation00 = 1 - yy1 - zz1; _this6._transform._rotation01 = xy1 - wz1; _this6._transform._rotation02 = xz1 + wy1; _this6._transform._rotation10 = xy1 + wz1; _this6._transform._rotation11 = 1 - xx1 - zz1; _this6._transform._rotation12 = yz1 - wx1; _this6._transform._rotation20 = xz1 - wy1; _this6._transform._rotation21 = yz1 + wx1; _this6._transform._rotation22 = 1 - xx1 - yy1; var __tmp__002; var __tmp__012; var __tmp__022; var __tmp__102; var __tmp__112; var __tmp__122; var __tmp__202; var __tmp__212; var __tmp__222; __tmp__002 = _this6._transform._rotation00 * _this6._invLocalInertia00 + _this6._transform._rotation01 * _this6._invLocalInertia10 + _this6._transform._rotation02 * _this6._invLocalInertia20; __tmp__012 = _this6._transform._rotation00 * _this6._invLocalInertia01 + _this6._transform._rotation01 * _this6._invLocalInertia11 + _this6._transform._rotation02 * _this6._invLocalInertia21; __tmp__022 = _this6._transform._rotation00 * _this6._invLocalInertia02 + _this6._transform._rotation01 * _this6._invLocalInertia12 + _this6._transform._rotation02 * _this6._invLocalInertia22; __tmp__102 = _this6._transform._rotation10 * _this6._invLocalInertia00 + _this6._transform._rotation11 * _this6._invLocalInertia10 + _this6._transform._rotation12 * _this6._invLocalInertia20; __tmp__112 = _this6._transform._rotation10 * _this6._invLocalInertia01 + _this6._transform._rotation11 * _this6._invLocalInertia11 + _this6._transform._rotation12 * _this6._invLocalInertia21; __tmp__122 = _this6._transform._rotation10 * _this6._invLocalInertia02 + _this6._transform._rotation11 * _this6._invLocalInertia12 + _this6._transform._rotation12 * _this6._invLocalInertia22; __tmp__202 = _this6._transform._rotation20 * _this6._invLocalInertia00 + _this6._transform._rotation21 * _this6._invLocalInertia10 + _this6._transform._rotation22 * _this6._invLocalInertia20; __tmp__212 = _this6._transform._rotation20 * _this6._invLocalInertia01 + _this6._transform._rotation21 * _this6._invLocalInertia11 + _this6._transform._rotation22 * _this6._invLocalInertia21; __tmp__222 = _this6._transform._rotation20 * _this6._invLocalInertia02 + _this6._transform._rotation21 * _this6._invLocalInertia12 + _this6._transform._rotation22 * _this6._invLocalInertia22; _this6._invInertia00 = __tmp__002; _this6._invInertia01 = __tmp__012; _this6._invInertia02 = __tmp__022; _this6._invInertia10 = __tmp__102; _this6._invInertia11 = __tmp__112; _this6._invInertia12 = __tmp__122; _this6._invInertia20 = __tmp__202; _this6._invInertia21 = __tmp__212; _this6._invInertia22 = __tmp__222; var __tmp__003; var __tmp__013; var __tmp__023; var __tmp__103; var __tmp__113; var __tmp__123; var __tmp__203; var __tmp__213; var __tmp__223; __tmp__003 = _this6._invInertia00 * _this6._transform._rotation00 + _this6._invInertia01 * _this6._transform._rotation01 + _this6._invInertia02 * _this6._transform._rotation02; __tmp__013 = _this6._invInertia00 * _this6._transform._rotation10 + _this6._invInertia01 * _this6._transform._rotation11 + _this6._invInertia02 * _this6._transform._rotation12; __tmp__023 = _this6._invInertia00 * _this6._transform._rotation20 + _this6._invInertia01 * _this6._transform._rotation21 + _this6._invInertia02 * _this6._transform._rotation22; __tmp__103 = _this6._invInertia10 * _this6._transform._rotation00 + _this6._invInertia11 * _this6._transform._rotation01 + _this6._invInertia12 * _this6._transform._rotation02; __tmp__113 = _this6._invInertia10 * _this6._transform._rotation10 + _this6._invInertia11 * _this6._transform._rotation11 + _this6._invInertia12 * _this6._transform._rotation12; __tmp__123 = _this6._invInertia10 * _this6._transform._rotation20 + _this6._invInertia11 * _this6._transform._rotation21 + _this6._invInertia12 * _this6._transform._rotation22; __tmp__203 = _this6._invInertia20 * _this6._transform._rotation00 + _this6._invInertia21 * _this6._transform._rotation01 + _this6._invInertia22 * _this6._transform._rotation02; __tmp__213 = _this6._invInertia20 * _this6._transform._rotation10 + _this6._invInertia21 * _this6._transform._rotation11 + _this6._invInertia22 * _this6._transform._rotation12; __tmp__223 = _this6._invInertia20 * _this6._transform._rotation20 + _this6._invInertia21 * _this6._transform._rotation21 + _this6._invInertia22 * _this6._transform._rotation22; _this6._invInertia00 = __tmp__003; _this6._invInertia01 = __tmp__013; _this6._invInertia02 = __tmp__023; _this6._invInertia10 = __tmp__103; _this6._invInertia11 = __tmp__113; _this6._invInertia12 = __tmp__123; _this6._invInertia20 = __tmp__203; _this6._invInertia21 = __tmp__213; _this6._invInertia22 = __tmp__223; _this6._invInertia00 *= _this6._rotFactor.x; _this6._invInertia01 *= _this6._rotFactor.x; _this6._invInertia02 *= _this6._rotFactor.x; _this6._invInertia10 *= _this6._rotFactor.y; _this6._invInertia11 *= _this6._rotFactor.y; _this6._invInertia12 *= _this6._rotFactor.y; _this6._invInertia20 *= _this6._rotFactor.z; _this6._invInertia21 *= _this6._rotFactor.z; _this6._invInertia22 *= _this6._rotFactor.z; } var _this7 = this.posBoundarySelector; var i4 = 0; while(_this7.indices[i4] != idx1) ++i4; while(i4 > 0) { var tmp1 = _this7.indices[i4]; _this7.indices[i4] = _this7.indices[i4 - 1]; _this7.indices[i4 - 1] = tmp1; --i4; } solved = true; break; } } if(!solved) { console.log("src/oimo/dynamics/constraint/solver/direct/DirectJointConstraintSolver.hx:502:","could not find solution. (NGS)"); return; } } postSolve() { this.joint._syncAnchors(); this.joint._checkDestruction(); } } oimo.dynamics.constraint.solver.direct.MassMatrix = class oimo_dynamics_constraint_solver_direct_MassMatrix { constructor(size) { this._size = size; var this1 = new Array(this._size); this.tmpMatrix = this1; var this2 = new Array(this._size); this._invMass = this2; var this3 = new Array(this._size); this._invMassWithoutCfm = this3; var _g = 0; var _g1 = this._size; while(_g < _g1) { var i = _g++; var this4 = this.tmpMatrix; var this5 = new Array(this._size); this4[i] = this5; var this6 = this._invMass; var this7 = new Array(this._size); this6[i] = this7; var this8 = this._invMassWithoutCfm; var this9 = new Array(this._size); this8[i] = this9; var _g2 = 0; var _g11 = this._size; while(_g2 < _g11) { var j = _g2++; this.tmpMatrix[i][j] = 0; this._invMass[i][j] = 0; this._invMassWithoutCfm[i][j] = 0; } } this._maxSubmatrixId = 1 << this._size; var this10 = new Array(this._maxSubmatrixId); this._cacheComputed = this10; var this11 = new Array(this._maxSubmatrixId); this._cachedSubmatrices = this11; var _g21 = 0; var _g3 = this._maxSubmatrixId; while(_g21 < _g3) { var i1 = _g21++; var t = i1; t = (t & 85) + (t >> 1 & 85); t = (t & 51) + (t >> 2 & 51); t = (t & 15) + (t >> 4 & 15); var matrixSize = t; var this12 = new Array(matrixSize); var subMatrix = this12; var _g22 = 0; var _g31 = matrixSize; while(_g22 < _g31) { var j1 = _g22++; var this13 = new Array(matrixSize); subMatrix[j1] = this13; var _g23 = 0; var _g32 = matrixSize; while(_g23 < _g32) { var k = _g23++; subMatrix[j1][k] = 0; } } this._cacheComputed[i1] = false; this._cachedSubmatrices[i1] = subMatrix; } } computeSubmatrix(id,indices,size) { var _g = 0; var _g1 = size; while(_g < _g1) { var i = _g++; var ii = indices[i]; var _g2 = 0; var _g11 = size; while(_g2 < _g11) { var j = _g2++; this.tmpMatrix[i][j] = this._invMass[ii][indices[j]]; } } var src = this.tmpMatrix; var dst = this._cachedSubmatrices[id]; var srci; var dsti; var srcj; var dstj; var diag; switch(size) { case 4: srci = src[0]; dsti = dst[0]; diag = 1 / srci[0]; dsti[0] = diag; srci[1] = srci[1] * diag; srci[2] = srci[2] * diag; srci[3] = srci[3] * diag; srcj = src[1]; dstj = dst[1]; dstj[0] = -diag * srcj[0]; srcj[1] = srcj[1] - srci[1] * srcj[0]; srcj[2] = srcj[2] - srci[2] * srcj[0]; srcj[3] = srcj[3] - srci[3] * srcj[0]; srcj = src[2]; dstj = dst[2]; dstj[0] = -diag * srcj[0]; srcj[1] = srcj[1] - srci[1] * srcj[0]; srcj[2] = srcj[2] - srci[2] * srcj[0]; srcj[3] = srcj[3] - srci[3] * srcj[0]; srcj = src[3]; dstj = dst[3]; dstj[0] = -diag * srcj[0]; srcj[1] = srcj[1] - srci[1] * srcj[0]; srcj[2] = srcj[2] - srci[2] * srcj[0]; srcj[3] = srcj[3] - srci[3] * srcj[0]; srci = src[1]; dsti = dst[1]; diag = 1 / srci[1]; dsti[1] = diag; dsti[0] = dsti[0] * diag; srci[2] = srci[2] * diag; srci[3] = srci[3] * diag; srcj = src[0]; dstj = dst[0]; dstj[0] = dstj[0] - dsti[0] * srcj[1]; srcj[2] = srcj[2] - srci[2] * srcj[1]; srcj[3] = srcj[3] - srci[3] * srcj[1]; srcj = src[2]; dstj = dst[2]; dstj[0] = dstj[0] - dsti[0] * srcj[1]; dstj[1] = -diag * srcj[1]; srcj[2] = srcj[2] - srci[2] * srcj[1]; srcj[3] = srcj[3] - srci[3] * srcj[1]; srcj = src[3]; dstj = dst[3]; dstj[0] = dstj[0] - dsti[0] * srcj[1]; dstj[1] = -diag * srcj[1]; srcj[2] = srcj[2] - srci[2] * srcj[1]; srcj[3] = srcj[3] - srci[3] * srcj[1]; srci = src[2]; dsti = dst[2]; diag = 1 / srci[2]; dsti[2] = diag; dsti[0] = dsti[0] * diag; dsti[1] = dsti[1] * diag; srci[3] = srci[3] * diag; srcj = src[0]; dstj = dst[0]; dstj[0] = dstj[0] - dsti[0] * srcj[2]; srcj[3] = srcj[3] - srci[3] * srcj[2]; srcj = src[1]; dstj = dst[1]; dstj[0] = dstj[0] - dsti[0] * srcj[2]; dstj[1] = dstj[1] - dsti[1] * srcj[2]; srcj[3] = srcj[3] - srci[3] * srcj[2]; srcj = src[3]; dstj = dst[3]; dstj[0] = dstj[0] - dsti[0] * srcj[2]; dstj[1] = dstj[1] - dsti[1] * srcj[2]; dstj[2] = -diag * srcj[2]; srcj[3] = srcj[3] - srci[3] * srcj[2]; srci = src[3]; dsti = dst[3]; diag = 1 / srci[3]; dsti[3] = diag; dsti[0] = dsti[0] * diag; dsti[1] = dsti[1] * diag; dsti[2] = dsti[2] * diag; srcj = src[0]; dstj = dst[0]; dstj[0] = dstj[0] - dsti[0] * srcj[3]; srcj = src[1]; dstj = dst[1]; dstj[0] = dstj[0] - dsti[0] * srcj[3]; dstj[1] = dstj[1] - dsti[1] * srcj[3]; srcj = src[2]; dstj = dst[2]; dstj[0] = dstj[0] - dsti[0] * srcj[3]; dstj[1] = dstj[1] - dsti[1] * srcj[3]; dstj[2] = dstj[2] - dsti[2] * srcj[3]; dsti = dst[1]; dst[0][1] = dsti[0]; dsti = dst[2]; dst[0][2] = dsti[0]; dst[1][2] = dsti[1]; dsti = dst[3]; dst[0][3] = dsti[0]; dst[1][3] = dsti[1]; dst[2][3] = dsti[2]; break; case 5: srci = src[0]; dsti = dst[0]; diag = 1 / srci[0]; dsti[0] = diag; srci[1] = srci[1] * diag; srci[2] = srci[2] * diag; srci[3] = srci[3] * diag; srci[4] = srci[4] * diag; srcj = src[1]; dstj = dst[1]; dstj[0] = -diag * srcj[0]; srcj[1] = srcj[1] - srci[1] * srcj[0]; srcj[2] = srcj[2] - srci[2] * srcj[0]; srcj[3] = srcj[3] - srci[3] * srcj[0]; srcj[4] = srcj[4] - srci[4] * srcj[0]; srcj = src[2]; dstj = dst[2]; dstj[0] = -diag * srcj[0]; srcj[1] = srcj[1] - srci[1] * srcj[0]; srcj[2] = srcj[2] - srci[2] * srcj[0]; srcj[3] = srcj[3] - srci[3] * srcj[0]; srcj[4] = srcj[4] - srci[4] * srcj[0]; srcj = src[3]; dstj = dst[3]; dstj[0] = -diag * srcj[0]; srcj[1] = srcj[1] - srci[1] * srcj[0]; srcj[2] = srcj[2] - srci[2] * srcj[0]; srcj[3] = srcj[3] - srci[3] * srcj[0]; srcj[4] = srcj[4] - srci[4] * srcj[0]; srcj = src[4]; dstj = dst[4]; dstj[0] = -diag * srcj[0]; srcj[1] = srcj[1] - srci[1] * srcj[0]; srcj[2] = srcj[2] - srci[2] * srcj[0]; srcj[3] = srcj[3] - srci[3] * srcj[0]; srcj[4] = srcj[4] - srci[4] * srcj[0]; srci = src[1]; dsti = dst[1]; diag = 1 / srci[1]; dsti[1] = diag; dsti[0] = dsti[0] * diag; srci[2] = srci[2] * diag; srci[3] = srci[3] * diag; srci[4] = srci[4] * diag; srcj = src[0]; dstj = dst[0]; dstj[0] = dstj[0] - dsti[0] * srcj[1]; srcj[2] = srcj[2] - srci[2] * srcj[1]; srcj[3] = srcj[3] - srci[3] * srcj[1]; srcj[4] = srcj[4] - srci[4] * srcj[1]; srcj = src[2]; dstj = dst[2]; dstj[0] = dstj[0] - dsti[0] * srcj[1]; dstj[1] = -diag * srcj[1]; srcj[2] = srcj[2] - srci[2] * srcj[1]; srcj[3] = srcj[3] - srci[3] * srcj[1]; srcj[4] = srcj[4] - srci[4] * srcj[1]; srcj = src[3]; dstj = dst[3]; dstj[0] = dstj[0] - dsti[0] * srcj[1]; dstj[1] = -diag * srcj[1]; srcj[2] = srcj[2] - srci[2] * srcj[1]; srcj[3] = srcj[3] - srci[3] * srcj[1]; srcj[4] = srcj[4] - srci[4] * srcj[1]; srcj = src[4]; dstj = dst[4]; dstj[0] = dstj[0] - dsti[0] * srcj[1]; dstj[1] = -diag * srcj[1]; srcj[2] = srcj[2] - srci[2] * srcj[1]; srcj[3] = srcj[3] - srci[3] * srcj[1]; srcj[4] = srcj[4] - srci[4] * srcj[1]; srci = src[2]; dsti = dst[2]; diag = 1 / srci[2]; dsti[2] = diag; dsti[0] = dsti[0] * diag; dsti[1] = dsti[1] * diag; srci[3] = srci[3] * diag; srci[4] = srci[4] * diag; srcj = src[0]; dstj = dst[0]; dstj[0] = dstj[0] - dsti[0] * srcj[2]; srcj[3] = srcj[3] - srci[3] * srcj[2]; srcj[4] = srcj[4] - srci[4] * srcj[2]; srcj = src[1]; dstj = dst[1]; dstj[0] = dstj[0] - dsti[0] * srcj[2]; dstj[1] = dstj[1] - dsti[1] * srcj[2]; srcj[3] = srcj[3] - srci[3] * srcj[2]; srcj[4] = srcj[4] - srci[4] * srcj[2]; srcj = src[3]; dstj = dst[3]; dstj[0] = dstj[0] - dsti[0] * srcj[2]; dstj[1] = dstj[1] - dsti[1] * srcj[2]; dstj[2] = -diag * srcj[2]; srcj[3] = srcj[3] - srci[3] * srcj[2]; srcj[4] = srcj[4] - srci[4] * srcj[2]; srcj = src[4]; dstj = dst[4]; dstj[0] = dstj[0] - dsti[0] * srcj[2]; dstj[1] = dstj[1] - dsti[1] * srcj[2]; dstj[2] = -diag * srcj[2]; srcj[3] = srcj[3] - srci[3] * srcj[2]; srcj[4] = srcj[4] - srci[4] * srcj[2]; srci = src[3]; dsti = dst[3]; diag = 1 / srci[3]; dsti[3] = diag; dsti[0] = dsti[0] * diag; dsti[1] = dsti[1] * diag; dsti[2] = dsti[2] * diag; srci[4] = srci[4] * diag; srcj = src[0]; dstj = dst[0]; dstj[0] = dstj[0] - dsti[0] * srcj[3]; srcj[4] = srcj[4] - srci[4] * srcj[3]; srcj = src[1]; dstj = dst[1]; dstj[0] = dstj[0] - dsti[0] * srcj[3]; dstj[1] = dstj[1] - dsti[1] * srcj[3]; srcj[4] = srcj[4] - srci[4] * srcj[3]; srcj = src[2]; dstj = dst[2]; dstj[0] = dstj[0] - dsti[0] * srcj[3]; dstj[1] = dstj[1] - dsti[1] * srcj[3]; dstj[2] = dstj[2] - dsti[2] * srcj[3]; srcj[4] = srcj[4] - srci[4] * srcj[3]; srcj = src[4]; dstj = dst[4]; dstj[0] = dstj[0] - dsti[0] * srcj[3]; dstj[1] = dstj[1] - dsti[1] * srcj[3]; dstj[2] = dstj[2] - dsti[2] * srcj[3]; dstj[3] = -diag * srcj[3]; srcj[4] = srcj[4] - srci[4] * srcj[3]; srci = src[4]; dsti = dst[4]; diag = 1 / srci[4]; dsti[4] = diag; dsti[0] = dsti[0] * diag; dsti[1] = dsti[1] * diag; dsti[2] = dsti[2] * diag; dsti[3] = dsti[3] * diag; srcj = src[0]; dstj = dst[0]; dstj[0] = dstj[0] - dsti[0] * srcj[4]; srcj = src[1]; dstj = dst[1]; dstj[0] = dstj[0] - dsti[0] * srcj[4]; dstj[1] = dstj[1] - dsti[1] * srcj[4]; srcj = src[2]; dstj = dst[2]; dstj[0] = dstj[0] - dsti[0] * srcj[4]; dstj[1] = dstj[1] - dsti[1] * srcj[4]; dstj[2] = dstj[2] - dsti[2] * srcj[4]; srcj = src[3]; dstj = dst[3]; dstj[0] = dstj[0] - dsti[0] * srcj[4]; dstj[1] = dstj[1] - dsti[1] * srcj[4]; dstj[2] = dstj[2] - dsti[2] * srcj[4]; dstj[3] = dstj[3] - dsti[3] * srcj[4]; dsti = dst[1]; dst[0][1] = dsti[0]; dsti = dst[2]; dst[0][2] = dsti[0]; dst[1][2] = dsti[1]; dsti = dst[3]; dst[0][3] = dsti[0]; dst[1][3] = dsti[1]; dst[2][3] = dsti[2]; dsti = dst[4]; dst[0][4] = dsti[0]; dst[1][4] = dsti[1]; dst[2][4] = dsti[2]; dst[3][4] = dsti[3]; break; case 6: srci = src[0]; dsti = dst[0]; diag = 1 / srci[0]; dsti[0] = diag; srci[1] = srci[1] * diag; srci[2] = srci[2] * diag; srci[3] = srci[3] * diag; srci[4] = srci[4] * diag; srci[5] = srci[5] * diag; srcj = src[1]; dstj = dst[1]; dstj[0] = -diag * srcj[0]; srcj[1] = srcj[1] - srci[1] * srcj[0]; srcj[2] = srcj[2] - srci[2] * srcj[0]; srcj[3] = srcj[3] - srci[3] * srcj[0]; srcj[4] = srcj[4] - srci[4] * srcj[0]; srcj[5] = srcj[5] - srci[5] * srcj[0]; srcj = src[2]; dstj = dst[2]; dstj[0] = -diag * srcj[0]; srcj[1] = srcj[1] - srci[1] * srcj[0]; srcj[2] = srcj[2] - srci[2] * srcj[0]; srcj[3] = srcj[3] - srci[3] * srcj[0]; srcj[4] = srcj[4] - srci[4] * srcj[0]; srcj[5] = srcj[5] - srci[5] * srcj[0]; srcj = src[3]; dstj = dst[3]; dstj[0] = -diag * srcj[0]; srcj[1] = srcj[1] - srci[1] * srcj[0]; srcj[2] = srcj[2] - srci[2] * srcj[0]; srcj[3] = srcj[3] - srci[3] * srcj[0]; srcj[4] = srcj[4] - srci[4] * srcj[0]; srcj[5] = srcj[5] - srci[5] * srcj[0]; srcj = src[4]; dstj = dst[4]; dstj[0] = -diag * srcj[0]; srcj[1] = srcj[1] - srci[1] * srcj[0]; srcj[2] = srcj[2] - srci[2] * srcj[0]; srcj[3] = srcj[3] - srci[3] * srcj[0]; srcj[4] = srcj[4] - srci[4] * srcj[0]; srcj[5] = srcj[5] - srci[5] * srcj[0]; srcj = src[5]; dstj = dst[5]; dstj[0] = -diag * srcj[0]; srcj[1] = srcj[1] - srci[1] * srcj[0]; srcj[2] = srcj[2] - srci[2] * srcj[0]; srcj[3] = srcj[3] - srci[3] * srcj[0]; srcj[4] = srcj[4] - srci[4] * srcj[0]; srcj[5] = srcj[5] - srci[5] * srcj[0]; srci = src[1]; dsti = dst[1]; diag = 1 / srci[1]; dsti[1] = diag; dsti[0] = dsti[0] * diag; srci[2] = srci[2] * diag; srci[3] = srci[3] * diag; srci[4] = srci[4] * diag; srci[5] = srci[5] * diag; srcj = src[0]; dstj = dst[0]; dstj[0] = dstj[0] - dsti[0] * srcj[1]; srcj[2] = srcj[2] - srci[2] * srcj[1]; srcj[3] = srcj[3] - srci[3] * srcj[1]; srcj[4] = srcj[4] - srci[4] * srcj[1]; srcj[5] = srcj[5] - srci[5] * srcj[1]; srcj = src[2]; dstj = dst[2]; dstj[0] = dstj[0] - dsti[0] * srcj[1]; dstj[1] = -diag * srcj[1]; srcj[2] = srcj[2] - srci[2] * srcj[1]; srcj[3] = srcj[3] - srci[3] * srcj[1]; srcj[4] = srcj[4] - srci[4] * srcj[1]; srcj[5] = srcj[5] - srci[5] * srcj[1]; srcj = src[3]; dstj = dst[3]; dstj[0] = dstj[0] - dsti[0] * srcj[1]; dstj[1] = -diag * srcj[1]; srcj[2] = srcj[2] - srci[2] * srcj[1]; srcj[3] = srcj[3] - srci[3] * srcj[1]; srcj[4] = srcj[4] - srci[4] * srcj[1]; srcj[5] = srcj[5] - srci[5] * srcj[1]; srcj = src[4]; dstj = dst[4]; dstj[0] = dstj[0] - dsti[0] * srcj[1]; dstj[1] = -diag * srcj[1]; srcj[2] = srcj[2] - srci[2] * srcj[1]; srcj[3] = srcj[3] - srci[3] * srcj[1]; srcj[4] = srcj[4] - srci[4] * srcj[1]; srcj[5] = srcj[5] - srci[5] * srcj[1]; srcj = src[5]; dstj = dst[5]; dstj[0] = dstj[0] - dsti[0] * srcj[1]; dstj[1] = -diag * srcj[1]; srcj[2] = srcj[2] - srci[2] * srcj[1]; srcj[3] = srcj[3] - srci[3] * srcj[1]; srcj[4] = srcj[4] - srci[4] * srcj[1]; srcj[5] = srcj[5] - srci[5] * srcj[1]; srci = src[2]; dsti = dst[2]; diag = 1 / srci[2]; dsti[2] = diag; dsti[0] = dsti[0] * diag; dsti[1] = dsti[1] * diag; srci[3] = srci[3] * diag; srci[4] = srci[4] * diag; srci[5] = srci[5] * diag; srcj = src[0]; dstj = dst[0]; dstj[0] = dstj[0] - dsti[0] * srcj[2]; srcj[3] = srcj[3] - srci[3] * srcj[2]; srcj[4] = srcj[4] - srci[4] * srcj[2]; srcj[5] = srcj[5] - srci[5] * srcj[2]; srcj = src[1]; dstj = dst[1]; dstj[0] = dstj[0] - dsti[0] * srcj[2]; dstj[1] = dstj[1] - dsti[1] * srcj[2]; srcj[3] = srcj[3] - srci[3] * srcj[2]; srcj[4] = srcj[4] - srci[4] * srcj[2]; srcj[5] = srcj[5] - srci[5] * srcj[2]; srcj = src[3]; dstj = dst[3]; dstj[0] = dstj[0] - dsti[0] * srcj[2]; dstj[1] = dstj[1] - dsti[1] * srcj[2]; dstj[2] = -diag * srcj[2]; srcj[3] = srcj[3] - srci[3] * srcj[2]; srcj[4] = srcj[4] - srci[4] * srcj[2]; srcj[5] = srcj[5] - srci[5] * srcj[2]; srcj = src[4]; dstj = dst[4]; dstj[0] = dstj[0] - dsti[0] * srcj[2]; dstj[1] = dstj[1] - dsti[1] * srcj[2]; dstj[2] = -diag * srcj[2]; srcj[3] = srcj[3] - srci[3] * srcj[2]; srcj[4] = srcj[4] - srci[4] * srcj[2]; srcj[5] = srcj[5] - srci[5] * srcj[2]; srcj = src[5]; dstj = dst[5]; dstj[0] = dstj[0] - dsti[0] * srcj[2]; dstj[1] = dstj[1] - dsti[1] * srcj[2]; dstj[2] = -diag * srcj[2]; srcj[3] = srcj[3] - srci[3] * srcj[2]; srcj[4] = srcj[4] - srci[4] * srcj[2]; srcj[5] = srcj[5] - srci[5] * srcj[2]; srci = src[3]; dsti = dst[3]; diag = 1 / srci[3]; dsti[3] = diag; dsti[0] = dsti[0] * diag; dsti[1] = dsti[1] * diag; dsti[2] = dsti[2] * diag; srci[4] = srci[4] * diag; srci[5] = srci[5] * diag; srcj = src[0]; dstj = dst[0]; dstj[0] = dstj[0] - dsti[0] * srcj[3]; srcj[4] = srcj[4] - srci[4] * srcj[3]; srcj[5] = srcj[5] - srci[5] * srcj[3]; srcj = src[1]; dstj = dst[1]; dstj[0] = dstj[0] - dsti[0] * srcj[3]; dstj[1] = dstj[1] - dsti[1] * srcj[3]; srcj[4] = srcj[4] - srci[4] * srcj[3]; srcj[5] = srcj[5] - srci[5] * srcj[3]; srcj = src[2]; dstj = dst[2]; dstj[0] = dstj[0] - dsti[0] * srcj[3]; dstj[1] = dstj[1] - dsti[1] * srcj[3]; dstj[2] = dstj[2] - dsti[2] * srcj[3]; srcj[4] = srcj[4] - srci[4] * srcj[3]; srcj[5] = srcj[5] - srci[5] * srcj[3]; srcj = src[4]; dstj = dst[4]; dstj[0] = dstj[0] - dsti[0] * srcj[3]; dstj[1] = dstj[1] - dsti[1] * srcj[3]; dstj[2] = dstj[2] - dsti[2] * srcj[3]; dstj[3] = -diag * srcj[3]; srcj[4] = srcj[4] - srci[4] * srcj[3]; srcj[5] = srcj[5] - srci[5] * srcj[3]; srcj = src[5]; dstj = dst[5]; dstj[0] = dstj[0] - dsti[0] * srcj[3]; dstj[1] = dstj[1] - dsti[1] * srcj[3]; dstj[2] = dstj[2] - dsti[2] * srcj[3]; dstj[3] = -diag * srcj[3]; srcj[4] = srcj[4] - srci[4] * srcj[3]; srcj[5] = srcj[5] - srci[5] * srcj[3]; srci = src[4]; dsti = dst[4]; diag = 1 / srci[4]; dsti[4] = diag; dsti[0] = dsti[0] * diag; dsti[1] = dsti[1] * diag; dsti[2] = dsti[2] * diag; dsti[3] = dsti[3] * diag; srci[5] = srci[5] * diag; srcj = src[0]; dstj = dst[0]; dstj[0] = dstj[0] - dsti[0] * srcj[4]; srcj[5] = srcj[5] - srci[5] * srcj[4]; srcj = src[1]; dstj = dst[1]; dstj[0] = dstj[0] - dsti[0] * srcj[4]; dstj[1] = dstj[1] - dsti[1] * srcj[4]; srcj[5] = srcj[5] - srci[5] * srcj[4]; srcj = src[2]; dstj = dst[2]; dstj[0] = dstj[0] - dsti[0] * srcj[4]; dstj[1] = dstj[1] - dsti[1] * srcj[4]; dstj[2] = dstj[2] - dsti[2] * srcj[4]; srcj[5] = srcj[5] - srci[5] * srcj[4]; srcj = src[3]; dstj = dst[3]; dstj[0] = dstj[0] - dsti[0] * srcj[4]; dstj[1] = dstj[1] - dsti[1] * srcj[4]; dstj[2] = dstj[2] - dsti[2] * srcj[4]; dstj[3] = dstj[3] - dsti[3] * srcj[4]; srcj[5] = srcj[5] - srci[5] * srcj[4]; srcj = src[5]; dstj = dst[5]; dstj[0] = dstj[0] - dsti[0] * srcj[4]; dstj[1] = dstj[1] - dsti[1] * srcj[4]; dstj[2] = dstj[2] - dsti[2] * srcj[4]; dstj[3] = dstj[3] - dsti[3] * srcj[4]; dstj[4] = -diag * srcj[4]; srcj[5] = srcj[5] - srci[5] * srcj[4]; srci = src[5]; dsti = dst[5]; diag = 1 / srci[5]; dsti[5] = diag; dsti[0] = dsti[0] * diag; dsti[1] = dsti[1] * diag; dsti[2] = dsti[2] * diag; dsti[3] = dsti[3] * diag; dsti[4] = dsti[4] * diag; srcj = src[0]; dstj = dst[0]; dstj[0] = dstj[0] - dsti[0] * srcj[5]; srcj = src[1]; dstj = dst[1]; dstj[0] = dstj[0] - dsti[0] * srcj[5]; dstj[1] = dstj[1] - dsti[1] * srcj[5]; srcj = src[2]; dstj = dst[2]; dstj[0] = dstj[0] - dsti[0] * srcj[5]; dstj[1] = dstj[1] - dsti[1] * srcj[5]; dstj[2] = dstj[2] - dsti[2] * srcj[5]; srcj = src[3]; dstj = dst[3]; dstj[0] = dstj[0] - dsti[0] * srcj[5]; dstj[1] = dstj[1] - dsti[1] * srcj[5]; dstj[2] = dstj[2] - dsti[2] * srcj[5]; dstj[3] = dstj[3] - dsti[3] * srcj[5]; srcj = src[4]; dstj = dst[4]; dstj[0] = dstj[0] - dsti[0] * srcj[5]; dstj[1] = dstj[1] - dsti[1] * srcj[5]; dstj[2] = dstj[2] - dsti[2] * srcj[5]; dstj[3] = dstj[3] - dsti[3] * srcj[5]; dstj[4] = dstj[4] - dsti[4] * srcj[5]; dsti = dst[1]; dst[0][1] = dsti[0]; dsti = dst[2]; dst[0][2] = dsti[0]; dst[1][2] = dsti[1]; dsti = dst[3]; dst[0][3] = dsti[0]; dst[1][3] = dsti[1]; dst[2][3] = dsti[2]; dsti = dst[4]; dst[0][4] = dsti[0]; dst[1][4] = dsti[1]; dst[2][4] = dsti[2]; dst[3][4] = dsti[3]; dsti = dst[5]; dst[0][5] = dsti[0]; dst[1][5] = dsti[1]; dst[2][5] = dsti[2]; dst[3][5] = dsti[3]; dst[4][5] = dsti[4]; break; default: var _g21 = 0; var _g3 = size; while(_g21 < _g3) { var i1 = _g21++; srci = src[i1]; dsti = dst[i1]; var diag1 = 1 / srci[i1]; dsti[i1] = diag1; var _g22 = 0; var _g31 = i1; while(_g22 < _g31) { var j1 = _g22++; dsti[j1] = dsti[j1] * diag1; } var _g4 = i1 + 1; var _g5 = size; while(_g4 < _g5) { var j2 = _g4++; srci[j2] = srci[j2] * diag1; } var _g6 = 0; var _g7 = i1; while(_g6 < _g7) { var j3 = _g6++; srcj = src[j3]; dstj = dst[j3]; var _g61 = 0; var _g71 = j3 + 1; while(_g61 < _g71) { var k = _g61++; dstj[k] = dstj[k] - dsti[k] * srcj[i1]; } var _g8 = i1 + 1; var _g9 = size; while(_g8 < _g9) { var k1 = _g8++; srcj[k1] = srcj[k1] - srci[k1] * srcj[i1]; } } var _g81 = i1 + 1; var _g91 = size; while(_g81 < _g91) { var j4 = _g81++; srcj = src[j4]; dstj = dst[j4]; var _g82 = 0; var _g92 = i1; while(_g82 < _g92) { var k2 = _g82++; dstj[k2] = dstj[k2] - dsti[k2] * srcj[i1]; } dstj[i1] = -diag1 * srcj[i1]; var _g10 = i1 + 1; var _g111 = size; while(_g10 < _g111) { var k3 = _g10++; srcj[k3] = srcj[k3] - srci[k3] * srcj[i1]; } } } var _g41 = 1; var _g51 = size; while(_g41 < _g51) { var i2 = _g41++; dsti = dst[i2]; var _g42 = 0; var _g52 = i2; while(_g42 < _g52) { var j5 = _g42++; dst[j5][i2] = dsti[j5]; } } } } computeInvMass(info,massData) { var invMass = this._invMass; var invMassWithoutCfm = this._invMassWithoutCfm; var numRows = info.numRows; var b1 = info.b1; var b2 = info.b2; var invM1 = b1._invMass; var invM2 = b2._invMass; var invI1; var invI100; var invI101; var invI102; var invI110; var invI111; var invI112; var invI120; var invI121; var invI122; var invI2; var invI200; var invI201; var invI202; var invI210; var invI211; var invI212; var invI220; var invI221; var invI222; invI100 = b1._invInertia00; invI101 = b1._invInertia01; invI102 = b1._invInertia02; invI110 = b1._invInertia10; invI111 = b1._invInertia11; invI112 = b1._invInertia12; invI120 = b1._invInertia20; invI121 = b1._invInertia21; invI122 = b1._invInertia22; invI200 = b2._invInertia00; invI201 = b2._invInertia01; invI202 = b2._invInertia02; invI210 = b2._invInertia10; invI211 = b2._invInertia11; invI212 = b2._invInertia12; invI220 = b2._invInertia20; invI221 = b2._invInertia21; invI222 = b2._invInertia22; var _g = 0; var _g1 = numRows; while(_g < _g1) { var i = _g++; var j = info.rows[i].jacobian; var md = massData[i]; j.updateSparsity(); if((j.flag & 1) != 0) { md.invMLin1X = j.lin1X * invM1; md.invMLin1Y = j.lin1Y * invM1; md.invMLin1Z = j.lin1Z * invM1; md.invMLin2X = j.lin2X * invM2; md.invMLin2Y = j.lin2Y * invM2; md.invMLin2Z = j.lin2Z * invM2; } else { md.invMLin1X = 0; md.invMLin1Y = 0; md.invMLin1Z = 0; md.invMLin2X = 0; md.invMLin2Y = 0; md.invMLin2Z = 0; } if((j.flag & 2) != 0) { var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = invI100 * j.ang1X + invI101 * j.ang1Y + invI102 * j.ang1Z; __tmp__Y = invI110 * j.ang1X + invI111 * j.ang1Y + invI112 * j.ang1Z; __tmp__Z = invI120 * j.ang1X + invI121 * j.ang1Y + invI122 * j.ang1Z; md.invMAng1X = __tmp__X; md.invMAng1Y = __tmp__Y; md.invMAng1Z = __tmp__Z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = invI200 * j.ang2X + invI201 * j.ang2Y + invI202 * j.ang2Z; __tmp__Y1 = invI210 * j.ang2X + invI211 * j.ang2Y + invI212 * j.ang2Z; __tmp__Z1 = invI220 * j.ang2X + invI221 * j.ang2Y + invI222 * j.ang2Z; md.invMAng2X = __tmp__X1; md.invMAng2Y = __tmp__Y1; md.invMAng2Z = __tmp__Z1; } else { md.invMAng1X = 0; md.invMAng1Y = 0; md.invMAng1Z = 0; md.invMAng2X = 0; md.invMAng2Y = 0; md.invMAng2Z = 0; } } var _g2 = 0; var _g3 = numRows; while(_g2 < _g3) { var i1 = _g2++; var j1 = info.rows[i1].jacobian; var _g21 = i1; var _g31 = numRows; while(_g21 < _g31) { var j2 = _g21++; var j21 = info.rows[j2].jacobian; var md2 = massData[j2]; var val = j1.lin1X * md2.invMLin1X + j1.lin1Y * md2.invMLin1Y + j1.lin1Z * md2.invMLin1Z + (j1.ang1X * md2.invMAng1X + j1.ang1Y * md2.invMAng1Y + j1.ang1Z * md2.invMAng1Z) + (j1.lin2X * md2.invMLin2X + j1.lin2Y * md2.invMLin2Y + j1.lin2Z * md2.invMLin2Z) + (j1.ang2X * md2.invMAng2X + j1.ang2Y * md2.invMAng2Y + j1.ang2Z * md2.invMAng2Z); if(i1 == j2) { invMass[i1][j2] = val + info.rows[i1].cfm; invMassWithoutCfm[i1][j2] = val; md2.mass = val + info.rows[i1].cfm; md2.massWithoutCfm = val; if(md2.mass != 0) { md2.mass = 1 / md2.mass; } if(md2.massWithoutCfm != 0) { md2.massWithoutCfm = 1 / md2.massWithoutCfm; } } else { invMass[i1][j2] = val; invMass[j2][i1] = val; invMassWithoutCfm[i1][j2] = val; invMassWithoutCfm[j2][i1] = val; } } } var _g4 = 0; var _g11 = this._maxSubmatrixId; while(_g4 < _g11) { var i2 = _g4++; this._cacheComputed[i2] = false; } } } if(!oimo.dynamics.constraint.solver.pgs) oimo.dynamics.constraint.solver.pgs = {}; oimo.dynamics.constraint.solver.pgs.PgsContactConstraintSolver = class oimo_dynamics_constraint_solver_pgs_PgsContactConstraintSolver extends oimo.dynamics.constraint.ConstraintSolver { constructor(constraint) { super(); this.constraint = constraint; this.info = new oimo.dynamics.constraint.info.contact.ContactSolverInfo(); var this1 = new Array(oimo.common.Setting.maxManifoldPoints); this.massData = this1; var _g = 0; var _g1 = this.massData.length; while(_g < _g1) { var i = _g++; this.massData[i] = new oimo.dynamics.constraint.solver.common.ContactSolverMassDataRow(); } } preSolveVelocity(timeStep) { this.constraint._getVelocitySolverInfo(timeStep,this.info); this._b1 = this.info.b1; this._b2 = this.info.b2; var invM1 = this._b1._invMass; var invM2 = this._b2._invMass; var invI1; var invI100; var invI101; var invI102; var invI110; var invI111; var invI112; var invI120; var invI121; var invI122; var invI2; var invI200; var invI201; var invI202; var invI210; var invI211; var invI212; var invI220; var invI221; var invI222; invI100 = this._b1._invInertia00; invI101 = this._b1._invInertia01; invI102 = this._b1._invInertia02; invI110 = this._b1._invInertia10; invI111 = this._b1._invInertia11; invI112 = this._b1._invInertia12; invI120 = this._b1._invInertia20; invI121 = this._b1._invInertia21; invI122 = this._b1._invInertia22; invI200 = this._b2._invInertia00; invI201 = this._b2._invInertia01; invI202 = this._b2._invInertia02; invI210 = this._b2._invInertia10; invI211 = this._b2._invInertia11; invI212 = this._b2._invInertia12; invI220 = this._b2._invInertia20; invI221 = this._b2._invInertia21; invI222 = this._b2._invInertia22; var _g = 0; var _g1 = this.info.numRows; while(_g < _g1) { var i = _g++; var row = this.info.rows[i]; var md = this.massData[i]; var j = row.jacobianN; md.invMLinN1X = j.lin1X * invM1; md.invMLinN1Y = j.lin1Y * invM1; md.invMLinN1Z = j.lin1Z * invM1; md.invMLinN2X = j.lin2X * invM2; md.invMLinN2Y = j.lin2Y * invM2; md.invMLinN2Z = j.lin2Z * invM2; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = invI100 * j.ang1X + invI101 * j.ang1Y + invI102 * j.ang1Z; __tmp__Y = invI110 * j.ang1X + invI111 * j.ang1Y + invI112 * j.ang1Z; __tmp__Z = invI120 * j.ang1X + invI121 * j.ang1Y + invI122 * j.ang1Z; md.invMAngN1X = __tmp__X; md.invMAngN1Y = __tmp__Y; md.invMAngN1Z = __tmp__Z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = invI200 * j.ang2X + invI201 * j.ang2Y + invI202 * j.ang2Z; __tmp__Y1 = invI210 * j.ang2X + invI211 * j.ang2Y + invI212 * j.ang2Z; __tmp__Z1 = invI220 * j.ang2X + invI221 * j.ang2Y + invI222 * j.ang2Z; md.invMAngN2X = __tmp__X1; md.invMAngN2Y = __tmp__Y1; md.invMAngN2Z = __tmp__Z1; md.massN = invM1 + invM2 + (md.invMAngN1X * j.ang1X + md.invMAngN1Y * j.ang1Y + md.invMAngN1Z * j.ang1Z) + (md.invMAngN2X * j.ang2X + md.invMAngN2Y * j.ang2Y + md.invMAngN2Z * j.ang2Z); if(md.massN != 0) { md.massN = 1 / md.massN; } var jt = row.jacobianT; var jb = row.jacobianB; md.invMLinT1X = jt.lin1X * invM1; md.invMLinT1Y = jt.lin1Y * invM1; md.invMLinT1Z = jt.lin1Z * invM1; md.invMLinT2X = jt.lin2X * invM2; md.invMLinT2Y = jt.lin2Y * invM2; md.invMLinT2Z = jt.lin2Z * invM2; md.invMLinB1X = jb.lin1X * invM1; md.invMLinB1Y = jb.lin1Y * invM1; md.invMLinB1Z = jb.lin1Z * invM1; md.invMLinB2X = jb.lin2X * invM2; md.invMLinB2Y = jb.lin2Y * invM2; md.invMLinB2Z = jb.lin2Z * invM2; var __tmp__X2; var __tmp__Y2; var __tmp__Z2; __tmp__X2 = invI100 * jt.ang1X + invI101 * jt.ang1Y + invI102 * jt.ang1Z; __tmp__Y2 = invI110 * jt.ang1X + invI111 * jt.ang1Y + invI112 * jt.ang1Z; __tmp__Z2 = invI120 * jt.ang1X + invI121 * jt.ang1Y + invI122 * jt.ang1Z; md.invMAngT1X = __tmp__X2; md.invMAngT1Y = __tmp__Y2; md.invMAngT1Z = __tmp__Z2; var __tmp__X3; var __tmp__Y3; var __tmp__Z3; __tmp__X3 = invI200 * jt.ang2X + invI201 * jt.ang2Y + invI202 * jt.ang2Z; __tmp__Y3 = invI210 * jt.ang2X + invI211 * jt.ang2Y + invI212 * jt.ang2Z; __tmp__Z3 = invI220 * jt.ang2X + invI221 * jt.ang2Y + invI222 * jt.ang2Z; md.invMAngT2X = __tmp__X3; md.invMAngT2Y = __tmp__Y3; md.invMAngT2Z = __tmp__Z3; var __tmp__X4; var __tmp__Y4; var __tmp__Z4; __tmp__X4 = invI100 * jb.ang1X + invI101 * jb.ang1Y + invI102 * jb.ang1Z; __tmp__Y4 = invI110 * jb.ang1X + invI111 * jb.ang1Y + invI112 * jb.ang1Z; __tmp__Z4 = invI120 * jb.ang1X + invI121 * jb.ang1Y + invI122 * jb.ang1Z; md.invMAngB1X = __tmp__X4; md.invMAngB1Y = __tmp__Y4; md.invMAngB1Z = __tmp__Z4; var __tmp__X5; var __tmp__Y5; var __tmp__Z5; __tmp__X5 = invI200 * jb.ang2X + invI201 * jb.ang2Y + invI202 * jb.ang2Z; __tmp__Y5 = invI210 * jb.ang2X + invI211 * jb.ang2Y + invI212 * jb.ang2Z; __tmp__Z5 = invI220 * jb.ang2X + invI221 * jb.ang2Y + invI222 * jb.ang2Z; md.invMAngB2X = __tmp__X5; md.invMAngB2Y = __tmp__Y5; md.invMAngB2Z = __tmp__Z5; var invMassTB00 = invM1 + invM2 + (md.invMAngT1X * jt.ang1X + md.invMAngT1Y * jt.ang1Y + md.invMAngT1Z * jt.ang1Z) + (md.invMAngT2X * jt.ang2X + md.invMAngT2Y * jt.ang2Y + md.invMAngT2Z * jt.ang2Z); var invMassTB01 = md.invMAngT1X * jb.ang1X + md.invMAngT1Y * jb.ang1Y + md.invMAngT1Z * jb.ang1Z + (md.invMAngT2X * jb.ang2X + md.invMAngT2Y * jb.ang2Y + md.invMAngT2Z * jb.ang2Z); var invMassTB10 = invMassTB01; var invMassTB11 = invM1 + invM2 + (md.invMAngB1X * jb.ang1X + md.invMAngB1Y * jb.ang1Y + md.invMAngB1Z * jb.ang1Z) + (md.invMAngB2X * jb.ang2X + md.invMAngB2Y * jb.ang2Y + md.invMAngB2Z * jb.ang2Z); var invDet = invMassTB00 * invMassTB11 - invMassTB01 * invMassTB10; if(invDet != 0) { invDet = 1 / invDet; } md.massTB00 = invMassTB11 * invDet; md.massTB01 = -invMassTB01 * invDet; md.massTB10 = -invMassTB10 * invDet; md.massTB11 = invMassTB00 * invDet; } } warmStart(timeStep) { var lv1; var lv1X; var lv1Y; var lv1Z; var lv2; var lv2X; var lv2Y; var lv2Z; var av1; var av1X; var av1Y; var av1Z; var av2; var av2X; var av2Y; var av2Z; lv1X = this._b1._velX; lv1Y = this._b1._velY; lv1Z = this._b1._velZ; lv2X = this._b2._velX; lv2Y = this._b2._velY; lv2Z = this._b2._velZ; av1X = this._b1._angVelX; av1Y = this._b1._angVelY; av1Z = this._b1._angVelZ; av2X = this._b2._angVelX; av2Y = this._b2._angVelY; av2Z = this._b2._angVelZ; var _g = 0; var _g1 = this.info.numRows; while(_g < _g1) { var i = _g++; var row = this.info.rows[i]; var imp = row.impulse; var md = this.massData[i]; var jt = row.jacobianT; var jb = row.jacobianB; var impulseN = imp.impulseN; var impulseT = imp.impulseLX * jt.lin1X + imp.impulseLY * jt.lin1Y + imp.impulseLZ * jt.lin1Z; var impulseB = imp.impulseLX * jb.lin1X + imp.impulseLY * jb.lin1Y + imp.impulseLZ * jb.lin1Z; imp.impulseT = impulseT; imp.impulseB = impulseB; imp.impulseN *= timeStep.dtRatio; imp.impulseT *= timeStep.dtRatio; imp.impulseB *= timeStep.dtRatio; lv1X += md.invMLinN1X * impulseN; lv1Y += md.invMLinN1Y * impulseN; lv1Z += md.invMLinN1Z * impulseN; lv1X += md.invMLinT1X * impulseT; lv1Y += md.invMLinT1Y * impulseT; lv1Z += md.invMLinT1Z * impulseT; lv1X += md.invMLinB1X * impulseB; lv1Y += md.invMLinB1Y * impulseB; lv1Z += md.invMLinB1Z * impulseB; lv2X += md.invMLinN2X * -impulseN; lv2Y += md.invMLinN2Y * -impulseN; lv2Z += md.invMLinN2Z * -impulseN; lv2X += md.invMLinT2X * -impulseT; lv2Y += md.invMLinT2Y * -impulseT; lv2Z += md.invMLinT2Z * -impulseT; lv2X += md.invMLinB2X * -impulseB; lv2Y += md.invMLinB2Y * -impulseB; lv2Z += md.invMLinB2Z * -impulseB; av1X += md.invMAngN1X * impulseN; av1Y += md.invMAngN1Y * impulseN; av1Z += md.invMAngN1Z * impulseN; av1X += md.invMAngT1X * impulseT; av1Y += md.invMAngT1Y * impulseT; av1Z += md.invMAngT1Z * impulseT; av1X += md.invMAngB1X * impulseB; av1Y += md.invMAngB1Y * impulseB; av1Z += md.invMAngB1Z * impulseB; av2X += md.invMAngN2X * -impulseN; av2Y += md.invMAngN2Y * -impulseN; av2Z += md.invMAngN2Z * -impulseN; av2X += md.invMAngT2X * -impulseT; av2Y += md.invMAngT2Y * -impulseT; av2Z += md.invMAngT2Z * -impulseT; av2X += md.invMAngB2X * -impulseB; av2Y += md.invMAngB2Y * -impulseB; av2Z += md.invMAngB2Z * -impulseB; } this._b1._velX = lv1X; this._b1._velY = lv1Y; this._b1._velZ = lv1Z; this._b2._velX = lv2X; this._b2._velY = lv2Y; this._b2._velZ = lv2Z; this._b1._angVelX = av1X; this._b1._angVelY = av1Y; this._b1._angVelZ = av1Z; this._b2._angVelX = av2X; this._b2._angVelY = av2Y; this._b2._angVelZ = av2Z; } solveVelocity() { var lv1; var lv1X; var lv1Y; var lv1Z; var lv2; var lv2X; var lv2Y; var lv2Z; var av1; var av1X; var av1Y; var av1Z; var av2; var av2X; var av2Y; var av2Z; lv1X = this._b1._velX; lv1Y = this._b1._velY; lv1Z = this._b1._velZ; lv2X = this._b2._velX; lv2Y = this._b2._velY; lv2Z = this._b2._velZ; av1X = this._b1._angVelX; av1Y = this._b1._angVelY; av1Z = this._b1._angVelZ; av2X = this._b2._angVelX; av2Y = this._b2._angVelY; av2Z = this._b2._angVelZ; var _g = 0; var _g1 = this.info.numRows; while(_g < _g1) { var i = _g++; var row = this.info.rows[i]; var md = this.massData[i]; var imp = row.impulse; var rvt = 0; var j = row.jacobianT; rvt += lv1X * j.lin1X + lv1Y * j.lin1Y + lv1Z * j.lin1Z; rvt -= lv2X * j.lin2X + lv2Y * j.lin2Y + lv2Z * j.lin2Z; rvt += av1X * j.ang1X + av1Y * j.ang1Y + av1Z * j.ang1Z; rvt -= av2X * j.ang2X + av2Y * j.ang2Y + av2Z * j.ang2Z; var rvb = 0; j = row.jacobianB; rvb += lv1X * j.lin1X + lv1Y * j.lin1Y + lv1Z * j.lin1Z; rvb -= lv2X * j.lin2X + lv2Y * j.lin2Y + lv2Z * j.lin2Z; rvb += av1X * j.ang1X + av1Y * j.ang1Y + av1Z * j.ang1Z; rvb -= av2X * j.ang2X + av2Y * j.ang2Y + av2Z * j.ang2Z; var impulseT = -(rvt * md.massTB00 + rvb * md.massTB01); var impulseB = -(rvt * md.massTB10 + rvb * md.massTB11); var oldImpulseT = imp.impulseT; var oldImpulseB = imp.impulseB; imp.impulseT += impulseT; imp.impulseB += impulseB; var maxImpulse = row.friction * imp.impulseN; if(maxImpulse == 0) { imp.impulseT = 0; imp.impulseB = 0; } else { var impulseLengthSq = imp.impulseT * imp.impulseT + imp.impulseB * imp.impulseB; if(impulseLengthSq > maxImpulse * maxImpulse) { var invL = maxImpulse / Math.sqrt(impulseLengthSq); imp.impulseT *= invL; imp.impulseB *= invL; } } impulseT = imp.impulseT - oldImpulseT; impulseB = imp.impulseB - oldImpulseB; lv1X += md.invMLinT1X * impulseT; lv1Y += md.invMLinT1Y * impulseT; lv1Z += md.invMLinT1Z * impulseT; lv1X += md.invMLinB1X * impulseB; lv1Y += md.invMLinB1Y * impulseB; lv1Z += md.invMLinB1Z * impulseB; lv2X += md.invMLinT2X * -impulseT; lv2Y += md.invMLinT2Y * -impulseT; lv2Z += md.invMLinT2Z * -impulseT; lv2X += md.invMLinB2X * -impulseB; lv2Y += md.invMLinB2Y * -impulseB; lv2Z += md.invMLinB2Z * -impulseB; av1X += md.invMAngT1X * impulseT; av1Y += md.invMAngT1Y * impulseT; av1Z += md.invMAngT1Z * impulseT; av1X += md.invMAngB1X * impulseB; av1Y += md.invMAngB1Y * impulseB; av1Z += md.invMAngB1Z * impulseB; av2X += md.invMAngT2X * -impulseT; av2Y += md.invMAngT2Y * -impulseT; av2Z += md.invMAngT2Z * -impulseT; av2X += md.invMAngB2X * -impulseB; av2Y += md.invMAngB2Y * -impulseB; av2Z += md.invMAngB2Z * -impulseB; } var _g2 = 0; var _g3 = this.info.numRows; while(_g2 < _g3) { var i1 = _g2++; var row1 = this.info.rows[i1]; var md1 = this.massData[i1]; var imp1 = row1.impulse; var rvn = 0; var j1 = row1.jacobianN; rvn += lv1X * j1.lin1X + lv1Y * j1.lin1Y + lv1Z * j1.lin1Z; rvn -= lv2X * j1.lin2X + lv2Y * j1.lin2Y + lv2Z * j1.lin2Z; rvn += av1X * j1.ang1X + av1Y * j1.ang1Y + av1Z * j1.ang1Z; rvn -= av2X * j1.ang2X + av2Y * j1.ang2Y + av2Z * j1.ang2Z; var impulseN = (row1.rhs - rvn) * md1.massN; var oldImpulseN = imp1.impulseN; imp1.impulseN += impulseN; if(imp1.impulseN < 0) { imp1.impulseN = 0; } impulseN = imp1.impulseN - oldImpulseN; lv1X += md1.invMLinN1X * impulseN; lv1Y += md1.invMLinN1Y * impulseN; lv1Z += md1.invMLinN1Z * impulseN; lv2X += md1.invMLinN2X * -impulseN; lv2Y += md1.invMLinN2Y * -impulseN; lv2Z += md1.invMLinN2Z * -impulseN; av1X += md1.invMAngN1X * impulseN; av1Y += md1.invMAngN1Y * impulseN; av1Z += md1.invMAngN1Z * impulseN; av2X += md1.invMAngN2X * -impulseN; av2Y += md1.invMAngN2Y * -impulseN; av2Z += md1.invMAngN2Z * -impulseN; } this._b1._velX = lv1X; this._b1._velY = lv1Y; this._b1._velZ = lv1Z; this._b2._velX = lv2X; this._b2._velY = lv2Y; this._b2._velZ = lv2Z; this._b1._angVelX = av1X; this._b1._angVelY = av1Y; this._b1._angVelZ = av1Z; this._b2._angVelX = av2X; this._b2._angVelY = av2Y; this._b2._angVelZ = av2Z; } preSolvePosition(timeStep) { this.constraint._syncManifold(); this.constraint._getPositionSolverInfo(this.info); var invM1 = this._b1._invMass; var invM2 = this._b2._invMass; var invI1; var invI100; var invI101; var invI102; var invI110; var invI111; var invI112; var invI120; var invI121; var invI122; var invI2; var invI200; var invI201; var invI202; var invI210; var invI211; var invI212; var invI220; var invI221; var invI222; invI100 = this._b1._invInertia00; invI101 = this._b1._invInertia01; invI102 = this._b1._invInertia02; invI110 = this._b1._invInertia10; invI111 = this._b1._invInertia11; invI112 = this._b1._invInertia12; invI120 = this._b1._invInertia20; invI121 = this._b1._invInertia21; invI122 = this._b1._invInertia22; invI200 = this._b2._invInertia00; invI201 = this._b2._invInertia01; invI202 = this._b2._invInertia02; invI210 = this._b2._invInertia10; invI211 = this._b2._invInertia11; invI212 = this._b2._invInertia12; invI220 = this._b2._invInertia20; invI221 = this._b2._invInertia21; invI222 = this._b2._invInertia22; var _g = 0; var _g1 = this.info.numRows; while(_g < _g1) { var i = _g++; var row = this.info.rows[i]; var md = this.massData[i]; var j = row.jacobianN; md.invMLinN1X = j.lin1X * invM1; md.invMLinN1Y = j.lin1Y * invM1; md.invMLinN1Z = j.lin1Z * invM1; md.invMLinN2X = j.lin2X * invM2; md.invMLinN2Y = j.lin2Y * invM2; md.invMLinN2Z = j.lin2Z * invM2; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = invI100 * j.ang1X + invI101 * j.ang1Y + invI102 * j.ang1Z; __tmp__Y = invI110 * j.ang1X + invI111 * j.ang1Y + invI112 * j.ang1Z; __tmp__Z = invI120 * j.ang1X + invI121 * j.ang1Y + invI122 * j.ang1Z; md.invMAngN1X = __tmp__X; md.invMAngN1Y = __tmp__Y; md.invMAngN1Z = __tmp__Z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = invI200 * j.ang2X + invI201 * j.ang2Y + invI202 * j.ang2Z; __tmp__Y1 = invI210 * j.ang2X + invI211 * j.ang2Y + invI212 * j.ang2Z; __tmp__Z1 = invI220 * j.ang2X + invI221 * j.ang2Y + invI222 * j.ang2Z; md.invMAngN2X = __tmp__X1; md.invMAngN2Y = __tmp__Y1; md.invMAngN2Z = __tmp__Z1; md.massN = invM1 + invM2 + (md.invMAngN1X * j.ang1X + md.invMAngN1Y * j.ang1Y + md.invMAngN1Z * j.ang1Z) + (md.invMAngN2X * j.ang2X + md.invMAngN2Y * j.ang2Y + md.invMAngN2Z * j.ang2Z); if(md.massN != 0) { md.massN = 1 / md.massN; } } var _g2 = 0; var _g11 = this.info.numRows; while(_g2 < _g11) { var i1 = _g2++; this.info.rows[i1].impulse.impulseP = 0; } } solvePositionSplitImpulse() { var lv1; var lv1X; var lv1Y; var lv1Z; var lv2; var lv2X; var lv2Y; var lv2Z; var av1; var av1X; var av1Y; var av1Z; var av2; var av2X; var av2Y; var av2Z; lv1X = this._b1._pseudoVelX; lv1Y = this._b1._pseudoVelY; lv1Z = this._b1._pseudoVelZ; lv2X = this._b2._pseudoVelX; lv2Y = this._b2._pseudoVelY; lv2Z = this._b2._pseudoVelZ; av1X = this._b1._angPseudoVelX; av1Y = this._b1._angPseudoVelY; av1Z = this._b1._angPseudoVelZ; av2X = this._b2._angPseudoVelX; av2Y = this._b2._angPseudoVelY; av2Z = this._b2._angPseudoVelZ; var _g = 0; var _g1 = this.info.numRows; while(_g < _g1) { var i = _g++; var row = this.info.rows[i]; var md = this.massData[i]; var imp = row.impulse; var j = row.jacobianN; var rvn = 0; rvn += lv1X * j.lin1X + lv1Y * j.lin1Y + lv1Z * j.lin1Z; rvn -= lv2X * j.lin2X + lv2Y * j.lin2Y + lv2Z * j.lin2Z; rvn += av1X * j.ang1X + av1Y * j.ang1Y + av1Z * j.ang1Z; rvn -= av2X * j.ang2X + av2Y * j.ang2Y + av2Z * j.ang2Z; var impulseP = (row.rhs - rvn) * md.massN * oimo.common.Setting.positionSplitImpulseBaumgarte; var oldImpulseP = imp.impulseP; imp.impulseP += impulseP; if(imp.impulseP < 0) { imp.impulseP = 0; } impulseP = imp.impulseP - oldImpulseP; lv1X += md.invMLinN1X * impulseP; lv1Y += md.invMLinN1Y * impulseP; lv1Z += md.invMLinN1Z * impulseP; lv2X += md.invMLinN2X * -impulseP; lv2Y += md.invMLinN2Y * -impulseP; lv2Z += md.invMLinN2Z * -impulseP; av1X += md.invMAngN1X * impulseP; av1Y += md.invMAngN1Y * impulseP; av1Z += md.invMAngN1Z * impulseP; av2X += md.invMAngN2X * -impulseP; av2Y += md.invMAngN2Y * -impulseP; av2Z += md.invMAngN2Z * -impulseP; } this._b1._pseudoVelX = lv1X; this._b1._pseudoVelY = lv1Y; this._b1._pseudoVelZ = lv1Z; this._b2._pseudoVelX = lv2X; this._b2._pseudoVelY = lv2Y; this._b2._pseudoVelZ = lv2Z; this._b1._angPseudoVelX = av1X; this._b1._angPseudoVelY = av1Y; this._b1._angPseudoVelZ = av1Z; this._b2._angPseudoVelX = av2X; this._b2._angPseudoVelY = av2Y; this._b2._angPseudoVelZ = av2Z; } solvePositionNgs(timeStep) { this.constraint._syncManifold(); this.constraint._getPositionSolverInfo(this.info); var invM1 = this._b1._invMass; var invM2 = this._b2._invMass; var invI1; var invI100; var invI101; var invI102; var invI110; var invI111; var invI112; var invI120; var invI121; var invI122; var invI2; var invI200; var invI201; var invI202; var invI210; var invI211; var invI212; var invI220; var invI221; var invI222; invI100 = this._b1._invInertia00; invI101 = this._b1._invInertia01; invI102 = this._b1._invInertia02; invI110 = this._b1._invInertia10; invI111 = this._b1._invInertia11; invI112 = this._b1._invInertia12; invI120 = this._b1._invInertia20; invI121 = this._b1._invInertia21; invI122 = this._b1._invInertia22; invI200 = this._b2._invInertia00; invI201 = this._b2._invInertia01; invI202 = this._b2._invInertia02; invI210 = this._b2._invInertia10; invI211 = this._b2._invInertia11; invI212 = this._b2._invInertia12; invI220 = this._b2._invInertia20; invI221 = this._b2._invInertia21; invI222 = this._b2._invInertia22; var _g = 0; var _g1 = this.info.numRows; while(_g < _g1) { var i = _g++; var row = this.info.rows[i]; var md = this.massData[i]; var j = row.jacobianN; md.invMLinN1X = j.lin1X * invM1; md.invMLinN1Y = j.lin1Y * invM1; md.invMLinN1Z = j.lin1Z * invM1; md.invMLinN2X = j.lin2X * invM2; md.invMLinN2Y = j.lin2Y * invM2; md.invMLinN2Z = j.lin2Z * invM2; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = invI100 * j.ang1X + invI101 * j.ang1Y + invI102 * j.ang1Z; __tmp__Y = invI110 * j.ang1X + invI111 * j.ang1Y + invI112 * j.ang1Z; __tmp__Z = invI120 * j.ang1X + invI121 * j.ang1Y + invI122 * j.ang1Z; md.invMAngN1X = __tmp__X; md.invMAngN1Y = __tmp__Y; md.invMAngN1Z = __tmp__Z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = invI200 * j.ang2X + invI201 * j.ang2Y + invI202 * j.ang2Z; __tmp__Y1 = invI210 * j.ang2X + invI211 * j.ang2Y + invI212 * j.ang2Z; __tmp__Z1 = invI220 * j.ang2X + invI221 * j.ang2Y + invI222 * j.ang2Z; md.invMAngN2X = __tmp__X1; md.invMAngN2Y = __tmp__Y1; md.invMAngN2Z = __tmp__Z1; md.massN = invM1 + invM2 + (md.invMAngN1X * j.ang1X + md.invMAngN1Y * j.ang1Y + md.invMAngN1Z * j.ang1Z) + (md.invMAngN2X * j.ang2X + md.invMAngN2Y * j.ang2Y + md.invMAngN2Z * j.ang2Z); if(md.massN != 0) { md.massN = 1 / md.massN; } } var lv1; var lv1X; var lv1Y; var lv1Z; var lv2; var lv2X; var lv2Y; var lv2Z; var av1; var av1X; var av1Y; var av1Z; var av2; var av2X; var av2Y; var av2Z; lv1X = 0; lv1Y = 0; lv1Z = 0; lv2X = 0; lv2Y = 0; lv2Z = 0; av1X = 0; av1Y = 0; av1Z = 0; av2X = 0; av2Y = 0; av2Z = 0; var _g2 = 0; var _g11 = this.info.numRows; while(_g2 < _g11) { var i1 = _g2++; var row1 = this.info.rows[i1]; var md1 = this.massData[i1]; var imp = row1.impulse; var j1 = row1.jacobianN; var rvn = 0; rvn += lv1X * j1.lin1X + lv1Y * j1.lin1Y + lv1Z * j1.lin1Z; rvn -= lv2X * j1.lin2X + lv2Y * j1.lin2Y + lv2Z * j1.lin2Z; rvn += av1X * j1.ang1X + av1Y * j1.ang1Y + av1Z * j1.ang1Z; rvn -= av2X * j1.ang2X + av2Y * j1.ang2Y + av2Z * j1.ang2Z; var impulseP = (row1.rhs - rvn) * md1.massN * oimo.common.Setting.positionNgsBaumgarte; var oldImpulseP = imp.impulseP; imp.impulseP += impulseP; if(imp.impulseP < 0) { imp.impulseP = 0; } impulseP = imp.impulseP - oldImpulseP; lv1X += md1.invMLinN1X * impulseP; lv1Y += md1.invMLinN1Y * impulseP; lv1Z += md1.invMLinN1Z * impulseP; lv2X += md1.invMLinN2X * -impulseP; lv2Y += md1.invMLinN2Y * -impulseP; lv2Z += md1.invMLinN2Z * -impulseP; av1X += md1.invMAngN1X * impulseP; av1Y += md1.invMAngN1Y * impulseP; av1Z += md1.invMAngN1Z * impulseP; av2X += md1.invMAngN2X * -impulseP; av2Y += md1.invMAngN2Y * -impulseP; av2Z += md1.invMAngN2Z * -impulseP; } var _this = this._b1; _this._transform._positionX += lv1X; _this._transform._positionY += lv1Y; _this._transform._positionZ += lv1Z; var _this1 = this._b2; _this1._transform._positionX += lv2X; _this1._transform._positionY += lv2Y; _this1._transform._positionZ += lv2Z; var _this2 = this._b1; var theta = Math.sqrt(av1X * av1X + av1Y * av1Y + av1Z * av1Z); var halfTheta = theta * 0.5; var rotationToSinAxisFactor; var cosHalfTheta; if(halfTheta < 0.5) { var ht2 = halfTheta * halfTheta; rotationToSinAxisFactor = 0.5 * (1 - ht2 * 0.166666666666666657 + ht2 * ht2 * 0.00833333333333333322); cosHalfTheta = 1 - ht2 * 0.5 + ht2 * ht2 * 0.0416666666666666644; } else { rotationToSinAxisFactor = Math.sin(halfTheta) / theta; cosHalfTheta = Math.cos(halfTheta); } var sinAxis; var sinAxisX; var sinAxisY; var sinAxisZ; sinAxisX = av1X * rotationToSinAxisFactor; sinAxisY = av1Y * rotationToSinAxisFactor; sinAxisZ = av1Z * rotationToSinAxisFactor; var dq; var dqX; var dqY; var dqZ; var dqW; dqX = sinAxisX; dqY = sinAxisY; dqZ = sinAxisZ; dqW = cosHalfTheta; var q; var qX; var qY; var qZ; var qW; var e00 = _this2._transform._rotation00; var e11 = _this2._transform._rotation11; var e22 = _this2._transform._rotation22; var t = e00 + e11 + e22; var s; if(t > 0) { s = Math.sqrt(t + 1); qW = 0.5 * s; s = 0.5 / s; qX = (_this2._transform._rotation21 - _this2._transform._rotation12) * s; qY = (_this2._transform._rotation02 - _this2._transform._rotation20) * s; qZ = (_this2._transform._rotation10 - _this2._transform._rotation01) * s; } else if(e00 > e11) { if(e00 > e22) { s = Math.sqrt(e00 - e11 - e22 + 1); qX = 0.5 * s; s = 0.5 / s; qY = (_this2._transform._rotation01 + _this2._transform._rotation10) * s; qZ = (_this2._transform._rotation02 + _this2._transform._rotation20) * s; qW = (_this2._transform._rotation21 - _this2._transform._rotation12) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); qZ = 0.5 * s; s = 0.5 / s; qX = (_this2._transform._rotation02 + _this2._transform._rotation20) * s; qY = (_this2._transform._rotation12 + _this2._transform._rotation21) * s; qW = (_this2._transform._rotation10 - _this2._transform._rotation01) * s; } } else if(e11 > e22) { s = Math.sqrt(e11 - e22 - e00 + 1); qY = 0.5 * s; s = 0.5 / s; qX = (_this2._transform._rotation01 + _this2._transform._rotation10) * s; qZ = (_this2._transform._rotation12 + _this2._transform._rotation21) * s; qW = (_this2._transform._rotation02 - _this2._transform._rotation20) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); qZ = 0.5 * s; s = 0.5 / s; qX = (_this2._transform._rotation02 + _this2._transform._rotation20) * s; qY = (_this2._transform._rotation12 + _this2._transform._rotation21) * s; qW = (_this2._transform._rotation10 - _this2._transform._rotation01) * s; } qX = dqW * qX + dqX * qW + dqY * qZ - dqZ * qY; qY = dqW * qY - dqX * qZ + dqY * qW + dqZ * qX; qZ = dqW * qZ + dqX * qY - dqY * qX + dqZ * qW; qW = dqW * qW - dqX * qX - dqY * qY - dqZ * qZ; var l = qX * qX + qY * qY + qZ * qZ + qW * qW; if(l > 1e-32) { l = 1 / Math.sqrt(l); } qX *= l; qY *= l; qZ *= l; qW *= l; var x = qX; var y = qY; var z = qZ; var w = qW; var x2 = 2 * x; var y2 = 2 * y; var z2 = 2 * z; var xx = x * x2; var yy = y * y2; var zz = z * z2; var xy = x * y2; var yz = y * z2; var xz = x * z2; var wx = w * x2; var wy = w * y2; var wz = w * z2; _this2._transform._rotation00 = 1 - yy - zz; _this2._transform._rotation01 = xy - wz; _this2._transform._rotation02 = xz + wy; _this2._transform._rotation10 = xy + wz; _this2._transform._rotation11 = 1 - xx - zz; _this2._transform._rotation12 = yz - wx; _this2._transform._rotation20 = xz - wy; _this2._transform._rotation21 = yz + wx; _this2._transform._rotation22 = 1 - xx - yy; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = _this2._transform._rotation00 * _this2._invLocalInertia00 + _this2._transform._rotation01 * _this2._invLocalInertia10 + _this2._transform._rotation02 * _this2._invLocalInertia20; __tmp__01 = _this2._transform._rotation00 * _this2._invLocalInertia01 + _this2._transform._rotation01 * _this2._invLocalInertia11 + _this2._transform._rotation02 * _this2._invLocalInertia21; __tmp__02 = _this2._transform._rotation00 * _this2._invLocalInertia02 + _this2._transform._rotation01 * _this2._invLocalInertia12 + _this2._transform._rotation02 * _this2._invLocalInertia22; __tmp__10 = _this2._transform._rotation10 * _this2._invLocalInertia00 + _this2._transform._rotation11 * _this2._invLocalInertia10 + _this2._transform._rotation12 * _this2._invLocalInertia20; __tmp__11 = _this2._transform._rotation10 * _this2._invLocalInertia01 + _this2._transform._rotation11 * _this2._invLocalInertia11 + _this2._transform._rotation12 * _this2._invLocalInertia21; __tmp__12 = _this2._transform._rotation10 * _this2._invLocalInertia02 + _this2._transform._rotation11 * _this2._invLocalInertia12 + _this2._transform._rotation12 * _this2._invLocalInertia22; __tmp__20 = _this2._transform._rotation20 * _this2._invLocalInertia00 + _this2._transform._rotation21 * _this2._invLocalInertia10 + _this2._transform._rotation22 * _this2._invLocalInertia20; __tmp__21 = _this2._transform._rotation20 * _this2._invLocalInertia01 + _this2._transform._rotation21 * _this2._invLocalInertia11 + _this2._transform._rotation22 * _this2._invLocalInertia21; __tmp__22 = _this2._transform._rotation20 * _this2._invLocalInertia02 + _this2._transform._rotation21 * _this2._invLocalInertia12 + _this2._transform._rotation22 * _this2._invLocalInertia22; _this2._invInertia00 = __tmp__00; _this2._invInertia01 = __tmp__01; _this2._invInertia02 = __tmp__02; _this2._invInertia10 = __tmp__10; _this2._invInertia11 = __tmp__11; _this2._invInertia12 = __tmp__12; _this2._invInertia20 = __tmp__20; _this2._invInertia21 = __tmp__21; _this2._invInertia22 = __tmp__22; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = _this2._invInertia00 * _this2._transform._rotation00 + _this2._invInertia01 * _this2._transform._rotation01 + _this2._invInertia02 * _this2._transform._rotation02; __tmp__011 = _this2._invInertia00 * _this2._transform._rotation10 + _this2._invInertia01 * _this2._transform._rotation11 + _this2._invInertia02 * _this2._transform._rotation12; __tmp__021 = _this2._invInertia00 * _this2._transform._rotation20 + _this2._invInertia01 * _this2._transform._rotation21 + _this2._invInertia02 * _this2._transform._rotation22; __tmp__101 = _this2._invInertia10 * _this2._transform._rotation00 + _this2._invInertia11 * _this2._transform._rotation01 + _this2._invInertia12 * _this2._transform._rotation02; __tmp__111 = _this2._invInertia10 * _this2._transform._rotation10 + _this2._invInertia11 * _this2._transform._rotation11 + _this2._invInertia12 * _this2._transform._rotation12; __tmp__121 = _this2._invInertia10 * _this2._transform._rotation20 + _this2._invInertia11 * _this2._transform._rotation21 + _this2._invInertia12 * _this2._transform._rotation22; __tmp__201 = _this2._invInertia20 * _this2._transform._rotation00 + _this2._invInertia21 * _this2._transform._rotation01 + _this2._invInertia22 * _this2._transform._rotation02; __tmp__211 = _this2._invInertia20 * _this2._transform._rotation10 + _this2._invInertia21 * _this2._transform._rotation11 + _this2._invInertia22 * _this2._transform._rotation12; __tmp__221 = _this2._invInertia20 * _this2._transform._rotation20 + _this2._invInertia21 * _this2._transform._rotation21 + _this2._invInertia22 * _this2._transform._rotation22; _this2._invInertia00 = __tmp__001; _this2._invInertia01 = __tmp__011; _this2._invInertia02 = __tmp__021; _this2._invInertia10 = __tmp__101; _this2._invInertia11 = __tmp__111; _this2._invInertia12 = __tmp__121; _this2._invInertia20 = __tmp__201; _this2._invInertia21 = __tmp__211; _this2._invInertia22 = __tmp__221; _this2._invInertia00 *= _this2._rotFactor.x; _this2._invInertia01 *= _this2._rotFactor.x; _this2._invInertia02 *= _this2._rotFactor.x; _this2._invInertia10 *= _this2._rotFactor.y; _this2._invInertia11 *= _this2._rotFactor.y; _this2._invInertia12 *= _this2._rotFactor.y; _this2._invInertia20 *= _this2._rotFactor.z; _this2._invInertia21 *= _this2._rotFactor.z; _this2._invInertia22 *= _this2._rotFactor.z; var _this3 = this._b2; var theta1 = Math.sqrt(av2X * av2X + av2Y * av2Y + av2Z * av2Z); var halfTheta1 = theta1 * 0.5; var rotationToSinAxisFactor1; var cosHalfTheta1; if(halfTheta1 < 0.5) { var ht21 = halfTheta1 * halfTheta1; rotationToSinAxisFactor1 = 0.5 * (1 - ht21 * 0.166666666666666657 + ht21 * ht21 * 0.00833333333333333322); cosHalfTheta1 = 1 - ht21 * 0.5 + ht21 * ht21 * 0.0416666666666666644; } else { rotationToSinAxisFactor1 = Math.sin(halfTheta1) / theta1; cosHalfTheta1 = Math.cos(halfTheta1); } var sinAxis1; var sinAxisX1; var sinAxisY1; var sinAxisZ1; sinAxisX1 = av2X * rotationToSinAxisFactor1; sinAxisY1 = av2Y * rotationToSinAxisFactor1; sinAxisZ1 = av2Z * rotationToSinAxisFactor1; var dq1; var dqX1; var dqY1; var dqZ1; var dqW1; dqX1 = sinAxisX1; dqY1 = sinAxisY1; dqZ1 = sinAxisZ1; dqW1 = cosHalfTheta1; var q1; var qX1; var qY1; var qZ1; var qW1; var e001 = _this3._transform._rotation00; var e111 = _this3._transform._rotation11; var e221 = _this3._transform._rotation22; var t1 = e001 + e111 + e221; var s1; if(t1 > 0) { s1 = Math.sqrt(t1 + 1); qW1 = 0.5 * s1; s1 = 0.5 / s1; qX1 = (_this3._transform._rotation21 - _this3._transform._rotation12) * s1; qY1 = (_this3._transform._rotation02 - _this3._transform._rotation20) * s1; qZ1 = (_this3._transform._rotation10 - _this3._transform._rotation01) * s1; } else if(e001 > e111) { if(e001 > e221) { s1 = Math.sqrt(e001 - e111 - e221 + 1); qX1 = 0.5 * s1; s1 = 0.5 / s1; qY1 = (_this3._transform._rotation01 + _this3._transform._rotation10) * s1; qZ1 = (_this3._transform._rotation02 + _this3._transform._rotation20) * s1; qW1 = (_this3._transform._rotation21 - _this3._transform._rotation12) * s1; } else { s1 = Math.sqrt(e221 - e001 - e111 + 1); qZ1 = 0.5 * s1; s1 = 0.5 / s1; qX1 = (_this3._transform._rotation02 + _this3._transform._rotation20) * s1; qY1 = (_this3._transform._rotation12 + _this3._transform._rotation21) * s1; qW1 = (_this3._transform._rotation10 - _this3._transform._rotation01) * s1; } } else if(e111 > e221) { s1 = Math.sqrt(e111 - e221 - e001 + 1); qY1 = 0.5 * s1; s1 = 0.5 / s1; qX1 = (_this3._transform._rotation01 + _this3._transform._rotation10) * s1; qZ1 = (_this3._transform._rotation12 + _this3._transform._rotation21) * s1; qW1 = (_this3._transform._rotation02 - _this3._transform._rotation20) * s1; } else { s1 = Math.sqrt(e221 - e001 - e111 + 1); qZ1 = 0.5 * s1; s1 = 0.5 / s1; qX1 = (_this3._transform._rotation02 + _this3._transform._rotation20) * s1; qY1 = (_this3._transform._rotation12 + _this3._transform._rotation21) * s1; qW1 = (_this3._transform._rotation10 - _this3._transform._rotation01) * s1; } qX1 = dqW1 * qX1 + dqX1 * qW1 + dqY1 * qZ1 - dqZ1 * qY1; qY1 = dqW1 * qY1 - dqX1 * qZ1 + dqY1 * qW1 + dqZ1 * qX1; qZ1 = dqW1 * qZ1 + dqX1 * qY1 - dqY1 * qX1 + dqZ1 * qW1; qW1 = dqW1 * qW1 - dqX1 * qX1 - dqY1 * qY1 - dqZ1 * qZ1; var l1 = qX1 * qX1 + qY1 * qY1 + qZ1 * qZ1 + qW1 * qW1; if(l1 > 1e-32) { l1 = 1 / Math.sqrt(l1); } qX1 *= l1; qY1 *= l1; qZ1 *= l1; qW1 *= l1; var x1 = qX1; var y1 = qY1; var z1 = qZ1; var w1 = qW1; var x21 = 2 * x1; var y21 = 2 * y1; var z21 = 2 * z1; var xx1 = x1 * x21; var yy1 = y1 * y21; var zz1 = z1 * z21; var xy1 = x1 * y21; var yz1 = y1 * z21; var xz1 = x1 * z21; var wx1 = w1 * x21; var wy1 = w1 * y21; var wz1 = w1 * z21; _this3._transform._rotation00 = 1 - yy1 - zz1; _this3._transform._rotation01 = xy1 - wz1; _this3._transform._rotation02 = xz1 + wy1; _this3._transform._rotation10 = xy1 + wz1; _this3._transform._rotation11 = 1 - xx1 - zz1; _this3._transform._rotation12 = yz1 - wx1; _this3._transform._rotation20 = xz1 - wy1; _this3._transform._rotation21 = yz1 + wx1; _this3._transform._rotation22 = 1 - xx1 - yy1; var __tmp__002; var __tmp__012; var __tmp__022; var __tmp__102; var __tmp__112; var __tmp__122; var __tmp__202; var __tmp__212; var __tmp__222; __tmp__002 = _this3._transform._rotation00 * _this3._invLocalInertia00 + _this3._transform._rotation01 * _this3._invLocalInertia10 + _this3._transform._rotation02 * _this3._invLocalInertia20; __tmp__012 = _this3._transform._rotation00 * _this3._invLocalInertia01 + _this3._transform._rotation01 * _this3._invLocalInertia11 + _this3._transform._rotation02 * _this3._invLocalInertia21; __tmp__022 = _this3._transform._rotation00 * _this3._invLocalInertia02 + _this3._transform._rotation01 * _this3._invLocalInertia12 + _this3._transform._rotation02 * _this3._invLocalInertia22; __tmp__102 = _this3._transform._rotation10 * _this3._invLocalInertia00 + _this3._transform._rotation11 * _this3._invLocalInertia10 + _this3._transform._rotation12 * _this3._invLocalInertia20; __tmp__112 = _this3._transform._rotation10 * _this3._invLocalInertia01 + _this3._transform._rotation11 * _this3._invLocalInertia11 + _this3._transform._rotation12 * _this3._invLocalInertia21; __tmp__122 = _this3._transform._rotation10 * _this3._invLocalInertia02 + _this3._transform._rotation11 * _this3._invLocalInertia12 + _this3._transform._rotation12 * _this3._invLocalInertia22; __tmp__202 = _this3._transform._rotation20 * _this3._invLocalInertia00 + _this3._transform._rotation21 * _this3._invLocalInertia10 + _this3._transform._rotation22 * _this3._invLocalInertia20; __tmp__212 = _this3._transform._rotation20 * _this3._invLocalInertia01 + _this3._transform._rotation21 * _this3._invLocalInertia11 + _this3._transform._rotation22 * _this3._invLocalInertia21; __tmp__222 = _this3._transform._rotation20 * _this3._invLocalInertia02 + _this3._transform._rotation21 * _this3._invLocalInertia12 + _this3._transform._rotation22 * _this3._invLocalInertia22; _this3._invInertia00 = __tmp__002; _this3._invInertia01 = __tmp__012; _this3._invInertia02 = __tmp__022; _this3._invInertia10 = __tmp__102; _this3._invInertia11 = __tmp__112; _this3._invInertia12 = __tmp__122; _this3._invInertia20 = __tmp__202; _this3._invInertia21 = __tmp__212; _this3._invInertia22 = __tmp__222; var __tmp__003; var __tmp__013; var __tmp__023; var __tmp__103; var __tmp__113; var __tmp__123; var __tmp__203; var __tmp__213; var __tmp__223; __tmp__003 = _this3._invInertia00 * _this3._transform._rotation00 + _this3._invInertia01 * _this3._transform._rotation01 + _this3._invInertia02 * _this3._transform._rotation02; __tmp__013 = _this3._invInertia00 * _this3._transform._rotation10 + _this3._invInertia01 * _this3._transform._rotation11 + _this3._invInertia02 * _this3._transform._rotation12; __tmp__023 = _this3._invInertia00 * _this3._transform._rotation20 + _this3._invInertia01 * _this3._transform._rotation21 + _this3._invInertia02 * _this3._transform._rotation22; __tmp__103 = _this3._invInertia10 * _this3._transform._rotation00 + _this3._invInertia11 * _this3._transform._rotation01 + _this3._invInertia12 * _this3._transform._rotation02; __tmp__113 = _this3._invInertia10 * _this3._transform._rotation10 + _this3._invInertia11 * _this3._transform._rotation11 + _this3._invInertia12 * _this3._transform._rotation12; __tmp__123 = _this3._invInertia10 * _this3._transform._rotation20 + _this3._invInertia11 * _this3._transform._rotation21 + _this3._invInertia12 * _this3._transform._rotation22; __tmp__203 = _this3._invInertia20 * _this3._transform._rotation00 + _this3._invInertia21 * _this3._transform._rotation01 + _this3._invInertia22 * _this3._transform._rotation02; __tmp__213 = _this3._invInertia20 * _this3._transform._rotation10 + _this3._invInertia21 * _this3._transform._rotation11 + _this3._invInertia22 * _this3._transform._rotation12; __tmp__223 = _this3._invInertia20 * _this3._transform._rotation20 + _this3._invInertia21 * _this3._transform._rotation21 + _this3._invInertia22 * _this3._transform._rotation22; _this3._invInertia00 = __tmp__003; _this3._invInertia01 = __tmp__013; _this3._invInertia02 = __tmp__023; _this3._invInertia10 = __tmp__103; _this3._invInertia11 = __tmp__113; _this3._invInertia12 = __tmp__123; _this3._invInertia20 = __tmp__203; _this3._invInertia21 = __tmp__213; _this3._invInertia22 = __tmp__223; _this3._invInertia00 *= _this3._rotFactor.x; _this3._invInertia01 *= _this3._rotFactor.x; _this3._invInertia02 *= _this3._rotFactor.x; _this3._invInertia10 *= _this3._rotFactor.y; _this3._invInertia11 *= _this3._rotFactor.y; _this3._invInertia12 *= _this3._rotFactor.y; _this3._invInertia20 *= _this3._rotFactor.z; _this3._invInertia21 *= _this3._rotFactor.z; _this3._invInertia22 *= _this3._rotFactor.z; } postSolve() { var lin1; var lin1X; var lin1Y; var lin1Z; var ang1; var ang1X; var ang1Y; var ang1Z; var ang2; var ang2X; var ang2Y; var ang2Z; lin1X = 0; lin1Y = 0; lin1Z = 0; ang1X = 0; ang1Y = 0; ang1Z = 0; ang2X = 0; ang2Y = 0; ang2Z = 0; var _g = 0; var _g1 = this.info.numRows; while(_g < _g1) { var i = _g++; var row = this.info.rows[i]; var imp = row.impulse; var jn = row.jacobianN; var jt = row.jacobianT; var jb = row.jacobianB; var impN = imp.impulseN; var impT = imp.impulseT; var impB = imp.impulseB; var impulseL; var impulseLX; var impulseLY; var impulseLZ; impulseLX = 0; impulseLY = 0; impulseLZ = 0; impulseLX += jt.lin1X * impT; impulseLY += jt.lin1Y * impT; impulseLZ += jt.lin1Z * impT; impulseLX += jb.lin1X * impB; impulseLY += jb.lin1Y * impB; impulseLZ += jb.lin1Z * impB; imp.impulseLX = impulseLX; imp.impulseLY = impulseLY; imp.impulseLZ = impulseLZ; lin1X += jn.lin1X * impN; lin1Y += jn.lin1Y * impN; lin1Z += jn.lin1Z * impN; ang1X += jn.ang1X * impN; ang1Y += jn.ang1Y * impN; ang1Z += jn.ang1Z * impN; ang2X += jn.ang2X * impN; ang2Y += jn.ang2Y * impN; ang2Z += jn.ang2Z * impN; lin1X += jt.lin1X * impT; lin1Y += jt.lin1Y * impT; lin1Z += jt.lin1Z * impT; ang1X += jt.ang1X * impT; ang1Y += jt.ang1Y * impT; ang1Z += jt.ang1Z * impT; ang2X += jt.ang2X * impT; ang2Y += jt.ang2Y * impT; ang2Z += jt.ang2Z * impT; lin1X += jb.lin1X * impB; lin1Y += jb.lin1Y * impB; lin1Z += jb.lin1Z * impB; ang1X += jb.ang1X * impB; ang1Y += jb.ang1Y * impB; ang1Z += jb.ang1Z * impB; ang2X += jb.ang2X * impB; ang2Y += jb.ang2Y * impB; ang2Z += jb.ang2Z * impB; } this._b1._linearContactImpulseX += lin1X; this._b1._linearContactImpulseY += lin1Y; this._b1._linearContactImpulseZ += lin1Z; this._b1._angularContactImpulseX += ang1X; this._b1._angularContactImpulseY += ang1Y; this._b1._angularContactImpulseZ += ang1Z; this._b2._linearContactImpulseX -= lin1X; this._b2._linearContactImpulseY -= lin1Y; this._b2._linearContactImpulseZ -= lin1Z; this._b2._angularContactImpulseX -= ang2X; this._b2._angularContactImpulseY -= ang2Y; this._b2._angularContactImpulseZ -= ang2Z; this.constraint._syncManifold(); } } oimo.dynamics.constraint.solver.pgs.PgsJointConstraintSolver = class oimo_dynamics_constraint_solver_pgs_PgsJointConstraintSolver extends oimo.dynamics.constraint.ConstraintSolver { constructor(joint) { super(); this.joint = joint; this.info = new oimo.dynamics.constraint.info.joint.JointSolverInfo(); var this1 = new Array(oimo.common.Setting.maxJacobianRows); this.massData = this1; var _g = 0; var _g1 = this.massData.length; while(_g < _g1) { var i = _g++; this.massData[i] = new oimo.dynamics.constraint.solver.common.JointSolverMassDataRow(); } } preSolveVelocity(timeStep) { this.joint._syncAnchors(); this.joint._getVelocitySolverInfo(timeStep,this.info); this._b1 = this.info.b1; this._b2 = this.info.b2; var invM1 = this._b1._invMass; var invM2 = this._b2._invMass; var invI1; var invI100; var invI101; var invI102; var invI110; var invI111; var invI112; var invI120; var invI121; var invI122; var invI2; var invI200; var invI201; var invI202; var invI210; var invI211; var invI212; var invI220; var invI221; var invI222; invI100 = this._b1._invInertia00; invI101 = this._b1._invInertia01; invI102 = this._b1._invInertia02; invI110 = this._b1._invInertia10; invI111 = this._b1._invInertia11; invI112 = this._b1._invInertia12; invI120 = this._b1._invInertia20; invI121 = this._b1._invInertia21; invI122 = this._b1._invInertia22; invI200 = this._b2._invInertia00; invI201 = this._b2._invInertia01; invI202 = this._b2._invInertia02; invI210 = this._b2._invInertia10; invI211 = this._b2._invInertia11; invI212 = this._b2._invInertia12; invI220 = this._b2._invInertia20; invI221 = this._b2._invInertia21; invI222 = this._b2._invInertia22; var _g = 0; var _g1 = this.info.numRows; while(_g < _g1) { var i = _g++; var row = this.info.rows[i]; var md = this.massData[i]; var j = row.jacobian; j.updateSparsity(); if((j.flag & 1) != 0) { md.invMLin1X = j.lin1X * invM1; md.invMLin1Y = j.lin1Y * invM1; md.invMLin1Z = j.lin1Z * invM1; md.invMLin2X = j.lin2X * invM2; md.invMLin2Y = j.lin2Y * invM2; md.invMLin2Z = j.lin2Z * invM2; } else { md.invMLin1X = 0; md.invMLin1Y = 0; md.invMLin1Z = 0; md.invMLin2X = 0; md.invMLin2Y = 0; md.invMLin2Z = 0; } if((j.flag & 2) != 0) { var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = invI100 * j.ang1X + invI101 * j.ang1Y + invI102 * j.ang1Z; __tmp__Y = invI110 * j.ang1X + invI111 * j.ang1Y + invI112 * j.ang1Z; __tmp__Z = invI120 * j.ang1X + invI121 * j.ang1Y + invI122 * j.ang1Z; md.invMAng1X = __tmp__X; md.invMAng1Y = __tmp__Y; md.invMAng1Z = __tmp__Z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = invI200 * j.ang2X + invI201 * j.ang2Y + invI202 * j.ang2Z; __tmp__Y1 = invI210 * j.ang2X + invI211 * j.ang2Y + invI212 * j.ang2Z; __tmp__Z1 = invI220 * j.ang2X + invI221 * j.ang2Y + invI222 * j.ang2Z; md.invMAng2X = __tmp__X1; md.invMAng2Y = __tmp__Y1; md.invMAng2Z = __tmp__Z1; } else { md.invMAng1X = 0; md.invMAng1Y = 0; md.invMAng1Z = 0; md.invMAng2X = 0; md.invMAng2Y = 0; md.invMAng2Z = 0; } md.massWithoutCfm = md.invMLin1X * j.lin1X + md.invMLin1Y * j.lin1Y + md.invMLin1Z * j.lin1Z + (md.invMLin2X * j.lin2X + md.invMLin2Y * j.lin2Y + md.invMLin2Z * j.lin2Z) + (md.invMAng1X * j.ang1X + md.invMAng1Y * j.ang1Y + md.invMAng1Z * j.ang1Z) + (md.invMAng2X * j.ang2X + md.invMAng2Y * j.ang2Y + md.invMAng2Z * j.ang2Z); md.mass = md.massWithoutCfm + row.cfm; if(md.massWithoutCfm != 0) { md.massWithoutCfm = 1 / md.massWithoutCfm; } if(md.mass != 0) { md.mass = 1 / md.mass; } } } warmStart(timeStep) { var factor = this.joint._positionCorrectionAlgorithm == oimo.dynamics.constraint.PositionCorrectionAlgorithm.BAUMGARTE ? oimo.common.Setting.jointWarmStartingFactorForBaungarte : oimo.common.Setting.jointWarmStartingFactor; factor *= timeStep.dtRatio; if(factor <= 0) { var _g = 0; var _g1 = this.info.numRows; while(_g < _g1) { var i = _g++; var row = this.info.rows[i]; var _this = row.impulse; _this.impulse = 0; _this.impulseM = 0; _this.impulseP = 0; } return; } var lv1; var lv1X; var lv1Y; var lv1Z; var lv2; var lv2X; var lv2Y; var lv2Z; var av1; var av1X; var av1Y; var av1Z; var av2; var av2X; var av2Y; var av2Z; lv1X = this._b1._velX; lv1Y = this._b1._velY; lv1Z = this._b1._velZ; lv2X = this._b2._velX; lv2Y = this._b2._velY; lv2Z = this._b2._velZ; av1X = this._b1._angVelX; av1Y = this._b1._angVelY; av1Z = this._b1._angVelZ; av2X = this._b2._angVelX; av2Y = this._b2._angVelY; av2Z = this._b2._angVelZ; var _g2 = 0; var _g11 = this.info.numRows; while(_g2 < _g11) { var i1 = _g2++; var row1 = this.info.rows[i1]; var md = this.massData[i1]; var imp = row1.impulse; var j = row1.jacobian; imp.impulse *= factor; imp.impulseM *= factor; var impulse = imp.impulse + imp.impulseM; lv1X += md.invMLin1X * impulse; lv1Y += md.invMLin1Y * impulse; lv1Z += md.invMLin1Z * impulse; lv2X += md.invMLin2X * -impulse; lv2Y += md.invMLin2Y * -impulse; lv2Z += md.invMLin2Z * -impulse; av1X += md.invMAng1X * impulse; av1Y += md.invMAng1Y * impulse; av1Z += md.invMAng1Z * impulse; av2X += md.invMAng2X * -impulse; av2Y += md.invMAng2Y * -impulse; av2Z += md.invMAng2Z * -impulse; } this._b1._velX = lv1X; this._b1._velY = lv1Y; this._b1._velZ = lv1Z; this._b2._velX = lv2X; this._b2._velY = lv2Y; this._b2._velZ = lv2Z; this._b1._angVelX = av1X; this._b1._angVelY = av1Y; this._b1._angVelZ = av1Z; this._b2._angVelX = av2X; this._b2._angVelY = av2Y; this._b2._angVelZ = av2Z; } solveVelocity() { var lv1; var lv1X; var lv1Y; var lv1Z; var lv2; var lv2X; var lv2Y; var lv2Z; var av1; var av1X; var av1Y; var av1Z; var av2; var av2X; var av2Y; var av2Z; lv1X = this._b1._velX; lv1Y = this._b1._velY; lv1Z = this._b1._velZ; lv2X = this._b2._velX; lv2Y = this._b2._velY; lv2Z = this._b2._velZ; av1X = this._b1._angVelX; av1Y = this._b1._angVelY; av1Z = this._b1._angVelZ; av2X = this._b2._angVelX; av2Y = this._b2._angVelY; av2Z = this._b2._angVelZ; var _g = 0; var _g1 = this.info.numRows; while(_g < _g1) { var i = _g++; var row = this.info.rows[i]; var md = this.massData[i]; var imp = row.impulse; var j = row.jacobian; if(row.motorMaxImpulse == 0) { continue; } var rv = 0; rv += lv1X * j.lin1X + lv1Y * j.lin1Y + lv1Z * j.lin1Z; rv -= lv2X * j.lin2X + lv2Y * j.lin2Y + lv2Z * j.lin2Z; rv += av1X * j.ang1X + av1Y * j.ang1Y + av1Z * j.ang1Z; rv -= av2X * j.ang2X + av2Y * j.ang2Y + av2Z * j.ang2Z; var impulseM = (-row.motorSpeed - rv) * md.massWithoutCfm; var oldImpulseM = imp.impulseM; imp.impulseM += impulseM; if(imp.impulseM < -row.motorMaxImpulse) { imp.impulseM = -row.motorMaxImpulse; } else if(imp.impulseM > row.motorMaxImpulse) { imp.impulseM = row.motorMaxImpulse; } impulseM = imp.impulseM - oldImpulseM; if((j.flag & 1) != 0) { lv1X += md.invMLin1X * impulseM; lv1Y += md.invMLin1Y * impulseM; lv1Z += md.invMLin1Z * impulseM; lv2X += md.invMLin2X * -impulseM; lv2Y += md.invMLin2Y * -impulseM; lv2Z += md.invMLin2Z * -impulseM; } if((j.flag & 2) != 0) { av1X += md.invMAng1X * impulseM; av1Y += md.invMAng1Y * impulseM; av1Z += md.invMAng1Z * impulseM; av2X += md.invMAng2X * -impulseM; av2Y += md.invMAng2Y * -impulseM; av2Z += md.invMAng2Z * -impulseM; } } var _g2 = 0; var _g3 = this.info.numRows; while(_g2 < _g3) { var i1 = _g2++; var row1 = this.info.rows[i1]; var md1 = this.massData[i1]; var imp1 = row1.impulse; var j1 = row1.jacobian; var rv1 = 0; rv1 += lv1X * j1.lin1X + lv1Y * j1.lin1Y + lv1Z * j1.lin1Z; rv1 -= lv2X * j1.lin2X + lv2Y * j1.lin2Y + lv2Z * j1.lin2Z; rv1 += av1X * j1.ang1X + av1Y * j1.ang1Y + av1Z * j1.ang1Z; rv1 -= av2X * j1.ang2X + av2Y * j1.ang2Y + av2Z * j1.ang2Z; var impulse = (row1.rhs - rv1 - imp1.impulse * row1.cfm) * md1.mass; var oldImpulse = imp1.impulse; imp1.impulse += impulse; if(imp1.impulse < row1.minImpulse) { imp1.impulse = row1.minImpulse; } else if(imp1.impulse > row1.maxImpulse) { imp1.impulse = row1.maxImpulse; } impulse = imp1.impulse - oldImpulse; if((j1.flag & 1) != 0) { lv1X += md1.invMLin1X * impulse; lv1Y += md1.invMLin1Y * impulse; lv1Z += md1.invMLin1Z * impulse; lv2X += md1.invMLin2X * -impulse; lv2Y += md1.invMLin2Y * -impulse; lv2Z += md1.invMLin2Z * -impulse; } if((j1.flag & 2) != 0) { av1X += md1.invMAng1X * impulse; av1Y += md1.invMAng1Y * impulse; av1Z += md1.invMAng1Z * impulse; av2X += md1.invMAng2X * -impulse; av2Y += md1.invMAng2Y * -impulse; av2Z += md1.invMAng2Z * -impulse; } } this._b1._velX = lv1X; this._b1._velY = lv1Y; this._b1._velZ = lv1Z; this._b2._velX = lv2X; this._b2._velY = lv2Y; this._b2._velZ = lv2Z; this._b1._angVelX = av1X; this._b1._angVelY = av1Y; this._b1._angVelZ = av1Z; this._b2._angVelX = av2X; this._b2._angVelY = av2Y; this._b2._angVelZ = av2Z; } postSolveVelocity(timeStep) { var lin; var linX; var linY; var linZ; var ang; var angX; var angY; var angZ; linX = 0; linY = 0; linZ = 0; angX = 0; angY = 0; angZ = 0; var _g = 0; var _g1 = this.info.numRows; while(_g < _g1) { var i = _g++; var row = this.info.rows[i]; var imp = row.impulse; var j = row.jacobian; if((j.flag & 1) != 0) { linX += j.lin1X * imp.impulse; linY += j.lin1Y * imp.impulse; linZ += j.lin1Z * imp.impulse; } else if((j.flag & 2) != 0) { angX += j.ang1X * imp.impulse; angY += j.ang1Y * imp.impulse; angZ += j.ang1Z * imp.impulse; } } this.joint._appliedForceX = linX * timeStep.invDt; this.joint._appliedForceY = linY * timeStep.invDt; this.joint._appliedForceZ = linZ * timeStep.invDt; this.joint._appliedTorqueX = angX * timeStep.invDt; this.joint._appliedTorqueY = angY * timeStep.invDt; this.joint._appliedTorqueZ = angZ * timeStep.invDt; } preSolvePosition(timeStep) { this.joint._syncAnchors(); this.joint._getPositionSolverInfo(this.info); this._b1 = this.info.b1; this._b2 = this.info.b2; var invM1 = this._b1._invMass; var invM2 = this._b2._invMass; var invI1; var invI100; var invI101; var invI102; var invI110; var invI111; var invI112; var invI120; var invI121; var invI122; var invI2; var invI200; var invI201; var invI202; var invI210; var invI211; var invI212; var invI220; var invI221; var invI222; invI100 = this._b1._invInertia00; invI101 = this._b1._invInertia01; invI102 = this._b1._invInertia02; invI110 = this._b1._invInertia10; invI111 = this._b1._invInertia11; invI112 = this._b1._invInertia12; invI120 = this._b1._invInertia20; invI121 = this._b1._invInertia21; invI122 = this._b1._invInertia22; invI200 = this._b2._invInertia00; invI201 = this._b2._invInertia01; invI202 = this._b2._invInertia02; invI210 = this._b2._invInertia10; invI211 = this._b2._invInertia11; invI212 = this._b2._invInertia12; invI220 = this._b2._invInertia20; invI221 = this._b2._invInertia21; invI222 = this._b2._invInertia22; var _g = 0; var _g1 = this.info.numRows; while(_g < _g1) { var i = _g++; var row = this.info.rows[i]; var md = this.massData[i]; var imp = row.impulse; var j = row.jacobian; md.invMLin1X = j.lin1X * invM1; md.invMLin1Y = j.lin1Y * invM1; md.invMLin1Z = j.lin1Z * invM1; md.invMLin2X = j.lin2X * invM2; md.invMLin2Y = j.lin2Y * invM2; md.invMLin2Z = j.lin2Z * invM2; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = invI100 * j.ang1X + invI101 * j.ang1Y + invI102 * j.ang1Z; __tmp__Y = invI110 * j.ang1X + invI111 * j.ang1Y + invI112 * j.ang1Z; __tmp__Z = invI120 * j.ang1X + invI121 * j.ang1Y + invI122 * j.ang1Z; md.invMAng1X = __tmp__X; md.invMAng1Y = __tmp__Y; md.invMAng1Z = __tmp__Z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = invI200 * j.ang2X + invI201 * j.ang2Y + invI202 * j.ang2Z; __tmp__Y1 = invI210 * j.ang2X + invI211 * j.ang2Y + invI212 * j.ang2Z; __tmp__Z1 = invI220 * j.ang2X + invI221 * j.ang2Y + invI222 * j.ang2Z; md.invMAng2X = __tmp__X1; md.invMAng2Y = __tmp__Y1; md.invMAng2Z = __tmp__Z1; md.mass = md.invMLin1X * j.lin1X + md.invMLin1Y * j.lin1Y + md.invMLin1Z * j.lin1Z + (md.invMLin2X * j.lin2X + md.invMLin2Y * j.lin2Y + md.invMLin2Z * j.lin2Z) + (md.invMAng1X * j.ang1X + md.invMAng1Y * j.ang1Y + md.invMAng1Z * j.ang1Z) + (md.invMAng2X * j.ang2X + md.invMAng2Y * j.ang2Y + md.invMAng2Z * j.ang2Z); if(md.mass != 0) { md.mass = 1 / md.mass; } } var _g2 = 0; var _g11 = this.info.numRows; while(_g2 < _g11) { var i1 = _g2++; this.info.rows[i1].impulse.impulseP = 0; } } solvePositionSplitImpulse() { var lv1; var lv1X; var lv1Y; var lv1Z; var lv2; var lv2X; var lv2Y; var lv2Z; var av1; var av1X; var av1Y; var av1Z; var av2; var av2X; var av2Y; var av2Z; lv1X = this._b1._pseudoVelX; lv1Y = this._b1._pseudoVelY; lv1Z = this._b1._pseudoVelZ; lv2X = this._b2._pseudoVelX; lv2Y = this._b2._pseudoVelY; lv2Z = this._b2._pseudoVelZ; av1X = this._b1._angPseudoVelX; av1Y = this._b1._angPseudoVelY; av1Z = this._b1._angPseudoVelZ; av2X = this._b2._angPseudoVelX; av2Y = this._b2._angPseudoVelY; av2Z = this._b2._angPseudoVelZ; var _g = 0; var _g1 = this.info.numRows; while(_g < _g1) { var i = _g++; var row = this.info.rows[i]; var md = this.massData[i]; var imp = row.impulse; var j = row.jacobian; var rv = 0; rv += lv1X * j.lin1X + lv1Y * j.lin1Y + lv1Z * j.lin1Z; rv -= lv2X * j.lin2X + lv2Y * j.lin2Y + lv2Z * j.lin2Z; rv += av1X * j.ang1X + av1Y * j.ang1Y + av1Z * j.ang1Z; rv -= av2X * j.ang2X + av2Y * j.ang2Y + av2Z * j.ang2Z; var impulseP = (row.rhs * oimo.common.Setting.positionSplitImpulseBaumgarte - rv) * md.mass; var oldImpulseP = imp.impulseP; imp.impulseP += impulseP; if(imp.impulseP < row.minImpulse) { imp.impulseP = row.minImpulse; } else if(imp.impulseP > row.maxImpulse) { imp.impulseP = row.maxImpulse; } impulseP = imp.impulseP - oldImpulseP; lv1X += md.invMLin1X * impulseP; lv1Y += md.invMLin1Y * impulseP; lv1Z += md.invMLin1Z * impulseP; lv2X += md.invMLin2X * -impulseP; lv2Y += md.invMLin2Y * -impulseP; lv2Z += md.invMLin2Z * -impulseP; av1X += md.invMAng1X * impulseP; av1Y += md.invMAng1Y * impulseP; av1Z += md.invMAng1Z * impulseP; av2X += md.invMAng2X * -impulseP; av2Y += md.invMAng2Y * -impulseP; av2Z += md.invMAng2Z * -impulseP; } this._b1._pseudoVelX = lv1X; this._b1._pseudoVelY = lv1Y; this._b1._pseudoVelZ = lv1Z; this._b2._pseudoVelX = lv2X; this._b2._pseudoVelY = lv2Y; this._b2._pseudoVelZ = lv2Z; this._b1._angPseudoVelX = av1X; this._b1._angPseudoVelY = av1Y; this._b1._angPseudoVelZ = av1Z; this._b2._angPseudoVelX = av2X; this._b2._angPseudoVelY = av2Y; this._b2._angPseudoVelZ = av2Z; } solvePositionNgs(timeStep) { this.joint._syncAnchors(); this.joint._getPositionSolverInfo(this.info); this._b1 = this.info.b1; this._b2 = this.info.b2; var invM1 = this._b1._invMass; var invM2 = this._b2._invMass; var invI1; var invI100; var invI101; var invI102; var invI110; var invI111; var invI112; var invI120; var invI121; var invI122; var invI2; var invI200; var invI201; var invI202; var invI210; var invI211; var invI212; var invI220; var invI221; var invI222; invI100 = this._b1._invInertia00; invI101 = this._b1._invInertia01; invI102 = this._b1._invInertia02; invI110 = this._b1._invInertia10; invI111 = this._b1._invInertia11; invI112 = this._b1._invInertia12; invI120 = this._b1._invInertia20; invI121 = this._b1._invInertia21; invI122 = this._b1._invInertia22; invI200 = this._b2._invInertia00; invI201 = this._b2._invInertia01; invI202 = this._b2._invInertia02; invI210 = this._b2._invInertia10; invI211 = this._b2._invInertia11; invI212 = this._b2._invInertia12; invI220 = this._b2._invInertia20; invI221 = this._b2._invInertia21; invI222 = this._b2._invInertia22; var _g = 0; var _g1 = this.info.numRows; while(_g < _g1) { var i = _g++; var row = this.info.rows[i]; var md = this.massData[i]; var imp = row.impulse; var j = row.jacobian; md.invMLin1X = j.lin1X * invM1; md.invMLin1Y = j.lin1Y * invM1; md.invMLin1Z = j.lin1Z * invM1; md.invMLin2X = j.lin2X * invM2; md.invMLin2Y = j.lin2Y * invM2; md.invMLin2Z = j.lin2Z * invM2; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = invI100 * j.ang1X + invI101 * j.ang1Y + invI102 * j.ang1Z; __tmp__Y = invI110 * j.ang1X + invI111 * j.ang1Y + invI112 * j.ang1Z; __tmp__Z = invI120 * j.ang1X + invI121 * j.ang1Y + invI122 * j.ang1Z; md.invMAng1X = __tmp__X; md.invMAng1Y = __tmp__Y; md.invMAng1Z = __tmp__Z; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = invI200 * j.ang2X + invI201 * j.ang2Y + invI202 * j.ang2Z; __tmp__Y1 = invI210 * j.ang2X + invI211 * j.ang2Y + invI212 * j.ang2Z; __tmp__Z1 = invI220 * j.ang2X + invI221 * j.ang2Y + invI222 * j.ang2Z; md.invMAng2X = __tmp__X1; md.invMAng2Y = __tmp__Y1; md.invMAng2Z = __tmp__Z1; md.mass = md.invMLin1X * j.lin1X + md.invMLin1Y * j.lin1Y + md.invMLin1Z * j.lin1Z + (md.invMLin2X * j.lin2X + md.invMLin2Y * j.lin2Y + md.invMLin2Z * j.lin2Z) + (md.invMAng1X * j.ang1X + md.invMAng1Y * j.ang1Y + md.invMAng1Z * j.ang1Z) + (md.invMAng2X * j.ang2X + md.invMAng2Y * j.ang2Y + md.invMAng2Z * j.ang2Z); if(md.mass != 0) { md.mass = 1 / md.mass; } } var lv1; var lv1X; var lv1Y; var lv1Z; var lv2; var lv2X; var lv2Y; var lv2Z; var av1; var av1X; var av1Y; var av1Z; var av2; var av2X; var av2Y; var av2Z; lv1X = 0; lv1Y = 0; lv1Z = 0; lv2X = 0; lv2Y = 0; lv2Z = 0; av1X = 0; av1Y = 0; av1Z = 0; av2X = 0; av2Y = 0; av2Z = 0; var _g2 = 0; var _g11 = this.info.numRows; while(_g2 < _g11) { var i1 = _g2++; var row1 = this.info.rows[i1]; var md1 = this.massData[i1]; var imp1 = row1.impulse; var j1 = row1.jacobian; var rv = 0; rv += lv1X * j1.lin1X + lv1Y * j1.lin1Y + lv1Z * j1.lin1Z; rv -= lv2X * j1.lin2X + lv2Y * j1.lin2Y + lv2Z * j1.lin2Z; rv += av1X * j1.ang1X + av1Y * j1.ang1Y + av1Z * j1.ang1Z; rv -= av2X * j1.ang2X + av2Y * j1.ang2Y + av2Z * j1.ang2Z; var impulseP = (row1.rhs * oimo.common.Setting.positionNgsBaumgarte - rv) * md1.mass; var oldImpulseP = imp1.impulseP; imp1.impulseP += impulseP; if(imp1.impulseP < row1.minImpulse) { imp1.impulseP = row1.minImpulse; } else if(imp1.impulseP > row1.maxImpulse) { imp1.impulseP = row1.maxImpulse; } impulseP = imp1.impulseP - oldImpulseP; lv1X += md1.invMLin1X * impulseP; lv1Y += md1.invMLin1Y * impulseP; lv1Z += md1.invMLin1Z * impulseP; lv2X += md1.invMLin2X * -impulseP; lv2Y += md1.invMLin2Y * -impulseP; lv2Z += md1.invMLin2Z * -impulseP; av1X += md1.invMAng1X * impulseP; av1Y += md1.invMAng1Y * impulseP; av1Z += md1.invMAng1Z * impulseP; av2X += md1.invMAng2X * -impulseP; av2Y += md1.invMAng2Y * -impulseP; av2Z += md1.invMAng2Z * -impulseP; } var _this = this._b1; _this._transform._positionX += lv1X; _this._transform._positionY += lv1Y; _this._transform._positionZ += lv1Z; var _this1 = this._b2; _this1._transform._positionX += lv2X; _this1._transform._positionY += lv2Y; _this1._transform._positionZ += lv2Z; var _this2 = this._b1; var theta = Math.sqrt(av1X * av1X + av1Y * av1Y + av1Z * av1Z); var halfTheta = theta * 0.5; var rotationToSinAxisFactor; var cosHalfTheta; if(halfTheta < 0.5) { var ht2 = halfTheta * halfTheta; rotationToSinAxisFactor = 0.5 * (1 - ht2 * 0.166666666666666657 + ht2 * ht2 * 0.00833333333333333322); cosHalfTheta = 1 - ht2 * 0.5 + ht2 * ht2 * 0.0416666666666666644; } else { rotationToSinAxisFactor = Math.sin(halfTheta) / theta; cosHalfTheta = Math.cos(halfTheta); } var sinAxis; var sinAxisX; var sinAxisY; var sinAxisZ; sinAxisX = av1X * rotationToSinAxisFactor; sinAxisY = av1Y * rotationToSinAxisFactor; sinAxisZ = av1Z * rotationToSinAxisFactor; var dq; var dqX; var dqY; var dqZ; var dqW; dqX = sinAxisX; dqY = sinAxisY; dqZ = sinAxisZ; dqW = cosHalfTheta; var q; var qX; var qY; var qZ; var qW; var e00 = _this2._transform._rotation00; var e11 = _this2._transform._rotation11; var e22 = _this2._transform._rotation22; var t = e00 + e11 + e22; var s; if(t > 0) { s = Math.sqrt(t + 1); qW = 0.5 * s; s = 0.5 / s; qX = (_this2._transform._rotation21 - _this2._transform._rotation12) * s; qY = (_this2._transform._rotation02 - _this2._transform._rotation20) * s; qZ = (_this2._transform._rotation10 - _this2._transform._rotation01) * s; } else if(e00 > e11) { if(e00 > e22) { s = Math.sqrt(e00 - e11 - e22 + 1); qX = 0.5 * s; s = 0.5 / s; qY = (_this2._transform._rotation01 + _this2._transform._rotation10) * s; qZ = (_this2._transform._rotation02 + _this2._transform._rotation20) * s; qW = (_this2._transform._rotation21 - _this2._transform._rotation12) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); qZ = 0.5 * s; s = 0.5 / s; qX = (_this2._transform._rotation02 + _this2._transform._rotation20) * s; qY = (_this2._transform._rotation12 + _this2._transform._rotation21) * s; qW = (_this2._transform._rotation10 - _this2._transform._rotation01) * s; } } else if(e11 > e22) { s = Math.sqrt(e11 - e22 - e00 + 1); qY = 0.5 * s; s = 0.5 / s; qX = (_this2._transform._rotation01 + _this2._transform._rotation10) * s; qZ = (_this2._transform._rotation12 + _this2._transform._rotation21) * s; qW = (_this2._transform._rotation02 - _this2._transform._rotation20) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); qZ = 0.5 * s; s = 0.5 / s; qX = (_this2._transform._rotation02 + _this2._transform._rotation20) * s; qY = (_this2._transform._rotation12 + _this2._transform._rotation21) * s; qW = (_this2._transform._rotation10 - _this2._transform._rotation01) * s; } qX = dqW * qX + dqX * qW + dqY * qZ - dqZ * qY; qY = dqW * qY - dqX * qZ + dqY * qW + dqZ * qX; qZ = dqW * qZ + dqX * qY - dqY * qX + dqZ * qW; qW = dqW * qW - dqX * qX - dqY * qY - dqZ * qZ; var l = qX * qX + qY * qY + qZ * qZ + qW * qW; if(l > 1e-32) { l = 1 / Math.sqrt(l); } qX *= l; qY *= l; qZ *= l; qW *= l; var x = qX; var y = qY; var z = qZ; var w = qW; var x2 = 2 * x; var y2 = 2 * y; var z2 = 2 * z; var xx = x * x2; var yy = y * y2; var zz = z * z2; var xy = x * y2; var yz = y * z2; var xz = x * z2; var wx = w * x2; var wy = w * y2; var wz = w * z2; _this2._transform._rotation00 = 1 - yy - zz; _this2._transform._rotation01 = xy - wz; _this2._transform._rotation02 = xz + wy; _this2._transform._rotation10 = xy + wz; _this2._transform._rotation11 = 1 - xx - zz; _this2._transform._rotation12 = yz - wx; _this2._transform._rotation20 = xz - wy; _this2._transform._rotation21 = yz + wx; _this2._transform._rotation22 = 1 - xx - yy; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = _this2._transform._rotation00 * _this2._invLocalInertia00 + _this2._transform._rotation01 * _this2._invLocalInertia10 + _this2._transform._rotation02 * _this2._invLocalInertia20; __tmp__01 = _this2._transform._rotation00 * _this2._invLocalInertia01 + _this2._transform._rotation01 * _this2._invLocalInertia11 + _this2._transform._rotation02 * _this2._invLocalInertia21; __tmp__02 = _this2._transform._rotation00 * _this2._invLocalInertia02 + _this2._transform._rotation01 * _this2._invLocalInertia12 + _this2._transform._rotation02 * _this2._invLocalInertia22; __tmp__10 = _this2._transform._rotation10 * _this2._invLocalInertia00 + _this2._transform._rotation11 * _this2._invLocalInertia10 + _this2._transform._rotation12 * _this2._invLocalInertia20; __tmp__11 = _this2._transform._rotation10 * _this2._invLocalInertia01 + _this2._transform._rotation11 * _this2._invLocalInertia11 + _this2._transform._rotation12 * _this2._invLocalInertia21; __tmp__12 = _this2._transform._rotation10 * _this2._invLocalInertia02 + _this2._transform._rotation11 * _this2._invLocalInertia12 + _this2._transform._rotation12 * _this2._invLocalInertia22; __tmp__20 = _this2._transform._rotation20 * _this2._invLocalInertia00 + _this2._transform._rotation21 * _this2._invLocalInertia10 + _this2._transform._rotation22 * _this2._invLocalInertia20; __tmp__21 = _this2._transform._rotation20 * _this2._invLocalInertia01 + _this2._transform._rotation21 * _this2._invLocalInertia11 + _this2._transform._rotation22 * _this2._invLocalInertia21; __tmp__22 = _this2._transform._rotation20 * _this2._invLocalInertia02 + _this2._transform._rotation21 * _this2._invLocalInertia12 + _this2._transform._rotation22 * _this2._invLocalInertia22; _this2._invInertia00 = __tmp__00; _this2._invInertia01 = __tmp__01; _this2._invInertia02 = __tmp__02; _this2._invInertia10 = __tmp__10; _this2._invInertia11 = __tmp__11; _this2._invInertia12 = __tmp__12; _this2._invInertia20 = __tmp__20; _this2._invInertia21 = __tmp__21; _this2._invInertia22 = __tmp__22; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = _this2._invInertia00 * _this2._transform._rotation00 + _this2._invInertia01 * _this2._transform._rotation01 + _this2._invInertia02 * _this2._transform._rotation02; __tmp__011 = _this2._invInertia00 * _this2._transform._rotation10 + _this2._invInertia01 * _this2._transform._rotation11 + _this2._invInertia02 * _this2._transform._rotation12; __tmp__021 = _this2._invInertia00 * _this2._transform._rotation20 + _this2._invInertia01 * _this2._transform._rotation21 + _this2._invInertia02 * _this2._transform._rotation22; __tmp__101 = _this2._invInertia10 * _this2._transform._rotation00 + _this2._invInertia11 * _this2._transform._rotation01 + _this2._invInertia12 * _this2._transform._rotation02; __tmp__111 = _this2._invInertia10 * _this2._transform._rotation10 + _this2._invInertia11 * _this2._transform._rotation11 + _this2._invInertia12 * _this2._transform._rotation12; __tmp__121 = _this2._invInertia10 * _this2._transform._rotation20 + _this2._invInertia11 * _this2._transform._rotation21 + _this2._invInertia12 * _this2._transform._rotation22; __tmp__201 = _this2._invInertia20 * _this2._transform._rotation00 + _this2._invInertia21 * _this2._transform._rotation01 + _this2._invInertia22 * _this2._transform._rotation02; __tmp__211 = _this2._invInertia20 * _this2._transform._rotation10 + _this2._invInertia21 * _this2._transform._rotation11 + _this2._invInertia22 * _this2._transform._rotation12; __tmp__221 = _this2._invInertia20 * _this2._transform._rotation20 + _this2._invInertia21 * _this2._transform._rotation21 + _this2._invInertia22 * _this2._transform._rotation22; _this2._invInertia00 = __tmp__001; _this2._invInertia01 = __tmp__011; _this2._invInertia02 = __tmp__021; _this2._invInertia10 = __tmp__101; _this2._invInertia11 = __tmp__111; _this2._invInertia12 = __tmp__121; _this2._invInertia20 = __tmp__201; _this2._invInertia21 = __tmp__211; _this2._invInertia22 = __tmp__221; _this2._invInertia00 *= _this2._rotFactor.x; _this2._invInertia01 *= _this2._rotFactor.x; _this2._invInertia02 *= _this2._rotFactor.x; _this2._invInertia10 *= _this2._rotFactor.y; _this2._invInertia11 *= _this2._rotFactor.y; _this2._invInertia12 *= _this2._rotFactor.y; _this2._invInertia20 *= _this2._rotFactor.z; _this2._invInertia21 *= _this2._rotFactor.z; _this2._invInertia22 *= _this2._rotFactor.z; var _this3 = this._b2; var theta1 = Math.sqrt(av2X * av2X + av2Y * av2Y + av2Z * av2Z); var halfTheta1 = theta1 * 0.5; var rotationToSinAxisFactor1; var cosHalfTheta1; if(halfTheta1 < 0.5) { var ht21 = halfTheta1 * halfTheta1; rotationToSinAxisFactor1 = 0.5 * (1 - ht21 * 0.166666666666666657 + ht21 * ht21 * 0.00833333333333333322); cosHalfTheta1 = 1 - ht21 * 0.5 + ht21 * ht21 * 0.0416666666666666644; } else { rotationToSinAxisFactor1 = Math.sin(halfTheta1) / theta1; cosHalfTheta1 = Math.cos(halfTheta1); } var sinAxis1; var sinAxisX1; var sinAxisY1; var sinAxisZ1; sinAxisX1 = av2X * rotationToSinAxisFactor1; sinAxisY1 = av2Y * rotationToSinAxisFactor1; sinAxisZ1 = av2Z * rotationToSinAxisFactor1; var dq1; var dqX1; var dqY1; var dqZ1; var dqW1; dqX1 = sinAxisX1; dqY1 = sinAxisY1; dqZ1 = sinAxisZ1; dqW1 = cosHalfTheta1; var q1; var qX1; var qY1; var qZ1; var qW1; var e001 = _this3._transform._rotation00; var e111 = _this3._transform._rotation11; var e221 = _this3._transform._rotation22; var t1 = e001 + e111 + e221; var s1; if(t1 > 0) { s1 = Math.sqrt(t1 + 1); qW1 = 0.5 * s1; s1 = 0.5 / s1; qX1 = (_this3._transform._rotation21 - _this3._transform._rotation12) * s1; qY1 = (_this3._transform._rotation02 - _this3._transform._rotation20) * s1; qZ1 = (_this3._transform._rotation10 - _this3._transform._rotation01) * s1; } else if(e001 > e111) { if(e001 > e221) { s1 = Math.sqrt(e001 - e111 - e221 + 1); qX1 = 0.5 * s1; s1 = 0.5 / s1; qY1 = (_this3._transform._rotation01 + _this3._transform._rotation10) * s1; qZ1 = (_this3._transform._rotation02 + _this3._transform._rotation20) * s1; qW1 = (_this3._transform._rotation21 - _this3._transform._rotation12) * s1; } else { s1 = Math.sqrt(e221 - e001 - e111 + 1); qZ1 = 0.5 * s1; s1 = 0.5 / s1; qX1 = (_this3._transform._rotation02 + _this3._transform._rotation20) * s1; qY1 = (_this3._transform._rotation12 + _this3._transform._rotation21) * s1; qW1 = (_this3._transform._rotation10 - _this3._transform._rotation01) * s1; } } else if(e111 > e221) { s1 = Math.sqrt(e111 - e221 - e001 + 1); qY1 = 0.5 * s1; s1 = 0.5 / s1; qX1 = (_this3._transform._rotation01 + _this3._transform._rotation10) * s1; qZ1 = (_this3._transform._rotation12 + _this3._transform._rotation21) * s1; qW1 = (_this3._transform._rotation02 - _this3._transform._rotation20) * s1; } else { s1 = Math.sqrt(e221 - e001 - e111 + 1); qZ1 = 0.5 * s1; s1 = 0.5 / s1; qX1 = (_this3._transform._rotation02 + _this3._transform._rotation20) * s1; qY1 = (_this3._transform._rotation12 + _this3._transform._rotation21) * s1; qW1 = (_this3._transform._rotation10 - _this3._transform._rotation01) * s1; } qX1 = dqW1 * qX1 + dqX1 * qW1 + dqY1 * qZ1 - dqZ1 * qY1; qY1 = dqW1 * qY1 - dqX1 * qZ1 + dqY1 * qW1 + dqZ1 * qX1; qZ1 = dqW1 * qZ1 + dqX1 * qY1 - dqY1 * qX1 + dqZ1 * qW1; qW1 = dqW1 * qW1 - dqX1 * qX1 - dqY1 * qY1 - dqZ1 * qZ1; var l1 = qX1 * qX1 + qY1 * qY1 + qZ1 * qZ1 + qW1 * qW1; if(l1 > 1e-32) { l1 = 1 / Math.sqrt(l1); } qX1 *= l1; qY1 *= l1; qZ1 *= l1; qW1 *= l1; var x1 = qX1; var y1 = qY1; var z1 = qZ1; var w1 = qW1; var x21 = 2 * x1; var y21 = 2 * y1; var z21 = 2 * z1; var xx1 = x1 * x21; var yy1 = y1 * y21; var zz1 = z1 * z21; var xy1 = x1 * y21; var yz1 = y1 * z21; var xz1 = x1 * z21; var wx1 = w1 * x21; var wy1 = w1 * y21; var wz1 = w1 * z21; _this3._transform._rotation00 = 1 - yy1 - zz1; _this3._transform._rotation01 = xy1 - wz1; _this3._transform._rotation02 = xz1 + wy1; _this3._transform._rotation10 = xy1 + wz1; _this3._transform._rotation11 = 1 - xx1 - zz1; _this3._transform._rotation12 = yz1 - wx1; _this3._transform._rotation20 = xz1 - wy1; _this3._transform._rotation21 = yz1 + wx1; _this3._transform._rotation22 = 1 - xx1 - yy1; var __tmp__002; var __tmp__012; var __tmp__022; var __tmp__102; var __tmp__112; var __tmp__122; var __tmp__202; var __tmp__212; var __tmp__222; __tmp__002 = _this3._transform._rotation00 * _this3._invLocalInertia00 + _this3._transform._rotation01 * _this3._invLocalInertia10 + _this3._transform._rotation02 * _this3._invLocalInertia20; __tmp__012 = _this3._transform._rotation00 * _this3._invLocalInertia01 + _this3._transform._rotation01 * _this3._invLocalInertia11 + _this3._transform._rotation02 * _this3._invLocalInertia21; __tmp__022 = _this3._transform._rotation00 * _this3._invLocalInertia02 + _this3._transform._rotation01 * _this3._invLocalInertia12 + _this3._transform._rotation02 * _this3._invLocalInertia22; __tmp__102 = _this3._transform._rotation10 * _this3._invLocalInertia00 + _this3._transform._rotation11 * _this3._invLocalInertia10 + _this3._transform._rotation12 * _this3._invLocalInertia20; __tmp__112 = _this3._transform._rotation10 * _this3._invLocalInertia01 + _this3._transform._rotation11 * _this3._invLocalInertia11 + _this3._transform._rotation12 * _this3._invLocalInertia21; __tmp__122 = _this3._transform._rotation10 * _this3._invLocalInertia02 + _this3._transform._rotation11 * _this3._invLocalInertia12 + _this3._transform._rotation12 * _this3._invLocalInertia22; __tmp__202 = _this3._transform._rotation20 * _this3._invLocalInertia00 + _this3._transform._rotation21 * _this3._invLocalInertia10 + _this3._transform._rotation22 * _this3._invLocalInertia20; __tmp__212 = _this3._transform._rotation20 * _this3._invLocalInertia01 + _this3._transform._rotation21 * _this3._invLocalInertia11 + _this3._transform._rotation22 * _this3._invLocalInertia21; __tmp__222 = _this3._transform._rotation20 * _this3._invLocalInertia02 + _this3._transform._rotation21 * _this3._invLocalInertia12 + _this3._transform._rotation22 * _this3._invLocalInertia22; _this3._invInertia00 = __tmp__002; _this3._invInertia01 = __tmp__012; _this3._invInertia02 = __tmp__022; _this3._invInertia10 = __tmp__102; _this3._invInertia11 = __tmp__112; _this3._invInertia12 = __tmp__122; _this3._invInertia20 = __tmp__202; _this3._invInertia21 = __tmp__212; _this3._invInertia22 = __tmp__222; var __tmp__003; var __tmp__013; var __tmp__023; var __tmp__103; var __tmp__113; var __tmp__123; var __tmp__203; var __tmp__213; var __tmp__223; __tmp__003 = _this3._invInertia00 * _this3._transform._rotation00 + _this3._invInertia01 * _this3._transform._rotation01 + _this3._invInertia02 * _this3._transform._rotation02; __tmp__013 = _this3._invInertia00 * _this3._transform._rotation10 + _this3._invInertia01 * _this3._transform._rotation11 + _this3._invInertia02 * _this3._transform._rotation12; __tmp__023 = _this3._invInertia00 * _this3._transform._rotation20 + _this3._invInertia01 * _this3._transform._rotation21 + _this3._invInertia02 * _this3._transform._rotation22; __tmp__103 = _this3._invInertia10 * _this3._transform._rotation00 + _this3._invInertia11 * _this3._transform._rotation01 + _this3._invInertia12 * _this3._transform._rotation02; __tmp__113 = _this3._invInertia10 * _this3._transform._rotation10 + _this3._invInertia11 * _this3._transform._rotation11 + _this3._invInertia12 * _this3._transform._rotation12; __tmp__123 = _this3._invInertia10 * _this3._transform._rotation20 + _this3._invInertia11 * _this3._transform._rotation21 + _this3._invInertia12 * _this3._transform._rotation22; __tmp__203 = _this3._invInertia20 * _this3._transform._rotation00 + _this3._invInertia21 * _this3._transform._rotation01 + _this3._invInertia22 * _this3._transform._rotation02; __tmp__213 = _this3._invInertia20 * _this3._transform._rotation10 + _this3._invInertia21 * _this3._transform._rotation11 + _this3._invInertia22 * _this3._transform._rotation12; __tmp__223 = _this3._invInertia20 * _this3._transform._rotation20 + _this3._invInertia21 * _this3._transform._rotation21 + _this3._invInertia22 * _this3._transform._rotation22; _this3._invInertia00 = __tmp__003; _this3._invInertia01 = __tmp__013; _this3._invInertia02 = __tmp__023; _this3._invInertia10 = __tmp__103; _this3._invInertia11 = __tmp__113; _this3._invInertia12 = __tmp__123; _this3._invInertia20 = __tmp__203; _this3._invInertia21 = __tmp__213; _this3._invInertia22 = __tmp__223; _this3._invInertia00 *= _this3._rotFactor.x; _this3._invInertia01 *= _this3._rotFactor.x; _this3._invInertia02 *= _this3._rotFactor.x; _this3._invInertia10 *= _this3._rotFactor.y; _this3._invInertia11 *= _this3._rotFactor.y; _this3._invInertia12 *= _this3._rotFactor.y; _this3._invInertia20 *= _this3._rotFactor.z; _this3._invInertia21 *= _this3._rotFactor.z; _this3._invInertia22 *= _this3._rotFactor.z; } postSolve() { this.joint._syncAnchors(); this.joint._checkDestruction(); } } if(!oimo.dynamics.rigidbody) oimo.dynamics.rigidbody = {}; oimo.dynamics.rigidbody.MassData = class oimo_dynamics_rigidbody_MassData { constructor() { this.mass = 0; this.localInertia = new oimo.common.Mat3(); } } oimo.dynamics.rigidbody.RigidBody = class oimo_dynamics_rigidbody_RigidBody { constructor(config) { this._next = null; this._prev = null; this._shapeList = null; this._shapeListLast = null; this._numShapes = 0; this._contactLinkList = null; this._contactLinkListLast = null; this._numContactLinks = 0; this._jointLinkList = null; this._jointLinkListLast = null; this._numJointLinks = 0; var v = config.linearVelocity; this._velX = v.x; this._velY = v.y; this._velZ = v.z; var v1 = config.angularVelocity; this._angVelX = v1.x; this._angVelY = v1.y; this._angVelZ = v1.z; this._pseudoVelX = 0; this._pseudoVelY = 0; this._pseudoVelZ = 0; this._angPseudoVelX = 0; this._angPseudoVelY = 0; this._angPseudoVelZ = 0; this._ptransform = new oimo.common.Transform(); this._transform = new oimo.common.Transform(); var v2 = config.position; this._ptransform._positionX = v2.x; this._ptransform._positionY = v2.y; this._ptransform._positionZ = v2.z; var m = config.rotation; this._ptransform._rotation00 = m.e00; this._ptransform._rotation01 = m.e01; this._ptransform._rotation02 = m.e02; this._ptransform._rotation10 = m.e10; this._ptransform._rotation11 = m.e11; this._ptransform._rotation12 = m.e12; this._ptransform._rotation20 = m.e20; this._ptransform._rotation21 = m.e21; this._ptransform._rotation22 = m.e22; var dst = this._transform; var src = this._ptransform; dst._positionX = src._positionX; dst._positionY = src._positionY; dst._positionZ = src._positionZ; dst._rotation00 = src._rotation00; dst._rotation01 = src._rotation01; dst._rotation02 = src._rotation02; dst._rotation10 = src._rotation10; dst._rotation11 = src._rotation11; dst._rotation12 = src._rotation12; dst._rotation20 = src._rotation20; dst._rotation21 = src._rotation21; dst._rotation22 = src._rotation22; this._type = config.type; this._sleepTime = 0; this._sleeping = false; this._autoSleep = config.autoSleep; this._mass = 0; this._invMass = 0; this._localInertia00 = 0; this._localInertia01 = 0; this._localInertia02 = 0; this._localInertia10 = 0; this._localInertia11 = 0; this._localInertia12 = 0; this._localInertia20 = 0; this._localInertia21 = 0; this._localInertia22 = 0; this._invLocalInertia00 = 0; this._invLocalInertia01 = 0; this._invLocalInertia02 = 0; this._invLocalInertia10 = 0; this._invLocalInertia11 = 0; this._invLocalInertia12 = 0; this._invLocalInertia20 = 0; this._invLocalInertia21 = 0; this._invLocalInertia22 = 0; this._invLocalInertiaWithoutRotFactor00 = 0; this._invLocalInertiaWithoutRotFactor01 = 0; this._invLocalInertiaWithoutRotFactor02 = 0; this._invLocalInertiaWithoutRotFactor10 = 0; this._invLocalInertiaWithoutRotFactor11 = 0; this._invLocalInertiaWithoutRotFactor12 = 0; this._invLocalInertiaWithoutRotFactor20 = 0; this._invLocalInertiaWithoutRotFactor21 = 0; this._invLocalInertiaWithoutRotFactor22 = 0; this._invInertia00 = 0; this._invInertia01 = 0; this._invInertia02 = 0; this._invInertia10 = 0; this._invInertia11 = 0; this._invInertia12 = 0; this._invInertia20 = 0; this._invInertia21 = 0; this._invInertia22 = 0; this._linearDamping = config.linearDamping; this._angularDamping = config.angularDamping; this._forceX = 0; this._forceY = 0; this._forceZ = 0; this._torqueX = 0; this._torqueY = 0; this._torqueZ = 0; this._linearContactImpulseX = 0; this._linearContactImpulseY = 0; this._linearContactImpulseZ = 0; this._angularContactImpulseX = 0; this._angularContactImpulseY = 0; this._angularContactImpulseZ = 0; this._rotFactor = new oimo.common.Vec3(1,1,1); this._addedToIsland = false; this._gravityScale = 1; this._world = null; } _integrate(dt) { switch(this._type) { case 1: this._velX = 0; this._velY = 0; this._velZ = 0; this._angVelX = 0; this._angVelY = 0; this._angVelZ = 0; this._pseudoVelX = 0; this._pseudoVelY = 0; this._pseudoVelZ = 0; this._angPseudoVelX = 0; this._angPseudoVelY = 0; this._angPseudoVelZ = 0; break; case 0:case 2: var translation; var translationX; var translationY; var translationZ; var rotation; var rotationX; var rotationY; var rotationZ; translationX = this._velX * dt; translationY = this._velY * dt; translationZ = this._velZ * dt; rotationX = this._angVelX * dt; rotationY = this._angVelY * dt; rotationZ = this._angVelZ * dt; var translationLengthSq = translationX * translationX + translationY * translationY + translationZ * translationZ; var rotationLengthSq = rotationX * rotationX + rotationY * rotationY + rotationZ * rotationZ; if(translationLengthSq == 0 && rotationLengthSq == 0) { return; } if(translationLengthSq > oimo.common.Setting.maxTranslationPerStep * oimo.common.Setting.maxTranslationPerStep) { var l = oimo.common.Setting.maxTranslationPerStep / Math.sqrt(translationLengthSq); this._velX *= l; this._velY *= l; this._velZ *= l; translationX *= l; translationY *= l; translationZ *= l; } if(rotationLengthSq > oimo.common.Setting.maxRotationPerStep * oimo.common.Setting.maxRotationPerStep) { var l1 = oimo.common.Setting.maxRotationPerStep / Math.sqrt(rotationLengthSq); this._angVelX *= l1; this._angVelY *= l1; this._angVelZ *= l1; rotationX *= l1; rotationY *= l1; rotationZ *= l1; } this._transform._positionX += translationX; this._transform._positionY += translationY; this._transform._positionZ += translationZ; var theta = Math.sqrt(rotationX * rotationX + rotationY * rotationY + rotationZ * rotationZ); var halfTheta = theta * 0.5; var rotationToSinAxisFactor; var cosHalfTheta; if(halfTheta < 0.5) { var ht2 = halfTheta * halfTheta; rotationToSinAxisFactor = 0.5 * (1 - ht2 * 0.166666666666666657 + ht2 * ht2 * 0.00833333333333333322); cosHalfTheta = 1 - ht2 * 0.5 + ht2 * ht2 * 0.0416666666666666644; } else { rotationToSinAxisFactor = Math.sin(halfTheta) / theta; cosHalfTheta = Math.cos(halfTheta); } var sinAxis; var sinAxisX; var sinAxisY; var sinAxisZ; sinAxisX = rotationX * rotationToSinAxisFactor; sinAxisY = rotationY * rotationToSinAxisFactor; sinAxisZ = rotationZ * rotationToSinAxisFactor; var dq; var dqX; var dqY; var dqZ; var dqW; dqX = sinAxisX; dqY = sinAxisY; dqZ = sinAxisZ; dqW = cosHalfTheta; var q; var qX; var qY; var qZ; var qW; var e00 = this._transform._rotation00; var e11 = this._transform._rotation11; var e22 = this._transform._rotation22; var t = e00 + e11 + e22; var s; if(t > 0) { s = Math.sqrt(t + 1); qW = 0.5 * s; s = 0.5 / s; qX = (this._transform._rotation21 - this._transform._rotation12) * s; qY = (this._transform._rotation02 - this._transform._rotation20) * s; qZ = (this._transform._rotation10 - this._transform._rotation01) * s; } else if(e00 > e11) { if(e00 > e22) { s = Math.sqrt(e00 - e11 - e22 + 1); qX = 0.5 * s; s = 0.5 / s; qY = (this._transform._rotation01 + this._transform._rotation10) * s; qZ = (this._transform._rotation02 + this._transform._rotation20) * s; qW = (this._transform._rotation21 - this._transform._rotation12) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); qZ = 0.5 * s; s = 0.5 / s; qX = (this._transform._rotation02 + this._transform._rotation20) * s; qY = (this._transform._rotation12 + this._transform._rotation21) * s; qW = (this._transform._rotation10 - this._transform._rotation01) * s; } } else if(e11 > e22) { s = Math.sqrt(e11 - e22 - e00 + 1); qY = 0.5 * s; s = 0.5 / s; qX = (this._transform._rotation01 + this._transform._rotation10) * s; qZ = (this._transform._rotation12 + this._transform._rotation21) * s; qW = (this._transform._rotation02 - this._transform._rotation20) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); qZ = 0.5 * s; s = 0.5 / s; qX = (this._transform._rotation02 + this._transform._rotation20) * s; qY = (this._transform._rotation12 + this._transform._rotation21) * s; qW = (this._transform._rotation10 - this._transform._rotation01) * s; } qX = dqW * qX + dqX * qW + dqY * qZ - dqZ * qY; qY = dqW * qY - dqX * qZ + dqY * qW + dqZ * qX; qZ = dqW * qZ + dqX * qY - dqY * qX + dqZ * qW; qW = dqW * qW - dqX * qX - dqY * qY - dqZ * qZ; var l2 = qX * qX + qY * qY + qZ * qZ + qW * qW; if(l2 > 1e-32) { l2 = 1 / Math.sqrt(l2); } qX *= l2; qY *= l2; qZ *= l2; qW *= l2; var x = qX; var y = qY; var z = qZ; var w = qW; var x2 = 2 * x; var y2 = 2 * y; var z2 = 2 * z; var xx = x * x2; var yy = y * y2; var zz = z * z2; var xy = x * y2; var yz = y * z2; var xz = x * z2; var wx = w * x2; var wy = w * y2; var wz = w * z2; this._transform._rotation00 = 1 - yy - zz; this._transform._rotation01 = xy - wz; this._transform._rotation02 = xz + wy; this._transform._rotation10 = xy + wz; this._transform._rotation11 = 1 - xx - zz; this._transform._rotation12 = yz - wx; this._transform._rotation20 = xz - wy; this._transform._rotation21 = yz + wx; this._transform._rotation22 = 1 - xx - yy; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = this._transform._rotation00 * this._invLocalInertia00 + this._transform._rotation01 * this._invLocalInertia10 + this._transform._rotation02 * this._invLocalInertia20; __tmp__01 = this._transform._rotation00 * this._invLocalInertia01 + this._transform._rotation01 * this._invLocalInertia11 + this._transform._rotation02 * this._invLocalInertia21; __tmp__02 = this._transform._rotation00 * this._invLocalInertia02 + this._transform._rotation01 * this._invLocalInertia12 + this._transform._rotation02 * this._invLocalInertia22; __tmp__10 = this._transform._rotation10 * this._invLocalInertia00 + this._transform._rotation11 * this._invLocalInertia10 + this._transform._rotation12 * this._invLocalInertia20; __tmp__11 = this._transform._rotation10 * this._invLocalInertia01 + this._transform._rotation11 * this._invLocalInertia11 + this._transform._rotation12 * this._invLocalInertia21; __tmp__12 = this._transform._rotation10 * this._invLocalInertia02 + this._transform._rotation11 * this._invLocalInertia12 + this._transform._rotation12 * this._invLocalInertia22; __tmp__20 = this._transform._rotation20 * this._invLocalInertia00 + this._transform._rotation21 * this._invLocalInertia10 + this._transform._rotation22 * this._invLocalInertia20; __tmp__21 = this._transform._rotation20 * this._invLocalInertia01 + this._transform._rotation21 * this._invLocalInertia11 + this._transform._rotation22 * this._invLocalInertia21; __tmp__22 = this._transform._rotation20 * this._invLocalInertia02 + this._transform._rotation21 * this._invLocalInertia12 + this._transform._rotation22 * this._invLocalInertia22; this._invInertia00 = __tmp__00; this._invInertia01 = __tmp__01; this._invInertia02 = __tmp__02; this._invInertia10 = __tmp__10; this._invInertia11 = __tmp__11; this._invInertia12 = __tmp__12; this._invInertia20 = __tmp__20; this._invInertia21 = __tmp__21; this._invInertia22 = __tmp__22; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = this._invInertia00 * this._transform._rotation00 + this._invInertia01 * this._transform._rotation01 + this._invInertia02 * this._transform._rotation02; __tmp__011 = this._invInertia00 * this._transform._rotation10 + this._invInertia01 * this._transform._rotation11 + this._invInertia02 * this._transform._rotation12; __tmp__021 = this._invInertia00 * this._transform._rotation20 + this._invInertia01 * this._transform._rotation21 + this._invInertia02 * this._transform._rotation22; __tmp__101 = this._invInertia10 * this._transform._rotation00 + this._invInertia11 * this._transform._rotation01 + this._invInertia12 * this._transform._rotation02; __tmp__111 = this._invInertia10 * this._transform._rotation10 + this._invInertia11 * this._transform._rotation11 + this._invInertia12 * this._transform._rotation12; __tmp__121 = this._invInertia10 * this._transform._rotation20 + this._invInertia11 * this._transform._rotation21 + this._invInertia12 * this._transform._rotation22; __tmp__201 = this._invInertia20 * this._transform._rotation00 + this._invInertia21 * this._transform._rotation01 + this._invInertia22 * this._transform._rotation02; __tmp__211 = this._invInertia20 * this._transform._rotation10 + this._invInertia21 * this._transform._rotation11 + this._invInertia22 * this._transform._rotation12; __tmp__221 = this._invInertia20 * this._transform._rotation20 + this._invInertia21 * this._transform._rotation21 + this._invInertia22 * this._transform._rotation22; this._invInertia00 = __tmp__001; this._invInertia01 = __tmp__011; this._invInertia02 = __tmp__021; this._invInertia10 = __tmp__101; this._invInertia11 = __tmp__111; this._invInertia12 = __tmp__121; this._invInertia20 = __tmp__201; this._invInertia21 = __tmp__211; this._invInertia22 = __tmp__221; this._invInertia00 *= this._rotFactor.x; this._invInertia01 *= this._rotFactor.x; this._invInertia02 *= this._rotFactor.x; this._invInertia10 *= this._rotFactor.y; this._invInertia11 *= this._rotFactor.y; this._invInertia12 *= this._rotFactor.y; this._invInertia20 *= this._rotFactor.z; this._invInertia21 *= this._rotFactor.z; this._invInertia22 *= this._rotFactor.z; break; } } _integratePseudoVelocity() { var pseudoVelLengthSq = this._pseudoVelX * this._pseudoVelX + this._pseudoVelY * this._pseudoVelY + this._pseudoVelZ * this._pseudoVelZ; var angPseudoVelLengthSq = this._angPseudoVelX * this._angPseudoVelX + this._angPseudoVelY * this._angPseudoVelY + this._angPseudoVelZ * this._angPseudoVelZ; if(pseudoVelLengthSq == 0 && angPseudoVelLengthSq == 0) { return; } switch(this._type) { case 1: this._pseudoVelX = 0; this._pseudoVelY = 0; this._pseudoVelZ = 0; this._angPseudoVelX = 0; this._angPseudoVelY = 0; this._angPseudoVelZ = 0; break; case 0:case 2: var translation; var translationX; var translationY; var translationZ; var rotation; var rotationX; var rotationY; var rotationZ; translationX = this._pseudoVelX; translationY = this._pseudoVelY; translationZ = this._pseudoVelZ; rotationX = this._angPseudoVelX; rotationY = this._angPseudoVelY; rotationZ = this._angPseudoVelZ; this._pseudoVelX = 0; this._pseudoVelY = 0; this._pseudoVelZ = 0; this._angPseudoVelX = 0; this._angPseudoVelY = 0; this._angPseudoVelZ = 0; this._transform._positionX += translationX; this._transform._positionY += translationY; this._transform._positionZ += translationZ; var theta = Math.sqrt(rotationX * rotationX + rotationY * rotationY + rotationZ * rotationZ); var halfTheta = theta * 0.5; var rotationToSinAxisFactor; var cosHalfTheta; if(halfTheta < 0.5) { var ht2 = halfTheta * halfTheta; rotationToSinAxisFactor = 0.5 * (1 - ht2 * 0.166666666666666657 + ht2 * ht2 * 0.00833333333333333322); cosHalfTheta = 1 - ht2 * 0.5 + ht2 * ht2 * 0.0416666666666666644; } else { rotationToSinAxisFactor = Math.sin(halfTheta) / theta; cosHalfTheta = Math.cos(halfTheta); } var sinAxis; var sinAxisX; var sinAxisY; var sinAxisZ; sinAxisX = rotationX * rotationToSinAxisFactor; sinAxisY = rotationY * rotationToSinAxisFactor; sinAxisZ = rotationZ * rotationToSinAxisFactor; var dq; var dqX; var dqY; var dqZ; var dqW; dqX = sinAxisX; dqY = sinAxisY; dqZ = sinAxisZ; dqW = cosHalfTheta; var q; var qX; var qY; var qZ; var qW; var e00 = this._transform._rotation00; var e11 = this._transform._rotation11; var e22 = this._transform._rotation22; var t = e00 + e11 + e22; var s; if(t > 0) { s = Math.sqrt(t + 1); qW = 0.5 * s; s = 0.5 / s; qX = (this._transform._rotation21 - this._transform._rotation12) * s; qY = (this._transform._rotation02 - this._transform._rotation20) * s; qZ = (this._transform._rotation10 - this._transform._rotation01) * s; } else if(e00 > e11) { if(e00 > e22) { s = Math.sqrt(e00 - e11 - e22 + 1); qX = 0.5 * s; s = 0.5 / s; qY = (this._transform._rotation01 + this._transform._rotation10) * s; qZ = (this._transform._rotation02 + this._transform._rotation20) * s; qW = (this._transform._rotation21 - this._transform._rotation12) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); qZ = 0.5 * s; s = 0.5 / s; qX = (this._transform._rotation02 + this._transform._rotation20) * s; qY = (this._transform._rotation12 + this._transform._rotation21) * s; qW = (this._transform._rotation10 - this._transform._rotation01) * s; } } else if(e11 > e22) { s = Math.sqrt(e11 - e22 - e00 + 1); qY = 0.5 * s; s = 0.5 / s; qX = (this._transform._rotation01 + this._transform._rotation10) * s; qZ = (this._transform._rotation12 + this._transform._rotation21) * s; qW = (this._transform._rotation02 - this._transform._rotation20) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); qZ = 0.5 * s; s = 0.5 / s; qX = (this._transform._rotation02 + this._transform._rotation20) * s; qY = (this._transform._rotation12 + this._transform._rotation21) * s; qW = (this._transform._rotation10 - this._transform._rotation01) * s; } qX = dqW * qX + dqX * qW + dqY * qZ - dqZ * qY; qY = dqW * qY - dqX * qZ + dqY * qW + dqZ * qX; qZ = dqW * qZ + dqX * qY - dqY * qX + dqZ * qW; qW = dqW * qW - dqX * qX - dqY * qY - dqZ * qZ; var l = qX * qX + qY * qY + qZ * qZ + qW * qW; if(l > 1e-32) { l = 1 / Math.sqrt(l); } qX *= l; qY *= l; qZ *= l; qW *= l; var x = qX; var y = qY; var z = qZ; var w = qW; var x2 = 2 * x; var y2 = 2 * y; var z2 = 2 * z; var xx = x * x2; var yy = y * y2; var zz = z * z2; var xy = x * y2; var yz = y * z2; var xz = x * z2; var wx = w * x2; var wy = w * y2; var wz = w * z2; this._transform._rotation00 = 1 - yy - zz; this._transform._rotation01 = xy - wz; this._transform._rotation02 = xz + wy; this._transform._rotation10 = xy + wz; this._transform._rotation11 = 1 - xx - zz; this._transform._rotation12 = yz - wx; this._transform._rotation20 = xz - wy; this._transform._rotation21 = yz + wx; this._transform._rotation22 = 1 - xx - yy; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = this._transform._rotation00 * this._invLocalInertia00 + this._transform._rotation01 * this._invLocalInertia10 + this._transform._rotation02 * this._invLocalInertia20; __tmp__01 = this._transform._rotation00 * this._invLocalInertia01 + this._transform._rotation01 * this._invLocalInertia11 + this._transform._rotation02 * this._invLocalInertia21; __tmp__02 = this._transform._rotation00 * this._invLocalInertia02 + this._transform._rotation01 * this._invLocalInertia12 + this._transform._rotation02 * this._invLocalInertia22; __tmp__10 = this._transform._rotation10 * this._invLocalInertia00 + this._transform._rotation11 * this._invLocalInertia10 + this._transform._rotation12 * this._invLocalInertia20; __tmp__11 = this._transform._rotation10 * this._invLocalInertia01 + this._transform._rotation11 * this._invLocalInertia11 + this._transform._rotation12 * this._invLocalInertia21; __tmp__12 = this._transform._rotation10 * this._invLocalInertia02 + this._transform._rotation11 * this._invLocalInertia12 + this._transform._rotation12 * this._invLocalInertia22; __tmp__20 = this._transform._rotation20 * this._invLocalInertia00 + this._transform._rotation21 * this._invLocalInertia10 + this._transform._rotation22 * this._invLocalInertia20; __tmp__21 = this._transform._rotation20 * this._invLocalInertia01 + this._transform._rotation21 * this._invLocalInertia11 + this._transform._rotation22 * this._invLocalInertia21; __tmp__22 = this._transform._rotation20 * this._invLocalInertia02 + this._transform._rotation21 * this._invLocalInertia12 + this._transform._rotation22 * this._invLocalInertia22; this._invInertia00 = __tmp__00; this._invInertia01 = __tmp__01; this._invInertia02 = __tmp__02; this._invInertia10 = __tmp__10; this._invInertia11 = __tmp__11; this._invInertia12 = __tmp__12; this._invInertia20 = __tmp__20; this._invInertia21 = __tmp__21; this._invInertia22 = __tmp__22; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = this._invInertia00 * this._transform._rotation00 + this._invInertia01 * this._transform._rotation01 + this._invInertia02 * this._transform._rotation02; __tmp__011 = this._invInertia00 * this._transform._rotation10 + this._invInertia01 * this._transform._rotation11 + this._invInertia02 * this._transform._rotation12; __tmp__021 = this._invInertia00 * this._transform._rotation20 + this._invInertia01 * this._transform._rotation21 + this._invInertia02 * this._transform._rotation22; __tmp__101 = this._invInertia10 * this._transform._rotation00 + this._invInertia11 * this._transform._rotation01 + this._invInertia12 * this._transform._rotation02; __tmp__111 = this._invInertia10 * this._transform._rotation10 + this._invInertia11 * this._transform._rotation11 + this._invInertia12 * this._transform._rotation12; __tmp__121 = this._invInertia10 * this._transform._rotation20 + this._invInertia11 * this._transform._rotation21 + this._invInertia12 * this._transform._rotation22; __tmp__201 = this._invInertia20 * this._transform._rotation00 + this._invInertia21 * this._transform._rotation01 + this._invInertia22 * this._transform._rotation02; __tmp__211 = this._invInertia20 * this._transform._rotation10 + this._invInertia21 * this._transform._rotation11 + this._invInertia22 * this._transform._rotation12; __tmp__221 = this._invInertia20 * this._transform._rotation20 + this._invInertia21 * this._transform._rotation21 + this._invInertia22 * this._transform._rotation22; this._invInertia00 = __tmp__001; this._invInertia01 = __tmp__011; this._invInertia02 = __tmp__021; this._invInertia10 = __tmp__101; this._invInertia11 = __tmp__111; this._invInertia12 = __tmp__121; this._invInertia20 = __tmp__201; this._invInertia21 = __tmp__211; this._invInertia22 = __tmp__221; this._invInertia00 *= this._rotFactor.x; this._invInertia01 *= this._rotFactor.x; this._invInertia02 *= this._rotFactor.x; this._invInertia10 *= this._rotFactor.y; this._invInertia11 *= this._rotFactor.y; this._invInertia12 *= this._rotFactor.y; this._invInertia20 *= this._rotFactor.z; this._invInertia21 *= this._rotFactor.z; this._invInertia22 *= this._rotFactor.z; break; } } updateMass() { var totalInertia; var totalInertia00; var totalInertia01; var totalInertia02; var totalInertia10; var totalInertia11; var totalInertia12; var totalInertia20; var totalInertia21; var totalInertia22; totalInertia00 = 0; totalInertia01 = 0; totalInertia02 = 0; totalInertia10 = 0; totalInertia11 = 0; totalInertia12 = 0; totalInertia20 = 0; totalInertia21 = 0; totalInertia22 = 0; var totalMass = 0; var s = this._shapeList; while(s != null) { var n = s._next; var g = s._geom; g._updateMass(); var mass = s._density * g._volume; var inertia; var inertia00; var inertia01; var inertia02; var inertia10; var inertia11; var inertia12; var inertia20; var inertia21; var inertia22; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = s._localTransform._rotation00 * g._inertiaCoeff00 + s._localTransform._rotation01 * g._inertiaCoeff10 + s._localTransform._rotation02 * g._inertiaCoeff20; __tmp__01 = s._localTransform._rotation00 * g._inertiaCoeff01 + s._localTransform._rotation01 * g._inertiaCoeff11 + s._localTransform._rotation02 * g._inertiaCoeff21; __tmp__02 = s._localTransform._rotation00 * g._inertiaCoeff02 + s._localTransform._rotation01 * g._inertiaCoeff12 + s._localTransform._rotation02 * g._inertiaCoeff22; __tmp__10 = s._localTransform._rotation10 * g._inertiaCoeff00 + s._localTransform._rotation11 * g._inertiaCoeff10 + s._localTransform._rotation12 * g._inertiaCoeff20; __tmp__11 = s._localTransform._rotation10 * g._inertiaCoeff01 + s._localTransform._rotation11 * g._inertiaCoeff11 + s._localTransform._rotation12 * g._inertiaCoeff21; __tmp__12 = s._localTransform._rotation10 * g._inertiaCoeff02 + s._localTransform._rotation11 * g._inertiaCoeff12 + s._localTransform._rotation12 * g._inertiaCoeff22; __tmp__20 = s._localTransform._rotation20 * g._inertiaCoeff00 + s._localTransform._rotation21 * g._inertiaCoeff10 + s._localTransform._rotation22 * g._inertiaCoeff20; __tmp__21 = s._localTransform._rotation20 * g._inertiaCoeff01 + s._localTransform._rotation21 * g._inertiaCoeff11 + s._localTransform._rotation22 * g._inertiaCoeff21; __tmp__22 = s._localTransform._rotation20 * g._inertiaCoeff02 + s._localTransform._rotation21 * g._inertiaCoeff12 + s._localTransform._rotation22 * g._inertiaCoeff22; inertia00 = __tmp__00; inertia01 = __tmp__01; inertia02 = __tmp__02; inertia10 = __tmp__10; inertia11 = __tmp__11; inertia12 = __tmp__12; inertia20 = __tmp__20; inertia21 = __tmp__21; inertia22 = __tmp__22; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = inertia00 * s._localTransform._rotation00 + inertia01 * s._localTransform._rotation01 + inertia02 * s._localTransform._rotation02; __tmp__011 = inertia00 * s._localTransform._rotation10 + inertia01 * s._localTransform._rotation11 + inertia02 * s._localTransform._rotation12; __tmp__021 = inertia00 * s._localTransform._rotation20 + inertia01 * s._localTransform._rotation21 + inertia02 * s._localTransform._rotation22; __tmp__101 = inertia10 * s._localTransform._rotation00 + inertia11 * s._localTransform._rotation01 + inertia12 * s._localTransform._rotation02; __tmp__111 = inertia10 * s._localTransform._rotation10 + inertia11 * s._localTransform._rotation11 + inertia12 * s._localTransform._rotation12; __tmp__121 = inertia10 * s._localTransform._rotation20 + inertia11 * s._localTransform._rotation21 + inertia12 * s._localTransform._rotation22; __tmp__201 = inertia20 * s._localTransform._rotation00 + inertia21 * s._localTransform._rotation01 + inertia22 * s._localTransform._rotation02; __tmp__211 = inertia20 * s._localTransform._rotation10 + inertia21 * s._localTransform._rotation11 + inertia22 * s._localTransform._rotation12; __tmp__221 = inertia20 * s._localTransform._rotation20 + inertia21 * s._localTransform._rotation21 + inertia22 * s._localTransform._rotation22; inertia00 = __tmp__001; inertia01 = __tmp__011; inertia02 = __tmp__021; inertia10 = __tmp__101; inertia11 = __tmp__111; inertia12 = __tmp__121; inertia20 = __tmp__201; inertia21 = __tmp__211; inertia22 = __tmp__221; inertia00 *= mass; inertia01 *= mass; inertia02 *= mass; inertia10 *= mass; inertia11 *= mass; inertia12 *= mass; inertia20 *= mass; inertia21 *= mass; inertia22 *= mass; var cogInertia; var cogInertia00; var cogInertia01; var cogInertia02; var cogInertia10; var cogInertia11; var cogInertia12; var cogInertia20; var cogInertia21; var cogInertia22; var xx = s._localTransform._positionX * s._localTransform._positionX; var yy = s._localTransform._positionY * s._localTransform._positionY; var zz = s._localTransform._positionZ * s._localTransform._positionZ; var xy = -s._localTransform._positionX * s._localTransform._positionY; var yz = -s._localTransform._positionY * s._localTransform._positionZ; var zx = -s._localTransform._positionZ * s._localTransform._positionX; cogInertia00 = yy + zz; cogInertia01 = xy; cogInertia02 = zx; cogInertia10 = xy; cogInertia11 = xx + zz; cogInertia12 = yz; cogInertia20 = zx; cogInertia21 = yz; cogInertia22 = xx + yy; inertia00 += cogInertia00 * mass; inertia01 += cogInertia01 * mass; inertia02 += cogInertia02 * mass; inertia10 += cogInertia10 * mass; inertia11 += cogInertia11 * mass; inertia12 += cogInertia12 * mass; inertia20 += cogInertia20 * mass; inertia21 += cogInertia21 * mass; inertia22 += cogInertia22 * mass; totalMass += mass; totalInertia00 += inertia00; totalInertia01 += inertia01; totalInertia02 += inertia02; totalInertia10 += inertia10; totalInertia11 += inertia11; totalInertia12 += inertia12; totalInertia20 += inertia20; totalInertia21 += inertia21; totalInertia22 += inertia22; s = n; } this._mass = totalMass; this._localInertia00 = totalInertia00; this._localInertia01 = totalInertia01; this._localInertia02 = totalInertia02; this._localInertia10 = totalInertia10; this._localInertia11 = totalInertia11; this._localInertia12 = totalInertia12; this._localInertia20 = totalInertia20; this._localInertia21 = totalInertia21; this._localInertia22 = totalInertia22; var d00 = this._localInertia11 * this._localInertia22 - this._localInertia12 * this._localInertia21; var d01 = this._localInertia10 * this._localInertia22 - this._localInertia12 * this._localInertia20; var d02 = this._localInertia10 * this._localInertia21 - this._localInertia11 * this._localInertia20; var det = this._localInertia00 * d00 - this._localInertia01 * d01 + this._localInertia02 * d02; if(this._mass > 0 && det > 0 && this._type == 0) { this._invMass = 1 / this._mass; var d001 = this._localInertia11 * this._localInertia22 - this._localInertia12 * this._localInertia21; var d011 = this._localInertia10 * this._localInertia22 - this._localInertia12 * this._localInertia20; var d021 = this._localInertia10 * this._localInertia21 - this._localInertia11 * this._localInertia20; var d10 = this._localInertia01 * this._localInertia22 - this._localInertia02 * this._localInertia21; var d11 = this._localInertia00 * this._localInertia22 - this._localInertia02 * this._localInertia20; var d12 = this._localInertia00 * this._localInertia21 - this._localInertia01 * this._localInertia20; var d20 = this._localInertia01 * this._localInertia12 - this._localInertia02 * this._localInertia11; var d21 = this._localInertia00 * this._localInertia12 - this._localInertia02 * this._localInertia10; var d22 = this._localInertia00 * this._localInertia11 - this._localInertia01 * this._localInertia10; var d = this._localInertia00 * d001 - this._localInertia01 * d011 + this._localInertia02 * d021; if(d < -1e-32 || d > 1e-32) { d = 1 / d; } this._invLocalInertia00 = d001 * d; this._invLocalInertia01 = -d10 * d; this._invLocalInertia02 = d20 * d; this._invLocalInertia10 = -d011 * d; this._invLocalInertia11 = d11 * d; this._invLocalInertia12 = -d21 * d; this._invLocalInertia20 = d021 * d; this._invLocalInertia21 = -d12 * d; this._invLocalInertia22 = d22 * d; this._invLocalInertiaWithoutRotFactor00 = this._invLocalInertia00; this._invLocalInertiaWithoutRotFactor01 = this._invLocalInertia01; this._invLocalInertiaWithoutRotFactor02 = this._invLocalInertia02; this._invLocalInertiaWithoutRotFactor10 = this._invLocalInertia10; this._invLocalInertiaWithoutRotFactor11 = this._invLocalInertia11; this._invLocalInertiaWithoutRotFactor12 = this._invLocalInertia12; this._invLocalInertiaWithoutRotFactor20 = this._invLocalInertia20; this._invLocalInertiaWithoutRotFactor21 = this._invLocalInertia21; this._invLocalInertiaWithoutRotFactor22 = this._invLocalInertia22; this._invLocalInertia00 = this._invLocalInertiaWithoutRotFactor00 * this._rotFactor.x; this._invLocalInertia01 = this._invLocalInertiaWithoutRotFactor01 * this._rotFactor.x; this._invLocalInertia02 = this._invLocalInertiaWithoutRotFactor02 * this._rotFactor.x; this._invLocalInertia10 = this._invLocalInertiaWithoutRotFactor10 * this._rotFactor.y; this._invLocalInertia11 = this._invLocalInertiaWithoutRotFactor11 * this._rotFactor.y; this._invLocalInertia12 = this._invLocalInertiaWithoutRotFactor12 * this._rotFactor.y; this._invLocalInertia20 = this._invLocalInertiaWithoutRotFactor20 * this._rotFactor.z; this._invLocalInertia21 = this._invLocalInertiaWithoutRotFactor21 * this._rotFactor.z; this._invLocalInertia22 = this._invLocalInertiaWithoutRotFactor22 * this._rotFactor.z; } else { this._invMass = 0; this._invLocalInertia00 = 0; this._invLocalInertia01 = 0; this._invLocalInertia02 = 0; this._invLocalInertia10 = 0; this._invLocalInertia11 = 0; this._invLocalInertia12 = 0; this._invLocalInertia20 = 0; this._invLocalInertia21 = 0; this._invLocalInertia22 = 0; this._invLocalInertiaWithoutRotFactor00 = 0; this._invLocalInertiaWithoutRotFactor01 = 0; this._invLocalInertiaWithoutRotFactor02 = 0; this._invLocalInertiaWithoutRotFactor10 = 0; this._invLocalInertiaWithoutRotFactor11 = 0; this._invLocalInertiaWithoutRotFactor12 = 0; this._invLocalInertiaWithoutRotFactor20 = 0; this._invLocalInertiaWithoutRotFactor21 = 0; this._invLocalInertiaWithoutRotFactor22 = 0; if(this._type == 0) { this._type = 1; } } var __tmp__002; var __tmp__012; var __tmp__022; var __tmp__102; var __tmp__112; var __tmp__122; var __tmp__202; var __tmp__212; var __tmp__222; __tmp__002 = this._transform._rotation00 * this._invLocalInertia00 + this._transform._rotation01 * this._invLocalInertia10 + this._transform._rotation02 * this._invLocalInertia20; __tmp__012 = this._transform._rotation00 * this._invLocalInertia01 + this._transform._rotation01 * this._invLocalInertia11 + this._transform._rotation02 * this._invLocalInertia21; __tmp__022 = this._transform._rotation00 * this._invLocalInertia02 + this._transform._rotation01 * this._invLocalInertia12 + this._transform._rotation02 * this._invLocalInertia22; __tmp__102 = this._transform._rotation10 * this._invLocalInertia00 + this._transform._rotation11 * this._invLocalInertia10 + this._transform._rotation12 * this._invLocalInertia20; __tmp__112 = this._transform._rotation10 * this._invLocalInertia01 + this._transform._rotation11 * this._invLocalInertia11 + this._transform._rotation12 * this._invLocalInertia21; __tmp__122 = this._transform._rotation10 * this._invLocalInertia02 + this._transform._rotation11 * this._invLocalInertia12 + this._transform._rotation12 * this._invLocalInertia22; __tmp__202 = this._transform._rotation20 * this._invLocalInertia00 + this._transform._rotation21 * this._invLocalInertia10 + this._transform._rotation22 * this._invLocalInertia20; __tmp__212 = this._transform._rotation20 * this._invLocalInertia01 + this._transform._rotation21 * this._invLocalInertia11 + this._transform._rotation22 * this._invLocalInertia21; __tmp__222 = this._transform._rotation20 * this._invLocalInertia02 + this._transform._rotation21 * this._invLocalInertia12 + this._transform._rotation22 * this._invLocalInertia22; this._invInertia00 = __tmp__002; this._invInertia01 = __tmp__012; this._invInertia02 = __tmp__022; this._invInertia10 = __tmp__102; this._invInertia11 = __tmp__112; this._invInertia12 = __tmp__122; this._invInertia20 = __tmp__202; this._invInertia21 = __tmp__212; this._invInertia22 = __tmp__222; var __tmp__003; var __tmp__013; var __tmp__023; var __tmp__103; var __tmp__113; var __tmp__123; var __tmp__203; var __tmp__213; var __tmp__223; __tmp__003 = this._invInertia00 * this._transform._rotation00 + this._invInertia01 * this._transform._rotation01 + this._invInertia02 * this._transform._rotation02; __tmp__013 = this._invInertia00 * this._transform._rotation10 + this._invInertia01 * this._transform._rotation11 + this._invInertia02 * this._transform._rotation12; __tmp__023 = this._invInertia00 * this._transform._rotation20 + this._invInertia01 * this._transform._rotation21 + this._invInertia02 * this._transform._rotation22; __tmp__103 = this._invInertia10 * this._transform._rotation00 + this._invInertia11 * this._transform._rotation01 + this._invInertia12 * this._transform._rotation02; __tmp__113 = this._invInertia10 * this._transform._rotation10 + this._invInertia11 * this._transform._rotation11 + this._invInertia12 * this._transform._rotation12; __tmp__123 = this._invInertia10 * this._transform._rotation20 + this._invInertia11 * this._transform._rotation21 + this._invInertia12 * this._transform._rotation22; __tmp__203 = this._invInertia20 * this._transform._rotation00 + this._invInertia21 * this._transform._rotation01 + this._invInertia22 * this._transform._rotation02; __tmp__213 = this._invInertia20 * this._transform._rotation10 + this._invInertia21 * this._transform._rotation11 + this._invInertia22 * this._transform._rotation12; __tmp__223 = this._invInertia20 * this._transform._rotation20 + this._invInertia21 * this._transform._rotation21 + this._invInertia22 * this._transform._rotation22; this._invInertia00 = __tmp__003; this._invInertia01 = __tmp__013; this._invInertia02 = __tmp__023; this._invInertia10 = __tmp__103; this._invInertia11 = __tmp__113; this._invInertia12 = __tmp__123; this._invInertia20 = __tmp__203; this._invInertia21 = __tmp__213; this._invInertia22 = __tmp__223; this._invInertia00 *= this._rotFactor.x; this._invInertia01 *= this._rotFactor.x; this._invInertia02 *= this._rotFactor.x; this._invInertia10 *= this._rotFactor.y; this._invInertia11 *= this._rotFactor.y; this._invInertia12 *= this._rotFactor.y; this._invInertia20 *= this._rotFactor.z; this._invInertia21 *= this._rotFactor.z; this._invInertia22 *= this._rotFactor.z; this._sleeping = false; this._sleepTime = 0; } getPosition() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._transform._positionX; v1.y = this._transform._positionY; v1.z = this._transform._positionZ; return v; } getPositionTo(position) { var v = position; v.x = this._transform._positionX; v.y = this._transform._positionY; v.z = this._transform._positionZ; } setPosition(position) { var v = position; this._transform._positionX = v.x; this._transform._positionY = v.y; this._transform._positionZ = v.z; var dst = this._ptransform; var src = this._transform; dst._positionX = src._positionX; dst._positionY = src._positionY; dst._positionZ = src._positionZ; dst._rotation00 = src._rotation00; dst._rotation01 = src._rotation01; dst._rotation02 = src._rotation02; dst._rotation10 = src._rotation10; dst._rotation11 = src._rotation11; dst._rotation12 = src._rotation12; dst._rotation20 = src._rotation20; dst._rotation21 = src._rotation21; dst._rotation22 = src._rotation22; var s = this._shapeList; while(s != null) { var n = s._next; var dst1 = s._ptransform; var src1 = s._localTransform; var src2 = this._ptransform; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = src2._rotation00 * src1._rotation00 + src2._rotation01 * src1._rotation10 + src2._rotation02 * src1._rotation20; __tmp__01 = src2._rotation00 * src1._rotation01 + src2._rotation01 * src1._rotation11 + src2._rotation02 * src1._rotation21; __tmp__02 = src2._rotation00 * src1._rotation02 + src2._rotation01 * src1._rotation12 + src2._rotation02 * src1._rotation22; __tmp__10 = src2._rotation10 * src1._rotation00 + src2._rotation11 * src1._rotation10 + src2._rotation12 * src1._rotation20; __tmp__11 = src2._rotation10 * src1._rotation01 + src2._rotation11 * src1._rotation11 + src2._rotation12 * src1._rotation21; __tmp__12 = src2._rotation10 * src1._rotation02 + src2._rotation11 * src1._rotation12 + src2._rotation12 * src1._rotation22; __tmp__20 = src2._rotation20 * src1._rotation00 + src2._rotation21 * src1._rotation10 + src2._rotation22 * src1._rotation20; __tmp__21 = src2._rotation20 * src1._rotation01 + src2._rotation21 * src1._rotation11 + src2._rotation22 * src1._rotation21; __tmp__22 = src2._rotation20 * src1._rotation02 + src2._rotation21 * src1._rotation12 + src2._rotation22 * src1._rotation22; dst1._rotation00 = __tmp__00; dst1._rotation01 = __tmp__01; dst1._rotation02 = __tmp__02; dst1._rotation10 = __tmp__10; dst1._rotation11 = __tmp__11; dst1._rotation12 = __tmp__12; dst1._rotation20 = __tmp__20; dst1._rotation21 = __tmp__21; dst1._rotation22 = __tmp__22; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = src2._rotation00 * src1._positionX + src2._rotation01 * src1._positionY + src2._rotation02 * src1._positionZ; __tmp__Y = src2._rotation10 * src1._positionX + src2._rotation11 * src1._positionY + src2._rotation12 * src1._positionZ; __tmp__Z = src2._rotation20 * src1._positionX + src2._rotation21 * src1._positionY + src2._rotation22 * src1._positionZ; dst1._positionX = __tmp__X; dst1._positionY = __tmp__Y; dst1._positionZ = __tmp__Z; dst1._positionX += src2._positionX; dst1._positionY += src2._positionY; dst1._positionZ += src2._positionZ; var dst2 = s._transform; var src11 = s._localTransform; var src21 = this._transform; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = src21._rotation00 * src11._rotation00 + src21._rotation01 * src11._rotation10 + src21._rotation02 * src11._rotation20; __tmp__011 = src21._rotation00 * src11._rotation01 + src21._rotation01 * src11._rotation11 + src21._rotation02 * src11._rotation21; __tmp__021 = src21._rotation00 * src11._rotation02 + src21._rotation01 * src11._rotation12 + src21._rotation02 * src11._rotation22; __tmp__101 = src21._rotation10 * src11._rotation00 + src21._rotation11 * src11._rotation10 + src21._rotation12 * src11._rotation20; __tmp__111 = src21._rotation10 * src11._rotation01 + src21._rotation11 * src11._rotation11 + src21._rotation12 * src11._rotation21; __tmp__121 = src21._rotation10 * src11._rotation02 + src21._rotation11 * src11._rotation12 + src21._rotation12 * src11._rotation22; __tmp__201 = src21._rotation20 * src11._rotation00 + src21._rotation21 * src11._rotation10 + src21._rotation22 * src11._rotation20; __tmp__211 = src21._rotation20 * src11._rotation01 + src21._rotation21 * src11._rotation11 + src21._rotation22 * src11._rotation21; __tmp__221 = src21._rotation20 * src11._rotation02 + src21._rotation21 * src11._rotation12 + src21._rotation22 * src11._rotation22; dst2._rotation00 = __tmp__001; dst2._rotation01 = __tmp__011; dst2._rotation02 = __tmp__021; dst2._rotation10 = __tmp__101; dst2._rotation11 = __tmp__111; dst2._rotation12 = __tmp__121; dst2._rotation20 = __tmp__201; dst2._rotation21 = __tmp__211; dst2._rotation22 = __tmp__221; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = src21._rotation00 * src11._positionX + src21._rotation01 * src11._positionY + src21._rotation02 * src11._positionZ; __tmp__Y1 = src21._rotation10 * src11._positionX + src21._rotation11 * src11._positionY + src21._rotation12 * src11._positionZ; __tmp__Z1 = src21._rotation20 * src11._positionX + src21._rotation21 * src11._positionY + src21._rotation22 * src11._positionZ; dst2._positionX = __tmp__X1; dst2._positionY = __tmp__Y1; dst2._positionZ = __tmp__Z1; dst2._positionX += src21._positionX; dst2._positionY += src21._positionY; dst2._positionZ += src21._positionZ; var min; var minX; var minY; var minZ; var max; var maxX; var maxY; var maxZ; s._geom._computeAabb(s._aabb,s._ptransform); minX = s._aabb._minX; minY = s._aabb._minY; minZ = s._aabb._minZ; maxX = s._aabb._maxX; maxY = s._aabb._maxY; maxZ = s._aabb._maxZ; s._geom._computeAabb(s._aabb,s._transform); s._aabb._minX = minX < s._aabb._minX ? minX : s._aabb._minX; s._aabb._minY = minY < s._aabb._minY ? minY : s._aabb._minY; s._aabb._minZ = minZ < s._aabb._minZ ? minZ : s._aabb._minZ; s._aabb._maxX = maxX > s._aabb._maxX ? maxX : s._aabb._maxX; s._aabb._maxY = maxY > s._aabb._maxY ? maxY : s._aabb._maxY; s._aabb._maxZ = maxZ > s._aabb._maxZ ? maxZ : s._aabb._maxZ; if(s._proxy != null) { var d; var dX; var dY; var dZ; dX = s._transform._positionX - s._ptransform._positionX; dY = s._transform._positionY - s._ptransform._positionY; dZ = s._transform._positionZ - s._ptransform._positionZ; var v1 = s.displacement; v1.x = dX; v1.y = dY; v1.z = dZ; s._rigidBody._world._broadPhase.moveProxy(s._proxy,s._aabb,s.displacement); } s = n; } this._sleeping = false; this._sleepTime = 0; } translate(translation) { var diff; var diffX; var diffY; var diffZ; var v = translation; diffX = v.x; diffY = v.y; diffZ = v.z; this._transform._positionX += diffX; this._transform._positionY += diffY; this._transform._positionZ += diffZ; var dst = this._ptransform; var src = this._transform; dst._positionX = src._positionX; dst._positionY = src._positionY; dst._positionZ = src._positionZ; dst._rotation00 = src._rotation00; dst._rotation01 = src._rotation01; dst._rotation02 = src._rotation02; dst._rotation10 = src._rotation10; dst._rotation11 = src._rotation11; dst._rotation12 = src._rotation12; dst._rotation20 = src._rotation20; dst._rotation21 = src._rotation21; dst._rotation22 = src._rotation22; var s = this._shapeList; while(s != null) { var n = s._next; var dst1 = s._ptransform; var src1 = s._localTransform; var src2 = this._ptransform; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = src2._rotation00 * src1._rotation00 + src2._rotation01 * src1._rotation10 + src2._rotation02 * src1._rotation20; __tmp__01 = src2._rotation00 * src1._rotation01 + src2._rotation01 * src1._rotation11 + src2._rotation02 * src1._rotation21; __tmp__02 = src2._rotation00 * src1._rotation02 + src2._rotation01 * src1._rotation12 + src2._rotation02 * src1._rotation22; __tmp__10 = src2._rotation10 * src1._rotation00 + src2._rotation11 * src1._rotation10 + src2._rotation12 * src1._rotation20; __tmp__11 = src2._rotation10 * src1._rotation01 + src2._rotation11 * src1._rotation11 + src2._rotation12 * src1._rotation21; __tmp__12 = src2._rotation10 * src1._rotation02 + src2._rotation11 * src1._rotation12 + src2._rotation12 * src1._rotation22; __tmp__20 = src2._rotation20 * src1._rotation00 + src2._rotation21 * src1._rotation10 + src2._rotation22 * src1._rotation20; __tmp__21 = src2._rotation20 * src1._rotation01 + src2._rotation21 * src1._rotation11 + src2._rotation22 * src1._rotation21; __tmp__22 = src2._rotation20 * src1._rotation02 + src2._rotation21 * src1._rotation12 + src2._rotation22 * src1._rotation22; dst1._rotation00 = __tmp__00; dst1._rotation01 = __tmp__01; dst1._rotation02 = __tmp__02; dst1._rotation10 = __tmp__10; dst1._rotation11 = __tmp__11; dst1._rotation12 = __tmp__12; dst1._rotation20 = __tmp__20; dst1._rotation21 = __tmp__21; dst1._rotation22 = __tmp__22; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = src2._rotation00 * src1._positionX + src2._rotation01 * src1._positionY + src2._rotation02 * src1._positionZ; __tmp__Y = src2._rotation10 * src1._positionX + src2._rotation11 * src1._positionY + src2._rotation12 * src1._positionZ; __tmp__Z = src2._rotation20 * src1._positionX + src2._rotation21 * src1._positionY + src2._rotation22 * src1._positionZ; dst1._positionX = __tmp__X; dst1._positionY = __tmp__Y; dst1._positionZ = __tmp__Z; dst1._positionX += src2._positionX; dst1._positionY += src2._positionY; dst1._positionZ += src2._positionZ; var dst2 = s._transform; var src11 = s._localTransform; var src21 = this._transform; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = src21._rotation00 * src11._rotation00 + src21._rotation01 * src11._rotation10 + src21._rotation02 * src11._rotation20; __tmp__011 = src21._rotation00 * src11._rotation01 + src21._rotation01 * src11._rotation11 + src21._rotation02 * src11._rotation21; __tmp__021 = src21._rotation00 * src11._rotation02 + src21._rotation01 * src11._rotation12 + src21._rotation02 * src11._rotation22; __tmp__101 = src21._rotation10 * src11._rotation00 + src21._rotation11 * src11._rotation10 + src21._rotation12 * src11._rotation20; __tmp__111 = src21._rotation10 * src11._rotation01 + src21._rotation11 * src11._rotation11 + src21._rotation12 * src11._rotation21; __tmp__121 = src21._rotation10 * src11._rotation02 + src21._rotation11 * src11._rotation12 + src21._rotation12 * src11._rotation22; __tmp__201 = src21._rotation20 * src11._rotation00 + src21._rotation21 * src11._rotation10 + src21._rotation22 * src11._rotation20; __tmp__211 = src21._rotation20 * src11._rotation01 + src21._rotation21 * src11._rotation11 + src21._rotation22 * src11._rotation21; __tmp__221 = src21._rotation20 * src11._rotation02 + src21._rotation21 * src11._rotation12 + src21._rotation22 * src11._rotation22; dst2._rotation00 = __tmp__001; dst2._rotation01 = __tmp__011; dst2._rotation02 = __tmp__021; dst2._rotation10 = __tmp__101; dst2._rotation11 = __tmp__111; dst2._rotation12 = __tmp__121; dst2._rotation20 = __tmp__201; dst2._rotation21 = __tmp__211; dst2._rotation22 = __tmp__221; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = src21._rotation00 * src11._positionX + src21._rotation01 * src11._positionY + src21._rotation02 * src11._positionZ; __tmp__Y1 = src21._rotation10 * src11._positionX + src21._rotation11 * src11._positionY + src21._rotation12 * src11._positionZ; __tmp__Z1 = src21._rotation20 * src11._positionX + src21._rotation21 * src11._positionY + src21._rotation22 * src11._positionZ; dst2._positionX = __tmp__X1; dst2._positionY = __tmp__Y1; dst2._positionZ = __tmp__Z1; dst2._positionX += src21._positionX; dst2._positionY += src21._positionY; dst2._positionZ += src21._positionZ; var min; var minX; var minY; var minZ; var max; var maxX; var maxY; var maxZ; s._geom._computeAabb(s._aabb,s._ptransform); minX = s._aabb._minX; minY = s._aabb._minY; minZ = s._aabb._minZ; maxX = s._aabb._maxX; maxY = s._aabb._maxY; maxZ = s._aabb._maxZ; s._geom._computeAabb(s._aabb,s._transform); s._aabb._minX = minX < s._aabb._minX ? minX : s._aabb._minX; s._aabb._minY = minY < s._aabb._minY ? minY : s._aabb._minY; s._aabb._minZ = minZ < s._aabb._minZ ? minZ : s._aabb._minZ; s._aabb._maxX = maxX > s._aabb._maxX ? maxX : s._aabb._maxX; s._aabb._maxY = maxY > s._aabb._maxY ? maxY : s._aabb._maxY; s._aabb._maxZ = maxZ > s._aabb._maxZ ? maxZ : s._aabb._maxZ; if(s._proxy != null) { var d; var dX; var dY; var dZ; dX = s._transform._positionX - s._ptransform._positionX; dY = s._transform._positionY - s._ptransform._positionY; dZ = s._transform._positionZ - s._ptransform._positionZ; var v1 = s.displacement; v1.x = dX; v1.y = dY; v1.z = dZ; s._rigidBody._world._broadPhase.moveProxy(s._proxy,s._aabb,s.displacement); } s = n; } this._sleeping = false; this._sleepTime = 0; } getRotation() { var m = new oimo.common.Mat3(); var m1 = m; m1.e00 = this._transform._rotation00; m1.e01 = this._transform._rotation01; m1.e02 = this._transform._rotation02; m1.e10 = this._transform._rotation10; m1.e11 = this._transform._rotation11; m1.e12 = this._transform._rotation12; m1.e20 = this._transform._rotation20; m1.e21 = this._transform._rotation21; m1.e22 = this._transform._rotation22; return m; } getRotationTo(rotation) { var m = rotation; m.e00 = this._transform._rotation00; m.e01 = this._transform._rotation01; m.e02 = this._transform._rotation02; m.e10 = this._transform._rotation10; m.e11 = this._transform._rotation11; m.e12 = this._transform._rotation12; m.e20 = this._transform._rotation20; m.e21 = this._transform._rotation21; m.e22 = this._transform._rotation22; } setRotation(rotation) { var m = rotation; this._transform._rotation00 = m.e00; this._transform._rotation01 = m.e01; this._transform._rotation02 = m.e02; this._transform._rotation10 = m.e10; this._transform._rotation11 = m.e11; this._transform._rotation12 = m.e12; this._transform._rotation20 = m.e20; this._transform._rotation21 = m.e21; this._transform._rotation22 = m.e22; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = this._transform._rotation00 * this._invLocalInertia00 + this._transform._rotation01 * this._invLocalInertia10 + this._transform._rotation02 * this._invLocalInertia20; __tmp__01 = this._transform._rotation00 * this._invLocalInertia01 + this._transform._rotation01 * this._invLocalInertia11 + this._transform._rotation02 * this._invLocalInertia21; __tmp__02 = this._transform._rotation00 * this._invLocalInertia02 + this._transform._rotation01 * this._invLocalInertia12 + this._transform._rotation02 * this._invLocalInertia22; __tmp__10 = this._transform._rotation10 * this._invLocalInertia00 + this._transform._rotation11 * this._invLocalInertia10 + this._transform._rotation12 * this._invLocalInertia20; __tmp__11 = this._transform._rotation10 * this._invLocalInertia01 + this._transform._rotation11 * this._invLocalInertia11 + this._transform._rotation12 * this._invLocalInertia21; __tmp__12 = this._transform._rotation10 * this._invLocalInertia02 + this._transform._rotation11 * this._invLocalInertia12 + this._transform._rotation12 * this._invLocalInertia22; __tmp__20 = this._transform._rotation20 * this._invLocalInertia00 + this._transform._rotation21 * this._invLocalInertia10 + this._transform._rotation22 * this._invLocalInertia20; __tmp__21 = this._transform._rotation20 * this._invLocalInertia01 + this._transform._rotation21 * this._invLocalInertia11 + this._transform._rotation22 * this._invLocalInertia21; __tmp__22 = this._transform._rotation20 * this._invLocalInertia02 + this._transform._rotation21 * this._invLocalInertia12 + this._transform._rotation22 * this._invLocalInertia22; this._invInertia00 = __tmp__00; this._invInertia01 = __tmp__01; this._invInertia02 = __tmp__02; this._invInertia10 = __tmp__10; this._invInertia11 = __tmp__11; this._invInertia12 = __tmp__12; this._invInertia20 = __tmp__20; this._invInertia21 = __tmp__21; this._invInertia22 = __tmp__22; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = this._invInertia00 * this._transform._rotation00 + this._invInertia01 * this._transform._rotation01 + this._invInertia02 * this._transform._rotation02; __tmp__011 = this._invInertia00 * this._transform._rotation10 + this._invInertia01 * this._transform._rotation11 + this._invInertia02 * this._transform._rotation12; __tmp__021 = this._invInertia00 * this._transform._rotation20 + this._invInertia01 * this._transform._rotation21 + this._invInertia02 * this._transform._rotation22; __tmp__101 = this._invInertia10 * this._transform._rotation00 + this._invInertia11 * this._transform._rotation01 + this._invInertia12 * this._transform._rotation02; __tmp__111 = this._invInertia10 * this._transform._rotation10 + this._invInertia11 * this._transform._rotation11 + this._invInertia12 * this._transform._rotation12; __tmp__121 = this._invInertia10 * this._transform._rotation20 + this._invInertia11 * this._transform._rotation21 + this._invInertia12 * this._transform._rotation22; __tmp__201 = this._invInertia20 * this._transform._rotation00 + this._invInertia21 * this._transform._rotation01 + this._invInertia22 * this._transform._rotation02; __tmp__211 = this._invInertia20 * this._transform._rotation10 + this._invInertia21 * this._transform._rotation11 + this._invInertia22 * this._transform._rotation12; __tmp__221 = this._invInertia20 * this._transform._rotation20 + this._invInertia21 * this._transform._rotation21 + this._invInertia22 * this._transform._rotation22; this._invInertia00 = __tmp__001; this._invInertia01 = __tmp__011; this._invInertia02 = __tmp__021; this._invInertia10 = __tmp__101; this._invInertia11 = __tmp__111; this._invInertia12 = __tmp__121; this._invInertia20 = __tmp__201; this._invInertia21 = __tmp__211; this._invInertia22 = __tmp__221; this._invInertia00 *= this._rotFactor.x; this._invInertia01 *= this._rotFactor.x; this._invInertia02 *= this._rotFactor.x; this._invInertia10 *= this._rotFactor.y; this._invInertia11 *= this._rotFactor.y; this._invInertia12 *= this._rotFactor.y; this._invInertia20 *= this._rotFactor.z; this._invInertia21 *= this._rotFactor.z; this._invInertia22 *= this._rotFactor.z; var dst = this._ptransform; var src = this._transform; dst._positionX = src._positionX; dst._positionY = src._positionY; dst._positionZ = src._positionZ; dst._rotation00 = src._rotation00; dst._rotation01 = src._rotation01; dst._rotation02 = src._rotation02; dst._rotation10 = src._rotation10; dst._rotation11 = src._rotation11; dst._rotation12 = src._rotation12; dst._rotation20 = src._rotation20; dst._rotation21 = src._rotation21; dst._rotation22 = src._rotation22; var s = this._shapeList; while(s != null) { var n = s._next; var dst1 = s._ptransform; var src1 = s._localTransform; var src2 = this._ptransform; var __tmp__002; var __tmp__012; var __tmp__022; var __tmp__102; var __tmp__112; var __tmp__122; var __tmp__202; var __tmp__212; var __tmp__222; __tmp__002 = src2._rotation00 * src1._rotation00 + src2._rotation01 * src1._rotation10 + src2._rotation02 * src1._rotation20; __tmp__012 = src2._rotation00 * src1._rotation01 + src2._rotation01 * src1._rotation11 + src2._rotation02 * src1._rotation21; __tmp__022 = src2._rotation00 * src1._rotation02 + src2._rotation01 * src1._rotation12 + src2._rotation02 * src1._rotation22; __tmp__102 = src2._rotation10 * src1._rotation00 + src2._rotation11 * src1._rotation10 + src2._rotation12 * src1._rotation20; __tmp__112 = src2._rotation10 * src1._rotation01 + src2._rotation11 * src1._rotation11 + src2._rotation12 * src1._rotation21; __tmp__122 = src2._rotation10 * src1._rotation02 + src2._rotation11 * src1._rotation12 + src2._rotation12 * src1._rotation22; __tmp__202 = src2._rotation20 * src1._rotation00 + src2._rotation21 * src1._rotation10 + src2._rotation22 * src1._rotation20; __tmp__212 = src2._rotation20 * src1._rotation01 + src2._rotation21 * src1._rotation11 + src2._rotation22 * src1._rotation21; __tmp__222 = src2._rotation20 * src1._rotation02 + src2._rotation21 * src1._rotation12 + src2._rotation22 * src1._rotation22; dst1._rotation00 = __tmp__002; dst1._rotation01 = __tmp__012; dst1._rotation02 = __tmp__022; dst1._rotation10 = __tmp__102; dst1._rotation11 = __tmp__112; dst1._rotation12 = __tmp__122; dst1._rotation20 = __tmp__202; dst1._rotation21 = __tmp__212; dst1._rotation22 = __tmp__222; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = src2._rotation00 * src1._positionX + src2._rotation01 * src1._positionY + src2._rotation02 * src1._positionZ; __tmp__Y = src2._rotation10 * src1._positionX + src2._rotation11 * src1._positionY + src2._rotation12 * src1._positionZ; __tmp__Z = src2._rotation20 * src1._positionX + src2._rotation21 * src1._positionY + src2._rotation22 * src1._positionZ; dst1._positionX = __tmp__X; dst1._positionY = __tmp__Y; dst1._positionZ = __tmp__Z; dst1._positionX += src2._positionX; dst1._positionY += src2._positionY; dst1._positionZ += src2._positionZ; var dst2 = s._transform; var src11 = s._localTransform; var src21 = this._transform; var __tmp__003; var __tmp__013; var __tmp__023; var __tmp__103; var __tmp__113; var __tmp__123; var __tmp__203; var __tmp__213; var __tmp__223; __tmp__003 = src21._rotation00 * src11._rotation00 + src21._rotation01 * src11._rotation10 + src21._rotation02 * src11._rotation20; __tmp__013 = src21._rotation00 * src11._rotation01 + src21._rotation01 * src11._rotation11 + src21._rotation02 * src11._rotation21; __tmp__023 = src21._rotation00 * src11._rotation02 + src21._rotation01 * src11._rotation12 + src21._rotation02 * src11._rotation22; __tmp__103 = src21._rotation10 * src11._rotation00 + src21._rotation11 * src11._rotation10 + src21._rotation12 * src11._rotation20; __tmp__113 = src21._rotation10 * src11._rotation01 + src21._rotation11 * src11._rotation11 + src21._rotation12 * src11._rotation21; __tmp__123 = src21._rotation10 * src11._rotation02 + src21._rotation11 * src11._rotation12 + src21._rotation12 * src11._rotation22; __tmp__203 = src21._rotation20 * src11._rotation00 + src21._rotation21 * src11._rotation10 + src21._rotation22 * src11._rotation20; __tmp__213 = src21._rotation20 * src11._rotation01 + src21._rotation21 * src11._rotation11 + src21._rotation22 * src11._rotation21; __tmp__223 = src21._rotation20 * src11._rotation02 + src21._rotation21 * src11._rotation12 + src21._rotation22 * src11._rotation22; dst2._rotation00 = __tmp__003; dst2._rotation01 = __tmp__013; dst2._rotation02 = __tmp__023; dst2._rotation10 = __tmp__103; dst2._rotation11 = __tmp__113; dst2._rotation12 = __tmp__123; dst2._rotation20 = __tmp__203; dst2._rotation21 = __tmp__213; dst2._rotation22 = __tmp__223; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = src21._rotation00 * src11._positionX + src21._rotation01 * src11._positionY + src21._rotation02 * src11._positionZ; __tmp__Y1 = src21._rotation10 * src11._positionX + src21._rotation11 * src11._positionY + src21._rotation12 * src11._positionZ; __tmp__Z1 = src21._rotation20 * src11._positionX + src21._rotation21 * src11._positionY + src21._rotation22 * src11._positionZ; dst2._positionX = __tmp__X1; dst2._positionY = __tmp__Y1; dst2._positionZ = __tmp__Z1; dst2._positionX += src21._positionX; dst2._positionY += src21._positionY; dst2._positionZ += src21._positionZ; var min; var minX; var minY; var minZ; var max; var maxX; var maxY; var maxZ; s._geom._computeAabb(s._aabb,s._ptransform); minX = s._aabb._minX; minY = s._aabb._minY; minZ = s._aabb._minZ; maxX = s._aabb._maxX; maxY = s._aabb._maxY; maxZ = s._aabb._maxZ; s._geom._computeAabb(s._aabb,s._transform); s._aabb._minX = minX < s._aabb._minX ? minX : s._aabb._minX; s._aabb._minY = minY < s._aabb._minY ? minY : s._aabb._minY; s._aabb._minZ = minZ < s._aabb._minZ ? minZ : s._aabb._minZ; s._aabb._maxX = maxX > s._aabb._maxX ? maxX : s._aabb._maxX; s._aabb._maxY = maxY > s._aabb._maxY ? maxY : s._aabb._maxY; s._aabb._maxZ = maxZ > s._aabb._maxZ ? maxZ : s._aabb._maxZ; if(s._proxy != null) { var d; var dX; var dY; var dZ; dX = s._transform._positionX - s._ptransform._positionX; dY = s._transform._positionY - s._ptransform._positionY; dZ = s._transform._positionZ - s._ptransform._positionZ; var v = s.displacement; v.x = dX; v.y = dY; v.z = dZ; s._rigidBody._world._broadPhase.moveProxy(s._proxy,s._aabb,s.displacement); } s = n; } this._sleeping = false; this._sleepTime = 0; } setRotationXyz(eulerAngles) { var xyz; var xyzX; var xyzY; var xyzZ; var v = eulerAngles; xyzX = v.x; xyzY = v.y; xyzZ = v.z; var sx = Math.sin(xyzX); var sy = Math.sin(xyzY); var sz = Math.sin(xyzZ); var cx = Math.cos(xyzX); var cy = Math.cos(xyzY); var cz = Math.cos(xyzZ); this._transform._rotation00 = cy * cz; this._transform._rotation01 = -cy * sz; this._transform._rotation02 = sy; this._transform._rotation10 = cx * sz + cz * sx * sy; this._transform._rotation11 = cx * cz - sx * sy * sz; this._transform._rotation12 = -cy * sx; this._transform._rotation20 = sx * sz - cx * cz * sy; this._transform._rotation21 = cz * sx + cx * sy * sz; this._transform._rotation22 = cx * cy; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = this._transform._rotation00 * this._invLocalInertia00 + this._transform._rotation01 * this._invLocalInertia10 + this._transform._rotation02 * this._invLocalInertia20; __tmp__01 = this._transform._rotation00 * this._invLocalInertia01 + this._transform._rotation01 * this._invLocalInertia11 + this._transform._rotation02 * this._invLocalInertia21; __tmp__02 = this._transform._rotation00 * this._invLocalInertia02 + this._transform._rotation01 * this._invLocalInertia12 + this._transform._rotation02 * this._invLocalInertia22; __tmp__10 = this._transform._rotation10 * this._invLocalInertia00 + this._transform._rotation11 * this._invLocalInertia10 + this._transform._rotation12 * this._invLocalInertia20; __tmp__11 = this._transform._rotation10 * this._invLocalInertia01 + this._transform._rotation11 * this._invLocalInertia11 + this._transform._rotation12 * this._invLocalInertia21; __tmp__12 = this._transform._rotation10 * this._invLocalInertia02 + this._transform._rotation11 * this._invLocalInertia12 + this._transform._rotation12 * this._invLocalInertia22; __tmp__20 = this._transform._rotation20 * this._invLocalInertia00 + this._transform._rotation21 * this._invLocalInertia10 + this._transform._rotation22 * this._invLocalInertia20; __tmp__21 = this._transform._rotation20 * this._invLocalInertia01 + this._transform._rotation21 * this._invLocalInertia11 + this._transform._rotation22 * this._invLocalInertia21; __tmp__22 = this._transform._rotation20 * this._invLocalInertia02 + this._transform._rotation21 * this._invLocalInertia12 + this._transform._rotation22 * this._invLocalInertia22; this._invInertia00 = __tmp__00; this._invInertia01 = __tmp__01; this._invInertia02 = __tmp__02; this._invInertia10 = __tmp__10; this._invInertia11 = __tmp__11; this._invInertia12 = __tmp__12; this._invInertia20 = __tmp__20; this._invInertia21 = __tmp__21; this._invInertia22 = __tmp__22; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = this._invInertia00 * this._transform._rotation00 + this._invInertia01 * this._transform._rotation01 + this._invInertia02 * this._transform._rotation02; __tmp__011 = this._invInertia00 * this._transform._rotation10 + this._invInertia01 * this._transform._rotation11 + this._invInertia02 * this._transform._rotation12; __tmp__021 = this._invInertia00 * this._transform._rotation20 + this._invInertia01 * this._transform._rotation21 + this._invInertia02 * this._transform._rotation22; __tmp__101 = this._invInertia10 * this._transform._rotation00 + this._invInertia11 * this._transform._rotation01 + this._invInertia12 * this._transform._rotation02; __tmp__111 = this._invInertia10 * this._transform._rotation10 + this._invInertia11 * this._transform._rotation11 + this._invInertia12 * this._transform._rotation12; __tmp__121 = this._invInertia10 * this._transform._rotation20 + this._invInertia11 * this._transform._rotation21 + this._invInertia12 * this._transform._rotation22; __tmp__201 = this._invInertia20 * this._transform._rotation00 + this._invInertia21 * this._transform._rotation01 + this._invInertia22 * this._transform._rotation02; __tmp__211 = this._invInertia20 * this._transform._rotation10 + this._invInertia21 * this._transform._rotation11 + this._invInertia22 * this._transform._rotation12; __tmp__221 = this._invInertia20 * this._transform._rotation20 + this._invInertia21 * this._transform._rotation21 + this._invInertia22 * this._transform._rotation22; this._invInertia00 = __tmp__001; this._invInertia01 = __tmp__011; this._invInertia02 = __tmp__021; this._invInertia10 = __tmp__101; this._invInertia11 = __tmp__111; this._invInertia12 = __tmp__121; this._invInertia20 = __tmp__201; this._invInertia21 = __tmp__211; this._invInertia22 = __tmp__221; this._invInertia00 *= this._rotFactor.x; this._invInertia01 *= this._rotFactor.x; this._invInertia02 *= this._rotFactor.x; this._invInertia10 *= this._rotFactor.y; this._invInertia11 *= this._rotFactor.y; this._invInertia12 *= this._rotFactor.y; this._invInertia20 *= this._rotFactor.z; this._invInertia21 *= this._rotFactor.z; this._invInertia22 *= this._rotFactor.z; var dst = this._ptransform; var src = this._transform; dst._positionX = src._positionX; dst._positionY = src._positionY; dst._positionZ = src._positionZ; dst._rotation00 = src._rotation00; dst._rotation01 = src._rotation01; dst._rotation02 = src._rotation02; dst._rotation10 = src._rotation10; dst._rotation11 = src._rotation11; dst._rotation12 = src._rotation12; dst._rotation20 = src._rotation20; dst._rotation21 = src._rotation21; dst._rotation22 = src._rotation22; var s = this._shapeList; while(s != null) { var n = s._next; var dst1 = s._ptransform; var src1 = s._localTransform; var src2 = this._ptransform; var __tmp__002; var __tmp__012; var __tmp__022; var __tmp__102; var __tmp__112; var __tmp__122; var __tmp__202; var __tmp__212; var __tmp__222; __tmp__002 = src2._rotation00 * src1._rotation00 + src2._rotation01 * src1._rotation10 + src2._rotation02 * src1._rotation20; __tmp__012 = src2._rotation00 * src1._rotation01 + src2._rotation01 * src1._rotation11 + src2._rotation02 * src1._rotation21; __tmp__022 = src2._rotation00 * src1._rotation02 + src2._rotation01 * src1._rotation12 + src2._rotation02 * src1._rotation22; __tmp__102 = src2._rotation10 * src1._rotation00 + src2._rotation11 * src1._rotation10 + src2._rotation12 * src1._rotation20; __tmp__112 = src2._rotation10 * src1._rotation01 + src2._rotation11 * src1._rotation11 + src2._rotation12 * src1._rotation21; __tmp__122 = src2._rotation10 * src1._rotation02 + src2._rotation11 * src1._rotation12 + src2._rotation12 * src1._rotation22; __tmp__202 = src2._rotation20 * src1._rotation00 + src2._rotation21 * src1._rotation10 + src2._rotation22 * src1._rotation20; __tmp__212 = src2._rotation20 * src1._rotation01 + src2._rotation21 * src1._rotation11 + src2._rotation22 * src1._rotation21; __tmp__222 = src2._rotation20 * src1._rotation02 + src2._rotation21 * src1._rotation12 + src2._rotation22 * src1._rotation22; dst1._rotation00 = __tmp__002; dst1._rotation01 = __tmp__012; dst1._rotation02 = __tmp__022; dst1._rotation10 = __tmp__102; dst1._rotation11 = __tmp__112; dst1._rotation12 = __tmp__122; dst1._rotation20 = __tmp__202; dst1._rotation21 = __tmp__212; dst1._rotation22 = __tmp__222; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = src2._rotation00 * src1._positionX + src2._rotation01 * src1._positionY + src2._rotation02 * src1._positionZ; __tmp__Y = src2._rotation10 * src1._positionX + src2._rotation11 * src1._positionY + src2._rotation12 * src1._positionZ; __tmp__Z = src2._rotation20 * src1._positionX + src2._rotation21 * src1._positionY + src2._rotation22 * src1._positionZ; dst1._positionX = __tmp__X; dst1._positionY = __tmp__Y; dst1._positionZ = __tmp__Z; dst1._positionX += src2._positionX; dst1._positionY += src2._positionY; dst1._positionZ += src2._positionZ; var dst2 = s._transform; var src11 = s._localTransform; var src21 = this._transform; var __tmp__003; var __tmp__013; var __tmp__023; var __tmp__103; var __tmp__113; var __tmp__123; var __tmp__203; var __tmp__213; var __tmp__223; __tmp__003 = src21._rotation00 * src11._rotation00 + src21._rotation01 * src11._rotation10 + src21._rotation02 * src11._rotation20; __tmp__013 = src21._rotation00 * src11._rotation01 + src21._rotation01 * src11._rotation11 + src21._rotation02 * src11._rotation21; __tmp__023 = src21._rotation00 * src11._rotation02 + src21._rotation01 * src11._rotation12 + src21._rotation02 * src11._rotation22; __tmp__103 = src21._rotation10 * src11._rotation00 + src21._rotation11 * src11._rotation10 + src21._rotation12 * src11._rotation20; __tmp__113 = src21._rotation10 * src11._rotation01 + src21._rotation11 * src11._rotation11 + src21._rotation12 * src11._rotation21; __tmp__123 = src21._rotation10 * src11._rotation02 + src21._rotation11 * src11._rotation12 + src21._rotation12 * src11._rotation22; __tmp__203 = src21._rotation20 * src11._rotation00 + src21._rotation21 * src11._rotation10 + src21._rotation22 * src11._rotation20; __tmp__213 = src21._rotation20 * src11._rotation01 + src21._rotation21 * src11._rotation11 + src21._rotation22 * src11._rotation21; __tmp__223 = src21._rotation20 * src11._rotation02 + src21._rotation21 * src11._rotation12 + src21._rotation22 * src11._rotation22; dst2._rotation00 = __tmp__003; dst2._rotation01 = __tmp__013; dst2._rotation02 = __tmp__023; dst2._rotation10 = __tmp__103; dst2._rotation11 = __tmp__113; dst2._rotation12 = __tmp__123; dst2._rotation20 = __tmp__203; dst2._rotation21 = __tmp__213; dst2._rotation22 = __tmp__223; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = src21._rotation00 * src11._positionX + src21._rotation01 * src11._positionY + src21._rotation02 * src11._positionZ; __tmp__Y1 = src21._rotation10 * src11._positionX + src21._rotation11 * src11._positionY + src21._rotation12 * src11._positionZ; __tmp__Z1 = src21._rotation20 * src11._positionX + src21._rotation21 * src11._positionY + src21._rotation22 * src11._positionZ; dst2._positionX = __tmp__X1; dst2._positionY = __tmp__Y1; dst2._positionZ = __tmp__Z1; dst2._positionX += src21._positionX; dst2._positionY += src21._positionY; dst2._positionZ += src21._positionZ; var min; var minX; var minY; var minZ; var max; var maxX; var maxY; var maxZ; s._geom._computeAabb(s._aabb,s._ptransform); minX = s._aabb._minX; minY = s._aabb._minY; minZ = s._aabb._minZ; maxX = s._aabb._maxX; maxY = s._aabb._maxY; maxZ = s._aabb._maxZ; s._geom._computeAabb(s._aabb,s._transform); s._aabb._minX = minX < s._aabb._minX ? minX : s._aabb._minX; s._aabb._minY = minY < s._aabb._minY ? minY : s._aabb._minY; s._aabb._minZ = minZ < s._aabb._minZ ? minZ : s._aabb._minZ; s._aabb._maxX = maxX > s._aabb._maxX ? maxX : s._aabb._maxX; s._aabb._maxY = maxY > s._aabb._maxY ? maxY : s._aabb._maxY; s._aabb._maxZ = maxZ > s._aabb._maxZ ? maxZ : s._aabb._maxZ; if(s._proxy != null) { var d; var dX; var dY; var dZ; dX = s._transform._positionX - s._ptransform._positionX; dY = s._transform._positionY - s._ptransform._positionY; dZ = s._transform._positionZ - s._ptransform._positionZ; var v1 = s.displacement; v1.x = dX; v1.y = dY; v1.z = dZ; s._rigidBody._world._broadPhase.moveProxy(s._proxy,s._aabb,s.displacement); } s = n; } this._sleeping = false; this._sleepTime = 0; } rotate(rotation) { var rot; var rot00; var rot01; var rot02; var rot10; var rot11; var rot12; var rot20; var rot21; var rot22; var m = rotation; rot00 = m.e00; rot01 = m.e01; rot02 = m.e02; rot10 = m.e10; rot11 = m.e11; rot12 = m.e12; rot20 = m.e20; rot21 = m.e21; rot22 = m.e22; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = rot00 * this._transform._rotation00 + rot01 * this._transform._rotation10 + rot02 * this._transform._rotation20; __tmp__01 = rot00 * this._transform._rotation01 + rot01 * this._transform._rotation11 + rot02 * this._transform._rotation21; __tmp__02 = rot00 * this._transform._rotation02 + rot01 * this._transform._rotation12 + rot02 * this._transform._rotation22; __tmp__10 = rot10 * this._transform._rotation00 + rot11 * this._transform._rotation10 + rot12 * this._transform._rotation20; __tmp__11 = rot10 * this._transform._rotation01 + rot11 * this._transform._rotation11 + rot12 * this._transform._rotation21; __tmp__12 = rot10 * this._transform._rotation02 + rot11 * this._transform._rotation12 + rot12 * this._transform._rotation22; __tmp__20 = rot20 * this._transform._rotation00 + rot21 * this._transform._rotation10 + rot22 * this._transform._rotation20; __tmp__21 = rot20 * this._transform._rotation01 + rot21 * this._transform._rotation11 + rot22 * this._transform._rotation21; __tmp__22 = rot20 * this._transform._rotation02 + rot21 * this._transform._rotation12 + rot22 * this._transform._rotation22; this._transform._rotation00 = __tmp__00; this._transform._rotation01 = __tmp__01; this._transform._rotation02 = __tmp__02; this._transform._rotation10 = __tmp__10; this._transform._rotation11 = __tmp__11; this._transform._rotation12 = __tmp__12; this._transform._rotation20 = __tmp__20; this._transform._rotation21 = __tmp__21; this._transform._rotation22 = __tmp__22; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = this._transform._rotation00 * this._invLocalInertia00 + this._transform._rotation01 * this._invLocalInertia10 + this._transform._rotation02 * this._invLocalInertia20; __tmp__011 = this._transform._rotation00 * this._invLocalInertia01 + this._transform._rotation01 * this._invLocalInertia11 + this._transform._rotation02 * this._invLocalInertia21; __tmp__021 = this._transform._rotation00 * this._invLocalInertia02 + this._transform._rotation01 * this._invLocalInertia12 + this._transform._rotation02 * this._invLocalInertia22; __tmp__101 = this._transform._rotation10 * this._invLocalInertia00 + this._transform._rotation11 * this._invLocalInertia10 + this._transform._rotation12 * this._invLocalInertia20; __tmp__111 = this._transform._rotation10 * this._invLocalInertia01 + this._transform._rotation11 * this._invLocalInertia11 + this._transform._rotation12 * this._invLocalInertia21; __tmp__121 = this._transform._rotation10 * this._invLocalInertia02 + this._transform._rotation11 * this._invLocalInertia12 + this._transform._rotation12 * this._invLocalInertia22; __tmp__201 = this._transform._rotation20 * this._invLocalInertia00 + this._transform._rotation21 * this._invLocalInertia10 + this._transform._rotation22 * this._invLocalInertia20; __tmp__211 = this._transform._rotation20 * this._invLocalInertia01 + this._transform._rotation21 * this._invLocalInertia11 + this._transform._rotation22 * this._invLocalInertia21; __tmp__221 = this._transform._rotation20 * this._invLocalInertia02 + this._transform._rotation21 * this._invLocalInertia12 + this._transform._rotation22 * this._invLocalInertia22; this._invInertia00 = __tmp__001; this._invInertia01 = __tmp__011; this._invInertia02 = __tmp__021; this._invInertia10 = __tmp__101; this._invInertia11 = __tmp__111; this._invInertia12 = __tmp__121; this._invInertia20 = __tmp__201; this._invInertia21 = __tmp__211; this._invInertia22 = __tmp__221; var __tmp__002; var __tmp__012; var __tmp__022; var __tmp__102; var __tmp__112; var __tmp__122; var __tmp__202; var __tmp__212; var __tmp__222; __tmp__002 = this._invInertia00 * this._transform._rotation00 + this._invInertia01 * this._transform._rotation01 + this._invInertia02 * this._transform._rotation02; __tmp__012 = this._invInertia00 * this._transform._rotation10 + this._invInertia01 * this._transform._rotation11 + this._invInertia02 * this._transform._rotation12; __tmp__022 = this._invInertia00 * this._transform._rotation20 + this._invInertia01 * this._transform._rotation21 + this._invInertia02 * this._transform._rotation22; __tmp__102 = this._invInertia10 * this._transform._rotation00 + this._invInertia11 * this._transform._rotation01 + this._invInertia12 * this._transform._rotation02; __tmp__112 = this._invInertia10 * this._transform._rotation10 + this._invInertia11 * this._transform._rotation11 + this._invInertia12 * this._transform._rotation12; __tmp__122 = this._invInertia10 * this._transform._rotation20 + this._invInertia11 * this._transform._rotation21 + this._invInertia12 * this._transform._rotation22; __tmp__202 = this._invInertia20 * this._transform._rotation00 + this._invInertia21 * this._transform._rotation01 + this._invInertia22 * this._transform._rotation02; __tmp__212 = this._invInertia20 * this._transform._rotation10 + this._invInertia21 * this._transform._rotation11 + this._invInertia22 * this._transform._rotation12; __tmp__222 = this._invInertia20 * this._transform._rotation20 + this._invInertia21 * this._transform._rotation21 + this._invInertia22 * this._transform._rotation22; this._invInertia00 = __tmp__002; this._invInertia01 = __tmp__012; this._invInertia02 = __tmp__022; this._invInertia10 = __tmp__102; this._invInertia11 = __tmp__112; this._invInertia12 = __tmp__122; this._invInertia20 = __tmp__202; this._invInertia21 = __tmp__212; this._invInertia22 = __tmp__222; this._invInertia00 *= this._rotFactor.x; this._invInertia01 *= this._rotFactor.x; this._invInertia02 *= this._rotFactor.x; this._invInertia10 *= this._rotFactor.y; this._invInertia11 *= this._rotFactor.y; this._invInertia12 *= this._rotFactor.y; this._invInertia20 *= this._rotFactor.z; this._invInertia21 *= this._rotFactor.z; this._invInertia22 *= this._rotFactor.z; var dst = this._ptransform; var src = this._transform; dst._positionX = src._positionX; dst._positionY = src._positionY; dst._positionZ = src._positionZ; dst._rotation00 = src._rotation00; dst._rotation01 = src._rotation01; dst._rotation02 = src._rotation02; dst._rotation10 = src._rotation10; dst._rotation11 = src._rotation11; dst._rotation12 = src._rotation12; dst._rotation20 = src._rotation20; dst._rotation21 = src._rotation21; dst._rotation22 = src._rotation22; var s = this._shapeList; while(s != null) { var n = s._next; var dst1 = s._ptransform; var src1 = s._localTransform; var src2 = this._ptransform; var __tmp__003; var __tmp__013; var __tmp__023; var __tmp__103; var __tmp__113; var __tmp__123; var __tmp__203; var __tmp__213; var __tmp__223; __tmp__003 = src2._rotation00 * src1._rotation00 + src2._rotation01 * src1._rotation10 + src2._rotation02 * src1._rotation20; __tmp__013 = src2._rotation00 * src1._rotation01 + src2._rotation01 * src1._rotation11 + src2._rotation02 * src1._rotation21; __tmp__023 = src2._rotation00 * src1._rotation02 + src2._rotation01 * src1._rotation12 + src2._rotation02 * src1._rotation22; __tmp__103 = src2._rotation10 * src1._rotation00 + src2._rotation11 * src1._rotation10 + src2._rotation12 * src1._rotation20; __tmp__113 = src2._rotation10 * src1._rotation01 + src2._rotation11 * src1._rotation11 + src2._rotation12 * src1._rotation21; __tmp__123 = src2._rotation10 * src1._rotation02 + src2._rotation11 * src1._rotation12 + src2._rotation12 * src1._rotation22; __tmp__203 = src2._rotation20 * src1._rotation00 + src2._rotation21 * src1._rotation10 + src2._rotation22 * src1._rotation20; __tmp__213 = src2._rotation20 * src1._rotation01 + src2._rotation21 * src1._rotation11 + src2._rotation22 * src1._rotation21; __tmp__223 = src2._rotation20 * src1._rotation02 + src2._rotation21 * src1._rotation12 + src2._rotation22 * src1._rotation22; dst1._rotation00 = __tmp__003; dst1._rotation01 = __tmp__013; dst1._rotation02 = __tmp__023; dst1._rotation10 = __tmp__103; dst1._rotation11 = __tmp__113; dst1._rotation12 = __tmp__123; dst1._rotation20 = __tmp__203; dst1._rotation21 = __tmp__213; dst1._rotation22 = __tmp__223; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = src2._rotation00 * src1._positionX + src2._rotation01 * src1._positionY + src2._rotation02 * src1._positionZ; __tmp__Y = src2._rotation10 * src1._positionX + src2._rotation11 * src1._positionY + src2._rotation12 * src1._positionZ; __tmp__Z = src2._rotation20 * src1._positionX + src2._rotation21 * src1._positionY + src2._rotation22 * src1._positionZ; dst1._positionX = __tmp__X; dst1._positionY = __tmp__Y; dst1._positionZ = __tmp__Z; dst1._positionX += src2._positionX; dst1._positionY += src2._positionY; dst1._positionZ += src2._positionZ; var dst2 = s._transform; var src11 = s._localTransform; var src21 = this._transform; var __tmp__004; var __tmp__014; var __tmp__024; var __tmp__104; var __tmp__114; var __tmp__124; var __tmp__204; var __tmp__214; var __tmp__224; __tmp__004 = src21._rotation00 * src11._rotation00 + src21._rotation01 * src11._rotation10 + src21._rotation02 * src11._rotation20; __tmp__014 = src21._rotation00 * src11._rotation01 + src21._rotation01 * src11._rotation11 + src21._rotation02 * src11._rotation21; __tmp__024 = src21._rotation00 * src11._rotation02 + src21._rotation01 * src11._rotation12 + src21._rotation02 * src11._rotation22; __tmp__104 = src21._rotation10 * src11._rotation00 + src21._rotation11 * src11._rotation10 + src21._rotation12 * src11._rotation20; __tmp__114 = src21._rotation10 * src11._rotation01 + src21._rotation11 * src11._rotation11 + src21._rotation12 * src11._rotation21; __tmp__124 = src21._rotation10 * src11._rotation02 + src21._rotation11 * src11._rotation12 + src21._rotation12 * src11._rotation22; __tmp__204 = src21._rotation20 * src11._rotation00 + src21._rotation21 * src11._rotation10 + src21._rotation22 * src11._rotation20; __tmp__214 = src21._rotation20 * src11._rotation01 + src21._rotation21 * src11._rotation11 + src21._rotation22 * src11._rotation21; __tmp__224 = src21._rotation20 * src11._rotation02 + src21._rotation21 * src11._rotation12 + src21._rotation22 * src11._rotation22; dst2._rotation00 = __tmp__004; dst2._rotation01 = __tmp__014; dst2._rotation02 = __tmp__024; dst2._rotation10 = __tmp__104; dst2._rotation11 = __tmp__114; dst2._rotation12 = __tmp__124; dst2._rotation20 = __tmp__204; dst2._rotation21 = __tmp__214; dst2._rotation22 = __tmp__224; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = src21._rotation00 * src11._positionX + src21._rotation01 * src11._positionY + src21._rotation02 * src11._positionZ; __tmp__Y1 = src21._rotation10 * src11._positionX + src21._rotation11 * src11._positionY + src21._rotation12 * src11._positionZ; __tmp__Z1 = src21._rotation20 * src11._positionX + src21._rotation21 * src11._positionY + src21._rotation22 * src11._positionZ; dst2._positionX = __tmp__X1; dst2._positionY = __tmp__Y1; dst2._positionZ = __tmp__Z1; dst2._positionX += src21._positionX; dst2._positionY += src21._positionY; dst2._positionZ += src21._positionZ; var min; var minX; var minY; var minZ; var max; var maxX; var maxY; var maxZ; s._geom._computeAabb(s._aabb,s._ptransform); minX = s._aabb._minX; minY = s._aabb._minY; minZ = s._aabb._minZ; maxX = s._aabb._maxX; maxY = s._aabb._maxY; maxZ = s._aabb._maxZ; s._geom._computeAabb(s._aabb,s._transform); s._aabb._minX = minX < s._aabb._minX ? minX : s._aabb._minX; s._aabb._minY = minY < s._aabb._minY ? minY : s._aabb._minY; s._aabb._minZ = minZ < s._aabb._minZ ? minZ : s._aabb._minZ; s._aabb._maxX = maxX > s._aabb._maxX ? maxX : s._aabb._maxX; s._aabb._maxY = maxY > s._aabb._maxY ? maxY : s._aabb._maxY; s._aabb._maxZ = maxZ > s._aabb._maxZ ? maxZ : s._aabb._maxZ; if(s._proxy != null) { var d; var dX; var dY; var dZ; dX = s._transform._positionX - s._ptransform._positionX; dY = s._transform._positionY - s._ptransform._positionY; dZ = s._transform._positionZ - s._ptransform._positionZ; var v = s.displacement; v.x = dX; v.y = dY; v.z = dZ; s._rigidBody._world._broadPhase.moveProxy(s._proxy,s._aabb,s.displacement); } s = n; } this._sleeping = false; this._sleepTime = 0; } rotateXyz(eulerAngles) { var xyz; var xyzX; var xyzY; var xyzZ; var rot; var rot00; var rot01; var rot02; var rot10; var rot11; var rot12; var rot20; var rot21; var rot22; var v = eulerAngles; xyzX = v.x; xyzY = v.y; xyzZ = v.z; var sx = Math.sin(xyzX); var sy = Math.sin(xyzY); var sz = Math.sin(xyzZ); var cx = Math.cos(xyzX); var cy = Math.cos(xyzY); var cz = Math.cos(xyzZ); rot00 = cy * cz; rot01 = -cy * sz; rot02 = sy; rot10 = cx * sz + cz * sx * sy; rot11 = cx * cz - sx * sy * sz; rot12 = -cy * sx; rot20 = sx * sz - cx * cz * sy; rot21 = cz * sx + cx * sy * sz; rot22 = cx * cy; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = rot00 * this._transform._rotation00 + rot01 * this._transform._rotation10 + rot02 * this._transform._rotation20; __tmp__01 = rot00 * this._transform._rotation01 + rot01 * this._transform._rotation11 + rot02 * this._transform._rotation21; __tmp__02 = rot00 * this._transform._rotation02 + rot01 * this._transform._rotation12 + rot02 * this._transform._rotation22; __tmp__10 = rot10 * this._transform._rotation00 + rot11 * this._transform._rotation10 + rot12 * this._transform._rotation20; __tmp__11 = rot10 * this._transform._rotation01 + rot11 * this._transform._rotation11 + rot12 * this._transform._rotation21; __tmp__12 = rot10 * this._transform._rotation02 + rot11 * this._transform._rotation12 + rot12 * this._transform._rotation22; __tmp__20 = rot20 * this._transform._rotation00 + rot21 * this._transform._rotation10 + rot22 * this._transform._rotation20; __tmp__21 = rot20 * this._transform._rotation01 + rot21 * this._transform._rotation11 + rot22 * this._transform._rotation21; __tmp__22 = rot20 * this._transform._rotation02 + rot21 * this._transform._rotation12 + rot22 * this._transform._rotation22; this._transform._rotation00 = __tmp__00; this._transform._rotation01 = __tmp__01; this._transform._rotation02 = __tmp__02; this._transform._rotation10 = __tmp__10; this._transform._rotation11 = __tmp__11; this._transform._rotation12 = __tmp__12; this._transform._rotation20 = __tmp__20; this._transform._rotation21 = __tmp__21; this._transform._rotation22 = __tmp__22; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = this._transform._rotation00 * this._invLocalInertia00 + this._transform._rotation01 * this._invLocalInertia10 + this._transform._rotation02 * this._invLocalInertia20; __tmp__011 = this._transform._rotation00 * this._invLocalInertia01 + this._transform._rotation01 * this._invLocalInertia11 + this._transform._rotation02 * this._invLocalInertia21; __tmp__021 = this._transform._rotation00 * this._invLocalInertia02 + this._transform._rotation01 * this._invLocalInertia12 + this._transform._rotation02 * this._invLocalInertia22; __tmp__101 = this._transform._rotation10 * this._invLocalInertia00 + this._transform._rotation11 * this._invLocalInertia10 + this._transform._rotation12 * this._invLocalInertia20; __tmp__111 = this._transform._rotation10 * this._invLocalInertia01 + this._transform._rotation11 * this._invLocalInertia11 + this._transform._rotation12 * this._invLocalInertia21; __tmp__121 = this._transform._rotation10 * this._invLocalInertia02 + this._transform._rotation11 * this._invLocalInertia12 + this._transform._rotation12 * this._invLocalInertia22; __tmp__201 = this._transform._rotation20 * this._invLocalInertia00 + this._transform._rotation21 * this._invLocalInertia10 + this._transform._rotation22 * this._invLocalInertia20; __tmp__211 = this._transform._rotation20 * this._invLocalInertia01 + this._transform._rotation21 * this._invLocalInertia11 + this._transform._rotation22 * this._invLocalInertia21; __tmp__221 = this._transform._rotation20 * this._invLocalInertia02 + this._transform._rotation21 * this._invLocalInertia12 + this._transform._rotation22 * this._invLocalInertia22; this._invInertia00 = __tmp__001; this._invInertia01 = __tmp__011; this._invInertia02 = __tmp__021; this._invInertia10 = __tmp__101; this._invInertia11 = __tmp__111; this._invInertia12 = __tmp__121; this._invInertia20 = __tmp__201; this._invInertia21 = __tmp__211; this._invInertia22 = __tmp__221; var __tmp__002; var __tmp__012; var __tmp__022; var __tmp__102; var __tmp__112; var __tmp__122; var __tmp__202; var __tmp__212; var __tmp__222; __tmp__002 = this._invInertia00 * this._transform._rotation00 + this._invInertia01 * this._transform._rotation01 + this._invInertia02 * this._transform._rotation02; __tmp__012 = this._invInertia00 * this._transform._rotation10 + this._invInertia01 * this._transform._rotation11 + this._invInertia02 * this._transform._rotation12; __tmp__022 = this._invInertia00 * this._transform._rotation20 + this._invInertia01 * this._transform._rotation21 + this._invInertia02 * this._transform._rotation22; __tmp__102 = this._invInertia10 * this._transform._rotation00 + this._invInertia11 * this._transform._rotation01 + this._invInertia12 * this._transform._rotation02; __tmp__112 = this._invInertia10 * this._transform._rotation10 + this._invInertia11 * this._transform._rotation11 + this._invInertia12 * this._transform._rotation12; __tmp__122 = this._invInertia10 * this._transform._rotation20 + this._invInertia11 * this._transform._rotation21 + this._invInertia12 * this._transform._rotation22; __tmp__202 = this._invInertia20 * this._transform._rotation00 + this._invInertia21 * this._transform._rotation01 + this._invInertia22 * this._transform._rotation02; __tmp__212 = this._invInertia20 * this._transform._rotation10 + this._invInertia21 * this._transform._rotation11 + this._invInertia22 * this._transform._rotation12; __tmp__222 = this._invInertia20 * this._transform._rotation20 + this._invInertia21 * this._transform._rotation21 + this._invInertia22 * this._transform._rotation22; this._invInertia00 = __tmp__002; this._invInertia01 = __tmp__012; this._invInertia02 = __tmp__022; this._invInertia10 = __tmp__102; this._invInertia11 = __tmp__112; this._invInertia12 = __tmp__122; this._invInertia20 = __tmp__202; this._invInertia21 = __tmp__212; this._invInertia22 = __tmp__222; this._invInertia00 *= this._rotFactor.x; this._invInertia01 *= this._rotFactor.x; this._invInertia02 *= this._rotFactor.x; this._invInertia10 *= this._rotFactor.y; this._invInertia11 *= this._rotFactor.y; this._invInertia12 *= this._rotFactor.y; this._invInertia20 *= this._rotFactor.z; this._invInertia21 *= this._rotFactor.z; this._invInertia22 *= this._rotFactor.z; var dst = this._ptransform; var src = this._transform; dst._positionX = src._positionX; dst._positionY = src._positionY; dst._positionZ = src._positionZ; dst._rotation00 = src._rotation00; dst._rotation01 = src._rotation01; dst._rotation02 = src._rotation02; dst._rotation10 = src._rotation10; dst._rotation11 = src._rotation11; dst._rotation12 = src._rotation12; dst._rotation20 = src._rotation20; dst._rotation21 = src._rotation21; dst._rotation22 = src._rotation22; var s = this._shapeList; while(s != null) { var n = s._next; var dst1 = s._ptransform; var src1 = s._localTransform; var src2 = this._ptransform; var __tmp__003; var __tmp__013; var __tmp__023; var __tmp__103; var __tmp__113; var __tmp__123; var __tmp__203; var __tmp__213; var __tmp__223; __tmp__003 = src2._rotation00 * src1._rotation00 + src2._rotation01 * src1._rotation10 + src2._rotation02 * src1._rotation20; __tmp__013 = src2._rotation00 * src1._rotation01 + src2._rotation01 * src1._rotation11 + src2._rotation02 * src1._rotation21; __tmp__023 = src2._rotation00 * src1._rotation02 + src2._rotation01 * src1._rotation12 + src2._rotation02 * src1._rotation22; __tmp__103 = src2._rotation10 * src1._rotation00 + src2._rotation11 * src1._rotation10 + src2._rotation12 * src1._rotation20; __tmp__113 = src2._rotation10 * src1._rotation01 + src2._rotation11 * src1._rotation11 + src2._rotation12 * src1._rotation21; __tmp__123 = src2._rotation10 * src1._rotation02 + src2._rotation11 * src1._rotation12 + src2._rotation12 * src1._rotation22; __tmp__203 = src2._rotation20 * src1._rotation00 + src2._rotation21 * src1._rotation10 + src2._rotation22 * src1._rotation20; __tmp__213 = src2._rotation20 * src1._rotation01 + src2._rotation21 * src1._rotation11 + src2._rotation22 * src1._rotation21; __tmp__223 = src2._rotation20 * src1._rotation02 + src2._rotation21 * src1._rotation12 + src2._rotation22 * src1._rotation22; dst1._rotation00 = __tmp__003; dst1._rotation01 = __tmp__013; dst1._rotation02 = __tmp__023; dst1._rotation10 = __tmp__103; dst1._rotation11 = __tmp__113; dst1._rotation12 = __tmp__123; dst1._rotation20 = __tmp__203; dst1._rotation21 = __tmp__213; dst1._rotation22 = __tmp__223; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = src2._rotation00 * src1._positionX + src2._rotation01 * src1._positionY + src2._rotation02 * src1._positionZ; __tmp__Y = src2._rotation10 * src1._positionX + src2._rotation11 * src1._positionY + src2._rotation12 * src1._positionZ; __tmp__Z = src2._rotation20 * src1._positionX + src2._rotation21 * src1._positionY + src2._rotation22 * src1._positionZ; dst1._positionX = __tmp__X; dst1._positionY = __tmp__Y; dst1._positionZ = __tmp__Z; dst1._positionX += src2._positionX; dst1._positionY += src2._positionY; dst1._positionZ += src2._positionZ; var dst2 = s._transform; var src11 = s._localTransform; var src21 = this._transform; var __tmp__004; var __tmp__014; var __tmp__024; var __tmp__104; var __tmp__114; var __tmp__124; var __tmp__204; var __tmp__214; var __tmp__224; __tmp__004 = src21._rotation00 * src11._rotation00 + src21._rotation01 * src11._rotation10 + src21._rotation02 * src11._rotation20; __tmp__014 = src21._rotation00 * src11._rotation01 + src21._rotation01 * src11._rotation11 + src21._rotation02 * src11._rotation21; __tmp__024 = src21._rotation00 * src11._rotation02 + src21._rotation01 * src11._rotation12 + src21._rotation02 * src11._rotation22; __tmp__104 = src21._rotation10 * src11._rotation00 + src21._rotation11 * src11._rotation10 + src21._rotation12 * src11._rotation20; __tmp__114 = src21._rotation10 * src11._rotation01 + src21._rotation11 * src11._rotation11 + src21._rotation12 * src11._rotation21; __tmp__124 = src21._rotation10 * src11._rotation02 + src21._rotation11 * src11._rotation12 + src21._rotation12 * src11._rotation22; __tmp__204 = src21._rotation20 * src11._rotation00 + src21._rotation21 * src11._rotation10 + src21._rotation22 * src11._rotation20; __tmp__214 = src21._rotation20 * src11._rotation01 + src21._rotation21 * src11._rotation11 + src21._rotation22 * src11._rotation21; __tmp__224 = src21._rotation20 * src11._rotation02 + src21._rotation21 * src11._rotation12 + src21._rotation22 * src11._rotation22; dst2._rotation00 = __tmp__004; dst2._rotation01 = __tmp__014; dst2._rotation02 = __tmp__024; dst2._rotation10 = __tmp__104; dst2._rotation11 = __tmp__114; dst2._rotation12 = __tmp__124; dst2._rotation20 = __tmp__204; dst2._rotation21 = __tmp__214; dst2._rotation22 = __tmp__224; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = src21._rotation00 * src11._positionX + src21._rotation01 * src11._positionY + src21._rotation02 * src11._positionZ; __tmp__Y1 = src21._rotation10 * src11._positionX + src21._rotation11 * src11._positionY + src21._rotation12 * src11._positionZ; __tmp__Z1 = src21._rotation20 * src11._positionX + src21._rotation21 * src11._positionY + src21._rotation22 * src11._positionZ; dst2._positionX = __tmp__X1; dst2._positionY = __tmp__Y1; dst2._positionZ = __tmp__Z1; dst2._positionX += src21._positionX; dst2._positionY += src21._positionY; dst2._positionZ += src21._positionZ; var min; var minX; var minY; var minZ; var max; var maxX; var maxY; var maxZ; s._geom._computeAabb(s._aabb,s._ptransform); minX = s._aabb._minX; minY = s._aabb._minY; minZ = s._aabb._minZ; maxX = s._aabb._maxX; maxY = s._aabb._maxY; maxZ = s._aabb._maxZ; s._geom._computeAabb(s._aabb,s._transform); s._aabb._minX = minX < s._aabb._minX ? minX : s._aabb._minX; s._aabb._minY = minY < s._aabb._minY ? minY : s._aabb._minY; s._aabb._minZ = minZ < s._aabb._minZ ? minZ : s._aabb._minZ; s._aabb._maxX = maxX > s._aabb._maxX ? maxX : s._aabb._maxX; s._aabb._maxY = maxY > s._aabb._maxY ? maxY : s._aabb._maxY; s._aabb._maxZ = maxZ > s._aabb._maxZ ? maxZ : s._aabb._maxZ; if(s._proxy != null) { var d; var dX; var dY; var dZ; dX = s._transform._positionX - s._ptransform._positionX; dY = s._transform._positionY - s._ptransform._positionY; dZ = s._transform._positionZ - s._ptransform._positionZ; var v1 = s.displacement; v1.x = dX; v1.y = dY; v1.z = dZ; s._rigidBody._world._broadPhase.moveProxy(s._proxy,s._aabb,s.displacement); } s = n; } this._sleeping = false; this._sleepTime = 0; } getOrientation() { var q = new oimo.common.Quat(); var iq; var iqX; var iqY; var iqZ; var iqW; var e00 = this._transform._rotation00; var e11 = this._transform._rotation11; var e22 = this._transform._rotation22; var t = e00 + e11 + e22; var s; if(t > 0) { s = Math.sqrt(t + 1); iqW = 0.5 * s; s = 0.5 / s; iqX = (this._transform._rotation21 - this._transform._rotation12) * s; iqY = (this._transform._rotation02 - this._transform._rotation20) * s; iqZ = (this._transform._rotation10 - this._transform._rotation01) * s; } else if(e00 > e11) { if(e00 > e22) { s = Math.sqrt(e00 - e11 - e22 + 1); iqX = 0.5 * s; s = 0.5 / s; iqY = (this._transform._rotation01 + this._transform._rotation10) * s; iqZ = (this._transform._rotation02 + this._transform._rotation20) * s; iqW = (this._transform._rotation21 - this._transform._rotation12) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); iqZ = 0.5 * s; s = 0.5 / s; iqX = (this._transform._rotation02 + this._transform._rotation20) * s; iqY = (this._transform._rotation12 + this._transform._rotation21) * s; iqW = (this._transform._rotation10 - this._transform._rotation01) * s; } } else if(e11 > e22) { s = Math.sqrt(e11 - e22 - e00 + 1); iqY = 0.5 * s; s = 0.5 / s; iqX = (this._transform._rotation01 + this._transform._rotation10) * s; iqZ = (this._transform._rotation12 + this._transform._rotation21) * s; iqW = (this._transform._rotation02 - this._transform._rotation20) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); iqZ = 0.5 * s; s = 0.5 / s; iqX = (this._transform._rotation02 + this._transform._rotation20) * s; iqY = (this._transform._rotation12 + this._transform._rotation21) * s; iqW = (this._transform._rotation10 - this._transform._rotation01) * s; } var q1 = q; q1.x = iqX; q1.y = iqY; q1.z = iqZ; q1.w = iqW; return q; } getOrientationTo(orientation) { var iq; var iqX; var iqY; var iqZ; var iqW; var e00 = this._transform._rotation00; var e11 = this._transform._rotation11; var e22 = this._transform._rotation22; var t = e00 + e11 + e22; var s; if(t > 0) { s = Math.sqrt(t + 1); iqW = 0.5 * s; s = 0.5 / s; iqX = (this._transform._rotation21 - this._transform._rotation12) * s; iqY = (this._transform._rotation02 - this._transform._rotation20) * s; iqZ = (this._transform._rotation10 - this._transform._rotation01) * s; } else if(e00 > e11) { if(e00 > e22) { s = Math.sqrt(e00 - e11 - e22 + 1); iqX = 0.5 * s; s = 0.5 / s; iqY = (this._transform._rotation01 + this._transform._rotation10) * s; iqZ = (this._transform._rotation02 + this._transform._rotation20) * s; iqW = (this._transform._rotation21 - this._transform._rotation12) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); iqZ = 0.5 * s; s = 0.5 / s; iqX = (this._transform._rotation02 + this._transform._rotation20) * s; iqY = (this._transform._rotation12 + this._transform._rotation21) * s; iqW = (this._transform._rotation10 - this._transform._rotation01) * s; } } else if(e11 > e22) { s = Math.sqrt(e11 - e22 - e00 + 1); iqY = 0.5 * s; s = 0.5 / s; iqX = (this._transform._rotation01 + this._transform._rotation10) * s; iqZ = (this._transform._rotation12 + this._transform._rotation21) * s; iqW = (this._transform._rotation02 - this._transform._rotation20) * s; } else { s = Math.sqrt(e22 - e00 - e11 + 1); iqZ = 0.5 * s; s = 0.5 / s; iqX = (this._transform._rotation02 + this._transform._rotation20) * s; iqY = (this._transform._rotation12 + this._transform._rotation21) * s; iqW = (this._transform._rotation10 - this._transform._rotation01) * s; } var q = orientation; q.x = iqX; q.y = iqY; q.z = iqZ; q.w = iqW; } setOrientation(quaternion) { var q; var qX; var qY; var qZ; var qW; var q1 = quaternion; qX = q1.x; qY = q1.y; qZ = q1.z; qW = q1.w; var x = qX; var y = qY; var z = qZ; var w = qW; var x2 = 2 * x; var y2 = 2 * y; var z2 = 2 * z; var xx = x * x2; var yy = y * y2; var zz = z * z2; var xy = x * y2; var yz = y * z2; var xz = x * z2; var wx = w * x2; var wy = w * y2; var wz = w * z2; this._transform._rotation00 = 1 - yy - zz; this._transform._rotation01 = xy - wz; this._transform._rotation02 = xz + wy; this._transform._rotation10 = xy + wz; this._transform._rotation11 = 1 - xx - zz; this._transform._rotation12 = yz - wx; this._transform._rotation20 = xz - wy; this._transform._rotation21 = yz + wx; this._transform._rotation22 = 1 - xx - yy; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = this._transform._rotation00 * this._invLocalInertia00 + this._transform._rotation01 * this._invLocalInertia10 + this._transform._rotation02 * this._invLocalInertia20; __tmp__01 = this._transform._rotation00 * this._invLocalInertia01 + this._transform._rotation01 * this._invLocalInertia11 + this._transform._rotation02 * this._invLocalInertia21; __tmp__02 = this._transform._rotation00 * this._invLocalInertia02 + this._transform._rotation01 * this._invLocalInertia12 + this._transform._rotation02 * this._invLocalInertia22; __tmp__10 = this._transform._rotation10 * this._invLocalInertia00 + this._transform._rotation11 * this._invLocalInertia10 + this._transform._rotation12 * this._invLocalInertia20; __tmp__11 = this._transform._rotation10 * this._invLocalInertia01 + this._transform._rotation11 * this._invLocalInertia11 + this._transform._rotation12 * this._invLocalInertia21; __tmp__12 = this._transform._rotation10 * this._invLocalInertia02 + this._transform._rotation11 * this._invLocalInertia12 + this._transform._rotation12 * this._invLocalInertia22; __tmp__20 = this._transform._rotation20 * this._invLocalInertia00 + this._transform._rotation21 * this._invLocalInertia10 + this._transform._rotation22 * this._invLocalInertia20; __tmp__21 = this._transform._rotation20 * this._invLocalInertia01 + this._transform._rotation21 * this._invLocalInertia11 + this._transform._rotation22 * this._invLocalInertia21; __tmp__22 = this._transform._rotation20 * this._invLocalInertia02 + this._transform._rotation21 * this._invLocalInertia12 + this._transform._rotation22 * this._invLocalInertia22; this._invInertia00 = __tmp__00; this._invInertia01 = __tmp__01; this._invInertia02 = __tmp__02; this._invInertia10 = __tmp__10; this._invInertia11 = __tmp__11; this._invInertia12 = __tmp__12; this._invInertia20 = __tmp__20; this._invInertia21 = __tmp__21; this._invInertia22 = __tmp__22; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = this._invInertia00 * this._transform._rotation00 + this._invInertia01 * this._transform._rotation01 + this._invInertia02 * this._transform._rotation02; __tmp__011 = this._invInertia00 * this._transform._rotation10 + this._invInertia01 * this._transform._rotation11 + this._invInertia02 * this._transform._rotation12; __tmp__021 = this._invInertia00 * this._transform._rotation20 + this._invInertia01 * this._transform._rotation21 + this._invInertia02 * this._transform._rotation22; __tmp__101 = this._invInertia10 * this._transform._rotation00 + this._invInertia11 * this._transform._rotation01 + this._invInertia12 * this._transform._rotation02; __tmp__111 = this._invInertia10 * this._transform._rotation10 + this._invInertia11 * this._transform._rotation11 + this._invInertia12 * this._transform._rotation12; __tmp__121 = this._invInertia10 * this._transform._rotation20 + this._invInertia11 * this._transform._rotation21 + this._invInertia12 * this._transform._rotation22; __tmp__201 = this._invInertia20 * this._transform._rotation00 + this._invInertia21 * this._transform._rotation01 + this._invInertia22 * this._transform._rotation02; __tmp__211 = this._invInertia20 * this._transform._rotation10 + this._invInertia21 * this._transform._rotation11 + this._invInertia22 * this._transform._rotation12; __tmp__221 = this._invInertia20 * this._transform._rotation20 + this._invInertia21 * this._transform._rotation21 + this._invInertia22 * this._transform._rotation22; this._invInertia00 = __tmp__001; this._invInertia01 = __tmp__011; this._invInertia02 = __tmp__021; this._invInertia10 = __tmp__101; this._invInertia11 = __tmp__111; this._invInertia12 = __tmp__121; this._invInertia20 = __tmp__201; this._invInertia21 = __tmp__211; this._invInertia22 = __tmp__221; this._invInertia00 *= this._rotFactor.x; this._invInertia01 *= this._rotFactor.x; this._invInertia02 *= this._rotFactor.x; this._invInertia10 *= this._rotFactor.y; this._invInertia11 *= this._rotFactor.y; this._invInertia12 *= this._rotFactor.y; this._invInertia20 *= this._rotFactor.z; this._invInertia21 *= this._rotFactor.z; this._invInertia22 *= this._rotFactor.z; var dst = this._ptransform; var src = this._transform; dst._positionX = src._positionX; dst._positionY = src._positionY; dst._positionZ = src._positionZ; dst._rotation00 = src._rotation00; dst._rotation01 = src._rotation01; dst._rotation02 = src._rotation02; dst._rotation10 = src._rotation10; dst._rotation11 = src._rotation11; dst._rotation12 = src._rotation12; dst._rotation20 = src._rotation20; dst._rotation21 = src._rotation21; dst._rotation22 = src._rotation22; var s = this._shapeList; while(s != null) { var n = s._next; var dst1 = s._ptransform; var src1 = s._localTransform; var src2 = this._ptransform; var __tmp__002; var __tmp__012; var __tmp__022; var __tmp__102; var __tmp__112; var __tmp__122; var __tmp__202; var __tmp__212; var __tmp__222; __tmp__002 = src2._rotation00 * src1._rotation00 + src2._rotation01 * src1._rotation10 + src2._rotation02 * src1._rotation20; __tmp__012 = src2._rotation00 * src1._rotation01 + src2._rotation01 * src1._rotation11 + src2._rotation02 * src1._rotation21; __tmp__022 = src2._rotation00 * src1._rotation02 + src2._rotation01 * src1._rotation12 + src2._rotation02 * src1._rotation22; __tmp__102 = src2._rotation10 * src1._rotation00 + src2._rotation11 * src1._rotation10 + src2._rotation12 * src1._rotation20; __tmp__112 = src2._rotation10 * src1._rotation01 + src2._rotation11 * src1._rotation11 + src2._rotation12 * src1._rotation21; __tmp__122 = src2._rotation10 * src1._rotation02 + src2._rotation11 * src1._rotation12 + src2._rotation12 * src1._rotation22; __tmp__202 = src2._rotation20 * src1._rotation00 + src2._rotation21 * src1._rotation10 + src2._rotation22 * src1._rotation20; __tmp__212 = src2._rotation20 * src1._rotation01 + src2._rotation21 * src1._rotation11 + src2._rotation22 * src1._rotation21; __tmp__222 = src2._rotation20 * src1._rotation02 + src2._rotation21 * src1._rotation12 + src2._rotation22 * src1._rotation22; dst1._rotation00 = __tmp__002; dst1._rotation01 = __tmp__012; dst1._rotation02 = __tmp__022; dst1._rotation10 = __tmp__102; dst1._rotation11 = __tmp__112; dst1._rotation12 = __tmp__122; dst1._rotation20 = __tmp__202; dst1._rotation21 = __tmp__212; dst1._rotation22 = __tmp__222; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = src2._rotation00 * src1._positionX + src2._rotation01 * src1._positionY + src2._rotation02 * src1._positionZ; __tmp__Y = src2._rotation10 * src1._positionX + src2._rotation11 * src1._positionY + src2._rotation12 * src1._positionZ; __tmp__Z = src2._rotation20 * src1._positionX + src2._rotation21 * src1._positionY + src2._rotation22 * src1._positionZ; dst1._positionX = __tmp__X; dst1._positionY = __tmp__Y; dst1._positionZ = __tmp__Z; dst1._positionX += src2._positionX; dst1._positionY += src2._positionY; dst1._positionZ += src2._positionZ; var dst2 = s._transform; var src11 = s._localTransform; var src21 = this._transform; var __tmp__003; var __tmp__013; var __tmp__023; var __tmp__103; var __tmp__113; var __tmp__123; var __tmp__203; var __tmp__213; var __tmp__223; __tmp__003 = src21._rotation00 * src11._rotation00 + src21._rotation01 * src11._rotation10 + src21._rotation02 * src11._rotation20; __tmp__013 = src21._rotation00 * src11._rotation01 + src21._rotation01 * src11._rotation11 + src21._rotation02 * src11._rotation21; __tmp__023 = src21._rotation00 * src11._rotation02 + src21._rotation01 * src11._rotation12 + src21._rotation02 * src11._rotation22; __tmp__103 = src21._rotation10 * src11._rotation00 + src21._rotation11 * src11._rotation10 + src21._rotation12 * src11._rotation20; __tmp__113 = src21._rotation10 * src11._rotation01 + src21._rotation11 * src11._rotation11 + src21._rotation12 * src11._rotation21; __tmp__123 = src21._rotation10 * src11._rotation02 + src21._rotation11 * src11._rotation12 + src21._rotation12 * src11._rotation22; __tmp__203 = src21._rotation20 * src11._rotation00 + src21._rotation21 * src11._rotation10 + src21._rotation22 * src11._rotation20; __tmp__213 = src21._rotation20 * src11._rotation01 + src21._rotation21 * src11._rotation11 + src21._rotation22 * src11._rotation21; __tmp__223 = src21._rotation20 * src11._rotation02 + src21._rotation21 * src11._rotation12 + src21._rotation22 * src11._rotation22; dst2._rotation00 = __tmp__003; dst2._rotation01 = __tmp__013; dst2._rotation02 = __tmp__023; dst2._rotation10 = __tmp__103; dst2._rotation11 = __tmp__113; dst2._rotation12 = __tmp__123; dst2._rotation20 = __tmp__203; dst2._rotation21 = __tmp__213; dst2._rotation22 = __tmp__223; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = src21._rotation00 * src11._positionX + src21._rotation01 * src11._positionY + src21._rotation02 * src11._positionZ; __tmp__Y1 = src21._rotation10 * src11._positionX + src21._rotation11 * src11._positionY + src21._rotation12 * src11._positionZ; __tmp__Z1 = src21._rotation20 * src11._positionX + src21._rotation21 * src11._positionY + src21._rotation22 * src11._positionZ; dst2._positionX = __tmp__X1; dst2._positionY = __tmp__Y1; dst2._positionZ = __tmp__Z1; dst2._positionX += src21._positionX; dst2._positionY += src21._positionY; dst2._positionZ += src21._positionZ; var min; var minX; var minY; var minZ; var max; var maxX; var maxY; var maxZ; s._geom._computeAabb(s._aabb,s._ptransform); minX = s._aabb._minX; minY = s._aabb._minY; minZ = s._aabb._minZ; maxX = s._aabb._maxX; maxY = s._aabb._maxY; maxZ = s._aabb._maxZ; s._geom._computeAabb(s._aabb,s._transform); s._aabb._minX = minX < s._aabb._minX ? minX : s._aabb._minX; s._aabb._minY = minY < s._aabb._minY ? minY : s._aabb._minY; s._aabb._minZ = minZ < s._aabb._minZ ? minZ : s._aabb._minZ; s._aabb._maxX = maxX > s._aabb._maxX ? maxX : s._aabb._maxX; s._aabb._maxY = maxY > s._aabb._maxY ? maxY : s._aabb._maxY; s._aabb._maxZ = maxZ > s._aabb._maxZ ? maxZ : s._aabb._maxZ; if(s._proxy != null) { var d; var dX; var dY; var dZ; dX = s._transform._positionX - s._ptransform._positionX; dY = s._transform._positionY - s._ptransform._positionY; dZ = s._transform._positionZ - s._ptransform._positionZ; var v = s.displacement; v.x = dX; v.y = dY; v.z = dZ; s._rigidBody._world._broadPhase.moveProxy(s._proxy,s._aabb,s.displacement); } s = n; } this._sleeping = false; this._sleepTime = 0; } getTransform() { var _this = this._transform; var tf = new oimo.common.Transform(); tf._positionX = _this._positionX; tf._positionY = _this._positionY; tf._positionZ = _this._positionZ; tf._rotation00 = _this._rotation00; tf._rotation01 = _this._rotation01; tf._rotation02 = _this._rotation02; tf._rotation10 = _this._rotation10; tf._rotation11 = _this._rotation11; tf._rotation12 = _this._rotation12; tf._rotation20 = _this._rotation20; tf._rotation21 = _this._rotation21; tf._rotation22 = _this._rotation22; return tf; } getTransformTo(transform) { var transform1 = this._transform; transform._positionX = transform1._positionX; transform._positionY = transform1._positionY; transform._positionZ = transform1._positionZ; transform._rotation00 = transform1._rotation00; transform._rotation01 = transform1._rotation01; transform._rotation02 = transform1._rotation02; transform._rotation10 = transform1._rotation10; transform._rotation11 = transform1._rotation11; transform._rotation12 = transform1._rotation12; transform._rotation20 = transform1._rotation20; transform._rotation21 = transform1._rotation21; transform._rotation22 = transform1._rotation22; } setTransform(transform) { this._transform._positionX = transform._positionX; this._transform._positionY = transform._positionY; this._transform._positionZ = transform._positionZ; this._transform._rotation00 = transform._rotation00; this._transform._rotation01 = transform._rotation01; this._transform._rotation02 = transform._rotation02; this._transform._rotation10 = transform._rotation10; this._transform._rotation11 = transform._rotation11; this._transform._rotation12 = transform._rotation12; this._transform._rotation20 = transform._rotation20; this._transform._rotation21 = transform._rotation21; this._transform._rotation22 = transform._rotation22; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = this._transform._rotation00 * this._invLocalInertia00 + this._transform._rotation01 * this._invLocalInertia10 + this._transform._rotation02 * this._invLocalInertia20; __tmp__01 = this._transform._rotation00 * this._invLocalInertia01 + this._transform._rotation01 * this._invLocalInertia11 + this._transform._rotation02 * this._invLocalInertia21; __tmp__02 = this._transform._rotation00 * this._invLocalInertia02 + this._transform._rotation01 * this._invLocalInertia12 + this._transform._rotation02 * this._invLocalInertia22; __tmp__10 = this._transform._rotation10 * this._invLocalInertia00 + this._transform._rotation11 * this._invLocalInertia10 + this._transform._rotation12 * this._invLocalInertia20; __tmp__11 = this._transform._rotation10 * this._invLocalInertia01 + this._transform._rotation11 * this._invLocalInertia11 + this._transform._rotation12 * this._invLocalInertia21; __tmp__12 = this._transform._rotation10 * this._invLocalInertia02 + this._transform._rotation11 * this._invLocalInertia12 + this._transform._rotation12 * this._invLocalInertia22; __tmp__20 = this._transform._rotation20 * this._invLocalInertia00 + this._transform._rotation21 * this._invLocalInertia10 + this._transform._rotation22 * this._invLocalInertia20; __tmp__21 = this._transform._rotation20 * this._invLocalInertia01 + this._transform._rotation21 * this._invLocalInertia11 + this._transform._rotation22 * this._invLocalInertia21; __tmp__22 = this._transform._rotation20 * this._invLocalInertia02 + this._transform._rotation21 * this._invLocalInertia12 + this._transform._rotation22 * this._invLocalInertia22; this._invInertia00 = __tmp__00; this._invInertia01 = __tmp__01; this._invInertia02 = __tmp__02; this._invInertia10 = __tmp__10; this._invInertia11 = __tmp__11; this._invInertia12 = __tmp__12; this._invInertia20 = __tmp__20; this._invInertia21 = __tmp__21; this._invInertia22 = __tmp__22; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = this._invInertia00 * this._transform._rotation00 + this._invInertia01 * this._transform._rotation01 + this._invInertia02 * this._transform._rotation02; __tmp__011 = this._invInertia00 * this._transform._rotation10 + this._invInertia01 * this._transform._rotation11 + this._invInertia02 * this._transform._rotation12; __tmp__021 = this._invInertia00 * this._transform._rotation20 + this._invInertia01 * this._transform._rotation21 + this._invInertia02 * this._transform._rotation22; __tmp__101 = this._invInertia10 * this._transform._rotation00 + this._invInertia11 * this._transform._rotation01 + this._invInertia12 * this._transform._rotation02; __tmp__111 = this._invInertia10 * this._transform._rotation10 + this._invInertia11 * this._transform._rotation11 + this._invInertia12 * this._transform._rotation12; __tmp__121 = this._invInertia10 * this._transform._rotation20 + this._invInertia11 * this._transform._rotation21 + this._invInertia12 * this._transform._rotation22; __tmp__201 = this._invInertia20 * this._transform._rotation00 + this._invInertia21 * this._transform._rotation01 + this._invInertia22 * this._transform._rotation02; __tmp__211 = this._invInertia20 * this._transform._rotation10 + this._invInertia21 * this._transform._rotation11 + this._invInertia22 * this._transform._rotation12; __tmp__221 = this._invInertia20 * this._transform._rotation20 + this._invInertia21 * this._transform._rotation21 + this._invInertia22 * this._transform._rotation22; this._invInertia00 = __tmp__001; this._invInertia01 = __tmp__011; this._invInertia02 = __tmp__021; this._invInertia10 = __tmp__101; this._invInertia11 = __tmp__111; this._invInertia12 = __tmp__121; this._invInertia20 = __tmp__201; this._invInertia21 = __tmp__211; this._invInertia22 = __tmp__221; this._invInertia00 *= this._rotFactor.x; this._invInertia01 *= this._rotFactor.x; this._invInertia02 *= this._rotFactor.x; this._invInertia10 *= this._rotFactor.y; this._invInertia11 *= this._rotFactor.y; this._invInertia12 *= this._rotFactor.y; this._invInertia20 *= this._rotFactor.z; this._invInertia21 *= this._rotFactor.z; this._invInertia22 *= this._rotFactor.z; var dst = this._ptransform; var src = this._transform; dst._positionX = src._positionX; dst._positionY = src._positionY; dst._positionZ = src._positionZ; dst._rotation00 = src._rotation00; dst._rotation01 = src._rotation01; dst._rotation02 = src._rotation02; dst._rotation10 = src._rotation10; dst._rotation11 = src._rotation11; dst._rotation12 = src._rotation12; dst._rotation20 = src._rotation20; dst._rotation21 = src._rotation21; dst._rotation22 = src._rotation22; var s = this._shapeList; while(s != null) { var n = s._next; var dst1 = s._ptransform; var src1 = s._localTransform; var src2 = this._ptransform; var __tmp__002; var __tmp__012; var __tmp__022; var __tmp__102; var __tmp__112; var __tmp__122; var __tmp__202; var __tmp__212; var __tmp__222; __tmp__002 = src2._rotation00 * src1._rotation00 + src2._rotation01 * src1._rotation10 + src2._rotation02 * src1._rotation20; __tmp__012 = src2._rotation00 * src1._rotation01 + src2._rotation01 * src1._rotation11 + src2._rotation02 * src1._rotation21; __tmp__022 = src2._rotation00 * src1._rotation02 + src2._rotation01 * src1._rotation12 + src2._rotation02 * src1._rotation22; __tmp__102 = src2._rotation10 * src1._rotation00 + src2._rotation11 * src1._rotation10 + src2._rotation12 * src1._rotation20; __tmp__112 = src2._rotation10 * src1._rotation01 + src2._rotation11 * src1._rotation11 + src2._rotation12 * src1._rotation21; __tmp__122 = src2._rotation10 * src1._rotation02 + src2._rotation11 * src1._rotation12 + src2._rotation12 * src1._rotation22; __tmp__202 = src2._rotation20 * src1._rotation00 + src2._rotation21 * src1._rotation10 + src2._rotation22 * src1._rotation20; __tmp__212 = src2._rotation20 * src1._rotation01 + src2._rotation21 * src1._rotation11 + src2._rotation22 * src1._rotation21; __tmp__222 = src2._rotation20 * src1._rotation02 + src2._rotation21 * src1._rotation12 + src2._rotation22 * src1._rotation22; dst1._rotation00 = __tmp__002; dst1._rotation01 = __tmp__012; dst1._rotation02 = __tmp__022; dst1._rotation10 = __tmp__102; dst1._rotation11 = __tmp__112; dst1._rotation12 = __tmp__122; dst1._rotation20 = __tmp__202; dst1._rotation21 = __tmp__212; dst1._rotation22 = __tmp__222; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = src2._rotation00 * src1._positionX + src2._rotation01 * src1._positionY + src2._rotation02 * src1._positionZ; __tmp__Y = src2._rotation10 * src1._positionX + src2._rotation11 * src1._positionY + src2._rotation12 * src1._positionZ; __tmp__Z = src2._rotation20 * src1._positionX + src2._rotation21 * src1._positionY + src2._rotation22 * src1._positionZ; dst1._positionX = __tmp__X; dst1._positionY = __tmp__Y; dst1._positionZ = __tmp__Z; dst1._positionX += src2._positionX; dst1._positionY += src2._positionY; dst1._positionZ += src2._positionZ; var dst2 = s._transform; var src11 = s._localTransform; var src21 = this._transform; var __tmp__003; var __tmp__013; var __tmp__023; var __tmp__103; var __tmp__113; var __tmp__123; var __tmp__203; var __tmp__213; var __tmp__223; __tmp__003 = src21._rotation00 * src11._rotation00 + src21._rotation01 * src11._rotation10 + src21._rotation02 * src11._rotation20; __tmp__013 = src21._rotation00 * src11._rotation01 + src21._rotation01 * src11._rotation11 + src21._rotation02 * src11._rotation21; __tmp__023 = src21._rotation00 * src11._rotation02 + src21._rotation01 * src11._rotation12 + src21._rotation02 * src11._rotation22; __tmp__103 = src21._rotation10 * src11._rotation00 + src21._rotation11 * src11._rotation10 + src21._rotation12 * src11._rotation20; __tmp__113 = src21._rotation10 * src11._rotation01 + src21._rotation11 * src11._rotation11 + src21._rotation12 * src11._rotation21; __tmp__123 = src21._rotation10 * src11._rotation02 + src21._rotation11 * src11._rotation12 + src21._rotation12 * src11._rotation22; __tmp__203 = src21._rotation20 * src11._rotation00 + src21._rotation21 * src11._rotation10 + src21._rotation22 * src11._rotation20; __tmp__213 = src21._rotation20 * src11._rotation01 + src21._rotation21 * src11._rotation11 + src21._rotation22 * src11._rotation21; __tmp__223 = src21._rotation20 * src11._rotation02 + src21._rotation21 * src11._rotation12 + src21._rotation22 * src11._rotation22; dst2._rotation00 = __tmp__003; dst2._rotation01 = __tmp__013; dst2._rotation02 = __tmp__023; dst2._rotation10 = __tmp__103; dst2._rotation11 = __tmp__113; dst2._rotation12 = __tmp__123; dst2._rotation20 = __tmp__203; dst2._rotation21 = __tmp__213; dst2._rotation22 = __tmp__223; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = src21._rotation00 * src11._positionX + src21._rotation01 * src11._positionY + src21._rotation02 * src11._positionZ; __tmp__Y1 = src21._rotation10 * src11._positionX + src21._rotation11 * src11._positionY + src21._rotation12 * src11._positionZ; __tmp__Z1 = src21._rotation20 * src11._positionX + src21._rotation21 * src11._positionY + src21._rotation22 * src11._positionZ; dst2._positionX = __tmp__X1; dst2._positionY = __tmp__Y1; dst2._positionZ = __tmp__Z1; dst2._positionX += src21._positionX; dst2._positionY += src21._positionY; dst2._positionZ += src21._positionZ; var min; var minX; var minY; var minZ; var max; var maxX; var maxY; var maxZ; s._geom._computeAabb(s._aabb,s._ptransform); minX = s._aabb._minX; minY = s._aabb._minY; minZ = s._aabb._minZ; maxX = s._aabb._maxX; maxY = s._aabb._maxY; maxZ = s._aabb._maxZ; s._geom._computeAabb(s._aabb,s._transform); s._aabb._minX = minX < s._aabb._minX ? minX : s._aabb._minX; s._aabb._minY = minY < s._aabb._minY ? minY : s._aabb._minY; s._aabb._minZ = minZ < s._aabb._minZ ? minZ : s._aabb._minZ; s._aabb._maxX = maxX > s._aabb._maxX ? maxX : s._aabb._maxX; s._aabb._maxY = maxY > s._aabb._maxY ? maxY : s._aabb._maxY; s._aabb._maxZ = maxZ > s._aabb._maxZ ? maxZ : s._aabb._maxZ; if(s._proxy != null) { var d; var dX; var dY; var dZ; dX = s._transform._positionX - s._ptransform._positionX; dY = s._transform._positionY - s._ptransform._positionY; dZ = s._transform._positionZ - s._ptransform._positionZ; var v = s.displacement; v.x = dX; v.y = dY; v.z = dZ; s._rigidBody._world._broadPhase.moveProxy(s._proxy,s._aabb,s.displacement); } s = n; } this._sleeping = false; this._sleepTime = 0; } getMass() { return this._mass; } getLocalInertia() { var m = new oimo.common.Mat3(); var m1 = m; m1.e00 = this._localInertia00; m1.e01 = this._localInertia01; m1.e02 = this._localInertia02; m1.e10 = this._localInertia10; m1.e11 = this._localInertia11; m1.e12 = this._localInertia12; m1.e20 = this._localInertia20; m1.e21 = this._localInertia21; m1.e22 = this._localInertia22; return m; } getLocalInertiaTo(inertia) { var m = inertia; m.e00 = this._localInertia00; m.e01 = this._localInertia01; m.e02 = this._localInertia02; m.e10 = this._localInertia10; m.e11 = this._localInertia11; m.e12 = this._localInertia12; m.e20 = this._localInertia20; m.e21 = this._localInertia21; m.e22 = this._localInertia22; } getMassData() { var md = new oimo.dynamics.rigidbody.MassData(); md.mass = this._mass; var m = md.localInertia; m.e00 = this._localInertia00; m.e01 = this._localInertia01; m.e02 = this._localInertia02; m.e10 = this._localInertia10; m.e11 = this._localInertia11; m.e12 = this._localInertia12; m.e20 = this._localInertia20; m.e21 = this._localInertia21; m.e22 = this._localInertia22; return md; } getMassDataTo(massData) { massData.mass = this._mass; var m = massData.localInertia; m.e00 = this._localInertia00; m.e01 = this._localInertia01; m.e02 = this._localInertia02; m.e10 = this._localInertia10; m.e11 = this._localInertia11; m.e12 = this._localInertia12; m.e20 = this._localInertia20; m.e21 = this._localInertia21; m.e22 = this._localInertia22; } setMassData(massData) { this._mass = massData.mass; var m = massData.localInertia; this._localInertia00 = m.e00; this._localInertia01 = m.e01; this._localInertia02 = m.e02; this._localInertia10 = m.e10; this._localInertia11 = m.e11; this._localInertia12 = m.e12; this._localInertia20 = m.e20; this._localInertia21 = m.e21; this._localInertia22 = m.e22; var d00 = this._localInertia11 * this._localInertia22 - this._localInertia12 * this._localInertia21; var d01 = this._localInertia10 * this._localInertia22 - this._localInertia12 * this._localInertia20; var d02 = this._localInertia10 * this._localInertia21 - this._localInertia11 * this._localInertia20; var det = this._localInertia00 * d00 - this._localInertia01 * d01 + this._localInertia02 * d02; if(this._mass > 0 && det > 0 && this._type == 0) { this._invMass = 1 / this._mass; var d001 = this._localInertia11 * this._localInertia22 - this._localInertia12 * this._localInertia21; var d011 = this._localInertia10 * this._localInertia22 - this._localInertia12 * this._localInertia20; var d021 = this._localInertia10 * this._localInertia21 - this._localInertia11 * this._localInertia20; var d10 = this._localInertia01 * this._localInertia22 - this._localInertia02 * this._localInertia21; var d11 = this._localInertia00 * this._localInertia22 - this._localInertia02 * this._localInertia20; var d12 = this._localInertia00 * this._localInertia21 - this._localInertia01 * this._localInertia20; var d20 = this._localInertia01 * this._localInertia12 - this._localInertia02 * this._localInertia11; var d21 = this._localInertia00 * this._localInertia12 - this._localInertia02 * this._localInertia10; var d22 = this._localInertia00 * this._localInertia11 - this._localInertia01 * this._localInertia10; var d = this._localInertia00 * d001 - this._localInertia01 * d011 + this._localInertia02 * d021; if(d < -1e-32 || d > 1e-32) { d = 1 / d; } this._invLocalInertia00 = d001 * d; this._invLocalInertia01 = -d10 * d; this._invLocalInertia02 = d20 * d; this._invLocalInertia10 = -d011 * d; this._invLocalInertia11 = d11 * d; this._invLocalInertia12 = -d21 * d; this._invLocalInertia20 = d021 * d; this._invLocalInertia21 = -d12 * d; this._invLocalInertia22 = d22 * d; this._invLocalInertiaWithoutRotFactor00 = this._invLocalInertia00; this._invLocalInertiaWithoutRotFactor01 = this._invLocalInertia01; this._invLocalInertiaWithoutRotFactor02 = this._invLocalInertia02; this._invLocalInertiaWithoutRotFactor10 = this._invLocalInertia10; this._invLocalInertiaWithoutRotFactor11 = this._invLocalInertia11; this._invLocalInertiaWithoutRotFactor12 = this._invLocalInertia12; this._invLocalInertiaWithoutRotFactor20 = this._invLocalInertia20; this._invLocalInertiaWithoutRotFactor21 = this._invLocalInertia21; this._invLocalInertiaWithoutRotFactor22 = this._invLocalInertia22; this._invLocalInertia00 = this._invLocalInertiaWithoutRotFactor00 * this._rotFactor.x; this._invLocalInertia01 = this._invLocalInertiaWithoutRotFactor01 * this._rotFactor.x; this._invLocalInertia02 = this._invLocalInertiaWithoutRotFactor02 * this._rotFactor.x; this._invLocalInertia10 = this._invLocalInertiaWithoutRotFactor10 * this._rotFactor.y; this._invLocalInertia11 = this._invLocalInertiaWithoutRotFactor11 * this._rotFactor.y; this._invLocalInertia12 = this._invLocalInertiaWithoutRotFactor12 * this._rotFactor.y; this._invLocalInertia20 = this._invLocalInertiaWithoutRotFactor20 * this._rotFactor.z; this._invLocalInertia21 = this._invLocalInertiaWithoutRotFactor21 * this._rotFactor.z; this._invLocalInertia22 = this._invLocalInertiaWithoutRotFactor22 * this._rotFactor.z; } else { this._invMass = 0; this._invLocalInertia00 = 0; this._invLocalInertia01 = 0; this._invLocalInertia02 = 0; this._invLocalInertia10 = 0; this._invLocalInertia11 = 0; this._invLocalInertia12 = 0; this._invLocalInertia20 = 0; this._invLocalInertia21 = 0; this._invLocalInertia22 = 0; this._invLocalInertiaWithoutRotFactor00 = 0; this._invLocalInertiaWithoutRotFactor01 = 0; this._invLocalInertiaWithoutRotFactor02 = 0; this._invLocalInertiaWithoutRotFactor10 = 0; this._invLocalInertiaWithoutRotFactor11 = 0; this._invLocalInertiaWithoutRotFactor12 = 0; this._invLocalInertiaWithoutRotFactor20 = 0; this._invLocalInertiaWithoutRotFactor21 = 0; this._invLocalInertiaWithoutRotFactor22 = 0; if(this._type == 0) { this._type = 1; } } var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = this._transform._rotation00 * this._invLocalInertia00 + this._transform._rotation01 * this._invLocalInertia10 + this._transform._rotation02 * this._invLocalInertia20; __tmp__01 = this._transform._rotation00 * this._invLocalInertia01 + this._transform._rotation01 * this._invLocalInertia11 + this._transform._rotation02 * this._invLocalInertia21; __tmp__02 = this._transform._rotation00 * this._invLocalInertia02 + this._transform._rotation01 * this._invLocalInertia12 + this._transform._rotation02 * this._invLocalInertia22; __tmp__10 = this._transform._rotation10 * this._invLocalInertia00 + this._transform._rotation11 * this._invLocalInertia10 + this._transform._rotation12 * this._invLocalInertia20; __tmp__11 = this._transform._rotation10 * this._invLocalInertia01 + this._transform._rotation11 * this._invLocalInertia11 + this._transform._rotation12 * this._invLocalInertia21; __tmp__12 = this._transform._rotation10 * this._invLocalInertia02 + this._transform._rotation11 * this._invLocalInertia12 + this._transform._rotation12 * this._invLocalInertia22; __tmp__20 = this._transform._rotation20 * this._invLocalInertia00 + this._transform._rotation21 * this._invLocalInertia10 + this._transform._rotation22 * this._invLocalInertia20; __tmp__21 = this._transform._rotation20 * this._invLocalInertia01 + this._transform._rotation21 * this._invLocalInertia11 + this._transform._rotation22 * this._invLocalInertia21; __tmp__22 = this._transform._rotation20 * this._invLocalInertia02 + this._transform._rotation21 * this._invLocalInertia12 + this._transform._rotation22 * this._invLocalInertia22; this._invInertia00 = __tmp__00; this._invInertia01 = __tmp__01; this._invInertia02 = __tmp__02; this._invInertia10 = __tmp__10; this._invInertia11 = __tmp__11; this._invInertia12 = __tmp__12; this._invInertia20 = __tmp__20; this._invInertia21 = __tmp__21; this._invInertia22 = __tmp__22; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = this._invInertia00 * this._transform._rotation00 + this._invInertia01 * this._transform._rotation01 + this._invInertia02 * this._transform._rotation02; __tmp__011 = this._invInertia00 * this._transform._rotation10 + this._invInertia01 * this._transform._rotation11 + this._invInertia02 * this._transform._rotation12; __tmp__021 = this._invInertia00 * this._transform._rotation20 + this._invInertia01 * this._transform._rotation21 + this._invInertia02 * this._transform._rotation22; __tmp__101 = this._invInertia10 * this._transform._rotation00 + this._invInertia11 * this._transform._rotation01 + this._invInertia12 * this._transform._rotation02; __tmp__111 = this._invInertia10 * this._transform._rotation10 + this._invInertia11 * this._transform._rotation11 + this._invInertia12 * this._transform._rotation12; __tmp__121 = this._invInertia10 * this._transform._rotation20 + this._invInertia11 * this._transform._rotation21 + this._invInertia12 * this._transform._rotation22; __tmp__201 = this._invInertia20 * this._transform._rotation00 + this._invInertia21 * this._transform._rotation01 + this._invInertia22 * this._transform._rotation02; __tmp__211 = this._invInertia20 * this._transform._rotation10 + this._invInertia21 * this._transform._rotation11 + this._invInertia22 * this._transform._rotation12; __tmp__221 = this._invInertia20 * this._transform._rotation20 + this._invInertia21 * this._transform._rotation21 + this._invInertia22 * this._transform._rotation22; this._invInertia00 = __tmp__001; this._invInertia01 = __tmp__011; this._invInertia02 = __tmp__021; this._invInertia10 = __tmp__101; this._invInertia11 = __tmp__111; this._invInertia12 = __tmp__121; this._invInertia20 = __tmp__201; this._invInertia21 = __tmp__211; this._invInertia22 = __tmp__221; this._invInertia00 *= this._rotFactor.x; this._invInertia01 *= this._rotFactor.x; this._invInertia02 *= this._rotFactor.x; this._invInertia10 *= this._rotFactor.y; this._invInertia11 *= this._rotFactor.y; this._invInertia12 *= this._rotFactor.y; this._invInertia20 *= this._rotFactor.z; this._invInertia21 *= this._rotFactor.z; this._invInertia22 *= this._rotFactor.z; this._sleeping = false; this._sleepTime = 0; } getRotationFactor() { var _this = this._rotFactor; return new oimo.common.Vec3(_this.x,_this.y,_this.z); } setRotationFactor(rotationFactor) { var _this = this._rotFactor; _this.x = rotationFactor.x; _this.y = rotationFactor.y; _this.z = rotationFactor.z; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = this._transform._rotation00 * this._invLocalInertia00 + this._transform._rotation01 * this._invLocalInertia10 + this._transform._rotation02 * this._invLocalInertia20; __tmp__01 = this._transform._rotation00 * this._invLocalInertia01 + this._transform._rotation01 * this._invLocalInertia11 + this._transform._rotation02 * this._invLocalInertia21; __tmp__02 = this._transform._rotation00 * this._invLocalInertia02 + this._transform._rotation01 * this._invLocalInertia12 + this._transform._rotation02 * this._invLocalInertia22; __tmp__10 = this._transform._rotation10 * this._invLocalInertia00 + this._transform._rotation11 * this._invLocalInertia10 + this._transform._rotation12 * this._invLocalInertia20; __tmp__11 = this._transform._rotation10 * this._invLocalInertia01 + this._transform._rotation11 * this._invLocalInertia11 + this._transform._rotation12 * this._invLocalInertia21; __tmp__12 = this._transform._rotation10 * this._invLocalInertia02 + this._transform._rotation11 * this._invLocalInertia12 + this._transform._rotation12 * this._invLocalInertia22; __tmp__20 = this._transform._rotation20 * this._invLocalInertia00 + this._transform._rotation21 * this._invLocalInertia10 + this._transform._rotation22 * this._invLocalInertia20; __tmp__21 = this._transform._rotation20 * this._invLocalInertia01 + this._transform._rotation21 * this._invLocalInertia11 + this._transform._rotation22 * this._invLocalInertia21; __tmp__22 = this._transform._rotation20 * this._invLocalInertia02 + this._transform._rotation21 * this._invLocalInertia12 + this._transform._rotation22 * this._invLocalInertia22; this._invInertia00 = __tmp__00; this._invInertia01 = __tmp__01; this._invInertia02 = __tmp__02; this._invInertia10 = __tmp__10; this._invInertia11 = __tmp__11; this._invInertia12 = __tmp__12; this._invInertia20 = __tmp__20; this._invInertia21 = __tmp__21; this._invInertia22 = __tmp__22; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = this._invInertia00 * this._transform._rotation00 + this._invInertia01 * this._transform._rotation01 + this._invInertia02 * this._transform._rotation02; __tmp__011 = this._invInertia00 * this._transform._rotation10 + this._invInertia01 * this._transform._rotation11 + this._invInertia02 * this._transform._rotation12; __tmp__021 = this._invInertia00 * this._transform._rotation20 + this._invInertia01 * this._transform._rotation21 + this._invInertia02 * this._transform._rotation22; __tmp__101 = this._invInertia10 * this._transform._rotation00 + this._invInertia11 * this._transform._rotation01 + this._invInertia12 * this._transform._rotation02; __tmp__111 = this._invInertia10 * this._transform._rotation10 + this._invInertia11 * this._transform._rotation11 + this._invInertia12 * this._transform._rotation12; __tmp__121 = this._invInertia10 * this._transform._rotation20 + this._invInertia11 * this._transform._rotation21 + this._invInertia12 * this._transform._rotation22; __tmp__201 = this._invInertia20 * this._transform._rotation00 + this._invInertia21 * this._transform._rotation01 + this._invInertia22 * this._transform._rotation02; __tmp__211 = this._invInertia20 * this._transform._rotation10 + this._invInertia21 * this._transform._rotation11 + this._invInertia22 * this._transform._rotation12; __tmp__221 = this._invInertia20 * this._transform._rotation20 + this._invInertia21 * this._transform._rotation21 + this._invInertia22 * this._transform._rotation22; this._invInertia00 = __tmp__001; this._invInertia01 = __tmp__011; this._invInertia02 = __tmp__021; this._invInertia10 = __tmp__101; this._invInertia11 = __tmp__111; this._invInertia12 = __tmp__121; this._invInertia20 = __tmp__201; this._invInertia21 = __tmp__211; this._invInertia22 = __tmp__221; this._invInertia00 *= this._rotFactor.x; this._invInertia01 *= this._rotFactor.x; this._invInertia02 *= this._rotFactor.x; this._invInertia10 *= this._rotFactor.y; this._invInertia11 *= this._rotFactor.y; this._invInertia12 *= this._rotFactor.y; this._invInertia20 *= this._rotFactor.z; this._invInertia21 *= this._rotFactor.z; this._invInertia22 *= this._rotFactor.z; this._sleeping = false; this._sleepTime = 0; } getLinearVelocity() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._velX; v1.y = this._velY; v1.z = this._velZ; return v; } getLinearVelocityTo(linearVelocity) { var v = linearVelocity; v.x = this._velX; v.y = this._velY; v.z = this._velZ; } setLinearVelocity(linearVelocity) { if(this._type == 1) { this._velX = 0; this._velY = 0; this._velZ = 0; } else { var v = linearVelocity; this._velX = v.x; this._velY = v.y; this._velZ = v.z; } this._sleeping = false; this._sleepTime = 0; } getAngularVelocity() { var v = new oimo.common.Vec3(); var v1 = v; v1.x = this._angVelX; v1.y = this._angVelY; v1.z = this._angVelZ; return v; } getAngularVelocityTo(angularVelocity) { var v = angularVelocity; v.x = this._velX; v.y = this._velY; v.z = this._velZ; } setAngularVelocity(angularVelocity) { if(this._type == 1) { this._angVelX = 0; this._angVelY = 0; this._angVelZ = 0; } else { var v = angularVelocity; this._angVelX = v.x; this._angVelY = v.y; this._angVelZ = v.z; } this._sleeping = false; this._sleepTime = 0; } addLinearVelocity(linearVelocityChange) { if(this._type != 1) { var d; var dX; var dY; var dZ; var v = linearVelocityChange; dX = v.x; dY = v.y; dZ = v.z; this._velX += dX; this._velY += dY; this._velZ += dZ; } this._sleeping = false; this._sleepTime = 0; } addAngularVelocity(angularVelocityChange) { if(this._type != 1) { var d; var dX; var dY; var dZ; var v = angularVelocityChange; dX = v.x; dY = v.y; dZ = v.z; this._angVelX += dX; this._angVelY += dY; this._angVelZ += dZ; } this._sleeping = false; this._sleepTime = 0; } applyImpulse(impulse,positionInWorld) { var imp; var impX; var impY; var impZ; var v = impulse; impX = v.x; impY = v.y; impZ = v.z; this._velX += impX * this._invMass; this._velY += impY * this._invMass; this._velZ += impZ * this._invMass; var aimp; var aimpX; var aimpY; var aimpZ; var pos; var posX; var posY; var posZ; var v1 = positionInWorld; posX = v1.x; posY = v1.y; posZ = v1.z; posX -= this._transform._positionX; posY -= this._transform._positionY; posZ -= this._transform._positionZ; aimpX = posY * impZ - posZ * impY; aimpY = posZ * impX - posX * impZ; aimpZ = posX * impY - posY * impX; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = this._invInertia00 * aimpX + this._invInertia01 * aimpY + this._invInertia02 * aimpZ; __tmp__Y = this._invInertia10 * aimpX + this._invInertia11 * aimpY + this._invInertia12 * aimpZ; __tmp__Z = this._invInertia20 * aimpX + this._invInertia21 * aimpY + this._invInertia22 * aimpZ; aimpX = __tmp__X; aimpY = __tmp__Y; aimpZ = __tmp__Z; this._angVelX += aimpX; this._angVelY += aimpY; this._angVelZ += aimpZ; this._sleeping = false; this._sleepTime = 0; } applyLinearImpulse(impulse) { var imp; var impX; var impY; var impZ; var v = impulse; impX = v.x; impY = v.y; impZ = v.z; this._velX += impX * this._invMass; this._velY += impY * this._invMass; this._velZ += impZ * this._invMass; this._sleeping = false; this._sleepTime = 0; } applyAngularImpulse(impulse) { var imp; var impX; var impY; var impZ; var v = impulse; impX = v.x; impY = v.y; impZ = v.z; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = this._invInertia00 * impX + this._invInertia01 * impY + this._invInertia02 * impZ; __tmp__Y = this._invInertia10 * impX + this._invInertia11 * impY + this._invInertia12 * impZ; __tmp__Z = this._invInertia20 * impX + this._invInertia21 * impY + this._invInertia22 * impZ; impX = __tmp__X; impY = __tmp__Y; impZ = __tmp__Z; this._angVelX += impX; this._angVelY += impY; this._angVelZ += impZ; this._sleeping = false; this._sleepTime = 0; } applyForce(force,positionInWorld) { var iforce; var iforceX; var iforceY; var iforceZ; var v = force; iforceX = v.x; iforceY = v.y; iforceZ = v.z; this._forceX += iforceX; this._forceY += iforceY; this._forceZ += iforceZ; var itorque; var itorqueX; var itorqueY; var itorqueZ; var pos; var posX; var posY; var posZ; var v1 = positionInWorld; posX = v1.x; posY = v1.y; posZ = v1.z; posX -= this._transform._positionX; posY -= this._transform._positionY; posZ -= this._transform._positionZ; itorqueX = posY * iforceZ - posZ * iforceY; itorqueY = posZ * iforceX - posX * iforceZ; itorqueZ = posX * iforceY - posY * iforceX; this._torqueX += itorqueX; this._torqueY += itorqueY; this._torqueZ += itorqueZ; this._sleeping = false; this._sleepTime = 0; } applyForceToCenter(force) { var iforce; var iforceX; var iforceY; var iforceZ; var v = force; iforceX = v.x; iforceY = v.y; iforceZ = v.z; this._forceX += iforceX; this._forceY += iforceY; this._forceZ += iforceZ; this._sleeping = false; this._sleepTime = 0; } applyTorque(torque) { var itorque; var itorqueX; var itorqueY; var itorqueZ; var v = torque; itorqueX = v.x; itorqueY = v.y; itorqueZ = v.z; this._torqueX += itorqueX; this._torqueY += itorqueY; this._torqueZ += itorqueZ; this._sleeping = false; this._sleepTime = 0; } getLinearContactImpulse() { var res = new oimo.common.Vec3(); var v = res; v.x = this._linearContactImpulseX; v.y = this._linearContactImpulseY; v.z = this._linearContactImpulseZ; return res; } getLinearContactImpulseTo(linearContactImpulse) { var v = linearContactImpulse; v.x = this._linearContactImpulseX; v.y = this._linearContactImpulseY; v.z = this._linearContactImpulseZ; } getAngularContactImpulse() { var res = new oimo.common.Vec3(); var v = res; v.x = this._angularContactImpulseX; v.y = this._angularContactImpulseY; v.z = this._angularContactImpulseZ; return res; } getAngularContactImpulseTo(angularContactImpulse) { var v = angularContactImpulse; v.x = this._angularContactImpulseX; v.y = this._angularContactImpulseY; v.z = this._angularContactImpulseZ; } getGravityScale() { return this._gravityScale; } setGravityScale(gravityScale) { this._gravityScale = gravityScale; this._sleeping = false; this._sleepTime = 0; } getLocalPoint(worldPoint) { var v; var vX; var vY; var vZ; var v1 = worldPoint; vX = v1.x; vY = v1.y; vZ = v1.z; vX -= this._transform._positionX; vY -= this._transform._positionY; vZ -= this._transform._positionZ; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = this._transform._rotation00 * vX + this._transform._rotation10 * vY + this._transform._rotation20 * vZ; __tmp__Y = this._transform._rotation01 * vX + this._transform._rotation11 * vY + this._transform._rotation21 * vZ; __tmp__Z = this._transform._rotation02 * vX + this._transform._rotation12 * vY + this._transform._rotation22 * vZ; vX = __tmp__X; vY = __tmp__Y; vZ = __tmp__Z; var res = new oimo.common.Vec3(); var v2 = res; v2.x = vX; v2.y = vY; v2.z = vZ; return res; } getLocalPointTo(worldPoint,localPoint) { var v; var vX; var vY; var vZ; var v1 = worldPoint; vX = v1.x; vY = v1.y; vZ = v1.z; vX -= this._transform._positionX; vY -= this._transform._positionY; vZ -= this._transform._positionZ; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = this._transform._rotation00 * vX + this._transform._rotation10 * vY + this._transform._rotation20 * vZ; __tmp__Y = this._transform._rotation01 * vX + this._transform._rotation11 * vY + this._transform._rotation21 * vZ; __tmp__Z = this._transform._rotation02 * vX + this._transform._rotation12 * vY + this._transform._rotation22 * vZ; vX = __tmp__X; vY = __tmp__Y; vZ = __tmp__Z; var v2 = localPoint; v2.x = vX; v2.y = vY; v2.z = vZ; } getLocalVector(worldVector) { var v; var vX; var vY; var vZ; var v1 = worldVector; vX = v1.x; vY = v1.y; vZ = v1.z; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = this._transform._rotation00 * vX + this._transform._rotation10 * vY + this._transform._rotation20 * vZ; __tmp__Y = this._transform._rotation01 * vX + this._transform._rotation11 * vY + this._transform._rotation21 * vZ; __tmp__Z = this._transform._rotation02 * vX + this._transform._rotation12 * vY + this._transform._rotation22 * vZ; vX = __tmp__X; vY = __tmp__Y; vZ = __tmp__Z; var res = new oimo.common.Vec3(); var v2 = res; v2.x = vX; v2.y = vY; v2.z = vZ; return res; } getLocalVectorTo(worldVector,localVector) { var v; var vX; var vY; var vZ; var v1 = worldVector; vX = v1.x; vY = v1.y; vZ = v1.z; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = this._transform._rotation00 * vX + this._transform._rotation10 * vY + this._transform._rotation20 * vZ; __tmp__Y = this._transform._rotation01 * vX + this._transform._rotation11 * vY + this._transform._rotation21 * vZ; __tmp__Z = this._transform._rotation02 * vX + this._transform._rotation12 * vY + this._transform._rotation22 * vZ; vX = __tmp__X; vY = __tmp__Y; vZ = __tmp__Z; var v2 = localVector; v2.x = vX; v2.y = vY; v2.z = vZ; } getWorldPoint(localPoint) { var v; var vX; var vY; var vZ; var v1 = localPoint; vX = v1.x; vY = v1.y; vZ = v1.z; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = this._transform._rotation00 * vX + this._transform._rotation01 * vY + this._transform._rotation02 * vZ; __tmp__Y = this._transform._rotation10 * vX + this._transform._rotation11 * vY + this._transform._rotation12 * vZ; __tmp__Z = this._transform._rotation20 * vX + this._transform._rotation21 * vY + this._transform._rotation22 * vZ; vX = __tmp__X; vY = __tmp__Y; vZ = __tmp__Z; vX += this._transform._positionX; vY += this._transform._positionY; vZ += this._transform._positionZ; var res = new oimo.common.Vec3(); var v2 = res; v2.x = vX; v2.y = vY; v2.z = vZ; return res; } getWorldPointTo(localPoint,worldPoint) { var v; var vX; var vY; var vZ; var v1 = localPoint; vX = v1.x; vY = v1.y; vZ = v1.z; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = this._transform._rotation00 * vX + this._transform._rotation01 * vY + this._transform._rotation02 * vZ; __tmp__Y = this._transform._rotation10 * vX + this._transform._rotation11 * vY + this._transform._rotation12 * vZ; __tmp__Z = this._transform._rotation20 * vX + this._transform._rotation21 * vY + this._transform._rotation22 * vZ; vX = __tmp__X; vY = __tmp__Y; vZ = __tmp__Z; vX += this._transform._positionX; vY += this._transform._positionY; vZ += this._transform._positionZ; var v2 = worldPoint; v2.x = vX; v2.y = vY; v2.z = vZ; } getWorldVector(localVector) { var v; var vX; var vY; var vZ; var v1 = localVector; vX = v1.x; vY = v1.y; vZ = v1.z; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = this._transform._rotation00 * vX + this._transform._rotation01 * vY + this._transform._rotation02 * vZ; __tmp__Y = this._transform._rotation10 * vX + this._transform._rotation11 * vY + this._transform._rotation12 * vZ; __tmp__Z = this._transform._rotation20 * vX + this._transform._rotation21 * vY + this._transform._rotation22 * vZ; vX = __tmp__X; vY = __tmp__Y; vZ = __tmp__Z; var res = new oimo.common.Vec3(); var v2 = res; v2.x = vX; v2.y = vY; v2.z = vZ; return res; } getWorldVectorTo(localVector,worldVector) { var v; var vX; var vY; var vZ; var v1 = localVector; vX = v1.x; vY = v1.y; vZ = v1.z; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = this._transform._rotation00 * vX + this._transform._rotation01 * vY + this._transform._rotation02 * vZ; __tmp__Y = this._transform._rotation10 * vX + this._transform._rotation11 * vY + this._transform._rotation12 * vZ; __tmp__Z = this._transform._rotation20 * vX + this._transform._rotation21 * vY + this._transform._rotation22 * vZ; vX = __tmp__X; vY = __tmp__Y; vZ = __tmp__Z; var v2 = worldVector; v2.x = vX; v2.y = vY; v2.z = vZ; } getNumShapes() { return this._numShapes; } getShapeList() { return this._shapeList; } getNumContectLinks() { return this._numContactLinks; } getContactLinkList() { return this._contactLinkList; } getNumJointLinks() { return this._numJointLinks; } getJointLinkList() { return this._jointLinkList; } addShape(shape) { if(this._shapeList == null) { this._shapeList = shape; this._shapeListLast = shape; } else { this._shapeListLast._next = shape; shape._prev = this._shapeListLast; this._shapeListLast = shape; } this._numShapes++; shape._rigidBody = this; if(this._world != null) { var _this = this._world; shape._proxy = _this._broadPhase.createProxy(shape,shape._aabb); shape._id = _this._shapeIdCount++; _this._numShapes++; } this.updateMass(); var s = this._shapeList; while(s != null) { var n = s._next; var dst = s._ptransform; var src1 = s._localTransform; var src2 = this._ptransform; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = src2._rotation00 * src1._rotation00 + src2._rotation01 * src1._rotation10 + src2._rotation02 * src1._rotation20; __tmp__01 = src2._rotation00 * src1._rotation01 + src2._rotation01 * src1._rotation11 + src2._rotation02 * src1._rotation21; __tmp__02 = src2._rotation00 * src1._rotation02 + src2._rotation01 * src1._rotation12 + src2._rotation02 * src1._rotation22; __tmp__10 = src2._rotation10 * src1._rotation00 + src2._rotation11 * src1._rotation10 + src2._rotation12 * src1._rotation20; __tmp__11 = src2._rotation10 * src1._rotation01 + src2._rotation11 * src1._rotation11 + src2._rotation12 * src1._rotation21; __tmp__12 = src2._rotation10 * src1._rotation02 + src2._rotation11 * src1._rotation12 + src2._rotation12 * src1._rotation22; __tmp__20 = src2._rotation20 * src1._rotation00 + src2._rotation21 * src1._rotation10 + src2._rotation22 * src1._rotation20; __tmp__21 = src2._rotation20 * src1._rotation01 + src2._rotation21 * src1._rotation11 + src2._rotation22 * src1._rotation21; __tmp__22 = src2._rotation20 * src1._rotation02 + src2._rotation21 * src1._rotation12 + src2._rotation22 * src1._rotation22; dst._rotation00 = __tmp__00; dst._rotation01 = __tmp__01; dst._rotation02 = __tmp__02; dst._rotation10 = __tmp__10; dst._rotation11 = __tmp__11; dst._rotation12 = __tmp__12; dst._rotation20 = __tmp__20; dst._rotation21 = __tmp__21; dst._rotation22 = __tmp__22; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = src2._rotation00 * src1._positionX + src2._rotation01 * src1._positionY + src2._rotation02 * src1._positionZ; __tmp__Y = src2._rotation10 * src1._positionX + src2._rotation11 * src1._positionY + src2._rotation12 * src1._positionZ; __tmp__Z = src2._rotation20 * src1._positionX + src2._rotation21 * src1._positionY + src2._rotation22 * src1._positionZ; dst._positionX = __tmp__X; dst._positionY = __tmp__Y; dst._positionZ = __tmp__Z; dst._positionX += src2._positionX; dst._positionY += src2._positionY; dst._positionZ += src2._positionZ; var dst1 = s._transform; var src11 = s._localTransform; var src21 = this._transform; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = src21._rotation00 * src11._rotation00 + src21._rotation01 * src11._rotation10 + src21._rotation02 * src11._rotation20; __tmp__011 = src21._rotation00 * src11._rotation01 + src21._rotation01 * src11._rotation11 + src21._rotation02 * src11._rotation21; __tmp__021 = src21._rotation00 * src11._rotation02 + src21._rotation01 * src11._rotation12 + src21._rotation02 * src11._rotation22; __tmp__101 = src21._rotation10 * src11._rotation00 + src21._rotation11 * src11._rotation10 + src21._rotation12 * src11._rotation20; __tmp__111 = src21._rotation10 * src11._rotation01 + src21._rotation11 * src11._rotation11 + src21._rotation12 * src11._rotation21; __tmp__121 = src21._rotation10 * src11._rotation02 + src21._rotation11 * src11._rotation12 + src21._rotation12 * src11._rotation22; __tmp__201 = src21._rotation20 * src11._rotation00 + src21._rotation21 * src11._rotation10 + src21._rotation22 * src11._rotation20; __tmp__211 = src21._rotation20 * src11._rotation01 + src21._rotation21 * src11._rotation11 + src21._rotation22 * src11._rotation21; __tmp__221 = src21._rotation20 * src11._rotation02 + src21._rotation21 * src11._rotation12 + src21._rotation22 * src11._rotation22; dst1._rotation00 = __tmp__001; dst1._rotation01 = __tmp__011; dst1._rotation02 = __tmp__021; dst1._rotation10 = __tmp__101; dst1._rotation11 = __tmp__111; dst1._rotation12 = __tmp__121; dst1._rotation20 = __tmp__201; dst1._rotation21 = __tmp__211; dst1._rotation22 = __tmp__221; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = src21._rotation00 * src11._positionX + src21._rotation01 * src11._positionY + src21._rotation02 * src11._positionZ; __tmp__Y1 = src21._rotation10 * src11._positionX + src21._rotation11 * src11._positionY + src21._rotation12 * src11._positionZ; __tmp__Z1 = src21._rotation20 * src11._positionX + src21._rotation21 * src11._positionY + src21._rotation22 * src11._positionZ; dst1._positionX = __tmp__X1; dst1._positionY = __tmp__Y1; dst1._positionZ = __tmp__Z1; dst1._positionX += src21._positionX; dst1._positionY += src21._positionY; dst1._positionZ += src21._positionZ; var min; var minX; var minY; var minZ; var max; var maxX; var maxY; var maxZ; s._geom._computeAabb(s._aabb,s._ptransform); minX = s._aabb._minX; minY = s._aabb._minY; minZ = s._aabb._minZ; maxX = s._aabb._maxX; maxY = s._aabb._maxY; maxZ = s._aabb._maxZ; s._geom._computeAabb(s._aabb,s._transform); s._aabb._minX = minX < s._aabb._minX ? minX : s._aabb._minX; s._aabb._minY = minY < s._aabb._minY ? minY : s._aabb._minY; s._aabb._minZ = minZ < s._aabb._minZ ? minZ : s._aabb._minZ; s._aabb._maxX = maxX > s._aabb._maxX ? maxX : s._aabb._maxX; s._aabb._maxY = maxY > s._aabb._maxY ? maxY : s._aabb._maxY; s._aabb._maxZ = maxZ > s._aabb._maxZ ? maxZ : s._aabb._maxZ; if(s._proxy != null) { var d; var dX; var dY; var dZ; dX = s._transform._positionX - s._ptransform._positionX; dY = s._transform._positionY - s._ptransform._positionY; dZ = s._transform._positionZ - s._ptransform._positionZ; var v = s.displacement; v.x = dX; v.y = dY; v.z = dZ; s._rigidBody._world._broadPhase.moveProxy(s._proxy,s._aabb,s.displacement); } s = n; } } removeShape(shape) { var prev = shape._prev; var next = shape._next; if(prev != null) { prev._next = next; } if(next != null) { next._prev = prev; } if(shape == this._shapeList) { this._shapeList = this._shapeList._next; } if(shape == this._shapeListLast) { this._shapeListLast = this._shapeListLast._prev; } shape._next = null; shape._prev = null; this._numShapes--; shape._rigidBody = null; if(this._world != null) { var _this = this._world; _this._broadPhase.destroyProxy(shape._proxy); shape._proxy = null; shape._id = -1; var cl = shape._rigidBody._contactLinkList; while(cl != null) { var n = cl._next; var c = cl._contact; if(c._s1 == shape || c._s2 == shape) { var _this1 = cl._other; _this1._sleeping = false; _this1._sleepTime = 0; var _this2 = _this._contactManager; var prev1 = c._prev; var next1 = c._next; if(prev1 != null) { prev1._next = next1; } if(next1 != null) { next1._prev = prev1; } if(c == _this2._contactList) { _this2._contactList = _this2._contactList._next; } if(c == _this2._contactListLast) { _this2._contactListLast = _this2._contactListLast._prev; } c._next = null; c._prev = null; if(c._touching) { var cc1 = c._s1._contactCallback; var cc2 = c._s2._contactCallback; if(cc1 == cc2) { cc2 = null; } if(cc1 != null) { cc1.endContact(c); } if(cc2 != null) { cc2.endContact(c); } } var prev2 = c._link1._prev; var next2 = c._link1._next; if(prev2 != null) { prev2._next = next2; } if(next2 != null) { next2._prev = prev2; } if(c._link1 == c._b1._contactLinkList) { c._b1._contactLinkList = c._b1._contactLinkList._next; } if(c._link1 == c._b1._contactLinkListLast) { c._b1._contactLinkListLast = c._b1._contactLinkListLast._prev; } c._link1._next = null; c._link1._prev = null; var prev3 = c._link2._prev; var next3 = c._link2._next; if(prev3 != null) { prev3._next = next3; } if(next3 != null) { next3._prev = prev3; } if(c._link2 == c._b2._contactLinkList) { c._b2._contactLinkList = c._b2._contactLinkList._next; } if(c._link2 == c._b2._contactLinkListLast) { c._b2._contactLinkListLast = c._b2._contactLinkListLast._prev; } c._link2._next = null; c._link2._prev = null; c._b1._numContactLinks--; c._b2._numContactLinks--; c._link1._other = null; c._link2._other = null; c._link1._contact = null; c._link2._contact = null; c._s1 = null; c._s2 = null; c._b1 = null; c._b2 = null; c._touching = false; c._cachedDetectorData._clear(); c._manifold._clear(); c._detector = null; var _this3 = c._contactConstraint; _this3._s1 = null; _this3._s2 = null; _this3._b1 = null; _this3._b2 = null; _this3._tf1 = null; _this3._tf2 = null; c._next = _this2._contactPool; _this2._contactPool = c; _this2._numContacts--; } cl = n; } _this._numShapes--; } this.updateMass(); var s = this._shapeList; while(s != null) { var n1 = s._next; var dst = s._ptransform; var src1 = s._localTransform; var src2 = this._ptransform; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = src2._rotation00 * src1._rotation00 + src2._rotation01 * src1._rotation10 + src2._rotation02 * src1._rotation20; __tmp__01 = src2._rotation00 * src1._rotation01 + src2._rotation01 * src1._rotation11 + src2._rotation02 * src1._rotation21; __tmp__02 = src2._rotation00 * src1._rotation02 + src2._rotation01 * src1._rotation12 + src2._rotation02 * src1._rotation22; __tmp__10 = src2._rotation10 * src1._rotation00 + src2._rotation11 * src1._rotation10 + src2._rotation12 * src1._rotation20; __tmp__11 = src2._rotation10 * src1._rotation01 + src2._rotation11 * src1._rotation11 + src2._rotation12 * src1._rotation21; __tmp__12 = src2._rotation10 * src1._rotation02 + src2._rotation11 * src1._rotation12 + src2._rotation12 * src1._rotation22; __tmp__20 = src2._rotation20 * src1._rotation00 + src2._rotation21 * src1._rotation10 + src2._rotation22 * src1._rotation20; __tmp__21 = src2._rotation20 * src1._rotation01 + src2._rotation21 * src1._rotation11 + src2._rotation22 * src1._rotation21; __tmp__22 = src2._rotation20 * src1._rotation02 + src2._rotation21 * src1._rotation12 + src2._rotation22 * src1._rotation22; dst._rotation00 = __tmp__00; dst._rotation01 = __tmp__01; dst._rotation02 = __tmp__02; dst._rotation10 = __tmp__10; dst._rotation11 = __tmp__11; dst._rotation12 = __tmp__12; dst._rotation20 = __tmp__20; dst._rotation21 = __tmp__21; dst._rotation22 = __tmp__22; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = src2._rotation00 * src1._positionX + src2._rotation01 * src1._positionY + src2._rotation02 * src1._positionZ; __tmp__Y = src2._rotation10 * src1._positionX + src2._rotation11 * src1._positionY + src2._rotation12 * src1._positionZ; __tmp__Z = src2._rotation20 * src1._positionX + src2._rotation21 * src1._positionY + src2._rotation22 * src1._positionZ; dst._positionX = __tmp__X; dst._positionY = __tmp__Y; dst._positionZ = __tmp__Z; dst._positionX += src2._positionX; dst._positionY += src2._positionY; dst._positionZ += src2._positionZ; var dst1 = s._transform; var src11 = s._localTransform; var src21 = this._transform; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = src21._rotation00 * src11._rotation00 + src21._rotation01 * src11._rotation10 + src21._rotation02 * src11._rotation20; __tmp__011 = src21._rotation00 * src11._rotation01 + src21._rotation01 * src11._rotation11 + src21._rotation02 * src11._rotation21; __tmp__021 = src21._rotation00 * src11._rotation02 + src21._rotation01 * src11._rotation12 + src21._rotation02 * src11._rotation22; __tmp__101 = src21._rotation10 * src11._rotation00 + src21._rotation11 * src11._rotation10 + src21._rotation12 * src11._rotation20; __tmp__111 = src21._rotation10 * src11._rotation01 + src21._rotation11 * src11._rotation11 + src21._rotation12 * src11._rotation21; __tmp__121 = src21._rotation10 * src11._rotation02 + src21._rotation11 * src11._rotation12 + src21._rotation12 * src11._rotation22; __tmp__201 = src21._rotation20 * src11._rotation00 + src21._rotation21 * src11._rotation10 + src21._rotation22 * src11._rotation20; __tmp__211 = src21._rotation20 * src11._rotation01 + src21._rotation21 * src11._rotation11 + src21._rotation22 * src11._rotation21; __tmp__221 = src21._rotation20 * src11._rotation02 + src21._rotation21 * src11._rotation12 + src21._rotation22 * src11._rotation22; dst1._rotation00 = __tmp__001; dst1._rotation01 = __tmp__011; dst1._rotation02 = __tmp__021; dst1._rotation10 = __tmp__101; dst1._rotation11 = __tmp__111; dst1._rotation12 = __tmp__121; dst1._rotation20 = __tmp__201; dst1._rotation21 = __tmp__211; dst1._rotation22 = __tmp__221; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = src21._rotation00 * src11._positionX + src21._rotation01 * src11._positionY + src21._rotation02 * src11._positionZ; __tmp__Y1 = src21._rotation10 * src11._positionX + src21._rotation11 * src11._positionY + src21._rotation12 * src11._positionZ; __tmp__Z1 = src21._rotation20 * src11._positionX + src21._rotation21 * src11._positionY + src21._rotation22 * src11._positionZ; dst1._positionX = __tmp__X1; dst1._positionY = __tmp__Y1; dst1._positionZ = __tmp__Z1; dst1._positionX += src21._positionX; dst1._positionY += src21._positionY; dst1._positionZ += src21._positionZ; var min; var minX; var minY; var minZ; var max; var maxX; var maxY; var maxZ; s._geom._computeAabb(s._aabb,s._ptransform); minX = s._aabb._minX; minY = s._aabb._minY; minZ = s._aabb._minZ; maxX = s._aabb._maxX; maxY = s._aabb._maxY; maxZ = s._aabb._maxZ; s._geom._computeAabb(s._aabb,s._transform); s._aabb._minX = minX < s._aabb._minX ? minX : s._aabb._minX; s._aabb._minY = minY < s._aabb._minY ? minY : s._aabb._minY; s._aabb._minZ = minZ < s._aabb._minZ ? minZ : s._aabb._minZ; s._aabb._maxX = maxX > s._aabb._maxX ? maxX : s._aabb._maxX; s._aabb._maxY = maxY > s._aabb._maxY ? maxY : s._aabb._maxY; s._aabb._maxZ = maxZ > s._aabb._maxZ ? maxZ : s._aabb._maxZ; if(s._proxy != null) { var d; var dX; var dY; var dZ; dX = s._transform._positionX - s._ptransform._positionX; dY = s._transform._positionY - s._ptransform._positionY; dZ = s._transform._positionZ - s._ptransform._positionZ; var v = s.displacement; v.x = dX; v.y = dY; v.z = dZ; s._rigidBody._world._broadPhase.moveProxy(s._proxy,s._aabb,s.displacement); } s = n1; } } getType() { return this._type; } setType(type) { this._type = type; this.updateMass(); } wakeUp() { this._sleeping = false; this._sleepTime = 0; } sleep() { this._sleeping = true; this._sleepTime = 0; } isSleeping() { return this._sleeping; } getSleepTime() { return this._sleepTime; } setAutoSleep(autoSleepEnabled) { this._autoSleep = autoSleepEnabled; this._sleeping = false; this._sleepTime = 0; } getLinearDamping() { return this._linearDamping; } setLinearDamping(damping) { this._linearDamping = damping; } getAngularDamping() { return this._angularDamping; } setAngularDamping(damping) { this._angularDamping = damping; } getPrev() { return this._prev; } getNext() { return this._next; } } oimo.dynamics.rigidbody.RigidBodyConfig = class oimo_dynamics_rigidbody_RigidBodyConfig { constructor() { this.position = new oimo.common.Vec3(); this.rotation = new oimo.common.Mat3(); this.linearVelocity = new oimo.common.Vec3(); this.angularVelocity = new oimo.common.Vec3(); this.type = 0; this.autoSleep = true; this.linearDamping = 0; this.angularDamping = 0; } } oimo.dynamics.rigidbody.RigidBodyType = class oimo_dynamics_rigidbody_RigidBodyType { } oimo.dynamics.rigidbody.Shape = class oimo_dynamics_rigidbody_Shape { constructor(config) { this._id = -1; this._localTransform = new oimo.common.Transform(); this._ptransform = new oimo.common.Transform(); this._transform = new oimo.common.Transform(); var v = config.position; this._localTransform._positionX = v.x; this._localTransform._positionY = v.y; this._localTransform._positionZ = v.z; var m = config.rotation; this._localTransform._rotation00 = m.e00; this._localTransform._rotation01 = m.e01; this._localTransform._rotation02 = m.e02; this._localTransform._rotation10 = m.e10; this._localTransform._rotation11 = m.e11; this._localTransform._rotation12 = m.e12; this._localTransform._rotation20 = m.e20; this._localTransform._rotation21 = m.e21; this._localTransform._rotation22 = m.e22; var dst = this._ptransform; var src = this._localTransform; dst._positionX = src._positionX; dst._positionY = src._positionY; dst._positionZ = src._positionZ; dst._rotation00 = src._rotation00; dst._rotation01 = src._rotation01; dst._rotation02 = src._rotation02; dst._rotation10 = src._rotation10; dst._rotation11 = src._rotation11; dst._rotation12 = src._rotation12; dst._rotation20 = src._rotation20; dst._rotation21 = src._rotation21; dst._rotation22 = src._rotation22; var dst1 = this._transform; var src1 = this._localTransform; dst1._positionX = src1._positionX; dst1._positionY = src1._positionY; dst1._positionZ = src1._positionZ; dst1._rotation00 = src1._rotation00; dst1._rotation01 = src1._rotation01; dst1._rotation02 = src1._rotation02; dst1._rotation10 = src1._rotation10; dst1._rotation11 = src1._rotation11; dst1._rotation12 = src1._rotation12; dst1._rotation20 = src1._rotation20; dst1._rotation21 = src1._rotation21; dst1._rotation22 = src1._rotation22; this._restitution = config.restitution; this._friction = config.friction; this._density = config.density; this._geom = config.geometry; this._collisionGroup = config.collisionGroup; this._collisionMask = config.collisionMask; this._contactCallback = config.contactCallback; this._aabb = new oimo.collision.geometry.Aabb(); this._proxy = null; this.displacement = new oimo.common.Vec3(); } getFriction() { return this._friction; } setFriction(friction) { this._friction = friction; } getRestitution() { return this._restitution; } setRestitution(restitution) { this._restitution = restitution; } getLocalTransform() { var _this = this._localTransform; var tf = new oimo.common.Transform(); tf._positionX = _this._positionX; tf._positionY = _this._positionY; tf._positionZ = _this._positionZ; tf._rotation00 = _this._rotation00; tf._rotation01 = _this._rotation01; tf._rotation02 = _this._rotation02; tf._rotation10 = _this._rotation10; tf._rotation11 = _this._rotation11; tf._rotation12 = _this._rotation12; tf._rotation20 = _this._rotation20; tf._rotation21 = _this._rotation21; tf._rotation22 = _this._rotation22; return tf; } getLocalTransformTo(transform) { var transform1 = this._localTransform; transform._positionX = transform1._positionX; transform._positionY = transform1._positionY; transform._positionZ = transform1._positionZ; transform._rotation00 = transform1._rotation00; transform._rotation01 = transform1._rotation01; transform._rotation02 = transform1._rotation02; transform._rotation10 = transform1._rotation10; transform._rotation11 = transform1._rotation11; transform._rotation12 = transform1._rotation12; transform._rotation20 = transform1._rotation20; transform._rotation21 = transform1._rotation21; transform._rotation22 = transform1._rotation22; } getTransform() { var _this = this._transform; var tf = new oimo.common.Transform(); tf._positionX = _this._positionX; tf._positionY = _this._positionY; tf._positionZ = _this._positionZ; tf._rotation00 = _this._rotation00; tf._rotation01 = _this._rotation01; tf._rotation02 = _this._rotation02; tf._rotation10 = _this._rotation10; tf._rotation11 = _this._rotation11; tf._rotation12 = _this._rotation12; tf._rotation20 = _this._rotation20; tf._rotation21 = _this._rotation21; tf._rotation22 = _this._rotation22; return tf; } getTransformTo(transform) { var transform1 = this._transform; transform._positionX = transform1._positionX; transform._positionY = transform1._positionY; transform._positionZ = transform1._positionZ; transform._rotation00 = transform1._rotation00; transform._rotation01 = transform1._rotation01; transform._rotation02 = transform1._rotation02; transform._rotation10 = transform1._rotation10; transform._rotation11 = transform1._rotation11; transform._rotation12 = transform1._rotation12; transform._rotation20 = transform1._rotation20; transform._rotation21 = transform1._rotation21; transform._rotation22 = transform1._rotation22; } setLocalTransform(transform) { var _this = this._localTransform; _this._positionX = transform._positionX; _this._positionY = transform._positionY; _this._positionZ = transform._positionZ; _this._rotation00 = transform._rotation00; _this._rotation01 = transform._rotation01; _this._rotation02 = transform._rotation02; _this._rotation10 = transform._rotation10; _this._rotation11 = transform._rotation11; _this._rotation12 = transform._rotation12; _this._rotation20 = transform._rotation20; _this._rotation21 = transform._rotation21; _this._rotation22 = transform._rotation22; if(this._rigidBody != null) { var _this1 = this._rigidBody; _this1.updateMass(); var s = _this1._shapeList; while(s != null) { var n = s._next; var dst = s._ptransform; var src1 = s._localTransform; var src2 = _this1._ptransform; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = src2._rotation00 * src1._rotation00 + src2._rotation01 * src1._rotation10 + src2._rotation02 * src1._rotation20; __tmp__01 = src2._rotation00 * src1._rotation01 + src2._rotation01 * src1._rotation11 + src2._rotation02 * src1._rotation21; __tmp__02 = src2._rotation00 * src1._rotation02 + src2._rotation01 * src1._rotation12 + src2._rotation02 * src1._rotation22; __tmp__10 = src2._rotation10 * src1._rotation00 + src2._rotation11 * src1._rotation10 + src2._rotation12 * src1._rotation20; __tmp__11 = src2._rotation10 * src1._rotation01 + src2._rotation11 * src1._rotation11 + src2._rotation12 * src1._rotation21; __tmp__12 = src2._rotation10 * src1._rotation02 + src2._rotation11 * src1._rotation12 + src2._rotation12 * src1._rotation22; __tmp__20 = src2._rotation20 * src1._rotation00 + src2._rotation21 * src1._rotation10 + src2._rotation22 * src1._rotation20; __tmp__21 = src2._rotation20 * src1._rotation01 + src2._rotation21 * src1._rotation11 + src2._rotation22 * src1._rotation21; __tmp__22 = src2._rotation20 * src1._rotation02 + src2._rotation21 * src1._rotation12 + src2._rotation22 * src1._rotation22; dst._rotation00 = __tmp__00; dst._rotation01 = __tmp__01; dst._rotation02 = __tmp__02; dst._rotation10 = __tmp__10; dst._rotation11 = __tmp__11; dst._rotation12 = __tmp__12; dst._rotation20 = __tmp__20; dst._rotation21 = __tmp__21; dst._rotation22 = __tmp__22; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = src2._rotation00 * src1._positionX + src2._rotation01 * src1._positionY + src2._rotation02 * src1._positionZ; __tmp__Y = src2._rotation10 * src1._positionX + src2._rotation11 * src1._positionY + src2._rotation12 * src1._positionZ; __tmp__Z = src2._rotation20 * src1._positionX + src2._rotation21 * src1._positionY + src2._rotation22 * src1._positionZ; dst._positionX = __tmp__X; dst._positionY = __tmp__Y; dst._positionZ = __tmp__Z; dst._positionX += src2._positionX; dst._positionY += src2._positionY; dst._positionZ += src2._positionZ; var dst1 = s._transform; var src11 = s._localTransform; var src21 = _this1._transform; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = src21._rotation00 * src11._rotation00 + src21._rotation01 * src11._rotation10 + src21._rotation02 * src11._rotation20; __tmp__011 = src21._rotation00 * src11._rotation01 + src21._rotation01 * src11._rotation11 + src21._rotation02 * src11._rotation21; __tmp__021 = src21._rotation00 * src11._rotation02 + src21._rotation01 * src11._rotation12 + src21._rotation02 * src11._rotation22; __tmp__101 = src21._rotation10 * src11._rotation00 + src21._rotation11 * src11._rotation10 + src21._rotation12 * src11._rotation20; __tmp__111 = src21._rotation10 * src11._rotation01 + src21._rotation11 * src11._rotation11 + src21._rotation12 * src11._rotation21; __tmp__121 = src21._rotation10 * src11._rotation02 + src21._rotation11 * src11._rotation12 + src21._rotation12 * src11._rotation22; __tmp__201 = src21._rotation20 * src11._rotation00 + src21._rotation21 * src11._rotation10 + src21._rotation22 * src11._rotation20; __tmp__211 = src21._rotation20 * src11._rotation01 + src21._rotation21 * src11._rotation11 + src21._rotation22 * src11._rotation21; __tmp__221 = src21._rotation20 * src11._rotation02 + src21._rotation21 * src11._rotation12 + src21._rotation22 * src11._rotation22; dst1._rotation00 = __tmp__001; dst1._rotation01 = __tmp__011; dst1._rotation02 = __tmp__021; dst1._rotation10 = __tmp__101; dst1._rotation11 = __tmp__111; dst1._rotation12 = __tmp__121; dst1._rotation20 = __tmp__201; dst1._rotation21 = __tmp__211; dst1._rotation22 = __tmp__221; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = src21._rotation00 * src11._positionX + src21._rotation01 * src11._positionY + src21._rotation02 * src11._positionZ; __tmp__Y1 = src21._rotation10 * src11._positionX + src21._rotation11 * src11._positionY + src21._rotation12 * src11._positionZ; __tmp__Z1 = src21._rotation20 * src11._positionX + src21._rotation21 * src11._positionY + src21._rotation22 * src11._positionZ; dst1._positionX = __tmp__X1; dst1._positionY = __tmp__Y1; dst1._positionZ = __tmp__Z1; dst1._positionX += src21._positionX; dst1._positionY += src21._positionY; dst1._positionZ += src21._positionZ; var min; var minX; var minY; var minZ; var max; var maxX; var maxY; var maxZ; s._geom._computeAabb(s._aabb,s._ptransform); minX = s._aabb._minX; minY = s._aabb._minY; minZ = s._aabb._minZ; maxX = s._aabb._maxX; maxY = s._aabb._maxY; maxZ = s._aabb._maxZ; s._geom._computeAabb(s._aabb,s._transform); s._aabb._minX = minX < s._aabb._minX ? minX : s._aabb._minX; s._aabb._minY = minY < s._aabb._minY ? minY : s._aabb._minY; s._aabb._minZ = minZ < s._aabb._minZ ? minZ : s._aabb._minZ; s._aabb._maxX = maxX > s._aabb._maxX ? maxX : s._aabb._maxX; s._aabb._maxY = maxY > s._aabb._maxY ? maxY : s._aabb._maxY; s._aabb._maxZ = maxZ > s._aabb._maxZ ? maxZ : s._aabb._maxZ; if(s._proxy != null) { var d; var dX; var dY; var dZ; dX = s._transform._positionX - s._ptransform._positionX; dY = s._transform._positionY - s._ptransform._positionY; dZ = s._transform._positionZ - s._ptransform._positionZ; var v = s.displacement; v.x = dX; v.y = dY; v.z = dZ; s._rigidBody._world._broadPhase.moveProxy(s._proxy,s._aabb,s.displacement); } s = n; } } } getDensity() { return this._density; } setDensity(density) { this._density = density; if(this._rigidBody != null) { var _this = this._rigidBody; _this.updateMass(); var s = _this._shapeList; while(s != null) { var n = s._next; var dst = s._ptransform; var src1 = s._localTransform; var src2 = _this._ptransform; var __tmp__00; var __tmp__01; var __tmp__02; var __tmp__10; var __tmp__11; var __tmp__12; var __tmp__20; var __tmp__21; var __tmp__22; __tmp__00 = src2._rotation00 * src1._rotation00 + src2._rotation01 * src1._rotation10 + src2._rotation02 * src1._rotation20; __tmp__01 = src2._rotation00 * src1._rotation01 + src2._rotation01 * src1._rotation11 + src2._rotation02 * src1._rotation21; __tmp__02 = src2._rotation00 * src1._rotation02 + src2._rotation01 * src1._rotation12 + src2._rotation02 * src1._rotation22; __tmp__10 = src2._rotation10 * src1._rotation00 + src2._rotation11 * src1._rotation10 + src2._rotation12 * src1._rotation20; __tmp__11 = src2._rotation10 * src1._rotation01 + src2._rotation11 * src1._rotation11 + src2._rotation12 * src1._rotation21; __tmp__12 = src2._rotation10 * src1._rotation02 + src2._rotation11 * src1._rotation12 + src2._rotation12 * src1._rotation22; __tmp__20 = src2._rotation20 * src1._rotation00 + src2._rotation21 * src1._rotation10 + src2._rotation22 * src1._rotation20; __tmp__21 = src2._rotation20 * src1._rotation01 + src2._rotation21 * src1._rotation11 + src2._rotation22 * src1._rotation21; __tmp__22 = src2._rotation20 * src1._rotation02 + src2._rotation21 * src1._rotation12 + src2._rotation22 * src1._rotation22; dst._rotation00 = __tmp__00; dst._rotation01 = __tmp__01; dst._rotation02 = __tmp__02; dst._rotation10 = __tmp__10; dst._rotation11 = __tmp__11; dst._rotation12 = __tmp__12; dst._rotation20 = __tmp__20; dst._rotation21 = __tmp__21; dst._rotation22 = __tmp__22; var __tmp__X; var __tmp__Y; var __tmp__Z; __tmp__X = src2._rotation00 * src1._positionX + src2._rotation01 * src1._positionY + src2._rotation02 * src1._positionZ; __tmp__Y = src2._rotation10 * src1._positionX + src2._rotation11 * src1._positionY + src2._rotation12 * src1._positionZ; __tmp__Z = src2._rotation20 * src1._positionX + src2._rotation21 * src1._positionY + src2._rotation22 * src1._positionZ; dst._positionX = __tmp__X; dst._positionY = __tmp__Y; dst._positionZ = __tmp__Z; dst._positionX += src2._positionX; dst._positionY += src2._positionY; dst._positionZ += src2._positionZ; var dst1 = s._transform; var src11 = s._localTransform; var src21 = _this._transform; var __tmp__001; var __tmp__011; var __tmp__021; var __tmp__101; var __tmp__111; var __tmp__121; var __tmp__201; var __tmp__211; var __tmp__221; __tmp__001 = src21._rotation00 * src11._rotation00 + src21._rotation01 * src11._rotation10 + src21._rotation02 * src11._rotation20; __tmp__011 = src21._rotation00 * src11._rotation01 + src21._rotation01 * src11._rotation11 + src21._rotation02 * src11._rotation21; __tmp__021 = src21._rotation00 * src11._rotation02 + src21._rotation01 * src11._rotation12 + src21._rotation02 * src11._rotation22; __tmp__101 = src21._rotation10 * src11._rotation00 + src21._rotation11 * src11._rotation10 + src21._rotation12 * src11._rotation20; __tmp__111 = src21._rotation10 * src11._rotation01 + src21._rotation11 * src11._rotation11 + src21._rotation12 * src11._rotation21; __tmp__121 = src21._rotation10 * src11._rotation02 + src21._rotation11 * src11._rotation12 + src21._rotation12 * src11._rotation22; __tmp__201 = src21._rotation20 * src11._rotation00 + src21._rotation21 * src11._rotation10 + src21._rotation22 * src11._rotation20; __tmp__211 = src21._rotation20 * src11._rotation01 + src21._rotation21 * src11._rotation11 + src21._rotation22 * src11._rotation21; __tmp__221 = src21._rotation20 * src11._rotation02 + src21._rotation21 * src11._rotation12 + src21._rotation22 * src11._rotation22; dst1._rotation00 = __tmp__001; dst1._rotation01 = __tmp__011; dst1._rotation02 = __tmp__021; dst1._rotation10 = __tmp__101; dst1._rotation11 = __tmp__111; dst1._rotation12 = __tmp__121; dst1._rotation20 = __tmp__201; dst1._rotation21 = __tmp__211; dst1._rotation22 = __tmp__221; var __tmp__X1; var __tmp__Y1; var __tmp__Z1; __tmp__X1 = src21._rotation00 * src11._positionX + src21._rotation01 * src11._positionY + src21._rotation02 * src11._positionZ; __tmp__Y1 = src21._rotation10 * src11._positionX + src21._rotation11 * src11._positionY + src21._rotation12 * src11._positionZ; __tmp__Z1 = src21._rotation20 * src11._positionX + src21._rotation21 * src11._positionY + src21._rotation22 * src11._positionZ; dst1._positionX = __tmp__X1; dst1._positionY = __tmp__Y1; dst1._positionZ = __tmp__Z1; dst1._positionX += src21._positionX; dst1._positionY += src21._positionY; dst1._positionZ += src21._positionZ; var min; var minX; var minY; var minZ; var max; var maxX; var maxY; var maxZ; s._geom._computeAabb(s._aabb,s._ptransform); minX = s._aabb._minX; minY = s._aabb._minY; minZ = s._aabb._minZ; maxX = s._aabb._maxX; maxY = s._aabb._maxY; maxZ = s._aabb._maxZ; s._geom._computeAabb(s._aabb,s._transform); s._aabb._minX = minX < s._aabb._minX ? minX : s._aabb._minX; s._aabb._minY = minY < s._aabb._minY ? minY : s._aabb._minY; s._aabb._minZ = minZ < s._aabb._minZ ? minZ : s._aabb._minZ; s._aabb._maxX = maxX > s._aabb._maxX ? maxX : s._aabb._maxX; s._aabb._maxY = maxY > s._aabb._maxY ? maxY : s._aabb._maxY; s._aabb._maxZ = maxZ > s._aabb._maxZ ? maxZ : s._aabb._maxZ; if(s._proxy != null) { var d; var dX; var dY; var dZ; dX = s._transform._positionX - s._ptransform._positionX; dY = s._transform._positionY - s._ptransform._positionY; dZ = s._transform._positionZ - s._ptransform._positionZ; var v = s.displacement; v.x = dX; v.y = dY; v.z = dZ; s._rigidBody._world._broadPhase.moveProxy(s._proxy,s._aabb,s.displacement); } s = n; } } } getAabb() { return this._aabb.clone(); } getAabbTo(aabb) { aabb.copyFrom(this._aabb); } getGeometry() { return this._geom; } getRigidBody() { return this._rigidBody; } getCollisionGroup() { return this._collisionGroup; } setCollisionGroup(collisionGroup) { this._collisionGroup = collisionGroup; } getCollisionMask() { return this._collisionMask; } setCollisionMask(collisionMask) { this._collisionMask = collisionMask; } getContactCallback() { return this._contactCallback; } setContactCallback(callback) { this._contactCallback = callback; } getPrev() { return this._prev; } getNext() { return this._next; } } oimo.dynamics.rigidbody.ShapeConfig = class oimo_dynamics_rigidbody_ShapeConfig { constructor() { this.position = new oimo.common.Vec3(); this.rotation = new oimo.common.Mat3(); this.friction = oimo.common.Setting.defaultFriction; this.restitution = oimo.common.Setting.defaultRestitution; this.density = oimo.common.Setting.defaultDensity; this.collisionGroup = oimo.common.Setting.defaultCollisionGroup; this.collisionMask = oimo.common.Setting.defaultCollisionMask; this.geometry = null; this.contactCallback = null; } } if(!oimo.m) oimo.m = {}; oimo.m.M = class oimo_m_M { } oimo.collision.broadphase.BroadPhaseType._BRUTE_FORCE = 1; oimo.collision.broadphase.BroadPhaseType._BVH = 2; oimo.collision.broadphase.BroadPhaseType.BRUTE_FORCE = 1; oimo.collision.broadphase.BroadPhaseType.BVH = 2; oimo.collision.broadphase.bvh.BvhInsertionStrategy.SIMPLE = 0; oimo.collision.broadphase.bvh.BvhInsertionStrategy.MINIMIZE_SURFACE_AREA = 1; oimo.collision.geometry.GeometryType._SPHERE = 0; oimo.collision.geometry.GeometryType._BOX = 1; oimo.collision.geometry.GeometryType._CYLINDER = 2; oimo.collision.geometry.GeometryType._CONE = 3; oimo.collision.geometry.GeometryType._CAPSULE = 4; oimo.collision.geometry.GeometryType._CONVEX_HULL = 5; oimo.collision.geometry.GeometryType._CONVEX_MIN = 0; oimo.collision.geometry.GeometryType._CONVEX_MAX = 5; oimo.collision.geometry.GeometryType.SPHERE = 0; oimo.collision.geometry.GeometryType.BOX = 1; oimo.collision.geometry.GeometryType.CYLINDER = 2; oimo.collision.geometry.GeometryType.CONE = 3; oimo.collision.geometry.GeometryType.CAPSULE = 4; oimo.collision.geometry.GeometryType.CONVEX_HULL = 5; oimo.collision.narrowphase.detector.BoxBoxDetector.EDGE_BIAS_MULT = 1.0; oimo.collision.narrowphase.detector.gjkepa.EpaPolyhedronState.OK = 0; oimo.collision.narrowphase.detector.gjkepa.EpaPolyhedronState.INVALID_TRIANGLE = 1; oimo.collision.narrowphase.detector.gjkepa.EpaPolyhedronState.NO_ADJACENT_PAIR_INDEX = 2; oimo.collision.narrowphase.detector.gjkepa.EpaPolyhedronState.NO_ADJACENT_TRIANGLE = 3; oimo.collision.narrowphase.detector.gjkepa.EpaPolyhedronState.EDGE_LOOP_BROKEN = 4; oimo.collision.narrowphase.detector.gjkepa.EpaPolyhedronState.NO_OUTER_TRIANGLE = 5; oimo.collision.narrowphase.detector.gjkepa.EpaPolyhedronState.TRIANGLE_INVISIBLE = 6; oimo.collision.narrowphase.detector.gjkepa.EpaTriangle.count = 0; oimo.common.Vec3.numCreations = 0; oimo.common.Setting.defaultFriction = 0.2; oimo.common.Setting.defaultRestitution = 0.2; oimo.common.Setting.defaultDensity = 1; oimo.common.Setting.defaultCollisionGroup = 1; oimo.common.Setting.defaultCollisionMask = 1; oimo.common.Setting.maxTranslationPerStep = 20; oimo.common.Setting.maxRotationPerStep = 3.14159265358979; oimo.common.Setting.bvhProxyPadding = 0.1; oimo.common.Setting.bvhIncrementalCollisionThreshold = 0.45; oimo.common.Setting.defaultGJKMargin = 0.05; oimo.common.Setting.enableGJKCaching = true; oimo.common.Setting.maxEPAVertices = 128; oimo.common.Setting.maxEPAPolyhedronFaces = 128; oimo.common.Setting.contactEnableBounceThreshold = 0.5; oimo.common.Setting.velocityBaumgarte = 0.2; oimo.common.Setting.positionSplitImpulseBaumgarte = 0.4; oimo.common.Setting.positionNgsBaumgarte = 1.0; oimo.common.Setting.contactUseAlternativePositionCorrectionAlgorithmDepthThreshold = 0.05; oimo.common.Setting.defaultContactPositionCorrectionAlgorithm = 0; oimo.common.Setting.alternativeContactPositionCorrectionAlgorithm = 1; oimo.common.Setting.contactPersistenceThreshold = 0.05; oimo.common.Setting.maxManifoldPoints = 4; oimo.common.Setting.defaultJointConstraintSolverType = 0; oimo.common.Setting.defaultJointPositionCorrectionAlgorithm = 0; oimo.common.Setting.jointWarmStartingFactorForBaungarte = 0.8; oimo.common.Setting.jointWarmStartingFactor = 0.95; oimo.common.Setting.minSpringDamperDampingRatio = 1e-6; oimo.common.Setting.minRagdollMaxSwingAngle = 1e-6; oimo.common.Setting.maxJacobianRows = 6; oimo.common.Setting.directMlcpSolverEps = 1e-9; oimo.common.Setting.islandInitialRigidBodyArraySize = 128; oimo.common.Setting.islandInitialConstraintArraySize = 128; oimo.common.Setting.sleepingVelocityThreshold = 0.2; oimo.common.Setting.sleepingAngularVelocityThreshold = 0.5; oimo.common.Setting.sleepingTimeThreshold = 1.0; oimo.common.Setting.disableSleeping = false; oimo.common.Setting.linearSlop = 0.005; oimo.common.Setting.angularSlop = 0.0174532925199432781; oimo.collision.narrowphase.detector.gjkepa.GjkEpa.instance = new oimo.collision.narrowphase.detector.gjkepa.GjkEpa(); oimo.collision.narrowphase.detector.gjkepa.GjkEpaResultState._SUCCEEDED = 0; oimo.collision.narrowphase.detector.gjkepa.GjkEpaResultState._GJK_FAILED_TO_MAKE_TETRAHEDRON = 1; oimo.collision.narrowphase.detector.gjkepa.GjkEpaResultState._GJK_DID_NOT_CONVERGE = 2; oimo.collision.narrowphase.detector.gjkepa.GjkEpaResultState._EPA_FAILED_TO_INIT = 257; oimo.collision.narrowphase.detector.gjkepa.GjkEpaResultState._EPA_FAILED_TO_ADD_VERTEX = 258; oimo.collision.narrowphase.detector.gjkepa.GjkEpaResultState._EPA_DID_NOT_CONVERGE = 259; oimo.collision.narrowphase.detector.gjkepa.GjkEpaResultState.SUCCEEDED = 0; oimo.collision.narrowphase.detector.gjkepa.GjkEpaResultState.GJK_FAILED_TO_MAKE_TETRAHEDRON = 1; oimo.collision.narrowphase.detector.gjkepa.GjkEpaResultState.GJK_DID_NOT_CONVERGE = 2; oimo.collision.narrowphase.detector.gjkepa.GjkEpaResultState.EPA_FAILED_TO_INIT = 257; oimo.collision.narrowphase.detector.gjkepa.GjkEpaResultState.EPA_FAILED_TO_ADD_VERTEX = 258; oimo.collision.narrowphase.detector.gjkepa.GjkEpaResultState.EPA_DID_NOT_CONVERGE = 259; oimo.common.Mat3.numCreations = 0; oimo.common.Mat4.numCreations = 0; oimo.common.MathUtil.POSITIVE_INFINITY = 1e65536; oimo.common.MathUtil.NEGATIVE_INFINITY = -1e65536; oimo.common.MathUtil.PI = 3.14159265358979; oimo.common.MathUtil.TWO_PI = 6.28318530717958; oimo.common.MathUtil.HALF_PI = 1.570796326794895; oimo.common.MathUtil.TO_RADIANS = 0.0174532925199432781; oimo.common.MathUtil.TO_DEGREES = 57.2957795130823797; oimo.common.Quat.numCreations = 0; oimo.dynamics.common.DebugDraw.SPHERE_PHI_DIVISION = 8; oimo.dynamics.common.DebugDraw.SPHERE_THETA_DIVISION = 4; oimo.dynamics.common.DebugDraw.CIRCLE_THETA_DIVISION = 8; oimo.dynamics.common.Performance.broadPhaseCollisionTime = 0; oimo.dynamics.common.Performance.narrowPhaseCollisionTime = 0; oimo.dynamics.common.Performance.dynamicsTime = 0; oimo.dynamics.common.Performance.totalTime = 0; oimo.dynamics.constraint.PositionCorrectionAlgorithm._BAUMGARTE = 0; oimo.dynamics.constraint.PositionCorrectionAlgorithm._SPLIT_IMPULSE = 1; oimo.dynamics.constraint.PositionCorrectionAlgorithm._NGS = 2; oimo.dynamics.constraint.PositionCorrectionAlgorithm.BAUMGARTE = 0; oimo.dynamics.constraint.PositionCorrectionAlgorithm.SPLIT_IMPULSE = 1; oimo.dynamics.constraint.PositionCorrectionAlgorithm.NGS = 2; oimo.dynamics.constraint.info.JacobianRow.BIT_LINEAR_SET = 1; oimo.dynamics.constraint.info.JacobianRow.BIT_ANGULAR_SET = 2; oimo.dynamics.constraint.joint.JointType._SPHERICAL = 0; oimo.dynamics.constraint.joint.JointType._REVOLUTE = 1; oimo.dynamics.constraint.joint.JointType._CYLINDRICAL = 2; oimo.dynamics.constraint.joint.JointType._PRISMATIC = 3; oimo.dynamics.constraint.joint.JointType._UNIVERSAL = 4; oimo.dynamics.constraint.joint.JointType._RAGDOLL = 5; oimo.dynamics.constraint.joint.JointType._GENERIC = 6; oimo.dynamics.constraint.joint.JointType.SPHERICAL = 0; oimo.dynamics.constraint.joint.JointType.REVOLUTE = 1; oimo.dynamics.constraint.joint.JointType.CYLINDRICAL = 2; oimo.dynamics.constraint.joint.JointType.PRISMATIC = 3; oimo.dynamics.constraint.joint.JointType.UNIVERSAL = 4; oimo.dynamics.constraint.joint.JointType.RAGDOLL = 5; oimo.dynamics.constraint.joint.JointType.GENERIC = 6; oimo.dynamics.constraint.solver.ConstraintSolverType._ITERATIVE = 0; oimo.dynamics.constraint.solver.ConstraintSolverType._DIRECT = 1; oimo.dynamics.constraint.solver.ConstraintSolverType.ITERATIVE = 0; oimo.dynamics.constraint.solver.ConstraintSolverType.DIRECT = 1; oimo.dynamics.rigidbody.RigidBodyType._DYNAMIC = 0; oimo.dynamics.rigidbody.RigidBodyType._STATIC = 1; oimo.dynamics.rigidbody.RigidBodyType._KINEMATIC = 2; oimo.dynamics.rigidbody.RigidBodyType.DYNAMIC = 0; oimo.dynamics.rigidbody.RigidBodyType.STATIC = 1; oimo.dynamics.rigidbody.RigidBodyType.KINEMATIC = 2; export {oimo};