Section 1
//b2CircleDef (Box2D.Collision.Shapes.b2CircleDef)
package Box2D.Collision.Shapes {
import Box2D.Common.Math.*;
public class b2CircleDef extends b2ShapeDef {
public var localPosition:b2Vec2;
public var radius:Number;
public function b2CircleDef(){
localPosition = new b2Vec2(0, 0);
super();
type = b2Shape.e_circleShape;
radius = 1;
}
}
}//package Box2D.Collision.Shapes
Section 2
//b2CircleShape (Box2D.Collision.Shapes.b2CircleShape)
package Box2D.Collision.Shapes {
import Box2D.Common.Math.*;
import Box2D.Collision.*;
import Box2D.Common.*;
public class b2CircleShape extends b2Shape {
b2internal var m_localPosition:b2Vec2;
b2internal var m_radius:Number;
public function b2CircleShape(_arg1:b2ShapeDef){
var _local2:b2CircleDef;
m_localPosition = new b2Vec2();
super(_arg1);
_local2 = (_arg1 as b2CircleDef);
m_type = e_circleShape;
m_localPosition.SetV(_local2.localPosition);
m_radius = _local2.radius;
}
override public function ComputeSubmergedArea(_arg1:b2Vec2, _arg2:Number, _arg3:b2XForm, _arg4:b2Vec2):Number{
var _local5:b2Vec2;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
_local5 = b2Math.b2MulX(_arg3, m_localPosition);
_local6 = -((b2Math.b2Dot(_arg1, _local5) - _arg2));
if (_local6 < (-(m_radius) + Number.MIN_VALUE)){
return (0);
};
if (_local6 > m_radius){
_arg4.SetV(_local5);
return (((Math.PI * m_radius) * m_radius));
};
_local7 = (m_radius * m_radius);
_local8 = (_local6 * _local6);
_local9 = ((_local7 * (Math.asin((_local6 / m_radius)) + (Math.PI / 2))) + (_local6 * Math.sqrt((_local7 - _local8))));
_local10 = (((-2 / 3) * Math.pow((_local7 - _local8), 1.5)) / _local9);
_arg4.x = (_local5.x + (_arg1.x * _local10));
_arg4.y = (_local5.y + (_arg1.y * _local10));
return (_local9);
}
override public function ComputeMass(_arg1:b2MassData):void{
_arg1.mass = (((m_density * b2Settings.b2_pi) * m_radius) * m_radius);
_arg1.center.SetV(m_localPosition);
_arg1.I = (_arg1.mass * (((0.5 * m_radius) * m_radius) + ((m_localPosition.x * m_localPosition.x) + (m_localPosition.y * m_localPosition.y))));
}
override public function ComputeAABB(_arg1:b2AABB, _arg2:b2XForm):void{
var _local3:b2Mat22;
var _local4:Number;
var _local5:Number;
_local3 = _arg2.R;
_local4 = (_arg2.position.x + ((_local3.col1.x * m_localPosition.x) + (_local3.col2.x * m_localPosition.y)));
_local5 = (_arg2.position.y + ((_local3.col1.y * m_localPosition.x) + (_local3.col2.y * m_localPosition.y)));
_arg1.lowerBound.Set((_local4 - m_radius), (_local5 - m_radius));
_arg1.upperBound.Set((_local4 + m_radius), (_local5 + m_radius));
}
override public function ComputeSweptAABB(_arg1:b2AABB, _arg2:b2XForm, _arg3:b2XForm):void{
var _local4:b2Mat22;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
_local4 = _arg2.R;
_local5 = (_arg2.position.x + ((_local4.col1.x * m_localPosition.x) + (_local4.col2.x * m_localPosition.y)));
_local6 = (_arg2.position.y + ((_local4.col1.y * m_localPosition.x) + (_local4.col2.y * m_localPosition.y)));
_local4 = _arg3.R;
_local7 = (_arg3.position.x + ((_local4.col1.x * m_localPosition.x) + (_local4.col2.x * m_localPosition.y)));
_local8 = (_arg3.position.y + ((_local4.col1.y * m_localPosition.x) + (_local4.col2.y * m_localPosition.y)));
_arg1.lowerBound.Set((((_local5 < _local7)) ? _local5 : _local7 - m_radius), (((_local6 < _local8)) ? _local6 : _local8 - m_radius));
_arg1.upperBound.Set((((_local5 > _local7)) ? _local5 : _local7 + m_radius), (((_local6 > _local8)) ? _local6 : _local8 + m_radius));
}
public function GetLocalPosition():b2Vec2{
return (m_localPosition);
}
override public function TestPoint(_arg1:b2XForm, _arg2:b2Vec2):Boolean{
var _local3:b2Mat22;
var _local4:Number;
var _local5:Number;
_local3 = _arg1.R;
_local4 = (_arg1.position.x + ((_local3.col1.x * m_localPosition.x) + (_local3.col2.x * m_localPosition.y)));
_local5 = (_arg1.position.y + ((_local3.col1.y * m_localPosition.x) + (_local3.col2.y * m_localPosition.y)));
_local4 = (_arg2.x - _local4);
_local5 = (_arg2.y - _local5);
return ((((_local4 * _local4) + (_local5 * _local5)) <= (m_radius * m_radius)));
}
override public function TestSegment(_arg1:b2XForm, _arg2:Array, _arg3:b2Vec2, _arg4:b2Segment, _arg5:Number):int{
var _local6:b2Mat22;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
_local6 = _arg1.R;
_local7 = (_arg1.position.x + ((_local6.col1.x * m_localPosition.x) + (_local6.col2.x * m_localPosition.y)));
_local8 = (_arg1.position.y + ((_local6.col1.y * m_localPosition.x) + (_local6.col2.y * m_localPosition.y)));
_local9 = (_arg4.p1.x - _local7);
_local10 = (_arg4.p1.y - _local8);
_local11 = (((_local9 * _local9) + (_local10 * _local10)) - (m_radius * m_radius));
if (_local11 < 0){
_arg2[0] = 0;
return (e_startsInsideCollide);
};
_local12 = (_arg4.p2.x - _arg4.p1.x);
_local13 = (_arg4.p2.y - _arg4.p1.y);
_local14 = ((_local9 * _local12) + (_local10 * _local13));
_local15 = ((_local12 * _local12) + (_local13 * _local13));
_local16 = ((_local14 * _local14) - (_local15 * _local11));
if ((((_local16 < 0)) || ((_local15 < Number.MIN_VALUE)))){
return (e_missCollide);
};
_local17 = -((_local14 + Math.sqrt(_local16)));
if ((((0 <= _local17)) && ((_local17 <= (_arg5 * _local15))))){
_local17 = (_local17 / _local15);
_arg2[0] = _local17;
_arg3.x = (_local9 + (_local17 * _local12));
_arg3.y = (_local10 + (_local17 * _local13));
_arg3.Normalize();
return (e_hitCollide);
};
return (e_missCollide);
}
public function GetRadius():Number{
return (m_radius);
}
override b2internal function UpdateSweepRadius(_arg1:b2Vec2):void{
var _local2:Number;
var _local3:Number;
_local2 = (m_localPosition.x - _arg1.x);
_local3 = (m_localPosition.y - _arg1.y);
_local2 = Math.sqrt(((_local2 * _local2) + (_local3 * _local3)));
m_sweepRadius = ((_local2 + m_radius) - b2Settings.b2_toiSlop);
}
}
}//package Box2D.Collision.Shapes
Section 3
//b2EdgeChainDef (Box2D.Collision.Shapes.b2EdgeChainDef)
package Box2D.Collision.Shapes {
public class b2EdgeChainDef extends b2ShapeDef {
public var isALoop:Boolean;
public var vertexCount:int;
public var vertices:Array;
public function b2EdgeChainDef(){
type = b2Shape.e_edgeShape;
vertexCount = 0;
isALoop = true;
vertices = [];
}
}
}//package Box2D.Collision.Shapes
Section 4
//b2EdgeShape (Box2D.Collision.Shapes.b2EdgeShape)
package Box2D.Collision.Shapes {
import Box2D.Common.Math.*;
import Box2D.Collision.*;
import Box2D.Common.*;
public class b2EdgeShape extends b2Shape {
b2internal var m_v2:b2Vec2;
b2internal var m_v1:b2Vec2;
b2internal var m_coreV1:b2Vec2;
private var s_supportVec:b2Vec2;
b2internal var m_coreV2:b2Vec2;
b2internal var m_length:Number;
b2internal var m_cornerConvex1:Boolean;
b2internal var m_cornerConvex2:Boolean;
b2internal var m_direction:b2Vec2;
b2internal var m_cornerDir1:b2Vec2;
b2internal var m_cornerDir2:b2Vec2;
b2internal var m_nextEdge:b2EdgeShape;
b2internal var m_prevEdge:b2EdgeShape;
b2internal var m_normal:b2Vec2;
public function b2EdgeShape(_arg1:b2Vec2, _arg2:b2Vec2, _arg3:b2ShapeDef){
s_supportVec = new b2Vec2();
m_v1 = new b2Vec2();
m_v2 = new b2Vec2();
m_coreV1 = new b2Vec2();
m_coreV2 = new b2Vec2();
m_normal = new b2Vec2();
m_direction = new b2Vec2();
m_cornerDir1 = new b2Vec2();
m_cornerDir2 = new b2Vec2();
super(_arg3);
m_type = e_edgeShape;
m_prevEdge = null;
m_nextEdge = null;
m_v1 = _arg1;
m_v2 = _arg2;
m_direction.Set((m_v2.x - m_v1.x), (m_v2.y - m_v1.y));
m_length = m_direction.Normalize();
m_normal.Set(m_direction.y, -(m_direction.x));
m_coreV1.Set(((-(b2Settings.b2_toiSlop) * (m_normal.x - m_direction.x)) + m_v1.x), ((-(b2Settings.b2_toiSlop) * (m_normal.y - m_direction.y)) + m_v1.y));
m_coreV2.Set(((-(b2Settings.b2_toiSlop) * (m_normal.x + m_direction.x)) + m_v2.x), ((-(b2Settings.b2_toiSlop) * (m_normal.y + m_direction.y)) + m_v2.y));
m_cornerDir1 = m_normal;
m_cornerDir2.Set(-(m_normal.x), -(m_normal.y));
}
override public function TestPoint(_arg1:b2XForm, _arg2:b2Vec2):Boolean{
return (false);
}
public function GetCorner2Vector():b2Vec2{
return (m_cornerDir2);
}
public function GetDirectionVector():b2Vec2{
return (m_direction);
}
override public function TestSegment(_arg1:b2XForm, _arg2:Array, _arg3:b2Vec2, _arg4:b2Segment, _arg5:Number):int{
var _local6:b2Mat22;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
_local7 = (_arg4.p2.x - _arg4.p1.x);
_local8 = (_arg4.p2.y - _arg4.p1.y);
_local6 = _arg1.R;
_local9 = (_arg1.position.x + ((_local6.col1.x * m_v1.x) + (_local6.col2.x * m_v1.y)));
_local10 = (_arg1.position.y + ((_local6.col1.y * m_v1.x) + (_local6.col2.y * m_v1.y)));
_local11 = ((_arg1.position.y + ((_local6.col1.y * m_v2.x) + (_local6.col2.y * m_v2.y))) - _local10);
_local12 = -(((_arg1.position.x + ((_local6.col1.x * m_v2.x) + (_local6.col2.x * m_v2.y))) - _local9));
_local13 = (100 * Number.MIN_VALUE);
_local14 = -(((_local7 * _local11) + (_local8 * _local12)));
if (_local14 > _local13){
_local15 = (_arg4.p1.x - _local9);
_local16 = (_arg4.p1.y - _local10);
_local17 = ((_local15 * _local11) + (_local16 * _local12));
if ((((0 <= _local17)) && ((_local17 <= (_arg5 * _local14))))){
_local18 = ((-(_local7) * _local16) + (_local8 * _local15));
if (((((-(_local13) * _local14) <= _local18)) && ((_local18 <= (_local14 * (1 + _local13)))))){
_local17 = (_local17 / _local14);
_arg2[0] = _local17;
_local19 = Math.sqrt(((_local11 * _local11) + (_local12 * _local12)));
_arg3.x = (_local11 / _local19);
_arg3.y = (_local12 / _local19);
return (e_hitCollide);
};
};
};
return (e_missCollide);
}
public function GetNextEdge():b2EdgeShape{
return (m_nextEdge);
}
override public function ComputeMass(_arg1:b2MassData):void{
_arg1.mass = 0;
_arg1.center.SetV(m_v1);
_arg1.I = 0;
}
public function Corner1IsConvex():Boolean{
return (m_cornerConvex1);
}
public function Corner2IsConvex():Boolean{
return (m_cornerConvex2);
}
public function Support(_arg1:b2XForm, _arg2:Number, _arg3:Number):b2Vec2{
var _local4:b2Mat22;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
_local4 = _arg1.R;
_local5 = (_arg1.position.x + ((_local4.col1.x * m_coreV1.x) + (_local4.col2.x * m_coreV1.y)));
_local6 = (_arg1.position.y + ((_local4.col1.y * m_coreV1.x) + (_local4.col2.y * m_coreV1.y)));
_local7 = (_arg1.position.x + ((_local4.col1.x * m_coreV2.x) + (_local4.col2.x * m_coreV2.y)));
_local8 = (_arg1.position.y + ((_local4.col1.y * m_coreV2.x) + (_local4.col2.y * m_coreV2.y)));
if (((_local5 * _arg2) + (_local6 * _arg3)) > ((_local7 * _arg2) + (_local8 * _arg3))){
s_supportVec.x = _local5;
s_supportVec.y = _local6;
} else {
s_supportVec.x = _local7;
s_supportVec.y = _local8;
};
return (s_supportVec);
}
b2internal function SetNextEdge(_arg1:b2EdgeShape, _arg2:b2Vec2, _arg3:b2Vec2, _arg4:Boolean):void{
m_nextEdge = _arg1;
m_coreV2 = _arg2;
m_cornerDir2 = _arg3;
m_cornerConvex2 = _arg4;
}
public function GetLength():Number{
return (m_length);
}
override public function ComputeSubmergedArea(_arg1:b2Vec2, _arg2:Number, _arg3:b2XForm, _arg4:b2Vec2):Number{
var _local5:b2Vec2;
var _local6:b2Vec2;
var _local7:b2Vec2;
var _local8:Number;
var _local9:Number;
_local5 = new b2Vec2((_arg1.x * _arg2), (_arg1.y * _arg2));
_local6 = b2Math.b2MulX(_arg3, m_v1);
_local7 = b2Math.b2MulX(_arg3, m_v2);
_local8 = (b2Math.b2Dot(_arg1, _local6) - _arg2);
_local9 = (b2Math.b2Dot(_arg1, _local7) - _arg2);
if (_local8 > 0){
if (_local9 > 0){
return (0);
};
_local6.x = (((-(_local9) / (_local8 - _local9)) * _local6.x) + ((_local8 / (_local8 - _local9)) * _local7.x));
_local6.y = (((-(_local9) / (_local8 - _local9)) * _local6.y) + ((_local8 / (_local8 - _local9)) * _local7.y));
} else {
if (_local9 > 0){
_local7.x = (((-(_local9) / (_local8 - _local9)) * _local6.x) + ((_local8 / (_local8 - _local9)) * _local7.x));
_local7.y = (((-(_local9) / (_local8 - _local9)) * _local6.y) + ((_local8 / (_local8 - _local9)) * _local7.y));
};
};
_arg4.x = (((_local5.x + _local6.x) + _local7.x) / 3);
_arg4.y = (((_local5.y + _local6.y) + _local7.y) / 3);
return ((0.5 * (((_local6.x - _local5.x) * (_local7.y - _local5.y)) - ((_local6.y - _local5.y) * (_local7.x - _local5.x)))));
}
override public function ComputeSweptAABB(_arg1:b2AABB, _arg2:b2XForm, _arg3:b2XForm):void{
var _local4:b2Mat22;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
_local4 = _arg2.R;
_local5 = (_arg2.position.x + ((_local4.col1.x * m_v1.x) + (_local4.col2.x * m_v1.y)));
_local6 = (_arg2.position.y + ((_local4.col1.y * m_v1.x) + (_local4.col2.y * m_v1.y)));
_local7 = (_arg2.position.x + ((_local4.col1.x * m_v2.x) + (_local4.col2.x * m_v2.y)));
_local8 = (_arg2.position.y + ((_local4.col1.y * m_v2.x) + (_local4.col2.y * m_v2.y)));
_local4 = _arg3.R;
_local9 = (_arg3.position.x + ((_local4.col1.x * m_v1.x) + (_local4.col2.x * m_v1.y)));
_local10 = (_arg3.position.y + ((_local4.col1.y * m_v1.x) + (_local4.col2.y * m_v1.y)));
_local11 = (_arg3.position.x + ((_local4.col1.x * m_v2.x) + (_local4.col2.x * m_v2.y)));
_local12 = (_arg3.position.y + ((_local4.col1.y * m_v2.x) + (_local4.col2.y * m_v2.y)));
_arg1.lowerBound.x = ((((((_local5 < _local7)) ? _local5 : _local7 < _local9)) ? ((_local5 < _local7)) ? _local5 : _local7 : _local9 < _local11)) ? ((((_local5 < _local7)) ? _local5 : _local7 < _local9)) ? ((_local5 < _local7)) ? _local5 : _local7 : _local9 : _local11;
_arg1.lowerBound.y = ((((((_local6 < _local8)) ? _local6 : _local8 < _local10)) ? ((_local6 < _local8)) ? _local6 : _local8 : _local10 < _local12)) ? ((((_local6 < _local8)) ? _local6 : _local8 < _local10)) ? ((_local6 < _local8)) ? _local6 : _local8 : _local10 : _local12;
_arg1.upperBound.x = ((((((_local5 > _local7)) ? _local5 : _local7 > _local9)) ? ((_local5 > _local7)) ? _local5 : _local7 : _local9 > _local11)) ? ((((_local5 > _local7)) ? _local5 : _local7 > _local9)) ? ((_local5 > _local7)) ? _local5 : _local7 : _local9 : _local11;
_arg1.upperBound.y = ((((((_local6 > _local8)) ? _local6 : _local8 > _local10)) ? ((_local6 > _local8)) ? _local6 : _local8 : _local10 > _local12)) ? ((((_local6 > _local8)) ? _local6 : _local8 > _local10)) ? ((_local6 > _local8)) ? _local6 : _local8 : _local10 : _local12;
}
public function GetCoreVertex1():b2Vec2{
return (m_coreV1);
}
public function GetCoreVertex2():b2Vec2{
return (m_coreV2);
}
public function GetFirstVertex(_arg1:b2XForm):b2Vec2{
var _local2:b2Mat22;
_local2 = _arg1.R;
return (new b2Vec2((_arg1.position.x + ((_local2.col1.x * m_coreV1.x) + (_local2.col2.x * m_coreV1.y))), (_arg1.position.y + ((_local2.col1.y * m_coreV1.x) + (_local2.col2.y * m_coreV1.y)))));
}
public function GetNormalVector():b2Vec2{
return (m_normal);
}
public function GetCorner1Vector():b2Vec2{
return (m_cornerDir1);
}
public function GetPrevEdge():b2EdgeShape{
return (m_prevEdge);
}
b2internal function SetPrevEdge(_arg1:b2EdgeShape, _arg2:b2Vec2, _arg3:b2Vec2, _arg4:Boolean):void{
m_prevEdge = _arg1;
m_coreV1 = _arg2;
m_cornerDir1 = _arg3;
m_cornerConvex1 = _arg4;
}
override b2internal function UpdateSweepRadius(_arg1:b2Vec2):void{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
_local2 = (m_coreV1.x - _arg1.x);
_local3 = (m_coreV1.y - _arg1.y);
_local4 = ((_local2 * _local2) + (_local3 * _local3));
_local2 = (m_coreV2.x - _arg1.x);
_local3 = (m_coreV2.y - _arg1.y);
_local5 = ((_local2 * _local2) + (_local3 * _local3));
m_sweepRadius = Math.sqrt(((_local4 > _local5)) ? _local4 : _local5);
}
override public function ComputeAABB(_arg1:b2AABB, _arg2:b2XForm):void{
var _local3:b2Mat22;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
_local3 = _arg2.R;
_local4 = (_arg2.position.x + ((_local3.col1.x * m_v1.x) + (_local3.col2.x * m_v1.y)));
_local5 = (_arg2.position.y + ((_local3.col1.y * m_v1.x) + (_local3.col2.y * m_v1.y)));
_local6 = (_arg2.position.x + ((_local3.col1.x * m_v2.x) + (_local3.col2.x * m_v2.y)));
_local7 = (_arg2.position.y + ((_local3.col1.y * m_v2.x) + (_local3.col2.y * m_v2.y)));
if (_local4 < _local6){
_arg1.lowerBound.x = _local4;
_arg1.upperBound.x = _local6;
} else {
_arg1.lowerBound.x = _local6;
_arg1.upperBound.x = _local4;
};
if (_local5 < _local7){
_arg1.lowerBound.y = _local5;
_arg1.upperBound.y = _local7;
} else {
_arg1.lowerBound.y = _local7;
_arg1.upperBound.y = _local5;
};
}
public function GetVertex2():b2Vec2{
return (m_v2);
}
public function GetVertex1():b2Vec2{
return (m_v1);
}
}
}//package Box2D.Collision.Shapes
Section 5
//b2FilterData (Box2D.Collision.Shapes.b2FilterData)
package Box2D.Collision.Shapes {
public class b2FilterData {
public var maskBits:uint;// = 0xFFFF
public var groupIndex:int;// = 0
public var categoryBits:uint;// = 1
public function b2FilterData(){
categoryBits = 1;
maskBits = 0xFFFF;
groupIndex = 0;
super();
}
public function Copy():b2FilterData{
var _local1:b2FilterData;
_local1 = new b2FilterData();
_local1.categoryBits = categoryBits;
_local1.maskBits = maskBits;
_local1.groupIndex = groupIndex;
return (_local1);
}
}
}//package Box2D.Collision.Shapes
Section 6
//b2MassData (Box2D.Collision.Shapes.b2MassData)
package Box2D.Collision.Shapes {
import Box2D.Common.Math.*;
public class b2MassData {
public var mass:Number;// = 0
public var center:b2Vec2;
public var I:Number;// = 0
public function b2MassData(){
mass = 0;
center = new b2Vec2(0, 0);
I = 0;
super();
}
}
}//package Box2D.Collision.Shapes
Section 7
//b2PolygonDef (Box2D.Collision.Shapes.b2PolygonDef)
package Box2D.Collision.Shapes {
import Box2D.Common.Math.*;
import Box2D.Common.*;
public class b2PolygonDef extends b2ShapeDef {
public var vertexCount:int;
public var vertices:Array;
private static var s_mat:b2Mat22 = new b2Mat22();
public function b2PolygonDef(){
var _local1:int;
vertices = new Array(b2Settings.b2_maxPolygonVertices);
super();
type = b2Shape.e_polygonShape;
vertexCount = 0;
_local1 = 0;
while (_local1 < b2Settings.b2_maxPolygonVertices) {
vertices[_local1] = new b2Vec2();
_local1++;
};
}
public function SetAsOrientedBox(_arg1:Number, _arg2:Number, _arg3:b2Vec2=null, _arg4:Number=0):void{
var _local5:b2Vec2;
var _local6:b2Mat22;
var _local7:int;
vertexCount = 4;
vertices[0].Set(-(_arg1), -(_arg2));
vertices[1].Set(_arg1, -(_arg2));
vertices[2].Set(_arg1, _arg2);
vertices[3].Set(-(_arg1), _arg2);
if (_arg3){
_local5 = _arg3;
_local6 = s_mat;
_local6.Set(_arg4);
_local7 = 0;
while (_local7 < vertexCount) {
_arg3 = vertices[_local7];
_arg1 = (_local5.x + ((_local6.col1.x * _arg3.x) + (_local6.col2.x * _arg3.y)));
_arg3.y = (_local5.y + ((_local6.col1.y * _arg3.x) + (_local6.col2.y * _arg3.y)));
_arg3.x = _arg1;
_local7++;
};
};
}
public function SetAsBox(_arg1:Number, _arg2:Number):void{
vertexCount = 4;
vertices[0].Set(-(_arg1), -(_arg2));
vertices[1].Set(_arg1, -(_arg2));
vertices[2].Set(_arg1, _arg2);
vertices[3].Set(-(_arg1), _arg2);
}
}
}//package Box2D.Collision.Shapes
Section 8
//b2PolygonShape (Box2D.Collision.Shapes.b2PolygonShape)
package Box2D.Collision.Shapes {
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
import Box2D.Collision.*;
import Box2D.Common.*;
public class b2PolygonShape extends b2Shape {
b2internal var m_vertices:Array;
private var s_supportVec:b2Vec2;
b2internal var m_normals:Array;
private var m_obb:b2OBB;
private var m_coreVertices:Array;
b2internal var m_centroid:b2Vec2;
b2internal var m_vertexCount:int;
private static var s_computeMat:b2Mat22 = new b2Mat22();
private static var s_sweptAABB1:b2AABB = new b2AABB();
private static var s_sweptAABB2:b2AABB = new b2AABB();
public function b2PolygonShape(_arg1:b2ShapeDef){
var _local2:b2PolygonDef;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
s_supportVec = new b2Vec2();
m_obb = new b2OBB();
m_vertices = new Array(b2Settings.b2_maxPolygonVertices);
m_normals = new Array(b2Settings.b2_maxPolygonVertices);
m_coreVertices = new Array(b2Settings.b2_maxPolygonVertices);
super(_arg1);
m_type = e_polygonShape;
_local2 = (_arg1 as b2PolygonDef);
m_vertexCount = _local2.vertexCount;
_local4 = _local3;
_local5 = _local3;
_local3 = 0;
while (_local3 < m_vertexCount) {
m_vertices[_local3] = _local2.vertices[_local3].Copy();
_local3++;
};
_local3 = 0;
while (_local3 < m_vertexCount) {
_local4 = _local3;
_local5 = (((_local3 + 1) < m_vertexCount)) ? (_local3 + 1) : 0;
_local6 = (m_vertices[_local5].x - m_vertices[_local4].x);
_local7 = (m_vertices[_local5].y - m_vertices[_local4].y);
_local8 = Math.sqrt(((_local6 * _local6) + (_local7 * _local7)));
m_normals[_local3] = new b2Vec2((_local7 / _local8), (-(_local6) / _local8));
_local3++;
};
m_centroid = ComputeCentroid(_local2.vertices, _local2.vertexCount);
ComputeOBB(m_obb, m_vertices, m_vertexCount);
_local3 = 0;
while (_local3 < m_vertexCount) {
_local4 = (((_local3 - 1) >= 0)) ? (_local3 - 1) : (m_vertexCount - 1);
_local5 = _local3;
_local9 = m_normals[_local4].x;
_local10 = m_normals[_local4].y;
_local11 = m_normals[_local5].x;
_local12 = m_normals[_local5].y;
_local13 = (m_vertices[_local3].x - m_centroid.x);
_local14 = (m_vertices[_local3].y - m_centroid.y);
_local15 = (((_local9 * _local13) + (_local10 * _local14)) - b2Settings.b2_toiSlop);
_local16 = (((_local11 * _local13) + (_local12 * _local14)) - b2Settings.b2_toiSlop);
_local17 = (1 / ((_local9 * _local12) - (_local10 * _local11)));
m_coreVertices[_local3] = new b2Vec2(((_local17 * ((_local12 * _local15) - (_local10 * _local16))) + m_centroid.x), ((_local17 * ((_local9 * _local16) - (_local11 * _local15))) + m_centroid.y));
_local3++;
};
}
public function GetCoreVertices():Array{
return (m_coreVertices);
}
public function GetCentroid():b2Vec2{
return (m_centroid);
}
override public function TestSegment(_arg1:b2XForm, _arg2:Array, _arg3:b2Vec2, _arg4:b2Segment, _arg5:Number):int{
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:b2Mat22;
var _local11:b2Vec2;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:int;
var _local19:int;
var _local20:Number;
var _local21:Number;
_local6 = 0;
_local7 = _arg5;
_local8 = (_arg4.p1.x - _arg1.position.x);
_local9 = (_arg4.p1.y - _arg1.position.y);
_local10 = _arg1.R;
_local12 = ((_local8 * _local10.col1.x) + (_local9 * _local10.col1.y));
_local13 = ((_local8 * _local10.col2.x) + (_local9 * _local10.col2.y));
_local8 = (_arg4.p2.x - _arg1.position.x);
_local9 = (_arg4.p2.y - _arg1.position.y);
_local10 = _arg1.R;
_local14 = ((_local8 * _local10.col1.x) + (_local9 * _local10.col1.y));
_local15 = ((_local8 * _local10.col2.x) + (_local9 * _local10.col2.y));
_local16 = (_local14 - _local12);
_local17 = (_local15 - _local13);
_local18 = -1;
_local19 = 0;
while (_local19 < m_vertexCount) {
_local11 = m_vertices[_local19];
_local8 = (_local11.x - _local12);
_local9 = (_local11.y - _local13);
_local11 = m_normals[_local19];
_local20 = ((_local11.x * _local8) + (_local11.y * _local9));
_local21 = ((_local11.x * _local16) + (_local11.y * _local17));
if (_local21 == 0){
if (_local20 < 0){
return (e_missCollide);
};
} else {
if ((((_local21 < 0)) && ((_local20 < (_local6 * _local21))))){
_local6 = (_local20 / _local21);
_local18 = _local19;
} else {
if ((((_local21 > 0)) && ((_local20 < (_local7 * _local21))))){
_local7 = (_local20 / _local21);
};
};
};
if (_local7 < _local6){
return (e_missCollide);
};
_local19++;
};
if (_local18 >= 0){
_arg2[0] = _local6;
_local10 = _arg1.R;
_local11 = m_normals[_local18];
_arg3.x = ((_local10.col1.x * _local11.x) + (_local10.col2.x * _local11.y));
_arg3.y = ((_local10.col1.y * _local11.x) + (_local10.col2.y * _local11.y));
return (e_hitCollide);
};
_arg2[0] = 0;
return (e_startsInsideCollide);
}
override public function ComputeMass(_arg1:b2MassData):void{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:int;
var _local10:b2Vec2;
var _local11:b2Vec2;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Number;
var _local24:Number;
var _local25:Number;
_local2 = 0;
_local3 = 0;
_local4 = 0;
_local5 = 0;
_local6 = 0;
_local7 = 0;
_local8 = (1 / 3);
_local9 = 0;
while (_local9 < m_vertexCount) {
_local10 = m_vertices[_local9];
_local11 = (((_local9 + 1) < m_vertexCount)) ? m_vertices[int((_local9 + 1))] : m_vertices[0];
_local12 = (_local10.x - _local6);
_local13 = (_local10.y - _local7);
_local14 = (_local11.x - _local6);
_local15 = (_local11.y - _local7);
_local16 = ((_local12 * _local15) - (_local13 * _local14));
_local17 = (0.5 * _local16);
_local4 = (_local4 + _local17);
_local2 = (_local2 + ((_local17 * _local8) * ((_local6 + _local10.x) + _local11.x)));
_local3 = (_local3 + ((_local17 * _local8) * ((_local7 + _local10.y) + _local11.y)));
_local18 = _local6;
_local19 = _local7;
_local20 = _local12;
_local21 = _local13;
_local22 = _local14;
_local23 = _local15;
_local24 = ((_local8 * ((0.25 * (((_local20 * _local20) + (_local22 * _local20)) + (_local22 * _local22))) + ((_local18 * _local20) + (_local18 * _local22)))) + ((0.5 * _local18) * _local18));
_local25 = ((_local8 * ((0.25 * (((_local21 * _local21) + (_local23 * _local21)) + (_local23 * _local23))) + ((_local19 * _local21) + (_local19 * _local23)))) + ((0.5 * _local19) * _local19));
_local5 = (_local5 + (_local16 * (_local24 + _local25)));
_local9++;
};
_arg1.mass = (m_density * _local4);
_local2 = (_local2 * (1 / _local4));
_local3 = (_local3 * (1 / _local4));
_arg1.center.Set(_local2, _local3);
_arg1.I = (m_density * _local5);
}
public function Support(_arg1:b2XForm, _arg2:Number, _arg3:Number):b2Vec2{
var _local4:b2Vec2;
var _local5:b2Mat22;
var _local6:Number;
var _local7:Number;
var _local8:int;
var _local9:Number;
var _local10:int;
var _local11:Number;
_local5 = _arg1.R;
_local6 = ((_arg2 * _local5.col1.x) + (_arg3 * _local5.col1.y));
_local7 = ((_arg2 * _local5.col2.x) + (_arg3 * _local5.col2.y));
_local8 = 0;
_local4 = m_coreVertices[0];
_local9 = ((_local4.x * _local6) + (_local4.y * _local7));
_local10 = 1;
while (_local10 < m_vertexCount) {
_local4 = m_coreVertices[_local10];
_local11 = ((_local4.x * _local6) + (_local4.y * _local7));
if (_local11 > _local9){
_local8 = _local10;
_local9 = _local11;
};
_local10++;
};
_local5 = _arg1.R;
_local4 = m_coreVertices[_local8];
s_supportVec.x = (_arg1.position.x + ((_local5.col1.x * _local4.x) + (_local5.col2.x * _local4.y)));
s_supportVec.y = (_arg1.position.y + ((_local5.col1.y * _local4.x) + (_local5.col2.y * _local4.y)));
return (s_supportVec);
}
public function GetVertexCount():int{
return (m_vertexCount);
}
override public function ComputeSubmergedArea(_arg1:b2Vec2, _arg2:Number, _arg3:b2XForm, _arg4:b2Vec2):Number{
var _local5:b2Vec2;
var _local6:Number;
var _local7:Array;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:Boolean;
var _local12:int;
var _local13:int;
var _local14:int;
var _local15:Number;
var _local16:Number;
var _local17:b2Vec2;
var _local18:b2Vec2;
var _local19:Number;
var _local20:b2Vec2;
var _local21:b2Vec2;
var _local22:b2Vec2;
var _local23:Boolean;
var _local24:b2MassData;
var _local25:Number;
_local5 = b2Math.b2MulTMV(_arg3.R, _arg1);
_local6 = (_arg2 - b2Math.b2Dot(_arg1, _arg3.position));
_local7 = new Array();
_local8 = 0;
_local9 = -1;
_local10 = -1;
_local11 = false;
_local12 = 0;
while (_local12 < m_vertexCount) {
_local7[_local12] = (b2Math.b2Dot(_local5, m_vertices[_local12]) - _local6);
_local23 = (_local7[_local12] < -(Number.MIN_VALUE));
if (_local12 > 0){
if (_local23){
if (!_local11){
_local9 = (_local12 - 1);
_local8++;
};
} else {
if (_local11){
_local10 = (_local12 - 1);
_local8++;
};
};
};
_local11 = _local23;
_local12++;
};
switch (_local8){
case 0:
if (_local11){
_local24 = new b2MassData();
ComputeMass(_local24);
_arg4.SetV(b2Math.b2MulX(_arg3, _local24.center));
return ((_local24.mass / m_density));
};
return (0);
case 1:
if (_local9 == -1){
_local9 = (m_vertexCount - 1);
} else {
_local10 = (m_vertexCount - 1);
};
break;
};
_local13 = ((_local9 + 1) % m_vertexCount);
_local14 = ((_local10 + 1) % m_vertexCount);
_local15 = ((0 - _local7[_local9]) / (_local7[_local13] - _local7[_local9]));
_local16 = ((0 - _local7[_local10]) / (_local7[_local14] - _local7[_local10]));
_local17 = new b2Vec2(((m_vertices[_local9].x * (1 - _local15)) + (m_vertices[_local13].x * _local15)), ((m_vertices[_local9].y * (1 - _local15)) + (m_vertices[_local13].y * _local15)));
_local18 = new b2Vec2(((m_vertices[_local10].x * (1 - _local16)) + (m_vertices[_local14].x * _local16)), ((m_vertices[_local10].y * (1 - _local16)) + (m_vertices[_local14].y * _local16)));
_local19 = 0;
_local20 = new b2Vec2();
_local21 = m_vertices[_local13];
_local12 = _local13;
while (_local12 != _local14) {
_local12 = ((_local12 + 1) % m_vertexCount);
if (_local12 == _local14){
_local22 = _local18;
} else {
_local22 = m_vertices[_local12];
};
_local25 = (0.5 * (((_local21.x - _local17.x) * (_local22.y - _local17.y)) - ((_local21.y - _local17.y) * (_local22.x - _local17.x))));
_local19 = (_local19 + _local25);
_local20.x = (_local20.x + ((_local25 * ((_local17.x + _local21.x) + _local22.x)) / 3));
_local20.y = (_local20.y + ((_local25 * ((_local17.y + _local21.y) + _local22.y)) / 3));
_local21 = _local22;
};
_local20.Multiply((1 / _local19));
_arg4.SetV(b2Math.b2MulX(_arg3, _local20));
return (_local19);
}
override public function ComputeSweptAABB(_arg1:b2AABB, _arg2:b2XForm, _arg3:b2XForm):void{
var _local4:b2AABB;
var _local5:b2AABB;
_local4 = s_sweptAABB1;
_local5 = s_sweptAABB2;
ComputeAABB(_local4, _arg2);
ComputeAABB(_local5, _arg3);
_arg1.lowerBound.Set(((_local4.lowerBound.x < _local5.lowerBound.x)) ? _local4.lowerBound.x : _local5.lowerBound.x, ((_local4.lowerBound.y < _local5.lowerBound.y)) ? _local4.lowerBound.y : _local5.lowerBound.y);
_arg1.upperBound.Set(((_local4.upperBound.x > _local5.upperBound.x)) ? _local4.upperBound.x : _local5.upperBound.x, ((_local4.upperBound.y > _local5.upperBound.y)) ? _local4.upperBound.y : _local5.upperBound.y);
}
public function GetVertices():Array{
return (m_vertices);
}
public function GetNormals():Array{
return (m_normals);
}
public function GetOBB():b2OBB{
return (m_obb);
}
public function GetFirstVertex(_arg1:b2XForm):b2Vec2{
return (b2Math.b2MulX(_arg1, m_coreVertices[0]));
}
public function Centroid(_arg1:b2XForm):b2Vec2{
return (b2Math.b2MulX(_arg1, m_centroid));
}
override b2internal function UpdateSweepRadius(_arg1:b2Vec2):void{
var _local2:b2Vec2;
var _local3:int;
var _local4:Number;
var _local5:Number;
m_sweepRadius = 0;
_local3 = 0;
while (_local3 < m_vertexCount) {
_local2 = m_coreVertices[_local3];
_local4 = (_local2.x - _arg1.x);
_local5 = (_local2.y - _arg1.y);
_local4 = Math.sqrt(((_local4 * _local4) + (_local5 * _local5)));
if (_local4 > m_sweepRadius){
m_sweepRadius = _local4;
};
_local3++;
};
}
override public function ComputeAABB(_arg1:b2AABB, _arg2:b2XForm):void{
var _local3:b2Mat22;
var _local4:b2Vec2;
var _local5:b2Mat22;
var _local6:b2Mat22;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
_local5 = s_computeMat;
_local3 = _arg2.R;
_local4 = m_obb.R.col1;
_local5.col1.x = ((_local3.col1.x * _local4.x) + (_local3.col2.x * _local4.y));
_local5.col1.y = ((_local3.col1.y * _local4.x) + (_local3.col2.y * _local4.y));
_local4 = m_obb.R.col2;
_local5.col2.x = ((_local3.col1.x * _local4.x) + (_local3.col2.x * _local4.y));
_local5.col2.y = ((_local3.col1.y * _local4.x) + (_local3.col2.y * _local4.y));
_local5.Abs();
_local6 = _local5;
_local4 = m_obb.extents;
_local7 = ((_local6.col1.x * _local4.x) + (_local6.col2.x * _local4.y));
_local8 = ((_local6.col1.y * _local4.x) + (_local6.col2.y * _local4.y));
_local3 = _arg2.R;
_local4 = m_obb.center;
_local9 = (_arg2.position.x + ((_local3.col1.x * _local4.x) + (_local3.col2.x * _local4.y)));
_local10 = (_arg2.position.y + ((_local3.col1.y * _local4.x) + (_local3.col2.y * _local4.y)));
_arg1.lowerBound.Set((_local9 - _local7), (_local10 - _local8));
_arg1.upperBound.Set((_local9 + _local7), (_local10 + _local8));
}
override public function TestPoint(_arg1:b2XForm, _arg2:b2Vec2):Boolean{
var _local3:b2Vec2;
var _local4:b2Mat22;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:int;
var _local10:Number;
_local4 = _arg1.R;
_local5 = (_arg2.x - _arg1.position.x);
_local6 = (_arg2.y - _arg1.position.y);
_local7 = ((_local5 * _local4.col1.x) + (_local6 * _local4.col1.y));
_local8 = ((_local5 * _local4.col2.x) + (_local6 * _local4.col2.y));
_local9 = 0;
while (_local9 < m_vertexCount) {
_local3 = m_vertices[_local9];
_local5 = (_local7 - _local3.x);
_local6 = (_local8 - _local3.y);
_local3 = m_normals[_local9];
_local10 = ((_local3.x * _local5) + (_local3.y * _local6));
if (_local10 > 0){
return (false);
};
_local9++;
};
return (true);
}
public static function ComputeCentroid(_arg1:Array, _arg2:int):b2Vec2{
var _local3:b2Vec2;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:int;
var _local9:b2Vec2;
var _local10:b2Vec2;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
_local3 = new b2Vec2();
_local4 = 0;
_local5 = 0;
_local6 = 0;
_local7 = (1 / 3);
_local8 = 0;
while (_local8 < _arg2) {
_local9 = _arg1[_local8];
_local10 = (((_local8 + 1) < _arg2)) ? _arg1[int((_local8 + 1))] : _arg1[0];
_local11 = (_local9.x - _local5);
_local12 = (_local9.y - _local6);
_local13 = (_local10.x - _local5);
_local14 = (_local10.y - _local6);
_local15 = ((_local11 * _local14) - (_local12 * _local13));
_local16 = (0.5 * _local15);
_local4 = (_local4 + _local16);
_local3.x = (_local3.x + ((_local16 * _local7) * ((_local5 + _local9.x) + _local10.x)));
_local3.y = (_local3.y + ((_local16 * _local7) * ((_local6 + _local9.y) + _local10.y)));
_local8++;
};
_local3.x = (_local3.x * (1 / _local4));
_local3.y = (_local3.y * (1 / _local4));
return (_local3);
}
b2internal static function ComputeOBB(_arg1:b2OBB, _arg2:Array, _arg3:int):void{
var _local4:int;
var _local5:Array;
var _local6:Number;
var _local7:b2Vec2;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:int;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Number;
var _local24:Number;
var _local25:b2Mat22;
_local5 = new Array((b2Settings.b2_maxPolygonVertices + 1));
_local4 = 0;
while (_local4 < _arg3) {
_local5[_local4] = _arg2[_local4];
_local4++;
};
_local5[_arg3] = _local5[0];
_local6 = Number.MAX_VALUE;
_local4 = 1;
while (_local4 <= _arg3) {
_local7 = _local5[int((_local4 - 1))];
_local8 = (_local5[_local4].x - _local7.x);
_local9 = (_local5[_local4].y - _local7.y);
_local10 = Math.sqrt(((_local8 * _local8) + (_local9 * _local9)));
_local8 = (_local8 / _local10);
_local9 = (_local9 / _local10);
_local11 = -(_local9);
_local12 = _local8;
_local13 = Number.MAX_VALUE;
_local14 = Number.MAX_VALUE;
_local15 = -(Number.MAX_VALUE);
_local16 = -(Number.MAX_VALUE);
_local17 = 0;
while (_local17 < _arg3) {
_local19 = (_local5[_local17].x - _local7.x);
_local20 = (_local5[_local17].y - _local7.y);
_local21 = ((_local8 * _local19) + (_local9 * _local20));
_local22 = ((_local11 * _local19) + (_local12 * _local20));
if (_local21 < _local13){
_local13 = _local21;
};
if (_local22 < _local14){
_local14 = _local22;
};
if (_local21 > _local15){
_local15 = _local21;
};
if (_local22 > _local16){
_local16 = _local22;
};
_local17++;
};
_local18 = ((_local15 - _local13) * (_local16 - _local14));
if (_local18 < (0.95 * _local6)){
_local6 = _local18;
_arg1.R.col1.x = _local8;
_arg1.R.col1.y = _local9;
_arg1.R.col2.x = _local11;
_arg1.R.col2.y = _local12;
_local23 = (0.5 * (_local13 + _local15));
_local24 = (0.5 * (_local14 + _local16));
_local25 = _arg1.R;
_arg1.center.x = (_local7.x + ((_local25.col1.x * _local23) + (_local25.col2.x * _local24)));
_arg1.center.y = (_local7.y + ((_local25.col1.y * _local23) + (_local25.col2.y * _local24)));
_arg1.extents.x = (0.5 * (_local15 - _local13));
_arg1.extents.y = (0.5 * (_local16 - _local14));
};
_local4++;
};
}
}
}//package Box2D.Collision.Shapes
Section 9
//b2Shape (Box2D.Collision.Shapes.b2Shape)
package Box2D.Collision.Shapes {
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
import Box2D.Collision.*;
import Box2D.Common.*;
public class b2Shape {
b2internal var m_next:b2Shape;
b2internal var m_friction:Number;
private var m_filter:b2FilterData;
public var userData:Object;
b2internal var m_density:Number;
b2internal var m_restitution:Number;
private var m_proxy:b2Proxy;
private var m_isSensor:Boolean;
private var m_userData;
b2internal var m_body:b2Body;
b2internal var m_type:int;
b2internal var m_sweepRadius:Number;
b2internal static const e_polygonShape:int = 1;
public static const e_hitCollide:int = 1;
public static const e_missCollide:int = 0;
b2internal static const e_edgeShape:int = 2;
b2internal static const e_unknownShape:int = -1;
b2internal static const e_circleShape:int = 0;
b2internal static const e_shapeTypeCount:int = 3;
public static const e_startsInsideCollide:int = -1;
private static var s_resetAABB:b2AABB = new b2AABB();
private static var s_syncAABB:b2AABB = new b2AABB();
private static var s_proxyAABB:b2AABB = new b2AABB();
public function b2Shape(_arg1:b2ShapeDef){
m_userData = _arg1.userData;
m_friction = _arg1.friction;
m_restitution = _arg1.restitution;
m_density = _arg1.density;
m_body = null;
m_sweepRadius = 0;
m_next = null;
m_proxy = null;
m_filter = _arg1.filter.Copy();
m_isSensor = _arg1.isSensor;
}
public function SetUserData(_arg1):void{
m_userData = _arg1;
}
public function GetSweepRadius():Number{
return (m_sweepRadius);
}
public function GetType():int{
return (m_type);
}
public function TestSegment(_arg1:b2XForm, _arg2:Array, _arg3:b2Vec2, _arg4:b2Segment, _arg5:Number):int{
return (e_missCollide);
}
public function SetSensor(_arg1:Boolean):void{
m_isSensor = _arg1;
}
public function IsSensor():Boolean{
return (m_isSensor);
}
public function GetFilterData():b2FilterData{
return (m_filter.Copy());
}
public function SetFilterData(_arg1:b2FilterData):void{
m_filter = _arg1.Copy();
}
b2internal function CreateProxy(_arg1:b2BroadPhase, _arg2:b2XForm):void{
var _local3:b2AABB;
var _local4:Boolean;
_local3 = s_proxyAABB;
ComputeAABB(_local3, _arg2);
_local4 = _arg1.InRange(_local3);
if (_local4){
m_proxy = _arg1.CreateProxy(_local3, this);
} else {
m_proxy = null;
};
}
b2internal function Synchronize(_arg1:b2BroadPhase, _arg2:b2XForm, _arg3:b2XForm):Boolean{
var _local4:b2AABB;
if (m_proxy == null){
return (false);
};
_local4 = s_syncAABB;
ComputeSweptAABB(_local4, _arg2, _arg3);
if (_arg1.InRange(_local4)){
_arg1.MoveProxy(m_proxy, _local4);
return (true);
};
return (false);
}
b2internal function DestroyProxy(_arg1:b2BroadPhase):void{
if (m_proxy){
_arg1.DestroyProxy(m_proxy);
m_proxy = null;
};
}
public function ComputeSubmergedArea(_arg1:b2Vec2, _arg2:Number, _arg3:b2XForm, _arg4:b2Vec2):Number{
return (0);
}
public function ComputeMass(_arg1:b2MassData):void{
}
b2internal function RefilterProxy(_arg1:b2BroadPhase, _arg2:b2XForm):void{
var _local3:b2AABB;
var _local4:Boolean;
if (m_proxy == null){
return;
};
_arg1.DestroyProxy(m_proxy);
_local3 = s_resetAABB;
ComputeAABB(_local3, _arg2);
_local4 = _arg1.InRange(_local3);
if (_local4){
m_proxy = _arg1.CreateProxy(_local3, this);
} else {
m_proxy = null;
};
}
public function SetRestitution(_arg1:Number):void{
m_restitution = _arg1;
}
public function GetNext():b2Shape{
return (m_next);
}
public function ComputeSweptAABB(_arg1:b2AABB, _arg2:b2XForm, _arg3:b2XForm):void{
}
public function GetFriction():Number{
return (m_friction);
}
public function GetRestitution():Number{
return (m_restitution);
}
public function SetFriction(_arg1:Number):void{
m_friction = _arg1;
}
public function GetUserData(){
return (m_userData);
}
b2internal function UpdateSweepRadius(_arg1:b2Vec2):void{
}
public function ComputeAABB(_arg1:b2AABB, _arg2:b2XForm):void{
}
public function GetBody():b2Body{
return (m_body);
}
public function TestPoint(_arg1:b2XForm, _arg2:b2Vec2):Boolean{
return (false);
}
b2internal static function Destroy(_arg1:b2Shape, _arg2):void{
var _local3:b2EdgeShape;
switch (_arg1.m_type){
case e_edgeShape:
_local3 = (_arg1 as b2EdgeShape);
if (_local3.m_nextEdge != null){
_local3.m_nextEdge.m_prevEdge = null;
};
if (_local3.m_prevEdge != null){
_local3.m_prevEdge.m_nextEdge = null;
};
break;
};
}
b2internal static function Create(_arg1:b2ShapeDef, _arg2):b2Shape{
switch (_arg1.type){
case e_circleShape:
return (new b2CircleShape(_arg1));
case e_polygonShape:
return (new b2PolygonShape(_arg1));
default:
return (null);
};
}
}
}//package Box2D.Collision.Shapes
Section 10
//b2ShapeDef (Box2D.Collision.Shapes.b2ShapeDef)
package Box2D.Collision.Shapes {
public class b2ShapeDef {
public var isSensor:Boolean;// = false
public var density:Number;// = 0
public var type:int;// = -1
public var restitution:Number;// = 0
public var userData;// = null
public var filter:b2FilterData;
public var friction:Number;// = 0.2
public function b2ShapeDef(){
type = b2Shape.e_unknownShape;
userData = null;
friction = 0.2;
restitution = 0;
density = 0;
isSensor = false;
filter = new b2FilterData();
super();
}
}
}//package Box2D.Collision.Shapes
Section 11
//b2AABB (Box2D.Collision.b2AABB)
package Box2D.Collision {
import Box2D.Common.Math.*;
public class b2AABB {
public var upperBound:b2Vec2;
public var lowerBound:b2Vec2;
public function b2AABB(){
lowerBound = new b2Vec2();
upperBound = new b2Vec2();
super();
}
public function RayCast(_arg1:b2RayCastOutput, _arg2:b2RayCastInput):void{
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:b2Vec2;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
_local3 = Number.MIN_VALUE;
_local4 = Number.MAX_VALUE;
_arg1.hit = false;
_local5 = _arg2.p1.x;
_local6 = _arg2.p1.y;
_local7 = (_arg2.p2.x - _arg2.p1.x);
_local8 = (_arg2.p2.y - _arg2.p1.y);
_local9 = Math.abs(_local7);
_local10 = Math.abs(_local8);
_local11 = _arg1.normal;
if (_local9 < Number.MIN_VALUE){
if ((((_local5 < lowerBound.x)) || ((upperBound.x < _local5)))){
return;
};
} else {
_local12 = (1 / _local7);
_local13 = ((lowerBound.x - _local5) * _local12);
_local14 = ((upperBound.x - _local5) * _local12);
_local16 = -1;
if (_local13 > _local14){
_local15 = _local13;
_local13 = _local14;
_local14 = _local15;
_local16 = 1;
};
if (_local13 > _local3){
_local11.x = _local16;
_local11.y = 0;
_local3 = _local13;
};
_local4 = Math.min(_local4, _local14);
if (_local3 > _local4){
return;
};
};
if (_local10 < Number.MIN_VALUE){
if ((((_local6 < lowerBound.y)) || ((upperBound.y < _local6)))){
return;
};
} else {
_local12 = (1 / _local8);
_local13 = ((lowerBound.y - _local6) * _local12);
_local14 = ((upperBound.y - _local6) * _local12);
_local16 = -1;
if (_local13 > _local14){
_local15 = _local13;
_local13 = _local14;
_local14 = _local15;
_local16 = 1;
};
if (_local13 > _local3){
_local11.y = _local16;
_local11.x = 0;
_local3 = _local13;
};
_local4 = Math.min(_local4, _local14);
if (_local3 > _local4){
return;
};
};
}
public function GetCenter():b2Vec2{
return (new b2Vec2(((lowerBound.x + upperBound.x) / 2), ((lowerBound.y + upperBound.y) / 2)));
}
public function IsValid():Boolean{
var _local1:Number;
var _local2:Number;
var _local3:Boolean;
_local1 = (upperBound.x - lowerBound.x);
_local2 = (upperBound.y - lowerBound.y);
_local3 = (((_local1 >= 0)) && ((_local2 >= 0)));
_local3 = ((((_local3) && (lowerBound.IsValid()))) && (upperBound.IsValid()));
return (_local3);
}
public function GetExtents():b2Vec2{
return (new b2Vec2(((upperBound.x - lowerBound.x) / 2), ((upperBound.y - lowerBound.y) / 2)));
}
public function Contains(_arg1:b2AABB):Boolean{
var _local2:Boolean;
_local2 = true;
_local2 = ((_local2) && ((lowerBound.x <= _arg1.lowerBound.x)));
_local2 = ((_local2) && ((lowerBound.y <= _arg1.lowerBound.y)));
_local2 = ((_local2) && ((_arg1.upperBound.x <= upperBound.x)));
_local2 = ((_local2) && ((_arg1.upperBound.y <= upperBound.y)));
return (_local2);
}
public static function Combine(_arg1:b2AABB, _arg2:b2AABB):b2AABB{
var _local3:b2AABB;
_local3 = new (b2AABB);
_local3.lowerBound.x = Math.min(_arg1.lowerBound.x, _arg2.lowerBound.x);
_local3.lowerBound.y = Math.min(_arg1.lowerBound.y, _arg2.lowerBound.y);
_local3.upperBound.x = Math.max(_arg1.upperBound.x, _arg2.upperBound.x);
_local3.upperBound.y = Math.max(_arg1.upperBound.y, _arg2.upperBound.y);
return (_local3);
}
}
}//package Box2D.Collision
Section 12
//b2Bound (Box2D.Collision.b2Bound)
package Box2D.Collision {
public class b2Bound {
public var stabbingCount:uint;
public var proxy:b2Proxy;
public var value:uint;
public function Swap(_arg1:b2Bound):void{
var _local2:uint;
var _local3:b2Proxy;
var _local4:uint;
_local2 = value;
_local3 = proxy;
_local4 = stabbingCount;
value = _arg1.value;
proxy = _arg1.proxy;
stabbingCount = _arg1.stabbingCount;
_arg1.value = _local2;
_arg1.proxy = _local3;
_arg1.stabbingCount = _local4;
}
public function IsLower():Boolean{
return (((value & 1) == 0));
}
public function IsUpper():Boolean{
return (((value & 1) == 1));
}
}
}//package Box2D.Collision
Section 13
//b2BoundValues (Box2D.Collision.b2BoundValues)
package Box2D.Collision {
public class b2BoundValues {
public var lowerValues:Array;
public var upperValues:Array;
public function b2BoundValues(){
lowerValues = [0, 0];
upperValues = [0, 0];
super();
}
}
}//package Box2D.Collision
Section 14
//b2BroadPhase (Box2D.Collision.b2BroadPhase)
package Box2D.Collision {
import Box2D.Common.Math.*;
import Box2D.Common.*;
public class b2BroadPhase {
b2internal var m_quantizationFactor:b2Vec2;
b2internal var m_worldAABB:b2AABB;
b2internal var m_bounds:Array;
private var m_freeProxy:b2Proxy;
b2internal var m_proxyCount:int;
b2internal var m_proxyPool:Array;
private var m_querySortKeys:Array;
b2internal var m_pairManager:b2PairManager;
private var m_queryResultCount:int;
private var m_timeStamp:uint;
private var m_queryResults:Array;
public static const b2_nullEdge:uint = b2Settings.USHRT_MAX;
public static const b2_invalid:uint = b2Settings.USHRT_MAX;
public static var s_validate:Boolean = false;
public function b2BroadPhase(_arg1:b2AABB, _arg2:b2PairCallback){
var _local3:int;
var _local4:Number;
var _local5:Number;
m_pairManager = new b2PairManager();
m_proxyPool = new Array();
m_bounds = new Array();
m_querySortKeys = new Array();
m_queryResults = new Array();
m_quantizationFactor = new b2Vec2();
super();
m_pairManager.Initialize(this, _arg2);
m_worldAABB = _arg1;
m_proxyCount = 0;
m_bounds = new Array(2);
_local3 = 0;
while (_local3 < 2) {
m_bounds[_local3] = new Array();
_local3++;
};
_local4 = (_arg1.upperBound.x - _arg1.lowerBound.x);
_local5 = (_arg1.upperBound.y - _arg1.lowerBound.y);
m_quantizationFactor.x = (b2Settings.USHRT_MAX / _local4);
m_quantizationFactor.y = (b2Settings.USHRT_MAX / _local5);
m_timeStamp = 1;
m_queryResultCount = 0;
}
public function QueryAABB(_arg1:b2AABB, _arg2, _arg3:int):int{
var _local4:Array;
var _local5:Array;
var _local6:uint;
var _local7:uint;
var _local8:Array;
var _local9:Array;
var _local10:int;
var _local11:int;
var _local12:b2Proxy;
_local4 = new Array();
_local5 = new Array();
ComputeBounds(_local4, _local5, _arg1);
_local8 = [_local6];
_local9 = [_local7];
Query(_local8, _local9, _local4[0], _local5[0], m_bounds[0], (2 * m_proxyCount), 0);
Query(_local8, _local9, _local4[1], _local5[1], m_bounds[1], (2 * m_proxyCount), 1);
_local10 = 0;
_local11 = 0;
while ((((_local11 < m_queryResultCount)) && ((_local10 < _arg3)))) {
_local12 = m_queryResults[_local11];
_arg2[_local11] = _local12.userData;
_local11++;
_local10++;
};
m_queryResultCount = 0;
IncrementTimeStamp();
return (_local10);
}
public function Commit():void{
m_pairManager.Commit();
}
private function IncrementTimeStamp():void{
var _local1:uint;
if (m_timeStamp == b2Settings.USHRT_MAX){
_local1 = 0;
while (_local1 < m_proxyPool.length) {
(m_proxyPool[_local1] as b2Proxy).timeStamp = 0;
_local1++;
};
m_timeStamp = 1;
} else {
m_timeStamp++;
};
}
private function Query(_arg1:Array, _arg2:Array, _arg3:uint, _arg4:uint, _arg5:Array, _arg6:uint, _arg7:int):void{
var _local8:uint;
var _local9:uint;
var _local10:b2Bound;
var _local11:uint;
var _local12:int;
var _local13:int;
var _local14:b2Proxy;
_local8 = BinarySearch(_arg5, _arg6, _arg3);
_local9 = BinarySearch(_arg5, _arg6, _arg4);
_local11 = _local8;
while (_local11 < _local9) {
_local10 = _arg5[_local11];
if (_local10.IsLower()){
IncrementOverlapCount(_local10.proxy);
};
_local11++;
};
if (_local8 > 0){
_local12 = (_local8 - 1);
_local10 = _arg5[_local12];
_local13 = _local10.stabbingCount;
while (_local13) {
_local10 = _arg5[_local12];
if (_local10.IsLower()){
_local14 = _local10.proxy;
if (_local8 <= _local14.upperBounds[_arg7]){
IncrementOverlapCount(_local10.proxy);
_local13--;
};
};
_local12--;
};
};
_arg1[0] = _local8;
_arg2[0] = _local9;
}
private function AddProxyResult(_arg1:b2Proxy, _arg2:Number, _arg3:Function):void{
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:b2Proxy;
var _local8:Number;
var _local9:b2Proxy;
_local4 = _arg3(_arg1.userData);
if (_local4 < 0){
return;
};
_local5 = 0;
while ((((_local5 < m_queryResultCount)) && ((m_querySortKeys[_local5] < _local4)))) {
_local5++;
};
_local6 = _local4;
_local7 = _arg1;
m_queryResultCount = (m_queryResultCount + 1);
if (m_queryResultCount > _arg2){
m_queryResultCount = _arg2;
};
while (_local5 < m_queryResultCount) {
_local8 = m_querySortKeys[_local5];
_local9 = m_queryResults[_local5];
m_querySortKeys[_local5] = _local6;
m_queryResults[_local5] = _local7;
_local6 = _local8;
_local7 = _local9;
_local5++;
};
}
public function QuerySegment(_arg1:b2Segment, _arg2, _arg3:int, _arg4:Function):int{
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:int;
var _local9:int;
var _local10:Number;
var _local11:Number;
var _local12:Array;
var _local13:Array;
var _local14:Array;
var _local15:int;
var _local16:int;
var _local17:b2Proxy;
var _local18:uint;
var _local19:uint;
var _local20:Array;
var _local21:Array;
var _local22:int;
var _local23:Number;
var _local24:Number;
var _local25:Number;
var _local26:b2Proxy;
var _local27:Number;
var _local28:Number;
_local5 = 1;
_local6 = ((_arg1.p2.x - _arg1.p1.x) * m_quantizationFactor.x);
_local7 = ((_arg1.p2.y - _arg1.p1.y) * m_quantizationFactor.y);
_local8 = ((_local6 < -(Number.MIN_VALUE))) ? -1 : ((_local6 > Number.MIN_VALUE)) ? 1 : 0;
_local9 = ((_local7 < -(Number.MIN_VALUE))) ? -1 : ((_local7 > Number.MIN_VALUE)) ? 1 : 0;
_local10 = (m_quantizationFactor.x * (_arg1.p1.x - m_worldAABB.lowerBound.x));
_local11 = (m_quantizationFactor.y * (_arg1.p1.y - m_worldAABB.lowerBound.y));
_local12 = new Array();
_local13 = new Array();
_local12[0] = (uint(_local10) & (b2Settings.USHRT_MAX - 1));
_local12[1] = (uint(_local11) & (b2Settings.USHRT_MAX - 1));
_local13[0] = (_local12[0] + 1);
_local13[1] = (_local12[1] + 1);
_local14 = new Array();
_local20 = [_local18];
_local21 = [_local19];
Query(_local20, _local21, _local12[0], _local13[0], m_bounds[0], (2 * m_proxyCount), 0);
if (_local8 >= 0){
_local15 = (_local21[0] - 1);
} else {
_local15 = _local20[0];
};
Query(_local20, _local21, _local12[1], _local13[1], m_bounds[1], (2 * m_proxyCount), 1);
if (_local9 >= 0){
_local16 = (_local21[0] - 1);
} else {
_local16 = _local20[0];
};
if (_arg4 != null){
_local23 = 0;
while (_local23 < m_queryResultCount) {
m_querySortKeys[_local23] = _arg4(m_queryResults[_local23].userData);
_local23++;
};
_local23 = 0;
while (_local23 < (m_queryResultCount - 1)) {
_local24 = m_querySortKeys[_local23];
_local25 = m_querySortKeys[(_local23 + 1)];
if (((_local24)<0) ? (_local25 >= 0) : (((_local24 > _local25)) && ((_local25 >= 0)))){
m_querySortKeys[(_local23 + 1)] = _local24;
m_querySortKeys[_local23] = _local25;
_local26 = m_queryResults[(_local23 + 1)];
m_queryResults[(_local23 + 1)] = m_queryResults[_local23];
m_queryResults[_local23] = _local26;
--_local23;
if (_local23 == -1){
_local23 = 1;
};
} else {
_local23++;
};
};
while ((((m_queryResultCount > 0)) && ((m_querySortKeys[(m_queryResultCount - 1)] < 0)))) {
m_queryResultCount--;
};
};
while (true) {
_local27 = 0;
_local28 = 0;
_local15 = (_local15 + ((_local8 >= 0)) ? 1 : -1);
if ((((_local15 < 0)) || ((_local15 >= (m_proxyCount * 2))))){
break;
};
if (_local8 != 0){
_local27 = ((m_bounds[0][_local15].value - _local10) / _local6);
};
_local16 = (_local16 + ((_local9 >= 0)) ? 1 : -1);
if ((((_local16 < 0)) || ((_local16 >= (m_proxyCount * 2))))){
break;
};
if (_local9 != 0){
_local28 = ((m_bounds[1][_local16].value - _local11) / _local7);
};
while (true) {
if ((((_local9 == 0)) || (((!((_local8 == 0))) && ((_local27 < _local28)))))){
if (_local27 > _local5){
break;
};
if (((_local8 > 0)) ? m_bounds[0][_local15].IsLower() : m_bounds[0][_local15].IsUpper()){
_local17 = m_bounds[0][_local15].proxy;
if (_local9 >= 0){
if ((((_local17.lowerBounds[1] <= (_local16 - 1))) && ((_local17.upperBounds[1] >= _local16)))){
if (_arg4 != null){
AddProxyResult(_local17, _arg3, _arg4);
} else {
m_queryResults[m_queryResultCount] = _local17;
m_queryResultCount++;
};
};
} else {
if ((((_local17.lowerBounds[1] <= _local16)) && ((_local17.upperBounds[1] >= (_local16 + 1))))){
if (_arg4 != null){
AddProxyResult(_local17, _arg3, _arg4);
} else {
m_queryResults[m_queryResultCount] = _local17;
m_queryResultCount++;
};
};
};
};
if (((((((!((_arg4 == null))) && ((m_queryResultCount == _arg3)))) && ((m_queryResultCount > 0)))) && ((_local27 > m_querySortKeys[(m_queryResultCount - 1)])))){
break;
};
if (_local8 > 0){
_local15++;
if (_local15 == (m_proxyCount * 2)){
break;
};
} else {
--_local15;
if (_local15 < 0){
break;
};
};
_local27 = ((m_bounds[0][_local15].value - _local10) / _local6);
} else {
if (_local28 > _local5){
break;
};
if (((_local9 > 0)) ? m_bounds[1][_local16].IsLower() : m_bounds[1][_local16].IsUpper()){
_local17 = m_bounds[1][_local16].proxy;
if (_local8 >= 0){
if ((((_local17.lowerBounds[0] <= (_local15 - 1))) && ((_local17.upperBounds[0] >= _local15)))){
if (_arg4 != null){
AddProxyResult(_local17, _arg3, _arg4);
} else {
m_queryResults[m_queryResultCount] = _local17;
m_queryResultCount++;
};
};
} else {
if ((((_local17.lowerBounds[0] <= _local15)) && ((_local17.upperBounds[0] >= (_local15 + 1))))){
if (_arg4 != null){
AddProxyResult(_local17, _arg3, _arg4);
} else {
m_queryResults[m_queryResultCount] = _local17;
m_queryResultCount++;
};
};
};
};
if (((((((!((_arg4 == null))) && ((m_queryResultCount == _arg3)))) && ((m_queryResultCount > 0)))) && ((_local28 > m_querySortKeys[(m_queryResultCount - 1)])))){
break;
};
if (_local9 > 0){
_local16++;
if (_local16 == (m_proxyCount * 2)){
break;
};
} else {
--_local16;
if (_local16 < 0){
break;
};
};
_local28 = ((m_bounds[1][_local16].value - _local11) / _local7);
};
};
break;
};
_local22 = 0;
_local23 = 0;
while ((((_local23 < m_queryResultCount)) && ((_local22 < _arg3)))) {
_local17 = m_queryResults[_local23];
_arg2[_local23] = _local17.userData;
_local23++;
_local22++;
};
m_queryResultCount = 0;
IncrementTimeStamp();
return (_local22);
}
private function ComputeBounds(_arg1:Array, _arg2:Array, _arg3:b2AABB):void{
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
_local4 = _arg3.lowerBound.x;
_local5 = _arg3.lowerBound.y;
_local4 = b2Math.b2Min(_local4, m_worldAABB.upperBound.x);
_local5 = b2Math.b2Min(_local5, m_worldAABB.upperBound.y);
_local4 = b2Math.b2Max(_local4, m_worldAABB.lowerBound.x);
_local5 = b2Math.b2Max(_local5, m_worldAABB.lowerBound.y);
_local6 = _arg3.upperBound.x;
_local7 = _arg3.upperBound.y;
_local6 = b2Math.b2Min(_local6, m_worldAABB.upperBound.x);
_local7 = b2Math.b2Min(_local7, m_worldAABB.upperBound.y);
_local6 = b2Math.b2Max(_local6, m_worldAABB.lowerBound.x);
_local7 = b2Math.b2Max(_local7, m_worldAABB.lowerBound.y);
_arg1[0] = (uint((m_quantizationFactor.x * (_local4 - m_worldAABB.lowerBound.x))) & (b2Settings.USHRT_MAX - 1));
_arg2[0] = ((uint((m_quantizationFactor.x * (_local6 - m_worldAABB.lowerBound.x))) & 0xFFFF) | 1);
_arg1[1] = (uint((m_quantizationFactor.y * (_local5 - m_worldAABB.lowerBound.y))) & (b2Settings.USHRT_MAX - 1));
_arg2[1] = ((uint((m_quantizationFactor.y * (_local7 - m_worldAABB.lowerBound.y))) & 0xFFFF) | 1);
}
public function CreateProxy(_arg1:b2AABB, _arg2):b2Proxy{
var _local3:uint;
var _local4:b2Proxy;
var _local5:int;
var _local6:int;
var _local7:uint;
var _local8:Array;
var _local9:Array;
var _local10:int;
var _local11:Array;
var _local12:uint;
var _local13:uint;
var _local14:Array;
var _local15:Array;
var _local16:b2Bound;
var _local17:b2Bound;
var _local18:b2Bound;
var _local19:b2Proxy;
if (!m_freeProxy){
m_freeProxy = (m_proxyPool[m_proxyCount] = new b2Proxy());
m_freeProxy.next = null;
m_freeProxy.timeStamp = 0;
m_freeProxy.overlapCount = b2_invalid;
m_freeProxy.userData = null;
_local5 = 0;
while (_local5 < 2) {
_local6 = (m_proxyCount * 2);
var _temp1 = _local6;
_local6 = (_local6 + 1);
var _local20 = _temp1;
m_bounds[_local5][_local20] = new b2Bound();
m_bounds[_local5][_local6] = new b2Bound();
_local5++;
};
};
_local4 = m_freeProxy;
m_freeProxy = _local4.next;
_local4.overlapCount = 0;
_local4.userData = _arg2;
_local7 = (2 * m_proxyCount);
_local8 = new Array();
_local9 = new Array();
ComputeBounds(_local8, _local9, _arg1);
_local10 = 0;
while (_local10 < 2) {
_local11 = m_bounds[_local10];
_local14 = [_local12];
_local15 = [_local13];
Query(_local14, _local15, _local8[_local10], _local9[_local10], _local11, _local7, _local10);
_local12 = _local14[0];
_local13 = _local15[0];
_local11.splice(_local13, 0, _local11[(_local11.length - 1)]);
_local11.length--;
_local11.splice(_local12, 0, _local11[(_local11.length - 1)]);
_local11.length--;
_local13++;
_local16 = _local11[_local12];
_local17 = _local11[_local13];
_local16.value = _local8[_local10];
_local16.proxy = _local4;
_local17.value = _local9[_local10];
_local17.proxy = _local4;
_local18 = _local11[int((_local12 - 1))];
_local16.stabbingCount = ((_local12 == 0)) ? 0 : _local18.stabbingCount;
_local18 = _local11[int((_local13 - 1))];
_local17.stabbingCount = _local18.stabbingCount;
_local3 = _local12;
while (_local3 < _local13) {
_local18 = _local11[_local3];
_local18.stabbingCount++;
_local3++;
};
_local3 = _local12;
while (_local3 < (_local7 + 2)) {
_local16 = _local11[_local3];
_local19 = _local16.proxy;
if (_local16.IsLower()){
_local19.lowerBounds[_local10] = _local3;
} else {
_local19.upperBounds[_local10] = _local3;
};
_local3++;
};
_local10++;
};
m_proxyCount++;
_local5 = 0;
while (_local5 < m_queryResultCount) {
m_pairManager.AddBufferedPair(_local4, m_queryResults[_local5]);
_local5++;
};
m_pairManager.Commit();
m_queryResultCount = 0;
IncrementTimeStamp();
return (_local4);
}
public function DestroyProxy(_arg1:b2Proxy):void{
var _local2:b2Bound;
var _local3:b2Bound;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:Array;
var _local8:uint;
var _local9:uint;
var _local10:uint;
var _local11:uint;
var _local12:int;
var _local13:uint;
var _local14:int;
var _local15:b2Proxy;
_local4 = (2 * m_proxyCount);
_local5 = 0;
while (_local5 < 2) {
_local7 = m_bounds[_local5];
_local8 = _arg1.lowerBounds[_local5];
_local9 = _arg1.upperBounds[_local5];
_local2 = _local7[_local8];
_local10 = _local2.value;
_local3 = _local7[_local9];
_local11 = _local3.value;
_local7.splice(_local9, 1);
_local7.splice(_local8, 1);
_local7.push(_local2);
_local7.push(_local3);
_local12 = (_local4 - 2);
_local13 = _local8;
while (_local13 < _local12) {
_local2 = _local7[_local13];
_local15 = _local2.proxy;
if (_local2.IsLower()){
_local15.lowerBounds[_local5] = _local13;
} else {
_local15.upperBounds[_local5] = _local13;
};
_local13++;
};
_local12 = (_local9 - 1);
_local14 = _local8;
while (_local14 < _local12) {
_local2 = _local7[_local14];
_local2.stabbingCount--;
_local14++;
};
Query([0], [0], _local10, _local11, _local7, (_local4 - 2), _local5);
_local5++;
};
_local6 = 0;
while (_local6 < m_queryResultCount) {
m_pairManager.RemoveBufferedPair(_arg1, m_queryResults[_local6]);
_local6++;
};
m_pairManager.Commit();
m_queryResultCount = 0;
IncrementTimeStamp();
_arg1.userData = null;
_arg1.overlapCount = b2_invalid;
_arg1.lowerBounds[0] = b2_invalid;
_arg1.lowerBounds[1] = b2_invalid;
_arg1.upperBounds[0] = b2_invalid;
_arg1.upperBounds[1] = b2_invalid;
_arg1.next = m_freeProxy;
m_freeProxy = _arg1;
m_proxyCount--;
}
public function TestOverlap(_arg1:b2BoundValues, _arg2:b2Proxy):Boolean{
var _local3:int;
var _local4:Array;
var _local5:b2Bound;
_local3 = 0;
while (_local3 < 2) {
_local4 = m_bounds[_local3];
_local5 = _local4[_arg2.upperBounds[_local3]];
if (_arg1.lowerValues[_local3] > _local5.value){
return (false);
};
_local5 = _local4[_arg2.lowerBounds[_local3]];
if (_arg1.upperValues[_local3] < _local5.value){
return (false);
};
_local3++;
};
return (true);
}
public function Validate():void{
var _local1:b2Pair;
var _local2:b2Proxy;
var _local3:b2Proxy;
var _local4:Boolean;
var _local5:int;
var _local6:b2Bound;
var _local7:uint;
var _local8:uint;
var _local9:uint;
var _local10:b2Bound;
_local5 = 0;
while (_local5 < 2) {
_local6 = m_bounds[_local5];
_local7 = (2 * m_proxyCount);
_local8 = 0;
_local9 = 0;
while (_local9 < _local7) {
_local10 = _local6[_local9];
if (_local10.IsLower() == true){
_local8++;
} else {
_local8--;
};
_local9++;
};
_local5++;
};
}
private function IncrementOverlapCount(_arg1:b2Proxy):void{
if (_arg1.timeStamp < m_timeStamp){
_arg1.timeStamp = m_timeStamp;
_arg1.overlapCount = 1;
} else {
_arg1.overlapCount = 2;
m_queryResults[m_queryResultCount] = _arg1;
m_queryResultCount++;
};
}
public function InRange(_arg1:b2AABB):Boolean{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
_local2 = _arg1.lowerBound.x;
_local3 = _arg1.lowerBound.y;
_local2 = (_local2 - m_worldAABB.upperBound.x);
_local3 = (_local3 - m_worldAABB.upperBound.y);
_local4 = m_worldAABB.lowerBound.x;
_local5 = m_worldAABB.lowerBound.y;
_local4 = (_local4 - _arg1.upperBound.x);
_local5 = (_local5 - _arg1.upperBound.y);
_local2 = b2Math.b2Max(_local2, _local4);
_local3 = b2Math.b2Max(_local3, _local5);
return ((b2Math.b2Max(_local2, _local3) < 0));
}
private function TestOverlapValidate(_arg1:b2Proxy, _arg2:b2Proxy):Boolean{
var _local3:int;
var _local4:Array;
var _local5:b2Bound;
var _local6:b2Bound;
_local3 = 0;
while (_local3 < 2) {
_local4 = m_bounds[_local3];
_local5 = _local4[_arg1.lowerBounds[_local3]];
_local6 = _local4[_arg2.upperBounds[_local3]];
if (_local5.value > _local6.value){
return (false);
};
_local5 = _local4[_arg1.upperBounds[_local3]];
_local6 = _local4[_arg2.lowerBounds[_local3]];
if (_local5.value < _local6.value){
return (false);
};
_local3++;
};
return (true);
}
public function MoveProxy(_arg1:b2Proxy, _arg2:b2AABB):void{
var _local3:Array;
var _local4:int;
var _local5:uint;
var _local6:uint;
var _local7:b2Bound;
var _local8:b2Bound;
var _local9:b2Bound;
var _local10:uint;
var _local11:b2Proxy;
var _local12:uint;
var _local13:b2BoundValues;
var _local14:b2BoundValues;
var _local15:Array;
var _local16:uint;
var _local17:uint;
var _local18:uint;
var _local19:uint;
var _local20:int;
var _local21:int;
var _local22:b2Proxy;
if (_arg1 == null){
return;
};
if (_arg2.IsValid() == false){
return;
};
_local12 = (2 * m_proxyCount);
_local13 = new b2BoundValues();
ComputeBounds(_local13.lowerValues, _local13.upperValues, _arg2);
_local14 = new b2BoundValues();
_local5 = 0;
while (_local5 < 2) {
_local7 = m_bounds[_local5][_arg1.lowerBounds[_local5]];
_local14.lowerValues[_local5] = _local7.value;
_local7 = m_bounds[_local5][_arg1.upperBounds[_local5]];
_local14.upperValues[_local5] = _local7.value;
_local5++;
};
_local5 = 0;
while (_local5 < 2) {
_local15 = m_bounds[_local5];
_local16 = _arg1.lowerBounds[_local5];
_local17 = _arg1.upperBounds[_local5];
_local18 = _local13.lowerValues[_local5];
_local19 = _local13.upperValues[_local5];
_local7 = _local15[_local16];
_local20 = (_local18 - _local7.value);
_local7.value = _local18;
_local7 = _local15[_local17];
_local21 = (_local19 - _local7.value);
_local7.value = _local19;
if (_local20 < 0){
_local6 = _local16;
while ((((_local6 > 0)) && ((_local18 < (_local15[int((_local6 - 1))] as b2Bound).value)))) {
_local7 = _local15[_local6];
_local8 = _local15[int((_local6 - 1))];
_local22 = _local8.proxy;
_local8.stabbingCount++;
if (_local8.IsUpper() == true){
if (TestOverlap(_local13, _local22)){
m_pairManager.AddBufferedPair(_arg1, _local22);
};
_local3 = _local22.upperBounds;
_local4 = _local3[_local5];
_local4++;
_local3[_local5] = _local4;
_local7.stabbingCount++;
} else {
_local3 = _local22.lowerBounds;
_local4 = _local3[_local5];
_local4++;
_local3[_local5] = _local4;
_local7.stabbingCount--;
};
_local3 = _arg1.lowerBounds;
_local4 = _local3[_local5];
_local4--;
_local3[_local5] = _local4;
_local7.Swap(_local8);
_local6--;
};
};
if (_local21 > 0){
_local6 = _local17;
while ((((_local6 < (_local12 - 1))) && (((_local15[int((_local6 + 1))] as b2Bound).value <= _local19)))) {
_local7 = _local15[_local6];
_local9 = _local15[int((_local6 + 1))];
_local11 = _local9.proxy;
_local9.stabbingCount++;
if (_local9.IsLower() == true){
if (TestOverlap(_local13, _local11)){
m_pairManager.AddBufferedPair(_arg1, _local11);
};
_local3 = _local11.lowerBounds;
_local4 = _local3[_local5];
_local4--;
_local3[_local5] = _local4;
_local7.stabbingCount++;
} else {
_local3 = _local11.upperBounds;
_local4 = _local3[_local5];
_local4--;
_local3[_local5] = _local4;
_local7.stabbingCount--;
};
_local3 = _arg1.upperBounds;
_local4 = _local3[_local5];
_local4++;
_local3[_local5] = _local4;
_local7.Swap(_local9);
_local6++;
};
};
if (_local20 > 0){
_local6 = _local16;
while ((((_local6 < (_local12 - 1))) && (((_local15[int((_local6 + 1))] as b2Bound).value <= _local18)))) {
_local7 = _local15[_local6];
_local9 = _local15[int((_local6 + 1))];
_local11 = _local9.proxy;
_local9.stabbingCount--;
if (_local9.IsUpper()){
if (TestOverlap(_local14, _local11)){
m_pairManager.RemoveBufferedPair(_arg1, _local11);
};
_local3 = _local11.upperBounds;
_local4 = _local3[_local5];
_local4--;
_local3[_local5] = _local4;
_local7.stabbingCount--;
} else {
_local3 = _local11.lowerBounds;
_local4 = _local3[_local5];
_local4--;
_local3[_local5] = _local4;
_local7.stabbingCount++;
};
_local3 = _arg1.lowerBounds;
_local4 = _local3[_local5];
_local4++;
_local3[_local5] = _local4;
_local7.Swap(_local9);
_local6++;
};
};
if (_local21 < 0){
_local6 = _local17;
while ((((_local6 > 0)) && ((_local19 < (_local15[int((_local6 - 1))] as b2Bound).value)))) {
_local7 = _local15[_local6];
_local8 = _local15[int((_local6 - 1))];
_local22 = _local8.proxy;
_local8.stabbingCount--;
if (_local8.IsLower() == true){
if (TestOverlap(_local14, _local22)){
m_pairManager.RemoveBufferedPair(_arg1, _local22);
};
_local3 = _local22.lowerBounds;
_local4 = _local3[_local5];
_local4++;
_local3[_local5] = _local4;
_local7.stabbingCount--;
} else {
_local3 = _local22.upperBounds;
_local4 = _local3[_local5];
_local4++;
_local3[_local5] = _local4;
_local7.stabbingCount++;
};
_local3 = _arg1.upperBounds;
_local4 = _local3[_local5];
_local4--;
_local3[_local5] = _local4;
_local7.Swap(_local8);
_local6--;
};
};
_local5++;
};
}
public static function BinarySearch(_arg1:Array, _arg2:int, _arg3:uint):uint{
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:b2Bound;
_local4 = 0;
_local5 = (_arg2 - 1);
while (_local4 <= _local5) {
_local6 = ((_local4 + _local5) / 2);
_local7 = _arg1[_local6];
if (_local7.value > _arg3){
_local5 = (_local6 - 1);
} else {
if (_local7.value < _arg3){
_local4 = (_local6 + 1);
} else {
return (uint(_local6));
};
};
};
return (uint(_local4));
}
}
}//package Box2D.Collision
Section 15
//b2Collision (Box2D.Collision.b2Collision)
package Box2D.Collision {
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
import Box2D.Common.*;
public class b2Collision {
public static const b2_nullFeature:uint = 0xFF;
private static var b2CollidePolyTempVec:b2Vec2 = new b2Vec2();
public static function EdgeSeparation(_arg1:b2PolygonShape, _arg2:b2XForm, _arg3:int, _arg4:b2PolygonShape, _arg5:b2XForm):Number{
var _local6:int;
var _local7:Array;
var _local8:Array;
var _local9:int;
var _local10:Array;
var _local11:b2Mat22;
var _local12:b2Vec2;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:int;
var _local18:Number;
var _local19:int;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Number;
var _local24:Number;
var _local25:Number;
_local6 = _arg1.m_vertexCount;
_local7 = _arg1.m_vertices;
_local8 = _arg1.m_normals;
_local9 = _arg4.m_vertexCount;
_local10 = _arg4.m_vertices;
_local11 = _arg2.R;
_local12 = _local8[_arg3];
_local13 = ((_local11.col1.x * _local12.x) + (_local11.col2.x * _local12.y));
_local14 = ((_local11.col1.y * _local12.x) + (_local11.col2.y * _local12.y));
_local11 = _arg5.R;
_local15 = ((_local11.col1.x * _local13) + (_local11.col1.y * _local14));
_local16 = ((_local11.col2.x * _local13) + (_local11.col2.y * _local14));
_local17 = 0;
_local18 = Number.MAX_VALUE;
_local19 = 0;
while (_local19 < _local9) {
_local12 = _local10[_local19];
_local25 = ((_local12.x * _local15) + (_local12.y * _local16));
if (_local25 < _local18){
_local18 = _local25;
_local17 = _local19;
};
_local19++;
};
_local12 = _local7[_arg3];
_local11 = _arg2.R;
_local20 = (_arg2.position.x + ((_local11.col1.x * _local12.x) + (_local11.col2.x * _local12.y)));
_local21 = (_arg2.position.y + ((_local11.col1.y * _local12.x) + (_local11.col2.y * _local12.y)));
_local12 = _local10[_local17];
_local11 = _arg5.R;
_local22 = (_arg5.position.x + ((_local11.col1.x * _local12.x) + (_local11.col2.x * _local12.y)));
_local23 = (_arg5.position.y + ((_local11.col1.y * _local12.x) + (_local11.col2.y * _local12.y)));
_local22 = (_local22 - _local20);
_local23 = (_local23 - _local21);
_local24 = ((_local22 * _local13) + (_local23 * _local14));
return (_local24);
}
public static function b2TestOverlap(_arg1:b2AABB, _arg2:b2AABB):Boolean{
var _local3:b2Vec2;
var _local4:b2Vec2;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
_local3 = _arg2.lowerBound;
_local4 = _arg1.upperBound;
_local5 = (_local3.x - _local4.x);
_local6 = (_local3.y - _local4.y);
_local3 = _arg1.lowerBound;
_local4 = _arg2.upperBound;
_local7 = (_local3.x - _local4.x);
_local8 = (_local3.y - _local4.y);
if ((((_local5 > 0)) || ((_local6 > 0)))){
return (false);
};
if ((((_local7 > 0)) || ((_local8 > 0)))){
return (false);
};
return (true);
}
public static function FindIncidentEdge(_arg1:Array, _arg2:b2PolygonShape, _arg3:b2XForm, _arg4:int, _arg5:b2PolygonShape, _arg6:b2XForm):void{
var _local7:int;
var _local8:Array;
var _local9:int;
var _local10:Array;
var _local11:Array;
var _local12:b2Mat22;
var _local13:b2Vec2;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:int;
var _local18:Number;
var _local19:int;
var _local20:ClipVertex;
var _local21:int;
var _local22:int;
var _local23:Number;
_local7 = _arg2.m_vertexCount;
_local8 = _arg2.m_normals;
_local9 = _arg5.m_vertexCount;
_local10 = _arg5.m_vertices;
_local11 = _arg5.m_normals;
_local12 = _arg3.R;
_local13 = _local8[_arg4];
_local14 = ((_local12.col1.x * _local13.x) + (_local12.col2.x * _local13.y));
_local15 = ((_local12.col1.y * _local13.x) + (_local12.col2.y * _local13.y));
_local12 = _arg6.R;
_local16 = ((_local12.col1.x * _local14) + (_local12.col1.y * _local15));
_local15 = ((_local12.col2.x * _local14) + (_local12.col2.y * _local15));
_local14 = _local16;
_local17 = 0;
_local18 = Number.MAX_VALUE;
_local19 = 0;
while (_local19 < _local9) {
_local13 = _local11[_local19];
_local23 = ((_local14 * _local13.x) + (_local15 * _local13.y));
if (_local23 < _local18){
_local18 = _local23;
_local17 = _local19;
};
_local19++;
};
_local21 = _local17;
_local22 = (((_local21 + 1) < _local9)) ? (_local21 + 1) : 0;
_local20 = _arg1[0];
_local13 = _local10[_local21];
_local12 = _arg6.R;
_local20.v.x = (_arg6.position.x + ((_local12.col1.x * _local13.x) + (_local12.col2.x * _local13.y)));
_local20.v.y = (_arg6.position.y + ((_local12.col1.y * _local13.x) + (_local12.col2.y * _local13.y)));
_local20.id.features.referenceEdge = _arg4;
_local20.id.features.incidentEdge = _local21;
_local20.id.features.incidentVertex = 0;
_local20 = _arg1[1];
_local13 = _local10[_local22];
_local12 = _arg6.R;
_local20.v.x = (_arg6.position.x + ((_local12.col1.x * _local13.x) + (_local12.col2.x * _local13.y)));
_local20.v.y = (_arg6.position.y + ((_local12.col1.y * _local13.x) + (_local12.col2.y * _local13.y)));
_local20.id.features.referenceEdge = _arg4;
_local20.id.features.incidentEdge = _local22;
_local20.id.features.incidentVertex = 1;
}
public static function b2CollidePolygons(_arg1:b2Manifold, _arg2:b2PolygonShape, _arg3:b2XForm, _arg4:b2PolygonShape, _arg5:b2XForm):void{
var _local6:ClipVertex;
var _local7:int;
var _local8:Array;
var _local9:Number;
var _local10:int;
var _local11:Array;
var _local12:Number;
var _local13:b2PolygonShape;
var _local14:b2PolygonShape;
var _local15:b2XForm;
var _local16:b2XForm;
var _local17:int;
var _local18:uint;
var _local19:Number;
var _local20:Number;
var _local21:Array;
var _local22:int;
var _local23:Array;
var _local24:b2Vec2;
var _local25:b2Vec2;
var _local26:b2Vec2;
var _local27:b2Vec2;
var _local28:b2Vec2;
var _local29:Number;
var _local30:Number;
var _local31:Number;
var _local32:Array;
var _local33:Array;
var _local34:int;
var _local35:int;
var _local36:int;
var _local37:b2Vec2;
var _local38:Number;
var _local39:b2ManifoldPoint;
_arg1.pointCount = 0;
_local7 = 0;
_local8 = [_local7];
_local9 = FindMaxSeparation(_local8, _arg2, _arg3, _arg4, _arg5);
_local7 = _local8[0];
if (_local9 > 0){
return;
};
_local10 = 0;
_local11 = [_local10];
_local12 = FindMaxSeparation(_local11, _arg4, _arg5, _arg2, _arg3);
_local10 = _local11[0];
if (_local12 > 0){
return;
};
_local15 = new b2XForm();
_local16 = new b2XForm();
_local19 = 0.98;
_local20 = 0.001;
if (_local12 > ((_local19 * _local9) + _local20)){
_local13 = _arg4;
_local14 = _arg2;
_local15.Set(_arg5);
_local16.Set(_arg3);
_local17 = _local10;
_local18 = 1;
} else {
_local13 = _arg2;
_local14 = _arg4;
_local15.Set(_arg3);
_local16.Set(_arg5);
_local17 = _local7;
_local18 = 0;
};
_local21 = [new ClipVertex(), new ClipVertex()];
FindIncidentEdge(_local21, _local13, _local15, _local17, _local14, _local16);
_local22 = _local13.m_vertexCount;
_local23 = _local13.m_vertices;
_local24 = _local23[_local17];
_local25 = _local24.Copy();
if ((_local17 + 1) < _local22){
_local24 = _local23[int((_local17 + 1))];
_local37 = _local24.Copy();
} else {
_local24 = _local23[0];
_local37 = _local24.Copy();
};
_local26 = b2Math.SubtractVV(_local37, _local25);
_local27 = b2Math.b2MulMV(_local15.R, b2Math.SubtractVV(_local37, _local25));
_local27.Normalize();
_local28 = b2Math.b2CrossVF(_local27, 1);
_local25 = b2Math.b2MulX(_local15, _local25);
_local37 = b2Math.b2MulX(_local15, _local37);
_local29 = b2Math.b2Dot(_local28, _local25);
_local30 = -(b2Math.b2Dot(_local27, _local25));
_local31 = b2Math.b2Dot(_local27, _local37);
_local32 = [new ClipVertex(), new ClipVertex()];
_local33 = [new ClipVertex(), new ClipVertex()];
_local34 = ClipSegmentToLine(_local32, _local21, _local27.Negative(), _local30);
if (_local34 < 2){
return;
};
_local34 = ClipSegmentToLine(_local33, _local32, _local27, _local31);
if (_local34 < 2){
return;
};
_arg1.normal = (_local18) ? _local28.Negative() : _local28.Copy();
_local35 = 0;
_local36 = 0;
while (_local36 < b2Settings.b2_maxManifoldPoints) {
_local6 = _local33[_local36];
_local38 = (((_local28.x * _local6.v.x) + (_local28.y * _local6.v.y)) - _local29);
if (_local38 <= 0){
_local39 = _arg1.points[_local35];
_local39.separation = _local38;
_local39.localPoint1 = b2Math.b2MulXT(_arg3, _local6.v);
_local39.localPoint2 = b2Math.b2MulXT(_arg5, _local6.v);
_local39.id.key = _local6.id._key;
_local39.id.features.flip = _local18;
_local35++;
};
_local36++;
};
_arg1.pointCount = _local35;
}
public static function FindMaxSeparation(_arg1:Array, _arg2:b2PolygonShape, _arg3:b2XForm, _arg4:b2PolygonShape, _arg5:b2XForm):Number{
var _local6:int;
var _local7:Array;
var _local8:b2Vec2;
var _local9:b2Mat22;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:int;
var _local15:Number;
var _local16:int;
var _local17:Number;
var _local18:int;
var _local19:Number;
var _local20:int;
var _local21:Number;
var _local22:int;
var _local23:Number;
var _local24:int;
var _local25:Number;
_local6 = _arg2.m_vertexCount;
_local7 = _arg2.m_normals;
_local9 = _arg5.R;
_local8 = _arg4.m_centroid;
_local10 = (_arg5.position.x + ((_local9.col1.x * _local8.x) + (_local9.col2.x * _local8.y)));
_local11 = (_arg5.position.y + ((_local9.col1.y * _local8.x) + (_local9.col2.y * _local8.y)));
_local9 = _arg3.R;
_local8 = _arg2.m_centroid;
_local10 = (_local10 - (_arg3.position.x + ((_local9.col1.x * _local8.x) + (_local9.col2.x * _local8.y))));
_local11 = (_local11 - (_arg3.position.y + ((_local9.col1.y * _local8.x) + (_local9.col2.y * _local8.y))));
_local12 = ((_local10 * _arg3.R.col1.x) + (_local11 * _arg3.R.col1.y));
_local13 = ((_local10 * _arg3.R.col2.x) + (_local11 * _arg3.R.col2.y));
_local14 = 0;
_local15 = -(Number.MAX_VALUE);
_local16 = 0;
while (_local16 < _local6) {
_local8 = _local7[_local16];
_local25 = ((_local8.x * _local12) + (_local8.y * _local13));
if (_local25 > _local15){
_local15 = _local25;
_local14 = _local16;
};
_local16++;
};
_local17 = EdgeSeparation(_arg2, _arg3, _local14, _arg4, _arg5);
if (_local17 > 0){
return (_local17);
};
_local18 = (((_local14 - 1) >= 0)) ? (_local14 - 1) : (_local6 - 1);
_local19 = EdgeSeparation(_arg2, _arg3, _local18, _arg4, _arg5);
if (_local19 > 0){
return (_local19);
};
_local20 = (((_local14 + 1) < _local6)) ? (_local14 + 1) : 0;
_local21 = EdgeSeparation(_arg2, _arg3, _local20, _arg4, _arg5);
if (_local21 > 0){
return (_local21);
};
if ((((_local19 > _local17)) && ((_local19 > _local21)))){
_local24 = -1;
_local22 = _local18;
_local23 = _local19;
} else {
if (_local21 > _local17){
_local24 = 1;
_local22 = _local20;
_local23 = _local21;
} else {
_arg1[0] = _local14;
return (_local17);
};
};
while (true) {
if (_local24 == -1){
_local14 = (((_local22 - 1) >= 0)) ? (_local22 - 1) : (_local6 - 1);
} else {
_local14 = (((_local22 + 1) < _local6)) ? (_local22 + 1) : 0;
};
_local17 = EdgeSeparation(_arg2, _arg3, _local14, _arg4, _arg5);
if (_local17 > 0){
return (_local17);
};
if (_local17 > _local23){
_local22 = _local14;
_local23 = _local17;
} else {
break;
};
};
_arg1[0] = _local22;
return (_local23);
}
public static function ClipSegmentToLine(_arg1:Array, _arg2:Array, _arg3:b2Vec2, _arg4:Number):int{
var _local5:ClipVertex;
var _local6:int;
var _local7:b2Vec2;
var _local8:b2Vec2;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:b2Vec2;
var _local13:ClipVertex;
_local6 = 0;
_local5 = _arg2[0];
_local7 = _local5.v;
_local5 = _arg2[1];
_local8 = _local5.v;
_local9 = (b2Math.b2Dot(_arg3, _local7) - _arg4);
_local10 = (b2Math.b2Dot(_arg3, _local8) - _arg4);
if (_local9 <= 0){
var _temp1 = _local6;
_local6 = (_local6 + 1);
var _local14 = _temp1;
_arg1[_local14] = _arg2[0];
};
if (_local10 <= 0){
var _temp2 = _local6;
_local6 = (_local6 + 1);
_local14 = _temp2;
_arg1[_local14] = _arg2[1];
};
if ((_local9 * _local10) < 0){
_local11 = (_local9 / (_local9 - _local10));
_local5 = _arg1[_local6];
_local12 = _local5.v;
_local12.x = (_local7.x + (_local11 * (_local8.x - _local7.x)));
_local12.y = (_local7.y + (_local11 * (_local8.y - _local7.y)));
_local5 = _arg1[_local6];
if (_local9 > 0){
_local13 = _arg2[0];
_local5.id = _local13.id;
} else {
_local13 = _arg2[1];
_local5.id = _local13.id;
};
_local6++;
};
return (_local6);
}
public static function b2CollideCircles(_arg1:b2Manifold, _arg2:b2CircleShape, _arg3:b2XForm, _arg4:b2CircleShape, _arg5:b2XForm):void{
var _local6:b2Mat22;
var _local7:b2Vec2;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:b2ManifoldPoint;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Number;
var _local24:Number;
var _local25:Number;
_arg1.pointCount = 0;
_local6 = _arg3.R;
_local7 = _arg2.m_localPosition;
_local8 = (_arg3.position.x + ((_local6.col1.x * _local7.x) + (_local6.col2.x * _local7.y)));
_local9 = (_arg3.position.y + ((_local6.col1.y * _local7.x) + (_local6.col2.y * _local7.y)));
_local6 = _arg5.R;
_local7 = _arg4.m_localPosition;
_local10 = (_arg5.position.x + ((_local6.col1.x * _local7.x) + (_local6.col2.x * _local7.y)));
_local11 = (_arg5.position.y + ((_local6.col1.y * _local7.x) + (_local6.col2.y * _local7.y)));
_local12 = (_local10 - _local8);
_local13 = (_local11 - _local9);
_local14 = ((_local12 * _local12) + (_local13 * _local13));
_local15 = _arg2.m_radius;
_local16 = _arg4.m_radius;
_local17 = (_local15 + _local16);
if (_local14 > (_local17 * _local17)){
return;
};
if (_local14 < Number.MIN_VALUE){
_local18 = -(_local17);
_arg1.normal.Set(0, 1);
} else {
_local24 = Math.sqrt(_local14);
_local18 = (_local24 - _local17);
_local25 = (1 / _local24);
_arg1.normal.x = (_local25 * _local12);
_arg1.normal.y = (_local25 * _local13);
};
_arg1.pointCount = 1;
_local19 = _arg1.points[0];
_local19.id.key = 0;
_local19.separation = _local18;
_local8 = (_local8 + (_local15 * _arg1.normal.x));
_local9 = (_local9 + (_local15 * _arg1.normal.y));
_local10 = (_local10 - (_local16 * _arg1.normal.x));
_local11 = (_local11 - (_local16 * _arg1.normal.y));
_local20 = (0.5 * (_local8 + _local10));
_local21 = (0.5 * (_local9 + _local11));
_local22 = (_local20 - _arg3.position.x);
_local23 = (_local21 - _arg3.position.y);
_local19.localPoint1.x = ((_local22 * _arg3.R.col1.x) + (_local23 * _arg3.R.col1.y));
_local19.localPoint1.y = ((_local22 * _arg3.R.col2.x) + (_local23 * _arg3.R.col2.y));
_local22 = (_local20 - _arg5.position.x);
_local23 = (_local21 - _arg5.position.y);
_local19.localPoint2.x = ((_local22 * _arg5.R.col1.x) + (_local23 * _arg5.R.col1.y));
_local19.localPoint2.y = ((_local22 * _arg5.R.col2.x) + (_local23 * _arg5.R.col2.y));
}
public static function b2CollidePolygonAndCircle(_arg1:b2Manifold, _arg2:b2PolygonShape, _arg3:b2XForm, _arg4:b2CircleShape, _arg5:b2XForm):void{
var _local6:b2ManifoldPoint;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:b2Vec2;
var _local12:b2Mat22;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:int;
var _local19:Number;
var _local20:Number;
var _local21:int;
var _local22:Array;
var _local23:Array;
var _local24:int;
var _local25:int;
var _local26:int;
var _local27:b2Vec2;
var _local28:Number;
var _local29:Number;
var _local30:Number;
var _local31:Number;
var _local32:Number;
var _local33:Number;
var _local34:Number;
_arg1.pointCount = 0;
_local12 = _arg5.R;
_local11 = _arg4.m_localPosition;
_local13 = (_arg5.position.x + ((_local12.col1.x * _local11.x) + (_local12.col2.x * _local11.y)));
_local14 = (_arg5.position.y + ((_local12.col1.y * _local11.x) + (_local12.col2.y * _local11.y)));
_local7 = (_local13 - _arg3.position.x);
_local8 = (_local14 - _arg3.position.y);
_local12 = _arg3.R;
_local15 = ((_local7 * _local12.col1.x) + (_local8 * _local12.col1.y));
_local16 = ((_local7 * _local12.col2.x) + (_local8 * _local12.col2.y));
_local18 = 0;
_local19 = -(Number.MAX_VALUE);
_local20 = _arg4.m_radius;
_local21 = _arg2.m_vertexCount;
_local22 = _arg2.m_vertices;
_local23 = _arg2.m_normals;
_local24 = 0;
while (_local24 < _local21) {
_local11 = _local22[_local24];
_local7 = (_local15 - _local11.x);
_local8 = (_local16 - _local11.y);
_local11 = _local23[_local24];
_local34 = ((_local11.x * _local7) + (_local11.y * _local8));
if (_local34 > _local20){
return;
};
if (_local34 > _local19){
_local19 = _local34;
_local18 = _local24;
};
_local24++;
};
if (_local19 < Number.MIN_VALUE){
_arg1.pointCount = 1;
_local11 = _local23[_local18];
_local12 = _arg3.R;
_arg1.normal.x = ((_local12.col1.x * _local11.x) + (_local12.col2.x * _local11.y));
_arg1.normal.y = ((_local12.col1.y * _local11.x) + (_local12.col2.y * _local11.y));
_local6 = _arg1.points[0];
_local6.id.features.incidentEdge = _local18;
_local6.id.features.incidentVertex = b2_nullFeature;
_local6.id.features.referenceEdge = 0;
_local6.id.features.flip = 0;
_local9 = (_local13 - (_local20 * _arg1.normal.x));
_local10 = (_local14 - (_local20 * _arg1.normal.y));
_local7 = (_local9 - _arg3.position.x);
_local8 = (_local10 - _arg3.position.y);
_local12 = _arg3.R;
_local6.localPoint1.x = ((_local7 * _local12.col1.x) + (_local8 * _local12.col1.y));
_local6.localPoint1.y = ((_local7 * _local12.col2.x) + (_local8 * _local12.col2.y));
_local7 = (_local9 - _arg5.position.x);
_local8 = (_local10 - _arg5.position.y);
_local12 = _arg5.R;
_local6.localPoint2.x = ((_local7 * _local12.col1.x) + (_local8 * _local12.col1.y));
_local6.localPoint2.y = ((_local7 * _local12.col2.x) + (_local8 * _local12.col2.y));
_local6.separation = (_local19 - _local20);
return;
};
_local25 = _local18;
_local26 = (((_local25 + 1) < _local21)) ? (_local25 + 1) : 0;
_local11 = _local22[_local25];
_local27 = _local22[_local26];
_local28 = (_local27.x - _local11.x);
_local29 = (_local27.y - _local11.y);
_local30 = Math.sqrt(((_local28 * _local28) + (_local29 * _local29)));
_local28 = (_local28 / _local30);
_local29 = (_local29 / _local30);
_local7 = (_local15 - _local11.x);
_local8 = (_local16 - _local11.y);
_local31 = ((_local7 * _local28) + (_local8 * _local29));
_local6 = _arg1.points[0];
if (_local31 <= 0){
_local32 = _local11.x;
_local33 = _local11.y;
_local6.id.features.incidentEdge = b2_nullFeature;
_local6.id.features.incidentVertex = _local25;
} else {
if (_local31 >= _local30){
_local32 = _local27.x;
_local33 = _local27.y;
_local6.id.features.incidentEdge = b2_nullFeature;
_local6.id.features.incidentVertex = _local26;
} else {
_local32 = ((_local28 * _local31) + _local11.x);
_local33 = ((_local29 * _local31) + _local11.y);
_local6.id.features.incidentEdge = _local18;
_local6.id.features.incidentVertex = b2_nullFeature;
};
};
_local7 = (_local15 - _local32);
_local8 = (_local16 - _local33);
_local17 = Math.sqrt(((_local7 * _local7) + (_local8 * _local8)));
_local7 = (_local7 / _local17);
_local8 = (_local8 / _local17);
if (_local17 > _local20){
return;
};
_arg1.pointCount = 1;
_local12 = _arg3.R;
_arg1.normal.x = ((_local12.col1.x * _local7) + (_local12.col2.x * _local8));
_arg1.normal.y = ((_local12.col1.y * _local7) + (_local12.col2.y * _local8));
_local9 = (_local13 - (_local20 * _arg1.normal.x));
_local10 = (_local14 - (_local20 * _arg1.normal.y));
_local7 = (_local9 - _arg3.position.x);
_local8 = (_local10 - _arg3.position.y);
_local12 = _arg3.R;
_local6.localPoint1.x = ((_local7 * _local12.col1.x) + (_local8 * _local12.col1.y));
_local6.localPoint1.y = ((_local7 * _local12.col2.x) + (_local8 * _local12.col2.y));
_local7 = (_local9 - _arg5.position.x);
_local8 = (_local10 - _arg5.position.y);
_local12 = _arg5.R;
_local6.localPoint2.x = ((_local7 * _local12.col1.x) + (_local8 * _local12.col1.y));
_local6.localPoint2.y = ((_local7 * _local12.col2.x) + (_local8 * _local12.col2.y));
_local6.separation = (_local17 - _local20);
_local6.id.features.referenceEdge = 0;
_local6.id.features.flip = 0;
}
}
}//package Box2D.Collision
Section 16
//b2ContactID (Box2D.Collision.b2ContactID)
package Box2D.Collision {
import Box2D.Common.*;
public class b2ContactID {
b2internal var _key:uint;
public var features:Features;
public function b2ContactID(){
features = new Features();
super();
features._m_id = this;
}
public function Set(_arg1:b2ContactID):void{
key = _arg1._key;
}
public function Copy():b2ContactID{
var _local1:b2ContactID;
_local1 = new b2ContactID();
_local1.key = key;
return (_local1);
}
public function get key():uint{
return (_key);
}
public function set key(_arg1:uint):void{
_key = _arg1;
features._referenceEdge = (_key & 0xFF);
features._incidentEdge = (((_key & 0xFF00) >> 8) & 0xFF);
features._incidentVertex = (((_key & 0xFF0000) >> 16) & 0xFF);
features._flip = (((_key & 4278190080) >> 24) & 0xFF);
}
}
}//package Box2D.Collision
Section 17
//b2ContactPoint (Box2D.Collision.b2ContactPoint)
package Box2D.Collision {
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
public class b2ContactPoint {
public var separation:Number;
public var normal:b2Vec2;
public var position:b2Vec2;
public var restitution:Number;
public var shape1:b2Shape;
public var shape2:b2Shape;
public var id:b2ContactID;
public var friction:Number;
public var velocity:b2Vec2;
public function b2ContactPoint(){
position = new b2Vec2();
velocity = new b2Vec2();
normal = new b2Vec2();
id = new b2ContactID();
super();
}
}
}//package Box2D.Collision
Section 18
//b2Distance (Box2D.Collision.b2Distance)
package Box2D.Collision {
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
import Box2D.Common.*;
public class b2Distance {
private static var s_p2s:Array = [new b2Vec2(), new b2Vec2(), new b2Vec2()];
private static var s_p1s:Array = [new b2Vec2(), new b2Vec2(), new b2Vec2()];
private static var s_points:Array = [new b2Vec2(), new b2Vec2(), new b2Vec2()];
private static var gPoint:b2Point = new b2Point();
public static var g_GJK_Iterations:int = 0;
public static function InPoints(_arg1:b2Vec2, _arg2:Array, _arg3:int):Boolean{
var _local4:Number;
var _local5:int;
var _local6:b2Vec2;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
_local4 = (100 * Number.MIN_VALUE);
_local5 = 0;
while (_local5 < _arg3) {
_local6 = _arg2[_local5];
_local7 = (((_arg1.x - _local6.x) < 0)) ? -((_arg1.x - _local6.x)) : (_arg1.x - _local6.x);
_local8 = (((_arg1.y - _local6.y) < 0)) ? -((_arg1.y - _local6.y)) : (_arg1.y - _local6.y);
_local9 = ((_arg1.x < 0)) ? -(_arg1.x) : (((_arg1.x > _local6.x) < 0)) ? -(_local6.x) : (_local6.x) ? ((_arg1.x < 0)) ? -(_arg1.x) : _arg1.x : ((_local6.x < 0)) ? -(_local6.x) : _local6.x;
_local10 = ((_arg1.x < 0)) ? -(_arg1.y) : (((_arg1.y > _local6.y) < 0)) ? -(_local6.y) : (_local6.y) ? ((_arg1.y < 0)) ? -(_arg1.y) : _arg1.y : ((_local6.y < 0)) ? -(_local6.y) : _local6.y;
if ((((_local7 < (_local4 * (_local9 + 1)))) && ((_local8 < (_local4 * (_local10 + 1)))))){
return (true);
};
_local5++;
};
return (false);
}
public static function DistanceGeneric(_arg1:b2Vec2, _arg2:b2Vec2, _arg3, _arg4:b2XForm, _arg5, _arg6:b2XForm):Number{
var _local7:b2Vec2;
var _local8:Array;
var _local9:Array;
var _local10:Array;
var _local11:int;
var _local12:Number;
var _local13:int;
var _local14:int;
var _local15:Number;
var _local16:Number;
var _local17:b2Vec2;
var _local18:b2Vec2;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:int;
_local8 = s_p1s;
_local9 = s_p2s;
_local10 = s_points;
_local11 = 0;
_arg1.SetV(_arg3.GetFirstVertex(_arg4));
_arg2.SetV(_arg5.GetFirstVertex(_arg6));
_local12 = 0;
_local13 = 20;
_local14 = 0;
while (_local14 < _local13) {
_local15 = (_arg2.x - _arg1.x);
_local16 = (_arg2.y - _arg1.y);
_local17 = _arg3.Support(_arg4, _local15, _local16);
_local18 = _arg5.Support(_arg6, -(_local15), -(_local16));
_local12 = ((_local15 * _local15) + (_local16 * _local16));
_local19 = (_local18.x - _local17.x);
_local20 = (_local18.y - _local17.y);
_local21 = ((_local15 * _local19) + (_local16 * _local20));
if ((_local12 - _local21) <= (0.01 * _local12)){
if (_local11 == 0){
_arg1.SetV(_local17);
_arg2.SetV(_local18);
};
g_GJK_Iterations = _local14;
return (Math.sqrt(_local12));
};
switch (_local11){
case 0:
_local7 = _local8[0];
_local7.SetV(_local17);
_local7 = _local9[0];
_local7.SetV(_local18);
_local7 = _local10[0];
_local7.x = _local19;
_local7.y = _local20;
_arg1.SetV(_local8[0]);
_arg2.SetV(_local9[0]);
_local11++;
break;
case 1:
_local7 = _local8[1];
_local7.SetV(_local17);
_local7 = _local9[1];
_local7.SetV(_local18);
_local7 = _local10[1];
_local7.x = _local19;
_local7.y = _local20;
_local11 = ProcessTwo(_arg1, _arg2, _local8, _local9, _local10);
break;
case 2:
_local7 = _local8[2];
_local7.SetV(_local17);
_local7 = _local9[2];
_local7.SetV(_local18);
_local7 = _local10[2];
_local7.x = _local19;
_local7.y = _local20;
_local11 = ProcessThree(_arg1, _arg2, _local8, _local9, _local10);
break;
};
if (_local11 == 3){
g_GJK_Iterations = _local14;
return (0);
};
_local22 = -(Number.MAX_VALUE);
_local23 = 0;
while (_local23 < _local11) {
_local7 = _local10[_local23];
_local22 = b2Math.b2Max(_local22, ((_local7.x * _local7.x) + (_local7.y * _local7.y)));
_local23++;
};
_local15 = (_arg2.x - _arg1.x);
_local16 = (_arg2.y - _arg1.y);
_local12 = ((_local15 * _local15) + (_local16 * _local16));
if (_local12 <= ((100 * Number.MIN_VALUE) * _local22)){
g_GJK_Iterations = _local14;
return (Math.sqrt(_local12));
};
_local14++;
};
g_GJK_Iterations = _local13;
return (Math.sqrt(_local12));
}
public static function DistanceEdgeCircle(_arg1:b2Vec2, _arg2:b2Vec2, _arg3:b2EdgeShape, _arg4:b2XForm, _arg5:b2CircleShape, _arg6:b2XForm):Number{
var _local7:b2Vec2;
var _local8:Number;
var _local9:b2Mat22;
var _local10:b2Vec2;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
_local8 = (_arg5.m_radius - b2Settings.b2_toiSlop);
_local9 = _arg6.R;
_local10 = _arg5.m_localPosition;
_local11 = (_arg6.position.x + ((_local9.col1.x * _local10.x) + (_local9.col2.x * _local10.y)));
_local12 = (_arg6.position.y + ((_local9.col1.y * _local10.x) + (_local9.col2.y * _local10.y)));
_local9 = _arg4.R;
_local13 = (_local11 - _arg4.position.x);
_local14 = (_local12 - _arg4.position.y);
_local15 = ((_local13 * _local9.col1.x) + (_local14 * _local9.col1.y));
_local16 = ((_local13 * _local9.col2.x) + (_local14 * _local9.col2.y));
_local17 = (((_local15 - _arg3.m_coreV1.x) * _arg3.m_direction.x) + ((_local16 - _arg3.m_coreV1.y) * _arg3.m_direction.y));
if (_local17 <= 0){
_local9 = _arg4.R;
_local10 = _arg3.m_coreV1;
_arg1.x = (_arg4.position.x + ((_local9.col1.x * _local10.x) + (_local9.col2.x * _local10.y)));
_arg1.y = (_arg4.position.y + ((_local9.col1.y * _local10.x) + (_local9.col2.y * _local10.y)));
} else {
if (_local17 >= _arg3.m_length){
_local9 = _arg4.R;
_local10 = _arg3.m_coreV2;
_arg1.x = (_arg4.position.x + ((_local9.col1.x * _local10.x) + (_local9.col2.x * _local10.y)));
_arg1.y = (_arg4.position.y + ((_local9.col1.y * _local10.x) + (_local9.col2.y * _local10.y)));
} else {
_local9 = _arg4.R;
_local13 = (_arg3.m_coreV1.x + (_local17 * _arg3.m_direction.x));
_local14 = (_arg3.m_coreV1.y + (_local17 * _arg3.m_direction.y));
_arg1.x = (_arg4.position.x + ((_local9.col1.x * _local13) + (_local9.col2.x * _local14)));
_arg1.y = (_arg4.position.y + ((_local9.col1.y * _local13) + (_local9.col2.y * _local14)));
_local17 = (((_local15 - _arg3.m_coreV1.x) * _arg3.m_normal.x) + ((_local16 - _arg3.m_coreV1.y) * _arg3.m_normal.y));
if (_local17 < 0){
if (_local17 < -(_local8)){
_local9 = _arg4.R;
_local13 = (_local15 + (_local8 * _arg3.m_normal.x));
_local14 = (_local16 + (_local8 * _arg3.m_normal.y));
_arg2.x = (_arg4.position.x + ((_local9.col1.x * _local13) + (_local9.col2.x * _local14)));
_arg2.y = (_arg4.position.y + ((_local9.col1.y * _local13) + (_local9.col2.y * _local14)));
return ((-(_local17) - _local8));
};
_arg2.x = _arg1.x;
_arg2.y = _arg1.y;
return (0);
} else {
if (_local17 > _local8){
_local9 = _arg4.R;
_local13 = (_local15 - (_local8 * _arg3.m_normal.x));
_local14 = (_local16 - (_local8 * _arg3.m_normal.y));
_arg2.x = (_arg4.position.x + ((_local9.col1.x * _local13) + (_local9.col2.x * _local14)));
_arg2.y = (_arg4.position.y + ((_local9.col1.y * _local13) + (_local9.col2.y * _local14)));
return ((_local17 - _local8));
};
_arg2.x = _arg1.x;
_arg2.y = _arg1.y;
return (0);
};
};
};
_local13 = (_local11 - _arg1.x);
_local14 = (_local12 - _arg1.y);
_local17 = ((_local13 * _local13) + (_local14 * _local14));
if (_local17 > (_local8 * _local8)){
_local17 = Math.sqrt(_local17);
_arg2.x = (_local11 - ((_local8 * _local13) / _local17));
_arg2.y = (_local12 - ((_local8 * _local14) / _local17));
return ((_local17 - _local8));
};
_arg2.x = _arg1.x;
_arg2.y = _arg1.y;
return (0);
}
public static function DistanceCC(_arg1:b2Vec2, _arg2:b2Vec2, _arg3:b2CircleShape, _arg4:b2XForm, _arg5:b2CircleShape, _arg6:b2XForm):Number{
var _local7:b2Mat22;
var _local8:b2Vec2;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
_local7 = _arg4.R;
_local8 = _arg3.m_localPosition;
_local9 = (_arg4.position.x + ((_local7.col1.x * _local8.x) + (_local7.col2.x * _local8.y)));
_local10 = (_arg4.position.y + ((_local7.col1.y * _local8.x) + (_local7.col2.y * _local8.y)));
_local7 = _arg6.R;
_local8 = _arg5.m_localPosition;
_local11 = (_arg6.position.x + ((_local7.col1.x * _local8.x) + (_local7.col2.x * _local8.y)));
_local12 = (_arg6.position.y + ((_local7.col1.y * _local8.x) + (_local7.col2.y * _local8.y)));
_local13 = (_local11 - _local9);
_local14 = (_local12 - _local10);
_local15 = ((_local13 * _local13) + (_local14 * _local14));
_local16 = (_arg3.m_radius - b2Settings.b2_toiSlop);
_local17 = (_arg5.m_radius - b2Settings.b2_toiSlop);
_local18 = (_local16 + _local17);
if (_local15 > (_local18 * _local18)){
_local19 = Math.sqrt(_local15);
_local13 = (_local13 / _local19);
_local14 = (_local14 / _local19);
_local20 = (_local19 - _local18);
_arg1.x = (_local9 + (_local16 * _local13));
_arg1.y = (_local10 + (_local16 * _local14));
_arg2.x = (_local11 - (_local17 * _local13));
_arg2.y = (_local12 - (_local17 * _local14));
return (_local20);
};
if (_local15 > (Number.MIN_VALUE * Number.MIN_VALUE)){
_local19 = Math.sqrt(_local15);
_local13 = (_local13 / _local19);
_local14 = (_local14 / _local19);
_arg1.x = (_local9 + (_local16 * _local13));
_arg1.y = (_local10 + (_local16 * _local14));
_arg2.x = _arg1.x;
_arg2.y = _arg1.y;
return (0);
};
_arg1.x = _local9;
_arg1.y = _local10;
_arg2.x = _arg1.x;
_arg2.y = _arg1.y;
return (0);
}
public static function ProcessThree(_arg1:b2Vec2, _arg2:b2Vec2, _arg3:Array, _arg4:Array, _arg5:Array):int{
var _local6:b2Vec2;
var _local7:b2Vec2;
var _local8:b2Vec2;
var _local9:b2Vec2;
var _local10:b2Vec2;
var _local11:b2Vec2;
var _local12:b2Vec2;
var _local13:b2Vec2;
var _local14:b2Vec2;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Number;
var _local24:Number;
var _local25:Number;
var _local26:Number;
var _local27:Number;
var _local28:Number;
var _local29:Number;
var _local30:Number;
var _local31:Number;
var _local32:Number;
var _local33:Number;
var _local34:Number;
var _local35:Number;
var _local36:Number;
var _local37:Number;
var _local38:Number;
var _local39:Number;
var _local40:Number;
var _local41:Number;
_local6 = _arg5[0];
_local7 = _arg5[1];
_local8 = _arg5[2];
_local9 = _arg3[0];
_local10 = _arg3[1];
_local11 = _arg3[2];
_local12 = _arg4[0];
_local13 = _arg4[1];
_local14 = _arg4[2];
_local15 = _local6.x;
_local16 = _local6.y;
_local17 = _local7.x;
_local18 = _local7.y;
_local19 = _local8.x;
_local20 = _local8.y;
_local21 = (_local17 - _local15);
_local22 = (_local18 - _local16);
_local23 = (_local19 - _local15);
_local24 = (_local20 - _local16);
_local25 = (_local19 - _local17);
_local26 = (_local20 - _local18);
_local27 = -(((_local15 * _local21) + (_local16 * _local22)));
_local28 = ((_local17 * _local21) + (_local18 * _local22));
_local29 = -(((_local15 * _local23) + (_local16 * _local24)));
_local30 = ((_local19 * _local23) + (_local20 * _local24));
_local31 = -(((_local17 * _local25) + (_local18 * _local26)));
_local32 = ((_local19 * _local25) + (_local20 * _local26));
if ((((_local30 <= 0)) && ((_local32 <= 0)))){
_arg1.SetV(_local11);
_arg2.SetV(_local14);
_local9.SetV(_local11);
_local12.SetV(_local14);
_local6.SetV(_local8);
return (1);
};
_local33 = ((_local21 * _local24) - (_local22 * _local23));
_local34 = (_local33 * ((_local15 * _local18) - (_local16 * _local17)));
_local36 = (_local33 * ((_local17 * _local20) - (_local18 * _local19)));
if ((((((((_local36 <= 0)) && ((_local31 >= 0)))) && ((_local32 >= 0)))) && (((_local31 + _local32) > 0)))){
_local35 = (_local31 / (_local31 + _local32));
_arg1.x = (_local10.x + (_local35 * (_local11.x - _local10.x)));
_arg1.y = (_local10.y + (_local35 * (_local11.y - _local10.y)));
_arg2.x = (_local13.x + (_local35 * (_local14.x - _local13.x)));
_arg2.y = (_local13.y + (_local35 * (_local14.y - _local13.y)));
_local9.SetV(_local11);
_local12.SetV(_local14);
_local6.SetV(_local8);
return (2);
};
_local37 = (_local33 * ((_local19 * _local16) - (_local20 * _local15)));
if ((((((((_local37 <= 0)) && ((_local29 >= 0)))) && ((_local30 >= 0)))) && (((_local29 + _local30) > 0)))){
_local35 = (_local29 / (_local29 + _local30));
_arg1.x = (_local9.x + (_local35 * (_local11.x - _local9.x)));
_arg1.y = (_local9.y + (_local35 * (_local11.y - _local9.y)));
_arg2.x = (_local12.x + (_local35 * (_local14.x - _local12.x)));
_arg2.y = (_local12.y + (_local35 * (_local14.y - _local12.y)));
_local10.SetV(_local11);
_local13.SetV(_local14);
_local7.SetV(_local8);
return (2);
};
_local38 = ((_local36 + _local37) + _local34);
_local38 = (1 / _local38);
_local39 = (_local36 * _local38);
_local40 = (_local37 * _local38);
_local41 = ((1 - _local39) - _local40);
_arg1.x = (((_local39 * _local9.x) + (_local40 * _local10.x)) + (_local41 * _local11.x));
_arg1.y = (((_local39 * _local9.y) + (_local40 * _local10.y)) + (_local41 * _local11.y));
_arg2.x = (((_local39 * _local12.x) + (_local40 * _local13.x)) + (_local41 * _local14.x));
_arg2.y = (((_local39 * _local12.y) + (_local40 * _local13.y)) + (_local41 * _local14.y));
return (3);
}
public static function DistancePC(_arg1:b2Vec2, _arg2:b2Vec2, _arg3:b2PolygonShape, _arg4:b2XForm, _arg5:b2CircleShape, _arg6:b2XForm):Number{
var _local7:b2Mat22;
var _local8:b2Vec2;
var _local9:b2Point;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
_local9 = gPoint;
_local8 = _arg5.m_localPosition;
_local7 = _arg6.R;
_local9.p.x = (_arg6.position.x + ((_local7.col1.x * _local8.x) + (_local7.col2.x * _local8.y)));
_local9.p.y = (_arg6.position.y + ((_local7.col1.y * _local8.x) + (_local7.col2.y * _local8.y)));
_local10 = DistanceGeneric(_arg1, _arg2, _arg3, _arg4, _local9, b2Math.b2XForm_identity);
_local11 = (_arg5.m_radius - b2Settings.b2_toiSlop);
if (_local10 > _local11){
_local10 = (_local10 - _local11);
_local12 = (_arg2.x - _arg1.x);
_local13 = (_arg2.y - _arg1.y);
_local14 = Math.sqrt(((_local12 * _local12) + (_local13 * _local13)));
_local12 = (_local12 / _local14);
_local13 = (_local13 / _local14);
_arg2.x = (_arg2.x - (_local11 * _local12));
_arg2.y = (_arg2.y - (_local11 * _local13));
} else {
_local10 = 0;
_arg2.x = _arg1.x;
_arg2.y = _arg1.y;
};
return (_local10);
}
public static function Distance(_arg1:b2Vec2, _arg2:b2Vec2, _arg3:b2Shape, _arg4:b2XForm, _arg5:b2Shape, _arg6:b2XForm):Number{
var _local7:int;
var _local8:int;
_local7 = _arg3.m_type;
_local8 = _arg5.m_type;
if ((((_local7 == b2Shape.e_circleShape)) && ((_local8 == b2Shape.e_circleShape)))){
return (DistanceCC(_arg1, _arg2, (_arg3 as b2CircleShape), _arg4, (_arg5 as b2CircleShape), _arg6));
};
if ((((_local7 == b2Shape.e_polygonShape)) && ((_local8 == b2Shape.e_circleShape)))){
return (DistancePC(_arg1, _arg2, (_arg3 as b2PolygonShape), _arg4, (_arg5 as b2CircleShape), _arg6));
};
if ((((_local7 == b2Shape.e_circleShape)) && ((_local8 == b2Shape.e_polygonShape)))){
return (DistancePC(_arg2, _arg1, (_arg5 as b2PolygonShape), _arg6, (_arg3 as b2CircleShape), _arg4));
};
if ((((_local7 == b2Shape.e_polygonShape)) && ((_local8 == b2Shape.e_polygonShape)))){
return (DistanceGeneric(_arg1, _arg2, _arg3, _arg4, _arg5, _arg6));
};
if ((((_local7 == b2Shape.e_edgeShape)) && ((_local8 == b2Shape.e_circleShape)))){
return (DistanceEdgeCircle(_arg1, _arg2, (_arg3 as b2EdgeShape), _arg4, (_arg5 as b2CircleShape), _arg6));
};
if ((((_local7 == b2Shape.e_circleShape)) && ((_local8 == b2Shape.e_edgeShape)))){
return (DistanceEdgeCircle(_arg2, _arg1, (_arg5 as b2EdgeShape), _arg6, (_arg3 as b2CircleShape), _arg4));
};
if ((((_local7 == b2Shape.e_polygonShape)) && ((_local8 == b2Shape.e_edgeShape)))){
return (DistanceGeneric(_arg2, _arg1, _arg5, _arg6, _arg3, _arg4));
};
if ((((_local7 == b2Shape.e_edgeShape)) && ((_local8 == b2Shape.e_polygonShape)))){
return (DistanceGeneric(_arg1, _arg2, _arg3, _arg4, _arg5, _arg6));
};
return (0);
}
public static function ProcessTwo(_arg1:b2Vec2, _arg2:b2Vec2, _arg3:Array, _arg4:Array, _arg5:Array):int{
var _local6:b2Vec2;
var _local7:b2Vec2;
var _local8:b2Vec2;
var _local9:b2Vec2;
var _local10:b2Vec2;
var _local11:b2Vec2;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
_local6 = _arg5[0];
_local7 = _arg5[1];
_local8 = _arg3[0];
_local9 = _arg3[1];
_local10 = _arg4[0];
_local11 = _arg4[1];
_local12 = -(_local7.x);
_local13 = -(_local7.y);
_local14 = (_local6.x - _local7.x);
_local15 = (_local6.y - _local7.y);
_local16 = Math.sqrt(((_local14 * _local14) + (_local15 * _local15)));
_local14 = (_local14 / _local16);
_local15 = (_local15 / _local16);
_local17 = ((_local12 * _local14) + (_local13 * _local15));
if ((((_local17 <= 0)) || ((_local16 < Number.MIN_VALUE)))){
_arg1.SetV(_local9);
_arg2.SetV(_local11);
_local8.SetV(_local9);
_local10.SetV(_local11);
_local6.SetV(_local7);
return (1);
};
_local17 = (_local17 / _local16);
_arg1.x = (_local9.x + (_local17 * (_local8.x - _local9.x)));
_arg1.y = (_local9.y + (_local17 * (_local8.y - _local9.y)));
_arg2.x = (_local11.x + (_local17 * (_local10.x - _local11.x)));
_arg2.y = (_local11.y + (_local17 * (_local10.y - _local11.y)));
return (2);
}
}
}//package Box2D.Collision
Section 19
//b2Manifold (Box2D.Collision.b2Manifold)
package Box2D.Collision {
import Box2D.Common.Math.*;
import Box2D.Common.*;
public class b2Manifold {
public var points:Array;
public var pointCount:int;// = 0
public var normal:b2Vec2;
public function b2Manifold(){
var _local1:int;
pointCount = 0;
super();
points = new Array(b2Settings.b2_maxManifoldPoints);
_local1 = 0;
while (_local1 < b2Settings.b2_maxManifoldPoints) {
points[_local1] = new b2ManifoldPoint();
_local1++;
};
normal = new b2Vec2();
}
public function Set(_arg1:b2Manifold):void{
var _local2:int;
pointCount = _arg1.pointCount;
_local2 = 0;
while (_local2 < b2Settings.b2_maxManifoldPoints) {
(points[_local2] as b2ManifoldPoint).Set(_arg1.points[_local2]);
_local2++;
};
normal.SetV(_arg1.normal);
}
public function Reset():void{
var _local1:int;
_local1 = 0;
while (_local1 < b2Settings.b2_maxManifoldPoints) {
(points[_local1] as b2ManifoldPoint).Reset();
_local1++;
};
normal.SetZero();
pointCount = 0;
}
}
}//package Box2D.Collision
Section 20
//b2ManifoldPoint (Box2D.Collision.b2ManifoldPoint)
package Box2D.Collision {
import Box2D.Common.Math.*;
public class b2ManifoldPoint {
public var separation:Number;
public var localPoint2:b2Vec2;
public var normalImpulse:Number;
public var tangentImpulse:Number;
public var localPoint1:b2Vec2;
public var id:b2ContactID;
public function b2ManifoldPoint(){
localPoint1 = new b2Vec2();
localPoint2 = new b2Vec2();
id = new b2ContactID();
super();
}
public function Set(_arg1:b2ManifoldPoint):void{
localPoint1.SetV(_arg1.localPoint1);
localPoint2.SetV(_arg1.localPoint2);
separation = _arg1.separation;
normalImpulse = _arg1.normalImpulse;
tangentImpulse = _arg1.tangentImpulse;
id.key = _arg1.id.key;
}
public function Reset():void{
localPoint1.SetZero();
localPoint2.SetZero();
separation = 0;
normalImpulse = 0;
tangentImpulse = 0;
id.key = 0;
}
}
}//package Box2D.Collision
Section 21
//b2OBB (Box2D.Collision.b2OBB)
package Box2D.Collision {
import Box2D.Common.Math.*;
public class b2OBB {
public var R:b2Mat22;
public var center:b2Vec2;
public var extents:b2Vec2;
public function b2OBB(){
R = new b2Mat22();
center = new b2Vec2();
extents = new b2Vec2();
super();
}
}
}//package Box2D.Collision
Section 22
//b2Pair (Box2D.Collision.b2Pair)
package Box2D.Collision {
public class b2Pair {
public var proxy1:b2Proxy;
public var proxy2:b2Proxy;
public var status:uint;
public var userData;// = null
public var next:b2Pair;
public static var e_pairBuffered:uint = 1;
public static var b2_nullProxy:uint = 0xFFFF;
public static var e_pairFinal:uint = 4;
public static var e_pairRemoved:uint = 2;
public function b2Pair(){
userData = null;
super();
}
public function SetBuffered():void{
status = (status | e_pairBuffered);
}
public function IsBuffered():Boolean{
return (((status & e_pairBuffered) == e_pairBuffered));
}
public function IsFinal():Boolean{
return (((status & e_pairFinal) == e_pairFinal));
}
public function ClearRemoved():void{
status = (status & ~(e_pairRemoved));
}
public function SetFinal():void{
status = (status | e_pairFinal);
}
public function IsRemoved():Boolean{
return (((status & e_pairRemoved) == e_pairRemoved));
}
public function ClearBuffered():void{
status = (status & ~(e_pairBuffered));
}
public function SetRemoved():void{
status = (status | e_pairRemoved);
}
}
}//package Box2D.Collision
Section 23
//b2PairCallback (Box2D.Collision.b2PairCallback)
package Box2D.Collision {
public class b2PairCallback {
public function PairRemoved(_arg1, _arg2, _arg3):void{
}
public function PairAdded(_arg1, _arg2){
return (null);
}
}
}//package Box2D.Collision
Section 24
//b2PairManager (Box2D.Collision.b2PairManager)
package Box2D.Collision {
import Box2D.Common.*;
public class b2PairManager {
b2internal var m_pairCount:int;
private var m_pairBuffer:Array;
private var m_callback:b2PairCallback;
b2internal var m_pairs:Array;
private var m_pairBufferCount:int;
private var m_broadPhase:b2BroadPhase;
private var m_freePair:b2Pair;
public function b2PairManager(){
m_pairs = new Array();
m_pairBuffer = new Array();
m_pairCount = 0;
m_pairBufferCount = 0;
m_freePair = null;
}
private function Find(_arg1:b2Proxy, _arg2:b2Proxy):b2Pair{
return (_arg1.pairs[_arg2]);
}
private function ValidateBuffer():void{
}
public function Commit():void{
var _local1:int;
var _local2:int;
var _local3:b2Pair;
var _local4:b2Proxy;
var _local5:b2Proxy;
_local2 = 0;
_local1 = 0;
while (_local1 < m_pairBufferCount) {
_local3 = m_pairBuffer[_local1];
_local3.ClearBuffered();
_local4 = _local3.proxy1;
_local5 = _local3.proxy2;
if (_local3.IsRemoved()){
if (_local3.IsFinal() == true){
m_callback.PairRemoved(_local4.userData, _local5.userData, _local3.userData);
};
m_pairBuffer[_local2] = _local3;
_local2++;
} else {
if (_local3.IsFinal() == false){
_local3.userData = m_callback.PairAdded(_local4.userData, _local5.userData);
_local3.SetFinal();
};
};
_local1++;
};
_local1 = 0;
while (_local1 < _local2) {
_local3 = m_pairBuffer[_local1];
RemovePair(_local3.proxy1, _local3.proxy2);
_local1++;
};
m_pairBufferCount = 0;
if (b2BroadPhase.s_validate){
ValidateTable();
};
}
public function RemoveBufferedPair(_arg1:b2Proxy, _arg2:b2Proxy):void{
var _local3:b2Pair;
_local3 = Find(_arg1, _arg2);
if (_local3 == null){
return;
};
if (_local3.IsBuffered() == false){
_local3.SetBuffered();
m_pairBuffer[m_pairBufferCount] = _local3;
m_pairBufferCount++;
};
_local3.SetRemoved();
if (b2BroadPhase.s_validate){
ValidateBuffer();
};
}
private function RemovePair(_arg1:b2Proxy, _arg2:b2Proxy){
var _local3:b2Pair;
var _local4:*;
_local3 = _arg1.pairs[_arg2];
if (_local3 == null){
return (null);
};
_local4 = _local3.userData;
delete _arg1.pairs[_arg2];
delete _arg2.pairs[_arg1];
_local3.next = m_freePair;
_local3.proxy1 = null;
_local3.proxy2 = null;
_local3.userData = null;
_local3.status = 0;
m_freePair = _local3;
m_pairCount--;
return (_local4);
}
public function Initialize(_arg1:b2BroadPhase, _arg2:b2PairCallback):void{
m_broadPhase = _arg1;
m_callback = _arg2;
}
public function AddBufferedPair(_arg1:b2Proxy, _arg2:b2Proxy):void{
var _local3:b2Pair;
_local3 = AddPair(_arg1, _arg2);
if (_local3.IsBuffered() == false){
_local3.SetBuffered();
m_pairBuffer[m_pairBufferCount] = _local3;
m_pairBufferCount++;
};
_local3.ClearRemoved();
if (b2BroadPhase.s_validate){
ValidateBuffer();
};
}
private function AddPair(_arg1:b2Proxy, _arg2:b2Proxy):b2Pair{
var _local3:b2Pair;
_local3 = _arg1.pairs[_arg2];
if (_local3 != null){
return (_local3);
};
if (m_freePair == null){
m_freePair = new b2Pair();
m_pairs.push(m_freePair);
};
_local3 = m_freePair;
m_freePair = _local3.next;
_local3.proxy1 = _arg1;
_local3.proxy2 = _arg2;
_local3.status = 0;
_local3.userData = null;
_local3.next = null;
_arg1.pairs[_arg2] = _local3;
_arg2.pairs[_arg1] = _local3;
m_pairCount++;
return (_local3);
}
private function ValidateTable():void{
}
}
}//package Box2D.Collision
Section 25
//b2Point (Box2D.Collision.b2Point)
package Box2D.Collision {
import Box2D.Common.Math.*;
public class b2Point {
public var p:b2Vec2;
public function b2Point(){
p = new b2Vec2();
super();
}
public function GetFirstVertex(_arg1:b2XForm):b2Vec2{
return (p);
}
public function Support(_arg1:b2XForm, _arg2:Number, _arg3:Number):b2Vec2{
return (p);
}
}
}//package Box2D.Collision
Section 26
//b2Proxy (Box2D.Collision.b2Proxy)
package Box2D.Collision {
import flash.utils.*;
public class b2Proxy {
public var overlapCount:uint;
public var userData;// = null
public var lowerBounds:Array;
public var upperBounds:Array;
public var pairs:Dictionary;
public var next:b2Proxy;
public var timeStamp:uint;
public function b2Proxy(){
lowerBounds = [uint(0), uint(0)];
upperBounds = [uint(0), uint(0)];
pairs = new Dictionary();
userData = null;
super();
}
public function IsValid():Boolean{
return (!((overlapCount == b2BroadPhase.b2_invalid)));
}
}
}//package Box2D.Collision
Section 27
//b2RayCastInput (Box2D.Collision.b2RayCastInput)
package Box2D.Collision {
import Box2D.Common.Math.*;
public class b2RayCastInput {
public var p1:b2Vec2;
public var maxFraction:Number;
public var p2:b2Vec2;
}
}//package Box2D.Collision
Section 28
//b2RayCastOutput (Box2D.Collision.b2RayCastOutput)
package Box2D.Collision {
import Box2D.Common.Math.*;
public class b2RayCastOutput {
public var fraction:Number;
public var hit:Boolean;
public var normal:b2Vec2;
}
}//package Box2D.Collision
Section 29
//b2Segment (Box2D.Collision.b2Segment)
package Box2D.Collision {
import Box2D.Common.Math.*;
public class b2Segment {
public var p1:b2Vec2;
public var p2:b2Vec2;
public function b2Segment(){
p1 = new b2Vec2();
p2 = new b2Vec2();
super();
}
public function TestSegment(_arg1:Array, _arg2:b2Vec2, _arg3:b2Segment, _arg4:Number):Boolean{
var _local5:b2Vec2;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
_local5 = _arg3.p1;
_local6 = (_arg3.p2.x - _local5.x);
_local7 = (_arg3.p2.y - _local5.y);
_local8 = (p2.x - p1.x);
_local9 = (p2.y - p1.y);
_local10 = _local9;
_local11 = -(_local8);
_local12 = (100 * Number.MIN_VALUE);
_local13 = -(((_local6 * _local10) + (_local7 * _local11)));
if (_local13 > _local12){
_local14 = (_local5.x - p1.x);
_local15 = (_local5.y - p1.y);
_local16 = ((_local14 * _local10) + (_local15 * _local11));
if ((((0 <= _local16)) && ((_local16 <= (_arg4 * _local13))))){
_local17 = ((-(_local6) * _local15) + (_local7 * _local14));
if (((((-(_local12) * _local13) <= _local17)) && ((_local17 <= (_local13 * (1 + _local12)))))){
_local16 = (_local16 / _local13);
_local18 = Math.sqrt(((_local10 * _local10) + (_local11 * _local11)));
_local10 = (_local10 / _local18);
_local11 = (_local11 / _local18);
_arg1[0] = _local16;
_arg2.Set(_local10, _local11);
return (true);
};
};
};
return (false);
}
public function ExtendForward(_arg1:b2AABB):void{
var _local2:Number;
var _local3:Number;
var _local4:Number;
_local2 = (p2.x - p1.x);
_local3 = (p2.y - p1.y);
_local4 = Math.min(((_local2 > 0)) ? ((_arg1.upperBound.x - p1.x) / _local2) : ((_local2 < 0)) ? ((_arg1.lowerBound.x - p1.x) / _local2) : Number.POSITIVE_INFINITY, ((_local3 > 0)) ? ((_arg1.upperBound.y - p1.y) / _local3) : ((_local3 < 0)) ? ((_arg1.lowerBound.y - p1.y) / _local3) : Number.POSITIVE_INFINITY);
p2.x = (p1.x + (_local2 * _local4));
p2.y = (p1.y + (_local3 * _local4));
}
public function Extend(_arg1:b2AABB):void{
ExtendForward(_arg1);
ExtendBackward(_arg1);
}
public function ExtendBackward(_arg1:b2AABB):void{
var _local2:Number;
var _local3:Number;
var _local4:Number;
_local2 = (-(p2.x) + p1.x);
_local3 = (-(p2.y) + p1.y);
_local4 = Math.min(((_local2 > 0)) ? ((_arg1.upperBound.x - p2.x) / _local2) : ((_local2 < 0)) ? ((_arg1.lowerBound.x - p2.x) / _local2) : Number.POSITIVE_INFINITY, ((_local3 > 0)) ? ((_arg1.upperBound.y - p2.y) / _local3) : ((_local3 < 0)) ? ((_arg1.lowerBound.y - p2.y) / _local3) : Number.POSITIVE_INFINITY);
p1.x = (p2.x + (_local2 * _local4));
p1.y = (p2.y + (_local3 * _local4));
}
}
}//package Box2D.Collision
Section 30
//b2TimeOfImpact (Box2D.Collision.b2TimeOfImpact)
package Box2D.Collision {
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
import Box2D.Common.*;
public class b2TimeOfImpact {
private static var b2_maxToiRootIters:int = 0;
private static var b2_maxToiIters:int = 0;
public static var s_p1:b2Vec2 = new b2Vec2();
public static var s_p2:b2Vec2 = new b2Vec2();
public static var s_xf1:b2XForm = new b2XForm();
public static var s_xf2:b2XForm = new b2XForm();
public static function TimeOfImpact(_arg1:b2Shape, _arg2:b2Sweep, _arg3:b2Shape, _arg4:b2Sweep):Number{
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:b2Vec2;
var _local18:b2Vec2;
var _local19:int;
var _local20:int;
var _local21:Number;
var _local22:Number;
var _local23:Number;
var _local24:Number;
var _local25:Number;
var _local26:b2XForm;
var _local27:b2XForm;
var _local28:Number;
var _local29:Number;
var _local30:Number;
var _local31:Number;
_local7 = _arg1.m_sweepRadius;
_local8 = _arg3.m_sweepRadius;
_local9 = _arg2.t0;
_local10 = (_arg2.c.x - _arg2.c0.x);
_local11 = (_arg2.c.y - _arg2.c0.y);
_local12 = (_arg4.c.x - _arg4.c0.x);
_local13 = (_arg4.c.y - _arg4.c0.y);
_local14 = (_arg2.a - _arg2.a0);
_local15 = (_arg4.a - _arg4.a0);
_local16 = 0;
_local17 = s_p1;
_local18 = s_p2;
_local19 = 20;
_local20 = 0;
_local21 = 0;
_local22 = 0;
_local23 = 0;
_local24 = 0;
while (true) {
_local25 = (((1 - _local16) * _local9) + _local16);
_local26 = s_xf1;
_local27 = s_xf2;
_arg2.GetXForm(_local26, _local25);
_arg4.GetXForm(_local27, _local25);
_local23 = b2Distance.Distance(_local17, _local18, _arg1, _local26, _arg3, _local27);
if (_local20 == 0){
if (_local23 > (2 * b2Settings.b2_toiSlop)){
_local24 = (1.5 * b2Settings.b2_toiSlop);
} else {
_local5 = (0.05 * b2Settings.b2_toiSlop);
_local6 = (_local23 - (0.5 * b2Settings.b2_toiSlop));
_local24 = ((_local5 > _local6)) ? _local5 : _local6;
};
};
if (((((_local23 - _local24) < (0.05 * b2Settings.b2_toiSlop))) || ((_local20 == _local19)))){
break;
};
_local21 = (_local18.x - _local17.x);
_local22 = (_local18.y - _local17.y);
_local28 = Math.sqrt(((_local21 * _local21) + (_local22 * _local22)));
_local21 = (_local21 / _local28);
_local22 = (_local22 / _local28);
_local29 = ((((_local21 * (_local10 - _local12)) + (_local22 * (_local11 - _local13))) + (((_local14 < 0)) ? -(_local14) : _local14 * _local7)) + (((_local15 < 0)) ? -(_local15) : _local15 * _local8));
if (_local29 == 0){
_local16 = 1;
break;
};
_local30 = ((_local23 - _local24) / _local29);
_local31 = (_local16 + _local30);
if ((((_local31 < 0)) || ((1 < _local31)))){
_local16 = 1;
break;
};
if (_local31 < ((1 + (100 * Number.MIN_VALUE)) * _local16)){
break;
};
_local16 = _local31;
_local20++;
};
b2_maxToiIters = b2Math.b2Max(_local20, b2_maxToiIters);
return (_local16);
}
}
}//package Box2D.Collision
Section 31
//ClipVertex (Box2D.Collision.ClipVertex)
package Box2D.Collision {
import Box2D.Common.Math.*;
public class ClipVertex {
public var v:b2Vec2;
public var id:b2ContactID;
public function ClipVertex(){
v = new b2Vec2();
id = new b2ContactID();
super();
}
}
}//package Box2D.Collision
Section 32
//Features (Box2D.Collision.Features)
package Box2D.Collision {
import Box2D.Common.*;
public class Features {
b2internal var _referenceEdge:int;
b2internal var _incidentEdge:int;
b2internal var _flip:int;
b2internal var _incidentVertex:int;
b2internal var _m_id:b2ContactID;
public function get referenceEdge():int{
return (_referenceEdge);
}
public function set incidentVertex(_arg1:int):void{
_incidentVertex = _arg1;
_m_id._key = ((_m_id._key & 4278255615) | ((_incidentVertex << 16) & 0xFF0000));
}
public function get flip():int{
return (_flip);
}
public function get incidentEdge():int{
return (_incidentEdge);
}
public function set referenceEdge(_arg1:int):void{
_referenceEdge = _arg1;
_m_id._key = ((_m_id._key & 4294967040) | (_referenceEdge & 0xFF));
}
public function get incidentVertex():int{
return (_incidentVertex);
}
public function set flip(_arg1:int):void{
_flip = _arg1;
_m_id._key = ((_m_id._key & 0xFFFFFF) | ((_flip << 24) & 4278190080));
}
public function set incidentEdge(_arg1:int):void{
_incidentEdge = _arg1;
_m_id._key = ((_m_id._key & 4294902015) | ((_incidentEdge << 8) & 0xFF00));
}
}
}//package Box2D.Collision
Section 33
//b2Mat22 (Box2D.Common.Math.b2Mat22)
package Box2D.Common.Math {
public class b2Mat22 {
public var col1:b2Vec2;
public var col2:b2Vec2;
public function b2Mat22(_arg1:Number=0, _arg2:b2Vec2=null, _arg3:b2Vec2=null){
var _local4:Number;
var _local5:Number;
col1 = new b2Vec2();
col2 = new b2Vec2();
super();
if (((!((_arg2 == null))) && (!((_arg3 == null))))){
col1.SetV(_arg2);
col2.SetV(_arg3);
} else {
_local4 = Math.cos(_arg1);
_local5 = Math.sin(_arg1);
col1.x = _local4;
col2.x = -(_local5);
col1.y = _local5;
col2.y = _local4;
};
}
public function SetIdentity():void{
col1.x = 1;
col2.x = 0;
col1.y = 0;
col2.y = 1;
}
public function Set(_arg1:Number):void{
var _local2:Number;
var _local3:Number;
_local2 = Math.cos(_arg1);
_local3 = Math.sin(_arg1);
col1.x = _local2;
col2.x = -(_local3);
col1.y = _local3;
col2.y = _local2;
}
public function SetVV(_arg1:b2Vec2, _arg2:b2Vec2):void{
col1.SetV(_arg1);
col2.SetV(_arg2);
}
public function SetZero():void{
col1.x = 0;
col2.x = 0;
col1.y = 0;
col2.y = 0;
}
public function SetM(_arg1:b2Mat22):void{
col1.SetV(_arg1.col1);
col2.SetV(_arg1.col2);
}
public function AddM(_arg1:b2Mat22):void{
col1.x = (col1.x + _arg1.col1.x);
col1.y = (col1.y + _arg1.col1.y);
col2.x = (col2.x + _arg1.col2.x);
col2.y = (col2.y + _arg1.col2.y);
}
public function Abs():void{
col1.Abs();
col2.Abs();
}
public function Copy():b2Mat22{
return (new b2Mat22(0, col1, col2));
}
public function GetInverse(_arg1:b2Mat22):b2Mat22{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
_local2 = col1.x;
_local3 = col2.x;
_local4 = col1.y;
_local5 = col2.y;
_local6 = ((_local2 * _local5) - (_local3 * _local4));
_local6 = (1 / _local6);
_arg1.col1.x = (_local6 * _local5);
_arg1.col2.x = (-(_local6) * _local3);
_arg1.col1.y = (-(_local6) * _local4);
_arg1.col2.y = (_local6 * _local2);
return (_arg1);
}
public function GetAngle():Number{
return (Math.atan2(col1.y, col1.x));
}
public function Solve(_arg1:b2Vec2, _arg2:Number, _arg3:Number):b2Vec2{
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
_local4 = col1.x;
_local5 = col2.x;
_local6 = col1.y;
_local7 = col2.y;
_local8 = ((_local4 * _local7) - (_local5 * _local6));
_local8 = (1 / _local8);
_arg1.x = (_local8 * ((_local7 * _arg2) - (_local5 * _arg3)));
_arg1.y = (_local8 * ((_local4 * _arg3) - (_local6 * _arg2)));
return (_arg1);
}
}
}//package Box2D.Common.Math
Section 34
//b2Mat33 (Box2D.Common.Math.b2Mat33)
package Box2D.Common.Math {
public class b2Mat33 {
public var col1:b2Vec3;
public var col2:b2Vec3;
public var col3:b2Vec3;
public function b2Mat33(_arg1:b2Vec3=null, _arg2:b2Vec3=null, _arg3:b2Vec3=null){
col1 = new b2Vec3();
col2 = new b2Vec3();
col3 = new b2Vec3();
super();
if (((((!(_arg1)) && (!(_arg2)))) && (!(_arg3)))){
col1.SetZero();
col2.SetZero();
col3.SetZero();
} else {
col1.SetV(_arg1);
col2.SetV(_arg2);
col3.SetV(_arg3);
};
}
public function SetIdentity():void{
col1.x = 1;
col2.x = 0;
col3.x = 0;
col1.y = 0;
col2.y = 1;
col3.y = 0;
col1.z = 0;
col2.z = 0;
col3.z = 1;
}
public function Solve33(_arg1:b2Vec3, _arg2:Number, _arg3:Number, _arg4:Number):b2Vec3{
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
_local5 = col1.x;
_local6 = col1.y;
_local7 = col1.z;
_local8 = col2.x;
_local9 = col2.y;
_local10 = col2.z;
_local11 = col3.x;
_local12 = col3.y;
_local13 = col3.z;
_local14 = (((_local5 * ((_local9 * _local13) - (_local10 * _local12))) + (_local6 * ((_local10 * _local11) - (_local8 * _local13)))) + (_local7 * ((_local8 * _local12) - (_local9 * _local11))));
_local14 = (1 / _local14);
_arg1.x = (_local14 * (((_arg2 * ((_local9 * _local13) - (_local10 * _local12))) + (_arg3 * ((_local10 * _local11) - (_local8 * _local13)))) + (_arg4 * ((_local8 * _local12) - (_local9 * _local11)))));
_arg1.y = (_local14 * (((_local5 * ((_arg3 * _local13) - (_arg4 * _local12))) + (_local6 * ((_arg4 * _local11) - (_arg2 * _local13)))) + (_local7 * ((_arg2 * _local12) - (_arg3 * _local11)))));
_arg1.z = (_local14 * (((_local5 * ((_local9 * _arg4) - (_local10 * _arg3))) + (_local6 * ((_local10 * _arg2) - (_local8 * _arg4)))) + (_local7 * ((_local8 * _arg3) - (_local9 * _arg2)))));
return (_arg1);
}
public function SetZero():void{
col1.x = 0;
col2.x = 0;
col3.x = 0;
col1.y = 0;
col2.y = 0;
col3.y = 0;
col1.z = 0;
col2.z = 0;
col3.z = 0;
}
public function SetM(_arg1:b2Mat33):void{
col1.SetV(_arg1.col1);
col2.SetV(_arg1.col2);
col3.SetV(_arg1.col3);
}
public function AddM(_arg1:b2Mat33):void{
col1.x = (col1.x + _arg1.col1.x);
col1.y = (col1.y + _arg1.col1.y);
col1.z = (col1.z + _arg1.col1.z);
col2.x = (col2.x + _arg1.col2.x);
col2.y = (col2.y + _arg1.col2.y);
col2.z = (col2.z + _arg1.col2.z);
col3.x = (col3.x + _arg1.col3.x);
col3.y = (col3.y + _arg1.col3.y);
col3.z = (col3.z + _arg1.col3.z);
}
public function SetVVV(_arg1:b2Vec3, _arg2:b2Vec3, _arg3:b2Vec3):void{
col1.SetV(_arg1);
col2.SetV(_arg2);
col3.SetV(_arg3);
}
public function Copy():b2Mat33{
return (new b2Mat33(col1, col2, col3));
}
public function Solve22(_arg1:b2Vec2, _arg2:Number, _arg3:Number):b2Vec2{
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
_local4 = col1.x;
_local5 = col2.x;
_local6 = col1.y;
_local7 = col2.y;
_local8 = ((_local4 * _local7) - (_local5 * _local6));
_local8 = (1 / _local8);
_arg1.x = (_local8 * ((_local7 * _arg2) - (_local5 * _arg3)));
_arg1.y = (_local8 * ((_local4 * _arg3) - (_local6 * _arg2)));
return (_arg1);
}
}
}//package Box2D.Common.Math
Section 35
//b2Math (Box2D.Common.Math.b2Math)
package Box2D.Common.Math {
public class b2Math {
public static const b2Mat22_identity:b2Mat22 = new b2Mat22(0, new b2Vec2(1, 0), new b2Vec2(0, 1));
public static const b2XForm_identity:b2XForm = new b2XForm(b2Vec2_zero, b2Mat22_identity);
public static const b2Vec2_zero:b2Vec2 = new b2Vec2(0, 0);
public static function b2CrossVF(_arg1:b2Vec2, _arg2:Number):b2Vec2{
var _local3:b2Vec2;
_local3 = new b2Vec2((_arg2 * _arg1.y), (-(_arg2) * _arg1.x));
return (_local3);
}
public static function AddVV(_arg1:b2Vec2, _arg2:b2Vec2):b2Vec2{
var _local3:b2Vec2;
_local3 = new b2Vec2((_arg1.x + _arg2.x), (_arg1.y + _arg2.y));
return (_local3);
}
public static function b2IsValid(_arg1:Number):Boolean{
return (isFinite(_arg1));
}
public static function b2MinV(_arg1:b2Vec2, _arg2:b2Vec2):b2Vec2{
var _local3:b2Vec2;
_local3 = new b2Vec2(b2Min(_arg1.x, _arg2.x), b2Min(_arg1.y, _arg2.y));
return (_local3);
}
public static function b2MulX(_arg1:b2XForm, _arg2:b2Vec2):b2Vec2{
var _local3:b2Vec2;
_local3 = b2MulMV(_arg1.R, _arg2);
_local3.x = (_local3.x + _arg1.position.x);
_local3.y = (_local3.y + _arg1.position.y);
return (_local3);
}
public static function b2DistanceSquared(_arg1:b2Vec2, _arg2:b2Vec2):Number{
var _local3:Number;
var _local4:Number;
_local3 = (_arg1.x - _arg2.x);
_local4 = (_arg1.y - _arg2.y);
return (((_local3 * _local3) + (_local4 * _local4)));
}
public static function b2Swap(_arg1:Array, _arg2:Array):void{
var _local3:*;
_local3 = _arg1[0];
_arg1[0] = _arg2[0];
_arg2[0] = _local3;
}
public static function b2AbsM(_arg1:b2Mat22):b2Mat22{
var _local2:b2Mat22;
_local2 = new b2Mat22(0, b2AbsV(_arg1.col1), b2AbsV(_arg1.col2));
return (_local2);
}
public static function SubtractVV(_arg1:b2Vec2, _arg2:b2Vec2):b2Vec2{
var _local3:b2Vec2;
_local3 = new b2Vec2((_arg1.x - _arg2.x), (_arg1.y - _arg2.y));
return (_local3);
}
public static function b2MulXT(_arg1:b2XForm, _arg2:b2Vec2):b2Vec2{
var _local3:b2Vec2;
var _local4:Number;
_local3 = SubtractVV(_arg2, _arg1.position);
_local4 = ((_local3.x * _arg1.R.col1.x) + (_local3.y * _arg1.R.col1.y));
_local3.y = ((_local3.x * _arg1.R.col2.x) + (_local3.y * _arg1.R.col2.y));
_local3.x = _local4;
return (_local3);
}
public static function b2Abs(_arg1:Number):Number{
return (((_arg1 > 0)) ? _arg1 : -(_arg1));
}
public static function b2Clamp(_arg1:Number, _arg2:Number, _arg3:Number):Number{
return (b2Max(_arg2, b2Min(_arg1, _arg3)));
}
public static function b2AbsV(_arg1:b2Vec2):b2Vec2{
var _local2:b2Vec2;
_local2 = new b2Vec2(b2Abs(_arg1.x), b2Abs(_arg1.y));
return (_local2);
}
public static function MulFV(_arg1:Number, _arg2:b2Vec2):b2Vec2{
var _local3:b2Vec2;
_local3 = new b2Vec2((_arg1 * _arg2.x), (_arg1 * _arg2.y));
return (_local3);
}
public static function b2CrossVV(_arg1:b2Vec2, _arg2:b2Vec2):Number{
return (((_arg1.x * _arg2.y) - (_arg1.y * _arg2.x)));
}
public static function b2Dot(_arg1:b2Vec2, _arg2:b2Vec2):Number{
return (((_arg1.x * _arg2.x) + (_arg1.y * _arg2.y)));
}
public static function b2CrossFV(_arg1:Number, _arg2:b2Vec2):b2Vec2{
var _local3:b2Vec2;
_local3 = new b2Vec2((-(_arg1) * _arg2.y), (_arg1 * _arg2.x));
return (_local3);
}
public static function AddMM(_arg1:b2Mat22, _arg2:b2Mat22):b2Mat22{
var _local3:b2Mat22;
_local3 = new b2Mat22(0, AddVV(_arg1.col1, _arg2.col1), AddVV(_arg1.col2, _arg2.col2));
return (_local3);
}
public static function b2Distance(_arg1:b2Vec2, _arg2:b2Vec2):Number{
var _local3:Number;
var _local4:Number;
_local3 = (_arg1.x - _arg2.x);
_local4 = (_arg1.y - _arg2.y);
return (Math.sqrt(((_local3 * _local3) + (_local4 * _local4))));
}
public static function b2MulTMM(_arg1:b2Mat22, _arg2:b2Mat22):b2Mat22{
var _local3:b2Vec2;
var _local4:b2Vec2;
var _local5:b2Mat22;
_local3 = new b2Vec2(b2Dot(_arg1.col1, _arg2.col1), b2Dot(_arg1.col2, _arg2.col1));
_local4 = new b2Vec2(b2Dot(_arg1.col1, _arg2.col2), b2Dot(_arg1.col2, _arg2.col2));
_local5 = new b2Mat22(0, _local3, _local4);
return (_local5);
}
public static function b2MaxV(_arg1:b2Vec2, _arg2:b2Vec2):b2Vec2{
var _local3:b2Vec2;
_local3 = new b2Vec2(b2Max(_arg1.x, _arg2.x), b2Max(_arg1.y, _arg2.y));
return (_local3);
}
public static function b2IsPowerOfTwo(_arg1:uint):Boolean{
var _local2:Boolean;
_local2 = (((_arg1 > 0)) && (((_arg1 & (_arg1 - 1)) == 0)));
return (_local2);
}
public static function b2ClampV(_arg1:b2Vec2, _arg2:b2Vec2, _arg3:b2Vec2):b2Vec2{
return (b2MaxV(_arg2, b2MinV(_arg1, _arg3)));
}
public static function b2RandomRange(_arg1:Number, _arg2:Number):Number{
var _local3:Number;
_local3 = Math.random();
_local3 = (((_arg2 - _arg1) * _local3) + _arg1);
return (_local3);
}
public static function b2MulTMV(_arg1:b2Mat22, _arg2:b2Vec2):b2Vec2{
var _local3:b2Vec2;
_local3 = new b2Vec2(b2Dot(_arg2, _arg1.col1), b2Dot(_arg2, _arg1.col2));
return (_local3);
}
public static function b2Min(_arg1:Number, _arg2:Number):Number{
return (((_arg1 < _arg2)) ? _arg1 : _arg2);
}
public static function b2Random():Number{
return (((Math.random() * 2) - 1));
}
public static function b2MulMM(_arg1:b2Mat22, _arg2:b2Mat22):b2Mat22{
var _local3:b2Mat22;
_local3 = new b2Mat22(0, b2MulMV(_arg1, _arg2.col1), b2MulMV(_arg1, _arg2.col2));
return (_local3);
}
public static function b2NextPowerOfTwo(_arg1:uint):uint{
_arg1 = (_arg1 | ((_arg1 >> 1) & 2147483647));
_arg1 = (_arg1 | ((_arg1 >> 2) & 1073741823));
_arg1 = (_arg1 | ((_arg1 >> 4) & 268435455));
_arg1 = (_arg1 | ((_arg1 >> 8) & 0xFFFFFF));
_arg1 = (_arg1 | ((_arg1 >> 16) & 0xFFFF));
return ((_arg1 + 1));
}
public static function b2Max(_arg1:Number, _arg2:Number):Number{
return (((_arg1 > _arg2)) ? _arg1 : _arg2);
}
public static function b2MulMV(_arg1:b2Mat22, _arg2:b2Vec2):b2Vec2{
var _local3:b2Vec2;
_local3 = new b2Vec2(((_arg1.col1.x * _arg2.x) + (_arg1.col2.x * _arg2.y)), ((_arg1.col1.y * _arg2.x) + (_arg1.col2.y * _arg2.y)));
return (_local3);
}
}
}//package Box2D.Common.Math
Section 36
//b2Sweep (Box2D.Common.Math.b2Sweep)
package Box2D.Common.Math {
public class b2Sweep {
public var localCenter:b2Vec2;
public var c:b2Vec2;
public var a:Number;
public var c0:b2Vec2;
public var t0:Number;
public var a0:Number;
public function b2Sweep(){
localCenter = new b2Vec2();
c0 = new b2Vec2();
c = new b2Vec2();
super();
}
public function Advance(_arg1:Number):void{
var _local2:Number;
if ((((t0 < _arg1)) && (((1 - t0) > Number.MIN_VALUE)))){
_local2 = ((_arg1 - t0) / (1 - t0));
c0.x = (((1 - _local2) * c0.x) + (_local2 * c.x));
c0.y = (((1 - _local2) * c0.y) + (_local2 * c.y));
a0 = (((1 - _local2) * a0) + (_local2 * a));
t0 = _arg1;
};
}
public function GetXForm2(_arg1:b2XForm, _arg2:Number):void{
var _local3:b2Mat22;
var _local4:Number;
if ((1 - t0) > Number.MIN_VALUE){
_arg1.position.x = (((1 - _arg2) * c0.x) + (_arg2 * c.x));
_arg1.position.y = (((1 - _arg2) * c0.y) + (_arg2 * c.y));
_local4 = (((1 - _arg2) * a0) + (_arg2 * a));
_arg1.R.Set(_local4);
} else {
_arg1.position.SetV(c);
_arg1.R.Set(a);
};
_local3 = _arg1.R;
_arg1.position.x = (_arg1.position.x - ((_local3.col1.x * localCenter.x) + (_local3.col2.x * localCenter.y)));
_arg1.position.y = (_arg1.position.y - ((_local3.col1.y * localCenter.x) + (_local3.col2.y * localCenter.y)));
}
public function GetXForm(_arg1:b2XForm, _arg2:Number):void{
var _local3:b2Mat22;
var _local4:Number;
var _local5:Number;
if ((1 - t0) > Number.MIN_VALUE){
_local4 = ((_arg2 - t0) / (1 - t0));
_arg1.position.x = (((1 - _local4) * c0.x) + (_local4 * c.x));
_arg1.position.y = (((1 - _local4) * c0.y) + (_local4 * c.y));
_local5 = (((1 - _local4) * a0) + (_local4 * a));
_arg1.R.Set(_local5);
} else {
_arg1.position.SetV(c);
_arg1.R.Set(a);
};
_local3 = _arg1.R;
_arg1.position.x = (_arg1.position.x - ((_local3.col1.x * localCenter.x) + (_local3.col2.x * localCenter.y)));
_arg1.position.y = (_arg1.position.y - ((_local3.col1.y * localCenter.x) + (_local3.col2.y * localCenter.y)));
}
}
}//package Box2D.Common.Math
Section 37
//b2Vec2 (Box2D.Common.Math.b2Vec2)
package Box2D.Common.Math {
public class b2Vec2 {
public var x:Number;
public var y:Number;
public function b2Vec2(_arg1:Number=0, _arg2:Number=0):void{
x = _arg1;
y = _arg2;
}
public function Set(_arg1:Number=0, _arg2:Number=0):void{
x = _arg1;
y = _arg2;
}
public function Multiply(_arg1:Number):void{
x = (x * _arg1);
y = (y * _arg1);
}
public function Length():Number{
return (Math.sqrt(((x * x) + (y * y))));
}
public function LengthSquared():Number{
return (((x * x) + (y * y)));
}
public function SetZero():void{
x = 0;
y = 0;
}
public function Add(_arg1:b2Vec2):void{
x = (x + _arg1.x);
y = (y + _arg1.y);
}
public function MaxV(_arg1:b2Vec2):void{
x = ((x > _arg1.x)) ? x : _arg1.x;
y = ((y > _arg1.y)) ? y : _arg1.y;
}
public function SetV(_arg1:b2Vec2):void{
x = _arg1.x;
y = _arg1.y;
}
public function Negative():b2Vec2{
return (new b2Vec2(-(x), -(y)));
}
public function CrossVF(_arg1:Number):void{
var _local2:Number;
_local2 = x;
x = (_arg1 * y);
y = (-(_arg1) * _local2);
}
public function Abs():void{
if (x < 0){
x = -(x);
};
if (y < 0){
y = -(y);
};
}
public function Copy():b2Vec2{
return (new b2Vec2(x, y));
}
public function MulTM(_arg1:b2Mat22):void{
var _local2:Number;
_local2 = b2Math.b2Dot(this, _arg1.col1);
y = b2Math.b2Dot(this, _arg1.col2);
x = _local2;
}
public function IsValid():Boolean{
return (((b2Math.b2IsValid(x)) && (b2Math.b2IsValid(y))));
}
public function MinV(_arg1:b2Vec2):void{
x = ((x < _arg1.x)) ? x : _arg1.x;
y = ((y < _arg1.y)) ? y : _arg1.y;
}
public function MulM(_arg1:b2Mat22):void{
var _local2:Number;
_local2 = x;
x = ((_arg1.col1.x * _local2) + (_arg1.col2.x * y));
y = ((_arg1.col1.y * _local2) + (_arg1.col2.y * y));
}
public function Normalize():Number{
var _local1:Number;
var _local2:Number;
_local1 = Math.sqrt(((x * x) + (y * y)));
if (_local1 < Number.MIN_VALUE){
return (0);
};
_local2 = (1 / _local1);
x = (x * _local2);
y = (y * _local2);
return (_local1);
}
public function Subtract(_arg1:b2Vec2):void{
x = (x - _arg1.x);
y = (y - _arg1.y);
}
public function CrossFV(_arg1:Number):void{
var _local2:Number;
_local2 = x;
x = (-(_arg1) * y);
y = (_arg1 * _local2);
}
public static function Make(_arg1:Number, _arg2:Number):b2Vec2{
return (new b2Vec2(_arg1, _arg2));
}
}
}//package Box2D.Common.Math
Section 38
//b2Vec3 (Box2D.Common.Math.b2Vec3)
package Box2D.Common.Math {
public class b2Vec3 {
public var x:Number;
public var y:Number;
public var z:Number;
public function b2Vec3(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0){
this.x = _arg1;
this.y = _arg2;
this.z = _arg3;
}
public function Set(_arg1:Number, _arg2:Number, _arg3:Number):void{
this.x = _arg1;
this.y = _arg2;
this.z = _arg3;
}
public function Multiply(_arg1:Number):void{
x = (x * _arg1);
y = (y * _arg1);
z = (z * _arg1);
}
public function Add(_arg1:b2Vec3):void{
x = (x + _arg1.x);
y = (y + _arg1.y);
z = (z + _arg1.z);
}
public function SetZero():void{
x = (y = (z = 0));
}
public function SetV(_arg1:b2Vec3):void{
x = _arg1.x;
y = _arg1.y;
z = _arg1.z;
}
public function Negative():b2Vec3{
return (new b2Vec3(-(x), -(y), -(z)));
}
public function Subtract(_arg1:b2Vec3):void{
x = (x - _arg1.x);
y = (y - _arg1.y);
z = (z - _arg1.z);
}
public function Copy():b2Vec3{
return (new b2Vec3(x, y, z));
}
}
}//package Box2D.Common.Math
Section 39
//b2XForm (Box2D.Common.Math.b2XForm)
package Box2D.Common.Math {
public class b2XForm {
public var R:b2Mat22;
public var position:b2Vec2;
public function b2XForm(_arg1:b2Vec2=null, _arg2:b2Mat22=null):void{
position = new b2Vec2();
R = new b2Mat22();
super();
if (_arg1){
position.SetV(_arg1);
R.SetM(_arg2);
};
}
public function Initialize(_arg1:b2Vec2, _arg2:b2Mat22):void{
position.SetV(_arg1);
R.SetM(_arg2);
}
public function Set(_arg1:b2XForm):void{
position.SetV(_arg1.position);
R.SetM(_arg1.R);
}
public function SetIdentity():void{
position.SetZero();
R.SetIdentity();
}
public function GetAngle():Number{
return (Math.atan2(R.col1.y, R.col1.x));
}
}
}//package Box2D.Common.Math
Section 40
//b2Color (Box2D.Common.b2Color)
package Box2D.Common {
import Box2D.Common.Math.*;
public class b2Color {
private var _g:uint;// = 0
private var _b:uint;// = 0
private var _r:uint;// = 0
public function b2Color(_arg1:Number, _arg2:Number, _arg3:Number){
_r = 0;
_g = 0;
_b = 0;
super();
_r = uint((0xFF * b2Math.b2Clamp(_arg1, 0, 1)));
_g = uint((0xFF * b2Math.b2Clamp(_arg2, 0, 1)));
_b = uint((0xFF * b2Math.b2Clamp(_arg3, 0, 1)));
}
public function Set(_arg1:Number, _arg2:Number, _arg3:Number):void{
_r = uint((0xFF * b2Math.b2Clamp(_arg1, 0, 1)));
_g = uint((0xFF * b2Math.b2Clamp(_arg2, 0, 1)));
_b = uint((0xFF * b2Math.b2Clamp(_arg3, 0, 1)));
}
public function get color():uint{
return ((((_r << 16) | (_g << 8)) | _b));
}
public function set r(_arg1:Number):void{
_r = uint((0xFF * b2Math.b2Clamp(_arg1, 0, 1)));
}
public function set b(_arg1:Number):void{
_b = uint((0xFF * b2Math.b2Clamp(_arg1, 0, 1)));
}
public function set g(_arg1:Number):void{
_g = uint((0xFF * b2Math.b2Clamp(_arg1, 0, 1)));
}
}
}//package Box2D.Common
Section 41
//b2internal (Box2D.Common.b2internal)
package Box2D.Common {
public namespace b2internal = "http://www.box2d.org/ns/b2internal";
}//package Box2D.Common
Section 42
//b2Settings (Box2D.Common.b2Settings)
package Box2D.Common {
import Box2D.Common.Math.*;
public class b2Settings {
public static const b2_fatAABBFactor:Number = 1.5;
public static const b2_maxTranslation:Number = 2;
public static const b2_pi:Number = 3.14159265358979;
public static const b2_angularSleepTolerance:Number = 0.0349065850398866;
public static const b2_linearSleepTolerance:Number = 0.01;
public static const b2_maxTranslationSquared:Number = 4;
public static const b2_angularSlop:Number = 0.0349065850398866;
public static const b2_linearSlop:Number = 0.005;
public static const b2_maxRotation:Number = 1.5707963267949;
public static const b2_maxRotationSquared:Number = 2.46740110027234;
public static const b2_maxTOIJointsPerIsland:int = 32;
public static const b2_maxPolygonVertices:int = 8;
public static const b2_velocityThreshold:Number = 1;
public static const b2_contactBaumgarte:Number = 0.2;
public static const b2_maxTOIContactsPerIsland:int = 32;
public static const b2_timeToSleep:Number = 0.5;
public static const b2_maxManifoldPoints:int = 2;
public static const b2_maxAngularCorrection:Number = 0.139626340159546;
public static const USHRT_MAX:int = 0xFFFF;
public static const VERSION:String = "2.0.2";
public static const b2_toiSlop:Number = 0.04;
public static const b2_maxLinearCorrection:Number = 0.2;
public static function b2MixFriction(_arg1:Number, _arg2:Number):Number{
return (Math.sqrt((_arg1 * _arg2)));
}
public static function b2MixRestitution(_arg1:Number, _arg2:Number):Number{
return (((_arg1 > _arg2)) ? _arg1 : _arg2);
}
public static function b2Assert(_arg1:Boolean):void{
var _local2:b2Vec2;
if (!_arg1){
_local2.x++;
};
}
}
}//package Box2D.Common
Section 43
//b2CircleContact (Box2D.Dynamics.Contacts.b2CircleContact)
package Box2D.Dynamics.Contacts {
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
import Box2D.Collision.*;
import Box2D.Common.*;
public class b2CircleContact extends b2Contact {
private var m_manifolds:Array;
private var m0:b2Manifold;
private var m_manifold:b2Manifold;
private static const s_evalCP:b2ContactPoint = new b2ContactPoint();
public function b2CircleContact(_arg1:b2Shape, _arg2:b2Shape){
var _local3:b2ManifoldPoint;
m_manifolds = [new b2Manifold()];
m0 = new b2Manifold();
super(_arg1, _arg2);
m_manifold = m_manifolds[0];
m_manifold.pointCount = 0;
_local3 = m_manifold.points[0];
_local3.normalImpulse = 0;
_local3.tangentImpulse = 0;
}
override public function GetManifolds():Array{
return (m_manifolds);
}
override b2internal function Evaluate(_arg1:b2ContactListener):void{
var _local2:b2Vec2;
var _local3:b2Vec2;
var _local4:b2ManifoldPoint;
var _local5:b2Body;
var _local6:b2Body;
var _local7:b2ContactPoint;
var _local8:b2ManifoldPoint;
_local5 = m_shape1.m_body;
_local6 = m_shape2.m_body;
m0.Set(m_manifold);
b2Collision.b2CollideCircles(m_manifold, (m_shape1 as b2CircleShape), _local5.m_xf, (m_shape2 as b2CircleShape), _local6.m_xf);
_local7 = s_evalCP;
_local7.shape1 = m_shape1;
_local7.shape2 = m_shape2;
_local7.friction = b2Settings.b2MixFriction(m_shape1.GetFriction(), m_shape2.GetFriction());
_local7.restitution = b2Settings.b2MixRestitution(m_shape1.GetRestitution(), m_shape2.GetRestitution());
if (m_manifold.pointCount > 0){
m_manifoldCount = 1;
_local8 = m_manifold.points[0];
if (m0.pointCount == 0){
_local8.normalImpulse = 0;
_local8.tangentImpulse = 0;
if (_arg1){
_local7.position = _local5.GetWorldPoint(_local8.localPoint1);
_local2 = _local5.GetLinearVelocityFromLocalPoint(_local8.localPoint1);
_local3 = _local6.GetLinearVelocityFromLocalPoint(_local8.localPoint2);
_local7.velocity.Set((_local3.x - _local2.x), (_local3.y - _local2.y));
_local7.normal.SetV(m_manifold.normal);
_local7.separation = _local8.separation;
_local7.id.key = _local8.id._key;
_arg1.Add(_local7);
};
} else {
_local4 = m0.points[0];
_local8.normalImpulse = _local4.normalImpulse;
_local8.tangentImpulse = _local4.tangentImpulse;
if (_arg1){
_local7.position = _local5.GetWorldPoint(_local8.localPoint1);
_local2 = _local5.GetLinearVelocityFromLocalPoint(_local8.localPoint1);
_local3 = _local6.GetLinearVelocityFromLocalPoint(_local8.localPoint2);
_local7.velocity.Set((_local3.x - _local2.x), (_local3.y - _local2.y));
_local7.normal.SetV(m_manifold.normal);
_local7.separation = _local8.separation;
_local7.id.key = _local8.id._key;
_arg1.Persist(_local7);
};
};
} else {
m_manifoldCount = 0;
if ((((m0.pointCount > 0)) && (_arg1))){
_local4 = m0.points[0];
_local7.position = _local5.GetWorldPoint(_local4.localPoint1);
_local2 = _local5.GetLinearVelocityFromLocalPoint(_local4.localPoint1);
_local3 = _local6.GetLinearVelocityFromLocalPoint(_local4.localPoint2);
_local7.velocity.Set((_local3.x - _local2.x), (_local3.y - _local2.y));
_local7.normal.SetV(m0.normal);
_local7.separation = _local4.separation;
_local7.id.key = _local4.id._key;
_arg1.Remove(_local7);
};
};
}
public static function Destroy(_arg1:b2Contact, _arg2):void{
}
public static function Create(_arg1:b2Shape, _arg2:b2Shape, _arg3):b2Contact{
return (new b2CircleContact(_arg1, _arg2));
}
}
}//package Box2D.Dynamics.Contacts
Section 44
//b2Contact (Box2D.Dynamics.Contacts.b2Contact)
package Box2D.Dynamics.Contacts {
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
import Box2D.Collision.*;
import Box2D.Common.*;
public class b2Contact {
b2internal var m_shape1:b2Shape;
b2internal var m_shape2:b2Shape;
b2internal var m_prev:b2Contact;
b2internal var m_toi:Number;
b2internal var m_next:b2Contact;
b2internal var m_manifoldCount:int;
b2internal var m_node1:b2ContactEdge;
b2internal var m_node2:b2ContactEdge;
b2internal var m_flags:uint;
b2internal static var e_toiFlag:uint = 8;
b2internal static var e_nonSolidFlag:uint = 1;
b2internal static var e_slowFlag:uint = 2;
b2internal static var e_islandFlag:uint = 4;
b2internal static var s_registers:Array;
b2internal static var s_initialized:Boolean = false;
public function b2Contact(_arg1:b2Shape=null, _arg2:b2Shape=null){
m_node1 = new b2ContactEdge();
m_node2 = new b2ContactEdge();
super();
m_flags = 0;
if (((!(_arg1)) || (!(_arg2)))){
m_shape1 = null;
m_shape2 = null;
return;
};
if (((_arg1.IsSensor()) || (_arg2.IsSensor()))){
m_flags = (m_flags | e_nonSolidFlag);
};
m_shape1 = _arg1;
m_shape2 = _arg2;
m_manifoldCount = 0;
m_prev = null;
m_next = null;
m_node1.contact = null;
m_node1.prev = null;
m_node1.next = null;
m_node1.other = null;
m_node2.contact = null;
m_node2.prev = null;
m_node2.next = null;
m_node2.other = null;
}
public function GetShape1():b2Shape{
return (m_shape1);
}
public function IsSolid():Boolean{
return (((m_flags & e_nonSolidFlag) == 0));
}
public function GetNext():b2Contact{
return (m_next);
}
public function GetManifolds():Array{
return (null);
}
public function GetShape2():b2Shape{
return (m_shape2);
}
public function GetManifoldCount():int{
return (m_manifoldCount);
}
b2internal function Update(_arg1:b2ContactListener):void{
var _local2:int;
var _local3:int;
var _local4:b2Body;
var _local5:b2Body;
_local2 = m_manifoldCount;
Evaluate(_arg1);
_local3 = m_manifoldCount;
_local4 = m_shape1.m_body;
_local5 = m_shape2.m_body;
if ((((_local3 == 0)) && ((_local2 > 0)))){
_local4.WakeUp();
_local5.WakeUp();
};
if (((((((_local4.IsStatic()) || (_local4.IsBullet()))) || (_local5.IsStatic()))) || (_local5.IsBullet()))){
m_flags = (m_flags & ~(e_slowFlag));
} else {
m_flags = (m_flags | e_slowFlag);
};
}
b2internal function Evaluate(_arg1:b2ContactListener):void{
}
b2internal static function InitializeRegisters():void{
var _local1:int;
var _local2:int;
s_registers = new Array(b2Shape.e_shapeTypeCount);
_local1 = 0;
while (_local1 < b2Shape.e_shapeTypeCount) {
s_registers[_local1] = new Array(b2Shape.e_shapeTypeCount);
_local2 = 0;
while (_local2 < b2Shape.e_shapeTypeCount) {
s_registers[_local1][_local2] = new b2ContactRegister();
_local2++;
};
_local1++;
};
AddType(b2CircleContact.Create, b2CircleContact.Destroy, b2Shape.e_circleShape, b2Shape.e_circleShape);
AddType(b2PolyAndCircleContact.Create, b2PolyAndCircleContact.Destroy, b2Shape.e_polygonShape, b2Shape.e_circleShape);
AddType(b2PolygonContact.Create, b2PolygonContact.Destroy, b2Shape.e_polygonShape, b2Shape.e_polygonShape);
AddType(b2EdgeAndCircleContact.Create, b2EdgeAndCircleContact.Destroy, b2Shape.e_edgeShape, b2Shape.e_circleShape);
AddType(b2PolyAndEdgeContact.Create, b2PolyAndEdgeContact.Destroy, b2Shape.e_polygonShape, b2Shape.e_edgeShape);
}
b2internal static function Destroy(_arg1:b2Contact, _arg2):void{
var _local3:int;
var _local4:int;
var _local5:b2ContactRegister;
var _local6:Function;
if (_arg1.m_manifoldCount > 0){
_arg1.m_shape1.m_body.WakeUp();
_arg1.m_shape2.m_body.WakeUp();
};
_local3 = _arg1.m_shape1.m_type;
_local4 = _arg1.m_shape2.m_type;
_local5 = s_registers[_local3][_local4];
_local6 = _local5.destroyFcn;
_local6(_arg1, _arg2);
}
b2internal static function AddType(_arg1:Function, _arg2:Function, _arg3:int, _arg4:int):void{
s_registers[_arg3][_arg4].createFcn = _arg1;
s_registers[_arg3][_arg4].destroyFcn = _arg2;
s_registers[_arg3][_arg4].primary = true;
if (_arg3 != _arg4){
s_registers[_arg4][_arg3].createFcn = _arg1;
s_registers[_arg4][_arg3].destroyFcn = _arg2;
s_registers[_arg4][_arg3].primary = false;
};
}
b2internal static function Create(_arg1:b2Shape, _arg2:b2Shape, _arg3):b2Contact{
var _local4:int;
var _local5:int;
var _local6:b2ContactRegister;
var _local7:Function;
var _local8:b2Contact;
var _local9:int;
var _local10:b2Manifold;
if (s_initialized == false){
InitializeRegisters();
s_initialized = true;
};
_local4 = _arg1.m_type;
_local5 = _arg2.m_type;
_local6 = s_registers[_local4][_local5];
_local7 = _local6.createFcn;
if (_local7 != null){
if (_local6.primary){
return (_local7(_arg1, _arg2, _arg3));
};
_local8 = _local7(_arg2, _arg1, _arg3);
_local9 = 0;
while (_local9 < _local8.m_manifoldCount) {
_local10 = _local8.GetManifolds()[_local9];
_local8.GetManifolds()[_local9].normal = _local10.normal.Negative();
_local9++;
};
return (_local8);
//unresolved jump
};
return (null);
}
}
}//package Box2D.Dynamics.Contacts
Section 45
//b2ContactConstraint (Box2D.Dynamics.Contacts.b2ContactConstraint)
package Box2D.Dynamics.Contacts {
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
import Box2D.Collision.*;
import Box2D.Common.*;
public class b2ContactConstraint {
public var pointCount:int;
public var points:Array;
public var restitution:Number;
public var K:b2Mat22;
public var manifold:b2Manifold;
public var body2:b2Body;
public var friction:Number;
public var normalMass:b2Mat22;
public var body1:b2Body;
public var normal:b2Vec2;
public function b2ContactConstraint(){
var _local1:int;
normal = new b2Vec2();
normalMass = new b2Mat22();
K = new b2Mat22();
super();
points = new Array(b2Settings.b2_maxManifoldPoints);
_local1 = 0;
while (_local1 < b2Settings.b2_maxManifoldPoints) {
points[_local1] = new b2ContactConstraintPoint();
_local1++;
};
}
}
}//package Box2D.Dynamics.Contacts
Section 46
//b2ContactConstraintPoint (Box2D.Dynamics.Contacts.b2ContactConstraintPoint)
package Box2D.Dynamics.Contacts {
import Box2D.Common.Math.*;
public class b2ContactConstraintPoint {
public var r2:b2Vec2;
public var separation:Number;
public var normalImpulse:Number;
public var equalizedMass:Number;
public var tangentMass:Number;
public var tangentImpulse:Number;
public var localAnchor1:b2Vec2;
public var velocityBias:Number;
public var localAnchor2:b2Vec2;
public var normalMass:Number;
public var r1:b2Vec2;
public function b2ContactConstraintPoint(){
localAnchor1 = new b2Vec2();
localAnchor2 = new b2Vec2();
r1 = new b2Vec2();
r2 = new b2Vec2();
super();
}
}
}//package Box2D.Dynamics.Contacts
Section 47
//b2ContactEdge (Box2D.Dynamics.Contacts.b2ContactEdge)
package Box2D.Dynamics.Contacts {
import Box2D.Dynamics.*;
public class b2ContactEdge {
public var next:b2ContactEdge;
public var other:b2Body;
public var contact:b2Contact;
public var prev:b2ContactEdge;
}
}//package Box2D.Dynamics.Contacts
Section 48
//b2ContactRegister (Box2D.Dynamics.Contacts.b2ContactRegister)
package Box2D.Dynamics.Contacts {
public class b2ContactRegister {
public var primary:Boolean;
public var createFcn:Function;
public var destroyFcn:Function;
}
}//package Box2D.Dynamics.Contacts
Section 49
//b2ContactResult (Box2D.Dynamics.Contacts.b2ContactResult)
package Box2D.Dynamics.Contacts {
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
import Box2D.Collision.*;
public class b2ContactResult {
public var normal:b2Vec2;
public var position:b2Vec2;
public var shape1:b2Shape;
public var shape2:b2Shape;
public var normalImpulse:Number;
public var tangentImpulse:Number;
public var id:b2ContactID;
public function b2ContactResult(){
position = new b2Vec2();
normal = new b2Vec2();
id = new b2ContactID();
super();
}
}
}//package Box2D.Dynamics.Contacts
Section 50
//b2ContactSolver (Box2D.Dynamics.Contacts.b2ContactSolver)
package Box2D.Dynamics.Contacts {
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
import Box2D.Collision.*;
import Box2D.Common.*;
public class b2ContactSolver {
private var m_constraintCount:int;
b2internal var m_constraints:Array;
private var m_allocator;
private var m_step:b2TimeStep;
public function b2ContactSolver(_arg1:b2TimeStep, _arg2:Array, _arg3:int, _arg4){
var _local5:b2Contact;
var _local6:int;
var _local7:b2Vec2;
var _local8:b2Mat22;
var _local9:int;
var _local10:b2Shape;
var _local11:b2Shape;
var _local12:b2Body;
var _local13:b2Body;
var _local14:int;
var _local15:Array;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Number;
var _local24:int;
var _local25:b2Manifold;
var _local26:Number;
var _local27:Number;
var _local28:b2ContactConstraint;
var _local29:uint;
var _local30:b2ManifoldPoint;
var _local31:b2ContactConstraintPoint;
var _local32:Number;
var _local33:Number;
var _local34:Number;
var _local35:Number;
var _local36:Number;
var _local37:Number;
var _local38:Number;
var _local39:Number;
var _local40:Number;
var _local41:Number;
var _local42:Number;
var _local43:Number;
var _local44:Number;
var _local45:Number;
var _local46:Number;
var _local47:Number;
var _local48:b2ContactConstraintPoint;
var _local49:b2ContactConstraintPoint;
var _local50:Number;
var _local51:Number;
var _local52:Number;
var _local53:Number;
var _local54:Number;
var _local55:Number;
var _local56:Number;
var _local57:Number;
var _local58:Number;
var _local59:Number;
var _local60:Number;
var _local61:Number;
m_step = new b2TimeStep();
m_constraints = new Array();
super();
m_step.dt = _arg1.dt;
m_step.inv_dt = _arg1.inv_dt;
m_step.positionIterations = _arg1.positionIterations;
m_step.velocityIterations = _arg1.velocityIterations;
m_allocator = _arg4;
m_constraintCount = 0;
_local6 = 0;
while (_local6 < _arg3) {
_local5 = _arg2[_local6];
m_constraintCount = (m_constraintCount + _local5.m_manifoldCount);
_local6++;
};
_local6 = 0;
while (_local6 < m_constraintCount) {
m_constraints[_local6] = new b2ContactConstraint();
_local6++;
};
_local9 = 0;
_local6 = 0;
while (_local6 < _arg3) {
_local5 = _arg2[_local6];
_local10 = _local5.m_shape1;
_local11 = _local5.m_shape2;
_local12 = _local10.m_body;
_local13 = _local11.m_body;
_local14 = _local5.m_manifoldCount;
_local15 = _local5.GetManifolds();
_local16 = b2Settings.b2MixFriction(_local10.GetFriction(), _local11.GetFriction());
_local17 = b2Settings.b2MixRestitution(_local10.GetRestitution(), _local11.GetRestitution());
_local18 = _local12.m_linearVelocity.x;
_local19 = _local12.m_linearVelocity.y;
_local20 = _local13.m_linearVelocity.x;
_local21 = _local13.m_linearVelocity.y;
_local22 = _local12.m_angularVelocity;
_local23 = _local13.m_angularVelocity;
_local24 = 0;
while (_local24 < _local14) {
_local25 = _local15[_local24];
_local26 = _local25.normal.x;
_local27 = _local25.normal.y;
_local28 = m_constraints[_local9];
_local28.body1 = _local12;
_local28.body2 = _local13;
_local28.manifold = _local25;
_local28.normal.x = _local26;
_local28.normal.y = _local27;
_local28.pointCount = _local25.pointCount;
_local28.friction = _local16;
_local28.restitution = _local17;
_local29 = 0;
while (_local29 < _local28.pointCount) {
_local30 = _local25.points[_local29];
_local31 = _local28.points[_local29];
_local31.normalImpulse = _local30.normalImpulse;
_local31.tangentImpulse = _local30.tangentImpulse;
_local31.separation = _local30.separation;
_local31.localAnchor1.SetV(_local30.localPoint1);
_local31.localAnchor2.SetV(_local30.localPoint2);
_local8 = _local12.m_xf.R;
_local34 = (_local30.localPoint1.x - _local12.m_sweep.localCenter.x);
_local35 = (_local30.localPoint1.y - _local12.m_sweep.localCenter.y);
_local32 = ((_local8.col1.x * _local34) + (_local8.col2.x * _local35));
_local35 = ((_local8.col1.y * _local34) + (_local8.col2.y * _local35));
_local34 = _local32;
_local31.r1.Set(_local34, _local35);
_local8 = _local13.m_xf.R;
_local36 = (_local30.localPoint2.x - _local13.m_sweep.localCenter.x);
_local37 = (_local30.localPoint2.y - _local13.m_sweep.localCenter.y);
_local32 = ((_local8.col1.x * _local36) + (_local8.col2.x * _local37));
_local37 = ((_local8.col1.y * _local36) + (_local8.col2.y * _local37));
_local36 = _local32;
_local31.r2.Set(_local36, _local37);
_local38 = ((_local34 * _local27) - (_local35 * _local26));
_local39 = ((_local36 * _local27) - (_local37 * _local26));
_local38 = (_local38 * _local38);
_local39 = (_local39 * _local39);
_local40 = (((_local12.m_invMass + _local13.m_invMass) + (_local12.m_invI * _local38)) + (_local13.m_invI * _local39));
_local31.normalMass = (1 / _local40);
_local41 = ((_local12.m_mass * _local12.m_invMass) + (_local13.m_mass * _local13.m_invMass));
_local41 = (_local41 + (((_local12.m_mass * _local12.m_invI) * _local38) + ((_local13.m_mass * _local13.m_invI) * _local39)));
_local31.equalizedMass = (1 / _local41);
_local42 = _local27;
_local43 = -(_local26);
_local44 = ((_local34 * _local43) - (_local35 * _local42));
_local45 = ((_local36 * _local43) - (_local37 * _local42));
_local44 = (_local44 * _local44);
_local45 = (_local45 * _local45);
_local46 = (((_local12.m_invMass + _local13.m_invMass) + (_local12.m_invI * _local44)) + (_local13.m_invI * _local45));
_local31.tangentMass = (1 / _local46);
_local31.velocityBias = 0;
if (_local31.separation > 0){
_local31.velocityBias = (-60 * _local31.separation);
} else {
_local32 = (((_local20 + (-(_local23) * _local37)) - _local18) - (-(_local22) * _local35));
_local33 = (((_local21 + (_local23 * _local36)) - _local19) - (_local22 * _local34));
_local47 = ((_local28.normal.x * _local32) + (_local28.normal.y * _local33));
if (_local47 < -(b2Settings.b2_velocityThreshold)){
_local31.velocityBias = (_local31.velocityBias + (-(_local28.restitution) * _local47));
};
};
_local29++;
};
if (_local28.pointCount == 2){
_local48 = _local28.points[0];
_local49 = _local28.points[1];
_local50 = _local12.m_invMass;
_local51 = _local12.m_invI;
_local52 = _local13.m_invMass;
_local53 = _local13.m_invI;
_local54 = ((_local48.r1.x * _local27) - (_local48.r1.y * _local26));
_local55 = ((_local48.r2.x * _local27) - (_local48.r2.y * _local26));
_local56 = ((_local49.r1.x * _local27) - (_local49.r1.y * _local26));
_local57 = ((_local49.r2.x * _local27) - (_local49.r2.y * _local26));
_local58 = (((_local50 + _local52) + ((_local51 * _local54) * _local54)) + ((_local53 * _local55) * _local55));
_local59 = (((_local50 + _local52) + ((_local51 * _local56) * _local56)) + ((_local53 * _local57) * _local57));
_local60 = (((_local50 + _local52) + ((_local51 * _local54) * _local56)) + ((_local53 * _local55) * _local57));
_local61 = 100;
if ((_local58 * _local58) < (_local61 * ((_local58 * _local59) - (_local60 * _local60)))){
_local28.K.col1.Set(_local58, _local60);
_local28.K.col2.Set(_local60, _local59);
_local28.K.GetInverse(_local28.normalMass);
} else {
_local28.pointCount = 1;
};
};
_local9++;
_local24++;
};
_local6++;
};
}
public function InitVelocityConstraints(_arg1:b2TimeStep):void{
var _local2:b2Vec2;
var _local3:b2Vec2;
var _local4:b2Mat22;
var _local5:int;
var _local6:b2ContactConstraint;
var _local7:b2Body;
var _local8:b2Body;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:int;
var _local19:int;
var _local20:b2ContactConstraintPoint;
var _local21:Number;
var _local22:Number;
var _local23:b2ContactConstraintPoint;
_local5 = 0;
while (_local5 < m_constraintCount) {
_local6 = m_constraints[_local5];
_local7 = _local6.body1;
_local8 = _local6.body2;
_local9 = _local7.m_invMass;
_local10 = _local7.m_invI;
_local11 = _local8.m_invMass;
_local12 = _local8.m_invI;
_local13 = _local6.normal.x;
_local14 = _local6.normal.y;
_local15 = _local14;
_local16 = -(_local13);
if (_arg1.warmStarting){
_local19 = _local6.pointCount;
_local18 = 0;
while (_local18 < _local19) {
_local20 = _local6.points[_local18];
_local6.points[_local18].normalImpulse = (_local20.normalImpulse * _arg1.dtRatio);
_local20.tangentImpulse = (_local20.tangentImpulse * _arg1.dtRatio);
_local21 = ((_local20.normalImpulse * _local13) + (_local20.tangentImpulse * _local15));
_local22 = ((_local20.normalImpulse * _local14) + (_local20.tangentImpulse * _local16));
_local7.m_angularVelocity = (_local7.m_angularVelocity - (_local10 * ((_local20.r1.x * _local22) - (_local20.r1.y * _local21))));
_local7.m_linearVelocity.x = (_local7.m_linearVelocity.x - (_local9 * _local21));
_local7.m_linearVelocity.y = (_local7.m_linearVelocity.y - (_local9 * _local22));
_local8.m_angularVelocity = (_local8.m_angularVelocity + (_local12 * ((_local20.r2.x * _local22) - (_local20.r2.y * _local21))));
_local8.m_linearVelocity.x = (_local8.m_linearVelocity.x + (_local11 * _local21));
_local8.m_linearVelocity.y = (_local8.m_linearVelocity.y + (_local11 * _local22));
_local18++;
};
} else {
_local19 = _local6.pointCount;
_local18 = 0;
while (_local18 < _local19) {
_local23 = _local6.points[_local18];
_local23.normalImpulse = 0;
_local23.tangentImpulse = 0;
_local18++;
};
};
_local5++;
};
}
public function SolvePositionConstraints(_arg1:Number):Boolean{
var _local2:Number;
var _local3:b2Mat22;
var _local4:b2Vec2;
var _local5:int;
var _local6:b2ContactConstraint;
var _local7:b2Body;
var _local8:b2Body;
var _local9:b2Vec2;
var _local10:Number;
var _local11:b2Vec2;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:int;
var _local20:int;
var _local21:b2ContactConstraintPoint;
var _local22:Number;
var _local23:Number;
var _local24:Number;
var _local25:Number;
var _local26:Number;
var _local27:Number;
var _local28:Number;
var _local29:Number;
var _local30:Number;
var _local31:Number;
var _local32:Number;
var _local33:Number;
var _local34:Number;
var _local35:Number;
var _local36:Number;
var _local37:Number;
_local2 = 0;
_local5 = 0;
while (_local5 < m_constraintCount) {
_local6 = m_constraints[_local5];
_local7 = _local6.body1;
_local8 = _local6.body2;
_local9 = _local7.m_sweep.c;
_local10 = _local7.m_sweep.a;
_local11 = _local8.m_sweep.c;
_local12 = _local8.m_sweep.a;
_local13 = (_local7.m_mass * _local7.m_invMass);
_local14 = (_local7.m_mass * _local7.m_invI);
_local15 = (_local8.m_mass * _local8.m_invMass);
_local16 = (_local8.m_mass * _local8.m_invI);
_local17 = _local6.normal.x;
_local18 = _local6.normal.y;
_local19 = _local6.pointCount;
_local20 = 0;
while (_local20 < _local19) {
_local21 = _local6.points[_local20];
_local3 = _local7.m_xf.R;
_local4 = _local7.m_sweep.localCenter;
_local22 = (_local21.localAnchor1.x - _local4.x);
_local23 = (_local21.localAnchor1.y - _local4.y);
_local26 = ((_local3.col1.x * _local22) + (_local3.col2.x * _local23));
_local23 = ((_local3.col1.y * _local22) + (_local3.col2.y * _local23));
_local22 = _local26;
_local3 = _local8.m_xf.R;
_local4 = _local8.m_sweep.localCenter;
_local24 = (_local21.localAnchor2.x - _local4.x);
_local25 = (_local21.localAnchor2.y - _local4.y);
_local26 = ((_local3.col1.x * _local24) + (_local3.col2.x * _local25));
_local25 = ((_local3.col1.y * _local24) + (_local3.col2.y * _local25));
_local24 = _local26;
_local27 = (_local9.x + _local22);
_local28 = (_local9.y + _local23);
_local29 = (_local11.x + _local24);
_local30 = (_local11.y + _local25);
_local31 = (_local29 - _local27);
_local32 = (_local30 - _local28);
_local33 = (((_local31 * _local17) + (_local32 * _local18)) + _local21.separation);
_local2 = b2Math.b2Min(_local2, _local33);
_local34 = (_arg1 * b2Math.b2Clamp((_local33 + b2Settings.b2_linearSlop), -(b2Settings.b2_maxLinearCorrection), 0));
_local35 = (-(_local21.equalizedMass) * _local34);
_local36 = (_local35 * _local17);
_local37 = (_local35 * _local18);
_local9.x = (_local9.x - (_local13 * _local36));
_local9.y = (_local9.y - (_local13 * _local37));
_local10 = (_local10 - (_local14 * ((_local22 * _local37) - (_local23 * _local36))));
_local7.m_sweep.a = _local10;
_local7.SynchronizeTransform();
_local11.x = (_local11.x + (_local15 * _local36));
_local11.y = (_local11.y + (_local15 * _local37));
_local12 = (_local12 + (_local16 * ((_local24 * _local37) - (_local25 * _local36))));
_local8.m_sweep.a = _local12;
_local8.SynchronizeTransform();
_local20++;
};
_local5++;
};
return ((_local2 >= (-1.5 * b2Settings.b2_linearSlop)));
}
public function SolveVelocityConstraints():void{
var _local1:int;
var _local2:b2ContactConstraintPoint;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:b2Mat22;
var _local24:b2Vec2;
var _local25:int;
var _local26:b2ContactConstraint;
var _local27:b2Body;
var _local28:b2Body;
var _local29:Number;
var _local30:Number;
var _local31:b2Vec2;
var _local32:b2Vec2;
var _local33:Number;
var _local34:Number;
var _local35:Number;
var _local36:Number;
var _local37:Number;
var _local38:Number;
var _local39:Number;
var _local40:Number;
var _local41:Number;
var _local42:Number;
var _local43:int;
var _local44:Number;
var _local45:b2ContactConstraintPoint;
var _local46:b2ContactConstraintPoint;
var _local47:Number;
var _local48:Number;
var _local49:Number;
var _local50:Number;
var _local51:Number;
var _local52:Number;
var _local53:Number;
var _local54:Number;
var _local55:Number;
var _local56:Number;
var _local57:Number;
var _local58:Number;
var _local59:Number;
_local25 = 0;
while (_local25 < m_constraintCount) {
_local26 = m_constraints[_local25];
_local27 = _local26.body1;
_local28 = _local26.body2;
_local29 = _local27.m_angularVelocity;
_local30 = _local28.m_angularVelocity;
_local31 = _local27.m_linearVelocity;
_local32 = _local28.m_linearVelocity;
_local33 = _local27.m_invMass;
_local34 = _local27.m_invI;
_local35 = _local28.m_invMass;
_local36 = _local28.m_invI;
_local37 = _local26.normal.x;
_local38 = _local26.normal.y;
_local39 = _local38;
_local40 = -(_local37);
_local41 = _local26.friction;
_local43 = _local26.pointCount;
if (_local26.pointCount == 1){
_local2 = _local26.points[0];
_local7 = (((_local32.x + (-(_local30) * _local2.r2.y)) - _local31.x) - (-(_local29) * _local2.r1.y));
_local8 = (((_local32.y + (_local30 * _local2.r2.x)) - _local31.y) - (_local29 * _local2.r1.x));
_local9 = ((_local7 * _local37) + (_local8 * _local38));
_local11 = (-(_local2.normalMass) * (_local9 - _local2.velocityBias));
_local10 = ((_local7 * _local39) + (_local8 * _local40));
_local12 = (_local2.tangentMass * -(_local10));
_local13 = b2Math.b2Max((_local2.normalImpulse + _local11), 0);
_local11 = (_local13 - _local2.normalImpulse);
_local44 = (_local41 * _local2.normalImpulse);
_local14 = b2Math.b2Clamp((_local2.tangentImpulse + _local12), -(_local44), _local44);
_local12 = (_local14 - _local2.tangentImpulse);
_local15 = ((_local11 * _local37) + (_local12 * _local39));
_local16 = ((_local11 * _local38) + (_local12 * _local40));
_local31.x = (_local31.x - (_local33 * _local15));
_local31.y = (_local31.y - (_local33 * _local16));
_local29 = (_local29 - (_local34 * ((_local2.r1.x * _local16) - (_local2.r1.y * _local15))));
_local32.x = (_local32.x + (_local35 * _local15));
_local32.y = (_local32.y + (_local35 * _local16));
_local30 = (_local30 + (_local36 * ((_local2.r2.x * _local16) - (_local2.r2.y * _local15))));
_local2.normalImpulse = _local13;
_local2.tangentImpulse = _local14;
} else {
_local45 = _local26.points[0];
_local46 = _local26.points[1];
_local47 = _local45.normalImpulse;
_local48 = _local46.normalImpulse;
_local49 = (((_local32.x - (_local30 * _local45.r2.y)) - _local31.x) + (_local29 * _local45.r1.y));
_local50 = (((_local32.y + (_local30 * _local45.r2.x)) - _local31.y) - (_local29 * _local45.r1.x));
_local51 = (((_local32.x - (_local30 * _local46.r2.y)) - _local31.x) + (_local29 * _local46.r1.y));
_local52 = (((_local32.y + (_local30 * _local46.r2.x)) - _local31.y) - (_local29 * _local46.r1.x));
_local53 = ((_local49 * _local37) + (_local50 * _local38));
_local54 = ((_local51 * _local37) + (_local52 * _local38));
_local55 = (_local53 - _local45.velocityBias);
_local56 = (_local54 - _local46.velocityBias);
_local23 = _local26.K;
_local55 = (_local55 - ((_local23.col1.x * _local47) + (_local23.col2.x * _local48)));
_local56 = (_local56 - ((_local23.col1.y * _local47) + (_local23.col2.y * _local48)));
_local57 = 0.001;
while (true) {
_local23 = _local26.normalMass;
_local58 = -(((_local23.col1.x * _local55) + (_local23.col2.x * _local56)));
_local59 = -(((_local23.col1.y * _local55) + (_local23.col2.y * _local56)));
if ((((_local58 >= 0)) && ((_local59 >= 0)))){
_local17 = (_local58 - _local47);
_local18 = (_local59 - _local48);
_local19 = (_local17 * _local37);
_local20 = (_local17 * _local38);
_local21 = (_local18 * _local37);
_local22 = (_local18 * _local38);
_local31.x = (_local31.x - (_local33 * (_local19 + _local21)));
_local31.y = (_local31.y - (_local33 * (_local20 + _local22)));
_local29 = (_local29 - (_local34 * ((((_local45.r1.x * _local20) - (_local45.r1.y * _local19)) + (_local46.r1.x * _local22)) - (_local46.r1.y * _local21))));
_local32.x = (_local32.x + (_local35 * (_local19 + _local21)));
_local32.y = (_local32.y + (_local35 * (_local20 + _local22)));
_local30 = (_local30 + (_local36 * ((((_local45.r2.x * _local20) - (_local45.r2.y * _local19)) + (_local46.r2.x * _local22)) - (_local46.r2.y * _local21))));
_local45.normalImpulse = _local58;
_local46.normalImpulse = _local59;
break;
};
_local58 = (-(_local45.normalMass) * _local55);
_local59 = 0;
_local53 = 0;
_local54 = ((_local26.K.col1.y * _local58) + _local56);
if ((((_local58 >= 0)) && ((_local54 >= 0)))){
_local17 = (_local58 - _local47);
_local18 = (_local59 - _local48);
_local19 = (_local17 * _local37);
_local20 = (_local17 * _local38);
_local21 = (_local18 * _local37);
_local22 = (_local18 * _local38);
_local31.x = (_local31.x - (_local33 * (_local19 + _local21)));
_local31.y = (_local31.y - (_local33 * (_local20 + _local22)));
_local29 = (_local29 - (_local34 * ((((_local45.r1.x * _local20) - (_local45.r1.y * _local19)) + (_local46.r1.x * _local22)) - (_local46.r1.y * _local21))));
_local32.x = (_local32.x + (_local35 * (_local19 + _local21)));
_local32.y = (_local32.y + (_local35 * (_local20 + _local22)));
_local30 = (_local30 + (_local36 * ((((_local45.r2.x * _local20) - (_local45.r2.y * _local19)) + (_local46.r2.x * _local22)) - (_local46.r2.y * _local21))));
_local45.normalImpulse = _local58;
_local46.normalImpulse = _local59;
break;
};
_local58 = 0;
_local59 = (-(_local46.normalMass) * _local56);
_local53 = ((_local26.K.col2.x * _local59) + _local55);
_local54 = 0;
if ((((_local59 >= 0)) && ((_local53 >= 0)))){
_local17 = (_local58 - _local47);
_local18 = (_local59 - _local48);
_local19 = (_local17 * _local37);
_local20 = (_local17 * _local38);
_local21 = (_local18 * _local37);
_local22 = (_local18 * _local38);
_local31.x = (_local31.x - (_local33 * (_local19 + _local21)));
_local31.y = (_local31.y - (_local33 * (_local20 + _local22)));
_local29 = (_local29 - (_local34 * ((((_local45.r1.x * _local20) - (_local45.r1.y * _local19)) + (_local46.r1.x * _local22)) - (_local46.r1.y * _local21))));
_local32.x = (_local32.x + (_local35 * (_local19 + _local21)));
_local32.y = (_local32.y + (_local35 * (_local20 + _local22)));
_local30 = (_local30 + (_local36 * ((((_local45.r2.x * _local20) - (_local45.r2.y * _local19)) + (_local46.r2.x * _local22)) - (_local46.r2.y * _local21))));
_local45.normalImpulse = _local58;
_local46.normalImpulse = _local59;
break;
};
_local58 = 0;
_local59 = 0;
_local53 = _local55;
_local54 = _local56;
if ((((_local53 >= 0)) && ((_local54 >= 0)))){
_local17 = (_local58 - _local47);
_local18 = (_local59 - _local48);
_local19 = (_local17 * _local37);
_local20 = (_local17 * _local38);
_local21 = (_local18 * _local37);
_local22 = (_local18 * _local38);
_local31.x = (_local31.x - (_local33 * (_local19 + _local21)));
_local31.y = (_local31.y - (_local33 * (_local20 + _local22)));
_local29 = (_local29 - (_local34 * ((((_local45.r1.x * _local20) - (_local45.r1.y * _local19)) + (_local46.r1.x * _local22)) - (_local46.r1.y * _local21))));
_local32.x = (_local32.x + (_local35 * (_local19 + _local21)));
_local32.y = (_local32.y + (_local35 * (_local20 + _local22)));
_local30 = (_local30 + (_local36 * ((((_local45.r2.x * _local20) - (_local45.r2.y * _local19)) + (_local46.r2.x * _local22)) - (_local46.r2.y * _local21))));
_local45.normalImpulse = _local58;
_local46.normalImpulse = _local59;
break;
};
break;
};
_local1 = 0;
while (_local1 < _local26.pointCount) {
_local2 = _local26.points[_local1];
_local7 = (((_local32.x - (_local30 * _local2.r2.y)) - _local31.x) + (_local29 * _local2.r1.y));
_local8 = (((_local32.y + (_local30 * _local2.r2.x)) - _local31.y) - (_local29 * _local2.r1.x));
_local10 = ((_local7 * _local39) + (_local8 * _local40));
_local12 = (_local2.tangentMass * -(_local10));
_local44 = (_local41 * _local2.normalImpulse);
_local14 = b2Math.b2Clamp((_local2.tangentImpulse + _local12), -(_local44), _local44);
_local12 = (_local14 - _local2.tangentImpulse);
_local15 = (_local12 * _local39);
_local16 = (_local12 * _local40);
_local31.x = (_local31.x - (_local33 * _local15));
_local31.y = (_local31.y - (_local33 * _local16));
_local29 = (_local29 - (_local34 * ((_local2.r1.x * _local16) - (_local2.r1.y * _local15))));
_local32.x = (_local32.x + (_local35 * _local15));
_local32.y = (_local32.y + (_local35 * _local16));
_local30 = (_local30 + (_local36 * ((_local2.r2.x * _local16) - (_local2.r2.y * _local15))));
_local2.tangentImpulse = _local14;
_local1++;
};
};
_local27.m_angularVelocity = _local29;
_local28.m_angularVelocity = _local30;
_local25++;
};
}
public function FinalizeVelocityConstraints():void{
var _local1:int;
var _local2:b2ContactConstraint;
var _local3:b2Manifold;
var _local4:int;
var _local5:b2ManifoldPoint;
var _local6:b2ContactConstraintPoint;
_local1 = 0;
while (_local1 < m_constraintCount) {
_local2 = m_constraints[_local1];
_local3 = _local2.manifold;
_local4 = 0;
while (_local4 < _local2.pointCount) {
_local5 = _local3.points[_local4];
_local6 = _local2.points[_local4];
_local5.normalImpulse = _local6.normalImpulse;
_local5.tangentImpulse = _local6.tangentImpulse;
_local4++;
};
_local1++;
};
}
}
}//package Box2D.Dynamics.Contacts
Section 51
//b2EdgeAndCircleContact (Box2D.Dynamics.Contacts.b2EdgeAndCircleContact)
package Box2D.Dynamics.Contacts {
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
import Box2D.Collision.*;
import Box2D.Common.*;
public class b2EdgeAndCircleContact extends b2Contact {
private var m_manifolds:Array;
private var m_manifold:b2Manifold;
private var m0:b2Manifold;
private static const s_evalCP:b2ContactPoint = new b2ContactPoint();
public function b2EdgeAndCircleContact(_arg1:b2Shape, _arg2:b2Shape){
var _local3:b2ManifoldPoint;
m_manifolds = [new b2Manifold()];
m0 = new b2Manifold();
super(_arg1, _arg2);
m_manifold = m_manifolds[0];
m_manifold.pointCount = 0;
_local3 = m_manifold.points[0];
_local3.normalImpulse = 0;
_local3.tangentImpulse = 0;
}
override public function GetManifolds():Array{
return (m_manifolds);
}
private function b2CollideEdgeAndCircle(_arg1:b2Manifold, _arg2:b2EdgeShape, _arg3:b2XForm, _arg4:b2CircleShape, _arg5:b2XForm):void{
var _local6:b2Mat22;
var _local7:b2Vec2;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:b2ManifoldPoint;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:b2Vec2;
var _local18:b2Vec2;
var _local19:b2Vec2;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Boolean;
var _local24:Number;
_arg1.pointCount = 0;
_local6 = _arg5.R;
_local7 = _arg4.m_localPosition;
_local13 = (_arg5.position.x + ((_local6.col1.x * _local7.x) + (_local6.col2.x * _local7.y)));
_local14 = (_arg5.position.y + ((_local6.col1.y * _local7.x) + (_local6.col2.y * _local7.y)));
_local6 = _arg3.R;
_local10 = (_local13 - _arg3.position.x);
_local11 = (_local14 - _arg3.position.y);
_local15 = ((_local10 * _local6.col1.x) + (_local11 * _local6.col1.y));
_local16 = ((_local10 * _local6.col2.x) + (_local11 * _local6.col2.y));
_local17 = _arg2.m_normal;
_local18 = _arg2.m_v1;
_local19 = _arg2.m_v2;
_local20 = _arg4.m_radius;
_local22 = (((_local15 - _local18.x) * _arg2.m_direction.x) + ((_local16 - _local18.y) * _arg2.m_direction.y));
_local23 = false;
if (_local22 <= 0){
_local8 = (_local15 - _local18.x);
_local9 = (_local16 - _local18.y);
if (((_local8 * _arg2.m_cornerDir1.x) + (_local9 * _arg2.m_cornerDir1.y)) < 0){
return;
};
_local8 = (_local13 - (_arg3.position.x + ((_local6.col1.x * _local18.x) + (_local6.col2.x * _local18.y))));
_local9 = (_local14 - (_arg3.position.y + ((_local6.col1.y * _local18.x) + (_local6.col2.y * _local18.y))));
} else {
if (_local22 >= _arg2.m_length){
_local8 = (_local15 - _local19.x);
_local9 = (_local16 - _local19.y);
if (((_local8 * _arg2.m_cornerDir2.x) + (_local9 * _arg2.m_cornerDir2.y)) > 0){
return;
};
_local8 = (_local13 - (_arg3.position.x + ((_local6.col1.x * _local19.x) + (_local6.col2.x * _local19.y))));
_local9 = (_local14 - (_arg3.position.y + ((_local6.col1.y * _local19.x) + (_local6.col2.y * _local19.y))));
} else {
_local21 = (((_local15 - _local18.x) * _local17.x) + ((_local16 - _local18.y) * _local17.y));
if ((((_local21 > _local20)) || ((_local21 < -(_local20))))){
return;
};
_local21 = (_local21 - _local20);
_local6 = _arg3.R;
_arg1.normal.x = ((_local6.col1.x * _local17.x) + (_local6.col2.x * _local17.y));
_arg1.normal.y = ((_local6.col1.y * _local17.x) + (_local6.col2.y * _local17.y));
_local23 = true;
};
};
if (!_local23){
_local24 = ((_local8 * _local8) + (_local9 * _local9));
if (_local24 > (_local20 * _local20)){
return;
};
if (_local24 < Number.MIN_VALUE){
_local21 = -(_local20);
_arg1.normal.x = ((_local6.col1.x * _local17.x) + (_local6.col2.x * _local17.y));
_arg1.normal.y = ((_local6.col1.y * _local17.x) + (_local6.col2.y * _local17.y));
} else {
_local24 = Math.sqrt(_local24);
_local8 = (_local8 / _local24);
_local9 = (_local9 / _local24);
_local21 = (_local24 - _local20);
_arg1.normal.x = _local8;
_arg1.normal.y = _local9;
};
};
_local12 = _arg1.points[0];
_arg1.pointCount = 1;
_local12.id.key = 0;
_local12.separation = _local21;
_local13 = (_local13 - (_local20 * _arg1.normal.x));
_local14 = (_local14 - (_local20 * _arg1.normal.y));
_local10 = (_local13 - _arg3.position.x);
_local11 = (_local14 - _arg3.position.y);
_local12.localPoint1.x = ((_local10 * _local6.col1.x) + (_local11 * _local6.col1.y));
_local12.localPoint1.y = ((_local10 * _local6.col2.x) + (_local11 * _local6.col2.y));
_local6 = _arg5.R;
_local10 = (_local13 - _arg5.position.x);
_local11 = (_local14 - _arg5.position.y);
_local12.localPoint2.x = ((_local10 * _local6.col1.x) + (_local11 * _local6.col1.y));
_local12.localPoint2.y = ((_local10 * _local6.col2.x) + (_local11 * _local6.col2.y));
}
override b2internal function Evaluate(_arg1:b2ContactListener):void{
var _local2:b2Vec2;
var _local3:b2Vec2;
var _local4:b2ManifoldPoint;
var _local5:b2Body;
var _local6:b2Body;
var _local7:b2ContactPoint;
var _local8:b2ManifoldPoint;
_local5 = m_shape1.m_body;
_local6 = m_shape2.m_body;
m0.Set(m_manifold);
b2CollideEdgeAndCircle(m_manifold, (m_shape1 as b2EdgeShape), _local5.m_xf, (m_shape2 as b2CircleShape), _local6.m_xf);
_local7 = s_evalCP;
_local7.shape1 = m_shape1;
_local7.shape2 = m_shape2;
_local7.friction = b2Settings.b2MixFriction(m_shape1.GetFriction(), m_shape2.GetFriction());
_local7.restitution = b2Settings.b2MixRestitution(m_shape1.GetRestitution(), m_shape2.GetRestitution());
if (m_manifold.pointCount > 0){
m_manifoldCount = 1;
_local8 = m_manifold.points[0];
if (m0.pointCount == 0){
_local8.normalImpulse = 0;
_local8.tangentImpulse = 0;
if (_arg1){
_local7.position = _local5.GetWorldPoint(_local8.localPoint1);
_local2 = _local5.GetLinearVelocityFromLocalPoint(_local8.localPoint1);
_local3 = _local6.GetLinearVelocityFromLocalPoint(_local8.localPoint2);
_local7.velocity.Set((_local3.x - _local2.x), (_local3.y - _local2.y));
_local7.normal.SetV(m_manifold.normal);
_local7.separation = _local8.separation;
_local7.id.key = _local8.id._key;
_arg1.Add(_local7);
};
} else {
_local4 = m0.points[0];
_local8.normalImpulse = _local4.normalImpulse;
_local8.tangentImpulse = _local4.tangentImpulse;
if (_arg1){
_local7.position = _local5.GetWorldPoint(_local8.localPoint1);
_local2 = _local5.GetLinearVelocityFromLocalPoint(_local8.localPoint1);
_local3 = _local6.GetLinearVelocityFromLocalPoint(_local8.localPoint2);
_local7.velocity.Set((_local3.x - _local2.x), (_local3.y - _local2.y));
_local7.normal.SetV(m_manifold.normal);
_local7.separation = _local8.separation;
_local7.id.key = _local8.id._key;
_arg1.Persist(_local7);
};
};
} else {
m_manifoldCount = 0;
if ((((m0.pointCount > 0)) && (_arg1))){
_local4 = m0.points[0];
_local7.position = _local5.GetWorldPoint(_local4.localPoint1);
_local2 = _local5.GetLinearVelocityFromLocalPoint(_local4.localPoint1);
_local3 = _local6.GetLinearVelocityFromLocalPoint(_local4.localPoint2);
_local7.velocity.Set((_local3.x - _local2.x), (_local3.y - _local2.y));
_local7.normal.SetV(m0.normal);
_local7.separation = _local4.separation;
_local7.id.key = _local4.id._key;
_arg1.Remove(_local7);
};
};
}
public static function Destroy(_arg1:b2Contact, _arg2):void{
}
public static function Create(_arg1:b2Shape, _arg2:b2Shape, _arg3):b2Contact{
return (new b2EdgeAndCircleContact(_arg1, _arg2));
}
}
}//package Box2D.Dynamics.Contacts
Section 52
//b2NullContact (Box2D.Dynamics.Contacts.b2NullContact)
package Box2D.Dynamics.Contacts {
import Box2D.Dynamics.*;
import Box2D.Common.*;
public class b2NullContact extends b2Contact {
override public function GetManifolds():Array{
return (null);
}
override b2internal function Evaluate(_arg1:b2ContactListener):void{
}
}
}//package Box2D.Dynamics.Contacts
Section 53
//b2PolyAndCircleContact (Box2D.Dynamics.Contacts.b2PolyAndCircleContact)
package Box2D.Dynamics.Contacts {
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
import Box2D.Collision.*;
import Box2D.Common.*;
public class b2PolyAndCircleContact extends b2Contact {
private var m_manifolds:Array;
private var m0:b2Manifold;
private var m_manifold:b2Manifold;
private static const s_evalCP:b2ContactPoint = new b2ContactPoint();
public function b2PolyAndCircleContact(_arg1:b2Shape, _arg2:b2Shape){
m_manifolds = [new b2Manifold()];
m0 = new b2Manifold();
super(_arg1, _arg2);
m_manifold = m_manifolds[0];
b2Settings.b2Assert((m_shape1.m_type == b2Shape.e_polygonShape));
b2Settings.b2Assert((m_shape2.m_type == b2Shape.e_circleShape));
m_manifold.pointCount = 0;
}
override public function GetManifolds():Array{
return (m_manifolds);
}
override b2internal function Evaluate(_arg1:b2ContactListener):void{
var _local2:int;
var _local3:b2Vec2;
var _local4:b2Vec2;
var _local5:b2ManifoldPoint;
var _local6:b2Body;
var _local7:b2Body;
var _local8:Array;
var _local9:b2ContactPoint;
var _local10:b2ManifoldPoint;
var _local11:Boolean;
var _local12:uint;
var _local13:int;
_local6 = m_shape1.m_body;
_local7 = m_shape2.m_body;
m0.Set(m_manifold);
b2Collision.b2CollidePolygonAndCircle(m_manifold, (m_shape1 as b2PolygonShape), _local6.m_xf, (m_shape2 as b2CircleShape), _local7.m_xf);
_local8 = [false, false];
_local9 = s_evalCP;
_local9.shape1 = m_shape1;
_local9.shape2 = m_shape2;
_local9.friction = b2Settings.b2MixFriction(m_shape1.GetFriction(), m_shape2.GetFriction());
_local9.restitution = b2Settings.b2MixRestitution(m_shape1.GetRestitution(), m_shape2.GetRestitution());
if (m_manifold.pointCount > 0){
_local2 = 0;
while (_local2 < m_manifold.pointCount) {
_local10 = m_manifold.points[_local2];
_local10.normalImpulse = 0;
_local10.tangentImpulse = 0;
_local11 = false;
_local12 = _local10.id._key;
_local13 = 0;
while (_local13 < m0.pointCount) {
if (_local8[_local13] == true){
} else {
_local5 = m0.points[_local13];
if (_local5.id._key == _local12){
_local8[_local13] = true;
_local10.normalImpulse = _local5.normalImpulse;
_local10.tangentImpulse = _local5.tangentImpulse;
_local11 = true;
if (_arg1 != null){
_local9.position = _local6.GetWorldPoint(_local10.localPoint1);
_local3 = _local6.GetLinearVelocityFromLocalPoint(_local10.localPoint1);
_local4 = _local7.GetLinearVelocityFromLocalPoint(_local10.localPoint2);
_local9.velocity.Set((_local4.x - _local3.x), (_local4.y - _local3.y));
_local9.normal.SetV(m_manifold.normal);
_local9.separation = _local10.separation;
_local9.id.key = _local12;
_arg1.Persist(_local9);
};
break;
};
};
_local13++;
};
if ((((_local11 == false)) && (!((_arg1 == null))))){
_local9.position = _local6.GetWorldPoint(_local10.localPoint1);
_local3 = _local6.GetLinearVelocityFromLocalPoint(_local10.localPoint1);
_local4 = _local7.GetLinearVelocityFromLocalPoint(_local10.localPoint2);
_local9.velocity.Set((_local4.x - _local3.x), (_local4.y - _local3.y));
_local9.normal.SetV(m_manifold.normal);
_local9.separation = _local10.separation;
_local9.id.key = _local12;
_arg1.Add(_local9);
};
_local2++;
};
m_manifoldCount = 1;
} else {
m_manifoldCount = 0;
};
if (_arg1 == null){
return;
};
_local2 = 0;
while (_local2 < m0.pointCount) {
if (_local8[_local2]){
} else {
_local5 = m0.points[_local2];
_local9.position = _local6.GetWorldPoint(_local5.localPoint1);
_local3 = _local6.GetLinearVelocityFromLocalPoint(_local5.localPoint1);
_local4 = _local7.GetLinearVelocityFromLocalPoint(_local5.localPoint2);
_local9.velocity.Set((_local4.x - _local3.x), (_local4.y - _local3.y));
_local9.normal.SetV(m0.normal);
_local9.separation = _local5.separation;
_local9.id.key = _local5.id._key;
_arg1.Remove(_local9);
};
_local2++;
};
}
public static function Destroy(_arg1:b2Contact, _arg2):void{
}
public static function Create(_arg1:b2Shape, _arg2:b2Shape, _arg3):b2Contact{
return (new b2PolyAndCircleContact(_arg1, _arg2));
}
}
}//package Box2D.Dynamics.Contacts
Section 54
//b2PolyAndEdgeContact (Box2D.Dynamics.Contacts.b2PolyAndEdgeContact)
package Box2D.Dynamics.Contacts {
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
import Box2D.Collision.*;
import Box2D.Common.*;
public class b2PolyAndEdgeContact extends b2Contact {
private var m_manifolds:Array;
private var m0:b2Manifold;
private var m_manifold:b2Manifold;
private static const s_evalCP:b2ContactPoint = new b2ContactPoint();
public function b2PolyAndEdgeContact(_arg1:b2Shape, _arg2:b2Shape){
m_manifolds = [new b2Manifold()];
m0 = new b2Manifold();
super(_arg1, _arg2);
m_manifold = m_manifolds[0];
b2Settings.b2Assert((m_shape1.m_type == b2Shape.e_polygonShape));
b2Settings.b2Assert((m_shape2.m_type == b2Shape.e_edgeShape));
m_manifold.pointCount = 0;
}
override public function GetManifolds():Array{
return (m_manifolds);
}
private function b2CollidePolyAndEdge(_arg1:b2Manifold, _arg2:b2PolygonShape, _arg3:b2XForm, _arg4:b2EdgeShape, _arg5:b2XForm):void{
var _local6:b2Mat22;
var _local7:b2Vec2;
var _local8:b2Vec2;
var _local9:Number;
var _local10:Number;
var _local11:b2ManifoldPoint;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Number;
var _local24:Number;
var _local25:Number;
var _local26:int;
var _local27:Number;
var _local28:Number;
var _local29:int;
var _local30:Number;
var _local31:Number;
var _local32:Boolean;
var _local33:int;
var _local34:int;
var _local35:Array;
var _local36:Array;
var _local37:int;
var _local38:int;
var _local39:int;
var _local40:int;
var _local41:Number;
var _local42:Number;
var _local43:Number;
var _local44:Number;
var _local45:Number;
var _local46:int;
var _local47:Number;
var _local48:Number;
_arg1.pointCount = 0;
_local6 = _arg5.R;
_local7 = _arg4.m_v1;
_local13 = (_arg5.position.x + ((_local6.col1.x * _local7.x) + (_local6.col2.x * _local7.y)));
_local14 = (_arg5.position.y + ((_local6.col1.y * _local7.x) + (_local6.col2.y * _local7.y)));
_local7 = _arg4.m_v2;
_local15 = (_arg5.position.x + ((_local6.col1.x * _local7.x) + (_local6.col2.x * _local7.y)));
_local16 = (_arg5.position.y + ((_local6.col1.y * _local7.x) + (_local6.col2.y * _local7.y)));
_local7 = _arg4.m_normal;
_local17 = ((_local6.col1.x * _local7.x) + (_local6.col2.x * _local7.y));
_local18 = ((_local6.col1.y * _local7.x) + (_local6.col2.y * _local7.y));
_local6 = _arg3.R;
_local9 = (_local13 - _arg3.position.x);
_local10 = (_local14 - _arg3.position.y);
_local19 = ((_local9 * _local6.col1.x) + (_local10 * _local6.col1.y));
_local20 = ((_local9 * _local6.col2.x) + (_local10 * _local6.col2.y));
_local9 = (_local15 - _arg3.position.x);
_local10 = (_local16 - _arg3.position.y);
_local21 = ((_local9 * _local6.col1.x) + (_local10 * _local6.col1.y));
_local22 = ((_local9 * _local6.col2.x) + (_local10 * _local6.col2.y));
_local23 = ((_local17 * _local6.col1.x) + (_local18 * _local6.col1.y));
_local24 = ((_local17 * _local6.col2.x) + (_local18 * _local6.col2.y));
_local26 = -1;
_local27 = -(Number.MAX_VALUE);
_local29 = -1;
_local30 = -(Number.MAX_VALUE);
_local31 = -(Number.MAX_VALUE);
_local32 = false;
_local33 = -1;
_local34 = _arg2.m_vertexCount;
_local35 = _arg2.m_vertices;
_local36 = _arg2.m_normals;
_local37 = -1;
_local38 = -1;
_local39 = -1;
_local40 = -1;
_local41 = 0;
_local42 = 0;
_local43 = 0;
_local44 = 0;
_local45 = Number.MAX_VALUE;
_local7 = _local35[(_local34 - 1)];
_local41 = (((_local7.x - _local19) * _local23) + ((_local7.y - _local20) * _local24));
_local46 = 0;
while (_local46 < _local34) {
_local7 = _local35[_local46];
_local8 = _local36[_local46];
_local25 = (((_local19 - _local7.x) * _local8.x) + ((_local20 - _local7.y) * _local8.y));
_local28 = (((_local21 - _local7.x) * _local8.x) + ((_local22 - _local7.y) * _local8.y));
if (_local28 < _local25){
if (_local28 > _local31){
_local31 = _local28;
_local32 = false;
_local33 = _local46;
};
} else {
if (_local25 > _local31){
_local31 = _local25;
_local32 = true;
_local33 = _local46;
};
};
if (_local25 > _local27){
_local27 = _local25;
_local26 = _local46;
};
if (_local28 > _local30){
_local30 = _local28;
_local29 = _local46;
};
_local42 = (((_local7.x - _local19) * _local23) + ((_local7.y - _local20) * _local24));
if ((((_local42 >= 0)) && ((_local41 < 0)))){
_local39 = ((_local46)==0) ? (_local34 - 1) : (_local46 - 1);
_local40 = _local46;
_local44 = _local41;
} else {
if ((((_local42 < 0)) && ((_local41 >= 0)))){
_local37 = ((_local46)==0) ? (_local34 - 1) : (_local46 - 1);
_local38 = _local46;
_local43 = _local42;
};
};
if (_local42 < _local45){
_local45 = _local42;
};
_local41 = _local42;
_local46++;
};
if (_local37 == -1){
return;
};
if (_local31 > 0){
return;
};
if (((((_local32) && (_arg4.m_cornerConvex1))) || (((!(_local32)) && (_arg4.m_cornerConvex2))))){
if (_local31 > (_local45 + b2Settings.b2_linearSlop)){
if (_local32){
_local6 = _arg5.R;
_local7 = _arg4.m_cornerDir1;
_local9 = ((_local6.col1.x * _local7.x) + (_local6.col2.x * _local7.y));
_local10 = ((_local6.col1.y * _local7.x) + (_local6.col2.y * _local7.y));
_local6 = _arg3.R;
_local13 = ((_local6.col1.x * _local9) + (_local6.col2.x * _local10));
_local14 = ((_local6.col1.y * _local9) + (_local6.col2.y * _local10));
_local8 = _local36[_local26];
if (((_local8.x * _local13) + (_local8.y * _local14)) >= 0){
return;
};
} else {
_local6 = _arg5.R;
_local7 = _arg4.m_cornerDir2;
_local9 = ((_local6.col1.x * _local7.x) + (_local6.col2.x * _local7.y));
_local10 = ((_local6.col1.y * _local7.x) + (_local6.col2.y * _local7.y));
_local6 = _arg3.R;
_local13 = ((_local6.col1.x * _local9) + (_local6.col2.x * _local10));
_local14 = ((_local6.col1.y * _local9) + (_local6.col2.y * _local10));
_local8 = _local36[_local29];
if (((_local8.x * _local13) + (_local8.y * _local14)) <= 0){
return;
};
};
_local11 = _arg1.points[0];
_arg1.pointCount = 1;
_local6 = _arg3.R;
_local8 = _local36[_local33];
_arg1.normal.x = ((_local6.col1.x * _local8.x) + (_local6.col2.x * _local8.y));
_arg1.normal.y = ((_local6.col1.y * _local8.x) + (_local6.col2.y * _local8.y));
_local11.separation = _local31;
_local11.id.features.incidentEdge = _local33;
_local11.id.features.incidentVertex = b2Collision.b2_nullFeature;
_local11.id.features.referenceEdge = 0;
_local11.id.features.flip = 0;
if (_local32){
_local11.localPoint1.x = _local19;
_local11.localPoint1.y = _local20;
_local11.localPoint2.x = _arg4.m_v1.x;
_local11.localPoint2.y = _arg4.m_v1.y;
} else {
_local11.localPoint1.x = _local21;
_local11.localPoint1.y = _local22;
_local11.localPoint2.x = _arg4.m_v2.x;
_local11.localPoint2.y = _arg4.m_v2.y;
};
return;
};
};
_arg1.normal.x = -(_local17);
_arg1.normal.y = -(_local18);
if (_local38 == _local39){
_local11 = _arg1.points[0];
_arg1.pointCount = 1;
_local11.id.features.incidentEdge = _local38;
_local11.id.features.incidentVertex = b2Collision.b2_nullFeature;
_local11.id.features.referenceEdge = 0;
_local11.id.features.flip = 0;
_local7 = _local35[_local38];
_local11.localPoint1.x = _local7.x;
_local11.localPoint1.y = _local7.y;
_local6 = _arg3.R;
_local9 = ((_arg3.position.x + ((_local6.col1.x * _local7.x) + (_local6.col2.x * _local7.y))) - _arg5.position.x);
_local10 = ((_arg3.position.y + ((_local6.col1.y * _local7.x) + (_local6.col2.y * _local7.y))) - _arg5.position.y);
_local6 = _arg5.R;
_local11.localPoint2.x = ((_local9 * _local6.col1.x) + (_local10 * _local6.col1.y));
_local11.localPoint2.y = ((_local9 * _local6.col2.x) + (_local10 * _local6.col2.y));
_local11.separation = _local43;
return;
};
_arg1.pointCount = 2;
_local9 = -(_local24);
_local10 = _local23;
_local7 = _local35[_local38];
_local47 = ((_local9 * (_local7.x - _local19)) + (_local10 * (_local7.y - _local20)));
_local40 = ((_local38)==(_local34 - 1)) ? 0 : (_local38 + 1);
_local7 = _local35[_local39];
if (_local40 != _local39){
_local39 = _local40;
_local44 = ((_local23 * (_local7.x - _local19)) + (_local24 * (_local7.y - _local20)));
};
_local48 = ((_local9 * (_local7.x - _local19)) + (_local10 * (_local7.y - _local20)));
_local11 = _arg1.points[0];
_local11.id.features.incidentEdge = _local38;
_local11.id.features.incidentVertex = b2Collision.b2_nullFeature;
_local11.id.features.referenceEdge = 0;
_local11.id.features.flip = 0;
if (_local47 > _arg4.m_length){
_local11.localPoint1.x = _local21;
_local11.localPoint1.y = _local22;
_local11.localPoint2.x = _arg4.m_v2.x;
_local11.localPoint2.y = _arg4.m_v2.y;
_local12 = ((_arg4.m_length - _local48) / (_local47 - _local48));
if ((((_local12 > (100 * Number.MIN_VALUE))) && ((_local12 < 1)))){
_local11.separation = ((_local44 * (1 - _local12)) + (_local43 * _local12));
} else {
_local11.separation = _local43;
};
} else {
_local7 = _local35[_local38];
_local11.localPoint1.x = _local7.x;
_local11.localPoint1.y = _local7.y;
_local6 = _arg3.R;
_local9 = ((_arg3.position.x + ((_local6.col1.x * _local7.x) + (_local6.col2.x * _local7.y))) - _arg5.position.x);
_local10 = ((_arg3.position.y + ((_local6.col1.y * _local7.x) + (_local6.col2.y * _local7.y))) - _arg5.position.y);
_local6 = _arg5.R;
_local11.localPoint2.x = ((_local9 * _local6.col1.x) + (_local10 * _local6.col1.y));
_local11.localPoint2.y = ((_local9 * _local6.col2.x) + (_local10 * _local6.col2.y));
_local11.separation = _local43;
};
_local11 = _arg1.points[1];
_local11.id.features.incidentEdge = _local39;
_local11.id.features.incidentVertex = b2Collision.b2_nullFeature;
_local11.id.features.referenceEdge = 0;
_local11.id.features.flip = 0;
if (_local48 < 0){
_local11.localPoint1.x = _local19;
_local11.localPoint1.y = _local20;
_local11.localPoint2.x = _arg4.m_v1.x;
_local11.localPoint2.y = _arg4.m_v1.y;
_local12 = (-(_local47) / (_local48 - _local47));
if ((((_local12 > (100 * Number.MIN_VALUE))) && ((_local12 < 1)))){
_local11.separation = ((_local43 * (1 - _local12)) + (_local44 * _local12));
} else {
_local11.separation = _local44;
};
} else {
_local7 = _local35[_local39];
_local11.localPoint1.x = _local7.x;
_local11.localPoint1.y = _local7.y;
_local6 = _arg3.R;
_local9 = ((_arg3.position.x + ((_local6.col1.x * _local7.x) + (_local6.col2.x * _local7.y))) - _arg5.position.x);
_local10 = ((_arg3.position.y + ((_local6.col1.y * _local7.x) + (_local6.col2.y * _local7.y))) - _arg5.position.y);
_local6 = _arg5.R;
_local11.localPoint2.x = ((_local9 * _local6.col1.x) + (_local10 * _local6.col1.y));
_local11.localPoint2.y = ((_local9 * _local6.col2.x) + (_local10 * _local6.col2.y));
_local11.separation = _local44;
};
}
override b2internal function Evaluate(_arg1:b2ContactListener):void{
var _local2:int;
var _local3:b2Vec2;
var _local4:b2Vec2;
var _local5:b2ManifoldPoint;
var _local6:b2Body;
var _local7:b2Body;
var _local8:Array;
var _local9:b2ContactPoint;
var _local10:b2ManifoldPoint;
var _local11:Boolean;
var _local12:uint;
var _local13:int;
_local6 = m_shape1.m_body;
_local7 = m_shape2.m_body;
m0.Set(m_manifold);
b2CollidePolyAndEdge(m_manifold, (m_shape1 as b2PolygonShape), _local6.m_xf, (m_shape2 as b2EdgeShape), _local7.m_xf);
_local8 = [false, false];
_local9 = s_evalCP;
_local9.shape1 = m_shape1;
_local9.shape2 = m_shape2;
_local9.friction = b2Settings.b2MixFriction(m_shape1.GetFriction(), m_shape2.GetFriction());
_local9.restitution = b2Settings.b2MixRestitution(m_shape1.GetRestitution(), m_shape2.GetRestitution());
if (m_manifold.pointCount > 0){
_local2 = 0;
while (_local2 < m_manifold.pointCount) {
_local10 = m_manifold.points[_local2];
_local10.normalImpulse = 0;
_local10.tangentImpulse = 0;
_local11 = false;
_local12 = _local10.id._key;
_local13 = 0;
while (_local13 < m0.pointCount) {
if (_local8[_local13] == true){
} else {
_local5 = m0.points[_local13];
if (_local5.id._key == _local12){
_local8[_local13] = true;
_local10.normalImpulse = _local5.normalImpulse;
_local10.tangentImpulse = _local5.tangentImpulse;
_local11 = true;
if (_arg1 != null){
_local9.position = _local6.GetWorldPoint(_local10.localPoint1);
_local3 = _local6.GetLinearVelocityFromLocalPoint(_local10.localPoint1);
_local4 = _local7.GetLinearVelocityFromLocalPoint(_local10.localPoint2);
_local9.velocity.Set((_local4.x - _local3.x), (_local4.y - _local3.y));
_local9.normal.SetV(m_manifold.normal);
_local9.separation = _local10.separation;
_local9.id.key = _local12;
_arg1.Persist(_local9);
};
break;
};
};
_local13++;
};
if ((((_local11 == false)) && (!((_arg1 == null))))){
_local9.position = _local6.GetWorldPoint(_local10.localPoint1);
_local3 = _local6.GetLinearVelocityFromLocalPoint(_local10.localPoint1);
_local4 = _local7.GetLinearVelocityFromLocalPoint(_local10.localPoint2);
_local9.velocity.Set((_local4.x - _local3.x), (_local4.y - _local3.y));
_local9.normal.SetV(m_manifold.normal);
_local9.separation = _local10.separation;
_local9.id.key = _local12;
_arg1.Add(_local9);
};
_local2++;
};
m_manifoldCount = 1;
} else {
m_manifoldCount = 0;
};
if (_arg1 == null){
return;
};
_local2 = 0;
while (_local2 < m0.pointCount) {
if (_local8[_local2]){
} else {
_local5 = m0.points[_local2];
_local9.position = _local6.GetWorldPoint(_local5.localPoint1);
_local3 = _local6.GetLinearVelocityFromLocalPoint(_local5.localPoint1);
_local4 = _local7.GetLinearVelocityFromLocalPoint(_local5.localPoint2);
_local9.velocity.Set((_local4.x - _local3.x), (_local4.y - _local3.y));
_local9.normal.SetV(m0.normal);
_local9.separation = _local5.separation;
_local9.id.key = _local5.id._key;
_arg1.Remove(_local9);
};
_local2++;
};
}
public static function Destroy(_arg1:b2Contact, _arg2):void{
}
public static function Create(_arg1:b2Shape, _arg2:b2Shape, _arg3):b2Contact{
return (new b2PolyAndEdgeContact(_arg1, _arg2));
}
}
}//package Box2D.Dynamics.Contacts
Section 55
//b2PolygonContact (Box2D.Dynamics.Contacts.b2PolygonContact)
package Box2D.Dynamics.Contacts {
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
import Box2D.Collision.*;
import Box2D.Common.*;
public class b2PolygonContact extends b2Contact {
private var m_manifolds:Array;
private var m0:b2Manifold;
private var m_manifold:b2Manifold;
private static const s_evalCP:b2ContactPoint = new b2ContactPoint();
public function b2PolygonContact(_arg1:b2Shape, _arg2:b2Shape):void{
m0 = new b2Manifold();
m_manifolds = [new b2Manifold()];
super(_arg1, _arg2);
m_manifold = m_manifolds[0];
m_manifold.pointCount = 0;
}
override public function GetManifolds():Array{
return (m_manifolds);
}
override b2internal function Evaluate(_arg1:b2ContactListener):void{
var _local2:b2Vec2;
var _local3:b2Vec2;
var _local4:b2ManifoldPoint;
var _local5:b2Body;
var _local6:b2Body;
var _local7:b2ContactPoint;
var _local8:int;
var _local9:Array;
var _local10:b2ManifoldPoint;
var _local11:Boolean;
var _local12:uint;
var _local13:int;
_local5 = m_shape1.m_body;
_local6 = m_shape2.m_body;
m0.Set(m_manifold);
b2Collision.b2CollidePolygons(m_manifold, (m_shape1 as b2PolygonShape), _local5.m_xf, (m_shape2 as b2PolygonShape), _local6.m_xf);
_local9 = [false, false];
_local7 = s_evalCP;
_local7.shape1 = m_shape1;
_local7.shape2 = m_shape2;
_local7.friction = b2Settings.b2MixFriction(m_shape1.GetFriction(), m_shape2.GetFriction());
_local7.restitution = b2Settings.b2MixRestitution(m_shape1.GetRestitution(), m_shape2.GetRestitution());
if (m_manifold.pointCount > 0){
_local8 = 0;
while (_local8 < m_manifold.pointCount) {
_local10 = m_manifold.points[_local8];
_local10.normalImpulse = 0;
_local10.tangentImpulse = 0;
_local11 = false;
_local12 = _local10.id._key;
_local13 = 0;
while (_local13 < m0.pointCount) {
if (_local9[_local13] == true){
} else {
_local4 = m0.points[_local13];
if (_local4.id._key == _local12){
_local9[_local13] = true;
_local10.normalImpulse = _local4.normalImpulse;
_local10.tangentImpulse = _local4.tangentImpulse;
_local11 = true;
if (_arg1 != null){
_local7.position = _local5.GetWorldPoint(_local10.localPoint1);
_local2 = _local5.GetLinearVelocityFromLocalPoint(_local10.localPoint1);
_local3 = _local6.GetLinearVelocityFromLocalPoint(_local10.localPoint2);
_local7.velocity.Set((_local3.x - _local2.x), (_local3.y - _local2.y));
_local7.normal.SetV(m_manifold.normal);
_local7.separation = _local10.separation;
_local7.id.key = _local12;
_arg1.Persist(_local7);
};
break;
};
};
_local13++;
};
if ((((_local11 == false)) && (!((_arg1 == null))))){
_local7.position = _local5.GetWorldPoint(_local10.localPoint1);
_local2 = _local5.GetLinearVelocityFromLocalPoint(_local10.localPoint1);
_local3 = _local6.GetLinearVelocityFromLocalPoint(_local10.localPoint2);
_local7.velocity.Set((_local3.x - _local2.x), (_local3.y - _local2.y));
_local7.normal.SetV(m_manifold.normal);
_local7.separation = _local10.separation;
_local7.id.key = _local12;
_arg1.Add(_local7);
};
_local8++;
};
m_manifoldCount = 1;
} else {
m_manifoldCount = 0;
};
if (_arg1 == null){
return;
};
_local8 = 0;
while (_local8 < m0.pointCount) {
if (_local9[_local8]){
} else {
_local4 = m0.points[_local8];
_local7.position = _local5.GetWorldPoint(_local4.localPoint1);
_local2 = _local5.GetLinearVelocityFromLocalPoint(_local4.localPoint1);
_local3 = _local6.GetLinearVelocityFromLocalPoint(_local4.localPoint2);
_local7.velocity.Set((_local3.x - _local2.x), (_local3.y - _local2.y));
_local7.normal.SetV(m0.normal);
_local7.separation = _local4.separation;
_local7.id.key = _local4.id._key;
_arg1.Remove(_local7);
};
_local8++;
};
}
public static function Destroy(_arg1:b2Contact, _arg2):void{
}
public static function Create(_arg1:b2Shape, _arg2:b2Shape, _arg3):b2Contact{
return (new b2PolygonContact(_arg1, _arg2));
}
}
}//package Box2D.Dynamics.Contacts
Section 56
//b2Controller (Box2D.Dynamics.Controllers.b2Controller)
package Box2D.Dynamics.Controllers {
import Box2D.Dynamics.*;
import Box2D.Common.*;
public class b2Controller {
b2internal var m_world:b2World;
b2internal var m_next:b2Controller;
protected var m_bodyList:b2ControllerEdge;
b2internal var m_prev:b2Controller;
protected var m_bodyCount:int;
public function AddBody(_arg1:b2Body):void{
var _local2:b2ControllerEdge;
_local2 = new b2ControllerEdge();
_local2.controller = this;
_local2.body = _arg1;
_local2.nextBody = m_bodyList;
_local2.prevBody = null;
m_bodyList = _local2;
if (_local2.nextBody){
_local2.nextBody.prevBody = _local2;
};
m_bodyCount++;
_local2.nextController = _arg1.m_controllerList;
_local2.prevController = null;
_arg1.m_controllerList = _local2;
if (_local2.nextController){
_local2.nextController.prevController = _local2;
};
_arg1.m_controllerCount++;
}
public function Draw(_arg1:b2DebugDraw):void{
}
public function RemoveBody(_arg1:b2Body):void{
var _local2:b2ControllerEdge;
while (((_local2) && (!((_local2.controller == this))))) {
_local2 = _local2.nextController;
};
if (_local2.prevBody){
_local2.prevBody.nextBody = _local2.nextBody;
};
if (_local2.nextBody){
_local2.nextBody.prevBody = _local2.prevBody;
};
if (_local2.nextController){
_local2.nextController.prevController = _local2.prevController;
};
if (_local2.prevController){
_local2.prevController.nextController = _local2.nextController;
};
if (m_bodyList == _local2){
m_bodyList = _local2.nextBody;
};
if (_arg1.m_controllerList == _local2){
_arg1.m_controllerList = _local2.nextController;
};
_arg1.m_controllerCount--;
m_bodyCount--;
}
public function GetNext():b2Controller{
return (m_next);
}
public function Step(_arg1:b2TimeStep):void{
}
public function Clear():void{
while (m_bodyList) {
RemoveBody(m_bodyList.body);
};
}
public function GetBodyList():b2ControllerEdge{
return (m_bodyList);
}
public function GetWorld():b2World{
return (m_world);
}
}
}//package Box2D.Dynamics.Controllers
Section 57
//b2ControllerEdge (Box2D.Dynamics.Controllers.b2ControllerEdge)
package Box2D.Dynamics.Controllers {
import Box2D.Dynamics.*;
public class b2ControllerEdge {
public var body:b2Body;
public var nextController:b2ControllerEdge;
public var nextBody:b2ControllerEdge;
public var prevController:b2ControllerEdge;
public var prevBody:b2ControllerEdge;
public var controller:b2Controller;
}
}//package Box2D.Dynamics.Controllers
Section 58
//b2DistanceJoint (Box2D.Dynamics.Joints.b2DistanceJoint)
package Box2D.Dynamics.Joints {
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
import Box2D.Common.*;
public class b2DistanceJoint extends b2Joint {
private var m_mass:Number;
private var m_u:b2Vec2;
private var m_impulse:Number;
private var m_dampingRatio:Number;
private var m_localAnchor1:b2Vec2;
private var m_localAnchor2:b2Vec2;
private var m_bias:Number;
private var m_frequencyHz:Number;
private var m_gamma:Number;
private var m_length:Number;
public function b2DistanceJoint(_arg1:b2DistanceJointDef){
var _local2:b2Mat22;
var _local3:Number;
var _local4:Number;
m_localAnchor1 = new b2Vec2();
m_localAnchor2 = new b2Vec2();
m_u = new b2Vec2();
super(_arg1);
m_localAnchor1.SetV(_arg1.localAnchor1);
m_localAnchor2.SetV(_arg1.localAnchor2);
m_length = _arg1.length;
m_frequencyHz = _arg1.frequencyHz;
m_dampingRatio = _arg1.dampingRatio;
m_impulse = 0;
m_gamma = 0;
m_bias = 0;
}
override public function GetAnchor1():b2Vec2{
return (m_body1.GetWorldPoint(m_localAnchor1));
}
override public function GetAnchor2():b2Vec2{
return (m_body2.GetWorldPoint(m_localAnchor2));
}
override public function GetReactionForce(_arg1:Number):b2Vec2{
return (new b2Vec2(((_arg1 * m_impulse) * m_u.x), ((_arg1 * m_impulse) * m_u.y)));
}
override b2internal function SolvePositionConstraints(_arg1:Number):Boolean{
var _local2:b2Mat22;
var _local3:b2Body;
var _local4:b2Body;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
if (m_frequencyHz > 0){
return (true);
};
_local3 = m_body1;
_local4 = m_body2;
_local2 = _local3.m_xf.R;
_local5 = (m_localAnchor1.x - _local3.m_sweep.localCenter.x);
_local6 = (m_localAnchor1.y - _local3.m_sweep.localCenter.y);
_local7 = ((_local2.col1.x * _local5) + (_local2.col2.x * _local6));
_local6 = ((_local2.col1.y * _local5) + (_local2.col2.y * _local6));
_local5 = _local7;
_local2 = _local4.m_xf.R;
_local8 = (m_localAnchor2.x - _local4.m_sweep.localCenter.x);
_local9 = (m_localAnchor2.y - _local4.m_sweep.localCenter.y);
_local7 = ((_local2.col1.x * _local8) + (_local2.col2.x * _local9));
_local9 = ((_local2.col1.y * _local8) + (_local2.col2.y * _local9));
_local8 = _local7;
_local10 = (((_local4.m_sweep.c.x + _local8) - _local3.m_sweep.c.x) - _local5);
_local11 = (((_local4.m_sweep.c.y + _local9) - _local3.m_sweep.c.y) - _local6);
_local12 = Math.sqrt(((_local10 * _local10) + (_local11 * _local11)));
_local10 = (_local10 / _local12);
_local11 = (_local11 / _local12);
_local13 = (_local12 - m_length);
_local13 = b2Math.b2Clamp(_local13, -(b2Settings.b2_maxLinearCorrection), b2Settings.b2_maxLinearCorrection);
_local14 = (-(m_mass) * _local13);
m_u.Set(_local10, _local11);
_local15 = (_local14 * m_u.x);
_local16 = (_local14 * m_u.y);
_local3.m_sweep.c.x = (_local3.m_sweep.c.x - (_local3.m_invMass * _local15));
_local3.m_sweep.c.y = (_local3.m_sweep.c.y - (_local3.m_invMass * _local16));
_local3.m_sweep.a = (_local3.m_sweep.a - (_local3.m_invI * ((_local5 * _local16) - (_local6 * _local15))));
_local4.m_sweep.c.x = (_local4.m_sweep.c.x + (_local4.m_invMass * _local15));
_local4.m_sweep.c.y = (_local4.m_sweep.c.y + (_local4.m_invMass * _local16));
_local4.m_sweep.a = (_local4.m_sweep.a + (_local4.m_invI * ((_local8 * _local16) - (_local9 * _local15))));
_local3.SynchronizeTransform();
_local4.SynchronizeTransform();
return ((b2Math.b2Abs(_local13) < b2Settings.b2_linearSlop));
}
override b2internal function InitVelocityConstraints(_arg1:b2TimeStep):void{
var _local2:b2Mat22;
var _local3:Number;
var _local4:b2Body;
var _local5:b2Body;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
_local4 = m_body1;
_local5 = m_body2;
_local2 = _local4.m_xf.R;
_local6 = (m_localAnchor1.x - _local4.m_sweep.localCenter.x);
_local7 = (m_localAnchor1.y - _local4.m_sweep.localCenter.y);
_local3 = ((_local2.col1.x * _local6) + (_local2.col2.x * _local7));
_local7 = ((_local2.col1.y * _local6) + (_local2.col2.y * _local7));
_local6 = _local3;
_local2 = _local5.m_xf.R;
_local8 = (m_localAnchor2.x - _local5.m_sweep.localCenter.x);
_local9 = (m_localAnchor2.y - _local5.m_sweep.localCenter.y);
_local3 = ((_local2.col1.x * _local8) + (_local2.col2.x * _local9));
_local9 = ((_local2.col1.y * _local8) + (_local2.col2.y * _local9));
_local8 = _local3;
m_u.x = (((_local5.m_sweep.c.x + _local8) - _local4.m_sweep.c.x) - _local6);
m_u.y = (((_local5.m_sweep.c.y + _local9) - _local4.m_sweep.c.y) - _local7);
_local10 = Math.sqrt(((m_u.x * m_u.x) + (m_u.y * m_u.y)));
if (_local10 > b2Settings.b2_linearSlop){
m_u.Multiply((1 / _local10));
} else {
m_u.SetZero();
};
_local11 = ((_local6 * m_u.y) - (_local7 * m_u.x));
_local12 = ((_local8 * m_u.y) - (_local9 * m_u.x));
_local13 = (((_local4.m_invMass + ((_local4.m_invI * _local11) * _local11)) + _local5.m_invMass) + ((_local5.m_invI * _local12) * _local12));
m_mass = (1 / _local13);
if (m_frequencyHz > 0){
_local14 = (_local10 - m_length);
_local15 = ((2 * Math.PI) * m_frequencyHz);
_local16 = (((2 * m_mass) * m_dampingRatio) * _local15);
_local17 = ((m_mass * _local15) * _local15);
m_gamma = (1 / (_arg1.dt * (_local16 + (_arg1.dt * _local17))));
m_bias = (((_local14 * _arg1.dt) * _local17) * m_gamma);
m_mass = (1 / (_local13 + m_gamma));
};
if (_arg1.warmStarting){
m_impulse = (m_impulse * _arg1.dtRatio);
_local18 = (m_impulse * m_u.x);
_local19 = (m_impulse * m_u.y);
_local4.m_linearVelocity.x = (_local4.m_linearVelocity.x - (_local4.m_invMass * _local18));
_local4.m_linearVelocity.y = (_local4.m_linearVelocity.y - (_local4.m_invMass * _local19));
_local4.m_angularVelocity = (_local4.m_angularVelocity - (_local4.m_invI * ((_local6 * _local19) - (_local7 * _local18))));
_local5.m_linearVelocity.x = (_local5.m_linearVelocity.x + (_local5.m_invMass * _local18));
_local5.m_linearVelocity.y = (_local5.m_linearVelocity.y + (_local5.m_invMass * _local19));
_local5.m_angularVelocity = (_local5.m_angularVelocity + (_local5.m_invI * ((_local8 * _local19) - (_local9 * _local18))));
} else {
m_impulse = 0;
};
}
override public function GetReactionTorque(_arg1:Number):Number{
return (0);
}
override b2internal function SolveVelocityConstraints(_arg1:b2TimeStep):void{
var _local2:b2Mat22;
var _local3:b2Body;
var _local4:b2Body;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
_local3 = m_body1;
_local4 = m_body2;
_local2 = _local3.m_xf.R;
_local5 = (m_localAnchor1.x - _local3.m_sweep.localCenter.x);
_local6 = (m_localAnchor1.y - _local3.m_sweep.localCenter.y);
_local7 = ((_local2.col1.x * _local5) + (_local2.col2.x * _local6));
_local6 = ((_local2.col1.y * _local5) + (_local2.col2.y * _local6));
_local5 = _local7;
_local2 = _local4.m_xf.R;
_local8 = (m_localAnchor2.x - _local4.m_sweep.localCenter.x);
_local9 = (m_localAnchor2.y - _local4.m_sweep.localCenter.y);
_local7 = ((_local2.col1.x * _local8) + (_local2.col2.x * _local9));
_local9 = ((_local2.col1.y * _local8) + (_local2.col2.y * _local9));
_local8 = _local7;
_local10 = (_local3.m_linearVelocity.x + (-(_local3.m_angularVelocity) * _local6));
_local11 = (_local3.m_linearVelocity.y + (_local3.m_angularVelocity * _local5));
_local12 = (_local4.m_linearVelocity.x + (-(_local4.m_angularVelocity) * _local9));
_local13 = (_local4.m_linearVelocity.y + (_local4.m_angularVelocity * _local8));
_local14 = ((m_u.x * (_local12 - _local10)) + (m_u.y * (_local13 - _local11)));
_local15 = (-(m_mass) * ((_local14 + m_bias) + (m_gamma * m_impulse)));
m_impulse = (m_impulse + _local15);
_local16 = (_local15 * m_u.x);
_local17 = (_local15 * m_u.y);
_local3.m_linearVelocity.x = (_local3.m_linearVelocity.x - (_local3.m_invMass * _local16));
_local3.m_linearVelocity.y = (_local3.m_linearVelocity.y - (_local3.m_invMass * _local17));
_local3.m_angularVelocity = (_local3.m_angularVelocity - (_local3.m_invI * ((_local5 * _local17) - (_local6 * _local16))));
_local4.m_linearVelocity.x = (_local4.m_linearVelocity.x + (_local4.m_invMass * _local16));
_local4.m_linearVelocity.y = (_local4.m_linearVelocity.y + (_local4.m_invMass * _local17));
_local4.m_angularVelocity = (_local4.m_angularVelocity + (_local4.m_invI * ((_local8 * _local17) - (_local9 * _local16))));
}
}
}//package Box2D.Dynamics.Joints
Section 59
//b2DistanceJointDef (Box2D.Dynamics.Joints.b2DistanceJointDef)
package Box2D.Dynamics.Joints {
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
public class b2DistanceJointDef extends b2JointDef {
public var length:Number;
public var dampingRatio:Number;
public var frequencyHz:Number;
public var localAnchor2:b2Vec2;
public var localAnchor1:b2Vec2;
public function b2DistanceJointDef(){
localAnchor1 = new b2Vec2();
localAnchor2 = new b2Vec2();
super();
type = b2Joint.e_distanceJoint;
length = 1;
frequencyHz = 0;
dampingRatio = 0;
}
public function Initialize(_arg1:b2Body, _arg2:b2Body, _arg3:b2Vec2, _arg4:b2Vec2):void{
var _local5:Number;
var _local6:Number;
body1 = _arg1;
body2 = _arg2;
localAnchor1.SetV(body1.GetLocalPoint(_arg3));
localAnchor2.SetV(body2.GetLocalPoint(_arg4));
_local5 = (_arg4.x - _arg3.x);
_local6 = (_arg4.y - _arg3.y);
length = Math.sqrt(((_local5 * _local5) + (_local6 * _local6)));
frequencyHz = 0;
dampingRatio = 0;
}
}
}//package Box2D.Dynamics.Joints
Section 60
//b2GearJoint (Box2D.Dynamics.Joints.b2GearJoint)
package Box2D.Dynamics.Joints {
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
import Box2D.Common.*;
public class b2GearJoint extends b2Joint {
private var m_ratio:Number;
private var m_mass:Number;
private var m_impulse:Number;
private var m_prismatic1:b2PrismaticJoint;
private var m_prismatic2:b2PrismaticJoint;
private var m_ground1:b2Body;
private var m_constant:Number;
private var m_ground2:b2Body;
private var m_groundAnchor2:b2Vec2;
private var m_groundAnchor1:b2Vec2;
private var m_localAnchor2:b2Vec2;
private var m_revolute1:b2RevoluteJoint;
private var m_revolute2:b2RevoluteJoint;
private var m_localAnchor1:b2Vec2;
private var m_J:b2Jacobian;
public function b2GearJoint(_arg1:b2GearJointDef){
var _local2:int;
var _local3:int;
var _local4:Number;
var _local5:Number;
m_groundAnchor1 = new b2Vec2();
m_groundAnchor2 = new b2Vec2();
m_localAnchor1 = new b2Vec2();
m_localAnchor2 = new b2Vec2();
m_J = new b2Jacobian();
super(_arg1);
_local2 = _arg1.joint1.m_type;
_local3 = _arg1.joint2.m_type;
m_revolute1 = null;
m_prismatic1 = null;
m_revolute2 = null;
m_prismatic2 = null;
m_ground1 = _arg1.joint1.m_body1;
m_body1 = _arg1.joint1.m_body2;
if (_local2 == b2Joint.e_revoluteJoint){
m_revolute1 = (_arg1.joint1 as b2RevoluteJoint);
m_groundAnchor1.SetV(m_revolute1.m_localAnchor1);
m_localAnchor1.SetV(m_revolute1.m_localAnchor2);
_local4 = m_revolute1.GetJointAngle();
} else {
m_prismatic1 = (_arg1.joint1 as b2PrismaticJoint);
m_groundAnchor1.SetV(m_prismatic1.m_localAnchor1);
m_localAnchor1.SetV(m_prismatic1.m_localAnchor2);
_local4 = m_prismatic1.GetJointTranslation();
};
m_ground2 = _arg1.joint2.m_body1;
m_body2 = _arg1.joint2.m_body2;
if (_local3 == b2Joint.e_revoluteJoint){
m_revolute2 = (_arg1.joint2 as b2RevoluteJoint);
m_groundAnchor2.SetV(m_revolute2.m_localAnchor1);
m_localAnchor2.SetV(m_revolute2.m_localAnchor2);
_local5 = m_revolute2.GetJointAngle();
} else {
m_prismatic2 = (_arg1.joint2 as b2PrismaticJoint);
m_groundAnchor2.SetV(m_prismatic2.m_localAnchor1);
m_localAnchor2.SetV(m_prismatic2.m_localAnchor2);
_local5 = m_prismatic2.GetJointTranslation();
};
m_ratio = _arg1.ratio;
m_constant = (_local4 + (m_ratio * _local5));
m_impulse = 0;
}
override public function GetAnchor1():b2Vec2{
return (m_body1.GetWorldPoint(m_localAnchor1));
}
override public function GetAnchor2():b2Vec2{
return (m_body2.GetWorldPoint(m_localAnchor2));
}
override public function GetReactionForce(_arg1:Number):b2Vec2{
return (new b2Vec2(((_arg1 * m_impulse) * m_J.linear2.x), ((_arg1 * m_impulse) * m_J.linear2.y)));
}
override b2internal function SolvePositionConstraints(_arg1:Number):Boolean{
var _local2:Number;
var _local3:b2Body;
var _local4:b2Body;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
_local2 = 0;
_local3 = m_body1;
_local4 = m_body2;
if (m_revolute1){
_local5 = m_revolute1.GetJointAngle();
} else {
_local5 = m_prismatic1.GetJointTranslation();
};
if (m_revolute2){
_local6 = m_revolute2.GetJointAngle();
} else {
_local6 = m_prismatic2.GetJointTranslation();
};
_local7 = (m_constant - (_local5 + (m_ratio * _local6)));
_local8 = (-(m_mass) * _local7);
_local3.m_sweep.c.x = (_local3.m_sweep.c.x + ((_local3.m_invMass * _local8) * m_J.linear1.x));
_local3.m_sweep.c.y = (_local3.m_sweep.c.y + ((_local3.m_invMass * _local8) * m_J.linear1.y));
_local3.m_sweep.a = (_local3.m_sweep.a + ((_local3.m_invI * _local8) * m_J.angular1));
_local4.m_sweep.c.x = (_local4.m_sweep.c.x + ((_local4.m_invMass * _local8) * m_J.linear2.x));
_local4.m_sweep.c.y = (_local4.m_sweep.c.y + ((_local4.m_invMass * _local8) * m_J.linear2.y));
_local4.m_sweep.a = (_local4.m_sweep.a + ((_local4.m_invI * _local8) * m_J.angular2));
_local3.SynchronizeTransform();
_local4.SynchronizeTransform();
return ((_local2 < b2Settings.b2_linearSlop));
}
override b2internal function InitVelocityConstraints(_arg1:b2TimeStep):void{
var _local2:b2Body;
var _local3:b2Body;
var _local4:b2Body;
var _local5:b2Body;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:b2Mat22;
var _local11:b2Vec2;
var _local12:Number;
var _local13:Number;
var _local14:Number;
_local2 = m_ground1;
_local3 = m_ground2;
_local4 = m_body1;
_local5 = m_body2;
_local14 = 0;
m_J.SetZero();
if (m_revolute1){
m_J.angular1 = -1;
_local14 = (_local14 + _local4.m_invI);
} else {
_local10 = _local2.m_xf.R;
_local11 = m_prismatic1.m_localXAxis1;
_local6 = ((_local10.col1.x * _local11.x) + (_local10.col2.x * _local11.y));
_local7 = ((_local10.col1.y * _local11.x) + (_local10.col2.y * _local11.y));
_local10 = _local4.m_xf.R;
_local8 = (m_localAnchor1.x - _local4.m_sweep.localCenter.x);
_local9 = (m_localAnchor1.y - _local4.m_sweep.localCenter.y);
_local13 = ((_local10.col1.x * _local8) + (_local10.col2.x * _local9));
_local9 = ((_local10.col1.y * _local8) + (_local10.col2.y * _local9));
_local8 = _local13;
_local12 = ((_local8 * _local7) - (_local9 * _local6));
m_J.linear1.Set(-(_local6), -(_local7));
m_J.angular1 = -(_local12);
_local14 = (_local14 + (_local4.m_invMass + ((_local4.m_invI * _local12) * _local12)));
};
if (m_revolute2){
m_J.angular2 = -(m_ratio);
_local14 = (_local14 + ((m_ratio * m_ratio) * _local5.m_invI));
} else {
_local10 = _local3.m_xf.R;
_local11 = m_prismatic2.m_localXAxis1;
_local6 = ((_local10.col1.x * _local11.x) + (_local10.col2.x * _local11.y));
_local7 = ((_local10.col1.y * _local11.x) + (_local10.col2.y * _local11.y));
_local10 = _local5.m_xf.R;
_local8 = (m_localAnchor2.x - _local5.m_sweep.localCenter.x);
_local9 = (m_localAnchor2.y - _local5.m_sweep.localCenter.y);
_local13 = ((_local10.col1.x * _local8) + (_local10.col2.x * _local9));
_local9 = ((_local10.col1.y * _local8) + (_local10.col2.y * _local9));
_local8 = _local13;
_local12 = ((_local8 * _local7) - (_local9 * _local6));
m_J.linear2.Set((-(m_ratio) * _local6), (-(m_ratio) * _local7));
m_J.angular2 = (-(m_ratio) * _local12);
_local14 = (_local14 + ((m_ratio * m_ratio) * (_local5.m_invMass + ((_local5.m_invI * _local12) * _local12))));
};
m_mass = (1 / _local14);
if (_arg1.warmStarting){
_local4.m_linearVelocity.x = (_local4.m_linearVelocity.x + ((_local4.m_invMass * m_impulse) * m_J.linear1.x));
_local4.m_linearVelocity.y = (_local4.m_linearVelocity.y + ((_local4.m_invMass * m_impulse) * m_J.linear1.y));
_local4.m_angularVelocity = (_local4.m_angularVelocity + ((_local4.m_invI * m_impulse) * m_J.angular1));
_local5.m_linearVelocity.x = (_local5.m_linearVelocity.x + ((_local5.m_invMass * m_impulse) * m_J.linear2.x));
_local5.m_linearVelocity.y = (_local5.m_linearVelocity.y + ((_local5.m_invMass * m_impulse) * m_J.linear2.y));
_local5.m_angularVelocity = (_local5.m_angularVelocity + ((_local5.m_invI * m_impulse) * m_J.angular2));
} else {
m_impulse = 0;
};
}
override public function GetReactionTorque(_arg1:Number):Number{
var _local2:b2Mat22;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
_local2 = m_body2.m_xf.R;
_local3 = (m_localAnchor1.x - m_body2.m_sweep.localCenter.x);
_local4 = (m_localAnchor1.y - m_body2.m_sweep.localCenter.y);
_local5 = ((_local2.col1.x * _local3) + (_local2.col2.x * _local4));
_local4 = ((_local2.col1.y * _local3) + (_local2.col2.y * _local4));
_local3 = _local5;
_local6 = (m_impulse * m_J.linear2.x);
_local7 = (m_impulse * m_J.linear2.y);
return ((_arg1 * (((m_impulse * m_J.angular2) - (_local3 * _local7)) + (_local4 * _local6))));
}
public function GetRatio():Number{
return (m_ratio);
}
override b2internal function SolveVelocityConstraints(_arg1:b2TimeStep):void{
var _local2:b2Body;
var _local3:b2Body;
var _local4:Number;
var _local5:Number;
_local2 = m_body1;
_local3 = m_body2;
_local4 = m_J.Compute(_local2.m_linearVelocity, _local2.m_angularVelocity, _local3.m_linearVelocity, _local3.m_angularVelocity);
_local5 = (-(m_mass) * _local4);
m_impulse = (m_impulse + _local5);
_local2.m_linearVelocity.x = (_local2.m_linearVelocity.x + ((_local2.m_invMass * _local5) * m_J.linear1.x));
_local2.m_linearVelocity.y = (_local2.m_linearVelocity.y + ((_local2.m_invMass * _local5) * m_J.linear1.y));
_local2.m_angularVelocity = (_local2.m_angularVelocity + ((_local2.m_invI * _local5) * m_J.angular1));
_local3.m_linearVelocity.x = (_local3.m_linearVelocity.x + ((_local3.m_invMass * _local5) * m_J.linear2.x));
_local3.m_linearVelocity.y = (_local3.m_linearVelocity.y + ((_local3.m_invMass * _local5) * m_J.linear2.y));
_local3.m_angularVelocity = (_local3.m_angularVelocity + ((_local3.m_invI * _local5) * m_J.angular2));
}
}
}//package Box2D.Dynamics.Joints
Section 61
//b2GearJointDef (Box2D.Dynamics.Joints.b2GearJointDef)
package Box2D.Dynamics.Joints {
public class b2GearJointDef extends b2JointDef {
public var joint2:b2Joint;
public var joint1:b2Joint;
public var ratio:Number;
public function b2GearJointDef(){
type = b2Joint.e_gearJoint;
joint1 = null;
joint2 = null;
ratio = 1;
}
}
}//package Box2D.Dynamics.Joints
Section 62
//b2Jacobian (Box2D.Dynamics.Joints.b2Jacobian)
package Box2D.Dynamics.Joints {
import Box2D.Common.Math.*;
public class b2Jacobian {
public var linear1:b2Vec2;
public var linear2:b2Vec2;
public var angular2:Number;
public var angular1:Number;
public function b2Jacobian(){
linear1 = new b2Vec2();
linear2 = new b2Vec2();
super();
}
public function Set(_arg1:b2Vec2, _arg2:Number, _arg3:b2Vec2, _arg4:Number):void{
linear1.SetV(_arg1);
angular1 = _arg2;
linear2.SetV(_arg3);
angular2 = _arg4;
}
public function SetZero():void{
linear1.SetZero();
angular1 = 0;
linear2.SetZero();
angular2 = 0;
}
public function Compute(_arg1:b2Vec2, _arg2:Number, _arg3:b2Vec2, _arg4:Number):Number{
return ((((((linear1.x * _arg1.x) + (linear1.y * _arg1.y)) + (angular1 * _arg2)) + ((linear2.x * _arg3.x) + (linear2.y * _arg3.y))) + (angular2 * _arg4)));
}
}
}//package Box2D.Dynamics.Joints
Section 63
//b2Joint (Box2D.Dynamics.Joints.b2Joint)
package Box2D.Dynamics.Joints {
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
import Box2D.Common.*;
public class b2Joint {
b2internal var m_islandFlag:Boolean;
b2internal var m_collideConnected:Boolean;
b2internal var m_prev:b2Joint;
b2internal var m_type:int;
b2internal var m_next:b2Joint;
b2internal var m_node1:b2JointEdge;
b2internal var m_node2:b2JointEdge;
b2internal var m_localCenter1:b2Vec2;
b2internal var m_localCenter2:b2Vec2;
b2internal var m_invMass1:Number;
b2internal var m_invI2:Number;
b2internal var m_invMass2:Number;
private var m_userData;
b2internal var m_body1:b2Body;
b2internal var m_body2:b2Body;
b2internal var m_invI1:Number;
b2internal static const e_prismaticJoint:int = 2;
b2internal static const e_equalLimits:int = 3;
b2internal static const e_lineJoint:int = 7;
b2internal static const e_gearJoint:int = 6;
b2internal static const e_atUpperLimit:int = 2;
b2internal static const e_atLowerLimit:int = 1;
b2internal static const e_revoluteJoint:int = 1;
b2internal static const e_inactiveLimit:int = 0;
b2internal static const e_pulleyJoint:int = 4;
b2internal static const e_unknownJoint:int = 0;
b2internal static const e_distanceJoint:int = 3;
b2internal static const e_mouseJoint:int = 5;
public function b2Joint(_arg1:b2JointDef){
m_node1 = new b2JointEdge();
m_node2 = new b2JointEdge();
m_localCenter1 = new b2Vec2();
m_localCenter2 = new b2Vec2();
super();
m_type = _arg1.type;
m_prev = null;
m_next = null;
m_body1 = _arg1.body1;
m_body2 = _arg1.body2;
m_collideConnected = _arg1.collideConnected;
m_islandFlag = false;
m_userData = _arg1.userData;
}
b2internal function ComputeXForm(_arg1:b2XForm, _arg2:b2Vec2, _arg3:b2Vec2, _arg4:Number):void{
_arg1.R.Set(_arg4);
_arg1.position.SetV(b2Math.SubtractVV(_arg2, b2Math.b2MulMV(_arg1.R, _arg3)));
}
public function GetAnchor1():b2Vec2{
return (null);
}
public function GetAnchor2():b2Vec2{
return (null);
}
b2internal function InitVelocityConstraints(_arg1:b2TimeStep):void{
}
public function GetType():int{
return (m_type);
}
public function GetBody2():b2Body{
return (m_body2);
}
public function GetNext():b2Joint{
return (m_next);
}
public function GetReactionTorque(_arg1:Number):Number{
return (0);
}
public function GetUserData(){
return (m_userData);
}
public function GetReactionForce(_arg1:Number):b2Vec2{
return (null);
}
b2internal function SolvePositionConstraints(_arg1:Number):Boolean{
return (false);
}
public function SetUserData(_arg1):void{
m_userData = _arg1;
}
public function GetBody1():b2Body{
return (m_body1);
}
b2internal function SolveVelocityConstraints(_arg1:b2TimeStep):void{
}
b2internal static function Destroy(_arg1:b2Joint, _arg2):void{
}
b2internal static function Create(_arg1:b2JointDef, _arg2):b2Joint{
var _local3:b2Joint;
_local3 = null;
switch (_arg1.type){
case e_distanceJoint:
_local3 = new b2DistanceJoint((_arg1 as b2DistanceJointDef));
break;
case e_mouseJoint:
_local3 = new b2MouseJoint((_arg1 as b2MouseJointDef));
break;
case e_prismaticJoint:
_local3 = new b2PrismaticJoint((_arg1 as b2PrismaticJointDef));
break;
case e_revoluteJoint:
_local3 = new b2RevoluteJoint((_arg1 as b2RevoluteJointDef));
break;
case e_pulleyJoint:
_local3 = new b2PulleyJoint((_arg1 as b2PulleyJointDef));
break;
case e_gearJoint:
_local3 = new b2GearJoint((_arg1 as b2GearJointDef));
break;
case e_lineJoint:
_local3 = new b2LineJoint((_arg1 as b2LineJointDef));
break;
default:
break;
};
return (_local3);
}
}
}//package Box2D.Dynamics.Joints
Section 64
//b2JointDef (Box2D.Dynamics.Joints.b2JointDef)
package Box2D.Dynamics.Joints {
import Box2D.Dynamics.*;
public class b2JointDef {
public var collideConnected:Boolean;
public var body1:b2Body;
public var body2:b2Body;
public var userData;
public var type:int;
public function b2JointDef(){
type = b2Joint.e_unknownJoint;
userData = null;
body1 = null;
body2 = null;
collideConnected = false;
}
}
}//package Box2D.Dynamics.Joints
Section 65
//b2JointEdge (Box2D.Dynamics.Joints.b2JointEdge)
package Box2D.Dynamics.Joints {
import Box2D.Dynamics.*;
public class b2JointEdge {
public var joint:b2Joint;
public var other:b2Body;
public var next:b2JointEdge;
public var prev:b2JointEdge;
}
}//package Box2D.Dynamics.Joints
Section 66
//b2LineJoint (Box2D.Dynamics.Joints.b2LineJoint)
package Box2D.Dynamics.Joints {
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
import Box2D.Common.*;
public class b2LineJoint extends b2Joint {
private var m_a1:Number;
private var m_a2:Number;
private var m_enableLimit:Boolean;
private var m_impulse:b2Vec2;
private var m_localYAxis1:b2Vec2;
private var m_s2:Number;
private var m_s1:Number;
private var m_axis:b2Vec2;
private var m_motorImpulse:Number;
private var m_upperTranslation:Number;
private var m_lowerTranslation:Number;
b2internal var m_localXAxis1:b2Vec2;
private var m_perp:b2Vec2;
private var m_maxMotorForce:Number;
private var m_motorMass:Number;
b2internal var m_localAnchor1:b2Vec2;
b2internal var m_localAnchor2:b2Vec2;
private var m_limitState:int;
private var m_enableMotor:Boolean;
private var m_motorSpeed:Number;
private var m_K:b2Mat22;
public function b2LineJoint(_arg1:b2LineJointDef){
var _local2:b2Mat22;
var _local3:Number;
var _local4:Number;
m_localAnchor1 = new b2Vec2();
m_localAnchor2 = new b2Vec2();
m_localXAxis1 = new b2Vec2();
m_localYAxis1 = new b2Vec2();
m_axis = new b2Vec2();
m_perp = new b2Vec2();
m_K = new b2Mat22();
m_impulse = new b2Vec2();
super(_arg1);
m_localAnchor1.SetV(_arg1.localAnchor1);
m_localAnchor2.SetV(_arg1.localAnchor2);
m_localXAxis1.SetV(_arg1.localAxis1);
m_localYAxis1.x = -(m_localXAxis1.y);
m_localYAxis1.y = m_localXAxis1.x;
m_impulse.SetZero();
m_motorMass = 0;
m_motorImpulse = 0;
m_lowerTranslation = _arg1.lowerTranslation;
m_upperTranslation = _arg1.upperTranslation;
m_maxMotorForce = _arg1.maxMotorForce;
m_motorSpeed = _arg1.motorSpeed;
m_enableLimit = _arg1.enableLimit;
m_enableMotor = _arg1.enableMotor;
m_limitState = e_inactiveLimit;
m_axis.SetZero();
m_perp.SetZero();
}
override public function GetAnchor1():b2Vec2{
return (m_body1.GetWorldPoint(m_localAnchor1));
}
override public function GetAnchor2():b2Vec2{
return (m_body2.GetWorldPoint(m_localAnchor2));
}
public function SetLimits(_arg1:Number, _arg2:Number):void{
m_body1.WakeUp();
m_body2.WakeUp();
m_lowerTranslation = _arg1;
m_upperTranslation = _arg2;
}
public function GetLowerLimit():Number{
return (m_lowerTranslation);
}
public function GetUpperLimit():Number{
return (m_upperTranslation);
}
public function GetJointTranslation():Number{
var _local1:b2Body;
var _local2:b2Body;
var _local3:b2Mat22;
var _local4:b2Vec2;
var _local5:b2Vec2;
var _local6:Number;
var _local7:Number;
var _local8:b2Vec2;
var _local9:Number;
_local1 = m_body1;
_local2 = m_body2;
_local4 = _local1.GetWorldPoint(m_localAnchor1);
_local5 = _local2.GetWorldPoint(m_localAnchor2);
_local6 = (_local5.x - _local4.x);
_local7 = (_local5.y - _local4.y);
_local8 = _local1.GetWorldVector(m_localXAxis1);
_local9 = ((_local8.x * _local6) + (_local8.y * _local7));
return (_local9);
}
public function GetMotorForce():Number{
return (m_motorImpulse);
}
override public function GetReactionTorque(_arg1:Number):Number{
return ((_arg1 * m_impulse.y));
}
public function IsLimitEnabled():Boolean{
return (m_enableLimit);
}
public function IsMotorEnabled():Boolean{
return (m_enableMotor);
}
override b2internal function SolveVelocityConstraints(_arg1:b2TimeStep):void{
var _local2:b2Body;
var _local3:b2Body;
var _local4:b2Vec2;
var _local5:Number;
var _local6:b2Vec2;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:b2Vec2;
var _local19:b2Vec2;
var _local20:Number;
var _local21:Number;
var _local22:Number;
_local2 = m_body1;
_local3 = m_body2;
_local4 = _local2.m_linearVelocity;
_local5 = _local2.m_angularVelocity;
_local6 = _local3.m_linearVelocity;
_local7 = _local3.m_angularVelocity;
if (((m_enableMotor) && (!((m_limitState == e_equalLimits))))){
_local13 = ((((m_axis.x * (_local6.x - _local4.x)) + (m_axis.y * (_local6.y - _local4.y))) + (m_a2 * _local7)) - (m_a1 * _local5));
_local14 = (m_motorMass * (m_motorSpeed - _local13));
_local15 = m_motorImpulse;
_local16 = (_arg1.dt * m_maxMotorForce);
m_motorImpulse = b2Math.b2Clamp((m_motorImpulse + _local14), -(_local16), _local16);
_local14 = (m_motorImpulse - _local15);
_local8 = (_local14 * m_axis.x);
_local9 = (_local14 * m_axis.y);
_local10 = (_local14 * m_a1);
_local11 = (_local14 * m_a2);
_local4.x = (_local4.x - (m_invMass1 * _local8));
_local4.y = (_local4.y - (m_invMass1 * _local9));
_local5 = (_local5 - (m_invI1 * _local10));
_local6.x = (_local6.x + (m_invMass2 * _local8));
_local6.y = (_local6.y + (m_invMass2 * _local9));
_local7 = (_local7 + (m_invI2 * _local11));
};
_local12 = ((((m_perp.x * (_local6.x - _local4.x)) + (m_perp.y * (_local6.y - _local4.y))) + (m_s2 * _local7)) - (m_s1 * _local5));
if (((m_enableLimit) && (!((m_limitState == e_inactiveLimit))))){
_local17 = ((((m_axis.x * (_local6.x - _local4.x)) + (m_axis.y * (_local6.y - _local4.y))) + (m_a2 * _local7)) - (m_a1 * _local5));
_local18 = m_impulse.Copy();
_local19 = m_K.Solve(new b2Vec2(), -(_local12), -(_local17));
m_impulse.Add(_local19);
if (m_limitState == e_atLowerLimit){
m_impulse.y = b2Math.b2Max(m_impulse.y, 0);
} else {
if (m_limitState == e_atUpperLimit){
m_impulse.y = b2Math.b2Min(m_impulse.y, 0);
};
};
_local20 = (-(_local12) - ((m_impulse.y - _local18.y) * m_K.col2.x));
_local21 = ((_local20 / m_K.col1.x) + _local18.x);
m_impulse.x = _local21;
_local19.x = (m_impulse.x - _local18.x);
_local19.y = (m_impulse.y - _local18.y);
_local8 = ((_local19.x * m_perp.x) + (_local19.y * m_axis.x));
_local9 = ((_local19.x * m_perp.y) + (_local19.y * m_axis.y));
_local10 = ((_local19.x * m_s1) + (_local19.y * m_a1));
_local11 = ((_local19.x * m_s2) + (_local19.y * m_a2));
_local4.x = (_local4.x - (m_invMass1 * _local8));
_local4.y = (_local4.y - (m_invMass1 * _local9));
_local5 = (_local5 - (m_invI1 * _local10));
_local6.x = (_local6.x + (m_invMass2 * _local8));
_local6.y = (_local6.y + (m_invMass2 * _local9));
_local7 = (_local7 + (m_invI2 * _local11));
} else {
_local22 = (-(_local12) / m_K.col1.x);
m_impulse.x = (m_impulse.x + _local22);
_local8 = (_local22 * m_perp.x);
_local9 = (_local22 * m_perp.y);
_local10 = (_local22 * m_s1);
_local11 = (_local22 * m_s2);
_local4.x = (_local4.x - (m_invMass1 * _local8));
_local4.y = (_local4.y - (m_invMass1 * _local9));
_local5 = (_local5 - (m_invI1 * _local10));
_local6.x = (_local6.x + (m_invMass2 * _local8));
_local6.y = (_local6.y + (m_invMass2 * _local9));
_local7 = (_local7 + (m_invI2 * _local11));
};
_local2.m_linearVelocity.SetV(_local4);
_local2.m_angularVelocity = _local5;
_local3.m_linearVelocity.SetV(_local6);
_local3.m_angularVelocity = _local7;
}
public function EnableMotor(_arg1:Boolean):void{
m_body1.WakeUp();
m_body2.WakeUp();
m_enableMotor = _arg1;
}
public function GetMotorSpeed():Number{
return (m_motorSpeed);
}
override public function GetReactionForce(_arg1:Number):b2Vec2{
return (new b2Vec2((_arg1 * ((m_impulse.x * m_perp.x) + ((m_motorImpulse + m_impulse.y) * m_axis.x))), (_arg1 * ((m_impulse.x * m_perp.y) + ((m_motorImpulse + m_impulse.y) * m_axis.y)))));
}
override b2internal function SolvePositionConstraints(_arg1:Number):Boolean{
var _local2:Number;
var _local3:Number;
var _local4:b2Body;
var _local5:b2Body;
var _local6:b2Vec2;
var _local7:Number;
var _local8:b2Vec2;
var _local9:Number;
var _local10:b2Mat22;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Boolean;
var _local19:Number;
var _local20:b2Mat22;
var _local21:b2Mat22;
var _local22:Number;
var _local23:Number;
var _local24:Number;
var _local25:Number;
var _local26:Number;
var _local27:Number;
var _local28:b2Vec2;
var _local29:Number;
var _local30:Number;
var _local31:Number;
var _local32:Number;
var _local33:Number;
var _local34:Number;
var _local35:Number;
var _local36:Number;
_local4 = m_body1;
_local5 = m_body2;
_local6 = _local4.m_sweep.c;
_local7 = _local4.m_sweep.a;
_local8 = _local5.m_sweep.c;
_local9 = _local5.m_sweep.a;
_local16 = 0;
_local17 = 0;
_local18 = false;
_local19 = 0;
_local20 = new b2Mat22(_local7);
_local21 = new b2Mat22(_local9);
_local10 = _local20;
_local22 = (m_localAnchor1.x - m_localCenter1.x);
_local23 = (m_localAnchor1.y - m_localCenter1.y);
_local11 = ((_local10.col1.x * _local22) + (_local10.col2.x * _local23));
_local23 = ((_local10.col1.y * _local22) + (_local10.col2.y * _local23));
_local22 = _local11;
_local10 = _local21;
_local24 = (m_localAnchor2.x - m_localCenter2.x);
_local25 = (m_localAnchor2.y - m_localCenter2.y);
_local11 = ((_local10.col1.x * _local24) + (_local10.col2.x * _local25));
_local25 = ((_local10.col1.y * _local24) + (_local10.col2.y * _local25));
_local24 = _local11;
_local26 = (((_local8.x + _local24) - _local6.x) - _local22);
_local27 = (((_local8.y + _local25) - _local6.y) - _local23);
if (m_enableLimit){
m_axis = b2Math.b2MulMV(_local20, m_localXAxis1);
m_a1 = (((_local26 + _local22) * m_axis.y) - ((_local27 + _local23) * m_axis.x));
m_a2 = ((_local24 * m_axis.y) - (_local25 * m_axis.x));
_local34 = ((m_axis.x * _local26) + (m_axis.y * _local27));
if (b2Math.b2Abs((m_upperTranslation - m_lowerTranslation)) < (2 * b2Settings.b2_linearSlop)){
_local19 = b2Math.b2Clamp(_local34, -(b2Settings.b2_maxLinearCorrection), b2Settings.b2_maxLinearCorrection);
_local16 = b2Math.b2Abs(_local34);
_local18 = true;
} else {
if (_local34 <= m_lowerTranslation){
_local19 = b2Math.b2Clamp(((_local34 - m_lowerTranslation) + b2Settings.b2_linearSlop), -(b2Settings.b2_maxLinearCorrection), 0);
_local16 = (m_lowerTranslation - _local34);
_local18 = true;
} else {
if (_local34 >= m_upperTranslation){
_local19 = b2Math.b2Clamp(((_local34 - m_upperTranslation) + b2Settings.b2_linearSlop), 0, b2Settings.b2_maxLinearCorrection);
_local16 = (_local34 - m_upperTranslation);
_local18 = true;
};
};
};
};
m_perp = b2Math.b2MulMV(_local20, m_localYAxis1);
m_s1 = (((_local26 + _local22) * m_perp.y) - ((_local27 + _local23) * m_perp.x));
m_s2 = ((_local24 * m_perp.y) - (_local25 * m_perp.x));
_local28 = new b2Vec2();
_local29 = ((m_perp.x * _local26) + (m_perp.y * _local27));
_local16 = b2Math.b2Max(_local16, b2Math.b2Abs(_local29));
_local17 = 0;
if (_local18){
_local12 = m_invMass1;
_local13 = m_invMass2;
_local14 = m_invI1;
_local15 = m_invI2;
m_K.col1.x = (((_local12 + _local13) + ((_local14 * m_s1) * m_s1)) + ((_local15 * m_s2) * m_s2));
m_K.col1.y = (((_local14 * m_s1) * m_a1) + ((_local15 * m_s2) * m_a2));
m_K.col2.x = m_K.col1.y;
m_K.col2.y = (((_local12 + _local13) + ((_local14 * m_a1) * m_a1)) + ((_local15 * m_a2) * m_a2));
m_K.Solve(_local28, -(_local29), -(_local19));
} else {
_local12 = m_invMass1;
_local13 = m_invMass2;
_local14 = m_invI1;
_local15 = m_invI2;
_local35 = (((_local12 + _local13) + ((_local14 * m_s1) * m_s1)) + ((_local15 * m_s2) * m_s2));
_local36 = (-(_local29) / _local35);
_local28.x = _local36;
_local28.y = 0;
};
_local30 = ((_local28.x * m_perp.x) + (_local28.y * m_axis.x));
_local31 = ((_local28.x * m_perp.y) + (_local28.y * m_axis.y));
_local32 = ((_local28.x * m_s1) + (_local28.y * m_a1));
_local33 = ((_local28.x * m_s2) + (_local28.y * m_a2));
_local6.x = (_local6.x - (m_invMass1 * _local30));
_local6.y = (_local6.y - (m_invMass1 * _local31));
_local7 = (_local7 - (m_invI1 * _local32));
_local8.x = (_local8.x + (m_invMass2 * _local30));
_local8.y = (_local8.y + (m_invMass2 * _local31));
_local9 = (_local9 + (m_invI2 * _local33));
_local4.m_sweep.a = _local7;
_local5.m_sweep.a = _local9;
_local4.SynchronizeTransform();
_local5.SynchronizeTransform();
return ((((_local16 <= b2Settings.b2_linearSlop)) && ((_local17 <= b2Settings.b2_angularSlop))));
}
public function GetJointSpeed():Number{
var _local1:b2Body;
var _local2:b2Body;
var _local3:b2Mat22;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:b2Vec2;
var _local16:b2Vec2;
var _local17:b2Vec2;
var _local18:Number;
var _local19:Number;
var _local20:Number;
_local1 = m_body1;
_local2 = m_body2;
_local3 = _local1.m_xf.R;
_local4 = (m_localAnchor1.x - _local1.m_sweep.localCenter.x);
_local5 = (m_localAnchor1.y - _local1.m_sweep.localCenter.y);
_local6 = ((_local3.col1.x * _local4) + (_local3.col2.x * _local5));
_local5 = ((_local3.col1.y * _local4) + (_local3.col2.y * _local5));
_local4 = _local6;
_local3 = _local2.m_xf.R;
_local7 = (m_localAnchor2.x - _local2.m_sweep.localCenter.x);
_local8 = (m_localAnchor2.y - _local2.m_sweep.localCenter.y);
_local6 = ((_local3.col1.x * _local7) + (_local3.col2.x * _local8));
_local8 = ((_local3.col1.y * _local7) + (_local3.col2.y * _local8));
_local7 = _local6;
_local9 = (_local1.m_sweep.c.x + _local4);
_local10 = (_local1.m_sweep.c.y + _local5);
_local11 = (_local2.m_sweep.c.x + _local7);
_local12 = (_local2.m_sweep.c.y + _local8);
_local13 = (_local11 - _local9);
_local14 = (_local12 - _local10);
_local15 = _local1.GetWorldVector(m_localXAxis1);
_local16 = _local1.m_linearVelocity;
_local17 = _local2.m_linearVelocity;
_local18 = _local1.m_angularVelocity;
_local19 = _local2.m_angularVelocity;
_local20 = (((_local13 * (-(_local18) * _local15.y)) + (_local14 * (_local18 * _local15.x))) + ((_local15.x * (((_local17.x + (-(_local19) * _local8)) - _local16.x) - (-(_local18) * _local5))) + (_local15.y * (((_local17.y + (_local19 * _local7)) - _local16.y) - (_local18 * _local4)))));
return (_local20);
}
public function SetMotorSpeed(_arg1:Number):void{
m_body1.WakeUp();
m_body2.WakeUp();
m_motorSpeed = _arg1;
}
override b2internal function InitVelocityConstraints(_arg1:b2TimeStep):void{
var _local2:b2Body;
var _local3:b2Body;
var _local4:b2Mat22;
var _local5:Number;
var _local6:b2XForm;
var _local7:b2XForm;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
_local2 = m_body1;
_local3 = m_body2;
m_localCenter1.SetV(_local2.GetLocalCenter());
m_localCenter2.SetV(_local3.GetLocalCenter());
_local6 = _local2.GetXForm();
_local7 = _local3.GetXForm();
_local4 = _local2.m_xf.R;
_local8 = (m_localAnchor1.x - _local2.m_sweep.localCenter.x);
_local9 = (m_localAnchor1.y - _local2.m_sweep.localCenter.y);
_local5 = ((_local4.col1.x * _local8) + (_local4.col2.x * _local9));
_local9 = ((_local4.col1.y * _local8) + (_local4.col2.y * _local9));
_local8 = _local5;
_local4 = _local3.m_xf.R;
_local10 = (m_localAnchor2.x - _local3.m_sweep.localCenter.x);
_local11 = (m_localAnchor2.y - _local3.m_sweep.localCenter.y);
_local5 = ((_local4.col1.x * _local10) + (_local4.col2.x * _local11));
_local11 = ((_local4.col1.y * _local10) + (_local4.col2.y * _local11));
_local10 = _local5;
_local12 = (((_local3.m_sweep.c.x + _local10) - _local2.m_sweep.c.x) - _local8);
_local13 = (((_local3.m_sweep.c.y + _local11) - _local2.m_sweep.c.y) - _local9);
m_invMass1 = _local2.m_invMass;
m_invMass2 = _local3.m_invMass;
m_invI1 = _local2.m_invI;
m_invI2 = _local3.m_invI;
m_axis.SetV(b2Math.b2MulMV(_local6.R, m_localXAxis1));
m_a1 = (((_local12 + _local8) * m_axis.y) - ((_local13 + _local9) * m_axis.x));
m_a2 = ((_local10 * m_axis.y) - (_local11 * m_axis.x));
m_motorMass = (((m_invMass1 + m_invMass2) + ((m_invI1 * m_a1) * m_a1)) + ((m_invI2 * m_a2) * m_a2));
m_motorMass = (1 / m_motorMass);
m_perp.SetV(b2Math.b2MulMV(_local6.R, m_localYAxis1));
m_s1 = (((_local12 + _local8) * m_perp.y) - ((_local13 + _local9) * m_perp.x));
m_s2 = ((_local10 * m_perp.y) - (_local11 * m_perp.x));
_local14 = m_invMass1;
_local15 = m_invMass2;
_local16 = m_invI1;
_local17 = m_invI2;
m_K.col1.x = (((_local14 + _local15) + ((_local16 * m_s1) * m_s1)) + ((_local17 * m_s2) * m_s2));
m_K.col1.y = (((_local16 * m_s1) * m_a1) + ((_local17 * m_s2) * m_a2));
m_K.col2.x = m_K.col1.y;
m_K.col2.y = (((_local14 + _local15) + ((_local16 * m_a1) * m_a1)) + ((_local17 * m_a2) * m_a2));
if (m_enableLimit){
_local18 = ((m_axis.x * _local12) + (m_axis.y * _local13));
if (b2Math.b2Abs((m_upperTranslation - m_lowerTranslation)) < (2 * b2Settings.b2_linearSlop)){
m_limitState = e_equalLimits;
} else {
if (_local18 <= m_lowerTranslation){
if (m_limitState != e_atLowerLimit){
m_limitState = e_atLowerLimit;
m_impulse.y = 0;
};
} else {
if (_local18 >= m_upperTranslation){
if (m_limitState != e_atUpperLimit){
m_limitState = e_atUpperLimit;
m_impulse.y = 0;
};
} else {
m_limitState = e_inactiveLimit;
m_impulse.y = 0;
};
};
};
} else {
m_limitState = e_inactiveLimit;
};
if (m_enableMotor == false){
m_motorImpulse = 0;
};
if (_arg1.warmStarting){
m_impulse.x = (m_impulse.x * _arg1.dtRatio);
m_impulse.y = (m_impulse.y * _arg1.dtRatio);
m_motorImpulse = (m_motorImpulse * _arg1.dtRatio);
_local19 = ((m_impulse.x * m_perp.x) + ((m_motorImpulse + m_impulse.y) * m_axis.x));
_local20 = ((m_impulse.x * m_perp.y) + ((m_motorImpulse + m_impulse.y) * m_axis.y));
_local21 = ((m_impulse.x * m_s1) + ((m_motorImpulse + m_impulse.y) * m_a1));
_local22 = ((m_impulse.x * m_s2) + ((m_motorImpulse + m_impulse.y) * m_a2));
_local2.m_linearVelocity.x = (_local2.m_linearVelocity.x - (m_invMass1 * _local19));
_local2.m_linearVelocity.y = (_local2.m_linearVelocity.y - (m_invMass1 * _local20));
_local2.m_angularVelocity = (_local2.m_angularVelocity - (m_invI1 * _local21));
_local3.m_linearVelocity.x = (_local3.m_linearVelocity.x + (m_invMass2 * _local19));
_local3.m_linearVelocity.y = (_local3.m_linearVelocity.y + (m_invMass2 * _local20));
_local3.m_angularVelocity = (_local3.m_angularVelocity + (m_invI2 * _local22));
} else {
m_impulse.SetZero();
m_motorImpulse = 0;
};
}
public function EnableLimit(_arg1:Boolean):void{
m_body1.WakeUp();
m_body2.WakeUp();
m_enableLimit = _arg1;
}
public function SetMaxMotorForce(_arg1:Number):void{
m_body1.WakeUp();
m_body2.WakeUp();
m_maxMotorForce = _arg1;
}
}
}//package Box2D.Dynamics.Joints
Section 67
//b2LineJointDef (Box2D.Dynamics.Joints.b2LineJointDef)
package Box2D.Dynamics.Joints {
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
public class b2LineJointDef extends b2JointDef {
public var localAxis1:b2Vec2;
public var maxMotorForce:Number;
public var motorSpeed:Number;
public var upperTranslation:Number;
public var localAnchor1:b2Vec2;
public var localAnchor2:b2Vec2;
public var enableLimit:Boolean;
public var enableMotor:Boolean;
public var lowerTranslation:Number;
public function b2LineJointDef(){
localAnchor1 = new b2Vec2();
localAnchor2 = new b2Vec2();
localAxis1 = new b2Vec2();
super();
type = b2Joint.e_lineJoint;
localAxis1.Set(1, 0);
enableLimit = false;
lowerTranslation = 0;
upperTranslation = 0;
enableMotor = false;
maxMotorForce = 0;
motorSpeed = 0;
}
public function Initialize(_arg1:b2Body, _arg2:b2Body, _arg3:b2Vec2, _arg4:b2Vec2):void{
body1 = _arg1;
body2 = _arg2;
localAnchor1 = body1.GetLocalPoint(_arg3);
localAnchor2 = body2.GetLocalPoint(_arg3);
localAxis1 = body1.GetLocalVector(_arg4);
}
}
}//package Box2D.Dynamics.Joints
Section 68
//b2MouseJoint (Box2D.Dynamics.Joints.b2MouseJoint)
package Box2D.Dynamics.Joints {
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
import Box2D.Common.*;
public class b2MouseJoint extends b2Joint {
private var m_beta:Number;
private var m_mass:b2Mat22;
private var m_target:b2Vec2;
private var m_impulse:b2Vec2;
private var m_localAnchor:b2Vec2;
private var m_dampingRatio:Number;
private var K2:b2Mat22;
private var K:b2Mat22;
private var K1:b2Mat22;
private var m_frequencyHz:Number;
private var m_gamma:Number;
private var m_C:b2Vec2;
private var m_maxForce:Number;
public function b2MouseJoint(_arg1:b2MouseJointDef){
var _local2:Number;
var _local3:Number;
var _local4:b2Mat22;
K = new b2Mat22();
K1 = new b2Mat22();
K2 = new b2Mat22();
m_localAnchor = new b2Vec2();
m_target = new b2Vec2();
m_impulse = new b2Vec2();
m_mass = new b2Mat22();
m_C = new b2Vec2();
super(_arg1);
m_target.SetV(_arg1.target);
_local2 = (m_target.x - m_body2.m_xf.position.x);
_local3 = (m_target.y - m_body2.m_xf.position.y);
_local4 = m_body2.m_xf.R;
m_localAnchor.x = ((_local2 * _local4.col1.x) + (_local3 * _local4.col1.y));
m_localAnchor.y = ((_local2 * _local4.col2.x) + (_local3 * _local4.col2.y));
m_maxForce = _arg1.maxForce;
m_impulse.SetZero();
m_frequencyHz = _arg1.frequencyHz;
m_dampingRatio = _arg1.dampingRatio;
m_beta = 0;
m_gamma = 0;
}
override public function GetAnchor1():b2Vec2{
return (m_target);
}
override public function GetAnchor2():b2Vec2{
return (m_body2.GetWorldPoint(m_localAnchor));
}
override public function GetReactionForce(_arg1:Number):b2Vec2{
return (new b2Vec2((_arg1 * m_impulse.x), (_arg1 * m_impulse.y)));
}
override b2internal function SolvePositionConstraints(_arg1:Number):Boolean{
return (true);
}
override b2internal function InitVelocityConstraints(_arg1:b2TimeStep):void{
var _local2:b2Body;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:b2Mat22;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
_local2 = m_body2;
_local3 = _local2.GetMass();
_local4 = ((2 * Math.PI) * m_frequencyHz);
_local5 = (((2 * _local3) * m_dampingRatio) * _local4);
_local6 = ((_local3 * _local4) * _local4);
m_gamma = (1 / (_arg1.dt * (_local5 + (_arg1.dt * _local6))));
m_beta = ((_arg1.dt * _local6) * m_gamma);
_local7 = _local2.m_xf.R;
_local8 = (m_localAnchor.x - _local2.m_sweep.localCenter.x);
_local9 = (m_localAnchor.y - _local2.m_sweep.localCenter.y);
_local10 = ((_local7.col1.x * _local8) + (_local7.col2.x * _local9));
_local9 = ((_local7.col1.y * _local8) + (_local7.col2.y * _local9));
_local8 = _local10;
_local11 = _local2.m_invMass;
_local12 = _local2.m_invI;
K1.col1.x = _local11;
K1.col2.x = 0;
K1.col1.y = 0;
K1.col2.y = _local11;
K2.col1.x = ((_local12 * _local9) * _local9);
K2.col2.x = ((-(_local12) * _local8) * _local9);
K2.col1.y = ((-(_local12) * _local8) * _local9);
K2.col2.y = ((_local12 * _local8) * _local8);
K.SetM(K1);
K.AddM(K2);
K.col1.x = (K.col1.x + m_gamma);
K.col2.y = (K.col2.y + m_gamma);
K.GetInverse(m_mass);
m_C.x = ((_local2.m_sweep.c.x + _local8) - m_target.x);
m_C.y = ((_local2.m_sweep.c.y + _local9) - m_target.y);
_local2.m_angularVelocity = (_local2.m_angularVelocity * 0.98);
m_impulse.x = (m_impulse.x * _arg1.dtRatio);
m_impulse.y = (m_impulse.y * _arg1.dtRatio);
_local2.m_linearVelocity.x = (_local2.m_linearVelocity.x + (_local11 * m_impulse.x));
_local2.m_linearVelocity.y = (_local2.m_linearVelocity.y + (_local11 * m_impulse.y));
_local2.m_angularVelocity = (_local2.m_angularVelocity + (_local12 * ((_local8 * m_impulse.y) - (_local9 * m_impulse.x))));
}
override public function GetReactionTorque(_arg1:Number):Number{
return (0);
}
public function SetTarget(_arg1:b2Vec2):void{
if (m_body2.IsSleeping()){
m_body2.WakeUp();
};
m_target = _arg1;
}
override b2internal function SolveVelocityConstraints(_arg1:b2TimeStep):void{
var _local2:b2Body;
var _local3:b2Mat22;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
_local2 = m_body2;
_local3 = _local2.m_xf.R;
_local6 = (m_localAnchor.x - _local2.m_sweep.localCenter.x);
_local7 = (m_localAnchor.y - _local2.m_sweep.localCenter.y);
_local4 = ((_local3.col1.x * _local6) + (_local3.col2.x * _local7));
_local7 = ((_local3.col1.y * _local6) + (_local3.col2.y * _local7));
_local6 = _local4;
_local8 = (_local2.m_linearVelocity.x + (-(_local2.m_angularVelocity) * _local7));
_local9 = (_local2.m_linearVelocity.y + (_local2.m_angularVelocity * _local6));
_local3 = m_mass;
_local4 = ((_local8 + (m_beta * m_C.x)) + (m_gamma * m_impulse.x));
_local5 = ((_local9 + (m_beta * m_C.y)) + (m_gamma * m_impulse.y));
_local10 = -(((_local3.col1.x * _local4) + (_local3.col2.x * _local5)));
_local11 = -(((_local3.col1.y * _local4) + (_local3.col2.y * _local5)));
_local12 = m_impulse.x;
_local13 = m_impulse.y;
m_impulse.x = (m_impulse.x + _local10);
m_impulse.y = (m_impulse.y + _local11);
_local14 = (_arg1.dt * m_maxForce);
if (m_impulse.LengthSquared() > (_local14 * _local14)){
m_impulse.Multiply((_local14 / m_impulse.Length()));
};
_local10 = (m_impulse.x - _local12);
_local11 = (m_impulse.y - _local13);
_local2.m_linearVelocity.x = (_local2.m_linearVelocity.x + (_local2.m_invMass * _local10));
_local2.m_linearVelocity.y = (_local2.m_linearVelocity.y + (_local2.m_invMass * _local11));
_local2.m_angularVelocity = (_local2.m_angularVelocity + (_local2.m_invI * ((_local6 * _local11) - (_local7 * _local10))));
}
}
}//package Box2D.Dynamics.Joints
Section 69
//b2MouseJointDef (Box2D.Dynamics.Joints.b2MouseJointDef)
package Box2D.Dynamics.Joints {
import Box2D.Common.Math.*;
public class b2MouseJointDef extends b2JointDef {
public var frequencyHz:Number;
public var dampingRatio:Number;
public var maxForce:Number;
public var target:b2Vec2;
public function b2MouseJointDef(){
target = new b2Vec2();
super();
type = b2Joint.e_mouseJoint;
maxForce = 0;
frequencyHz = 5;
dampingRatio = 0.7;
}
}
}//package Box2D.Dynamics.Joints
Section 70
//b2PrismaticJoint (Box2D.Dynamics.Joints.b2PrismaticJoint)
package Box2D.Dynamics.Joints {
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
import Box2D.Common.*;
public class b2PrismaticJoint extends b2Joint {
private var m_a1:Number;
private var m_a2:Number;
private var m_enableLimit:Boolean;
private var m_impulse:b2Vec3;
private var m_localYAxis1:b2Vec2;
private var m_s2:Number;
private var m_s1:Number;
private var m_axis:b2Vec2;
private var m_motorImpulse:Number;
private var m_upperTranslation:Number;
private var m_lowerTranslation:Number;
b2internal var m_localXAxis1:b2Vec2;
private var m_perp:b2Vec2;
private var m_refAngle:Number;
private var m_maxMotorForce:Number;
private var m_motorMass:Number;
b2internal var m_localAnchor1:b2Vec2;
b2internal var m_localAnchor2:b2Vec2;
private var m_limitState:int;
private var m_enableMotor:Boolean;
private var m_motorSpeed:Number;
private var m_K:b2Mat33;
public function b2PrismaticJoint(_arg1:b2PrismaticJointDef){
var _local2:b2Mat22;
var _local3:Number;
var _local4:Number;
m_localAnchor1 = new b2Vec2();
m_localAnchor2 = new b2Vec2();
m_localXAxis1 = new b2Vec2();
m_localYAxis1 = new b2Vec2();
m_axis = new b2Vec2();
m_perp = new b2Vec2();
m_K = new b2Mat33();
m_impulse = new b2Vec3();
super(_arg1);
m_localAnchor1.SetV(_arg1.localAnchor1);
m_localAnchor2.SetV(_arg1.localAnchor2);
m_localXAxis1.SetV(_arg1.localAxis1);
m_localYAxis1.x = -(m_localXAxis1.y);
m_localYAxis1.y = m_localXAxis1.x;
m_refAngle = _arg1.referenceAngle;
m_impulse.SetZero();
m_motorMass = 0;
m_motorImpulse = 0;
m_lowerTranslation = _arg1.lowerTranslation;
m_upperTranslation = _arg1.upperTranslation;
m_maxMotorForce = _arg1.maxMotorForce;
m_motorSpeed = _arg1.motorSpeed;
m_enableLimit = _arg1.enableLimit;
m_enableMotor = _arg1.enableMotor;
m_limitState = e_inactiveLimit;
m_axis.SetZero();
m_perp.SetZero();
}
override public function GetAnchor1():b2Vec2{
return (m_body1.GetWorldPoint(m_localAnchor1));
}
override public function GetAnchor2():b2Vec2{
return (m_body2.GetWorldPoint(m_localAnchor2));
}
public function SetLimits(_arg1:Number, _arg2:Number):void{
m_body1.WakeUp();
m_body2.WakeUp();
m_lowerTranslation = _arg1;
m_upperTranslation = _arg2;
}
public function GetLowerLimit():Number{
return (m_lowerTranslation);
}
public function GetUpperLimit():Number{
return (m_upperTranslation);
}
public function GetJointTranslation():Number{
var _local1:b2Body;
var _local2:b2Body;
var _local3:b2Mat22;
var _local4:b2Vec2;
var _local5:b2Vec2;
var _local6:Number;
var _local7:Number;
var _local8:b2Vec2;
var _local9:Number;
_local1 = m_body1;
_local2 = m_body2;
_local4 = _local1.GetWorldPoint(m_localAnchor1);
_local5 = _local2.GetWorldPoint(m_localAnchor2);
_local6 = (_local5.x - _local4.x);
_local7 = (_local5.y - _local4.y);
_local8 = _local1.GetWorldVector(m_localXAxis1);
_local9 = ((_local8.x * _local6) + (_local8.y * _local7));
return (_local9);
}
public function GetMotorForce():Number{
return (m_motorImpulse);
}
override public function GetReactionTorque(_arg1:Number):Number{
return ((_arg1 * m_impulse.y));
}
public function IsLimitEnabled():Boolean{
return (m_enableLimit);
}
public function IsMotorEnabled():Boolean{
return (m_enableMotor);
}
override b2internal function SolveVelocityConstraints(_arg1:b2TimeStep):void{
var _local2:b2Body;
var _local3:b2Body;
var _local4:b2Vec2;
var _local5:Number;
var _local6:b2Vec2;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:b2Vec3;
var _local20:b2Vec3;
var _local21:Number;
var _local22:Number;
var _local23:b2Vec2;
var _local24:b2Vec2;
_local2 = m_body1;
_local3 = m_body2;
_local4 = _local2.m_linearVelocity;
_local5 = _local2.m_angularVelocity;
_local6 = _local3.m_linearVelocity;
_local7 = _local3.m_angularVelocity;
if (((m_enableMotor) && (!((m_limitState == e_equalLimits))))){
_local14 = ((((m_axis.x * (_local6.x - _local4.x)) + (m_axis.y * (_local6.y - _local4.y))) + (m_a2 * _local7)) - (m_a1 * _local5));
_local15 = (m_motorMass * (m_motorSpeed - _local14));
_local16 = m_motorImpulse;
_local17 = (_arg1.dt * m_maxMotorForce);
m_motorImpulse = b2Math.b2Clamp((m_motorImpulse + _local15), -(_local17), _local17);
_local15 = (m_motorImpulse - _local16);
_local8 = (_local15 * m_axis.x);
_local9 = (_local15 * m_axis.y);
_local10 = (_local15 * m_a1);
_local11 = (_local15 * m_a2);
_local4.x = (_local4.x - (m_invMass1 * _local8));
_local4.y = (_local4.y - (m_invMass1 * _local9));
_local5 = (_local5 - (m_invI1 * _local10));
_local6.x = (_local6.x + (m_invMass2 * _local8));
_local6.y = (_local6.y + (m_invMass2 * _local9));
_local7 = (_local7 + (m_invI2 * _local11));
};
_local12 = ((((m_perp.x * (_local6.x - _local4.x)) + (m_perp.y * (_local6.y - _local4.y))) + (m_s2 * _local7)) - (m_s1 * _local5));
_local13 = (_local7 - _local5);
if (((m_enableLimit) && (!((m_limitState == e_inactiveLimit))))){
_local18 = ((((m_axis.x * (_local6.x - _local4.x)) + (m_axis.y * (_local6.y - _local4.y))) + (m_a2 * _local7)) - (m_a1 * _local5));
_local19 = m_impulse.Copy();
_local20 = m_K.Solve33(new b2Vec3(), -(_local12), -(_local13), -(_local18));
m_impulse.Add(_local20);
if (m_limitState == e_atLowerLimit){
m_impulse.z = b2Math.b2Max(m_impulse.z, 0);
} else {
if (m_limitState == e_atUpperLimit){
m_impulse.z = b2Math.b2Min(m_impulse.z, 0);
};
};
_local21 = (-(_local12) - ((m_impulse.z - _local19.z) * m_K.col3.x));
_local22 = (-(_local13) - ((m_impulse.z - _local19.z) * m_K.col3.y));
_local23 = m_K.Solve22(new b2Vec2(), _local21, _local22);
m_K.Solve22(new b2Vec2(), _local21, _local22).x = (_local23.x + _local19.x);
_local23.y = (_local23.y + _local19.y);
m_impulse.x = _local23.x;
m_impulse.y = _local23.y;
_local20.x = (m_impulse.x - _local19.x);
_local20.y = (m_impulse.y - _local19.y);
_local20.z = (m_impulse.z - _local19.z);
_local8 = ((_local20.x * m_perp.x) + (_local20.z * m_axis.x));
_local9 = ((_local20.x * m_perp.y) + (_local20.z * m_axis.y));
_local10 = (((_local20.x * m_s1) + _local20.y) + (_local20.z * m_a1));
_local11 = (((_local20.x * m_s2) + _local20.y) + (_local20.z * m_a2));
_local4.x = (_local4.x - (m_invMass1 * _local8));
_local4.y = (_local4.y - (m_invMass1 * _local9));
_local5 = (_local5 - (m_invI1 * _local10));
_local6.x = (_local6.x + (m_invMass2 * _local8));
_local6.y = (_local6.y + (m_invMass2 * _local9));
_local7 = (_local7 + (m_invI2 * _local11));
} else {
_local24 = m_K.Solve22(new b2Vec2(), -(_local12), -(_local13));
m_impulse.x = (m_impulse.x + _local24.x);
m_impulse.y = (m_impulse.y + _local24.y);
_local8 = (_local24.x * m_perp.x);
_local9 = (_local24.x * m_perp.y);
_local10 = ((_local24.x * m_s1) + _local24.y);
_local11 = ((_local24.x * m_s2) + _local24.y);
_local4.x = (_local4.x - (m_invMass1 * _local8));
_local4.y = (_local4.y - (m_invMass1 * _local9));
_local5 = (_local5 - (m_invI1 * _local10));
_local6.x = (_local6.x + (m_invMass2 * _local8));
_local6.y = (_local6.y + (m_invMass2 * _local9));
_local7 = (_local7 + (m_invI2 * _local11));
};
_local2.m_linearVelocity.SetV(_local4);
_local2.m_angularVelocity = _local5;
_local3.m_linearVelocity.SetV(_local6);
_local3.m_angularVelocity = _local7;
}
public function EnableMotor(_arg1:Boolean):void{
m_body1.WakeUp();
m_body2.WakeUp();
m_enableMotor = _arg1;
}
public function GetMotorSpeed():Number{
return (m_motorSpeed);
}
override public function GetReactionForce(_arg1:Number):b2Vec2{
return (new b2Vec2((_arg1 * ((m_impulse.x * m_perp.x) + ((m_motorImpulse + m_impulse.z) * m_axis.x))), (_arg1 * ((m_impulse.x * m_perp.y) + ((m_motorImpulse + m_impulse.z) * m_axis.y)))));
}
override b2internal function SolvePositionConstraints(_arg1:Number):Boolean{
var _local2:Number;
var _local3:Number;
var _local4:b2Body;
var _local5:b2Body;
var _local6:b2Vec2;
var _local7:Number;
var _local8:b2Vec2;
var _local9:Number;
var _local10:b2Mat22;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Boolean;
var _local19:Number;
var _local20:b2Mat22;
var _local21:b2Mat22;
var _local22:Number;
var _local23:Number;
var _local24:Number;
var _local25:Number;
var _local26:Number;
var _local27:Number;
var _local28:b2Vec3;
var _local29:Number;
var _local30:Number;
var _local31:Number;
var _local32:Number;
var _local33:Number;
var _local34:Number;
var _local35:Number;
var _local36:Number;
var _local37:Number;
var _local38:Number;
var _local39:b2Vec2;
_local4 = m_body1;
_local5 = m_body2;
_local6 = _local4.m_sweep.c;
_local7 = _local4.m_sweep.a;
_local8 = _local5.m_sweep.c;
_local9 = _local5.m_sweep.a;
_local16 = 0;
_local17 = 0;
_local18 = false;
_local19 = 0;
_local20 = new b2Mat22(_local7);
_local21 = new b2Mat22(_local9);
_local10 = _local20;
_local22 = (m_localAnchor1.x - m_localCenter1.x);
_local23 = (m_localAnchor1.y - m_localCenter1.y);
_local11 = ((_local10.col1.x * _local22) + (_local10.col2.x * _local23));
_local23 = ((_local10.col1.y * _local22) + (_local10.col2.y * _local23));
_local22 = _local11;
_local10 = _local21;
_local24 = (m_localAnchor2.x - m_localCenter2.x);
_local25 = (m_localAnchor2.y - m_localCenter2.y);
_local11 = ((_local10.col1.x * _local24) + (_local10.col2.x * _local25));
_local25 = ((_local10.col1.y * _local24) + (_local10.col2.y * _local25));
_local24 = _local11;
_local26 = (((_local8.x + _local24) - _local6.x) - _local22);
_local27 = (((_local8.y + _local25) - _local6.y) - _local23);
if (m_enableLimit){
m_axis = b2Math.b2MulMV(_local20, m_localXAxis1);
m_a1 = (((_local26 + _local22) * m_axis.y) - ((_local27 + _local23) * m_axis.x));
m_a2 = ((_local24 * m_axis.y) - (_local25 * m_axis.x));
_local35 = ((m_axis.x * _local26) + (m_axis.y * _local27));
if (b2Math.b2Abs((m_upperTranslation - m_lowerTranslation)) < (2 * b2Settings.b2_linearSlop)){
_local19 = b2Math.b2Clamp(_local35, -(b2Settings.b2_maxLinearCorrection), b2Settings.b2_maxLinearCorrection);
_local16 = b2Math.b2Abs(_local35);
_local18 = true;
} else {
if (_local35 <= m_lowerTranslation){
_local19 = b2Math.b2Clamp(((_local35 - m_lowerTranslation) + b2Settings.b2_linearSlop), -(b2Settings.b2_maxLinearCorrection), 0);
_local16 = (m_lowerTranslation - _local35);
_local18 = true;
} else {
if (_local35 >= m_upperTranslation){
_local19 = b2Math.b2Clamp(((_local35 - m_upperTranslation) + b2Settings.b2_linearSlop), 0, b2Settings.b2_maxLinearCorrection);
_local16 = (_local35 - m_upperTranslation);
_local18 = true;
};
};
};
};
m_perp = b2Math.b2MulMV(_local20, m_localYAxis1);
m_s1 = (((_local26 + _local22) * m_perp.y) - ((_local27 + _local23) * m_perp.x));
m_s2 = ((_local24 * m_perp.y) - (_local25 * m_perp.x));
_local28 = new b2Vec3();
_local29 = ((m_perp.x * _local26) + (m_perp.y * _local27));
_local30 = ((_local9 - _local7) - m_refAngle);
_local16 = b2Math.b2Max(_local16, b2Math.b2Abs(_local29));
_local17 = b2Math.b2Abs(_local30);
if (_local18){
_local12 = m_invMass1;
_local13 = m_invMass2;
_local14 = m_invI1;
_local15 = m_invI2;
m_K.col1.x = (((_local12 + _local13) + ((_local14 * m_s1) * m_s1)) + ((_local15 * m_s2) * m_s2));
m_K.col1.y = ((_local14 * m_s1) + (_local15 * m_s2));
m_K.col1.z = (((_local14 * m_s1) * m_a1) + ((_local15 * m_s2) * m_a2));
m_K.col2.x = m_K.col1.y;
m_K.col2.y = (_local14 + _local15);
m_K.col2.z = ((_local14 * m_a1) + (_local15 * m_a2));
m_K.col3.x = m_K.col1.z;
m_K.col3.y = m_K.col2.z;
m_K.col3.z = (((_local12 + _local13) + ((_local14 * m_a1) * m_a1)) + ((_local15 * m_a2) * m_a2));
m_K.Solve33(_local28, -(_local29), -(_local30), -(_local19));
} else {
_local12 = m_invMass1;
_local13 = m_invMass2;
_local14 = m_invI1;
_local15 = m_invI2;
_local36 = (((_local12 + _local13) + ((_local14 * m_s1) * m_s1)) + ((_local15 * m_s2) * m_s2));
_local37 = ((_local14 * m_s1) + (_local15 * m_s2));
_local38 = (_local14 + _local15);
m_K.col1.Set(_local36, _local37, 0);
m_K.col2.Set(_local37, _local38, 0);
_local39 = m_K.Solve22(new b2Vec2(), -(_local29), -(_local30));
_local28.x = _local39.x;
_local28.y = _local39.y;
_local28.z = 0;
};
_local31 = ((_local28.x * m_perp.x) + (_local28.z * m_axis.x));
_local32 = ((_local28.x * m_perp.y) + (_local28.z * m_axis.y));
_local33 = (((_local28.x * m_s1) + _local28.y) + (_local28.z * m_a1));
_local34 = (((_local28.x * m_s2) + _local28.y) + (_local28.z * m_a2));
_local6.x = (_local6.x - (m_invMass1 * _local31));
_local6.y = (_local6.y - (m_invMass1 * _local32));
_local7 = (_local7 - (m_invI1 * _local33));
_local8.x = (_local8.x + (m_invMass2 * _local31));
_local8.y = (_local8.y + (m_invMass2 * _local32));
_local9 = (_local9 + (m_invI2 * _local34));
_local4.m_sweep.a = _local7;
_local5.m_sweep.a = _local9;
_local4.SynchronizeTransform();
_local5.SynchronizeTransform();
return ((((_local16 <= b2Settings.b2_linearSlop)) && ((_local17 <= b2Settings.b2_angularSlop))));
}
public function GetJointSpeed():Number{
var _local1:b2Body;
var _local2:b2Body;
var _local3:b2Mat22;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:b2Vec2;
var _local16:b2Vec2;
var _local17:b2Vec2;
var _local18:Number;
var _local19:Number;
var _local20:Number;
_local1 = m_body1;
_local2 = m_body2;
_local3 = _local1.m_xf.R;
_local4 = (m_localAnchor1.x - _local1.m_sweep.localCenter.x);
_local5 = (m_localAnchor1.y - _local1.m_sweep.localCenter.y);
_local6 = ((_local3.col1.x * _local4) + (_local3.col2.x * _local5));
_local5 = ((_local3.col1.y * _local4) + (_local3.col2.y * _local5));
_local4 = _local6;
_local3 = _local2.m_xf.R;
_local7 = (m_localAnchor2.x - _local2.m_sweep.localCenter.x);
_local8 = (m_localAnchor2.y - _local2.m_sweep.localCenter.y);
_local6 = ((_local3.col1.x * _local7) + (_local3.col2.x * _local8));
_local8 = ((_local3.col1.y * _local7) + (_local3.col2.y * _local8));
_local7 = _local6;
_local9 = (_local1.m_sweep.c.x + _local4);
_local10 = (_local1.m_sweep.c.y + _local5);
_local11 = (_local2.m_sweep.c.x + _local7);
_local12 = (_local2.m_sweep.c.y + _local8);
_local13 = (_local11 - _local9);
_local14 = (_local12 - _local10);
_local15 = _local1.GetWorldVector(m_localXAxis1);
_local16 = _local1.m_linearVelocity;
_local17 = _local2.m_linearVelocity;
_local18 = _local1.m_angularVelocity;
_local19 = _local2.m_angularVelocity;
_local20 = (((_local13 * (-(_local18) * _local15.y)) + (_local14 * (_local18 * _local15.x))) + ((_local15.x * (((_local17.x + (-(_local19) * _local8)) - _local16.x) - (-(_local18) * _local5))) + (_local15.y * (((_local17.y + (_local19 * _local7)) - _local16.y) - (_local18 * _local4)))));
return (_local20);
}
public function SetMotorSpeed(_arg1:Number):void{
m_body1.WakeUp();
m_body2.WakeUp();
m_motorSpeed = _arg1;
}
override b2internal function InitVelocityConstraints(_arg1:b2TimeStep):void{
var _local2:b2Body;
var _local3:b2Body;
var _local4:b2Mat22;
var _local5:Number;
var _local6:b2XForm;
var _local7:b2XForm;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
_local2 = m_body1;
_local3 = m_body2;
m_localCenter1.SetV(_local2.GetLocalCenter());
m_localCenter2.SetV(_local3.GetLocalCenter());
_local6 = _local2.GetXForm();
_local7 = _local3.GetXForm();
_local4 = _local2.m_xf.R;
_local8 = (m_localAnchor1.x - _local2.m_sweep.localCenter.x);
_local9 = (m_localAnchor1.y - _local2.m_sweep.localCenter.y);
_local5 = ((_local4.col1.x * _local8) + (_local4.col2.x * _local9));
_local9 = ((_local4.col1.y * _local8) + (_local4.col2.y * _local9));
_local8 = _local5;
_local4 = _local3.m_xf.R;
_local10 = (m_localAnchor2.x - _local3.m_sweep.localCenter.x);
_local11 = (m_localAnchor2.y - _local3.m_sweep.localCenter.y);
_local5 = ((_local4.col1.x * _local10) + (_local4.col2.x * _local11));
_local11 = ((_local4.col1.y * _local10) + (_local4.col2.y * _local11));
_local10 = _local5;
_local12 = (((_local3.m_sweep.c.x + _local10) - _local2.m_sweep.c.x) - _local8);
_local13 = (((_local3.m_sweep.c.y + _local11) - _local2.m_sweep.c.y) - _local9);
m_invMass1 = _local2.m_invMass;
m_invMass2 = _local3.m_invMass;
m_invI1 = _local2.m_invI;
m_invI2 = _local3.m_invI;
m_axis.SetV(b2Math.b2MulMV(_local6.R, m_localXAxis1));
m_a1 = (((_local12 + _local8) * m_axis.y) - ((_local13 + _local9) * m_axis.x));
m_a2 = ((_local10 * m_axis.y) - (_local11 * m_axis.x));
m_motorMass = (((m_invMass1 + m_invMass2) + ((m_invI1 * m_a1) * m_a1)) + ((m_invI2 * m_a2) * m_a2));
m_motorMass = (1 / m_motorMass);
m_perp.SetV(b2Math.b2MulMV(_local6.R, m_localYAxis1));
m_s1 = (((_local12 + _local8) * m_perp.y) - ((_local13 + _local9) * m_perp.x));
m_s2 = ((_local10 * m_perp.y) - (_local11 * m_perp.x));
_local14 = m_invMass1;
_local15 = m_invMass2;
_local16 = m_invI1;
_local17 = m_invI2;
m_K.col1.x = (((_local14 + _local15) + ((_local16 * m_s1) * m_s1)) + ((_local17 * m_s2) * m_s2));
m_K.col1.y = ((_local16 * m_s1) + (_local17 * m_s2));
m_K.col1.z = (((_local16 * m_s1) * m_a1) + ((_local17 * m_s2) * m_a2));
m_K.col2.x = m_K.col1.y;
m_K.col2.y = (_local16 + _local17);
m_K.col2.z = ((_local16 * m_a1) + (_local17 * m_a2));
m_K.col3.x = m_K.col1.z;
m_K.col3.y = m_K.col2.z;
m_K.col3.z = (((_local14 + _local15) + ((_local16 * m_a1) * m_a1)) + ((_local17 * m_a2) * m_a2));
if (m_enableLimit){
_local18 = ((m_axis.x * _local12) + (m_axis.y * _local13));
if (b2Math.b2Abs((m_upperTranslation - m_lowerTranslation)) < (2 * b2Settings.b2_linearSlop)){
m_limitState = e_equalLimits;
} else {
if (_local18 <= m_lowerTranslation){
if (m_limitState != e_atLowerLimit){
m_limitState = e_atLowerLimit;
m_impulse.z = 0;
};
} else {
if (_local18 >= m_upperTranslation){
if (m_limitState != e_atUpperLimit){
m_limitState = e_atUpperLimit;
m_impulse.z = 0;
};
} else {
m_limitState = e_inactiveLimit;
m_impulse.z = 0;
};
};
};
} else {
m_limitState = e_inactiveLimit;
};
if (m_enableMotor == false){
m_motorImpulse = 0;
};
if (_arg1.warmStarting){
m_impulse.x = (m_impulse.x * _arg1.dtRatio);
m_impulse.y = (m_impulse.y * _arg1.dtRatio);
m_motorImpulse = (m_motorImpulse * _arg1.dtRatio);
_local19 = ((m_impulse.x * m_perp.x) + ((m_motorImpulse + m_impulse.z) * m_axis.x));
_local20 = ((m_impulse.x * m_perp.y) + ((m_motorImpulse + m_impulse.z) * m_axis.y));
_local21 = (((m_impulse.x * m_s1) + m_impulse.y) + ((m_motorImpulse + m_impulse.z) * m_a1));
_local22 = (((m_impulse.x * m_s2) + m_impulse.y) + ((m_motorImpulse + m_impulse.z) * m_a2));
_local2.m_linearVelocity.x = (_local2.m_linearVelocity.x - (m_invMass1 * _local19));
_local2.m_linearVelocity.y = (_local2.m_linearVelocity.y - (m_invMass1 * _local20));
_local2.m_angularVelocity = (_local2.m_angularVelocity - (m_invI1 * _local21));
_local3.m_linearVelocity.x = (_local3.m_linearVelocity.x + (m_invMass2 * _local19));
_local3.m_linearVelocity.y = (_local3.m_linearVelocity.y + (m_invMass2 * _local20));
_local3.m_angularVelocity = (_local3.m_angularVelocity + (m_invI2 * _local22));
} else {
m_impulse.SetZero();
m_motorImpulse = 0;
};
}
public function EnableLimit(_arg1:Boolean):void{
m_body1.WakeUp();
m_body2.WakeUp();
m_enableLimit = _arg1;
}
public function SetMaxMotorForce(_arg1:Number):void{
m_body1.WakeUp();
m_body2.WakeUp();
m_maxMotorForce = _arg1;
}
}
}//package Box2D.Dynamics.Joints
Section 71
//b2PrismaticJointDef (Box2D.Dynamics.Joints.b2PrismaticJointDef)
package Box2D.Dynamics.Joints {
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
public class b2PrismaticJointDef extends b2JointDef {
public var localAxis1:b2Vec2;
public var referenceAngle:Number;
public var maxMotorForce:Number;
public var motorSpeed:Number;
public var upperTranslation:Number;
public var localAnchor1:b2Vec2;
public var localAnchor2:b2Vec2;
public var enableLimit:Boolean;
public var enableMotor:Boolean;
public var lowerTranslation:Number;
public function b2PrismaticJointDef(){
localAnchor1 = new b2Vec2();
localAnchor2 = new b2Vec2();
localAxis1 = new b2Vec2();
super();
type = b2Joint.e_prismaticJoint;
localAxis1.Set(1, 0);
referenceAngle = 0;
enableLimit = false;
lowerTranslation = 0;
upperTranslation = 0;
enableMotor = false;
maxMotorForce = 0;
motorSpeed = 0;
}
public function Initialize(_arg1:b2Body, _arg2:b2Body, _arg3:b2Vec2, _arg4:b2Vec2):void{
body1 = _arg1;
body2 = _arg2;
localAnchor1 = body1.GetLocalPoint(_arg3);
localAnchor2 = body2.GetLocalPoint(_arg3);
localAxis1 = body1.GetLocalVector(_arg4);
referenceAngle = (body2.GetAngle() - body1.GetAngle());
}
}
}//package Box2D.Dynamics.Joints
Section 72
//b2PulleyJoint (Box2D.Dynamics.Joints.b2PulleyJoint)
package Box2D.Dynamics.Joints {
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
import Box2D.Common.*;
public class b2PulleyJoint extends b2Joint {
private var m_ground:b2Body;
private var m_maxLength2:Number;
private var m_maxLength1:Number;
private var m_limitState1:int;
private var m_limitState2:int;
private var m_pulleyMass:Number;
private var m_constant:Number;
private var m_impulse:Number;
private var m_state:int;
private var m_ratio:Number;
private var m_groundAnchor2:b2Vec2;
private var m_groundAnchor1:b2Vec2;
private var m_localAnchor2:b2Vec2;
private var m_localAnchor1:b2Vec2;
private var m_limitMass2:Number;
private var m_limitMass1:Number;
private var m_limitImpulse2:Number;
private var m_u1:b2Vec2;
private var m_u2:b2Vec2;
private var m_limitImpulse1:Number;
b2internal static const b2_minPulleyLength:Number = 2;
public function b2PulleyJoint(_arg1:b2PulleyJointDef){
var _local2:b2Mat22;
var _local3:Number;
var _local4:Number;
m_groundAnchor1 = new b2Vec2();
m_groundAnchor2 = new b2Vec2();
m_localAnchor1 = new b2Vec2();
m_localAnchor2 = new b2Vec2();
m_u1 = new b2Vec2();
m_u2 = new b2Vec2();
super(_arg1);
m_ground = m_body1.m_world.m_groundBody;
m_groundAnchor1.x = (_arg1.groundAnchor1.x - m_ground.m_xf.position.x);
m_groundAnchor1.y = (_arg1.groundAnchor1.y - m_ground.m_xf.position.y);
m_groundAnchor2.x = (_arg1.groundAnchor2.x - m_ground.m_xf.position.x);
m_groundAnchor2.y = (_arg1.groundAnchor2.y - m_ground.m_xf.position.y);
m_localAnchor1.SetV(_arg1.localAnchor1);
m_localAnchor2.SetV(_arg1.localAnchor2);
m_ratio = _arg1.ratio;
m_constant = (_arg1.length1 + (m_ratio * _arg1.length2));
m_maxLength1 = b2Math.b2Min(_arg1.maxLength1, (m_constant - (m_ratio * b2_minPulleyLength)));
m_maxLength2 = b2Math.b2Min(_arg1.maxLength2, ((m_constant - b2_minPulleyLength) / m_ratio));
m_impulse = 0;
m_limitImpulse1 = 0;
m_limitImpulse2 = 0;
}
public function GetGroundAnchor2():b2Vec2{
var _local1:b2Vec2;
_local1 = m_ground.m_xf.position.Copy();
_local1.Add(m_groundAnchor2);
return (_local1);
}
override public function GetAnchor1():b2Vec2{
return (m_body1.GetWorldPoint(m_localAnchor1));
}
override public function GetAnchor2():b2Vec2{
return (m_body2.GetWorldPoint(m_localAnchor2));
}
public function GetRatio():Number{
return (m_ratio);
}
override public function GetReactionForce(_arg1:Number):b2Vec2{
return (new b2Vec2(((_arg1 * m_impulse) * m_u2.x), ((_arg1 * m_impulse) * m_u2.y)));
}
override b2internal function SolvePositionConstraints(_arg1:Number):Boolean{
var _local2:b2Body;
var _local3:b2Body;
var _local4:b2Mat22;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Number;
var _local24:Number;
_local2 = m_body1;
_local3 = m_body2;
_local5 = (m_ground.m_xf.position.x + m_groundAnchor1.x);
_local6 = (m_ground.m_xf.position.y + m_groundAnchor1.y);
_local7 = (m_ground.m_xf.position.x + m_groundAnchor2.x);
_local8 = (m_ground.m_xf.position.y + m_groundAnchor2.y);
_local24 = 0;
if (m_state == e_atUpperLimit){
_local4 = _local2.m_xf.R;
_local9 = (m_localAnchor1.x - _local2.m_sweep.localCenter.x);
_local10 = (m_localAnchor1.y - _local2.m_sweep.localCenter.y);
_local23 = ((_local4.col1.x * _local9) + (_local4.col2.x * _local10));
_local10 = ((_local4.col1.y * _local9) + (_local4.col2.y * _local10));
_local9 = _local23;
_local4 = _local3.m_xf.R;
_local11 = (m_localAnchor2.x - _local3.m_sweep.localCenter.x);
_local12 = (m_localAnchor2.y - _local3.m_sweep.localCenter.y);
_local23 = ((_local4.col1.x * _local11) + (_local4.col2.x * _local12));
_local12 = ((_local4.col1.y * _local11) + (_local4.col2.y * _local12));
_local11 = _local23;
_local13 = (_local2.m_sweep.c.x + _local9);
_local14 = (_local2.m_sweep.c.y + _local10);
_local15 = (_local3.m_sweep.c.x + _local11);
_local16 = (_local3.m_sweep.c.y + _local12);
m_u1.Set((_local13 - _local5), (_local14 - _local6));
m_u2.Set((_local15 - _local7), (_local16 - _local8));
_local17 = m_u1.Length();
_local18 = m_u2.Length();
if (_local17 > b2Settings.b2_linearSlop){
m_u1.Multiply((1 / _local17));
} else {
m_u1.SetZero();
};
if (_local18 > b2Settings.b2_linearSlop){
m_u2.Multiply((1 / _local18));
} else {
m_u2.SetZero();
};
_local19 = ((m_constant - _local17) - (m_ratio * _local18));
_local24 = b2Math.b2Max(_local24, -(_local19));
_local19 = b2Math.b2Clamp((_local19 + b2Settings.b2_linearSlop), -(b2Settings.b2_maxLinearCorrection), 0);
_local20 = (-(m_pulleyMass) * _local19);
_local13 = (-(_local20) * m_u1.x);
_local14 = (-(_local20) * m_u1.y);
_local15 = ((-(m_ratio) * _local20) * m_u2.x);
_local16 = ((-(m_ratio) * _local20) * m_u2.y);
_local2.m_sweep.c.x = (_local2.m_sweep.c.x + (_local2.m_invMass * _local13));
_local2.m_sweep.c.y = (_local2.m_sweep.c.y + (_local2.m_invMass * _local14));
_local2.m_sweep.a = (_local2.m_sweep.a + (_local2.m_invI * ((_local9 * _local14) - (_local10 * _local13))));
_local3.m_sweep.c.x = (_local3.m_sweep.c.x + (_local3.m_invMass * _local15));
_local3.m_sweep.c.y = (_local3.m_sweep.c.y + (_local3.m_invMass * _local16));
_local3.m_sweep.a = (_local3.m_sweep.a + (_local3.m_invI * ((_local11 * _local16) - (_local12 * _local15))));
_local2.SynchronizeTransform();
_local3.SynchronizeTransform();
};
if (m_limitState1 == e_atUpperLimit){
_local4 = _local2.m_xf.R;
_local9 = (m_localAnchor1.x - _local2.m_sweep.localCenter.x);
_local10 = (m_localAnchor1.y - _local2.m_sweep.localCenter.y);
_local23 = ((_local4.col1.x * _local9) + (_local4.col2.x * _local10));
_local10 = ((_local4.col1.y * _local9) + (_local4.col2.y * _local10));
_local9 = _local23;
_local13 = (_local2.m_sweep.c.x + _local9);
_local14 = (_local2.m_sweep.c.y + _local10);
m_u1.Set((_local13 - _local5), (_local14 - _local6));
_local17 = m_u1.Length();
if (_local17 > b2Settings.b2_linearSlop){
m_u1.x = (m_u1.x * (1 / _local17));
m_u1.y = (m_u1.y * (1 / _local17));
} else {
m_u1.SetZero();
};
_local19 = (m_maxLength1 - _local17);
_local24 = b2Math.b2Max(_local24, -(_local19));
_local19 = b2Math.b2Clamp((_local19 + b2Settings.b2_linearSlop), -(b2Settings.b2_maxLinearCorrection), 0);
_local20 = (-(m_limitMass1) * _local19);
_local13 = (-(_local20) * m_u1.x);
_local14 = (-(_local20) * m_u1.y);
_local2.m_sweep.c.x = (_local2.m_sweep.c.x + (_local2.m_invMass * _local13));
_local2.m_sweep.c.y = (_local2.m_sweep.c.y + (_local2.m_invMass * _local14));
_local2.m_sweep.a = (_local2.m_sweep.a + (_local2.m_invI * ((_local9 * _local14) - (_local10 * _local13))));
_local2.SynchronizeTransform();
};
if (m_limitState2 == e_atUpperLimit){
_local4 = _local3.m_xf.R;
_local11 = (m_localAnchor2.x - _local3.m_sweep.localCenter.x);
_local12 = (m_localAnchor2.y - _local3.m_sweep.localCenter.y);
_local23 = ((_local4.col1.x * _local11) + (_local4.col2.x * _local12));
_local12 = ((_local4.col1.y * _local11) + (_local4.col2.y * _local12));
_local11 = _local23;
_local15 = (_local3.m_sweep.c.x + _local11);
_local16 = (_local3.m_sweep.c.y + _local12);
m_u2.Set((_local15 - _local7), (_local16 - _local8));
_local18 = m_u2.Length();
if (_local18 > b2Settings.b2_linearSlop){
m_u2.x = (m_u2.x * (1 / _local18));
m_u2.y = (m_u2.y * (1 / _local18));
} else {
m_u2.SetZero();
};
_local19 = (m_maxLength2 - _local18);
_local24 = b2Math.b2Max(_local24, -(_local19));
_local19 = b2Math.b2Clamp((_local19 + b2Settings.b2_linearSlop), -(b2Settings.b2_maxLinearCorrection), 0);
_local20 = (-(m_limitMass2) * _local19);
_local15 = (-(_local20) * m_u2.x);
_local16 = (-(_local20) * m_u2.y);
_local3.m_sweep.c.x = (_local3.m_sweep.c.x + (_local3.m_invMass * _local15));
_local3.m_sweep.c.y = (_local3.m_sweep.c.y + (_local3.m_invMass * _local16));
_local3.m_sweep.a = (_local3.m_sweep.a + (_local3.m_invI * ((_local11 * _local16) - (_local12 * _local15))));
_local3.SynchronizeTransform();
};
return ((_local24 < b2Settings.b2_linearSlop));
}
override b2internal function InitVelocityConstraints(_arg1:b2TimeStep):void{
var _local2:b2Body;
var _local3:b2Body;
var _local4:b2Mat22;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Number;
var _local24:Number;
var _local25:Number;
var _local26:Number;
_local2 = m_body1;
_local3 = m_body2;
_local4 = _local2.m_xf.R;
_local5 = (m_localAnchor1.x - _local2.m_sweep.localCenter.x);
_local6 = (m_localAnchor1.y - _local2.m_sweep.localCenter.y);
_local7 = ((_local4.col1.x * _local5) + (_local4.col2.x * _local6));
_local6 = ((_local4.col1.y * _local5) + (_local4.col2.y * _local6));
_local5 = _local7;
_local4 = _local3.m_xf.R;
_local8 = (m_localAnchor2.x - _local3.m_sweep.localCenter.x);
_local9 = (m_localAnchor2.y - _local3.m_sweep.localCenter.y);
_local7 = ((_local4.col1.x * _local8) + (_local4.col2.x * _local9));
_local9 = ((_local4.col1.y * _local8) + (_local4.col2.y * _local9));
_local8 = _local7;
_local10 = (_local2.m_sweep.c.x + _local5);
_local11 = (_local2.m_sweep.c.y + _local6);
_local12 = (_local3.m_sweep.c.x + _local8);
_local13 = (_local3.m_sweep.c.y + _local9);
_local14 = (m_ground.m_xf.position.x + m_groundAnchor1.x);
_local15 = (m_ground.m_xf.position.y + m_groundAnchor1.y);
_local16 = (m_ground.m_xf.position.x + m_groundAnchor2.x);
_local17 = (m_ground.m_xf.position.y + m_groundAnchor2.y);
m_u1.Set((_local10 - _local14), (_local11 - _local15));
m_u2.Set((_local12 - _local16), (_local13 - _local17));
_local18 = m_u1.Length();
_local19 = m_u2.Length();
if (_local18 > b2Settings.b2_linearSlop){
m_u1.Multiply((1 / _local18));
} else {
m_u1.SetZero();
};
if (_local19 > b2Settings.b2_linearSlop){
m_u2.Multiply((1 / _local19));
} else {
m_u2.SetZero();
};
_local20 = ((m_constant - _local18) - (m_ratio * _local19));
if (_local20 > 0){
m_state = e_inactiveLimit;
m_impulse = 0;
} else {
m_state = e_atUpperLimit;
};
if (_local18 < m_maxLength1){
m_limitState1 = e_inactiveLimit;
m_limitImpulse1 = 0;
} else {
m_limitState1 = e_atUpperLimit;
};
if (_local19 < m_maxLength2){
m_limitState2 = e_inactiveLimit;
m_limitImpulse2 = 0;
} else {
m_limitState2 = e_atUpperLimit;
};
_local21 = ((_local5 * m_u1.y) - (_local6 * m_u1.x));
_local22 = ((_local8 * m_u2.y) - (_local9 * m_u2.x));
m_limitMass1 = (_local2.m_invMass + ((_local2.m_invI * _local21) * _local21));
m_limitMass2 = (_local3.m_invMass + ((_local3.m_invI * _local22) * _local22));
m_pulleyMass = (m_limitMass1 + ((m_ratio * m_ratio) * m_limitMass2));
m_limitMass1 = (1 / m_limitMass1);
m_limitMass2 = (1 / m_limitMass2);
m_pulleyMass = (1 / m_pulleyMass);
if (_arg1.warmStarting){
m_impulse = (m_impulse * _arg1.dtRatio);
m_limitImpulse1 = (m_limitImpulse1 * _arg1.dtRatio);
m_limitImpulse2 = (m_limitImpulse2 * _arg1.dtRatio);
_local23 = ((-(m_impulse) - m_limitImpulse1) * m_u1.x);
_local24 = ((-(m_impulse) - m_limitImpulse1) * m_u1.y);
_local25 = (((-(m_ratio) * m_impulse) - m_limitImpulse2) * m_u2.x);
_local26 = (((-(m_ratio) * m_impulse) - m_limitImpulse2) * m_u2.y);
_local2.m_linearVelocity.x = (_local2.m_linearVelocity.x + (_local2.m_invMass * _local23));
_local2.m_linearVelocity.y = (_local2.m_linearVelocity.y + (_local2.m_invMass * _local24));
_local2.m_angularVelocity = (_local2.m_angularVelocity + (_local2.m_invI * ((_local5 * _local24) - (_local6 * _local23))));
_local3.m_linearVelocity.x = (_local3.m_linearVelocity.x + (_local3.m_invMass * _local25));
_local3.m_linearVelocity.y = (_local3.m_linearVelocity.y + (_local3.m_invMass * _local26));
_local3.m_angularVelocity = (_local3.m_angularVelocity + (_local3.m_invI * ((_local8 * _local26) - (_local9 * _local25))));
} else {
m_impulse = 0;
m_limitImpulse1 = 0;
m_limitImpulse2 = 0;
};
}
override public function GetReactionTorque(_arg1:Number):Number{
return (0);
}
public function GetLength1():Number{
var _local1:b2Vec2;
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
_local1 = m_body1.GetWorldPoint(m_localAnchor1);
_local2 = (m_ground.m_xf.position.x + m_groundAnchor1.x);
_local3 = (m_ground.m_xf.position.y + m_groundAnchor1.y);
_local4 = (_local1.x - _local2);
_local5 = (_local1.y - _local3);
return (Math.sqrt(((_local4 * _local4) + (_local5 * _local5))));
}
public function GetLength2():Number{
var _local1:b2Vec2;
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
_local1 = m_body2.GetWorldPoint(m_localAnchor2);
_local2 = (m_ground.m_xf.position.x + m_groundAnchor2.x);
_local3 = (m_ground.m_xf.position.y + m_groundAnchor2.y);
_local4 = (_local1.x - _local2);
_local5 = (_local1.y - _local3);
return (Math.sqrt(((_local4 * _local4) + (_local5 * _local5))));
}
override b2internal function SolveVelocityConstraints(_arg1:b2TimeStep):void{
var _local2:b2Body;
var _local3:b2Body;
var _local4:b2Mat22;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
_local2 = m_body1;
_local3 = m_body2;
_local4 = _local2.m_xf.R;
_local5 = (m_localAnchor1.x - _local2.m_sweep.localCenter.x);
_local6 = (m_localAnchor1.y - _local2.m_sweep.localCenter.y);
_local7 = ((_local4.col1.x * _local5) + (_local4.col2.x * _local6));
_local6 = ((_local4.col1.y * _local5) + (_local4.col2.y * _local6));
_local5 = _local7;
_local4 = _local3.m_xf.R;
_local8 = (m_localAnchor2.x - _local3.m_sweep.localCenter.x);
_local9 = (m_localAnchor2.y - _local3.m_sweep.localCenter.y);
_local7 = ((_local4.col1.x * _local8) + (_local4.col2.x * _local9));
_local9 = ((_local4.col1.y * _local8) + (_local4.col2.y * _local9));
_local8 = _local7;
if (m_state == e_atUpperLimit){
_local10 = (_local2.m_linearVelocity.x + (-(_local2.m_angularVelocity) * _local6));
_local11 = (_local2.m_linearVelocity.y + (_local2.m_angularVelocity * _local5));
_local12 = (_local3.m_linearVelocity.x + (-(_local3.m_angularVelocity) * _local9));
_local13 = (_local3.m_linearVelocity.y + (_local3.m_angularVelocity * _local8));
_local18 = (-(((m_u1.x * _local10) + (m_u1.y * _local11))) - (m_ratio * ((m_u2.x * _local12) + (m_u2.y * _local13))));
_local19 = (m_pulleyMass * -(_local18));
_local20 = m_impulse;
m_impulse = b2Math.b2Max(0, (m_impulse + _local19));
_local19 = (m_impulse - _local20);
_local14 = (-(_local19) * m_u1.x);
_local15 = (-(_local19) * m_u1.y);
_local16 = ((-(m_ratio) * _local19) * m_u2.x);
_local17 = ((-(m_ratio) * _local19) * m_u2.y);
_local2.m_linearVelocity.x = (_local2.m_linearVelocity.x + (_local2.m_invMass * _local14));
_local2.m_linearVelocity.y = (_local2.m_linearVelocity.y + (_local2.m_invMass * _local15));
_local2.m_angularVelocity = (_local2.m_angularVelocity + (_local2.m_invI * ((_local5 * _local15) - (_local6 * _local14))));
_local3.m_linearVelocity.x = (_local3.m_linearVelocity.x + (_local3.m_invMass * _local16));
_local3.m_linearVelocity.y = (_local3.m_linearVelocity.y + (_local3.m_invMass * _local17));
_local3.m_angularVelocity = (_local3.m_angularVelocity + (_local3.m_invI * ((_local8 * _local17) - (_local9 * _local16))));
};
if (m_limitState1 == e_atUpperLimit){
_local10 = (_local2.m_linearVelocity.x + (-(_local2.m_angularVelocity) * _local6));
_local11 = (_local2.m_linearVelocity.y + (_local2.m_angularVelocity * _local5));
_local18 = -(((m_u1.x * _local10) + (m_u1.y * _local11)));
_local19 = (-(m_limitMass1) * _local18);
_local20 = m_limitImpulse1;
m_limitImpulse1 = b2Math.b2Max(0, (m_limitImpulse1 + _local19));
_local19 = (m_limitImpulse1 - _local20);
_local14 = (-(_local19) * m_u1.x);
_local15 = (-(_local19) * m_u1.y);
_local2.m_linearVelocity.x = (_local2.m_linearVelocity.x + (_local2.m_invMass * _local14));
_local2.m_linearVelocity.y = (_local2.m_linearVelocity.y + (_local2.m_invMass * _local15));
_local2.m_angularVelocity = (_local2.m_angularVelocity + (_local2.m_invI * ((_local5 * _local15) - (_local6 * _local14))));
};
if (m_limitState2 == e_atUpperLimit){
_local12 = (_local3.m_linearVelocity.x + (-(_local3.m_angularVelocity) * _local9));
_local13 = (_local3.m_linearVelocity.y + (_local3.m_angularVelocity * _local8));
_local18 = -(((m_u2.x * _local12) + (m_u2.y * _local13)));
_local19 = (-(m_limitMass2) * _local18);
_local20 = m_limitImpulse2;
m_limitImpulse2 = b2Math.b2Max(0, (m_limitImpulse2 + _local19));
_local19 = (m_limitImpulse2 - _local20);
_local16 = (-(_local19) * m_u2.x);
_local17 = (-(_local19) * m_u2.y);
_local3.m_linearVelocity.x = (_local3.m_linearVelocity.x + (_local3.m_invMass * _local16));
_local3.m_linearVelocity.y = (_local3.m_linearVelocity.y + (_local3.m_invMass * _local17));
_local3.m_angularVelocity = (_local3.m_angularVelocity + (_local3.m_invI * ((_local8 * _local17) - (_local9 * _local16))));
};
}
public function GetGroundAnchor1():b2Vec2{
var _local1:b2Vec2;
_local1 = m_ground.m_xf.position.Copy();
_local1.Add(m_groundAnchor1);
return (_local1);
}
}
}//package Box2D.Dynamics.Joints
Section 73
//b2PulleyJointDef (Box2D.Dynamics.Joints.b2PulleyJointDef)
package Box2D.Dynamics.Joints {
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
public class b2PulleyJointDef extends b2JointDef {
public var maxLength2:Number;
public var length1:Number;
public var length2:Number;
public var maxLength1:Number;
public var ratio:Number;
public var groundAnchor1:b2Vec2;
public var groundAnchor2:b2Vec2;
public var localAnchor1:b2Vec2;
public var localAnchor2:b2Vec2;
public function b2PulleyJointDef(){
groundAnchor1 = new b2Vec2();
groundAnchor2 = new b2Vec2();
localAnchor1 = new b2Vec2();
localAnchor2 = new b2Vec2();
super();
type = b2Joint.e_pulleyJoint;
groundAnchor1.Set(-1, 1);
groundAnchor2.Set(1, 1);
localAnchor1.Set(-1, 0);
localAnchor2.Set(1, 0);
length1 = 0;
maxLength1 = 0;
length2 = 0;
maxLength2 = 0;
ratio = 1;
collideConnected = true;
}
public function Initialize(_arg1:b2Body, _arg2:b2Body, _arg3:b2Vec2, _arg4:b2Vec2, _arg5:b2Vec2, _arg6:b2Vec2, _arg7:Number):void{
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
body1 = _arg1;
body2 = _arg2;
groundAnchor1.SetV(_arg3);
groundAnchor2.SetV(_arg4);
localAnchor1 = body1.GetLocalPoint(_arg5);
localAnchor2 = body2.GetLocalPoint(_arg6);
_local8 = (_arg5.x - _arg3.x);
_local9 = (_arg5.y - _arg3.y);
length1 = Math.sqrt(((_local8 * _local8) + (_local9 * _local9)));
_local10 = (_arg6.x - _arg4.x);
_local11 = (_arg6.y - _arg4.y);
length2 = Math.sqrt(((_local10 * _local10) + (_local11 * _local11)));
ratio = _arg7;
_local12 = (length1 + (ratio * length2));
maxLength1 = (_local12 - (ratio * b2PulleyJoint.b2_minPulleyLength));
maxLength2 = ((_local12 - b2PulleyJoint.b2_minPulleyLength) / ratio);
}
}
}//package Box2D.Dynamics.Joints
Section 74
//b2RevoluteJoint (Box2D.Dynamics.Joints.b2RevoluteJoint)
package Box2D.Dynamics.Joints {
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
import Box2D.Common.*;
public class b2RevoluteJoint extends b2Joint {
private var m_referenceAngle:Number;
private var m_enableLimit:Boolean;
private var m_impulse:b2Vec3;
private var m_limitState:int;
private var m_motorMass:Number;
b2internal var m_localAnchor2:b2Vec2;
private var K2:b2Mat22;
b2internal var m_localAnchor1:b2Vec2;
private var K1:b2Mat22;
private var K3:b2Mat22;
private var K:b2Mat22;
private var m_motorImpulse:Number;
private var m_mass:b2Mat33;
private var m_enableMotor:Boolean;
private var m_upperAngle:Number;
private var m_motorSpeed:Number;
private var m_maxMotorTorque:Number;
private var m_lowerAngle:Number;
private static var tImpulse:b2Vec2 = new b2Vec2();
public function b2RevoluteJoint(_arg1:b2RevoluteJointDef){
K = new b2Mat22();
K1 = new b2Mat22();
K2 = new b2Mat22();
K3 = new b2Mat22();
m_localAnchor1 = new b2Vec2();
m_localAnchor2 = new b2Vec2();
m_impulse = new b2Vec3();
m_mass = new b2Mat33();
super(_arg1);
m_localAnchor1.SetV(_arg1.localAnchor1);
m_localAnchor2.SetV(_arg1.localAnchor2);
m_referenceAngle = _arg1.referenceAngle;
m_impulse.SetZero();
m_motorImpulse = 0;
m_lowerAngle = _arg1.lowerAngle;
m_upperAngle = _arg1.upperAngle;
m_maxMotorTorque = _arg1.maxMotorTorque;
m_motorSpeed = _arg1.motorSpeed;
m_enableLimit = _arg1.enableLimit;
m_enableMotor = _arg1.enableMotor;
m_limitState = e_inactiveLimit;
}
override public function GetAnchor1():b2Vec2{
return (m_body1.GetWorldPoint(m_localAnchor1));
}
override public function GetAnchor2():b2Vec2{
return (m_body2.GetWorldPoint(m_localAnchor2));
}
public function GetUpperLimit():Number{
return (m_upperAngle);
}
public function GetLowerLimit():Number{
return (m_lowerAngle);
}
public function EnableMotor(_arg1:Boolean):void{
m_enableMotor = _arg1;
}
public function SetLimits(_arg1:Number, _arg2:Number):void{
m_lowerAngle = _arg1;
m_upperAngle = _arg2;
}
public function GetMotorSpeed():Number{
return (m_motorSpeed);
}
override public function GetReactionForce(_arg1:Number):b2Vec2{
return (new b2Vec2((_arg1 * m_impulse.x), (_arg1 * m_impulse.y)));
}
override b2internal function SolvePositionConstraints(_arg1:Number):Boolean{
var _local2:Number;
var _local3:Number;
var _local4:b2Mat22;
var _local5:b2Body;
var _local6:b2Body;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Number;
var _local24:Number;
var _local25:Number;
var _local26:Number;
var _local27:Number;
var _local28:Number;
var _local29:Number;
var _local30:Number;
var _local31:Number;
_local5 = m_body1;
_local6 = m_body2;
_local7 = 0;
_local8 = 0;
if (((m_enableLimit) && (!((m_limitState == e_inactiveLimit))))){
_local25 = ((_local6.m_sweep.a - _local5.m_sweep.a) - m_referenceAngle);
_local26 = 0;
if (m_limitState == e_equalLimits){
_local3 = b2Math.b2Clamp((_local25 - m_lowerAngle), -(b2Settings.b2_maxAngularCorrection), b2Settings.b2_maxAngularCorrection);
_local26 = (-(m_motorMass) * _local3);
_local7 = b2Math.b2Abs(_local3);
} else {
if (m_limitState == e_atLowerLimit){
_local3 = (_local25 - m_lowerAngle);
_local7 = -(_local3);
_local3 = b2Math.b2Clamp((_local3 + b2Settings.b2_angularSlop), -(b2Settings.b2_maxAngularCorrection), 0);
_local26 = (-(m_motorMass) * _local3);
} else {
if (m_limitState == e_atUpperLimit){
_local3 = (_local25 - m_upperAngle);
_local7 = _local3;
_local3 = b2Math.b2Clamp((_local3 - b2Settings.b2_angularSlop), 0, b2Settings.b2_maxAngularCorrection);
_local26 = (-(m_motorMass) * _local3);
};
};
};
_local5.m_sweep.a = (_local5.m_sweep.a - (_local5.m_invI * _local26));
_local6.m_sweep.a = (_local6.m_sweep.a + (_local6.m_invI * _local26));
_local5.SynchronizeTransform();
_local6.SynchronizeTransform();
};
_local4 = _local5.m_xf.R;
_local12 = (m_localAnchor1.x - _local5.m_sweep.localCenter.x);
_local13 = (m_localAnchor1.y - _local5.m_sweep.localCenter.y);
_local9 = ((_local4.col1.x * _local12) + (_local4.col2.x * _local13));
_local13 = ((_local4.col1.y * _local12) + (_local4.col2.y * _local13));
_local12 = _local9;
_local4 = _local6.m_xf.R;
_local14 = (m_localAnchor2.x - _local6.m_sweep.localCenter.x);
_local15 = (m_localAnchor2.y - _local6.m_sweep.localCenter.y);
_local9 = ((_local4.col1.x * _local14) + (_local4.col2.x * _local15));
_local15 = ((_local4.col1.y * _local14) + (_local4.col2.y * _local15));
_local14 = _local9;
_local16 = (((_local6.m_sweep.c.x + _local14) - _local5.m_sweep.c.x) - _local12);
_local17 = (((_local6.m_sweep.c.y + _local15) - _local5.m_sweep.c.y) - _local13);
_local18 = ((_local16 * _local16) + (_local17 * _local17));
_local19 = Math.sqrt(_local18);
_local8 = _local19;
_local20 = _local5.m_invMass;
_local21 = _local6.m_invMass;
_local22 = _local5.m_invI;
_local23 = _local6.m_invI;
_local24 = (10 * b2Settings.b2_linearSlop);
if (_local18 > (_local24 * _local24)){
_local27 = (_local16 / _local19);
_local28 = (_local17 / _local19);
_local29 = (_local20 + _local21);
_local30 = (1 / _local29);
_local10 = (_local30 * -(_local16));
_local11 = (_local30 * -(_local17));
_local31 = 0.5;
_local5.m_sweep.c.x = (_local5.m_sweep.c.x - ((_local31 * _local20) * _local10));
_local5.m_sweep.c.y = (_local5.m_sweep.c.y - ((_local31 * _local20) * _local11));
_local6.m_sweep.c.x = (_local6.m_sweep.c.x + ((_local31 * _local21) * _local10));
_local6.m_sweep.c.y = (_local6.m_sweep.c.y + ((_local31 * _local21) * _local11));
_local16 = (((_local6.m_sweep.c.x + _local14) - _local5.m_sweep.c.x) - _local12);
_local17 = (((_local6.m_sweep.c.y + _local15) - _local5.m_sweep.c.y) - _local13);
};
K1.col1.x = (_local20 + _local21);
K1.col2.x = 0;
K1.col1.y = 0;
K1.col2.y = (_local20 + _local21);
K2.col1.x = ((_local22 * _local13) * _local13);
K2.col2.x = ((-(_local22) * _local12) * _local13);
K2.col1.y = ((-(_local22) * _local12) * _local13);
K2.col2.y = ((_local22 * _local12) * _local12);
K3.col1.x = ((_local23 * _local15) * _local15);
K3.col2.x = ((-(_local23) * _local14) * _local15);
K3.col1.y = ((-(_local23) * _local14) * _local15);
K3.col2.y = ((_local23 * _local14) * _local14);
K.SetM(K1);
K.AddM(K2);
K.AddM(K3);
K.Solve(tImpulse, -(_local16), -(_local17));
_local10 = tImpulse.x;
_local11 = tImpulse.y;
_local5.m_sweep.c.x = (_local5.m_sweep.c.x - (_local5.m_invMass * _local10));
_local5.m_sweep.c.y = (_local5.m_sweep.c.y - (_local5.m_invMass * _local11));
_local5.m_sweep.a = (_local5.m_sweep.a - (_local5.m_invI * ((_local12 * _local11) - (_local13 * _local10))));
_local6.m_sweep.c.x = (_local6.m_sweep.c.x + (_local6.m_invMass * _local10));
_local6.m_sweep.c.y = (_local6.m_sweep.c.y + (_local6.m_invMass * _local11));
_local6.m_sweep.a = (_local6.m_sweep.a + (_local6.m_invI * ((_local14 * _local11) - (_local15 * _local10))));
_local5.SynchronizeTransform();
_local6.SynchronizeTransform();
return ((((_local8 <= b2Settings.b2_linearSlop)) && ((_local7 <= b2Settings.b2_angularSlop))));
}
public function GetJointSpeed():Number{
return ((m_body2.m_angularVelocity - m_body1.m_angularVelocity));
}
public function SetMotorSpeed(_arg1:Number):void{
m_body1.WakeUp();
m_body2.WakeUp();
m_motorSpeed = _arg1;
}
public function EnableLimit(_arg1:Boolean):void{
m_enableLimit = _arg1;
}
public function SetMaxMotorTorque(_arg1:Number):void{
m_maxMotorTorque = _arg1;
}
public function GetJointAngle():Number{
return (((m_body2.m_sweep.a - m_body1.m_sweep.a) - m_referenceAngle));
}
override b2internal function InitVelocityConstraints(_arg1:b2TimeStep):void{
var _local2:b2Body;
var _local3:b2Body;
var _local4:b2Mat22;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
_local2 = m_body1;
_local3 = m_body2;
if (((m_enableMotor) || (m_enableLimit))){
};
_local4 = _local2.m_xf.R;
_local6 = (m_localAnchor1.x - _local2.m_sweep.localCenter.x);
_local7 = (m_localAnchor1.y - _local2.m_sweep.localCenter.y);
_local5 = ((_local4.col1.x * _local6) + (_local4.col2.x * _local7));
_local7 = ((_local4.col1.y * _local6) + (_local4.col2.y * _local7));
_local6 = _local5;
_local4 = _local3.m_xf.R;
_local8 = (m_localAnchor2.x - _local3.m_sweep.localCenter.x);
_local9 = (m_localAnchor2.y - _local3.m_sweep.localCenter.y);
_local5 = ((_local4.col1.x * _local8) + (_local4.col2.x * _local9));
_local9 = ((_local4.col1.y * _local8) + (_local4.col2.y * _local9));
_local8 = _local5;
_local10 = _local2.m_invMass;
_local11 = _local3.m_invMass;
_local12 = _local2.m_invI;
_local13 = _local3.m_invI;
m_mass.col1.x = (((_local10 + _local11) + ((_local7 * _local7) * _local12)) + ((_local9 * _local9) * _local13));
m_mass.col2.x = (((-(_local7) * _local6) * _local12) - ((_local9 * _local8) * _local13));
m_mass.col3.x = ((-(_local7) * _local12) - (_local9 * _local13));
m_mass.col1.y = m_mass.col2.x;
m_mass.col2.y = (((_local10 + _local11) + ((_local6 * _local6) * _local12)) + ((_local8 * _local8) * _local13));
m_mass.col3.y = ((_local6 * _local12) + (_local8 * _local13));
m_mass.col1.z = m_mass.col3.x;
m_mass.col2.z = m_mass.col3.y;
m_mass.col3.z = (_local12 + _local13);
m_motorMass = (1 / (_local12 + _local13));
if (m_enableMotor == false){
m_motorImpulse = 0;
};
if (m_enableLimit){
_local14 = ((_local3.m_sweep.a - _local2.m_sweep.a) - m_referenceAngle);
if (b2Math.b2Abs((m_upperAngle - m_lowerAngle)) < (2 * b2Settings.b2_angularSlop)){
m_limitState = e_equalLimits;
} else {
if (_local14 <= m_lowerAngle){
if (m_limitState != e_atLowerLimit){
m_impulse.z = 0;
};
m_limitState = e_atLowerLimit;
} else {
if (_local14 >= m_upperAngle){
if (m_limitState != e_atUpperLimit){
m_impulse.z = 0;
};
m_limitState = e_atUpperLimit;
} else {
m_limitState = e_inactiveLimit;
m_impulse.z = 0;
};
};
};
} else {
m_limitState = e_inactiveLimit;
};
if (_arg1.warmStarting){
m_impulse.x = (m_impulse.x * _arg1.dtRatio);
m_impulse.y = (m_impulse.y * _arg1.dtRatio);
m_motorImpulse = (m_motorImpulse * _arg1.dtRatio);
_local15 = m_impulse.x;
_local16 = m_impulse.y;
_local2.m_linearVelocity.x = (_local2.m_linearVelocity.x - (_local10 * _local15));
_local2.m_linearVelocity.y = (_local2.m_linearVelocity.y - (_local10 * _local16));
_local2.m_angularVelocity = (_local2.m_angularVelocity - (_local12 * ((((_local6 * _local16) - (_local7 * _local15)) + m_motorImpulse) + m_impulse.z)));
_local3.m_linearVelocity.x = (_local3.m_linearVelocity.x + (_local11 * _local15));
_local3.m_linearVelocity.y = (_local3.m_linearVelocity.y + (_local11 * _local16));
_local3.m_angularVelocity = (_local3.m_angularVelocity + (_local13 * ((((_local8 * _local16) - (_local9 * _local15)) + m_motorImpulse) + m_impulse.z)));
} else {
m_impulse.SetZero();
m_motorImpulse = 0;
};
}
public function GetMotorTorque():Number{
return (m_maxMotorTorque);
}
override public function GetReactionTorque(_arg1:Number):Number{
return ((_arg1 * m_impulse.z));
}
public function IsLimitEnabled():Boolean{
return (m_enableLimit);
}
public function IsMotorEnabled():Boolean{
m_body1.WakeUp();
m_body2.WakeUp();
return (m_enableMotor);
}
override b2internal function SolveVelocityConstraints(_arg1:b2TimeStep):void{
var _local2:b2Body;
var _local3:b2Body;
var _local4:b2Mat22;
var _local5:Number;
var _local6:Number;
var _local7:b2Vec2;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:b2Vec2;
var _local13:Number;
var _local14:b2Vec2;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Number;
var _local24:Number;
var _local25:Number;
var _local26:Number;
var _local27:b2Vec3;
var _local28:Number;
var _local29:Number;
var _local30:b2Vec2;
_local2 = m_body1;
_local3 = m_body2;
_local12 = _local2.m_linearVelocity;
_local13 = _local2.m_angularVelocity;
_local14 = _local3.m_linearVelocity;
_local15 = _local3.m_angularVelocity;
_local16 = _local2.m_invMass;
_local17 = _local3.m_invMass;
_local18 = _local2.m_invI;
_local19 = _local3.m_invI;
if (((m_enableMotor) && (!((m_limitState == e_equalLimits))))){
_local20 = ((_local15 - _local13) - m_motorSpeed);
_local21 = (m_motorMass * -(_local20));
_local22 = m_motorImpulse;
_local23 = (_arg1.dt * m_maxMotorTorque);
m_motorImpulse = b2Math.b2Clamp((m_motorImpulse + _local21), -(_local23), _local23);
_local21 = (m_motorImpulse - _local22);
_local13 = (_local13 - (_local18 * _local21));
_local15 = (_local15 + (_local19 * _local21));
};
if (((m_enableLimit) && (!((m_limitState == e_inactiveLimit))))){
_local4 = _local2.m_xf.R;
_local8 = (m_localAnchor1.x - _local2.m_sweep.localCenter.x);
_local9 = (m_localAnchor1.y - _local2.m_sweep.localCenter.y);
_local5 = ((_local4.col1.x * _local8) + (_local4.col2.x * _local9));
_local9 = ((_local4.col1.y * _local8) + (_local4.col2.y * _local9));
_local8 = _local5;
_local4 = _local3.m_xf.R;
_local10 = (m_localAnchor2.x - _local3.m_sweep.localCenter.x);
_local11 = (m_localAnchor2.y - _local3.m_sweep.localCenter.y);
_local5 = ((_local4.col1.x * _local10) + (_local4.col2.x * _local11));
_local11 = ((_local4.col1.y * _local10) + (_local4.col2.y * _local11));
_local10 = _local5;
_local24 = (((_local14.x + (-(_local15) * _local11)) - _local12.x) - (-(_local13) * _local9));
_local25 = (((_local14.y + (_local15 * _local10)) - _local12.y) - (_local13 * _local8));
_local26 = (_local15 - _local13);
_local27 = m_mass.Solve33(new b2Vec3(), -(_local24), -(_local25), -(_local26));
if (m_limitState == e_equalLimits){
m_impulse.Add(_local27);
} else {
if (m_limitState == e_atLowerLimit){
_local6 = (m_impulse.z + _local27.z);
if (_local6 < 0){
_local7 = m_mass.Solve22(new b2Vec2(), -(_local24), -(_local25));
_local27.x = _local7.x;
_local27.y = _local7.y;
_local27.z = -(m_impulse.z);
m_impulse.x = (m_impulse.x + _local7.x);
m_impulse.y = (m_impulse.y + _local7.y);
m_impulse.z = 0;
};
} else {
if (m_limitState == e_atUpperLimit){
_local6 = (m_impulse.z + _local27.z);
if (_local6 > 0){
_local7 = m_mass.Solve22(new b2Vec2(), -(_local24), -(_local25));
_local27.x = _local7.x;
_local27.y = _local7.y;
_local27.z = -(m_impulse.z);
m_impulse.x = (m_impulse.x + _local7.x);
m_impulse.y = (m_impulse.y + _local7.y);
m_impulse.z = 0;
};
};
};
};
_local12.x = (_local12.x - (_local16 * _local27.x));
_local12.y = (_local12.y - (_local16 * _local27.y));
_local13 = (_local13 - (_local18 * (((_local8 * _local27.y) - (_local9 * _local27.x)) + _local27.z)));
_local14.x = (_local14.x + (_local17 * _local27.x));
_local14.y = (_local14.y + (_local17 * _local27.y));
_local15 = (_local15 + (_local19 * (((_local10 * _local27.y) - (_local11 * _local27.x)) + _local27.z)));
} else {
_local4 = _local2.m_xf.R;
_local8 = (m_localAnchor1.x - _local2.m_sweep.localCenter.x);
_local9 = (m_localAnchor1.y - _local2.m_sweep.localCenter.y);
_local5 = ((_local4.col1.x * _local8) + (_local4.col2.x * _local9));
_local9 = ((_local4.col1.y * _local8) + (_local4.col2.y * _local9));
_local8 = _local5;
_local4 = _local3.m_xf.R;
_local10 = (m_localAnchor2.x - _local3.m_sweep.localCenter.x);
_local11 = (m_localAnchor2.y - _local3.m_sweep.localCenter.y);
_local5 = ((_local4.col1.x * _local10) + (_local4.col2.x * _local11));
_local11 = ((_local4.col1.y * _local10) + (_local4.col2.y * _local11));
_local10 = _local5;
_local28 = (((_local14.x + (-(_local15) * _local11)) - _local12.x) - (-(_local13) * _local9));
_local29 = (((_local14.y + (_local15 * _local10)) - _local12.y) - (_local13 * _local8));
_local30 = m_mass.Solve22(new b2Vec2(), -(_local28), -(_local29));
m_impulse.x = (m_impulse.x + _local30.x);
m_impulse.y = (m_impulse.y + _local30.y);
_local12.x = (_local12.x - (_local16 * _local30.x));
_local12.y = (_local12.y - (_local16 * _local30.y));
_local13 = (_local13 - (_local18 * ((_local8 * _local30.y) - (_local9 * _local30.x))));
_local14.x = (_local14.x + (_local17 * _local30.x));
_local14.y = (_local14.y + (_local17 * _local30.y));
_local15 = (_local15 + (_local19 * ((_local10 * _local30.y) - (_local11 * _local30.x))));
};
_local2.m_linearVelocity.SetV(_local12);
_local2.m_angularVelocity = _local13;
_local3.m_linearVelocity.SetV(_local14);
_local3.m_angularVelocity = _local15;
}
}
}//package Box2D.Dynamics.Joints
Section 75
//b2RevoluteJointDef (Box2D.Dynamics.Joints.b2RevoluteJointDef)
package Box2D.Dynamics.Joints {
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
public class b2RevoluteJointDef extends b2JointDef {
public var referenceAngle:Number;
public var upperAngle:Number;
public var lowerAngle:Number;
public var motorSpeed:Number;
public var maxMotorTorque:Number;
public var localAnchor1:b2Vec2;
public var localAnchor2:b2Vec2;
public var enableLimit:Boolean;
public var enableMotor:Boolean;
public function b2RevoluteJointDef(){
localAnchor1 = new b2Vec2();
localAnchor2 = new b2Vec2();
super();
type = b2Joint.e_revoluteJoint;
localAnchor1.Set(0, 0);
localAnchor2.Set(0, 0);
referenceAngle = 0;
lowerAngle = 0;
upperAngle = 0;
maxMotorTorque = 0;
motorSpeed = 0;
enableLimit = false;
enableMotor = false;
}
public function Initialize(_arg1:b2Body, _arg2:b2Body, _arg3:b2Vec2):void{
body1 = _arg1;
body2 = _arg2;
localAnchor1 = body1.GetLocalPoint(_arg3);
localAnchor2 = body2.GetLocalPoint(_arg3);
referenceAngle = (body2.GetAngle() - body1.GetAngle());
}
}
}//package Box2D.Dynamics.Joints
Section 76
//b2Body (Box2D.Dynamics.b2Body)
package Box2D.Dynamics {
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
import Box2D.Dynamics.Joints.*;
import Box2D.Dynamics.Controllers.*;
import Box2D.Dynamics.Contacts.*;
import Box2D.Common.*;
public class b2Body {
b2internal var m_shapeCount:int;
b2internal var m_controllerCount:int;
public var isPushed:Boolean;// = false
public var isHit:Boolean;// = false
b2internal var m_contactList:b2ContactEdge;
b2internal var m_angularVelocity:Number;
b2internal var m_xf:b2XForm;
b2internal var m_invI:Number;
b2internal var m_torque:Number;
b2internal var m_flags:uint;
b2internal var m_linearVelocity:b2Vec2;
b2internal var m_world:b2World;
b2internal var m_controllerList:b2ControllerEdge;
public var isEnemy:Boolean;// = false
b2internal var m_next:b2Body;
b2internal var m_shapeList:b2Shape;
public var isOnGround:Boolean;// = false
b2internal var m_force:b2Vec2;
b2internal var m_sweep:b2Sweep;
b2internal var m_mass:Number;
private var m_userData;
public var isDead:Boolean;// = false
b2internal var m_invMass:Number;
public var isGrenade:Boolean;// = false
b2internal var m_prev:b2Body;
b2internal var m_linearDamping:Number;
private var m_type:int;
b2internal var m_angularDamping:Number;
b2internal var m_islandIndex:int;
b2internal var m_sleepTime:Number;
b2internal var m_jointList:b2JointEdge;
b2internal var m_I:Number;
b2internal static var e_fixedRotationFlag:uint = 64;
b2internal static var e_frozenFlag:uint = 2;
b2internal static var e_maxTypes:uint = 3;
b2internal static var e_sleepFlag:uint = 8;
private static var s_massData:b2MassData = new b2MassData();
b2internal static var e_bulletFlag:uint = 32;
b2internal static var e_staticType:uint = 1;
b2internal static var e_islandFlag:uint = 4;
b2internal static var e_allowSleepFlag:uint = 16;
private static var s_xf1:b2XForm = new b2XForm();
b2internal static var e_dynamicType:uint = 2;
public function b2Body(_arg1:b2BodyDef, _arg2:b2World){
var _local3:b2Mat22;
var _local4:b2Vec2;
isHit = false;
isEnemy = false;
isPushed = false;
isDead = false;
isGrenade = false;
isOnGround = false;
m_xf = new b2XForm();
m_sweep = new b2Sweep();
m_linearVelocity = new b2Vec2();
m_force = new b2Vec2();
super();
m_flags = 0;
if (_arg1.isBullet){
m_flags = (m_flags | e_bulletFlag);
};
if (_arg1.fixedRotation){
m_flags = (m_flags | e_fixedRotationFlag);
};
if (_arg1.allowSleep){
m_flags = (m_flags | e_allowSleepFlag);
};
if (_arg1.isSleeping){
m_flags = (m_flags | e_sleepFlag);
};
m_world = _arg2;
m_xf.position.SetV(_arg1.position);
m_xf.R.Set(_arg1.angle);
m_sweep.localCenter.SetV(_arg1.massData.center);
m_sweep.t0 = 1;
m_sweep.a0 = (m_sweep.a = _arg1.angle);
_local3 = m_xf.R;
_local4 = m_sweep.localCenter;
m_sweep.c.x = ((_local3.col1.x * _local4.x) + (_local3.col2.x * _local4.y));
m_sweep.c.y = ((_local3.col1.y * _local4.x) + (_local3.col2.y * _local4.y));
m_sweep.c.x = (m_sweep.c.x + m_xf.position.x);
m_sweep.c.y = (m_sweep.c.y + m_xf.position.y);
m_sweep.c0.SetV(m_sweep.c);
m_jointList = null;
m_controllerList = null;
m_contactList = null;
m_controllerCount = 0;
m_prev = null;
m_next = null;
m_linearDamping = _arg1.linearDamping;
m_angularDamping = _arg1.angularDamping;
m_force.Set(0, 0);
m_torque = 0;
m_linearVelocity.SetZero();
m_angularVelocity = 0;
m_sleepTime = 0;
m_invMass = 0;
m_I = 0;
m_invI = 0;
m_mass = _arg1.massData.mass;
if (m_mass > 0){
m_invMass = (1 / m_mass);
};
if ((m_flags & b2Body.e_fixedRotationFlag) == 0){
m_I = _arg1.massData.I;
};
if (m_I > 0){
m_invI = (1 / m_I);
};
if ((((m_invMass == 0)) && ((m_invI == 0)))){
m_type = e_staticType;
} else {
m_type = e_dynamicType;
};
m_userData = _arg1.userData;
m_shapeList = null;
m_shapeCount = 0;
}
public function SetLinearDamping(_arg1:Number):void{
m_linearDamping = _arg1;
}
public function SetLinearVelocity(_arg1:b2Vec2):void{
m_linearVelocity.SetV(_arg1);
}
public function GetMassData():b2MassData{
var _local1:b2MassData;
_local1 = new b2MassData();
_local1.mass = m_mass;
_local1.I = m_I;
_local1.center = GetWorldCenter();
return (_local1);
}
public function IsSleeping():Boolean{
return (((m_flags & e_sleepFlag) == e_sleepFlag));
}
b2internal function SynchronizeTransform():void{
var _local1:b2Mat22;
var _local2:b2Vec2;
m_xf.R.Set(m_sweep.a);
_local1 = m_xf.R;
_local2 = m_sweep.localCenter;
m_xf.position.x = (m_sweep.c.x - ((_local1.col1.x * _local2.x) + (_local1.col2.x * _local2.y)));
m_xf.position.y = (m_sweep.c.y - ((_local1.col1.y * _local2.x) + (_local1.col2.y * _local2.y)));
}
public function PutToSleep():void{
m_flags = (m_flags | e_sleepFlag);
m_sleepTime = 0;
m_linearVelocity.SetZero();
m_angularVelocity = 0;
m_force.SetZero();
m_torque = 0;
}
public function GetControllerList():b2ControllerEdge{
return (m_controllerList);
}
public function SetMassFromShapes():void{
var _local1:b2Shape;
var _local2:Number;
var _local3:Number;
var _local4:b2MassData;
var _local5:b2Mat22;
var _local6:b2Vec2;
var _local7:int;
if (m_world.m_lock == true){
return;
};
m_mass = 0;
m_invMass = 0;
m_I = 0;
m_invI = 0;
_local2 = 0;
_local3 = 0;
_local4 = s_massData;
_local1 = m_shapeList;
while (_local1) {
_local1.ComputeMass(_local4);
m_mass = (m_mass + _local4.mass);
_local2 = (_local2 + (_local4.mass * _local4.center.x));
_local3 = (_local3 + (_local4.mass * _local4.center.y));
m_I = (m_I + _local4.I);
_local1 = _local1.m_next;
};
if (m_mass > 0){
m_invMass = (1 / m_mass);
_local2 = (_local2 * m_invMass);
_local3 = (_local3 * m_invMass);
};
if ((((m_I > 0)) && (((m_flags & e_fixedRotationFlag) == 0)))){
m_I = (m_I - (m_mass * ((_local2 * _local2) + (_local3 * _local3))));
m_invI = (1 / m_I);
} else {
m_I = 0;
m_invI = 0;
};
m_sweep.localCenter.Set(_local2, _local3);
_local5 = m_xf.R;
_local6 = m_sweep.localCenter;
m_sweep.c.x = ((_local5.col1.x * _local6.x) + (_local5.col2.x * _local6.y));
m_sweep.c.y = ((_local5.col1.y * _local6.x) + (_local5.col2.y * _local6.y));
m_sweep.c.x = (m_sweep.c.x + m_xf.position.x);
m_sweep.c.y = (m_sweep.c.y + m_xf.position.y);
m_sweep.c0.SetV(m_sweep.c);
_local1 = m_shapeList;
while (_local1) {
_local1.UpdateSweepRadius(m_sweep.localCenter);
_local1 = _local1.m_next;
};
_local7 = m_type;
if ((((m_invMass == 0)) && ((m_invI == 0)))){
m_type = e_staticType;
} else {
m_type = e_dynamicType;
};
if (_local7 != m_type){
_local1 = m_shapeList;
while (_local1) {
_local1.RefilterProxy(m_world.m_broadPhase, m_xf);
_local1 = _local1.m_next;
};
};
}
public function SetXForm(_arg1:b2XForm):Boolean{
return (SetPositionAndAngle(_arg1.position, _arg1.GetAngle()));
}
public function SetAngularVelocity(_arg1:Number):void{
m_angularVelocity = _arg1;
}
b2internal function SynchronizeShapes():Boolean{
var _local1:b2XForm;
var _local2:b2Mat22;
var _local3:b2Vec2;
var _local4:b2Shape;
var _local5:Boolean;
_local1 = s_xf1;
_local1.R.Set(m_sweep.a0);
_local2 = _local1.R;
_local3 = m_sweep.localCenter;
_local1.position.x = (m_sweep.c0.x - ((_local2.col1.x * _local3.x) + (_local2.col2.x * _local3.y)));
_local1.position.y = (m_sweep.c0.y - ((_local2.col1.y * _local3.x) + (_local2.col2.y * _local3.y)));
_local5 = true;
_local4 = m_shapeList;
while (_local4) {
_local5 = _local4.Synchronize(m_world.m_broadPhase, _local1, m_xf);
if (_local5 == false){
break;
};
_local4 = _local4.m_next;
};
if (_local5 == false){
m_flags = (m_flags | e_frozenFlag);
m_linearVelocity.SetZero();
m_angularVelocity = 0;
_local4 = m_shapeList;
while (_local4) {
_local4.DestroyProxy(m_world.m_broadPhase);
_local4 = _local4.m_next;
};
return (false);
};
return (true);
}
public function ApplyForce(_arg1:b2Vec2, _arg2:b2Vec2):void{
if (IsSleeping()){
WakeUp();
};
m_force.x = (m_force.x + _arg1.x);
m_force.y = (m_force.y + _arg1.y);
m_torque = (m_torque + (((_arg2.x - m_sweep.c.x) * _arg1.y) - ((_arg2.y - m_sweep.c.y) * _arg1.x)));
}
public function GetLinearVelocityFromLocalPoint(_arg1:b2Vec2):b2Vec2{
var _local2:b2Mat22;
var _local3:b2Vec2;
_local2 = m_xf.R;
_local3 = new b2Vec2(((_local2.col1.x * _arg1.x) + (_local2.col2.x * _arg1.y)), ((_local2.col1.y * _arg1.x) + (_local2.col2.y * _arg1.y)));
_local3.x = (_local3.x + m_xf.position.x);
_local3.y = (_local3.y + m_xf.position.y);
return (new b2Vec2((m_linearVelocity.x - (m_angularVelocity * (_local3.y - m_sweep.c.y))), (m_linearVelocity.y + (m_angularVelocity * (_local3.x - m_sweep.c.x)))));
}
public function GetShapeList():b2Shape{
return (m_shapeList);
}
public function GetMass():Number{
return (m_mass);
}
public function GetAngle():Number{
return (m_sweep.a);
}
public function SetStatic():void{
var _local1:b2Shape;
if (m_type == e_staticType){
return;
};
m_mass = 0;
m_invMass = 0;
m_I = 0;
m_invI = 0;
m_type = e_staticType;
_local1 = m_shapeList;
while (_local1) {
_local1.RefilterProxy(m_world.m_broadPhase, m_xf);
_local1 = _local1.m_next;
};
}
public function SetMass(_arg1:b2MassData):void{
var _local2:b2Shape;
var _local3:b2Mat22;
var _local4:b2Vec2;
var _local5:int;
if (m_world.m_lock == true){
return;
};
m_invMass = 0;
m_I = 0;
m_invI = 0;
m_mass = _arg1.mass;
if (m_mass > 0){
m_invMass = (1 / m_mass);
};
m_I = _arg1.I;
if ((((m_I > 0)) && (((m_flags & b2Body.e_fixedRotationFlag) == 0)))){
m_invI = (1 / m_I);
};
m_sweep.localCenter.SetV(_arg1.center);
_local3 = m_xf.R;
_local4 = m_sweep.localCenter;
m_sweep.c.x = ((_local3.col1.x * _local4.x) + (_local3.col2.x * _local4.y));
m_sweep.c.y = ((_local3.col1.y * _local4.x) + (_local3.col2.y * _local4.y));
m_sweep.c.x = (m_sweep.c.x + m_xf.position.x);
m_sweep.c.y = (m_sweep.c.y + m_xf.position.y);
m_sweep.c0.SetV(m_sweep.c);
_local2 = m_shapeList;
while (_local2) {
_local2.UpdateSweepRadius(m_sweep.localCenter);
_local2 = _local2.m_next;
};
_local5 = m_type;
if ((((m_invMass == 0)) && ((m_invI == 0)))){
m_type = e_staticType;
} else {
m_type = e_dynamicType;
};
if (_local5 != m_type){
_local2 = m_shapeList;
while (_local2) {
_local2.RefilterProxy(m_world.m_broadPhase, m_xf);
_local2 = _local2.m_next;
};
};
}
public function IsStatic():Boolean{
return ((m_type == e_staticType));
}
public function GetWorldVector(_arg1:b2Vec2):b2Vec2{
return (b2Math.b2MulMV(m_xf.R, _arg1));
}
public function GetNext():b2Body{
return (m_next);
}
b2internal function Advance(_arg1:Number):void{
m_sweep.Advance(_arg1);
m_sweep.c.SetV(m_sweep.c0);
m_sweep.a = m_sweep.a0;
SynchronizeTransform();
}
public function GetUserData(){
return (m_userData);
}
public function GetWorldCenter():b2Vec2{
return (m_sweep.c);
}
public function SetUserData(_arg1):void{
m_userData = _arg1;
}
public function GetLocalVector(_arg1:b2Vec2):b2Vec2{
return (b2Math.b2MulTMV(m_xf.R, _arg1));
}
public function GetPosition():b2Vec2{
return (m_xf.position);
}
public function GetLinearVelocityFromWorldPoint(_arg1:b2Vec2):b2Vec2{
return (new b2Vec2((m_linearVelocity.x - (m_angularVelocity * (_arg1.y - m_sweep.c.y))), (m_linearVelocity.y + (m_angularVelocity * (_arg1.x - m_sweep.c.x)))));
}
public function WakeUp():void{
m_flags = (m_flags & ~(e_sleepFlag));
m_sleepTime = 0;
}
public function GetLinearDamping():Number{
return (m_linearDamping);
}
public function GetLocalCenter():b2Vec2{
return (m_sweep.localCenter);
}
public function SetPosition(_arg1:b2Vec2):void{
SetPositionAndAngle(_arg1, GetAngle());
}
private function connectEdges(_arg1:b2EdgeShape, _arg2:b2EdgeShape, _arg3:Number):Number{
var _local4:Number;
var _local5:Number;
var _local6:b2Vec2;
var _local7:b2Vec2;
var _local8:Boolean;
_local4 = Math.atan2(_arg2.GetDirectionVector().y, _arg2.GetDirectionVector().x);
_local5 = Math.tan(((_local4 - _arg3) * 0.5));
_local6 = b2Math.MulFV(_local5, _arg2.GetDirectionVector());
_local6 = b2Math.SubtractVV(_local6, _arg2.GetNormalVector());
_local6 = b2Math.MulFV(b2Settings.b2_toiSlop, _local6);
_local6 = b2Math.AddVV(_local6, _arg2.GetVertex1());
_local7 = b2Math.AddVV(_arg1.GetDirectionVector(), _arg2.GetDirectionVector());
_local7.Normalize();
_local8 = (b2Math.b2Dot(_arg1.GetDirectionVector(), _arg2.GetNormalVector()) > 0);
_arg1.SetNextEdge(_arg2, _local6, _local7, _local8);
_arg2.SetPrevEdge(_arg1, _local6, _local7, _local8);
return (_local4);
}
public function IsFrozen():Boolean{
return (((m_flags & e_frozenFlag) == e_frozenFlag));
}
public function IsDynamic():Boolean{
return ((m_type == e_dynamicType));
}
public function GetAngularDamping():Number{
return (m_angularDamping);
}
public function SetAngularDamping(_arg1:Number):void{
m_angularDamping = _arg1;
}
public function GetInertia():Number{
return (m_I);
}
public function SetAngle(_arg1:Number):void{
SetPositionAndAngle(GetPosition(), _arg1);
}
public function GetJointList():b2JointEdge{
return (m_jointList);
}
public function GetLocalPoint(_arg1:b2Vec2):b2Vec2{
return (b2Math.b2MulXT(m_xf, _arg1));
}
public function GetXForm():b2XForm{
return (m_xf);
}
public function ApplyImpulse(_arg1:b2Vec2, _arg2:b2Vec2):void{
if (IsSleeping()){
WakeUp();
};
m_linearVelocity.x = (m_linearVelocity.x + (m_invMass * _arg1.x));
m_linearVelocity.y = (m_linearVelocity.y + (m_invMass * _arg1.y));
m_angularVelocity = (m_angularVelocity + (m_invI * (((_arg2.x - m_sweep.c.x) * _arg1.y) - ((_arg2.y - m_sweep.c.y) * _arg1.x))));
}
public function GetAngularVelocity():Number{
return (m_angularVelocity);
}
b2internal function IsConnected(_arg1:b2Body):Boolean{
var _local2:b2JointEdge;
_local2 = m_jointList;
while (_local2) {
if (_local2.other == _arg1){
return ((_local2.joint.m_collideConnected == false));
};
_local2 = _local2.next;
};
return (false);
}
public function SetBullet(_arg1:Boolean):void{
if (_arg1){
m_flags = (m_flags | e_bulletFlag);
} else {
m_flags = (m_flags & ~(e_bulletFlag));
};
}
public function CreateShape(_arg1:b2ShapeDef):b2Shape{
var _local2:b2Shape;
var _local3:b2EdgeChainDef;
var _local4:b2Vec2;
var _local5:b2Vec2;
var _local6:int;
var _local7:b2EdgeShape;
var _local8:b2EdgeShape;
var _local9:b2EdgeShape;
var _local10:Number;
if (m_world.m_lock == true){
return (null);
};
if (_arg1.type == b2Shape.e_edgeShape){
_local3 = (_arg1 as b2EdgeChainDef);
if (_local3.isALoop){
_local4 = _local3.vertices[(_local3.vertexCount - 1)];
_local6 = 0;
} else {
_local4 = _local3.vertices[0];
_local6 = 1;
};
_local7 = null;
_local8 = null;
_local9 = null;
_local10 = 0;
while (_local6 < _local3.vertexCount) {
_local5 = _local3.vertices[_local6];
_local9 = new b2EdgeShape(_local4, _local5, _arg1);
_local9.m_next = m_shapeList;
m_shapeList = _local9;
m_shapeCount++;
_local9.m_body = this;
_local9.CreateProxy(m_world.m_broadPhase, m_xf);
_local9.UpdateSweepRadius(m_sweep.localCenter);
if (_local8 == null){
_local7 = _local9;
_local10 = Math.atan2(_local9.GetDirectionVector().y, _local9.GetDirectionVector().x);
} else {
_local10 = connectEdges(_local8, _local9, _local10);
};
_local8 = _local9;
_local4 = _local5;
_local6++;
};
if (_local3.isALoop){
connectEdges(_local8, _local7, _local10);
};
return (_local7);
};
_local2 = b2Shape.Create(_arg1, m_world.m_blockAllocator);
_local2.m_next = m_shapeList;
m_shapeList = _local2;
m_shapeCount++;
_local2.m_body = this;
_local2.CreateProxy(m_world.m_broadPhase, m_xf);
_local2.UpdateSweepRadius(m_sweep.localCenter);
_local2.userData = _arg1.userData;
return (_local2);
}
public function DestroyShape(_arg1:b2Shape):void{
var _local2:b2Shape;
var _local3:b2Shape;
var _local4:Boolean;
if (m_world.m_lock == true){
return;
};
_arg1.DestroyProxy(m_world.m_broadPhase);
_local2 = m_shapeList;
_local3 = null;
_local4 = false;
while (_local2 != null) {
if (_local2 == _arg1){
if (_local3){
_local3.m_next = _arg1.m_next;
} else {
m_shapeList = _arg1.m_next;
};
_local4 = true;
break;
};
_local3 = _local2;
_local2 = _local2.m_next;
};
_arg1.m_body = null;
_arg1.m_next = null;
m_shapeCount--;
b2Shape.Destroy(_arg1, m_world.m_blockAllocator);
}
public function IsFixedRotation():Boolean{
return (((m_flags & e_fixedRotationFlag) == e_fixedRotationFlag));
}
public function IsAllowSleeping():Boolean{
return (((m_flags & e_allowSleepFlag) == e_allowSleepFlag));
}
public function IsBullet():Boolean{
return (((m_flags & e_bulletFlag) == e_bulletFlag));
}
public function SetPositionAndAngle(_arg1:b2Vec2, _arg2:Number):Boolean{
var _local3:b2Shape;
var _local4:b2Mat22;
var _local5:b2Vec2;
var _local6:Boolean;
var _local7:Boolean;
if (m_world.m_lock == true){
return (true);
};
if (IsFrozen()){
return (false);
};
m_xf.R.Set(_arg2);
m_xf.position.SetV(_arg1);
_local4 = m_xf.R;
_local5 = m_sweep.localCenter;
m_sweep.c.x = ((_local4.col1.x * _local5.x) + (_local4.col2.x * _local5.y));
m_sweep.c.y = ((_local4.col1.y * _local5.x) + (_local4.col2.y * _local5.y));
m_sweep.c.x = (m_sweep.c.x + m_xf.position.x);
m_sweep.c.y = (m_sweep.c.y + m_xf.position.y);
m_sweep.c0.SetV(m_sweep.c);
m_sweep.a0 = (m_sweep.a = _arg2);
_local6 = false;
_local3 = m_shapeList;
while (_local3) {
_local7 = _local3.Synchronize(m_world.m_broadPhase, m_xf, m_xf);
if (_local7 == false){
_local6 = true;
break;
};
_local3 = _local3.m_next;
};
if (_local6 == true){
m_flags = (m_flags | e_frozenFlag);
m_linearVelocity.SetZero();
m_angularVelocity = 0;
_local3 = m_shapeList;
while (_local3) {
_local3.DestroyProxy(m_world.m_broadPhase);
_local3 = _local3.m_next;
};
return (false);
};
m_world.m_broadPhase.Commit();
return (true);
}
public function SetFixedRotation(_arg1:Boolean):void{
if (_arg1){
m_angularVelocity = 0;
m_invI = 0;
m_flags = (m_flags | e_fixedRotationFlag);
} else {
if (m_I > 0){
m_invI = (1 / m_I);
m_flags = (m_flags & e_fixedRotationFlag);
};
};
}
public function AllowSleeping(_arg1:Boolean):void{
if (_arg1){
m_flags = (m_flags | e_allowSleepFlag);
} else {
m_flags = (m_flags & ~(e_allowSleepFlag));
WakeUp();
};
}
public function GetLinearVelocity():b2Vec2{
return (m_linearVelocity);
}
public function GetWorldPoint(_arg1:b2Vec2):b2Vec2{
var _local2:b2Mat22;
var _local3:b2Vec2;
_local2 = m_xf.R;
_local3 = new b2Vec2(((_local2.col1.x * _arg1.x) + (_local2.col2.x * _arg1.y)), ((_local2.col1.y * _arg1.x) + (_local2.col2.y * _arg1.y)));
_local3.x = (_local3.x + m_xf.position.x);
_local3.y = (_local3.y + m_xf.position.y);
return (_local3);
}
public function GetWorld():b2World{
return (m_world);
}
public function ApplyTorque(_arg1:Number):void{
if (IsSleeping()){
WakeUp();
};
m_torque = (m_torque + _arg1);
}
}
}//package Box2D.Dynamics
Section 77
//b2BodyDef (Box2D.Dynamics.b2BodyDef)
package Box2D.Dynamics {
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
public class b2BodyDef {
public var massData:b2MassData;
public var isBullet:Boolean;
public var allowSleep:Boolean;
public var angle:Number;
public var userData;
public var angularDamping:Number;
public var fixedRotation:Boolean;
public var linearDamping:Number;
public var angularVelocity:Number;
public var linearVelocity:b2Vec2;
public var position:b2Vec2;
public var isSleeping:Boolean;
public function b2BodyDef(){
massData = new b2MassData();
position = new b2Vec2();
linearVelocity = new b2Vec2();
super();
massData.center.SetZero();
massData.mass = 0;
massData.I = 0;
userData = null;
position.Set(0, 0);
angle = 0;
linearVelocity.Set(0, 0);
angularVelocity = 0;
linearDamping = 0;
angularDamping = 0;
allowSleep = true;
isSleeping = false;
fixedRotation = false;
isBullet = false;
}
}
}//package Box2D.Dynamics
Section 78
//b2BoundaryListener (Box2D.Dynamics.b2BoundaryListener)
package Box2D.Dynamics {
public class b2BoundaryListener {
public function Violation(_arg1:b2Body):void{
}
}
}//package Box2D.Dynamics
Section 79
//b2ContactFilter (Box2D.Dynamics.b2ContactFilter)
package Box2D.Dynamics {
import Box2D.Collision.Shapes.*;
import Box2D.Common.*;
public class b2ContactFilter {
b2internal static var b2_defaultFilter:b2ContactFilter = new (b2ContactFilter);
;
public function RayCollide(_arg1, _arg2:b2Shape):Boolean{
if (!_arg1){
return (true);
};
return (ShouldCollide((_arg1 as b2Shape), _arg2));
}
public function ShouldCollide(_arg1:b2Shape, _arg2:b2Shape):Boolean{
var _local3:b2FilterData;
var _local4:b2FilterData;
var _local5:Boolean;
_local3 = _arg1.GetFilterData();
_local4 = _arg2.GetFilterData();
if ((((_local3.groupIndex == _local4.groupIndex)) && (!((_local3.groupIndex == 0))))){
return ((_local3.groupIndex > 0));
};
_local5 = ((!(((_local3.maskBits & _local4.categoryBits) == 0))) && (!(((_local3.categoryBits & _local4.maskBits) == 0))));
return (_local5);
}
}
}//package Box2D.Dynamics
Section 80
//b2ContactListener (Box2D.Dynamics.b2ContactListener)
package Box2D.Dynamics {
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
import Box2D.Collision.*;
import Box2D.Dynamics.Contacts.*;
import Box2D.Common.*;
import Box2D.*;
public class b2ContactListener {
public function Add(_arg1:b2ContactPoint):void{
}
public function Remove(_arg1:b2ContactPoint):void{
if (_arg1.shape1.userData.isGrenade){
_arg1.shape1.userData.isOnGround = false;
};
if (_arg1.shape2.userData.isGrenade){
_arg1.shape2.userData.isOnGround = false;
};
}
public function Persist(_arg1:b2ContactPoint):void{
if (_arg1.shape1.userData.isGrenade){
_arg1.shape1.userData.isOnGround = true;
};
if (_arg1.shape2.userData.isGrenade){
_arg1.shape2.userData.isOnGround = true;
};
}
public function Result(_arg1:b2ContactResult):void{
}
}
}//package Box2D.Dynamics
Section 81
//b2ContactManager (Box2D.Dynamics.b2ContactManager)
package Box2D.Dynamics {
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
import Box2D.Collision.*;
import Box2D.Dynamics.Contacts.*;
import Box2D.Common.*;
public class b2ContactManager extends b2PairCallback {
b2internal var m_world:b2World;
private var m_destroyImmediate:Boolean;
private var m_nullContact:b2NullContact;
private static const s_evalCP:b2ContactPoint = new b2ContactPoint();
public function b2ContactManager(){
m_nullContact = new b2NullContact();
super();
m_world = null;
m_destroyImmediate = false;
}
override public function PairAdded(_arg1, _arg2){
var _local3:b2Shape;
var _local4:b2Shape;
var _local5:b2Body;
var _local6:b2Body;
var _local7:b2Contact;
_local3 = (_arg1 as b2Shape);
_local4 = (_arg2 as b2Shape);
_local5 = _local3.m_body;
_local6 = _local4.m_body;
if (((_local5.IsStatic()) && (_local6.IsStatic()))){
return (m_nullContact);
};
if (_local3.m_body == _local4.m_body){
return (m_nullContact);
};
if (_local6.IsConnected(_local5)){
return (m_nullContact);
};
if (((!((m_world.m_contactFilter == null))) && ((m_world.m_contactFilter.ShouldCollide(_local3, _local4) == false)))){
return (m_nullContact);
};
_local7 = b2Contact.Create(_local3, _local4, m_world.m_blockAllocator);
if (_local7 == null){
return (m_nullContact);
};
_local3 = _local7.m_shape1;
_local4 = _local7.m_shape2;
_local5 = _local3.m_body;
_local6 = _local4.m_body;
_local7.m_prev = null;
_local7.m_next = m_world.m_contactList;
if (m_world.m_contactList != null){
m_world.m_contactList.m_prev = _local7;
};
m_world.m_contactList = _local7;
_local7.m_node1.contact = _local7;
_local7.m_node1.other = _local6;
_local7.m_node1.prev = null;
_local7.m_node1.next = _local5.m_contactList;
if (_local5.m_contactList != null){
_local5.m_contactList.prev = _local7.m_node1;
};
_local5.m_contactList = _local7.m_node1;
_local7.m_node2.contact = _local7;
_local7.m_node2.other = _local5;
_local7.m_node2.prev = null;
_local7.m_node2.next = _local6.m_contactList;
if (_local6.m_contactList != null){
_local6.m_contactList.prev = _local7.m_node2;
};
_local6.m_contactList = _local7.m_node2;
m_world.m_contactCount++;
return (_local7);
}
override public function PairRemoved(_arg1, _arg2, _arg3):void{
var _local4:b2Contact;
if (_arg3 == null){
return;
};
_local4 = (_arg3 as b2Contact);
if (_local4 == m_nullContact){
return;
};
Destroy(_local4);
}
public function Destroy(_arg1:b2Contact):void{
var _local2:b2Shape;
var _local3:b2Shape;
var _local4:b2Body;
var _local5:b2Body;
var _local6:b2ContactPoint;
var _local7:int;
var _local8:Array;
var _local9:int;
var _local10:b2Manifold;
var _local11:int;
var _local12:b2ManifoldPoint;
var _local13:b2Vec2;
var _local14:b2Vec2;
_local2 = _arg1.m_shape1;
_local3 = _arg1.m_shape2;
_local4 = _local2.m_body;
_local5 = _local3.m_body;
_local6 = s_evalCP;
_local6.shape1 = _arg1.m_shape1;
_local6.shape2 = _arg1.m_shape2;
_local6.friction = b2Settings.b2MixFriction(_local2.GetFriction(), _local3.GetFriction());
_local6.restitution = b2Settings.b2MixRestitution(_local2.GetRestitution(), _local3.GetRestitution());
_local7 = _arg1.m_manifoldCount;
if ((((_local7 > 0)) && (m_world.m_contactListener))){
_local8 = _arg1.GetManifolds();
_local9 = 0;
while (_local9 < _local7) {
_local10 = _local8[_local9];
_local6.normal.SetV(_local10.normal);
_local11 = 0;
while (_local11 < _local10.pointCount) {
_local12 = _local10.points[_local11];
_local6.position = _local4.GetWorldPoint(_local12.localPoint1);
_local13 = _local4.GetLinearVelocityFromLocalPoint(_local12.localPoint1);
_local14 = _local5.GetLinearVelocityFromLocalPoint(_local12.localPoint2);
_local6.velocity.Set((_local14.x - _local13.x), (_local14.y - _local13.y));
_local6.separation = _local12.separation;
_local6.id.key = _local12.id._key;
m_world.m_contactListener.Remove(_local6);
_local11++;
};
_local9++;
};
};
if (_arg1.m_prev){
_arg1.m_prev.m_next = _arg1.m_next;
};
if (_arg1.m_next){
_arg1.m_next.m_prev = _arg1.m_prev;
};
if (_arg1 == m_world.m_contactList){
m_world.m_contactList = _arg1.m_next;
};
if (_arg1.m_node1.prev){
_arg1.m_node1.prev.next = _arg1.m_node1.next;
};
if (_arg1.m_node1.next){
_arg1.m_node1.next.prev = _arg1.m_node1.prev;
};
if (_arg1.m_node1 == _local4.m_contactList){
_local4.m_contactList = _arg1.m_node1.next;
};
if (_arg1.m_node2.prev){
_arg1.m_node2.prev.next = _arg1.m_node2.next;
};
if (_arg1.m_node2.next){
_arg1.m_node2.next.prev = _arg1.m_node2.prev;
};
if (_arg1.m_node2 == _local5.m_contactList){
_local5.m_contactList = _arg1.m_node2.next;
};
b2Contact.Destroy(_arg1, m_world.m_blockAllocator);
m_world.m_contactCount--;
}
public function Collide():void{
var _local1:b2Contact;
var _local2:b2Body;
var _local3:b2Body;
_local1 = m_world.m_contactList;
while (_local1) {
_local2 = _local1.m_shape1.m_body;
_local3 = _local1.m_shape2.m_body;
if (((_local2.IsSleeping()) && (_local3.IsSleeping()))){
} else {
_local1.Update(m_world.m_contactListener);
};
_local1 = _local1.m_next;
};
}
}
}//package Box2D.Dynamics
Section 82
//b2DebugDraw (Box2D.Dynamics.b2DebugDraw)
package Box2D.Dynamics {
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
import Box2D.Collision.*;
import Box2D.Dynamics.Contacts.*;
import flash.display.*;
import Box2D.Common.*;
public class b2DebugDraw {
private var m_xformScale:Number;// = 1
private var m_fillAlpha:Number;// = 1
private var m_alpha:Number;// = 1
private var m_lineThickness:Number;// = 1
private var m_drawFlags:uint;
b2internal var m_sprite:Sprite;
private var m_drawScale:Number;// = 1
public static var e_coreShapeBit:uint = 4;
public static var e_shapeBit:uint = 1;
public static var e_centerOfMassBit:uint = 64;
public static var e_aabbBit:uint = 8;
public static var e_controllerBit:uint = 128;
public static var e_obbBit:uint = 16;
public static var e_pairBit:uint = 32;
public static var e_jointBit:uint = 2;
public function b2DebugDraw(){
m_drawScale = 1;
m_lineThickness = 1;
m_alpha = 1;
m_fillAlpha = 1;
m_xformScale = 1;
super();
m_drawFlags = 0;
}
public function SetDrawScale(_arg1:Number):void{
m_drawScale = _arg1;
}
public function GetFillAlpha():Number{
return (m_fillAlpha);
}
public function GetAlpha():Number{
return (m_alpha);
}
public function GetLineThickness():Number{
return (m_lineThickness);
}
public function GetDrawScale():Number{
return (m_drawScale);
}
public function DrawSolidPolygon(_arg1:Array, _arg2:int, _arg3:b2Color):void{
var _local4:int;
m_sprite.graphics.lineStyle(m_lineThickness, _arg3.color, m_alpha);
m_sprite.graphics.moveTo((_arg1[0].x * m_drawScale), (_arg1[0].y * m_drawScale));
m_sprite.graphics.beginFill(_arg3.color, m_fillAlpha);
_local4 = 1;
while (_local4 < _arg2) {
m_sprite.graphics.lineTo((_arg1[_local4].x * m_drawScale), (_arg1[_local4].y * m_drawScale));
_local4++;
};
m_sprite.graphics.lineTo((_arg1[0].x * m_drawScale), (_arg1[0].y * m_drawScale));
m_sprite.graphics.endFill();
}
public function DrawCircle(_arg1:b2Vec2, _arg2:Number, _arg3:b2Color):void{
m_sprite.graphics.lineStyle(m_lineThickness, _arg3.color, m_alpha);
m_sprite.graphics.drawCircle((_arg1.x * m_drawScale), (_arg1.y * m_drawScale), (_arg2 * m_drawScale));
}
public function DrawSolidCircle(_arg1:b2Vec2, _arg2:Number, _arg3:b2Vec2, _arg4:b2Color):void{
m_sprite.graphics.lineStyle(m_lineThickness, _arg4.color, m_alpha);
m_sprite.graphics.moveTo(0, 0);
m_sprite.graphics.beginFill(_arg4.color, m_fillAlpha);
m_sprite.graphics.drawCircle((_arg1.x * m_drawScale), (_arg1.y * m_drawScale), (_arg2 * m_drawScale));
m_sprite.graphics.endFill();
m_sprite.graphics.moveTo((_arg1.x * m_drawScale), (_arg1.y * m_drawScale));
m_sprite.graphics.lineTo(((_arg1.x + (_arg3.x * _arg2)) * m_drawScale), ((_arg1.y + (_arg3.y * _arg2)) * m_drawScale));
}
public function DrawXForm(_arg1:b2XForm):void{
m_sprite.graphics.lineStyle(m_lineThickness, 0xFF0000, m_alpha);
m_sprite.graphics.moveTo((_arg1.position.x * m_drawScale), (_arg1.position.y * m_drawScale));
m_sprite.graphics.lineTo(((_arg1.position.x + (m_xformScale * _arg1.R.col1.x)) * m_drawScale), ((_arg1.position.y + (m_xformScale * _arg1.R.col1.y)) * m_drawScale));
m_sprite.graphics.lineStyle(m_lineThickness, 0xFF00, m_alpha);
m_sprite.graphics.moveTo((_arg1.position.x * m_drawScale), (_arg1.position.y * m_drawScale));
m_sprite.graphics.lineTo(((_arg1.position.x + (m_xformScale * _arg1.R.col2.x)) * m_drawScale), ((_arg1.position.y + (m_xformScale * _arg1.R.col2.y)) * m_drawScale));
}
public function ClearFlags(_arg1:uint):void{
m_drawFlags = (m_drawFlags & ~(_arg1));
}
public function GetSprite():Sprite{
return (m_sprite);
}
public function GetXFormScale():Number{
return (m_xformScale);
}
public function SetFlags(_arg1:uint):void{
m_drawFlags = _arg1;
}
public function SetSprite(_arg1:Sprite):void{
m_sprite = _arg1;
}
public function AppendFlags(_arg1:uint):void{
m_drawFlags = (m_drawFlags | _arg1);
}
public function DrawSegment(_arg1:b2Vec2, _arg2:b2Vec2, _arg3:b2Color):void{
m_sprite.graphics.lineStyle(m_lineThickness, _arg3.color, m_alpha);
m_sprite.graphics.moveTo((_arg1.x * m_drawScale), (_arg1.y * m_drawScale));
m_sprite.graphics.lineTo((_arg2.x * m_drawScale), (_arg2.y * m_drawScale));
}
public function SetXFormScale(_arg1:Number):void{
m_xformScale = _arg1;
}
public function GetFlags():uint{
return (m_drawFlags);
}
public function DrawPolygon(_arg1:Array, _arg2:int, _arg3:b2Color):void{
var _local4:int;
m_sprite.graphics.lineStyle(m_lineThickness, _arg3.color, m_alpha);
m_sprite.graphics.moveTo((_arg1[0].x * m_drawScale), (_arg1[0].y * m_drawScale));
_local4 = 1;
while (_local4 < _arg2) {
m_sprite.graphics.lineTo((_arg1[_local4].x * m_drawScale), (_arg1[_local4].y * m_drawScale));
_local4++;
};
m_sprite.graphics.lineTo((_arg1[0].x * m_drawScale), (_arg1[0].y * m_drawScale));
}
public function SetFillAlpha(_arg1:Number):void{
m_fillAlpha = _arg1;
}
public function SetAlpha(_arg1:Number):void{
m_alpha = _arg1;
}
public function SetLineThickness(_arg1:Number):void{
m_lineThickness = _arg1;
}
}
}//package Box2D.Dynamics
Section 83
//b2DestructionListener (Box2D.Dynamics.b2DestructionListener)
package Box2D.Dynamics {
import Box2D.Collision.Shapes.*;
import Box2D.Dynamics.Joints.*;
public class b2DestructionListener {
public function SayGoodbyeJoint(_arg1:b2Joint):void{
}
public function SayGoodbyeShape(_arg1:b2Shape):void{
}
}
}//package Box2D.Dynamics
Section 84
//b2Island (Box2D.Dynamics.b2Island)
package Box2D.Dynamics {
import Box2D.Common.Math.*;
import Box2D.Dynamics.Joints.*;
import Box2D.Collision.*;
import Box2D.Dynamics.Contacts.*;
import Box2D.Common.*;
public class b2Island {
b2internal var m_joints:Array;
private var m_listener:b2ContactListener;
private var m_bodyCapacity:int;
b2internal var m_bodies:Array;
b2internal var m_jointCapacity:int;
b2internal var m_contactCount:int;
b2internal var m_contacts:Array;
b2internal var m_contactCapacity:int;
b2internal var m_jointCount:int;
private var m_allocator;
b2internal var m_bodyCount:int;
private static var s_reportCR:b2ContactResult = new b2ContactResult();
public function b2Island(_arg1:int, _arg2:int, _arg3:int, _arg4, _arg5:b2ContactListener){
var _local6:int;
super();
m_bodyCapacity = _arg1;
m_contactCapacity = _arg2;
m_jointCapacity = _arg3;
m_bodyCount = 0;
m_contactCount = 0;
m_jointCount = 0;
m_allocator = _arg4;
m_listener = _arg5;
m_bodies = new Array(_arg1);
_local6 = 0;
while (_local6 < _arg1) {
m_bodies[_local6] = null;
_local6++;
};
m_contacts = new Array(_arg2);
_local6 = 0;
while (_local6 < _arg2) {
m_contacts[_local6] = null;
_local6++;
};
m_joints = new Array(_arg3);
_local6 = 0;
while (_local6 < _arg3) {
m_joints[_local6] = null;
_local6++;
};
}
public function AddBody(_arg1:b2Body):void{
_arg1.m_islandIndex = m_bodyCount;
var _local2 = m_bodyCount++;
m_bodies[_local2] = _arg1;
}
public function AddJoint(_arg1:b2Joint):void{
var _local2 = m_jointCount++;
m_joints[_local2] = _arg1;
}
public function Report(_arg1:Array):void{
var _local2:b2Mat22;
var _local3:b2Vec2;
var _local4:int;
var _local5:b2Contact;
var _local6:b2ContactConstraint;
var _local7:b2ContactResult;
var _local8:b2Body;
var _local9:int;
var _local10:Array;
var _local11:int;
var _local12:b2Manifold;
var _local13:int;
var _local14:b2ManifoldPoint;
var _local15:b2ContactConstraintPoint;
if (m_listener == null){
return;
};
_local4 = 0;
while (_local4 < m_contactCount) {
_local5 = m_contacts[_local4];
_local6 = _arg1[_local4];
_local7 = s_reportCR;
_local7.shape1 = _local5.m_shape1;
_local7.shape2 = _local5.m_shape2;
_local8 = _local7.shape1.m_body;
_local9 = _local5.m_manifoldCount;
_local10 = _local5.GetManifolds();
_local11 = 0;
while (_local11 < _local9) {
_local12 = _local10[_local11];
_local7.normal.SetV(_local12.normal);
_local13 = 0;
while (_local13 < _local12.pointCount) {
_local14 = _local12.points[_local13];
_local15 = _local6.points[_local13];
_local7.position = _local8.GetWorldPoint(_local14.localPoint1);
_local7.normalImpulse = _local15.normalImpulse;
_local7.tangentImpulse = _local15.tangentImpulse;
_local7.id.key = _local14.id.key;
m_listener.Result(_local7);
_local13++;
};
_local11++;
};
_local4++;
};
}
public function Solve(_arg1:b2TimeStep, _arg2:b2Vec2, _arg3:Boolean):void{
var _local4:int;
var _local5:int;
var _local6:b2Body;
var _local7:b2Joint;
var _local8:b2ContactSolver;
var _local9:b2Vec2;
var _local10:Number;
var _local11:Boolean;
var _local12:Boolean;
var _local13:Boolean;
var _local14:Number;
var _local15:Number;
var _local16:Number;
_local4 = 0;
while (_local4 < m_bodyCount) {
_local6 = m_bodies[_local4];
if (_local6.IsStatic()){
} else {
_local6.m_linearVelocity.x = (_local6.m_linearVelocity.x + (_arg1.dt * (_arg2.x + (_local6.m_invMass * _local6.m_force.x))));
_local6.m_linearVelocity.y = (_local6.m_linearVelocity.y + (_arg1.dt * (_arg2.y + (_local6.m_invMass * _local6.m_force.y))));
_local6.m_angularVelocity = (_local6.m_angularVelocity + ((_arg1.dt * _local6.m_invI) * _local6.m_torque));
_local6.m_force.SetZero();
_local6.m_torque = 0;
_local6.m_linearVelocity.Multiply(b2Math.b2Clamp((1 - (_arg1.dt * _local6.m_linearDamping)), 0, 1));
_local6.m_angularVelocity = (_local6.m_angularVelocity * b2Math.b2Clamp((1 - (_arg1.dt * _local6.m_angularDamping)), 0, 1));
};
_local4++;
};
_local8 = new b2ContactSolver(_arg1, m_contacts, m_contactCount, m_allocator);
_local8.InitVelocityConstraints(_arg1);
_local4 = 0;
while (_local4 < m_jointCount) {
_local7 = m_joints[_local4];
_local7.InitVelocityConstraints(_arg1);
_local4++;
};
_local4 = 0;
while (_local4 < _arg1.velocityIterations) {
_local5 = 0;
while (_local5 < m_jointCount) {
_local7 = m_joints[_local5];
_local7.SolveVelocityConstraints(_arg1);
_local5++;
};
_local8.SolveVelocityConstraints();
_local4++;
};
_local8.FinalizeVelocityConstraints();
_local4 = 0;
while (_local4 < m_bodyCount) {
_local6 = m_bodies[_local4];
if (_local6.IsStatic()){
} else {
_local9 = b2Math.MulFV(_arg1.dt, _local6.m_linearVelocity);
if (_local9.LengthSquared() > b2Settings.b2_maxTranslationSquared){
_local6.m_linearVelocity.Normalize();
_local6.m_linearVelocity.x = (_local6.m_linearVelocity.x * (b2Settings.b2_maxTranslation * _arg1.inv_dt));
_local6.m_linearVelocity.y = (_local6.m_linearVelocity.y * (b2Settings.b2_maxTranslation * _arg1.inv_dt));
};
_local10 = (_arg1.dt * _local6.m_angularVelocity);
if (((_arg1.dt * _local6.m_angularVelocity) * _local10) > b2Settings.b2_maxRotationSquared){
if (_local6.m_angularVelocity < 0){
_local6.m_angularVelocity = (-(b2Settings.b2_maxRotation) * _arg1.inv_dt);
} else {
_local6.m_angularVelocity = (b2Settings.b2_maxRotation * _arg1.inv_dt);
};
};
_local6.m_sweep.c0.SetV(_local6.m_sweep.c);
_local6.m_sweep.a0 = _local6.m_sweep.a;
_local6.m_sweep.c.x = (_local6.m_sweep.c.x + (_arg1.dt * _local6.m_linearVelocity.x));
_local6.m_sweep.c.y = (_local6.m_sweep.c.y + (_arg1.dt * _local6.m_linearVelocity.y));
_local6.m_sweep.a = (_local6.m_sweep.a + (_arg1.dt * _local6.m_angularVelocity));
_local6.SynchronizeTransform();
};
_local4++;
};
_local4 = 0;
while (_local4 < _arg1.positionIterations) {
_local11 = _local8.SolvePositionConstraints(b2Settings.b2_contactBaumgarte);
_local12 = true;
_local5 = 0;
while (_local5 < m_jointCount) {
_local7 = m_joints[_local5];
_local13 = _local7.SolvePositionConstraints(b2Settings.b2_contactBaumgarte);
_local12 = ((_local12) && (_local13));
_local5++;
};
if (((_local11) && (_local12))){
break;
};
_local4++;
};
Report(_local8.m_constraints);
if (_arg3){
_local14 = Number.MAX_VALUE;
_local15 = (b2Settings.b2_linearSleepTolerance * b2Settings.b2_linearSleepTolerance);
_local16 = (b2Settings.b2_angularSleepTolerance * b2Settings.b2_angularSleepTolerance);
_local4 = 0;
while (_local4 < m_bodyCount) {
_local6 = m_bodies[_local4];
if (_local6.m_invMass == 0){
} else {
if ((_local6.m_flags & b2Body.e_allowSleepFlag) == 0){
_local6.m_sleepTime = 0;
_local14 = 0;
};
if (((((((_local6.m_flags & b2Body.e_allowSleepFlag) == 0)) || (((_local6.m_angularVelocity * _local6.m_angularVelocity) > _local16)))) || ((b2Math.b2Dot(_local6.m_linearVelocity, _local6.m_linearVelocity) > _local15)))){
_local6.m_sleepTime = 0;
_local14 = 0;
} else {
_local6.m_sleepTime = (_local6.m_sleepTime + _arg1.dt);
_local14 = b2Math.b2Min(_local14, _local6.m_sleepTime);
};
};
_local4++;
};
if (_local14 >= b2Settings.b2_timeToSleep){
_local4 = 0;
while (_local4 < m_bodyCount) {
_local6 = m_bodies[_local4];
m_bodies[_local4].m_flags = (_local6.m_flags | b2Body.e_sleepFlag);
_local6.m_linearVelocity.SetZero();
_local6.m_angularVelocity = 0;
_local4++;
};
};
};
}
public function AddContact(_arg1:b2Contact):void{
var _local2 = m_contactCount++;
m_contacts[_local2] = _arg1;
}
public function Clear():void{
m_bodyCount = 0;
m_contactCount = 0;
m_jointCount = 0;
}
public function SolveTOI(_arg1:b2TimeStep):void{
var _local2:int;
var _local3:int;
var _local4:b2ContactSolver;
var _local5:Number;
var _local6:b2Body;
var _local7:b2Vec2;
var _local8:Number;
var _local9:Boolean;
var _local10:Boolean;
var _local11:Boolean;
_local4 = new b2ContactSolver(_arg1, m_contacts, m_contactCount, m_allocator);
_arg1.warmStarting = true;
_local2 = 0;
while (_local2 < m_jointCount) {
m_joints[_local2].InitVelocityConstraints(_arg1);
_local2++;
};
_local2 = 0;
while (_local2 < _arg1.velocityIterations) {
_local4.SolveVelocityConstraints();
_local3 = 0;
while (_local3 < m_jointCount) {
m_joints[_local3].InitVelocityConstraints(_arg1);
_local3++;
};
_local2++;
};
_local2 = 0;
while (_local2 < m_bodyCount) {
_local6 = m_bodies[_local2];
if (_local6.IsStatic()){
} else {
_local7 = b2Math.MulFV(_arg1.dt, _local6.m_linearVelocity);
if (_local7.LengthSquared() > b2Settings.b2_maxTranslationSquared){
_local6.m_linearVelocity.Normalize();
_local6.m_linearVelocity.x = (_local6.m_linearVelocity.x * (b2Settings.b2_maxTranslation * _arg1.inv_dt));
_local6.m_linearVelocity.y = (_local6.m_linearVelocity.y * (b2Settings.b2_maxTranslation * _arg1.inv_dt));
};
_local8 = (_arg1.dt * _local6.m_angularVelocity);
if (((_arg1.dt * _local6.m_angularVelocity) * _local8) > b2Settings.b2_maxRotationSquared){
if (_local6.m_angularVelocity < 0){
_local6.m_angularVelocity = (-(b2Settings.b2_maxRotation) * _arg1.inv_dt);
} else {
_local6.m_angularVelocity = (b2Settings.b2_maxRotation * _arg1.inv_dt);
};
};
_local6.m_sweep.c0.SetV(_local6.m_sweep.c);
_local6.m_sweep.a0 = _local6.m_sweep.a;
_local6.m_sweep.c.x = (_local6.m_sweep.c.x + (_arg1.dt * _local6.m_linearVelocity.x));
_local6.m_sweep.c.y = (_local6.m_sweep.c.y + (_arg1.dt * _local6.m_linearVelocity.y));
_local6.m_sweep.a = (_local6.m_sweep.a + (_arg1.dt * _local6.m_angularVelocity));
_local6.SynchronizeTransform();
};
_local2++;
};
_local5 = 0.75;
_local2 = 0;
while (_local2 < _arg1.positionIterations) {
_local9 = _local4.SolvePositionConstraints(_local5);
_local10 = true;
_local3 = 0;
while (_local3 < m_jointCount) {
_local11 = m_joints[_local3].SolvePositionConstraints(b2Settings.b2_contactBaumgarte);
_local10 = ((_local10) && (_local11));
_local3++;
};
if (((_local9) && (_local10))){
break;
};
_local2++;
};
Report(_local4.m_constraints);
}
}
}//package Box2D.Dynamics
Section 85
//b2TimeStep (Box2D.Dynamics.b2TimeStep)
package Box2D.Dynamics {
public class b2TimeStep {
public var warmStarting:Boolean;
public var dt:Number;
public var velocityIterations:int;
public var dtRatio:Number;
public var inv_dt:Number;
public var positionIterations:int;
}
}//package Box2D.Dynamics
Section 86
//b2World (Box2D.Dynamics.b2World)
package Box2D.Dynamics {
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
import Box2D.Dynamics.Joints.*;
import Box2D.Dynamics.Controllers.*;
import Box2D.Collision.*;
import Box2D.Dynamics.Contacts.*;
import Box2D.Common.*;
public class b2World {
private var m_inv_dt0:Number;
private var m_boundaryListener:b2BoundaryListener;
private var m_controllerList:b2Controller;
private var m_controllerCount:int;
b2internal var m_contactList:b2Contact;
b2internal var m_blockAllocator;
b2internal var m_contactListener:b2ContactListener;
b2internal var m_raycastSegment:b2Segment;
b2internal var m_broadPhase:b2BroadPhase;
private var m_jointCount:int;
private var m_bodyCount:int;
private var m_destructionListener:b2DestructionListener;
b2internal var m_lock:Boolean;
b2internal var m_raycastUserData;
private var m_allowSleep:Boolean;
b2internal var m_groundBody:b2Body;
b2internal var m_contactCount:int;
b2internal var m_raycastNormal:b2Vec2;
b2internal var m_contactFilter:b2ContactFilter;
b2internal var m_bodyList:b2Body;
private var m_debugDraw:b2DebugDraw;
b2internal var m_stackAllocator;
private var m_jointList:b2Joint;
private var m_gravity:b2Vec2;
private var m_contactManager:b2ContactManager;
private static var s_xf:b2XForm = new b2XForm();
private static var s_jointColor:b2Color = new b2Color(0.5, 0.8, 0.8);
private static var m_continuousPhysics:Boolean;
private static var m_warmStarting:Boolean;
private static var s_coreColor:b2Color = new b2Color(0.9, 0.6, 0.6);
public function b2World(_arg1:b2AABB, _arg2:b2Vec2, _arg3:Boolean){
var _local4:b2BodyDef;
m_raycastNormal = new b2Vec2();
m_contactManager = new b2ContactManager();
super();
m_destructionListener = null;
m_boundaryListener = null;
m_contactFilter = b2ContactFilter.b2_defaultFilter;
m_contactListener = null;
m_debugDraw = null;
m_bodyList = null;
m_contactList = null;
m_jointList = null;
m_controllerList = null;
m_bodyCount = 0;
m_contactCount = 0;
m_jointCount = 0;
m_controllerCount = 0;
m_warmStarting = true;
m_continuousPhysics = true;
m_allowSleep = _arg3;
m_gravity = _arg2;
m_lock = false;
m_inv_dt0 = 0;
m_contactManager.m_world = this;
m_broadPhase = new b2BroadPhase(_arg1, m_contactManager);
_local4 = new b2BodyDef();
m_groundBody = CreateBody(_local4);
}
b2internal function DrawJoint(_arg1:b2Joint):void{
var _local2:b2Body;
var _local3:b2Body;
var _local4:b2XForm;
var _local5:b2XForm;
var _local6:b2Vec2;
var _local7:b2Vec2;
var _local8:b2Vec2;
var _local9:b2Vec2;
var _local10:b2Color;
var _local11:b2PulleyJoint;
var _local12:b2Vec2;
var _local13:b2Vec2;
_local2 = _arg1.m_body1;
_local3 = _arg1.m_body2;
_local4 = _local2.m_xf;
_local5 = _local3.m_xf;
_local6 = _local4.position;
_local7 = _local5.position;
_local8 = _arg1.GetAnchor1();
_local9 = _arg1.GetAnchor2();
_local10 = s_jointColor;
switch (_arg1.m_type){
case b2Joint.e_distanceJoint:
m_debugDraw.DrawSegment(_local8, _local9, _local10);
break;
case b2Joint.e_pulleyJoint:
_local11 = (_arg1 as b2PulleyJoint);
_local12 = _local11.GetGroundAnchor1();
_local13 = _local11.GetGroundAnchor2();
m_debugDraw.DrawSegment(_local12, _local8, _local10);
m_debugDraw.DrawSegment(_local13, _local9, _local10);
m_debugDraw.DrawSegment(_local12, _local13, _local10);
break;
case b2Joint.e_mouseJoint:
m_debugDraw.DrawSegment(_local8, _local9, _local10);
break;
default:
if (_local2 != m_groundBody){
m_debugDraw.DrawSegment(_local6, _local8, _local10);
};
m_debugDraw.DrawSegment(_local8, _local9, _local10);
if (_local3 != m_groundBody){
m_debugDraw.DrawSegment(_local7, _local9, _local10);
};
};
}
public function Refilter(_arg1:b2Shape):void{
_arg1.RefilterProxy(m_broadPhase, _arg1.m_body.m_xf);
}
public function SetDebugDraw(_arg1:b2DebugDraw):void{
m_debugDraw = _arg1;
}
public function SetContinuousPhysics(_arg1:Boolean):void{
m_continuousPhysics = _arg1;
}
public function GetProxyCount():int{
return (m_broadPhase.m_proxyCount);
}
b2internal function DrawDebugData():void{
var _local1:uint;
var _local2:int;
var _local3:b2Body;
var _local4:b2Shape;
var _local5:b2Joint;
var _local6:b2BroadPhase;
var _local7:b2Vec2;
var _local8:b2Vec2;
var _local9:b2Vec2;
var _local10:b2Color;
var _local11:b2XForm;
var _local12:b2AABB;
var _local13:b2AABB;
var _local14:Array;
var _local15:Boolean;
var _local16:b2Controller;
var _local17:b2Pair;
var _local18:b2Proxy;
var _local19:b2Proxy;
var _local20:b2Vec2;
var _local21:b2Vec2;
var _local22:b2Proxy;
var _local23:b2PolygonShape;
var _local24:b2OBB;
var _local25:b2Vec2;
var _local26:b2Mat22;
var _local27:b2Vec2;
var _local28:Number;
if (m_debugDraw == null){
return;
};
m_debugDraw.m_sprite.graphics.clear();
_local1 = m_debugDraw.GetFlags();
_local7 = new b2Vec2();
_local8 = new b2Vec2();
_local9 = new b2Vec2();
_local10 = new b2Color(0, 0, 0);
_local12 = new b2AABB();
_local13 = new b2AABB();
_local14 = [new b2Vec2(), new b2Vec2(), new b2Vec2(), new b2Vec2()];
if ((_local1 & b2DebugDraw.e_shapeBit)){
_local15 = ((_local1 & b2DebugDraw.e_coreShapeBit) == b2DebugDraw.e_coreShapeBit);
_local3 = m_bodyList;
while (_local3) {
_local11 = _local3.m_xf;
_local4 = _local3.GetShapeList();
while (_local4) {
if (_local3.IsStatic()){
DrawShape(_local4, _local11, new b2Color(0.5, 0.9, 0.5), _local15);
} else {
if (_local3.IsSleeping()){
DrawShape(_local4, _local11, new b2Color(0.5, 0.5, 0.9), _local15);
} else {
DrawShape(_local4, _local11, new b2Color(0.9, 0.9, 0.9), _local15);
};
};
_local4 = _local4.m_next;
};
_local3 = _local3.m_next;
};
};
if ((_local1 & b2DebugDraw.e_jointBit)){
_local5 = m_jointList;
while (_local5) {
DrawJoint(_local5);
_local5 = _local5.m_next;
};
};
if ((_local1 & b2DebugDraw.e_controllerBit)){
_local16 = m_controllerList;
while (_local16) {
_local16.Draw(m_debugDraw);
_local16 = _local16.m_next;
};
};
if ((_local1 & b2DebugDraw.e_pairBit)){
_local6 = m_broadPhase;
_local7.Set((1 / _local6.m_quantizationFactor.x), (1 / _local6.m_quantizationFactor.y));
_local10.Set(0.9, 0.9, 0.3);
for each (_local17 in _local6.m_pairManager.m_pairs) {
_local18 = _local17.proxy1;
_local19 = _local17.proxy2;
if (((!(_local18)) || (!(_local19)))){
} else {
_local12.lowerBound.x = (_local6.m_worldAABB.lowerBound.x + (_local7.x * _local6.m_bounds[0][_local18.lowerBounds[0]].value));
_local12.lowerBound.y = (_local6.m_worldAABB.lowerBound.y + (_local7.y * _local6.m_bounds[1][_local18.lowerBounds[1]].value));
_local12.upperBound.x = (_local6.m_worldAABB.lowerBound.x + (_local7.x * _local6.m_bounds[0][_local18.upperBounds[0]].value));
_local12.upperBound.y = (_local6.m_worldAABB.lowerBound.y + (_local7.y * _local6.m_bounds[1][_local18.upperBounds[1]].value));
_local13.lowerBound.x = (_local6.m_worldAABB.lowerBound.x + (_local7.x * _local6.m_bounds[0][_local19.lowerBounds[0]].value));
_local13.lowerBound.y = (_local6.m_worldAABB.lowerBound.y + (_local7.y * _local6.m_bounds[1][_local19.lowerBounds[1]].value));
_local13.upperBound.x = (_local6.m_worldAABB.lowerBound.x + (_local7.x * _local6.m_bounds[0][_local19.upperBounds[0]].value));
_local13.upperBound.y = (_local6.m_worldAABB.lowerBound.y + (_local7.y * _local6.m_bounds[1][_local19.upperBounds[1]].value));
_local8.x = (0.5 * (_local12.lowerBound.x + _local12.upperBound.x));
_local8.y = (0.5 * (_local12.lowerBound.y + _local12.upperBound.y));
_local9.x = (0.5 * (_local13.lowerBound.x + _local13.upperBound.x));
_local9.y = (0.5 * (_local13.lowerBound.y + _local13.upperBound.y));
m_debugDraw.DrawSegment(_local8, _local9, _local10);
};
};
};
if ((_local1 & b2DebugDraw.e_aabbBit)){
_local6 = m_broadPhase;
_local20 = _local6.m_worldAABB.lowerBound;
_local21 = _local6.m_worldAABB.upperBound;
_local7.Set((1 / _local6.m_quantizationFactor.x), (1 / _local6.m_quantizationFactor.y));
_local10.Set(0.9, 0.3, 0.9);
_local2 = 0;
while (_local2 < _local6.m_proxyPool.length) {
_local22 = _local6.m_proxyPool[_local2];
if (_local22.IsValid() == false){
} else {
_local12.lowerBound.x = (_local20.x + (_local7.x * _local6.m_bounds[0][_local22.lowerBounds[0]].value));
_local12.lowerBound.y = (_local20.y + (_local7.y * _local6.m_bounds[1][_local22.lowerBounds[1]].value));
_local12.upperBound.x = (_local20.x + (_local7.x * _local6.m_bounds[0][_local22.upperBounds[0]].value));
_local12.upperBound.y = (_local20.y + (_local7.y * _local6.m_bounds[1][_local22.upperBounds[1]].value));
_local14[0].Set(_local12.lowerBound.x, _local12.lowerBound.y);
_local14[1].Set(_local12.upperBound.x, _local12.lowerBound.y);
_local14[2].Set(_local12.upperBound.x, _local12.upperBound.y);
_local14[3].Set(_local12.lowerBound.x, _local12.upperBound.y);
m_debugDraw.DrawPolygon(_local14, 4, _local10);
};
_local2++;
};
_local14[0].Set(_local20.x, _local20.y);
_local14[1].Set(_local21.x, _local20.y);
_local14[2].Set(_local21.x, _local21.y);
_local14[3].Set(_local20.x, _local21.y);
m_debugDraw.DrawPolygon(_local14, 4, new b2Color(0.3, 0.9, 0.9));
};
if ((_local1 & b2DebugDraw.e_obbBit)){
_local10.Set(0.5, 0.3, 0.5);
_local3 = m_bodyList;
while (_local3) {
_local11 = _local3.m_xf;
_local4 = _local3.GetShapeList();
while (_local4) {
if (_local4.m_type != b2Shape.e_polygonShape){
} else {
_local23 = (_local4 as b2PolygonShape);
_local24 = _local23.GetOBB();
_local25 = _local24.extents;
_local14[0].Set(-(_local25.x), -(_local25.y));
_local14[1].Set(_local25.x, -(_local25.y));
_local14[2].Set(_local25.x, _local25.y);
_local14[3].Set(-(_local25.x), _local25.y);
_local2 = 0;
while (_local2 < 4) {
_local26 = _local24.R;
_local27 = _local14[_local2];
_local28 = (_local24.center.x + ((_local26.col1.x * _local27.x) + (_local26.col2.x * _local27.y)));
_local14[_local2].y = (_local24.center.y + ((_local26.col1.y * _local27.x) + (_local26.col2.y * _local27.y)));
_local14[_local2].x = _local28;
_local26 = _local11.R;
_local28 = (_local11.position.x + ((_local26.col1.x * _local27.x) + (_local26.col2.x * _local27.y)));
_local14[_local2].y = (_local11.position.y + ((_local26.col1.y * _local27.x) + (_local26.col2.y * _local27.y)));
_local14[_local2].x = _local28;
_local2++;
};
m_debugDraw.DrawPolygon(_local14, 4, _local10);
};
_local4 = _local4.m_next;
};
_local3 = _local3.m_next;
};
};
if ((_local1 & b2DebugDraw.e_centerOfMassBit)){
_local3 = m_bodyList;
while (_local3) {
_local11 = s_xf;
_local11.R = _local3.m_xf.R;
_local11.position = _local3.GetWorldCenter();
m_debugDraw.DrawXForm(_local11);
_local3 = _local3.m_next;
};
};
}
public function DestroyBody(_arg1:b2Body):void{
var _local2:b2JointEdge;
var _local3:b2ControllerEdge;
var _local4:b2Shape;
var _local5:b2JointEdge;
var _local6:b2ControllerEdge;
var _local7:b2Shape;
if (_arg1.isDead){
return;
};
_arg1.isDead = true;
if (m_lock == true){
return;
};
_local2 = _arg1.m_jointList;
while (_local2) {
_local5 = _local2;
_local2 = _local2.next;
if (m_destructionListener){
m_destructionListener.SayGoodbyeJoint(_local5.joint);
};
DestroyJoint(_local5.joint);
};
_local3 = _arg1.m_controllerList;
while (_local3) {
_local6 = _local3;
_local3 = _local3.nextController;
_local6.controller.RemoveBody(_arg1);
};
_local4 = _arg1.m_shapeList;
while (_local4) {
_local7 = _local4;
_local4 = _local4.m_next;
if (m_destructionListener){
m_destructionListener.SayGoodbyeShape(_local7);
};
_local7.DestroyProxy(m_broadPhase);
b2Shape.Destroy(_local7, m_blockAllocator);
};
if (_arg1.m_prev){
_arg1.m_prev.m_next = _arg1.m_next;
};
if (_arg1.m_next){
_arg1.m_next.m_prev = _arg1.m_prev;
};
if (_arg1 == m_bodyList){
m_bodyList = _arg1.m_next;
};
m_bodyCount--;
}
b2internal function DrawShape(_arg1:b2Shape, _arg2:b2XForm, _arg3:b2Color, _arg4:Boolean):void{
var _local5:b2Color;
var _local6:b2CircleShape;
var _local7:b2Vec2;
var _local8:Number;
var _local9:b2Vec2;
var _local10:int;
var _local11:b2PolygonShape;
var _local12:int;
var _local13:Array;
var _local14:Array;
var _local15:Array;
var _local16:b2EdgeShape;
_local5 = s_coreColor;
switch (_arg1.m_type){
case b2Shape.e_circleShape:
_local6 = (_arg1 as b2CircleShape);
_local7 = b2Math.b2MulX(_arg2, _local6.m_localPosition);
_local8 = _local6.m_radius;
_local9 = _arg2.R.col1;
m_debugDraw.DrawSolidCircle(_local7, _local8, _local9, _arg3);
if (_arg4){
m_debugDraw.DrawCircle(_local7, (_local8 - b2Settings.b2_toiSlop), _local5);
};
break;
case b2Shape.e_polygonShape:
_local11 = (_arg1 as b2PolygonShape);
_local12 = _local11.GetVertexCount();
_local13 = _local11.GetVertices();
_local14 = new Array(b2Settings.b2_maxPolygonVertices);
_local10 = 0;
while (_local10 < _local12) {
_local14[_local10] = b2Math.b2MulX(_arg2, _local13[_local10]);
_local10++;
};
m_debugDraw.DrawSolidPolygon(_local14, _local12, _arg3);
if (_arg4){
_local15 = _local11.GetCoreVertices();
_local10 = 0;
while (_local10 < _local12) {
_local14[_local10] = b2Math.b2MulX(_arg2, _local15[_local10]);
_local10++;
};
m_debugDraw.DrawPolygon(_local14, _local12, _local5);
};
break;
case b2Shape.e_edgeShape:
_local16 = (_arg1 as b2EdgeShape);
m_debugDraw.DrawSegment(b2Math.b2MulX(_arg2, _local16.GetVertex1()), b2Math.b2MulX(_arg2, _local16.GetVertex2()), _arg3);
if (_arg4){
m_debugDraw.DrawSegment(b2Math.b2MulX(_arg2, _local16.GetCoreVertex1()), b2Math.b2MulX(_arg2, _local16.GetCoreVertex2()), _local5);
};
break;
};
}
public function GetGroundBody():b2Body{
return (m_groundBody);
}
public function DestroyController(_arg1:b2Controller):void{
_arg1.Clear();
if (_arg1.m_next){
_arg1.m_next.m_prev = _arg1.m_prev;
};
if (_arg1.m_prev){
_arg1.m_prev.m_next = _arg1.m_next;
};
if (_arg1 == m_controllerList){
m_controllerList = _arg1.m_next;
};
m_controllerCount--;
}
b2internal function Solve(_arg1:b2TimeStep):void{
var _local2:b2Body;
var _local3:b2Controller;
var _local4:b2Island;
var _local5:b2Contact;
var _local6:b2Joint;
var _local7:int;
var _local8:Array;
var _local9:b2Body;
var _local10:int;
var _local11:int;
var _local12:b2Body;
var _local13:b2ContactEdge;
var _local14:b2JointEdge;
var _local15:Boolean;
_local3 = m_controllerList;
while (_local3) {
_local3.Step(_arg1);
_local3 = _local3.m_next;
};
_local4 = new b2Island(m_bodyCount, m_contactCount, m_jointCount, m_stackAllocator, m_contactListener);
_local2 = m_bodyList;
while (_local2) {
_local2.m_flags = (_local2.m_flags & ~(b2Body.e_islandFlag));
_local2 = _local2.m_next;
};
_local5 = m_contactList;
while (_local5) {
_local5.m_flags = (_local5.m_flags & ~(b2Contact.e_islandFlag));
_local5 = _local5.m_next;
};
_local6 = m_jointList;
while (_local6) {
_local6.m_islandFlag = false;
_local6 = _local6.m_next;
};
_local7 = m_bodyCount;
_local8 = new Array(_local7);
_local9 = m_bodyList;
while (_local9) {
if ((_local9.m_flags & ((b2Body.e_islandFlag | b2Body.e_sleepFlag) | b2Body.e_frozenFlag))){
} else {
if (_local9.IsStatic()){
} else {
_local4.Clear();
_local10 = 0;
var _temp1 = _local10;
_local10 = (_local10 + 1);
var _local16 = _temp1;
_local8[_local16] = _local9;
_local9.m_flags = (_local9.m_flags | b2Body.e_islandFlag);
while (_local10 > 0) {
--_local10;
_local2 = _local8[_local10];
_local4.AddBody(_local2);
_local2.m_flags = (_local2.m_flags & ~(b2Body.e_sleepFlag));
if (_local2.IsStatic()){
} else {
_local13 = _local2.m_contactList;
while (_local13) {
if ((_local13.contact.m_flags & (b2Contact.e_islandFlag | b2Contact.e_nonSolidFlag))){
} else {
if (_local13.contact.m_manifoldCount == 0){
} else {
_local4.AddContact(_local13.contact);
_local13.contact.m_flags = (_local13.contact.m_flags | b2Contact.e_islandFlag);
_local12 = _local13.other;
if ((_local12.m_flags & b2Body.e_islandFlag)){
} else {
var _temp2 = _local10;
_local10 = (_local10 + 1);
var _local17 = _temp2;
_local8[_local17] = _local12;
_local12.m_flags = (_local12.m_flags | b2Body.e_islandFlag);
};
};
};
_local13 = _local13.next;
};
_local14 = _local2.m_jointList;
while (_local14) {
if (_local14.joint.m_islandFlag == true){
} else {
_local4.AddJoint(_local14.joint);
_local14.joint.m_islandFlag = true;
_local12 = _local14.other;
if ((_local12.m_flags & b2Body.e_islandFlag)){
} else {
var _temp3 = _local10;
_local10 = (_local10 + 1);
_local17 = _temp3;
_local8[_local17] = _local12;
_local12.m_flags = (_local12.m_flags | b2Body.e_islandFlag);
};
};
_local14 = _local14.next;
};
};
};
_local4.Solve(_arg1, m_gravity, m_allowSleep);
_local11 = 0;
while (_local11 < _local4.m_bodyCount) {
_local2 = _local4.m_bodies[_local11];
if (_local2.IsStatic()){
_local2.m_flags = (_local2.m_flags & ~(b2Body.e_islandFlag));
};
_local11++;
};
};
};
_local9 = _local9.m_next;
};
_local2 = m_bodyList;
while (_local2) {
if ((_local2.m_flags & (b2Body.e_sleepFlag | b2Body.e_frozenFlag))){
} else {
if (_local2.IsStatic()){
} else {
_local15 = _local2.SynchronizeShapes();
if ((((_local15 == false)) && (!((m_boundaryListener == null))))){
m_boundaryListener.Violation(_local2);
};
};
};
_local2 = _local2.m_next;
};
m_broadPhase.Commit();
}
public function Query(_arg1:b2AABB, _arg2:Array, _arg3:int):int{
var _local4:Array;
var _local5:int;
var _local6:int;
_local4 = new Array(_arg3);
_local5 = m_broadPhase.QueryAABB(_arg1, _local4, _arg3);
_local6 = 0;
while (_local6 < _local5) {
_arg2[_local6] = _local4[_local6];
_local6++;
};
return (_local5);
}
public function SetGravity(_arg1:b2Vec2):void{
m_gravity = _arg1;
}
public function SetContactFilter(_arg1:b2ContactFilter):void{
m_contactFilter = _arg1;
}
b2internal function SolveTOI(_arg1:b2TimeStep):void{
var _local2:b2Body;
var _local3:b2Shape;
var _local4:b2Shape;
var _local5:b2Body;
var _local6:b2Body;
var _local7:b2ContactEdge;
var _local8:b2Joint;
var _local9:b2Island;
var _local10:int;
var _local11:Array;
var _local12:b2Contact;
var _local13:b2Contact;
var _local14:Number;
var _local15:b2Body;
var _local16:int;
var _local17:int;
var _local18:b2JointEdge;
var _local19:b2TimeStep;
var _local20:int;
var _local21:Number;
var _local22:Number;
var _local23:b2Body;
var _local24:Boolean;
_local9 = new b2Island(m_bodyCount, b2Settings.b2_maxTOIContactsPerIsland, b2Settings.b2_maxTOIJointsPerIsland, m_stackAllocator, m_contactListener);
_local10 = m_bodyCount;
_local11 = new Array(_local10);
_local2 = m_bodyList;
while (_local2) {
_local2.m_flags = (_local2.m_flags & ~(b2Body.e_islandFlag));
_local2.m_sweep.t0 = 0;
_local2 = _local2.m_next;
};
_local12 = m_contactList;
while (_local12) {
_local12.m_flags = (_local12.m_flags & ~((b2Contact.e_toiFlag | b2Contact.e_islandFlag)));
_local12 = _local12.m_next;
};
_local8 = m_jointList;
while (_local8) {
_local8.m_islandFlag = false;
_local8 = _local8.m_next;
};
while (true) {
_local13 = null;
_local14 = 1;
_local12 = m_contactList;
for (;_local12;(_local12 = _local12.m_next)) {
if ((_local12.m_flags & (b2Contact.e_slowFlag | b2Contact.e_nonSolidFlag))){
} else {
_local21 = 1;
if ((_local12.m_flags & b2Contact.e_toiFlag)){
_local21 = _local12.m_toi;
} else {
_local3 = _local12.m_shape1;
_local4 = _local12.m_shape2;
_local5 = _local3.m_body;
_local6 = _local4.m_body;
if (((((_local5.IsStatic()) || (_local5.IsSleeping()))) && (((_local6.IsStatic()) || (_local6.IsSleeping()))))){
continue;
};
_local22 = _local5.m_sweep.t0;
if (_local5.m_sweep.t0 < _local6.m_sweep.t0){
_local22 = _local6.m_sweep.t0;
_local5.m_sweep.Advance(_local22);
} else {
if (_local6.m_sweep.t0 < _local5.m_sweep.t0){
_local22 = _local5.m_sweep.t0;
_local6.m_sweep.Advance(_local22);
};
};
_local21 = b2TimeOfImpact.TimeOfImpact(_local12.m_shape1, _local5.m_sweep, _local12.m_shape2, _local6.m_sweep);
if ((((_local21 > 0)) && ((_local21 < 1)))){
_local21 = (((1 - _local21) * _local22) + _local21);
if (_local21 > 1){
_local21 = 1;
};
};
_local12.m_toi = _local21;
_local12.m_flags = (_local12.m_flags | b2Contact.e_toiFlag);
};
if ((((Number.MIN_VALUE < _local21)) && ((_local21 < _local14)))){
_local13 = _local12;
_local14 = _local21;
};
};
};
if ((((_local13 == null)) || (((1 - (100 * Number.MIN_VALUE)) < _local14)))){
break;
};
_local3 = _local13.m_shape1;
_local4 = _local13.m_shape2;
_local5 = _local3.m_body;
_local6 = _local4.m_body;
_local5.Advance(_local14);
_local6.Advance(_local14);
_local13.Update(m_contactListener);
_local13.m_flags = (_local13.m_flags & ~(b2Contact.e_toiFlag));
if (_local13.m_manifoldCount == 0){
} else {
_local15 = _local5;
if (_local15.IsStatic()){
_local15 = _local6;
};
_local9.Clear();
_local16 = 0;
_local17 = 0;
var _temp1 = _local17;
_local17 = (_local17 + 1);
_local11[(_local16 + _temp1)] = _local15;
_local15.m_flags = (_local15.m_flags | b2Body.e_islandFlag);
while (_local17 > 0) {
var _temp2 = _local16;
_local16 = (_local16 + 1);
_local2 = _local11[_temp2];
_local17--;
_local9.AddBody(_local2);
_local2.m_flags = (_local2.m_flags & ~(b2Body.e_sleepFlag));
if (_local2.IsStatic()){
} else {
_local7 = _local2.m_contactList;
while (_local7) {
if (_local9.m_contactCount == _local9.m_contactCapacity){
} else {
if ((_local7.contact.m_flags & ((b2Contact.e_islandFlag | b2Contact.e_slowFlag) | b2Contact.e_nonSolidFlag))){
} else {
if (_local7.contact.m_manifoldCount == 0){
} else {
_local9.AddContact(_local7.contact);
_local7.contact.m_flags = (_local7.contact.m_flags | b2Contact.e_islandFlag);
_local23 = _local7.other;
if ((_local23.m_flags & b2Body.e_islandFlag)){
} else {
if (_local23.IsStatic() == false){
_local23.Advance(_local14);
_local23.WakeUp();
};
_local11[(_local16 + _local17)] = _local23;
_local17++;
_local23.m_flags = (_local23.m_flags | b2Body.e_islandFlag);
};
};
};
};
_local7 = _local7.next;
};
};
};
_local18 = _local2.m_jointList;
while (_local18) {
if (_local9.m_jointCount == _local9.m_jointCapacity){
} else {
if (_local18.joint.m_islandFlag == true){
} else {
_local9.AddJoint(_local18.joint);
_local18.joint.m_islandFlag = true;
_local23 = _local18.other;
if ((_local23.m_flags & b2Body.e_islandFlag)){
} else {
if (!_local23.IsStatic()){
_local23.Advance(_local14);
_local23.WakeUp();
};
_local11[(_local16 + _local17)] = _local23;
_local17++;
_local23.m_flags = (_local23.m_flags | b2Body.e_islandFlag);
};
};
};
_local18 = _local18.next;
};
_local19 = new b2TimeStep();
_local19.warmStarting = false;
_local19.dt = ((1 - _local14) * _arg1.dt);
_local19.inv_dt = (1 / _local19.dt);
_local19.dtRatio = 0;
_local19.velocityIterations = _arg1.velocityIterations;
_local19.positionIterations = _arg1.positionIterations;
_local9.SolveTOI(_local19);
_local20 = 0;
while (_local20 < _local9.m_bodyCount) {
_local2 = _local9.m_bodies[_local20];
_local2.m_flags = (_local2.m_flags & ~(b2Body.e_islandFlag));
if ((_local2.m_flags & (b2Body.e_sleepFlag | b2Body.e_frozenFlag))){
} else {
if (_local2.IsStatic()){
} else {
_local24 = _local2.SynchronizeShapes();
if ((((_local24 == false)) && (!((m_boundaryListener == null))))){
m_boundaryListener.Violation(_local2);
};
_local7 = _local2.m_contactList;
while (_local7) {
_local7.contact.m_flags = (_local7.contact.m_flags & ~(b2Contact.e_toiFlag));
_local7 = _local7.next;
};
};
};
_local20++;
};
_local20 = 0;
while (_local20 < _local9.m_contactCount) {
_local12 = _local9.m_contacts[_local20];
_local9.m_contacts[_local20].m_flags = (_local12.m_flags & ~((b2Contact.e_toiFlag | b2Contact.e_islandFlag)));
_local20++;
};
_local20 = 0;
while (_local20 < _local9.m_jointCount) {
_local8 = _local9.m_joints[_local20];
_local8.m_islandFlag = false;
_local20++;
};
m_broadPhase.Commit();
};
};
}
public function GetJointList():b2Joint{
return (m_jointList);
}
public function GetContactCount():int{
return (m_contactCount);
}
public function GetBodyList():b2Body{
return (m_bodyList);
}
public function GetGravity():b2Vec2{
return (m_gravity);
}
public function Validate():void{
m_broadPhase.Validate();
}
public function GetPairCount():int{
return (m_broadPhase.m_pairManager.m_pairCount);
}
public function SetWarmStarting(_arg1:Boolean):void{
m_warmStarting = _arg1;
}
public function Raycast(_arg1:b2Segment, _arg2:Array, _arg3:int, _arg4:Boolean, _arg5):int{
var _local6:Array;
var _local7:int;
var _local8:int;
_local6 = new Array(_arg3);
m_raycastSegment = _arg1;
m_raycastUserData = _arg5;
if (_arg4){
_local7 = m_broadPhase.QuerySegment(_arg1, _local6, _arg3, RaycastSortKey);
} else {
_local7 = m_broadPhase.QuerySegment(_arg1, _local6, _arg3, RaycastSortKey2);
};
_local8 = 0;
while (_local8 < _local7) {
_arg2[_local8] = _local6[_local8];
_local8++;
};
return (_local7);
}
public function CreateJoint(_arg1:b2JointDef):b2Joint{
var _local2:b2Joint;
var _local3:b2Body;
var _local4:b2Shape;
_local2 = b2Joint.Create(_arg1, m_blockAllocator);
_local2.m_prev = null;
_local2.m_next = m_jointList;
if (m_jointList){
m_jointList.m_prev = _local2;
};
m_jointList = _local2;
m_jointCount++;
_local2.m_node1.joint = _local2;
_local2.m_node1.other = _local2.m_body2;
_local2.m_node1.prev = null;
_local2.m_node1.next = _local2.m_body1.m_jointList;
if (_local2.m_body1.m_jointList){
_local2.m_body1.m_jointList.prev = _local2.m_node1;
};
_local2.m_body1.m_jointList = _local2.m_node1;
_local2.m_node2.joint = _local2;
_local2.m_node2.other = _local2.m_body1;
_local2.m_node2.prev = null;
_local2.m_node2.next = _local2.m_body2.m_jointList;
if (_local2.m_body2.m_jointList){
_local2.m_body2.m_jointList.prev = _local2.m_node2;
};
_local2.m_body2.m_jointList = _local2.m_node2;
if (_arg1.collideConnected == false){
_local3 = ((_arg1.body1.m_shapeCount < _arg1.body2.m_shapeCount)) ? _arg1.body1 : _arg1.body2;
_local4 = _local3.m_shapeList;
while (_local4) {
_local4.RefilterProxy(m_broadPhase, _local3.m_xf);
_local4 = _local4.m_next;
};
};
return (_local2);
}
public function DestroyJoint(_arg1:b2Joint):void{
var _local2:Boolean;
var _local3:b2Body;
var _local4:b2Body;
var _local5:b2Body;
var _local6:b2Shape;
_local2 = _arg1.m_collideConnected;
if (_arg1.m_prev){
_arg1.m_prev.m_next = _arg1.m_next;
};
if (_arg1.m_next){
_arg1.m_next.m_prev = _arg1.m_prev;
};
if (_arg1 == m_jointList){
m_jointList = _arg1.m_next;
};
_local3 = _arg1.m_body1;
_local4 = _arg1.m_body2;
_local3.WakeUp();
_local4.WakeUp();
if (_arg1.m_node1.prev){
_arg1.m_node1.prev.next = _arg1.m_node1.next;
};
if (_arg1.m_node1.next){
_arg1.m_node1.next.prev = _arg1.m_node1.prev;
};
if (_arg1.m_node1 == _local3.m_jointList){
_local3.m_jointList = _arg1.m_node1.next;
};
_arg1.m_node1.prev = null;
_arg1.m_node1.next = null;
if (_arg1.m_node2.prev){
_arg1.m_node2.prev.next = _arg1.m_node2.next;
};
if (_arg1.m_node2.next){
_arg1.m_node2.next.prev = _arg1.m_node2.prev;
};
if (_arg1.m_node2 == _local4.m_jointList){
_local4.m_jointList = _arg1.m_node2.next;
};
_arg1.m_node2.prev = null;
_arg1.m_node2.next = null;
b2Joint.Destroy(_arg1, m_blockAllocator);
m_jointCount--;
if (_local2 == false){
_local5 = ((_local3.m_shapeCount < _local4.m_shapeCount)) ? _local3 : _local4;
_local6 = _local5.m_shapeList;
while (_local6) {
_local6.RefilterProxy(m_broadPhase, _local5.m_xf);
_local6 = _local6.m_next;
};
};
}
public function SetContactListener(_arg1:b2ContactListener):void{
m_contactListener = _arg1;
}
public function CreateController(_arg1:b2Controller):b2Controller{
if (_arg1.m_world != this){
throw (new Error("Controller can only be a member of one world"));
};
_arg1.m_next = m_controllerList;
_arg1.m_prev = null;
if (m_controllerList){
m_controllerList.m_prev = _arg1;
};
m_controllerList = _arg1;
m_controllerCount++;
_arg1.m_world = this;
return (_arg1);
}
b2internal function RaycastSortKey2(_arg1:b2Shape):Number{
var _local2:b2Body;
var _local3:b2XForm;
var _local4:Array;
if (((m_contactFilter) && (!(m_contactFilter.RayCollide(m_raycastUserData, _arg1))))){
return (-1);
};
_local2 = _arg1.GetBody();
_local3 = _local2.GetXForm();
_local4 = [0];
if (_arg1.TestSegment(_local3, _local4, m_raycastNormal, m_raycastSegment, 1) != b2Shape.e_hitCollide){
return (-1);
};
return (_local4[0]);
}
public function RaycastOne(_arg1:b2Segment, _arg2:Array, _arg3:b2Vec2, _arg4:Boolean, _arg5):b2Shape{
var _local6:Array;
var _local7:Number;
var _local8:b2Shape;
var _local9:b2XForm;
_local6 = new Array(1);
_local7 = Raycast(_arg1, _local6, 1, _arg4, _arg5);
if (_local7 == 0){
return (null);
};
if (_local7 > 1){
trace(_local7);
};
_local8 = _local6[0];
_local9 = _local8.GetBody().GetXForm();
_local8.TestSegment(_local9, _arg2, _arg3, _arg1, 1);
return (_local8);
}
public function CreateBody(_arg1:b2BodyDef):b2Body{
var _local2:b2Body;
if (m_lock == true){
return (null);
};
_local2 = new b2Body(_arg1, this);
_local2.m_prev = null;
_local2.m_next = m_bodyList;
if (m_bodyList){
m_bodyList.m_prev = _local2;
};
m_bodyList = _local2;
m_bodyCount++;
return (_local2);
}
b2internal function RaycastSortKey(_arg1:b2Shape):Number{
var _local2:b2Body;
var _local3:b2XForm;
var _local4:Array;
if (((m_contactFilter) && (!(m_contactFilter.RayCollide(m_raycastUserData, _arg1))))){
return (-1);
};
_local2 = _arg1.GetBody();
_local3 = _local2.GetXForm();
_local4 = [0];
if (_arg1.TestSegment(_local3, _local4, m_raycastNormal, m_raycastSegment, 1) == b2Shape.e_missCollide){
return (-1);
};
return (_local4[0]);
}
public function SetBoundaryListener(_arg1:b2BoundaryListener):void{
m_boundaryListener = _arg1;
}
public function SetDestructionListener(_arg1:b2DestructionListener):void{
m_destructionListener = _arg1;
}
public function RemoveController(_arg1:b2Controller):void{
if (_arg1.m_prev){
_arg1.m_prev.m_next = _arg1.m_next;
};
if (_arg1.m_next){
_arg1.m_next.m_prev = _arg1.m_prev;
};
if (m_controllerList == _arg1){
m_controllerList = _arg1.m_next;
};
m_controllerCount--;
}
public function Step(_arg1:Number, _arg2:int, _arg3:int):void{
var _local4:b2TimeStep;
m_lock = true;
_local4 = new b2TimeStep();
_local4.dt = _arg1;
_local4.velocityIterations = _arg2;
_local4.positionIterations = _arg3;
if (_arg1 > 0){
_local4.inv_dt = (1 / _arg1);
} else {
_local4.inv_dt = 0;
};
_local4.dtRatio = (m_inv_dt0 * _arg1);
_local4.warmStarting = m_warmStarting;
m_contactManager.Collide();
if (_local4.dt > 0){
Solve(_local4);
};
if (((m_continuousPhysics) && ((_local4.dt > 0)))){
SolveTOI(_local4);
};
DrawDebugData();
m_inv_dt0 = _local4.inv_dt;
m_lock = false;
}
public function GetBodyCount():int{
return (m_bodyCount);
}
public function InRange(_arg1:b2AABB):Boolean{
return (m_broadPhase.InRange(_arg1));
}
public function GetJointCount():int{
return (m_jointCount);
}
public function AddController(_arg1:b2Controller):b2Controller{
_arg1.m_next = m_controllerList;
_arg1.m_prev = null;
m_controllerList = _arg1;
_arg1.m_world = this;
m_controllerCount++;
return (_arg1);
}
}
}//package Box2D.Dynamics
Section 87
//PropTween (com.greensock.core.PropTween)
package com.greensock.core {
public class PropTween {
public var start:Number;
public var name:String;
public var prevNode:PropTween;
public var change:Number;
public var target:Object;
public var priority:int;
public var property:String;
public var nextNode:PropTween;
public var isPlugin:Boolean;
public function PropTween(_arg1:Object, _arg2:String, _arg3:Number, _arg4:Number, _arg5:String, _arg6:Boolean, _arg7:PropTween=null, _arg8:int=0){
this.target = _arg1;
this.property = _arg2;
this.start = _arg3;
this.change = _arg4;
this.name = _arg5;
this.isPlugin = _arg6;
if (_arg7){
_arg7.prevNode = this;
this.nextNode = _arg7;
};
this.priority = _arg8;
}
}
}//package com.greensock.core
Section 88
//SimpleTimeline (com.greensock.core.SimpleTimeline)
package com.greensock.core {
public class SimpleTimeline extends TweenCore {
public var autoRemoveChildren:Boolean;
protected var _lastChild:TweenCore;
protected var _firstChild:TweenCore;
public function SimpleTimeline(_arg1:Object=null){
super(0, _arg1);
}
override public function renderTime(_arg1:Number, _arg2:Boolean=false, _arg3:Boolean=false):void{
var _local4:TweenCore;
var _local5:Number;
var _local6:TweenCore;
_local4 = _firstChild;
this.cachedTotalTime = _arg1;
this.cachedTime = _arg1;
while (_local4) {
_local6 = _local4.nextNode;
if (((_local4.active) || ((((((_arg1 >= _local4.cachedStartTime)) && (!(_local4.cachedPaused)))) && (!(_local4.gc)))))){
if (!_local4.cachedReversed){
_local4.renderTime(((_arg1 - _local4.cachedStartTime) * _local4.cachedTimeScale), _arg2, false);
} else {
_local5 = (_local4.cacheIsDirty) ? _local4.totalDuration : _local4.cachedTotalDuration;
_local4.renderTime((_local5 - ((_arg1 - _local4.cachedStartTime) * _local4.cachedTimeScale)), _arg2, false);
};
};
_local4 = _local6;
};
}
public function addChild(_arg1:TweenCore):void{
if (((!(_arg1.gc)) && (_arg1.timeline))){
_arg1.timeline.remove(_arg1, true);
};
_arg1.timeline = this;
if (_arg1.gc){
_arg1.setEnabled(true, true);
};
if (_firstChild){
_firstChild.prevNode = _arg1;
};
_arg1.nextNode = _firstChild;
_firstChild = _arg1;
_arg1.prevNode = null;
}
public function get rawTime():Number{
return (this.cachedTotalTime);
}
public function remove(_arg1:TweenCore, _arg2:Boolean=false):void{
if (((!(_arg1.gc)) && (!(_arg2)))){
_arg1.setEnabled(false, true);
};
if (_arg1.nextNode){
_arg1.nextNode.prevNode = _arg1.prevNode;
} else {
if (_lastChild == _arg1){
_lastChild = _arg1.prevNode;
};
};
if (_arg1.prevNode){
_arg1.prevNode.nextNode = _arg1.nextNode;
} else {
if (_firstChild == _arg1){
_firstChild = _arg1.nextNode;
};
};
}
}
}//package com.greensock.core
Section 89
//TweenCore (com.greensock.core.TweenCore)
package com.greensock.core {
import com.greensock.*;
public class TweenCore {
public var initted:Boolean;
protected var _hasUpdate:Boolean;
public var active:Boolean;
protected var _delay:Number;
public var cachedReversed:Boolean;
public var nextNode:TweenCore;
public var cachedTime:Number;
protected var _rawPrevTime:Number;// = -1
public var vars:Object;
public var cachedTotalTime:Number;
public var data;
public var timeline:SimpleTimeline;
public var cachedStartTime:Number;
public var prevNode:TweenCore;
public var cachedDuration:Number;
public var gc:Boolean;
protected var _pauseTime:Number;
public var cacheIsDirty:Boolean;
public var cachedPaused:Boolean;
public var cachedTimeScale:Number;
public var cachedTotalDuration:Number;
public static const version:Number = 1.13;
protected static var _classInitted:Boolean;
public function TweenCore(_arg1:Number=0, _arg2:Object=null){
var _local3:SimpleTimeline;
_rawPrevTime = -1;
super();
this.vars = ((_arg2) || ({}));
this.cachedDuration = (this.cachedTotalDuration = ((_arg1) || (0)));
_delay = ((this.vars.delay) || (0));
this.cachedTimeScale = ((this.vars.timeScale) || (1));
this.active = Boolean((((((_arg1 == 0)) && ((_delay == 0)))) && (!((this.vars.immediateRender == false)))));
this.cachedTotalTime = (this.cachedTime = 0);
this.data = this.vars.data;
if (!_classInitted){
if (isNaN(TweenLite.rootFrame)){
TweenLite.initClass();
_classInitted = true;
} else {
return;
};
};
_local3 = ((this.vars.timeline is SimpleTimeline)) ? this.vars.timeline : (this.vars.useFrames) ? TweenLite.rootFramesTimeline : TweenLite.rootTimeline;
this.cachedStartTime = (_local3.cachedTotalTime + _delay);
_local3.addChild(this);
if (this.vars.reversed){
this.cachedReversed = true;
};
if (this.vars.paused){
this.paused = true;
};
}
public function renderTime(_arg1:Number, _arg2:Boolean=false, _arg3:Boolean=false):void{
}
public function get delay():Number{
return (_delay);
}
public function get duration():Number{
return (this.cachedDuration);
}
public function set reversed(_arg1:Boolean):void{
if (_arg1 != this.cachedReversed){
this.cachedReversed = _arg1;
setTotalTime(this.cachedTotalTime, true);
};
}
public function set startTime(_arg1:Number):void{
var _local2:Boolean;
_local2 = Boolean(((!((this.timeline == null))) && (((!((_arg1 == this.cachedStartTime))) || (this.gc)))));
this.cachedStartTime = _arg1;
if (_local2){
this.timeline.addChild(this);
};
}
public function set delay(_arg1:Number):void{
this.startTime = (this.startTime + (_arg1 - _delay));
_delay = _arg1;
}
public function resume():void{
this.paused = false;
}
public function get paused():Boolean{
return (this.cachedPaused);
}
public function play():void{
this.reversed = false;
this.paused = false;
}
public function set duration(_arg1:Number):void{
this.cachedDuration = (this.cachedTotalDuration = _arg1);
setDirtyCache(false);
}
public function invalidate():void{
}
public function restart(_arg1:Boolean=false, _arg2:Boolean=true):void{
this.reversed = false;
this.paused = false;
this.setTotalTime((_arg1) ? -(_delay) : 0, _arg2);
}
public function complete(_arg1:Boolean=false, _arg2:Boolean=false):void{
if (!_arg1){
renderTime(this.cachedTotalDuration, _arg2, false);
return;
};
if (this.timeline.autoRemoveChildren){
this.setEnabled(false, false);
} else {
this.active = false;
};
if (!_arg2){
if (((((this.vars.onComplete) && ((this.cachedTotalTime == this.cachedTotalDuration)))) && (!(this.cachedReversed)))){
this.vars.onComplete.apply(null, this.vars.onCompleteParams);
} else {
if (((((this.cachedReversed) && ((this.cachedTotalTime == 0)))) && (this.vars.onReverseComplete))){
this.vars.onReverseComplete.apply(null, this.vars.onReverseCompleteParams);
};
};
};
}
public function get reversed():Boolean{
return (this.cachedReversed);
}
public function get totalTime():Number{
return (this.cachedTotalTime);
}
public function get startTime():Number{
return (this.cachedStartTime);
}
public function set currentTime(_arg1:Number):void{
setTotalTime(_arg1, false);
}
protected function setDirtyCache(_arg1:Boolean=true):void{
var _local2:TweenCore;
_local2 = (_arg1) ? this : this.timeline;
while (_local2) {
_local2.cacheIsDirty = true;
_local2 = _local2.timeline;
};
}
public function reverse(_arg1:Boolean=true):void{
this.reversed = true;
if (_arg1){
this.paused = false;
} else {
if (this.gc){
this.setEnabled(true, false);
};
};
}
public function set paused(_arg1:Boolean):void{
if (((!((_arg1 == this.cachedPaused))) && (this.timeline))){
if (_arg1){
_pauseTime = this.timeline.rawTime;
} else {
this.cachedStartTime = (this.cachedStartTime + (this.timeline.rawTime - _pauseTime));
_pauseTime = NaN;
setDirtyCache(false);
};
this.cachedPaused = _arg1;
this.active = Boolean(((((!(this.cachedPaused)) && ((this.cachedTotalTime > 0)))) && ((this.cachedTotalTime < this.cachedTotalDuration))));
};
if (((!(_arg1)) && (this.gc))){
this.setTotalTime(this.cachedTotalTime, false);
this.setEnabled(true, false);
};
}
public function kill():void{
setEnabled(false, false);
}
public function set totalTime(_arg1:Number):void{
setTotalTime(_arg1, false);
}
public function get currentTime():Number{
return (this.cachedTime);
}
protected function setTotalTime(_arg1:Number, _arg2:Boolean=false):void{
var _local3:Number;
var _local4:Number;
if (this.timeline){
_local3 = (((_pauseTime) || ((_pauseTime == 0)))) ? _pauseTime : this.timeline.cachedTotalTime;
if (this.cachedReversed){
_local4 = (this.cacheIsDirty) ? this.totalDuration : this.cachedTotalDuration;
this.cachedStartTime = (_local3 - ((_local4 - _arg1) / this.cachedTimeScale));
} else {
this.cachedStartTime = (_local3 - (_arg1 / this.cachedTimeScale));
};
if (!this.timeline.cacheIsDirty){
setDirtyCache(false);
};
if (this.cachedTotalTime != _arg1){
renderTime(_arg1, _arg2, false);
};
};
}
public function pause():void{
this.paused = true;
}
public function set totalDuration(_arg1:Number):void{
this.duration = _arg1;
}
public function get totalDuration():Number{
return (this.cachedTotalDuration);
}
public function setEnabled(_arg1:Boolean, _arg2:Boolean=false):Boolean{
if (_arg1){
this.active = Boolean(((((!(this.cachedPaused)) && ((this.cachedTotalTime > 0)))) && ((this.cachedTotalTime < this.cachedTotalDuration))));
if (((!(_arg2)) && (this.gc))){
this.timeline.addChild(this);
};
} else {
this.active = false;
if (!_arg2){
this.timeline.remove(this, true);
};
};
this.gc = !(_arg1);
return (false);
}
}
}//package com.greensock.core
Section 90
//Bounce (com.greensock.easing.Bounce)
package com.greensock.easing {
public class Bounce {
public static function easeOut(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
_arg1 = (_arg1 / _arg4);
if (_arg1 < (1 / 2.75)){
return (((_arg3 * ((7.5625 * _arg1) * _arg1)) + _arg2));
};
if (_arg1 < (2 / 2.75)){
_arg1 = (_arg1 - (1.5 / 2.75));
return (((_arg3 * (((7.5625 * _arg1) * _arg1) + 0.75)) + _arg2));
};
if (_arg1 < (2.5 / 2.75)){
_arg1 = (_arg1 - (2.25 / 2.75));
return (((_arg3 * (((7.5625 * _arg1) * _arg1) + 0.9375)) + _arg2));
};
_arg1 = (_arg1 - (2.625 / 2.75));
return (((_arg3 * (((7.5625 * _arg1) * _arg1) + 0.984375)) + _arg2));
}
public static function easeIn(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
return (((_arg3 - easeOut((_arg4 - _arg1), 0, _arg3, _arg4)) + _arg2));
}
public static function easeInOut(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
if (_arg1 < (_arg4 * 0.5)){
return (((easeIn((_arg1 * 2), 0, _arg3, _arg4) * 0.5) + _arg2));
};
return ((((easeOut(((_arg1 * 2) - _arg4), 0, _arg3, _arg4) * 0.5) + (_arg3 * 0.5)) + _arg2));
}
}
}//package com.greensock.easing
Section 91
//Elastic (com.greensock.easing.Elastic)
package com.greensock.easing {
public class Elastic {
private static const _2PI:Number = (Math.PI * 2);
public static function easeIn(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number=0, _arg6:Number=0):Number{
var _local7:Number;
if (_arg1 == 0){
return (_arg2);
};
_arg1 = (_arg1 / _arg4);
if (_arg1 == 1){
return ((_arg2 + _arg3));
};
if (!_arg6){
_arg6 = (_arg4 * 0.3);
};
if (((((!(_arg5)) || ((((_arg3 > 0)) && ((_arg5 < _arg3)))))) || ((((_arg3 < 0)) && ((_arg5 < -(_arg3))))))){
_arg5 = _arg3;
_local7 = (_arg6 / 4);
} else {
_local7 = ((_arg6 / _2PI) * Math.asin((_arg3 / _arg5)));
};
--_arg1;
return ((-(((_arg5 * Math.pow(2, (10 * _arg1))) * Math.sin(((((_arg1 * _arg4) - _local7) * _2PI) / _arg6)))) + _arg2));
}
public static function easeInOut(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number=0, _arg6:Number=0):Number{
var _local7:Number;
if (_arg1 == 0){
return (_arg2);
};
_arg1 = (_arg1 / (_arg4 * 0.5));
if (_arg1 == 2){
return ((_arg2 + _arg3));
};
if (!_arg6){
_arg6 = (_arg4 * (0.3 * 1.5));
};
if (((((!(_arg5)) || ((((_arg3 > 0)) && ((_arg5 < _arg3)))))) || ((((_arg3 < 0)) && ((_arg5 < -(_arg3))))))){
_arg5 = _arg3;
_local7 = (_arg6 / 4);
} else {
_local7 = ((_arg6 / _2PI) * Math.asin((_arg3 / _arg5)));
};
if (_arg1 < 1){
--_arg1;
return (((-0.5 * ((_arg5 * Math.pow(2, (10 * _arg1))) * Math.sin(((((_arg1 * _arg4) - _local7) * _2PI) / _arg6)))) + _arg2));
};
--_arg1;
return ((((((_arg5 * Math.pow(2, (-10 * _arg1))) * Math.sin(((((_arg1 * _arg4) - _local7) * _2PI) / _arg6))) * 0.5) + _arg3) + _arg2));
}
public static function easeOut(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number=0, _arg6:Number=0):Number{
var _local7:Number;
if (_arg1 == 0){
return (_arg2);
};
_arg1 = (_arg1 / _arg4);
if (_arg1 == 1){
return ((_arg2 + _arg3));
};
if (!_arg6){
_arg6 = (_arg4 * 0.3);
};
if (((((!(_arg5)) || ((((_arg3 > 0)) && ((_arg5 < _arg3)))))) || ((((_arg3 < 0)) && ((_arg5 < -(_arg3))))))){
_arg5 = _arg3;
_local7 = (_arg6 / 4);
} else {
_local7 = ((_arg6 / _2PI) * Math.asin((_arg3 / _arg5)));
};
return (((((_arg5 * Math.pow(2, (-10 * _arg1))) * Math.sin(((((_arg1 * _arg4) - _local7) * _2PI) / _arg6))) + _arg3) + _arg2));
}
}
}//package com.greensock.easing
Section 92
//Strong (com.greensock.easing.Strong)
package com.greensock.easing {
public class Strong {
public static const power:uint = 4;
public static function easeOut(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
_arg1 = ((_arg1 / _arg4) - 1);
return (((_arg3 * (((((_arg1 * _arg1) * _arg1) * _arg1) * _arg1) + 1)) + _arg2));
}
public static function easeIn(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
_arg1 = (_arg1 / _arg4);
return (((((((_arg3 * _arg1) * _arg1) * _arg1) * _arg1) * _arg1) + _arg2));
}
public static function easeInOut(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
_arg1 = (_arg1 / (_arg4 * 0.5));
if (_arg1 < 1){
return ((((((((_arg3 * 0.5) * _arg1) * _arg1) * _arg1) * _arg1) * _arg1) + _arg2));
};
_arg1 = (_arg1 - 2);
return ((((_arg3 * 0.5) * (((((_arg1 * _arg1) * _arg1) * _arg1) * _arg1) + 2)) + _arg2));
}
}
}//package com.greensock.easing
Section 93
//TweenLite (com.greensock.TweenLite)
package com.greensock {
import flash.display.*;
import com.greensock.core.*;
import flash.utils.*;
import flash.events.*;
import com.greensock.plugins.*;
public class TweenLite extends TweenCore {
public var target:Object;
protected var _overwrite:uint;
public var ratio:Number;// = 0
protected var _notifyPluginsOfEnabled:Boolean;
protected var _hasPlugins:Boolean;
public var cachedPT1:PropTween;
protected var _overwrittenProps:Object;
public var propTweenLookup:Object;
protected var _ease:Function;
public static const version:Number = 11.131;
public static var rootTimeline:SimpleTimeline;
public static var fastEaseLookup:Dictionary = new Dictionary(false);
public static var onPluginEvent:Function;
public static var rootFramesTimeline:SimpleTimeline;
public static var defaultEase:Function = TweenLite.easeOut;
public static var plugins:Object = {};
public static var masterList:Dictionary = new Dictionary(false);
public static var overwriteManager:Object;
public static var rootFrame:Number;
public static var killDelayedCallsTo:Function = TweenLite.killTweensOf;
private static var _shape:Shape = new Shape();
protected static var _reservedProps:Object = {ease:1, delay:1, overwrite:1, onComplete:1, onCompleteParams:1, useFrames:1, runBackwards:1, startAt:1, onUpdate:1, onUpdateParams:1, roundProps:1, onStart:1, onStartParams:1, onReverseComplete:1, onReverseCompleteParams:1, onRepeat:1, onRepeatParams:1, proxiedEase:1, easeParams:1, yoyo:1, onCompleteListener:1, onUpdateListener:1, onStartListener:1, onReverseCompleteListener:1, onRepeatListener:1, orientToBezier:1, timeScale:1, immediateRender:1, repeat:1, repeatDelay:1, timeline:1, data:1, paused:1};
public function TweenLite(_arg1:Object, _arg2:Number, _arg3:Object){
var _local4:Array;
var _local5:TweenLite;
ratio = 0;
super(_arg2, _arg3);
this.target = _arg1;
if ((((this.target is TweenCore)) && (("timeScale" in this.vars)))){
this.cachedTimeScale = 1;
};
propTweenLookup = {};
_ease = defaultEase;
_overwrite = (((!((Number(_arg3.overwrite) > -1))) || (((!(overwriteManager.enabled)) && ((_arg3.overwrite > 1)))))) ? overwriteManager.mode : int(_arg3.overwrite);
_local4 = masterList[_arg1];
if (!_local4){
masterList[_arg1] = [this];
} else {
if (_overwrite == 1){
for each (_local5 in _local4) {
if (!_local5.gc){
_local5.setEnabled(false, false);
};
};
masterList[_arg1] = [this];
} else {
_local4[_local4.length] = this;
};
};
if (((this.active) || (this.vars.immediateRender))){
renderTime(0, false, true);
};
}
override public function renderTime(_arg1:Number, _arg2:Boolean=false, _arg3:Boolean=false):void{
var _local4:Boolean;
var _local5:Number;
var _local6:PropTween;
_local5 = this.cachedTime;
if (_arg1 >= this.cachedDuration){
this.cachedTotalTime = (this.cachedTime = this.cachedDuration);
this.ratio = 1;
_local4 = true;
if (this.cachedDuration == 0){
if ((((((_arg1 == 0)) || ((_rawPrevTime < 0)))) && (!((_rawPrevTime == _arg1))))){
_arg3 = true;
};
_rawPrevTime = _arg1;
};
} else {
if (_arg1 <= 0){
this.cachedTotalTime = (this.cachedTime = (this.ratio = 0));
if (_arg1 < 0){
this.active = false;
if (this.cachedDuration == 0){
if (_rawPrevTime > 0){
_arg3 = true;
_local4 = true;
};
_rawPrevTime = _arg1;
};
};
if (((this.cachedReversed) && (!((_local5 == 0))))){
_local4 = true;
};
} else {
this.cachedTotalTime = (this.cachedTime = _arg1);
this.ratio = _ease(_arg1, 0, 1, this.cachedDuration);
};
};
if ((((this.cachedTime == _local5)) && (!(_arg3)))){
return;
};
if (!this.initted){
init();
if (((!(_local4)) && (this.cachedTime))){
this.ratio = _ease(this.cachedTime, 0, 1, this.cachedDuration);
};
};
if (((!(this.active)) && (!(this.cachedPaused)))){
this.active = true;
};
if ((((((((_local5 == 0)) && (this.vars.onStart))) && (!((this.cachedTime == 0))))) && (!(_arg2)))){
this.vars.onStart.apply(null, this.vars.onStartParams);
};
_local6 = this.cachedPT1;
while (_local6) {
_local6.target[_local6.property] = (_local6.start + (this.ratio * _local6.change));
_local6 = _local6.nextNode;
};
if (((_hasUpdate) && (!(_arg2)))){
this.vars.onUpdate.apply(null, this.vars.onUpdateParams);
};
if (_local4){
if (((_hasPlugins) && (this.cachedPT1))){
onPluginEvent("onComplete", this);
};
complete(true, _arg2);
};
}
protected function init():void{
var _local1:String;
var _local2:int;
var _local3:*;
var _local4:Boolean;
var _local5:Array;
var _local6:PropTween;
if (typeof(this.vars.ease) == "function"){
_ease = this.vars.ease;
};
if (this.vars.easeParams){
this.vars.proxiedEase = _ease;
_ease = easeProxy;
};
this.cachedPT1 = null;
this.propTweenLookup = {};
for (_local1 in this.vars) {
if ((((_local1 in _reservedProps)) && (!((((_local1 == "timeScale")) && ((this.target is TweenCore))))))){
} else {
if ((((_local1 in plugins)) && (new ((plugins[_local1] as Class)).onInitTween(this.target, this.vars[_local1], this)))){
this.cachedPT1 = new PropTween(_local3, "changeFactor", 0, 1, ((_local3.overwriteProps.length)==1) ? _local3.overwriteProps[0] : "_MULTIPLE_", true, this.cachedPT1);
if (this.cachedPT1.name == "_MULTIPLE_"){
_local2 = _local3.overwriteProps.length;
while (_local2--) {
this.propTweenLookup[_local3.overwriteProps[_local2]] = this.cachedPT1;
};
} else {
this.propTweenLookup[this.cachedPT1.name] = this.cachedPT1;
};
if (_local3.priority){
this.cachedPT1.priority = _local3.priority;
_local4 = true;
};
if (((_local3.onDisable) || (_local3.onEnable))){
_notifyPluginsOfEnabled = true;
};
_hasPlugins = true;
} else {
this.cachedPT1 = new PropTween(this.target, _local1, Number(this.target[_local1]), ((typeof(this.vars[_local1]))=="number") ? (Number(this.vars[_local1]) - this.target[_local1]) : Number(this.vars[_local1]), _local1, false, this.cachedPT1);
this.propTweenLookup[_local1] = this.cachedPT1;
};
};
};
if (_local4){
onPluginEvent("onInit", this);
};
if (this.vars.runBackwards){
_local6 = this.cachedPT1;
while (_local6) {
_local6.start = (_local6.start + _local6.change);
_local6.change = -(_local6.change);
_local6 = _local6.nextNode;
};
};
_hasUpdate = Boolean(!((this.vars.onUpdate == null)));
if (_overwrittenProps){
killVars(_overwrittenProps);
if (this.cachedPT1 == null){
this.setEnabled(false, false);
};
};
if ((((((((_overwrite > 1)) && (this.cachedPT1))) && (masterList[this.target]))) && ((_local5.length > 1)))){
if (overwriteManager.manageOverwrites(this, this.propTweenLookup, _local5, _overwrite)){
init();
};
};
this.initted = true;
}
protected function easeProxy(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
return (this.vars.proxiedEase.apply(null, arguments.concat(this.vars.easeParams)));
}
override public function invalidate():void{
if (((_notifyPluginsOfEnabled) && (this.cachedPT1))){
onPluginEvent("onDisable", this);
};
this.cachedPT1 = null;
_overwrittenProps = null;
_hasUpdate = (this.initted = (this.active = (_notifyPluginsOfEnabled = false)));
this.propTweenLookup = {};
}
public function killVars(_arg1:Object, _arg2:Boolean=true):Boolean{
var _local3:String;
var _local4:PropTween;
var _local5:Boolean;
if (_overwrittenProps == null){
_overwrittenProps = {};
};
for (_local3 in _arg1) {
if ((_local3 in propTweenLookup)){
_local4 = propTweenLookup[_local3];
if (((_local4.isPlugin) && ((_local4.name == "_MULTIPLE_")))){
_local4.target.killProps(_arg1);
if (_local4.target.overwriteProps.length == 0){
_local4.name = "";
};
};
if (_local4.name != "_MULTIPLE_"){
if (_local4.nextNode){
_local4.nextNode.prevNode = _local4.prevNode;
};
if (_local4.prevNode){
_local4.prevNode.nextNode = _local4.nextNode;
} else {
if (this.cachedPT1 == _local4){
this.cachedPT1 = _local4.nextNode;
};
};
if (((_local4.isPlugin) && (_local4.target.onDisable))){
_local4.target.onDisable();
if (_local4.target.activeDisable){
_local5 = true;
};
};
delete propTweenLookup[_local3];
};
};
if (_arg2){
_overwrittenProps[_local3] = 1;
};
};
return (_local5);
}
override public function setEnabled(_arg1:Boolean, _arg2:Boolean=false):Boolean{
var _local3:Array;
if (_arg1){
_local3 = TweenLite.masterList[this.target];
if (!_local3){
TweenLite.masterList[this.target] = [this];
} else {
_local3[_local3.length] = this;
};
};
super.setEnabled(_arg1, _arg2);
if (((_notifyPluginsOfEnabled) && (this.cachedPT1))){
return (onPluginEvent((_arg1) ? "onEnable" : "onDisable", this));
};
return (false);
}
public static function initClass():void{
rootFrame = 0;
rootTimeline = new SimpleTimeline(null);
rootFramesTimeline = new SimpleTimeline(null);
rootTimeline.cachedStartTime = (getTimer() * 0.001);
rootFramesTimeline.cachedStartTime = rootFrame;
rootTimeline.autoRemoveChildren = true;
rootFramesTimeline.autoRemoveChildren = true;
_shape.addEventListener(Event.ENTER_FRAME, updateAll, false, 0, true);
if (overwriteManager == null){
overwriteManager = {mode:1, enabled:false};
};
}
public static function killTweensOf(_arg1:Object, _arg2:Boolean=false):void{
var _local3:Array;
var _local4:int;
if ((_arg1 in masterList)){
_local3 = masterList[_arg1];
_local4 = _local3.length;
while (_local4--) {
if (!TweenLite(_local3[_local4]).gc){
if (_arg2){
TweenLite(_local3[_local4]).complete(false, false);
} else {
TweenLite(_local3[_local4]).setEnabled(false, false);
};
};
};
delete masterList[_arg1];
};
}
public static function from(_arg1:Object, _arg2:Number, _arg3:Object):TweenLite{
_arg3.runBackwards = true;
if (!("immediateRender" in _arg3)){
_arg3.immediateRender = true;
};
return (new TweenLite(_arg1, _arg2, _arg3));
}
protected static function easeOut(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
_arg1 = (1 - (_arg1 / _arg4));
return ((1 - (_arg1 * _arg1)));
}
public static function delayedCall(_arg1:Number, _arg2:Function, _arg3:Array=null, _arg4:Boolean=false):TweenLite{
return (new TweenLite(_arg2, 0, {delay:_arg1, onComplete:_arg2, onCompleteParams:_arg3, immediateRender:false, useFrames:_arg4, overwrite:0}));
}
protected static function updateAll(_arg1:Event=null):void{
var _local2:Dictionary;
var _local3:Object;
var _local4:Array;
var _local5:int;
rootTimeline.renderTime((((getTimer() * 0.001) - rootTimeline.cachedStartTime) * rootTimeline.cachedTimeScale), false, false);
rootFrame++;
rootFramesTimeline.renderTime(((rootFrame - rootFramesTimeline.cachedStartTime) * rootFramesTimeline.cachedTimeScale), false, false);
if (!(rootFrame % 60)){
_local2 = masterList;
for (_local3 in _local2) {
_local4 = _local2[_local3];
_local5 = _local4.length;
while (_local5--) {
if (TweenLite(_local4[_local5]).gc){
_local4.splice(_local5, 1);
};
};
if (_local4.length == 0){
delete _local2[_local3];
};
};
};
}
public static function to(_arg1:Object, _arg2:Number, _arg3:Object):TweenLite{
return (new TweenLite(_arg1, _arg2, _arg3));
}
}
}//package com.greensock
Section 94
//Box2DMouseUtils (couk.psyked.box2d.utils.Box2DMouseUtils)
package couk.psyked.box2d.utils {
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
import Box2D.Collision.*;
import flash.display.*;
public class Box2DMouseUtils {
private static var m_world:b2World;
private static var m_physScale:Number;
private static var mousePVec:b2Vec2 = new b2Vec2();
private static var m_sprite:Sprite;
private static var accuracy:Number = 2;
private static var k_maxCount:int = 100;
public static function initialise(_arg1:b2World, _arg2:Number, _arg3:Sprite):void{
m_world = _arg1;
m_physScale = _arg2;
m_sprite = _arg3;
}
public static function getTopBodyAtMouse(_arg1:Boolean=false):b2Body{
var _local2:b2Vec2;
var _local3:Number;
var _local4:Number;
var _local5:b2AABB;
var _local6:Array;
var _local7:int;
var _local8:b2Body;
var _local9:int;
var _local10:b2Shape;
var _local11:Boolean;
_local2 = new b2Vec2();
_local3 = (m_sprite.mouseX / m_physScale);
_local4 = (m_sprite.mouseY / m_physScale);
_local2.Set(_local3, _local4);
_local5 = new b2AABB();
_local5.lowerBound.Set((_local3 - accuracy), (_local4 - accuracy));
_local5.upperBound.Set((_local3 + accuracy), (_local4 + accuracy));
_local6 = new Array();
_local7 = m_world.Query(_local5, _local6, k_maxCount);
_local8 = null;
_local9 = 0;
while (_local9 < _local7) {
if ((((_local6[_local9].GetBody().IsStatic() == false)) || (_arg1))){
_local10 = (_local6[_local9] as b2Shape);
_local11 = (_local6[_local9] as b2Shape).TestPoint(_local10.GetBody().GetXForm(), _local2);
if (_local11){
_local8 = _local10.GetBody();
break;
};
};
_local9++;
};
return (_local8);
}
public static function getAllBodiesAtMouse(_arg1:Boolean=false):Array{
var _local2:b2Vec2;
var _local3:Number;
var _local4:Number;
var _local5:b2AABB;
var _local6:Array;
var _local7:int;
var _local8:Array;
var _local9:int;
var _local10:b2Shape;
var _local11:Boolean;
_local2 = new b2Vec2();
_local3 = (m_sprite.mouseX / m_physScale);
_local4 = (m_sprite.mouseY / m_physScale);
_local2.Set(_local3, _local4);
_local5 = new b2AABB();
_local5.lowerBound.Set((_local3 - accuracy), (_local4 - accuracy));
_local5.upperBound.Set((_local3 + accuracy), (_local4 + accuracy));
_local6 = new Array();
_local7 = m_world.Query(_local5, _local6, k_maxCount);
_local8 = new Array();
_local9 = 0;
while (_local9 < _local7) {
if ((((_local6[_local9].GetBody().IsStatic() == false)) || (_arg1))){
_local10 = (_local6[_local9] as b2Shape);
_local11 = (_local6[_local9] as b2Shape).TestPoint(_local10.GetBody().GetXForm(), _local2);
if (_local11){
_local8.push(_local10.GetBody());
};
};
_local9++;
};
return (_local8);
}
}
}//package couk.psyked.box2d.utils
Section 95
//Box2DUtils (couk.psyked.box2d.utils.Box2DUtils)
package couk.psyked.box2d.utils {
import Box2D.Collision.Shapes.*;
import Box2D.Dynamics.*;
import couk.psyked.box2d.*;
import flash.display.*;
public class Box2DUtils {
public static function createBoxedWorld(_arg1:Box2DWorldOptions):Box2DWorld{
var _local2:b2World;
var _local3:b2PolygonDef;
var _local4:b2BodyDef;
var _local5:b2Body;
_local2 = new b2World(_arg1.aabb, _arg1.gravity, true);
_local3 = new b2PolygonDef();
_local4 = new b2BodyDef();
if (_arg1.edgeLeft){
_local4.position.Set((-100 / _arg1.scale), ((_arg1.height / _arg1.scale) / 2));
_local3.SetAsBox((100 / _arg1.scale), (((_arg1.height + 40) / _arg1.scale) / 2));
_local5 = _local2.CreateBody(_local4);
_local5.CreateShape(_local3);
_local5.SetMassFromShapes();
};
if (_arg1.edgeRight){
_local4.position.Set(((_arg1.width + 99) / _arg1.scale), ((_arg1.height / _arg1.scale) / 2));
_local5 = _local2.CreateBody(_local4);
_local5.CreateShape(_local3);
_local5.SetMassFromShapes();
};
if (_arg1.edgeTop){
_local4.position.Set(((_arg1.width / _arg1.scale) / 2), (-100 / _arg1.scale));
_local3.SetAsBox((((_arg1.width + 40) / _arg1.scale) / 2), (100 / _arg1.scale));
_local5 = _local2.CreateBody(_local4);
_local5.CreateShape(_local3);
_local5.SetMassFromShapes();
};
if (_arg1.edgeBottom){
_local4.position.Set(((_arg1.width / _arg1.scale) / 2), ((_arg1.height + 99) / _arg1.scale));
_local5 = _local2.CreateBody(_local4);
_local5.CreateShape(_local3);
_local5.SetMassFromShapes();
};
return (new Box2DWorld(_local2, _arg1));
}
public static function addDebugDraw(_arg1:b2World):Sprite{
var _local2:b2DebugDraw;
var _local3:Sprite;
_local2 = new b2DebugDraw();
_local3 = new Sprite();
_local2.SetSprite(_local3);
_local2.SetDrawScale(30);
_local2.SetFillAlpha(0.3);
_local2.SetLineThickness(1);
_local2.SetFlags((b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit));
_arg1.SetDebugDraw(_local2);
return (_local3);
}
}
}//package couk.psyked.box2d.utils
Section 96
//Box2DWorldOptions (couk.psyked.box2d.utils.Box2DWorldOptions)
package couk.psyked.box2d.utils {
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
import Box2D.Collision.*;
public class Box2DWorldOptions {
public var aabb:b2AABB;
public var edgeLeft:Boolean;
public var width:int;
public var edgeBottom:Boolean;
public var height:int;
public var scale:Number;
public var world:b2World;
public var gravity:b2Vec2;
public var edgeTop:Boolean;
public var edgeRight:Boolean;
public function Box2DWorldOptions(_arg1:int=800, _arg2:int=600, _arg3:int=30, _arg4:Number=9.8, _arg5:b2AABB=null){
scale = _arg3;
width = _arg1;
height = _arg2;
if (!_arg5){
aabb = new b2AABB();
aabb.lowerBound.Set(-1000, -1000);
aabb.upperBound.Set(1000, 1000);
} else {
aabb = _arg5;
};
gravity = new b2Vec2(0, _arg4);
}
public function setWorldEdges(_arg1:Boolean=false, _arg2:Boolean=false, _arg3:Boolean=false, _arg4:Boolean=false):void{
edgeBottom = _arg1;
edgeTop = _arg2;
edgeLeft = _arg3;
edgeRight = _arg4;
}
}
}//package couk.psyked.box2d.utils
Section 97
//GrahamScan (couk.psyked.box2d.utils.GrahamScan)
package couk.psyked.box2d.utils {
import flash.geom.*;
public class GrahamScan {
public function convexHull(_arg1:Array):Array{
return (findHull(order(_arg1)));
}
public function findHull(_arg1:Array):Array{
var _local2:int;
var _local3:Array;
var _local4:int;
_local2 = _arg1.length;
_local3 = new Array();
_local3.push(_arg1[0]);
_local3.push(_arg1[1]);
_local4 = 2;
while (_local4 < _local2) {
while (direction(_local3[(_local3.length - 2)], _local3[(_local3.length - 1)], _arg1[_local4]) > 0) {
_local3.pop();
};
_local3.push(_arg1[_local4]);
_local4++;
};
return (_local3);
}
private function direction(_arg1:Point, _arg2:Point, _arg3:Point):Number{
return ((((_arg2.x - _arg1.x) * (_arg3.y - _arg1.y)) - ((_arg2.y - _arg1.y) * (_arg3.x - _arg1.x))));
}
public function order(_arg1:Array):Array{
var _local2:Point;
var _local3:int;
var _local4:int;
var _local5:Array;
var _local6:Array;
var _local7:Array;
var _local8:Array;
var _local9:Number;
var _local10:Number;
var _local11:Number;
_local2 = _arg1[0];
_local3 = _arg1.length;
_local4 = 0;
while (_local4 < _local3) {
if (_arg1[_local4].y < _local2.y){
_local2 = _arg1[_local4];
} else {
if ((((_arg1[_local4].y == _local2.y)) && ((_arg1[_local4].x < _local2.x)))){
_local2 = _arg1[_local4];
};
};
_local4++;
};
_local5 = new Array();
_local6 = new Array();
_local7 = new Array();
_local4 = 0;
while (_local4 < _local3) {
_local9 = (_arg1[_local4].x - _local2.x);
_local10 = (_arg1[_local4].y - _local2.y);
_local11 = (_local10 / _local9);
if (_local11 < 0){
_local7.push({point:_arg1[_local4], cotangent:_local11});
} else {
_local6.push({point:_arg1[_local4], cotangent:_local11});
};
_local4++;
};
_local6.sortOn("cotangent", (Array.NUMERIC | Array.DESCENDING));
_local7.sortOn("cotangent", (Array.NUMERIC | Array.DESCENDING));
_local5 = _local7.concat(_local6);
_local8 = new Array();
_local8.push(_local2);
_local4 = 0;
while (_local4 < _local3) {
if (_local2 == _local5[_local4].point){
} else {
_local8.push(_local5[_local4].point);
};
_local4++;
};
return (_local8);
}
}
}//package couk.psyked.box2d.utils
Section 98
//PolygonTool (couk.psyked.box2d.utils.PolygonTool)
package couk.psyked.box2d.utils {
public class PolygonTool {
public static function getConvexPoly(_arg1:Array):Array{
var _local2:GrahamScan;
_local2 = new GrahamScan();
return (_local2.convexHull(_arg1.slice(0)));
}
public static function isPolyClockwise(_arg1:Array):Boolean{
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:Number;
_local5 = 0;
if (_arg1.length < 3){
return (false);
};
_local2 = 0;
while (_local2 < _arg1.length) {
_local3 = ((_local2 + 1) % _arg1.length);
_local4 = ((_local2 + 2) % _arg1.length);
_local6 = ((_arg1[_local3].x - _arg1[_local2].x) * (_arg1[_local4].y - _arg1[_local3].y));
_local6 = (_local6 - ((_arg1[_local3].y - _arg1[_local2].y) * (_arg1[_local4].x - _arg1[_local3].x)));
if (_local6 < 0){
_local5--;
} else {
if (_local6 > 0){
_local5++;
};
};
_local2++;
};
if (_local5 > 0){
return (false);
};
if (_local5 < 0){
return (true);
};
return (false);
}
public static function isPolyConvex(_arg1:Array):Boolean{
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:Number;
var _local7:int;
_local5 = 0;
_local7 = _arg1.length;
if (_local7 < 3){
return (false);
};
_local2 = 0;
while (_local2 < _local7) {
_local3 = ((_local2 + 1) % _local7);
_local4 = ((_local2 + 2) % _local7);
_local6 = ((_arg1[_local3].x - _arg1[_local2].x) * (_arg1[_local4].y - _arg1[_local3].y));
_local6 = (_local6 - ((_arg1[_local3].y - _arg1[_local2].y) * (_arg1[_local4].x - _arg1[_local3].x)));
if (_local6 < 0){
_local5 = (_local5 | 1);
} else {
if (_local6 > 0){
_local5 = (_local5 | 2);
};
};
if (_local5 == 3){
return (false);
};
_local2++;
};
if (_local5 != 0){
return (true);
};
return (false);
}
public static function getTriangulatedPoly(_arg1:Array):Array{
var _local2:Triangulate;
_local2 = new Triangulate();
return (_local2.process(_arg1.slice(0)));
}
}
}//package couk.psyked.box2d.utils
Section 99
//Triangulate (couk.psyked.box2d.utils.Triangulate)
package couk.psyked.box2d.utils {
public class Triangulate {
private static var EPSILON:Number = 1E-10;
private function snip(_arg1:Array, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:Array):Boolean{
var _local7:int;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
_local8 = _arg1[_arg6[_arg2]].x;
_local9 = _arg1[_arg6[_arg2]].y;
_local10 = _arg1[_arg6[_arg3]].x;
_local11 = _arg1[_arg6[_arg3]].y;
_local12 = _arg1[_arg6[_arg4]].x;
_local13 = _arg1[_arg6[_arg4]].y;
if (EPSILON > (((_local10 - _local8) * (_local13 - _local9)) - ((_local11 - _local9) * (_local12 - _local8)))){
return (false);
};
_local7 = 0;
while (_local7 < _arg5) {
if ((((((_local7 == _arg2)) || ((_local7 == _arg3)))) || ((_local7 == _arg4)))){
} else {
_local14 = _arg1[_arg6[_local7]].x;
_local15 = _arg1[_arg6[_local7]].y;
if (insideTriangle(_local8, _local9, _local10, _local11, _local12, _local13, _local14, _local15)){
return (false);
};
};
_local7++;
};
return (true);
}
public function insideTriangle(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number, _arg8:Number):Boolean{
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Number;
_local9 = (_arg5 - _arg3);
_local10 = (_arg6 - _arg4);
_local11 = (_arg1 - _arg5);
_local12 = (_arg2 - _arg6);
_local13 = (_arg3 - _arg1);
_local14 = (_arg4 - _arg2);
_local15 = (_arg7 - _arg1);
_local16 = (_arg8 - _arg2);
_local17 = (_arg7 - _arg3);
_local18 = (_arg8 - _arg4);
_local19 = (_arg7 - _arg5);
_local20 = (_arg8 - _arg6);
_local23 = ((_local9 * _local18) - (_local10 * _local17));
_local21 = ((_local13 * _local16) - (_local14 * _local15));
_local22 = ((_local11 * _local20) - (_local12 * _local19));
return ((((((_local23 >= 0)) && ((_local22 >= 0)))) && ((_local21 >= 0))));
}
public function area(_arg1:Array):Number{
var _local2:int;
var _local3:Number;
var _local4:int;
var _local5:int;
_local2 = _arg1.length;
_local3 = 0;
_local4 = (_local2 - 1);
_local5 = 0;
while (_local5 < _local2) {
_local3 = (_local3 + ((_arg1[_local4].x * _arg1[_local5].y) - (_arg1[_local5].x * _arg1[_local4].y)));
var _temp1 = _local5;
_local5 = (_local5 + 1);
_local4 = _temp1;
};
return ((_local3 * 0.5));
}
public function process(_arg1:Array):Array{
var _local2:Array;
var _local3:int;
var _local4:Array;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:int;
var _local12:int;
var _local13:int;
var _local14:int;
var _local15:int;
_local2 = new Array();
_local3 = _arg1.length;
if (_local3 < 3){
return (null);
};
_local4 = new Array();
if (0 < area(_arg1)){
_local5 = 0;
while (_local5 < _local3) {
_local4[_local5] = _local5;
_local5++;
};
} else {
_local5 = 0;
while (_local5 < _local3) {
_local4[_local5] = ((_local3 - 1) - _local5);
_local5++;
};
};
_local6 = _local3;
_local7 = (2 * _local6);
_local8 = 0;
_local5 = (_local6 - 1);
while (_local6 > 2) {
var _temp1 = _local7;
_local7 = (_local7 - 1);
if (0 >= _temp1){
return (null);
};
_local9 = _local5;
if (_local6 <= _local9){
_local9 = 0;
};
_local5 = (_local9 + 1);
if (_local6 <= _local5){
_local5 = 0;
};
_local10 = (_local5 + 1);
if (_local6 <= _local10){
_local10 = 0;
};
if (snip(_arg1, _local9, _local5, _local10, _local6, _local4)){
_local11 = _local4[_local9];
_local12 = _local4[_local5];
_local13 = _local4[_local10];
_local2.push(_arg1[_local11]);
_local2.push(_arg1[_local12]);
_local2.push(_arg1[_local13]);
_local8++;
_local14 = _local5;
_local15 = (_local5 + 1);
while (_local15 < _local6) {
_local4[_local14] = _local4[_local15];
_local14++;
_local15++;
};
_local6--;
_local7 = (2 * _local6);
};
};
return (_local2);
}
}
}//package couk.psyked.box2d.utils
Section 100
//Box2DWorld (couk.psyked.box2d.Box2DWorld)
package couk.psyked.box2d {
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
import Box2D.Dynamics.Joints.*;
import Box2D.Dynamics.*;
import couk.psyked.box2d.utils.*;
import flash.display.*;
import flash.utils.*;
import flash.geom.*;
import flash.events.*;
import wumedia.vector.*;
import flash.net.*;
public class Box2DWorld extends Sprite {
private var _framerateIndependantAnimation:Boolean;
private var _animateOnEnterFrame:Boolean;
private var isUpdating:Boolean;// = true
public var _world:b2World;
private var _deferedMouseInteraction:Boolean;
private var _mouseInteraction:Boolean;
private var options:Box2DWorldOptions;
private var _debugDraw:Boolean;
private var framerate:Number;// = 16.6666666666667
public var mouseInteractExclusions:Array;
private var mouseJoint:b2MouseJoint;
private var worldSprite:Sprite;
private var mouseDefinition:b2MouseJointDef;
public var fiaTimer:Timer;
public function Box2DWorld(_arg1:b2World, _arg2:Box2DWorldOptions){
isUpdating = true;
framerate = (1000 / 60);
super();
options = _arg2;
_world = _arg1;
worldSprite = Box2DUtils.addDebugDraw(_arg1);
Box2DMouseUtils.initialise(_world, options.scale, worldSprite);
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
public function unPauseUpdate(){
isUpdating = true;
}
public function createCircle(_arg1:int=0, _arg2:int=0, _arg3:int=30, _arg4:int=0, _arg5:Number=1, _arg6:Number=0){
var _local7:b2BodyDef;
var _local8:b2CircleDef;
var _local9:b2Body;
_local7 = new b2BodyDef();
_local7.isBullet = true;
_local7.position.Set((_arg1 / options.scale), (_arg2 / options.scale));
_local7.linearDamping = 0.25;
_local7.angularDamping = 0.25;
_local8 = new b2CircleDef();
_local8.radius = (_arg3 / options.scale);
_local8.density = _arg5;
_local8.friction = 3;
_local8.restitution = _arg6;
_local9 = _world.CreateBody(_local7);
_local9.SetAngle(((_arg4 % 360) * (Math.PI / 180)));
_local8.userData = _local9;
_local9.CreateShape(_local8);
_local9.SetMassFromShapes();
return (_local9);
}
public function get framerateIndependantAnimation():Boolean{
return (_framerateIndependantAnimation);
}
public function updateBox2D(_arg1:Event=null):void{
var _local2:Number;
var _local3:Number;
var _local4:b2Vec2;
if (!isUpdating){
return;
};
_world.Step((1 / 30), 10, 10);
if (mouseJoint){
_local2 = (mouseX / 30);
_local3 = (mouseY / 30);
_local4 = new b2Vec2(_local2, _local3);
mouseJoint.SetTarget(_local4);
};
}
public function get mouseInteraction():Boolean{
return (_mouseInteraction);
}
public function get animateOnEnterFrame():Boolean{
return (_animateOnEnterFrame);
}
public function set framerateIndependantAnimation(_arg1:Boolean):void{
if (_arg1){
if (!_framerateIndependantAnimation){
fiaTimer = new Timer(framerate);
fiaTimer.addEventListener(TimerEvent.TIMER, updateBox2D, false, 0, true);
fiaTimer.start();
};
} else {
if (_framerateIndependantAnimation){
fiaTimer.removeEventListener(TimerEvent.TIMER, updateBox2D);
fiaTimer.stop();
fiaTimer = null;
};
};
_framerateIndependantAnimation = _arg1;
}
public function get debugDraw():Boolean{
return (_debugDraw);
}
function onMouseUp(_arg1:Event):void{
if (mouseJoint){
_world.DestroyJoint(mouseJoint);
mouseJoint = null;
};
}
public function pauseUpdate(){
isUpdating = false;
}
public function stopTimer(){
fiaTimer.removeEventListener(TimerEvent.TIMER, updateBox2D);
fiaTimer = null;
}
public function set mouseInteraction(_arg1:Boolean):void{
if (stage){
if (_arg1){
if (!_mouseInteraction){
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
};
} else {
if (_mouseInteraction){
stage.removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
};
};
_mouseInteraction = _arg1;
_deferedMouseInteraction = _arg1;
} else {
_deferedMouseInteraction = _arg1;
};
}
public function set animateOnEnterFrame(_arg1:Boolean):void{
if (_arg1){
if (!_animateOnEnterFrame){
addEventListener(Event.ENTER_FRAME, updateBox2D);
};
} else {
if (_animateOnEnterFrame){
removeEventListener(Event.ENTER_FRAME, updateBox2D);
};
};
_animateOnEnterFrame = _arg1;
}
public function set debugDraw(_arg1:Boolean):void{
if (_arg1){
if (!contains(worldSprite)){
addChild(worldSprite);
};
} else {
if (contains(worldSprite)){
removeChild(worldSprite);
};
};
_debugDraw = _arg1;
}
public function createPolyFromLibraryShape(_arg1:int, _arg2:int, _arg3:String, _arg4:String, _arg5:int=0):void{
var loader:URLLoader;
var onLoaded:Function;
var x = _arg1;
var y = _arg2;
var shapeName = _arg3;
var libraryName = _arg4;
var rotation = _arg5;
onLoaded = function (_arg1:Event=null):void{
var _local2:Array;
var _local3:Point;
VectorShapes.extractFromLibrary(loader.data, [shapeName]);
_local2 = VectorShapes.getPoints(shapeName, 1);
for each (_local3 in _local2) {
trace(_local3.x, _local3.y);
};
if (_local2){
createComplexPolygon(x, y, _local2, rotation);
};
};
loader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.addEventListener(Event.COMPLETE, onLoaded);
loader.load(new URLRequest(libraryName));
}
public function createComplexPolygon(_arg1:int, _arg2:int, _arg3:Array, _arg4:int=0, _arg5:Number=1){
var _local6:b2BodyDef;
var _local7:b2Body;
var _local8:Array;
if (_arg3.length < 3){
throw (new Error("Complex Polygons must have at least 3 points."));
};
_local6 = new b2BodyDef();
_local6.position.Set((_arg1 / options.scale), (_arg2 / options.scale));
_local6.linearDamping = 0.25;
_local6.angularDamping = 0.25;
_local7 = _world.CreateBody(_local6);
_local7.SetAngle(((_arg4 % 360) * (Math.PI / 180)));
_local8 = PolygonTool.getTriangulatedPoly(_arg3);
if (_local8 != null){
makeComplexBody(_local7, _local8, _arg5);
} else {
makeComplexBody(_local7, PolygonTool.getConvexPoly(_arg3), _arg5);
};
_local7.SetMassFromShapes();
return (_local7);
}
private function onAddedToStage(_arg1:Event):void{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
mouseInteraction = _deferedMouseInteraction;
}
function makeComplexBody(_arg1:b2Body, _arg2:Array, _arg3:Number=1):void{
var _local4:int;
var _local5:int;
var _local6:b2PolygonDef;
var _local7:int;
_local4 = int((_arg2.length / 3));
_local5 = 0;
while (_local5 < _local4) {
_local6 = new b2PolygonDef();
_local6.density = _arg3;
_local6.friction = 0.43;
_local6.vertexCount = 3;
_local7 = (_local5 * 3);
_local6.vertices[0].Set((_arg2[_local7].x / 30), (_arg2[_local7].y / 30));
_local6.vertices[1].Set((_arg2[(_local7 + 1)].x / 30), (_arg2[(_local7 + 1)].y / 30));
_local6.vertices[2].Set((_arg2[(_local7 + 2)].x / 30), (_arg2[(_local7 + 2)].y / 30));
_local6.userData = _arg1;
_arg1.CreateShape(_local6);
_local5++;
};
_arg1.SetMassFromShapes();
_local6.userData = _arg1;
_arg1.CreateShape(_local6);
}
public function destroyBody(_arg1:b2Body){
_world.DestroyBody(_arg1);
}
function onMouseDown(_arg1:Event):void{
var _local2:b2Body;
var _local3:b2MouseJointDef;
_local2 = Box2DMouseUtils.getTopBodyAtMouse();
if (_local2){
_local3 = new b2MouseJointDef();
_local3.body1 = _world.GetGroundBody();
_local3.body2 = _local2;
_local3.target.Set((mouseX / 30), (mouseY / 30));
_local3.maxForce = 30000;
mouseJoint = (_world.CreateJoint(_local3) as b2MouseJoint);
};
}
public function createRectangle(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int=0, _arg6:Number=1){
var _local7:b2BodyDef;
var _local8:b2PolygonDef;
var _local9:b2Body;
_local7 = new b2BodyDef();
_local7.position.Set((_arg1 / options.scale), (_arg2 / options.scale));
_local7.linearDamping = 0.25;
_local7.angularDamping = 0.25;
_local8 = new b2PolygonDef();
_local8.SetAsBox((_arg3 / options.scale), (_arg4 / options.scale));
_local8.density = _arg6;
_local8.friction = 5;
_local9 = _world.CreateBody(_local7);
_local9.SetAngle(((_arg5 % 360) * (Math.PI / 180)));
_local8.userData = _local9;
_local9.CreateShape(_local8);
_local9.SetMassFromShapes();
return (_local9);
}
}
}//package couk.psyked.box2d
Section 101
//btn_10 (GAME_08_fla.btn_10)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_10 extends MovieClip {
public function btn_10(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 102
//btn_100 (GAME_08_fla.btn_100)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_100 extends MovieClip {
public var btn:MovieClip;
public function btn_100(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package GAME_08_fla
Section 103
//btn_101 (GAME_08_fla.btn_101)
package GAME_08_fla {
import flash.display.*;
import flash.text.*;
public dynamic class btn_101 extends MovieClip {
public var island:MovieClip;
public var bText:TextField;
public function btn_101(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 104
//btn_103 (GAME_08_fla.btn_103)
package GAME_08_fla {
import flash.display.*;
import flash.text.*;
public dynamic class btn_103 extends MovieClip {
public var bText:TextField;
public function btn_103(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 105
//btn_107 (GAME_08_fla.btn_107)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_107 extends MovieClip {
public var lock:MovieClip;
public var shade:MovieClip;
public function btn_107(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 106
//btn_11 (GAME_08_fla.btn_11)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_11 extends MovieClip {
public function btn_11(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 107
//btn_110 (GAME_08_fla.btn_110)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_110 extends MovieClip {
public var lock:MovieClip;
public var shade:MovieClip;
public function btn_110(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 108
//btn_111 (GAME_08_fla.btn_111)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_111 extends MovieClip {
public var lock:MovieClip;
public var shade:MovieClip;
public function btn_111(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 109
//btn_112 (GAME_08_fla.btn_112)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_112 extends MovieClip {
public var lock:MovieClip;
public var shade:MovieClip;
public function btn_112(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 110
//btn_113 (GAME_08_fla.btn_113)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_113 extends MovieClip {
public var lock:MovieClip;
public var shade:MovieClip;
public function btn_113(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 111
//btn_114 (GAME_08_fla.btn_114)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_114 extends MovieClip {
public var lock:MovieClip;
public var shade:MovieClip;
public function btn_114(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 112
//btn_12 (GAME_08_fla.btn_12)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_12 extends MovieClip {
public function btn_12(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 113
//btn_13 (GAME_08_fla.btn_13)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_13 extends MovieClip {
public function btn_13(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 114
//btn_14 (GAME_08_fla.btn_14)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_14 extends MovieClip {
public function btn_14(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 115
//btn_15 (GAME_08_fla.btn_15)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_15 extends MovieClip {
public function btn_15(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 116
//btn_155 (GAME_08_fla.btn_155)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_155 extends MovieClip {
public function btn_155(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 117
//btn_195 (GAME_08_fla.btn_195)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_195 extends MovieClip {
public function btn_195(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 118
//btn_197 (GAME_08_fla.btn_197)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_197 extends MovieClip {
public function btn_197(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 119
//btn_215 (GAME_08_fla.btn_215)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_215 extends MovieClip {
public function btn_215(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 120
//btn_225 (GAME_08_fla.btn_225)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_225 extends MovieClip {
public function btn_225(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 121
//btn_258 (GAME_08_fla.btn_258)
package GAME_08_fla {
import flash.display.*;
import flash.text.*;
public dynamic class btn_258 extends MovieClip {
public var bText:TextField;
public var poUS:MovieClip;
public function btn_258(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package GAME_08_fla
Section 122
//btn_7 (GAME_08_fla.btn_7)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_7 extends MovieClip {
public function btn_7(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 123
//btn_8 (GAME_08_fla.btn_8)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_8 extends MovieClip {
public function btn_8(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 124
//btn_9 (GAME_08_fla.btn_9)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_9 extends MovieClip {
public function btn_9(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 125
//btn_90 (GAME_08_fla.btn_90)
package GAME_08_fla {
import flash.display.*;
import flash.text.*;
public dynamic class btn_90 extends MovieClip {
public var bText:TextField;
public function btn_90(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 126
//btn_92 (GAME_08_fla.btn_92)
package GAME_08_fla {
import flash.display.*;
import flash.text.*;
public dynamic class btn_92 extends MovieClip {
public var bText:TextField;
public var poUS:MovieClip;
public function btn_92(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package GAME_08_fla
Section 127
//btn_93 (GAME_08_fla.btn_93)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_93 extends MovieClip {
public function btn_93(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 128
//btn_96 (GAME_08_fla.btn_96)
package GAME_08_fla {
import flash.display.*;
public dynamic class btn_96 extends MovieClip {
public function btn_96(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 129
//btn_98 (GAME_08_fla.btn_98)
package GAME_08_fla {
import flash.display.*;
import flash.text.*;
public dynamic class btn_98 extends MovieClip {
public var bText:TextField;
public function btn_98(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 130
//btn_99 (GAME_08_fla.btn_99)
package GAME_08_fla {
import flash.display.*;
import flash.text.*;
public dynamic class btn_99 extends MovieClip {
public var bText:TextField;
public function btn_99(){
addFrameScript(0, frame1, 7, frame8);
}
function frame1(){
stop();
}
function frame8(){
stop();
}
}
}//package GAME_08_fla
Section 131
//digitDisplay_223 (GAME_08_fla.digitDisplay_223)
package GAME_08_fla {
import flash.display.*;
import flash.utils.*;
import flash.geom.*;
import flash.events.*;
import flash.text.*;
import flash.net.*;
import adobe.utils.*;
import flash.accessibility.*;
import flash.errors.*;
import flash.external.*;
import flash.filters.*;
import flash.media.*;
import flash.printing.*;
import flash.system.*;
import flash.ui.*;
import flash.xml.*;
public dynamic class digitDisplay_223 extends MovieClip {
public var num0:TextField;
public var num1:TextField;
public var num3:TextField;
public var num6:TextField;
public var num4:TextField;
public var num5:TextField;
public var num2:TextField;
public var numsArray:Array;
public function digitDisplay_223(){
addFrameScript(0, frame1);
}
function frame1(){
numsArray = new Array(num0, num1, num2, num3, num4, num5, num6);
}
public function setNum(_arg1:uint){
var _local2:String;
var _local3:uint;
var _local4:int;
_local2 = String(_arg1);
_local3 = 0;
_local4 = 0;
while (_local4 < numsArray.length) {
numsArray[_local4].text = "0";
_local4++;
};
if (_local2.length > numsArray.length){
_local2 = _local2.slice(0, numsArray.length);
};
_local4 = (_local2.length - 1);
while (_local4 >= 0) {
numsArray[_local3].text = _local2.charAt(_local4);
_local3++;
_local4--;
};
}
}
}//package GAME_08_fla
Section 132
//digitDisplayLevel_221 (GAME_08_fla.digitDisplayLevel_221)
package GAME_08_fla {
import flash.display.*;
import flash.utils.*;
import flash.geom.*;
import flash.events.*;
import flash.text.*;
import flash.net.*;
import adobe.utils.*;
import flash.accessibility.*;
import flash.errors.*;
import flash.external.*;
import flash.filters.*;
import flash.media.*;
import flash.printing.*;
import flash.system.*;
import flash.ui.*;
import flash.xml.*;
public dynamic class digitDisplayLevel_221 extends MovieClip {
public var num0:TextField;
public var num1:TextField;
public var t:Timer;
public var myNum:uint;
public var numsArray:Array;
public function digitDisplayLevel_221(){
addFrameScript(0, frame1);
}
public function setNumDelayed(_arg1:uint){
t.start();
myNum = _arg1;
}
function frame1(){
numsArray = new Array(num0, num1);
myNum = 0;
t = new Timer(200);
t.addEventListener(TimerEvent.TIMER, doTime, false, 0, true);
}
public function setNum(_arg1:uint){
var _local2:String;
var _local3:uint;
var _local4:int;
myNum = _arg1;
_local2 = String(_arg1);
_local3 = 0;
_local4 = 0;
while (_local4 < numsArray.length) {
numsArray[_local4].text = "0";
_local4++;
};
_local4 = (_local2.length - 1);
while (_local4 >= 0) {
numsArray[_local3].text = _local2.charAt(_local4);
_local3++;
_local4--;
};
}
public function doTime(_arg1:TimerEvent){
setNum(myNum);
}
}
}//package GAME_08_fla
Section 133
//digitDisplayRolls_222 (GAME_08_fla.digitDisplayRolls_222)
package GAME_08_fla {
import flash.display.*;
import flash.utils.*;
import flash.geom.*;
import flash.events.*;
import flash.text.*;
import flash.net.*;
import adobe.utils.*;
import flash.accessibility.*;
import flash.errors.*;
import flash.external.*;
import flash.filters.*;
import flash.media.*;
import flash.printing.*;
import flash.system.*;
import flash.ui.*;
import flash.xml.*;
public dynamic class digitDisplayRolls_222 extends MovieClip {
public var num0:TextField;
public var num1:TextField;
public var t:Timer;
public var myNum:uint;
public var numsArray:Array;
public function digitDisplayRolls_222(){
addFrameScript(0, frame1);
}
public function setNumDelayed(_arg1:uint){
t.start();
myNum = _arg1;
}
function frame1(){
numsArray = new Array(num0, num1);
myNum = 0;
t = new Timer(200);
t.addEventListener(TimerEvent.TIMER, doTime, false, 0, true);
}
public function setNum(_arg1:uint){
var _local2:String;
var _local3:uint;
var _local4:int;
myNum = _arg1;
_local2 = String(_arg1);
_local3 = 0;
_local4 = 0;
while (_local4 < numsArray.length) {
numsArray[_local4].text = "0";
_local4++;
};
_local4 = (_local2.length - 1);
while (_local4 >= 0) {
numsArray[_local3].text = _local2.charAt(_local4);
_local3++;
_local4--;
};
}
public function doTime(_arg1:TimerEvent){
setNum(myNum);
}
}
}//package GAME_08_fla
Section 134
//digitDisplayTimer_224 (GAME_08_fla.digitDisplayTimer_224)
package GAME_08_fla {
import flash.display.*;
import flash.utils.*;
import flash.geom.*;
import flash.events.*;
import flash.text.*;
import flash.net.*;
import adobe.utils.*;
import flash.accessibility.*;
import flash.errors.*;
import flash.external.*;
import flash.filters.*;
import flash.media.*;
import flash.printing.*;
import flash.system.*;
import flash.ui.*;
import flash.xml.*;
public dynamic class digitDisplayTimer_224 extends MovieClip {
public var baseTime;
public var num0:TextField;
public var num1:TextField;
public var num3:TextField;
public var num2:TextField;
public var deadLine:uint;
public var timeLeft:int;
public var numsArray:Array;
public function digitDisplayTimer_224(){
addFrameScript(0, frame1);
}
public function timeRemains(){
var _local1:int;
var _local2:int;
_local1 = (getTimer() - baseTime);
_local1 = ((deadLine - _local1) / 1000);
if (_local1 < 0){
_local1 = 0;
};
timeLeft = _local1;
_local2 = Math.floor((_local1 / 60));
_local1 = (_local1 - (_local2 * 60));
return ((String(_local2) + String(_local1)));
}
public function updateTime(){
setNum(timeRemains());
}
function frame1(){
numsArray = new Array(num0, num1, num2, num3);
baseTime = getTimer();
deadLine = 10000;
timeLeft = 1000;
}
public function setNum(_arg1:uint){
var _local2:String;
var _local3:uint;
var _local4:int;
_local2 = String(_arg1);
_local3 = 0;
_local4 = 0;
while (_local4 < numsArray.length) {
numsArray[_local4].text = "0";
_local4++;
};
_local4 = (_local2.length - 1);
while (_local4 >= 0) {
numsArray[_local3].text = _local2.charAt(_local4);
_local3++;
_local4--;
};
}
public function timeElapsed(){
var _local1:int;
var _local2:int;
_local1 = ((getTimer() - baseTime) / 1000);
_local2 = Math.floor((_local1 / 60));
_local1 = (_local1 - (_local2 * 60));
return ((String(_local2) + String(_local1)));
}
}
}//package GAME_08_fla
Section 135
//engine_227 (GAME_08_fla.engine_227)
package GAME_08_fla {
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
import Box2D.Collision.*;
import couk.psyked.box2d.*;
import couk.psyked.box2d.utils.*;
import flash.display.*;
import flash.utils.*;
import flash.geom.*;
import flash.events.*;
import flash.text.*;
import flash.net.*;
import adobe.utils.*;
import flash.accessibility.*;
import flash.errors.*;
import flash.external.*;
import flash.filters.*;
import flash.media.*;
import flash.printing.*;
import flash.system.*;
import flash.ui.*;
import flash.xml.*;
public dynamic class engine_227 extends MovieClip {
public var tpExp:MovieClip;
public var powerArrow:MovieClip;
public var isCatchAllow:Boolean;
public var enemies:Array;
public var MAX_POWER:int;
public var levelGraphics:MovieClip;
public var pBodies:Array;
public var finalWinTimer:Timer;
public var grPrevX:Number;
public var b:b2Body;
public var BOOM_RADIUS:int;
public var enemyCount:uint;
public var grPrevY:Number;
public var allowGrenadeChangeTimer:Timer;
public var BOOM_POWER:int;
public var grGfx:MovieClip;
public var MIN_POWER:int;
public var score:int;
public var options:Box2DWorldOptions;
public var powerLine:MovieClip;
public var activeRabbid:MovieClip;
public var liveGrenade:Boolean;
public var TIME:int;
public var firstRabbid:MovieClip;
public var HITSCORE:uint;
public var cLevel:uint;
public var gameBoxes;
public var launch_y:int;
public var shapes:Array;
public var isPaused:Boolean;
public var launch_x:int;
public var killHitTimer:Timer;
public var levelBg:MovieClip;
public var throwDelayTimer;
public var m_contactListener;
public var pBoxes:Array;
public var TRIPLEHITSCORE:uint;
public var PROPHITSCORE:uint;
public var grenade:b2Body;
public var canvas:MovieClip;
public var air:Boolean;
public var FUSE:Timer;
public var restarting:Boolean;
public var ROLLS:uint;
public var allowTimer:Timer;
public var dad:MovieClip;
public var world:Box2DWorld;
public var isGrenadeChange;
public var pEnemies:Array;
public var currentShape:MovieClip;
public var rabbids:Array;
public var DOUBLEHITSCORE:uint;
public var boxes:Array;
public var clickX:int;
public var clickY:int;
public var gameEnemies;
public var isThrowDelayed:Boolean;
public var levelXML:XML;
public function engine_227(){
addFrameScript(0, frame1);
}
public function doImport(){
var _local1:XML;
var _local2:props;
var _local3:uint;
var _local4:uint;
var _local5:uint;
clearEditor();
enemyCount = 0;
_local3 = 0;
while (_local3 < levelXML.props.children().length()) {
_local1 = levelXML.props.children()[_local3];
_local2 = new props();
_local2.x = (_local1.@x - 100);
_local2.y = (_local1.@y - 100);
_local2.rotation = _local1.@rotation;
_local2.gotoAndStop(_local1.name);
addChildAt(_local2, (this.getChildIndex(levelGraphics) - 1));
if (String(_local1.name).indexOf("grunt") != -1){
enemies.push(_local2);
_local2.dead = false;
enemyCount++;
} else {
if (String(_local1.name).indexOf("rabbid") == -1){
boxes.push(_local2);
};
};
_local3++;
};
_local4 = 0;
while (_local4 < levelXML.polys.children().length()) {
_local1 = levelXML.polys.children()[_local4];
currentShape = new MovieClip();
currentShape.pointsData = stringToPoints(String(_local1.points));
shapes.push(currentShape);
_local4++;
};
_local5 = 0;
while (_local5 < levelXML.rabbids.children().length()) {
_local1 = levelXML.rabbids.children()[_local5];
_local2 = new props();
_local2.x = (_local1.@x - 100);
_local2.y = (_local1.@y - 100);
_local2.gotoAndStop(_local1.@name);
if (_local1.@facing == "right"){
_local2.scaleX = -(_local2.scaleX);
};
addChildAt(_local2, (this.getChildIndex(levelGraphics) - 1));
rabbids.push(_local2);
if (_local2.currentLabel == "teammate_rabbid"){
_local2.rabbid.gotoAndStop("throw");
_local2.rabbid.doLoop = true;
} else {
firstRabbid = _local2;
};
_local5++;
};
}
public function clearEditor(){
shapes = new Array();
while (enemies.length > 0) {
if (this.contains(enemies[(enemies.length - 1)])){
removeChild(enemies.pop());
} else {
enemies.pop();
};
};
while (boxes.length > 0) {
if (this.contains(boxes[(boxes.length - 1)])){
removeChild(boxes.pop());
} else {
boxes.pop();
};
};
while (rabbids.length > 0) {
if (this.contains(rabbids[(rabbids.length - 1)])){
removeChild(rabbids.pop());
} else {
rabbids.pop();
};
};
}
public function ridBg(_arg1:MovieClip){
var _local2:Object;
var _local3:uint;
_local3 = 0;
while (_local3 < _arg1.numChildren) {
_local2 = _arg1.getChildAt(_local3);
if (_local2 != _arg1.FG){
_local2.visible = false;
};
_local3++;
};
}
public function doFinalWin(_arg1:TimerEvent=null){
finalWinTimer.removeEventListener(TimerEvent.TIMER, doFinalWin);
finalWinTimer.stop();
dad.gotoAndStop("final_screen");
}
public function doFail(_arg1:String){
powerArrow.visible = false;
isPaused = true;
MovieClip(parent).msg.popScreenDelayed(2, false, 1000);
if (_arg1 == "grenades"){
MovieClip(parent).crampText(MovieClip(parent).msg.box.fail.failText, MovieClip(parent).langXML.failedtextgrenades);
} else {
if (_arg1 == "time"){
MovieClip(parent).crampText(MovieClip(parent).msg.box.fail.failText, MovieClip(parent).langXML.failedtexttime);
};
};
}
public function nextLevel(){
score = 0;
restarting = true;
world.pauseUpdate();
destroyAllBodies();
clearAllGraphics();
cLevel++;
dad.cLevel++;
trace(dad.cLevel, cLevel, "*******************************************************************");
initGame(cLevel, dad.getLevelName());
doImport();
createAllBodies();
liveGrenade = false;
throwGrenade(true);
isCatchAllow = false;
allowTimer.stop();
FUSE.stop();
world.unPauseUpdate();
restarting = false;
dad.gameUi.levelNum.setNum((cLevel + 1));
isPaused = false;
}
public function pointsToDeg(_arg1, _arg2, _arg3, _arg4){
var _local5:*;
_local5 = Math.atan2((_arg2 - _arg4), (_arg1 - _arg3));
return ((_local5 * (180 / Math.PI)));
}
function frame1(){
stop();
isPaused = true;
HITSCORE = 250;
DOUBLEHITSCORE = 1000;
TRIPLEHITSCORE = 2000;
PROPHITSCORE = 100;
score = 0;
restarting = false;
options = new Box2DWorldOptions(900, 700, 30, 9.8);
options.setWorldEdges();
world = Box2DUtils.createBoxedWorld(options);
world.mouseInteractExclusions = new Array();
world.mouseInteraction = false;
world.framerateIndependantAnimation = true;
m_contactListener = new b2ContactListener();
world._world.SetContactListener(m_contactListener);
addChild(world);
grGfx.mouseEnabled = false;
grGfx.mouseChildren = false;
shapes = new Array();
enemies = new Array();
boxes = new Array();
rabbids = new Array();
pBodies = new Array();
pEnemies = new Array();
pBoxes = new Array();
grenade = null;
gameEnemies = new Array();
gameBoxes = new Array();
isGrenadeChange = true;
allowTimer = new Timer(100);
killHitTimer = new Timer(40);
allowGrenadeChangeTimer = new Timer(80);
allowGrenadeChangeTimer.addEventListener(TimerEvent.TIMER, allowGrenadeChange);
allowTimer.addEventListener(TimerEvent.TIMER, allowCatch);
killHitTimer.addEventListener(TimerEvent.TIMER, killHit);
FUSE = new Timer(3000);
throwDelayTimer = new Timer(400);
FUSE.addEventListener(TimerEvent.TIMER, doFuse);
throwDelayTimer.addEventListener(TimerEvent.TIMER, liftThrowDelay);
MIN_POWER = 20;
MAX_POWER = 250;
liveGrenade = false;
isThrowDelayed = false;
isCatchAllow = true;
air = false;
grPrevX = 0;
grPrevY = 0;
launch_x = 0;
launch_y = 0;
BOOM_RADIUS = 3;
BOOM_POWER = 8;
doImport();
createAllBodies();
powerLine = new MovieClip();
this.addChild(powerLine);
throwGrenade(true);
finalWinTimer = new Timer(3000);
this.addEventListener(Event.ENTER_FRAME, doFrame, false, 0, true);
this.addEventListener(MouseEvent.MOUSE_DOWN, doClick, false, 0, true);
}
public function stringToPoints(_arg1:String){
var _local2:Array;
var _local3:Array;
var _local4:uint;
_local2 = new Array();
_local3 = _arg1.split(" ");
_local4 = 0;
while (_local4 < _local3.length) {
if (_local3[_local4] == ""){
return (_local2);
};
_local2.push([(_local3[_local4] - 100), (_local3[(_local4 + 1)] - 100)]);
_local4 = (_local4 + 2);
};
return (_local2);
}
public function explodeHere(_arg1:int=0, _arg2:int=0){
var _local3:uint;
var _local4:Array;
var _local5:b2Vec2;
var _local6:b2Segment;
var _local7:b2Shape;
var _local8:uint;
_local3 = 0;
_local4 = [1];
_local5 = new b2Vec2();
_local6 = new b2Segment();
_local8 = 0;
while (_local8 < pBodies.length) {
pBodies[_local8].isHit = false;
_local8++;
};
_local8 = 0;
while (_local8 < 360) {
_local6 = new b2Segment();
_local6.p1.SetV(new b2Vec2((_arg1 / 30), (_arg2 / 30)));
_local6.p2.SetV(new b2Vec2((Math.sin(degToRad(_local8)) * BOOM_RADIUS), (Math.cos(degToRad(_local8)) * BOOM_RADIUS)));
_local6.p2.Add(_local6.p1);
_local7 = world._world.RaycastOne(_local6, _local4, _local5, true, null);
if (_local7 != null){
_local7.userData.isHit = true;
_local7.userData.ApplyImpulse(new b2Vec2((Math.sin(degToRad(_local8)) * BOOM_POWER), (Math.cos(degToRad(_local8)) * BOOM_POWER)), new b2Vec2((_arg1 / 30), (_arg2 / 30)));
};
_local8 = (_local8 + 20);
};
_local8 = 0;
while (_local8 < pEnemies.length) {
if (pEnemies[_local8].isHit){
enemies[_local8].rotation = 0;
enemies[_local8].enemy.gotoAndStop("hit");
this.setChildIndex(enemies[_local8], this.getChildIndex(levelGraphics));
if (!enemies[_local8].dead){
enemyCount--;
enemies[_local8].dead = true;
_local3++;
trace("ENEMY DOWN!", "enemies: ", enemyCount);
};
if ((((enemies[_local8].x > _arg1)) && (!((enemies[_local8].currentLabel.indexOf("right") == -1))))){
enemies[_local8].scaleX = -1;
} else {
if ((((enemies[_local8].x < _arg1)) && (!((enemies[_local8].currentLabel.indexOf("left") == -1))))){
enemies[_local8].scaleX = -1;
};
};
};
_local8++;
};
if (_local3 == 1){
addScore(HITSCORE);
} else {
if (_local3 == 2){
addScore(DOUBLEHITSCORE);
} else {
if (_local3 >= 3){
addScore(TRIPLEHITSCORE);
};
};
};
dad.soundBox.explode();
tpExp = new tpExplode();
this.addChild(tpExp);
tpExp.x = _arg1;
tpExp.y = _arg2;
killHitTimer.start();
}
public function radToDeg(_arg1:Number){
return (((_arg1 * 180) / Math.PI));
}
public function addScore(_arg1:int){
score = (score + _arg1);
MovieClip(parent).gameUi.scoreNum.setNum(score);
}
public function doFuse(_arg1:TimerEvent){
var _local2:int;
var _local3:int;
var _local4:MovieClip;
var _local5:uint;
if (dad.currentFrame != 41){
FUSE.stop();
return;
};
throwDelayTimer.stop();
isThrowDelayed = false;
if (grenade != null){
_local2 = (grenade.GetPosition().x * 30);
_local3 = (grenade.GetPosition().y * 30);
world.destroyBody(grenade);
grenade = null;
} else {
if (liveGrenade){
_local2 = launch_x;
_local3 = launch_y;
activeRabbid.rabbid.gotoAndStop("boom");
dad.soundBox.shortScream();
};
};
liveGrenade = false;
allowTimer.stop();
explodeHere(_local2, _local3);
FUSE.stop();
if (isPaused){
return;
};
if (ROLLS > 0){
throwGrenade(true);
firstRabbid.rabbid.gotoAndStop("reload");
} else {
if (enemyCount > 0){
dad.soundBox.scream();
firstRabbid.rabbid.gotoAndStop("fail");
doFail("grenades");
} else {
firstRabbid.rabbid.gotoAndStop("success");
dad.soundBox.victory();
};
};
_local5 = 0;
while (_local5 < rabbids.length) {
_local4 = rabbids[_local5];
if (_local4.currentLabel == "teammate_rabbid"){
if (((!((_local4.rabbid.currentLabel == "throw"))) && (!((_local4.rabbid.currentLabel == "boom"))))){
_local4.rabbid.doLoop = true;
_local4.rabbid.gotoAndStop("throw");
};
};
_local5++;
};
}
public function powerVector(_arg1, _arg2, _arg3, _arg4){
var _local5:int;
var _local6:int;
var _local7:Number;
var _local8:Number;
_local5 = (_arg3 - _arg1);
_local6 = (_arg4 - _arg2);
_local7 = Math.atan2(_local5, _local6);
_local8 = (Math.sqrt(((_local5 * _local5) + (_local6 * _local6))) * 1.2);
if (_local8 < MIN_POWER){
_local8 = MIN_POWER;
} else {
if (_local8 > MAX_POWER){
_local8 = MAX_POWER;
};
};
return (new b2Vec2(((Math.sin(_local7) * _local8) / 30), ((Math.cos(_local7) * _local8) / 30)));
}
public function restartLevel(){
score = 0;
addScore(0);
restarting = true;
ROLLS = uint(levelXML.info.@rolls);
TIME = uint(levelXML.info.@time);
MovieClip(parent).gameUi.rollsNum.setNum(ROLLS);
MovieClip(parent).gameUi.timeNum.baseTime = getTimer();
world.pauseUpdate();
destroyAllBodies();
doImport();
createAllBodies();
liveGrenade = false;
throwGrenade(true);
isCatchAllow = false;
allowTimer.stop();
FUSE.stop();
world.unPauseUpdate();
restarting = false;
isPaused = false;
}
public function clearAllGraphics(){
var _local1:uint;
this.removeChild(levelGraphics);
this.removeChild(levelBg);
_local1 = 0;
while (_local1 < enemies.length) {
if (this.contains(enemies[_local1])){
removeChild(enemies[_local1]);
};
_local1++;
};
_local1 = 0;
while (_local1 < boxes.length) {
if (this.contains(boxes[_local1])){
removeChild(boxes[_local1]);
};
_local1++;
};
_local1 = 0;
while (_local1 < rabbids.length) {
if (this.contains(rabbids[_local1])){
removeChild(rabbids[_local1]);
};
_local1++;
};
boxes = new Array();
rabbids = new Array();
enemies = new Array();
}
public function cleanUp(){
removeEventListener(Event.ENTER_FRAME, doFrame);
removeEventListener(MouseEvent.MOUSE_DOWN, doClick);
allowGrenadeChangeTimer.removeEventListener(TimerEvent.TIMER, allowGrenadeChange);
allowTimer.removeEventListener(TimerEvent.TIMER, allowCatch);
killHitTimer.removeEventListener(TimerEvent.TIMER, killHit);
FUSE.removeEventListener(TimerEvent.TIMER, doFuse);
throwDelayTimer.removeEventListener(TimerEvent.TIMER, liftThrowDelay);
world.pauseUpdate();
destroyAllBodies();
world.stopTimer();
world._world = null;
world = null;
}
public function pointHitBox(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int){
if ((((((((_arg1 > (_arg3 - (_arg5 >> 1)))) && ((_arg1 < (_arg3 + (_arg5 >> 1)))))) && ((_arg2 > (_arg4 - (_arg6 >> 1)))))) && ((_arg2 < (_arg4 + (_arg6 >> 1)))))){
return (true);
};
return (false);
}
public function nameToPoints(_arg1:String){
var _local2:Array;
var _local3:Array;
var _local4:uint;
var _local5:uint;
_local2 = new Array();
_local4 = 0;
while (_local4 < dad.propXML.children().length()) {
if (dad.propXML.children()[_local4].name == _arg1){
_local3 = String(dad.propXML.children()[_local4].points).split(" ");
};
_local4++;
};
_local5 = 0;
while (_local5 < _local3.length) {
if (_local3[_local5] == ""){
return (_local2);
};
_local2.push(new Point(_local3[_local5], _local3[(_local5 + 1)]));
_local5 = (_local5 + 2);
};
return (_local2);
}
public function allowCatch(_arg1:TimerEvent){
isCatchAllow = true;
}
public function createAllBodies(){
var _local1:uint;
var _local2:Array;
var _local3:props;
var _local4:uint;
var _local5:int;
var _local6:uint;
var _local7:uint;
var _local8:uint;
world.pauseUpdate();
_local1 = 0;
_local4 = 0;
while (_local4 < shapes.length) {
_local2 = new Array();
_local8 = 0;
while (_local8 < shapes[_local4].pointsData.length) {
_local2.push(new Point(shapes[_local4].pointsData[_local8][0], shapes[_local4].pointsData[_local8][1]));
_local8++;
};
b = world.createComplexPolygon(0, 0, _local2, 0, 0);
pBodies.push(b);
_local1++;
_local4++;
};
_local4 = 0;
while (_local4 < enemies.length) {
b = world.createComplexPolygon(enemies[_local4].x, enemies[_local4].y, nameToPoints(String(enemies[_local4].currentLabel)), enemies[_local4].rotation, 1);
pBodies.push(b);
pEnemies.push(b);
b.isEnemy = true;
_local3 = new props();
_local3.gotoAndStop(enemies[_local4].currentLabel);
_local3.x = enemies[_local4].x;
_local3.y = enemies[_local4].y;
_local3.rotation = enemies[_local4].rotation;
_local1++;
_local4++;
};
_local4 = 0;
while (_local4 < boxes.length) {
_local5 = boxes[_local4].rotation;
boxes[_local4].rotation = 0;
_local6 = (boxes[_local4].width / 2);
_local7 = (boxes[_local4].height / 2);
boxes[_local4].rotation = _local5;
b = world.createComplexPolygon(boxes[_local4].x, boxes[_local4].y, nameToPoints(String(boxes[_local4].currentLabel)), boxes[_local4].rotation, 1);
pBodies.push(b);
pBoxes.push(b);
_local3 = new props();
_local3.gotoAndStop(boxes[_local4].currentLabel);
_local3.x = boxes[_local4].x;
_local3.y = boxes[_local4].y;
_local3.rotation = boxes[_local4].rotation;
_local1++;
_local4++;
};
_local4 = 0;
while (_local4 < rabbids.length) {
_local3 = new props();
_local3.gotoAndStop(rabbids[_local4].currentLabel);
_local3.x = rabbids[_local4].x;
_local3.y = rabbids[_local4].y;
_local3.scaleX = rabbids[_local4].scaleX;
_local4++;
};
world.unPauseUpdate();
}
public function initGame(_arg1:uint, _arg2:String){
var _local3:Class;
MovieClip(parent).gameUi.timeNum.baseTime = getTimer();
cLevel = _arg1;
_local3 = (getDefinitionByName(_arg2) as Class);
levelGraphics = new (_local3);
levelBg = new (_local3);
this.addChild(levelBg);
this.addChild(levelGraphics);
ridBg(levelGraphics);
levelBg.FG.visible = false;
this.setChildIndex(grGfx, (this.getChildIndex(levelGraphics) - 1));
this.setChildIndex(powerArrow, this.getChildIndex(levelGraphics));
levelXML = dad.levelsXML.children()[cLevel];
ROLLS = uint(levelXML.info.@rolls);
TIME = uint(levelXML.info.@time);
MovieClip(parent).gameUi.rollsNum.setNum(ROLLS);
score = 0;
MovieClip(parent).gameUi.scoreNum.setNum(score);
MovieClip(parent).gameUi.timeNum.deadLine = levelXML.info.@time;
}
public function degToRad(_arg1:Number){
return (((_arg1 * Math.PI) / 180));
}
public function updateSprites(){
var _local1:uint;
_local1 = 0;
while (_local1 < enemies.length) {
if (!pEnemies[_local1].isHit){
enemies[_local1].x = uint((pEnemies[_local1].GetPosition().x * 30));
enemies[_local1].y = uint((pEnemies[_local1].GetPosition().y * 30));
enemies[_local1].rotation = radToDeg(pEnemies[_local1].GetAngle());
if ((((enemies[_local1].y > 550)) && (!(pEnemies[_local1].isDead)))){
pEnemies[_local1].isHit = true;
killHit();
addScore(HITSCORE);
enemyCount--;
enemies[_local1].dead = true;
};
};
_local1++;
};
_local1 = 0;
while (_local1 < boxes.length) {
boxes[_local1].x = uint((pBoxes[_local1].GetPosition().x * 30));
boxes[_local1].y = uint((pBoxes[_local1].GetPosition().y * 30));
boxes[_local1].rotation = radToDeg(pBoxes[_local1].GetAngle());
_local1++;
};
if (grenade != null){
grGfx.visible = true;
grGfx.x = uint((grenade.GetPosition().x * 30));
grGfx.y = uint((grenade.GetPosition().y * 30));
if (grenade.isOnGround){
if (isGrenadeChange){
isGrenadeChange = false;
allowGrenadeChangeTimer.start();
grGfx.gotoAndStop(1);
};
if (grGfx.currentFrame == 1){
grGfx.rotation = radToDeg(grenade.GetAngle());
};
} else {
if (isGrenadeChange){
isGrenadeChange = false;
allowGrenadeChangeTimer.start();
grGfx.gotoAndStop(2);
if (pointDistance((grenade.GetPosition().x * 30), (grenade.GetPosition().y * 30), grPrevX, grPrevY) < 10){
grGfx.gotoAndStop(3);
};
};
if (grGfx.currentFrame >= 2){
grGfx.rotation = pointsToDeg((grenade.GetPosition().x * 30), (grenade.GetPosition().y * 30), grPrevX, grPrevY);
};
};
grPrevX = (grenade.GetPosition().x * 30);
grPrevY = (grenade.GetPosition().y * 30);
} else {
grGfx.visible = false;
};
}
public function killHit(_arg1:TimerEvent=null){
var _local2:uint;
world.pauseUpdate();
killHitTimer.stop();
_local2 = 0;
while (_local2 < pEnemies.length) {
if (pEnemies[_local2].isHit){
if (!pEnemies[_local2].isDead){
world.destroyBody(pEnemies[_local2]);
pEnemies[_local2].isDead = true;
};
};
_local2++;
};
_local2 = 0;
while (_local2 < pBoxes.length) {
if (pBoxes[_local2].isHit){
if (!pBoxes[_local2].isDead){
world.destroyBody(pBoxes[_local2]);
pBoxes[_local2].isDead = true;
};
if (this.contains(boxes[_local2])){
removeChild(boxes[_local2]);
};
addScore(PROPHITSCORE);
};
_local2++;
};
world.unPauseUpdate();
}
public function startGame(){
isPaused = false;
MovieClip(parent).gameUi.timeNum.baseTime = getTimer();
}
public function throwGrenade(_arg1:Boolean=false){
var _local2:uint;
if (grenade == null){
if ((((ROLLS < 1)) && (!(liveGrenade)))){
return;
};
_local2 = 0;
while (_local2 < rabbids.length) {
if ((((String(rabbids[_local2].currentLabel) == "rabbid")) && (!(liveGrenade)))){
launch_x = rabbids[_local2].x;
launch_y = (rabbids[_local2].y - 10);
_local2 = rabbids.length;
activeRabbid = firstRabbid;
if (!_arg1){
ROLLS--;
MovieClip(parent).gameUi.rollsNum.setNum(ROLLS);
};
};
_local2++;
};
if (((_arg1) || (isThrowDelayed))){
return;
};
FUSE.start();
liveGrenade = true;
isCatchAllow = false;
if (activeRabbid.rabbid.currentLabel == "throw"){
activeRabbid.rabbid.rabbidThrow.gotoAndPlay(1);
} else {
activeRabbid.rabbid.gotoAndStop("throw");
};
throwDelayTimer.start();
isThrowDelayed = true;
};
}
public function handleThrow(){
var _local1:b2Vec2;
var _local2:int;
var _local3:int;
var _local4:Boolean;
var _local5:uint;
if (isPaused){
powerArrow.visible = false;
return;
};
if ((((grenade == null)) && (!(isThrowDelayed)))){
powerLine.x = launch_x;
powerLine.y = launch_y;
powerArrow.x = launch_x;
powerArrow.y = launch_y;
if (activeRabbid.x < mouseX){
activeRabbid.scaleX = 1;
} else {
activeRabbid.scaleX = -1;
};
powerLine.graphics.clear();
powerLine.graphics.lineStyle(2, 0xFF0000);
_local1 = powerVector(launch_x, launch_y, mouseX, mouseY);
powerArrow.powerMask.scaleX = ((_local1.Length() * 30) / MAX_POWER);
powerArrow.rotation = pointsToDeg(mouseX, mouseY, launch_x, launch_y);
powerArrow.visible = true;
} else {
powerArrow.visible = false;
powerLine.graphics.clear();
if (!isThrowDelayed){
_local2 = (grenade.GetPosition().x * 30);
_local3 = (grenade.GetPosition().y * 30);
_local4 = true;
_local5 = 0;
while (_local5 < rabbids.length) {
if (pointHitBox(_local2, _local3, rabbids[_local5].x, rabbids[_local5].y, 40, 60)){
_local4 = false;
if (isCatchAllow){
allowTimer.stop();
world.destroyBody(grenade);
grenade = null;
launch_x = rabbids[_local5].x;
launch_y = (rabbids[_local5].y - 10);
activeRabbid = rabbids[_local5];
activeRabbid.rabbid.gotoAndStop("reload");
throwGrenade(true);
isCatchAllow = false;
};
};
_local5++;
};
};
if (_local4){
allowTimer.start();
};
};
}
public function pointDistance(_arg1:int, _arg2:int, _arg3:int, _arg4:int):Number{
return (Math.sqrt((Math.pow((_arg3 - _arg1), 2) + Math.pow((_arg4 - _arg2), 2))));
}
public function doFrame(_arg1:Event){
if (restarting){
return;
};
updateSprites();
if (isPaused){
return;
};
MovieClip(parent).gameUi.timeNum.updateTime();
if (MovieClip(parent).gameUi.timeNum.timeLeft <= 0){
doFail("time");
};
handleThrow();
if (enemyCount <= 0){
if (firstRabbid.rabbid.currentLabel != "success"){
firstRabbid.rabbid.gotoAndPlay("success");
dad.soundBox.victory();
};
isPaused = true;
MovieClip(parent).calculateScore(score, ROLLS, MovieClip(parent).gameUi.timeNum.timeLeft);
powerArrow.visible = false;
if (dad.winLevel > cLevel){
MovieClip(parent).msg.popScreenDelayed(3, false, 2000);
dad.unlockNext();
} else {
finalWinTimer.addEventListener(TimerEvent.TIMER, doFinalWin, false, 0, true);
finalWinTimer.start();
};
};
}
public function zeroize(_arg1:uint, _arg2:uint){
var _local3:String;
var _local4:String;
_local3 = "00000000000000000000000000000000000000000000000000";
_local4 = String(_arg1);
_local3 = _local3.slice(0, (_arg2 - _local4.length));
return ((_local3 + _local4));
}
public function liftThrowDelay(_arg1:TimerEvent){
throwDelayTimer.stop();
isThrowDelayed = false;
dad.soundBox.throwTP();
grenade = world.createCircle(launch_x, launch_y, 10, 0, 1, 0.2);
grenade.isGrenade = true;
grenade.ApplyImpulse(powerVector((grenade.GetPosition().x * 30), (grenade.GetPosition().y * 30), clickX, clickY), grenade.GetWorldCenter());
}
public function doClick(_arg1:MouseEvent){
if (isPaused){
powerArrow.visible = false;
return;
};
clickX = mouseX;
clickY = mouseY;
throwGrenade();
}
public function allowGrenadeChange(_arg1:TimerEvent){
isGrenadeChange = true;
allowGrenadeChangeTimer.stop();
}
public function destroyAllBodies(){
var _local1:uint;
world.pauseUpdate();
_local1 = 0;
while (pBodies.length > 0) {
if (!pBodies.isDead){
world.destroyBody(pBodies[(pBodies.length - 1)]);
world.destroyBody(pBodies.pop());
} else {
pBodies.pop();
};
_local1++;
};
pEnemies = new Array();
pBoxes = new Array();
if (grenade != null){
world.destroyBody(grenade);
grenade = null;
};
world.unPauseUpdate();
}
}
}//package GAME_08_fla
Section 136
//gameLogo_5 (GAME_08_fla.gameLogo_5)
package GAME_08_fla {
import flash.display.*;
public dynamic class gameLogo_5 extends MovieClip {
public function gameLogo_5(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package GAME_08_fla
Section 137
//gameUi_216 (GAME_08_fla.gameUi_216)
package GAME_08_fla {
import flash.display.*;
import flash.text.*;
public dynamic class gameUi_216 extends MovieClip {
public var rollsText:TextField;
public var rollsNum:MovieClip;
public var timer:MovieClip;
public var levelNum:MovieClip;
public var level:MovieClip;
public var timeNum:MovieClip;
public var score:MovieClip;
public var timeText:TextField;
public var rolls:MovieClip;
public var scoreNum:MovieClip;
public var levelText:TextField;
public var scoreText:TextField;
public function gameUi_216(){
addFrameScript(0, frame1);
}
function frame1(){
this.buttonMode = false;
this.mouseEnabled = false;
this.mouseChildren = false;
}
}
}//package GAME_08_fla
Section 138
//MainTimeline (GAME_08_fla.MainTimeline)
package GAME_08_fla {
import flash.display.*;
import flash.utils.*;
import flash.geom.*;
import com.greensock.*;
import flash.events.*;
import flash.text.*;
import com.greensock.easing.*;
import flash.net.*;
import adobe.utils.*;
import flash.accessibility.*;
import flash.errors.*;
import flash.external.*;
import flash.filters.*;
import flash.media.*;
import flash.printing.*;
import flash.system.*;
import flash.ui.*;
import flash.xml.*;
public dynamic class MainTimeline extends MovieClip {
public var fridge:MovieClip;
public var restartButton:MovieClip;
public var gameUi:MovieClip;
public var levelsXML:XML;
public var soundBox:MovieClip;
public var t2:MovieClip;
public var t3:MovieClip;
public var t5:MovieClip;
public var t1:MovieClip;
public var t4:MovieClip;
public var so:SharedObject;
public var gameLogoGame:MovieClip;
public var h:uint;
public var engine:MovieClip;
public var flags:Array;
public var gameLogoLevels:MovieClip;
public var t6:MovieClip;
public var pLeft:SimpleButton;
public var partnerLogo:MovieClip;
public var freeze:Boolean;
public var gameLogo:MovieClip;
public var langPanel:MovieClip;
public var gameLogoEnd:MovieClip;
public var cLevel:uint;
public var waitTimer:Timer;
public var freezeTimer:Timer;
public var b_play:MovieClip;
public var unLocked:uint;
public var winLevel:uint;
public var thumbsArray:Array;
public var percentText:TextField;
public var langIdString:String;
public var b_visit:MovieClip;
public var chapterLock:int;
public var ubiLogo:MovieClip;
public var langXML:XML;
public var b_high:MovieClip;
public var rabbid3:MovieClip;
public var rabbid1:MovieClip;
public var rabbid2:MovieClip;
public var msg:MovieClip;
public var cPage:uint;
public var pRight:SimpleButton;
public var langsXML:XML;
public var langId:uint;
public var propXML;
public var b_preorder:MovieClip;
public var b_figurine:MovieClip;
public function MainTimeline(){
addFrameScript(0, frame1, 9, frame10, 19, frame20, 29, frame30, 39, frame40, 40, frame41, 49, frame50);
}
public function unlockNext(){
if ((cLevel + 1) > unLocked){
unLocked = (cLevel + 1);
so.data.unLocked = unLocked;
};
}
function frame10(){
TweenLite.from(langPanel, 0.7, {y:"-50", ease:Elastic.easeOut});
TweenLite.from(gameLogo, 0.7, {alpha:0, ease:Strong.easeOut});
flags = new Array(langPanel.flagUS, langPanel.flagAUT, langPanel.flagGER, langPanel.flagESP, langPanel.flagFRA, langPanel.flagITA, langPanel.flagUK, langPanel.flagNED, langPanel.flagSWE);
initFlags();
}
public function toMainMenu(){
gotoAndStop("main_menu");
}
function frame1(){
propXML = <props>
<prop>
<name>rabbid</name>
<points>21 37 -19 37 -20 -34 19 -34</points>
</prop>
<prop>
<name>teammate_rabbid</name>
<points>21 38 -21 37 -21 -35 19 -34</points>
</prop>
<prop>
<name>grunt_cave_1_left</name>
<points>30 38 -9 38 -27 -3 4 -36 33 -13</points>
</prop>
<prop>
<name>grunt_cave_1_right</name>
<points>9 37 -30 37 -23 -17 -5 -31 10 -30 25 0</points>
</prop>
<prop>
<name>grunt_egypt_1_left</name>
<points>-20 37 21 37 29 -20 -21 -35</points>
</prop>
<prop>
<name>grunt_egypt_1_right</name>
<points>21 36 -19 35 -24 -20 21 -32</points>
</prop>
<prop>
<name>grunt_med_1_left</name>
<points>13 45 -24 45 -25 -19 -6 -44 9 -39 6 1</points>
</prop>
<prop>
<name>grunt_med_swordpull_right</name>
<points>18 42 -25 42 -10 -46 4 -47 3 -5</points>
</prop>
<prop>
<name>cave_rock_1</name>
<points>1 -16 -15 -10 -10 11 5 16 15 2</points>
</prop>
<prop>
<name>cave_rock_2</name>
<points>2 -7 -10 -2 -7 7 8 8 10 -1</points>
</prop>
<prop>
<name>cave_branch_1</name>
<points>-1 -36 8 -33 -1 36 -6 35</points>
</prop>
<prop>
<name>cave_branch_2</name>
<points>5 -65 17 -60 -7 65 -13 65</points>
</prop>
<prop>
<name>egypt_brick_1</name>
<points>14 8 -14 9 -14 -7 13 -8</points>
</prop>
<prop>
<name>egypt_brick_2</name>
<points>23 -17 17 -23 -19 -22 -23 -18 -24 19 -20 24 18 23 22 18</points>
</prop>
<prop>
<name>egypt_plank_1</name>
<points>-4 -39 4 -39 4 38 -4 37</points>
</prop>
<prop>
<name>egypt_plank_2</name>
<points>-6 -69 6 -70 6 68 -5 68</points>
</prop>
<prop>
<name>egypt_plank_3</name>
<points>-30 -26 -21 -26 -20 -5 20 -4 21 -26 30 -26 31 57 20 58 21 4 -20 5 -19 57 -30 57</points>
</prop>
<prop>
<name>medieval_stone_1</name>
<points>-16 -10 15 -10 14 11 -16 12</points>
</prop>
<prop>
<name>medieval_catapult_stone</name>
<points>-5 -18 -20 -5 -16 12 -1 21 15 13 19 -2 12 -13</points>
</prop>
<prop>
<name>grunt_med_1_right</name>
<points>24 46 -14 45 -4 -3 -7 -42 9 -45 24 -16</points>
</prop>
<prop>
<name>grunt_med_swordpull_left</name>
<points>24 42 -19 42 -2 -4 -7 -46 9 -46</points>
</prop>
</props>
;
levelsXML = <levels>
<level>
<info rolls='20' time='150000'></info>
<rabbids>
<rabbid name="rabbid" x="388" y="452" facing="undefined"/>
</rabbids>
<polys>
<poly>
<points>580 480 670 480 650 590 630 590</points>
</poly>
<poly>
<points>80 580 140 550 700 550 760 580 690 600 130 600</points>
</poly>
<poly>
<points>150 500 210 500 190 640 160 630</points>
</poly>
<poly>
<points>190 550 200 500 260 490 550 490 650 500 630 560 190 560</points>
</poly>
<poly>
<points>220 350 160 350 120 300 140 230 220 200 270 210 340 280 410 280 460 260 510 230 560 230 610 250 630 300 640 350 620 370 530 390 480 380 500 400 580 410 630 380 660 370 680 310 700 190 690 130 120 130 110 320 150 360 200 370</points>
</poly>
<poly>
<points>330 270 350 350 380 360 410 350 440 310 470 240 370 250</points>
</poly>
</polys>
<props>
<prop rotation="0" x="179" y="312">
<name>grunt_cave_1_left</name>
</prop>
<prop rotation="0" x="148" y="462">
<name>grunt_cave_1_left</name>
</prop>
<prop rotation="6" x="511" y="347">
<name>grunt_cave_1_left</name>
</prop>
<prop rotation="-3" x="264" y="482">
<name>cave_rock_2</name>
</prop>
<prop rotation="-3" x="286" y="482">
<name>cave_rock_2</name>
</prop>
<prop rotation="-4" x="275" y="470">
<name>cave_rock_2</name>
</prop>
<prop rotation="-8" x="298" y="446">
<name>cave_rock_2</name>
</prop>
<prop rotation="-3" x="309" y="482">
<name>cave_rock_2</name>
</prop>
<prop rotation="-11" x="298" y="470">
<name>cave_rock_2</name>
</prop>
<prop rotation="-37" x="289" y="460">
<name>cave_rock_2</name>
</prop>
<prop rotation="-3" x="329" y="482">
<name>cave_rock_2</name>
</prop>
<prop rotation="-3" x="495" y="482">
<name>cave_rock_2</name>
</prop>
<prop rotation="-3" x="522" y="482">
<name>cave_rock_2</name>
</prop>
<prop rotation="29" x="506" y="473">
<name>cave_rock_2</name>
</prop>
<prop rotation="-13" x="648" y="465">
<name>cave_rock_1</name>
</prop>
<prop rotation="-18" x="619" y="466">
<name>cave_rock_1</name>
</prop>
<prop rotation="-9" x="319" y="462">
<name>cave_rock_1</name>
</prop>
</props>
</level>
<level>
<!-- Level 2-->
<info rolls='20' time='150000'></info>
<rabbids>
<rabbid name="rabbid" x="192" y="205" facing="undefined"/>
<rabbid name="teammate_rabbid" x="514" y="233" facing="right"/>
</rabbids>
<polys>
<poly>
<points>80 580 150 510 100 420 120 320 120 210 140 240 300 240 250 270 160 280 140 330 140 420 180 460 250 490 300 480 340 340 420 340 430 400 420 440 400 500 400 540 440 550 510 560 560 540 590 500 600 450 560 400 510 370 490 340 480 320 480 300 500 270 540 270 580 310 620 280 620 220 590 180 510 170 440 170 400 180 440 160 500 140 590 130 660 160 670 210 690 350 670 390 690 450 720 530 720 590 90 590</points>
</poly>
</polys>
<props>
<prop rotation="0" x="489" y="518">
<name>grunt_cave_1_left</name>
</prop>
<prop rotation="0" x="267" y="447">
<name>grunt_cave_1_right</name>
</prop>
<prop rotation="-6" x="387" y="297">
<name>cave_rock_1</name>
</prop>
<prop rotation="-15" x="415" y="326">
<name>cave_rock_1</name>
</prop>
<prop rotation="15" x="365" y="304">
<name>cave_rock_1</name>
</prop>
<prop rotation="-18" x="355" y="326">
<name>cave_rock_1</name>
</prop>
<prop rotation="-8" x="358" y="282">
<name>cave_rock_2</name>
</prop>
<prop rotation="105" x="368" y="269">
<name>cave_rock_2</name>
</prop>
<prop rotation="-13" x="385" y="325">
<name>cave_rock_1</name>
</prop>
<prop rotation="-39" x="403" y="308">
<name>cave_rock_2</name>
</prop>
<prop rotation="-30" x="377" y="277">
<name>cave_rock_2</name>
</prop>
</props>
</level>
<level>
<!-- Level 3-->
<info rolls='20' time='150000'></info>
<rabbids>
<rabbid name="rabbid" x="627" y="253" facing="right"/>
</rabbids>
<polys>
<poly>
<points>129 176 129 150 154 167 180 159 197 150 206 167 206 184</points>
</poly>
<poly>
<points>86 468 60 563 627 563 722 546 731 494 731 425 713 417 550 417 481 434 404 477 146 494</points>
</poly>
<poly>
<points>559 425 593 288 670 288 696 425 619 442</points>
</poly>
<poly>
<points>135 169 102 189 95 322 114 417 158 454 165 478 147 496 130 503 90 574 428 573 420 517 401 491 338 472 342 449 370 420 396 388 411 321 406 291 374 300 369 313 363 307 350 318 337 361 308 401 184 403 154 344 154 284 193 232 230 198 290 183 338 183 376 182 386 174 380 167 361 168 326 171 291 171 250 179 202 176</points>
</poly>
<poly>
<points>288 178 362 200 373 217 377 240 382 212 391 192 378 176</points>
</poly>
<poly>
<points>292 176 301 159 326 167 344 167 361 159 378 167 387 184 369 193</points>
</poly>
<poly>
<points>369 313 361 296 352 305 361 313</points>
</poly>
</polys>
<props>
<prop rotation="-1" x="273" y="364">
<name>grunt_cave_1_left</name>
</prop>
<prop rotation="0" x="213" y="365">
<name>grunt_cave_1_right</name>
</prop>
<prop rotation="-2" x="370" y="271">
<name>cave_branch_1</name>
</prop>
<prop rotation="5" x="326" y="158">
<name>cave_rock_2</name>
</prop>
<prop rotation="-42" x="154" y="152">
<name>cave_rock_1</name>
</prop>
</props>
</level>
<level>
<!-- Level 4-->
<info rolls='10' time='90000'></info>
<rabbids>
<rabbid name="rabbid" x="168" y="387" facing="undefined"/>
</rabbids>
<polys>
<poly>
<points>285 239 368 285 368 267 312 221</points>
</poly>
<poly>
<points>358 249 349 267 368 276 368 258</points>
</poly>
<poly>
<points>282 326 423 396 437 426 374 480 368 523 426 566 583 566 621 521 628 489 589 458 570 419 679 310 723 374 785 536 753 582 81 585 55 390 97 388 116 421 236 422</points>
</poly>
<poly>
<points>674 253 718 145 715 122 734 132 738 310 695 365</points>
</poly>
<poly>
<points>629 266 647 250 695 232 695 266 698 297 646 304</points>
</poly>
<poly>
<points>645 269 623 249 623 267 631 329 673 427 722 441 721 287</points>
</poly>
<poly>
<points>282 347 296 240 315 249 318 373</points>
</poly>
<poly>
<points>414 442 607 442 524 552 460 552</points>
</poly>
<poly>
<points>450 258 450 304 469 285</points>
</poly>
<poly>
<points>570 258 570 304 598 313 588 276</points>
</poly>
</polys>
<props>
<prop rotation="0" x="493" y="405">
<name>grunt_cave_1_left</name>
</prop>
<prop rotation="0" x="471" y="202">
<name>grunt_cave_1_left</name>
</prop>
<prop rotation="-12" x="656" y="229">
<name>cave_rock_1</name>
</prop>
<prop rotation="-70" x="337" y="200">
<name>cave_rock_1</name>
</prop>
<prop rotation="27" x="343" y="227">
<name>cave_rock_1</name>
</prop>
<prop rotation="81" x="501" y="243">
<name>cave_branch_2</name>
</prop>
<prop rotation="84" x="410" y="248">
<name>cave_branch_2</name>
</prop>
<prop rotation="-36" x="636" y="215">
<name>cave_rock_2</name>
</prop>
<prop rotation="40" x="625" y="204">
<name>cave_rock_2</name>
</prop>
<prop rotation="-82" x="621" y="228">
<name>cave_rock_2</name>
</prop>
<prop rotation="-49" x="613" y="216">
<name>cave_rock_2</name>
</prop>
<prop rotation="-118" x="321" y="221">
<name>cave_rock_2</name>
</prop>
<prop rotation="21" x="674" y="212">
<name>cave_rock_1</name>
</prop>
<prop rotation="-74" x="684" y="186">
<name>cave_rock_1</name>
</prop>
<prop rotation="-42" x="601" y="199">
<name>cave_rock_1</name>
</prop>
<prop rotation="-30" x="650" y="197">
<name>cave_rock_1</name>
</prop>
<prop rotation="171" x="437" y="208">
<name>cave_rock_1</name>
</prop>
<prop rotation="-167" x="364" y="196">
<name>cave_rock_1</name>
</prop>
<prop rotation="69" x="581" y="250">
<name>cave_branch_2</name>
</prop>
<prop rotation="-106" x="576" y="215">
<name>cave_rock_1</name>
</prop>
<prop rotation="-76" x="548" y="226">
<name>cave_rock_1</name>
</prop>
<prop rotation="-89" x="594" y="231">
<name>cave_rock_1</name>
</prop>
<prop rotation="-41" x="397" y="229">
<name>cave_rock_1</name>
</prop>
<prop rotation="-80" x="368" y="224">
<name>cave_rock_1</name>
</prop>
<prop rotation="-76" x="517" y="226">
<name>cave_rock_1</name>
</prop>
<prop rotation="57" x="425" y="232">
<name>cave_rock_1</name>
</prop>
</props>
</level>
<level>
<!-- Level 5-->
<info rolls='12' time='60000'></info>
<rabbids>
<rabbid name="rabbid" x="161" y="183" facing="undefined"/>
<rabbid name="teammate_rabbid" x="613" y="184" facing="right"/>
</rabbids>
<polys>
<poly>
<points>580 219 650 219 620 249</points>
</poly>
<poly>
<points>130 219 190 219 160 249</points>
</poly>
<poly>
<points>300 229 260 299 230 299 190 389 150 389 140 429 220 429 260 329 310 329 330 249 350 249 360 229</points>
</poly>
<poly>
<points>390 229 400 239 420 249 430 249 520 419 570 419 590 499 630 509 660 519 670 509 660 479 620 479 590 379 540 379 450 229</points>
</poly>
<poly>
<points>120 499 100 539 70 559 70 589 110 629 190 629 200 559 190 529</points>
</poly>
<poly>
<points>360 489 370 479 380 479 400 489 400 519 380 519</points>
</poly>
</polys>
<props>
<prop rotation="0" x="554" y="342">
<name>grunt_cave_1_left</name>
</prop>
<prop rotation="0" x="368" y="442">
<name>grunt_cave_1_left</name>
</prop>
<prop rotation="0" x="170" y="352">
<name>grunt_cave_1_right</name>
</prop>
<prop rotation="58" x="367" y="228">
<name>cave_rock_2</name>
</prop>
<prop rotation="-2" x="446" y="221">
<name>cave_rock_2</name>
</prop>
<prop rotation="-3" x="328" y="221">
<name>cave_rock_2</name>
</prop>
<prop rotation="9" x="402" y="219">
<name>cave_rock_2</name>
</prop>
<prop rotation="-12" x="315" y="201">
<name>cave_rock_1</name>
</prop>
<prop rotation="-18" x="423" y="215">
<name>cave_rock_1</name>
</prop>
<prop rotation="-31" x="387" y="203">
<name>cave_rock_1</name>
</prop>
<prop rotation="-3" x="347" y="221">
<name>cave_rock_2</name>
</prop>
<prop rotation="-42" x="383" y="225">
<name>cave_rock_2</name>
</prop>
<prop rotation="-42" x="409" y="198">
<name>cave_rock_2</name>
</prop>
<prop rotation="-19" x="345" y="201">
<name>cave_rock_1</name>
</prop>
<prop rotation="20" x="326" y="179">
<name>cave_rock_1</name>
</prop>
<prop rotation="2" x="397" y="181">
<name>cave_rock_1</name>
</prop>
<prop rotation="-3" x="308" y="221">
<name>cave_rock_2</name>
</prop>
<prop rotation="46" x="365" y="192">
<name>cave_rock_2</name>
</prop>
<prop rotation="31" x="370" y="214">
<name>cave_rock_2</name>
</prop>
<prop rotation="-13" x="446" y="207">
<name>cave_rock_2</name>
</prop>
<prop rotation="-39" x="434" y="199">
<name>cave_rock_2</name>
</prop>
<prop rotation="-23" x="425" y="187">
<name>cave_rock_2</name>
</prop>
<prop rotation="-123" x="373" y="183">
<name>cave_rock_2</name>
</prop>
</props>
</level>
<level>
<!-- Level 6-->
<info rolls='12' time='60000'></info>
<rabbids>
<rabbid name="rabbid" x="569" y="194" facing="right"/>
<rabbid name="teammate_rabbid" x="126" y="206" facing="undefined"/>
</rabbids>
<polys>
<poly>
<points>550 460 570 440 570 430 590 440 580 450 570 480</points>
</poly>
<poly>
<points>650 490 680 440 660 420 640 420 650 390 690 390 720 420 730 510 680 530 680 570</points>
</poly>
<poly>
<points>127 501 314 498 331 517 318 536 275 552 203 554 105 523 104 485</points>
</poly>
<poly>
<points>556 230 588 231 562 250</points>
</poly>
<poly>
<points>380 330 427 367 494 398 551 443 567 456 597 498 527 527 390 414 364 392</points>
</poly>
<poly>
<points>115 243 140 242 122 280</points>
</poly>
<poly>
<points>614 130 698 205 695 128 598 118</points>
</poly>
<poly>
<points>167 121 101 167 90 129</points>
</poly>
<poly>
<points>692 189 702 216 698 228 685 241 698 244 723 237 722 210</points>
</poly>
<poly>
<points>662 349 697 349 707 375 691 392 648 396</points>
</poly>
<poly>
<points>209 285 278 282 304 309 278 368</points>
</poly>
<poly>
<points>240 507 203 486 192 444 189 407 205 381 219 360 278 339 239 306 186 303 169 346 138 405 111 423 104 489 156 531</points>
</poly>
</polys>
<props>
<prop rotation="12" x="471" y="310">
<name>grunt_cave_1_left</name>
</prop>
<prop rotation="0" x="662" y="313">
<name>grunt_cave_1_left</name>
</prop>
<prop rotation="-1" x="269" y="461">
<name>grunt_cave_1_left</name>
</prop>
<prop rotation="-2" x="223" y="247">
<name>grunt_cave_1_left</name>
</prop>
<prop rotation="10" x="421" y="344">
<name>cave_rock_1</name>
</prop>
<prop rotation="6" x="447" y="361">
<name>cave_rock_1</name>
</prop>
<prop rotation="6" x="475" y="374">
<name>cave_rock_1</name>
</prop>
<prop rotation="16" x="573" y="413">
<name>cave_branch_1</name>
</prop>
<prop rotation="48" x="552" y="432">
<name>cave_rock_2</name>
</prop>
<prop rotation="21" x="556" y="420">
<name>cave_rock_2</name>
</prop>
<prop rotation="34" x="536" y="422">
<name>cave_rock_2</name>
</prop>
<prop rotation="-9" x="531" y="397">
<name>cave_rock_2</name>
</prop>
<prop rotation="33" x="521" y="410">
<name>cave_rock_2</name>
</prop>
<prop rotation="9" x="539" y="409">
<name>cave_rock_2</name>
</prop>
<prop rotation="-4" x="560" y="407">
<name>cave_rock_2</name>
</prop>
<prop rotation="8" x="541" y="379">
<name>cave_rock_1</name>
</prop>
<prop rotation="11" x="507" y="390">
<name>cave_rock_1</name>
</prop>
<prop rotation="-18" x="466" y="354">
<name>cave_rock_2</name>
</prop>
<prop rotation="-74" x="527" y="353">
<name>cave_rock_1</name>
</prop>
<prop rotation="-30" x="550" y="397">
<name>cave_rock_2</name>
</prop>
<prop rotation="-98" x="505" y="354">
<name>cave_rock_2</name>
</prop>
<prop rotation="-39" x="491" y="360">
<name>cave_rock_2</name>
</prop>
<prop rotation="38" x="400" y="336">
<name>cave_rock_2</name>
</prop>
<prop rotation="-12" x="500" y="369">
<name>cave_rock_2</name>
</prop>
<prop rotation="97" x="350" y="307">
<name>cave_branch_2</name>
</prop>
</props>
</level>
<level>
<!-- Level 7-->
<info rolls='12' time='60000'></info>
<rabbids>
<rabbid name="rabbid" x="408" y="176" facing="right"/>
</rabbids>
<polys>
<poly>
<points>70 547 686 547 710 571 46 571</points>
</poly>
<poly>
<points>422 211 694 211 694 499 614 499 614 283 494 283 470 267 438 267 390 211</points>
</poly>
<poly>
<points>622 443 534 443 566 475 614 475</points>
</poly>
<poly>
<points>342 187 222 307 222 371 278 435 310 451 326 451 310 467 270 467 206 387 198 315 206 299 318 179</points>
</poly>
<poly>
<points>38 579 70 547 70 123 318 123 318 179 206 299 198 315 206 387 270 467 270 579</points>
</poly>
</polys>
<props>
<prop rotation="-1" x="516" y="511">
<name>grunt_egypt_1_right</name>
</prop>
<prop rotation="1" x="433" y="446">
<name>egypt_brick_1</name>
</prop>
<prop rotation="1" x="434" y="477">
<name>egypt_brick_2</name>
</prop>
<prop rotation="1" x="429" y="523">
<name>egypt_brick_2</name>
</prop>
</props>
</level>
<level>
<!-- Level 8-->
<info rolls='12' time='60000'></info>
<rabbids>
<rabbid name="rabbid" x="404" y="512" facing="undefined"/>
<rabbid name="teammate_rabbid" x="223" y="407" facing="undefined"/>
<rabbid name="teammate_rabbid" x="599" y="422" facing="right"/>
<rabbid name="teammate_rabbid" x="404" y="330" facing="undefined"/>
</rabbids>
<polys>
<poly>
<points>165 549 704 549 725 570 144 570</points>
</poly>
<poly>
<points>389 367 368 416 438 416 417 367</points>
</poly>
<poly>
<points>165 255 361 255 319 304 130 304 130 479 109 479 109 255</points>
</poly>
<poly>
<points>473 255 711 255 711 507 641 507 641 318 536 318 515 304 487 304 445 255</points>
</poly>
<poly>
<points>648 458 571 458 599 486 641 486</points>
</poly>
<poly>
<points>235 444 123 444 123 486 144 486 144 479 235 479</points>
</poly>
</polys>
<props>
<prop rotation="-1" x="324" y="219">
<name>grunt_egypt_1_right</name>
</prop>
<prop rotation="0" x="469" y="220">
<name>grunt_egypt_1_left</name>
</prop>
<prop rotation="1" x="231" y="231">
<name>egypt_brick_2</name>
</prop>
<prop rotation="1" x="160" y="231">
<name>egypt_brick_2</name>
</prop>
<prop rotation="2" x="274" y="246">
<name>egypt_brick_1</name>
</prop>
<prop rotation="1" x="532" y="231">
<name>egypt_brick_2</name>
</prop>
<prop rotation="2" x="276" y="230">
<name>egypt_brick_1</name>
</prop>
<prop rotation="1" x="271" y="215">
<name>egypt_brick_1</name>
</prop>
<prop rotation="-2" x="250" y="199">
<name>egypt_brick_1</name>
</prop>
<prop rotation="2" x="568" y="246">
<name>egypt_brick_1</name>
</prop>
<prop rotation="2" x="578" y="230">
<name>egypt_brick_1</name>
</prop>
<prop rotation="2" x="573" y="214">
<name>egypt_brick_1</name>
</prop>
</props>
</level>
<level>
<!-- Level 9-->
<info rolls='12' time='60000'></info>
<rabbids>
<rabbid name="rabbid" x="428" y="464" facing="undefined"/>
</rabbids>
<polys>
<poly>
<points>312 438 272 438 288 446 352 446</points>
</poly>
<poly>
<points>236 498 540 498 564 426 668 418 716 474 716 522 124 522 164 426 188 426 220 498</points>
</poly>
<poly>
<points>556 458 508 514 508 546 556 546</points>
</poly>
<poly>
<points>188 442 252 530 196 530</points>
</poly>
<poly>
<points>274 436 328 438 338 421 396 421 399 436 384 445 287 446</points>
</poly>
<poly>
<points>628 419 562 418 565 537 644 526</points>
</poly>
<poly>
<points>468 421 527 419 517 441 465 438</points>
</poly>
<poly>
<points>278 436 250 435 280 445</points>
</poly>
<poly>
<points>185 425 138 424 164 453</points>
</poly>
</polys>
<props>
<prop rotation="2" x="294" y="401">
<name>grunt_egypt_1_left</name>
</prop>
<prop rotation="1" x="161" y="326">
<name>grunt_egypt_1_right</name>
</prop>
<prop rotation="-6" x="626" y="201">
<name>grunt_egypt_1_right</name>
</prop>
<prop rotation="0" x="375" y="278">
<name>grunt_egypt_1_left</name>
</prop>
<prop rotation="1" x="355" y="321">
<name>egypt_brick_1</name>
</prop>
<prop rotation="-2" x="648" y="396">
<name>egypt_brick_2</name>
</prop>
<prop rotation="-3" x="494" y="362">
<name>egypt_plank_3</name>
</prop>
<prop rotation="0" x="590" y="360">
<name>egypt_plank_3</name>
</prop>
<prop rotation="0" x="161" y="367">
<name>egypt_plank_3</name>
</prop>
<prop rotation="0" x="601" y="288">
<name>egypt_plank_2</name>
</prop>
<prop rotation="1" x="376" y="351">
<name>egypt_brick_2</name>
</prop>
<prop rotation="-3" x="637" y="258">
<name>egypt_brick_2</name>
</prop>
<prop rotation="-2" x="492" y="315">
<name>egypt_brick_2</name>
</prop>
<prop rotation="-3" x="644" y="350">
<name>egypt_brick_2</name>
</prop>
<prop rotation="1" x="388" y="320">
<name>egypt_brick_1</name>
</prop>
<prop rotation="-3" x="641" y="304">
<name>egypt_brick_2</name>
</prop>
<prop rotation="1" x="372" y="397">
<name>egypt_brick_2</name>
</prop>
</props>
</level>
<level>
<!-- Level 10-->
<info rolls='12' time='60000'></info>
<rabbids>
<rabbid name="rabbid" x="134" y="466" facing="undefined"/>
<rabbid name="teammate_rabbid" x="567" y="166" facing="right"/>
</rabbids>
<polys>
<poly>
<points>220 390 180 440 260 460</points>
</poly>
<poly>
<points>380 460 330 530 360 540 400 470</points>
</poly>
<poly>
<points>380 460 420 400 450 400 400 470</points>
</poly>
<poly>
<points>330 530 330 570 350 570 350 550</points>
</poly>
<poly>
<points>330 560 230 560 230 570 330 570</points>
</poly>
<poly>
<points>240 370 320 440 340 410 250 360</points>
</poly>
<poly>
<points>450 400 580 400 510 430 460 430</points>
</poly>
<poly>
<points>680 340 650 400 680 450 690 450</points>
</poly>
<poly>
<points>490 550 640 550 680 470 680 590 440 590 410 490 420 490 460 560</points>
</poly>
<poly>
<points>120 500 150 500 150 610 120 610</points>
</poly>
<poly>
<points>340 230 290 310 350 310 350 230</points>
</poly>
<poly>
<points>351 232 370 232 370 258 351 286</points>
</poly>
<poly>
<points>590 480 630 470 610 500</points>
</poly>
<poly>
<points>620 470 580 470 620 490</points>
</poly>
<poly>
<points>187 614 176 660 204 634</points>
</poly>
<poly>
<points>430 260 451 260 449 273</points>
</poly>
<poly>
<points>550 200 600 200 600 240 550 240</points>
</poly>
<poly>
<points>530 300 570 300 570 320 520 320 520 300</points>
</poly>
</polys>
<props>
<prop rotation="-1" x="431" y="364">
<name>grunt_egypt_1_right</name>
</prop>
<prop rotation="4" x="412" y="199">
<name>grunt_egypt_1_left</name>
</prop>
<prop rotation="-1" x="604" y="434">
<name>grunt_egypt_1_right</name>
</prop>
<prop rotation="2" x="266" y="535">
<name>egypt_brick_1</name>
</prop>
<prop rotation="24" x="321" y="508">
<name>egypt_brick_1</name>
</prop>
<prop rotation="24" x="333" y="495">
<name>egypt_brick_1</name>
</prop>
<prop rotation="24" x="344" y="433">
<name>egypt_brick_1</name>
</prop>
<prop rotation="24" x="311" y="520">
<name>egypt_brick_1</name>
</prop>
<prop rotation="2" x="294" y="535">
<name>egypt_brick_1</name>
</prop>
<prop rotation="2" x="307" y="551">
<name>egypt_brick_1</name>
</prop>
<prop rotation="2" x="277" y="551">
<name>egypt_brick_1</name>
</prop>
<prop rotation="23" x="335" y="463">
<name>egypt_brick_2</name>
</prop>
<prop rotation="35" x="350" y="406">
<name>egypt_brick_1</name>
</prop>
<prop rotation="33" x="350" y="387">
<name>egypt_brick_1</name>
</prop>
<prop rotation="-14" x="306" y="372">
<name>egypt_brick_1</name>
</prop>
<prop rotation="31" x="325" y="392">
<name>egypt_brick_1</name>
</prop>
<prop rotation="-14" x="302" y="340">
<name>egypt_brick_1</name>
</prop>
<prop rotation="32" x="362" y="376">
<name>egypt_brick_1</name>
</prop>
<prop rotation="-23" x="333" y="368">
<name>egypt_brick_1</name>
</prop>
<prop rotation="-14" x="301" y="357">
<name>egypt_brick_1</name>
</prop>
<prop rotation="10" x="382" y="423">
<name>egypt_brick_1</name>
</prop>
<prop rotation="2" x="239" y="551">
<name>egypt_brick_1</name>
</prop>
<prop rotation="2" x="238" y="535">
<name>egypt_brick_1</name>
</prop>
<prop rotation="2" x="238" y="519">
<name>egypt_brick_1</name>
</prop>
<prop rotation="1" x="239" y="504">
<name>egypt_brick_1</name>
</prop>
<prop rotation="0" x="467" y="332">
<name>egypt_plank_2</name>
</prop>
<prop rotation="31" x="273" y="363">
<name>egypt_brick_1</name>
</prop>
<prop rotation="31" x="273" y="345">
<name>egypt_brick_1</name>
</prop>
<prop rotation="-26" x="373" y="444">
<name>egypt_brick_1</name>
</prop>
<prop rotation="9" x="400" y="350">
<name>egypt_plank_2</name>
</prop>
<prop rotation="6" x="407" y="256">
<name>egypt_brick_2</name>
</prop>
<prop rotation="7" x="457" y="237">
<name>egypt_brick_2</name>
</prop>
<prop rotation="8" x="387" y="348">
<name>egypt_plank_2</name>
</prop>
</props>
</level>
<level>
<!-- Level 11-->
<info rolls='12' time='60000'></info>
<rabbids>
<rabbid name="rabbid" x="670" y="273" facing="right"/>
<rabbid name="teammate_rabbid" x="118" y="204" facing="undefined"/>
</rabbids>
<polys>
<poly>
<points>320 180 400 270 320 270</points>
</poly>
<poly>
<points>160 280 220 360 160 360</points>
</poly>
<poly>
<points>490 290 550 350 490 350</points>
</poly>
<poly>
<points>240 440 300 440 300 530 240 530</points>
</poly>
<poly>
<points>690 310 650 310 650 420 690 420</points>
</poly>
<poly>
<points>470 490 520 490 520 540 470 540 470 500</points>
</poly>
<poly>
<points>130 480 190 480 190 560 130 560</points>
</poly>
<poly>
<points>90 350 120 350 120 240 80 240 80 350</points>
</poly>
<poly>
<points>120 240 130 240 130 310 70 310 70 240</points>
</poly>
<poly>
<points>209 140 242 140 220 121 190 140</points>
</poly>
</polys>
<props>
<prop rotation="-1" x="269" y="404">
<name>grunt_egypt_1_right</name>
</prop>
<prop rotation="0" x="489" y="455">
<name>grunt_egypt_1_left</name>
</prop>
<prop rotation="0" x="160" y="445">
<name>grunt_egypt_1_left</name>
</prop>
</props>
</level>
<level>
<!-- Level 12-->
<info rolls='12' time='60000'></info>
<rabbids>
<rabbid name="rabbid" x="132" y="254" facing="undefined"/>
</rabbids>
<polys>
<poly>
<points>260 310 504 310 448 479 448 629 335 629 335 470</points>
</poly>
<poly>
<points>307 329 260 282 222 338 297 526 316 648 363 648 363 385</points>
</poly>
<poly>
<points>551 535 570 535 626 601 683 629 655 667 476 667 485 601 542 573</points>
</poly>
<poly>
<points>100 291 156 291 128 394</points>
</poly>
</polys>
<props>
<prop rotation="0" x="560" y="500">
<name>grunt_egypt_1_left</name>
</prop>
<prop rotation="1" x="494" y="301">
<name>egypt_brick_1</name>
</prop>
<prop rotation="2" x="363" y="301">
<name>egypt_brick_1</name>
</prop>
<prop rotation="1" x="344" y="270">
<name>egypt_brick_2</name>
</prop>
<prop rotation="1" x="486" y="270">
<name>egypt_brick_2</name>
</prop>
<prop rotation="2" x="335" y="301">
<name>egypt_brick_1</name>
</prop>
<prop rotation="2" x="466" y="301">
<name>egypt_brick_1</name>
</prop>
<prop rotation="0" x="416" y="196">
<name>egypt_plank_2</name>
</prop>
<prop rotation="1" x="417" y="286">
<name>egypt_brick_2</name>
</prop>
</props>
</level>
<level>
<!-- Level 13 -->
<info rolls='12' time='60000'></info>
<rabbids>
<rabbid name="rabbid" x="207" y="255" facing="undefined"/>
</rabbids>
<polys>
<poly>
<points>390 250 390 300 640 300 640 250 620 250 620 280 570 280 570 250 550 250 550 280 490 280 490 250 480 250 470 250 470 270 470 280 420 280 420 250</points>
</poly>
<poly>
<points>450 300 450 490 350 600 740 600 610 490 610 300</points>
</poly>
<poly>
<points>420 300 420 490 320 590 330 610 540 610 530 300</points>
</poly>
<poly>
<points>190 290 240 290 240 270 270 270 270 330 140 330 140 270 170 270 170 290</points>
</poly>
<poly>
<points>190 330 190 640 230 640 230 330</points>
</poly>
<poly>
<points>190 330 180 330 180 630 200 630 200 330</points>
</poly>
</polys>
<props>
<prop rotation="0" x="519" y="236">
<name>grunt_med_1_left</name>
</prop>
<prop rotation="1" x="454" y="268">
<name>medieval_stone_1</name>
</prop>
<prop rotation="27" x="598" y="261">
<name>medieval_catapult_stone</name>
</prop>
</props>
</level>
<level>
<!-- Level 14-->
<info rolls='12' time='60000'></info>
<rabbids>
<rabbid name="rabbid" x="410" y="376" facing="undefined"/>
</rabbids>
<polys>
<poly>
<points>130 370 170 370 170 430 130 430</points>
</poly>
<poly>
<points>280 330 280 390 320 390 320 330</points>
</poly>
<poly>
<points>390 410 430 410 430 450 390 450</points>
</poly>
<poly>
<points>520 410 520 460 560 460 560 410</points>
</poly>
<poly>
<points>610 260 610 310 650 310 650 260</points>
</poly>
<poly>
<points>150 430 140 430 140 620 160 620 160 430</points>
</poly>
<poly>
<points>290 390 290 620 320 620 320 600 310 600 310 390</points>
</poly>
<poly>
<points>400 450 400 640 420 640 420 450</points>
</poly>
<poly>
<points>530 460 530 620 560 620 560 590 550 590 550 460</points>
</poly>
<poly>
<points>620 310 640 310 640 600 620 600</points>
</poly>
</polys>
<props>
<prop rotation="0" x="300" y="286">
<name>grunt_med_1_left</name>
</prop>
<prop rotation="0" x="159" y="326">
<name>grunt_med_1_left</name>
</prop>
<prop rotation="0" x="550" y="366">
<name>grunt_med_1_left</name>
</prop>
<prop rotation="0" x="630" y="216">
<name>grunt_med_1_left</name>
</prop>
</props>
</level>
<level>
<!-- Level 15-->
<info rolls='12' time='60000'></info>
<rabbids>
<rabbid name="rabbid" x="142" y="500" facing="undefined"/>
<rabbid name="teammate_rabbid" x="275" y="349" facing="undefined"/>
</rabbids>
<polys>
<poly>
<points>336 385 265 385 239 411 239 429 265 429 265 411 275 403 336 403</points>
</poly>
<poly>
<points>380 385 380 403 398 403 407 411 407 535 424 535 424 411 407 394 407 385</points>
</poly>
<poly>
<points>380 403 380 491 345 526 345 535 407 535 407 411 398 403</points>
</poly>
<poly>
<points>336 403 336 464 327 464 327 403</points>
</poly>
<poly>
<points>327 526 345 526 345 535 327 535</points>
</poly>
<poly>
<points>239 500 265 500 265 526 327 526 327 535 239 535</points>
</poly>
<poly>
<points>247 535 44 535 44 580 681 580 681 438 584 438 540 456 540 473 522 491 486 500 486 518 468 526 460 535</points>
</poly>
<poly>
<points>584 438 512 411 540 447 522 456 540 526</points>
</poly>
</polys>
<props>
<prop rotation="0" x="301" y="482">
<name>grunt_med_1_left</name>
</prop>
<prop rotation="3" x="604" y="393">
<name>grunt_med_1_left</name>
</prop>
<prop rotation="1" x="252" y="488">
<name>medieval_stone_1</name>
</prop>
<prop rotation="3" x="251" y="467">
<name>medieval_stone_1</name>
</prop>
<prop rotation="5" x="251" y="446">
<name>medieval_stone_1</name>
</prop>
<prop rotation="1" x="440" y="523">
<name>medieval_stone_1</name>
</prop>
</props>
</level>
<level>
<!-- Level 16-->
<info rolls='12' time='60000'></info>
<rabbids>
<rabbid name="rabbid" x="401" y="304" facing="undefined"/>
<rabbid name="teammate_rabbid" x="220" y="506" facing="undefined"/>
</rabbids>
<polys>
<poly>
<points>160 220 280 220 280 330 170 330 170 230 160 230</points>
</poly>
<poly>
<points>510 220 510 330 630 330 630 220</points>
</poly>
<poly>
<points>210 540 280 540 280 560 160 560 160 540</points>
</poly>
<poly>
<points>380 340 430 340 430 390 300 460 270 460 380 360</points>
</poly>
<poly>
<points>330 540 530 540 530 480 720 480 720 590 330 590</points>
</poly>
</polys>
<props>
<prop rotation="0" x="469" y="496">
<name>grunt_med_1_left</name>
</prop>
<prop rotation="0" x="209" y="176">
<name>grunt_med_1_left</name>
</prop>
<prop rotation="0" x="586" y="178">
<name>grunt_med_swordpull_right</name>
</prop>
<prop rotation="0" x="677" y="392">
<name>grunt_med_1_left</name>
</prop>
<prop rotation="1" x="342" y="528">
<name>medieval_stone_1</name>
</prop>
<prop rotation="1" x="399" y="528">
<name>medieval_stone_1</name>
</prop>
<prop rotation="1" x="430" y="528">
<name>medieval_stone_1</name>
</prop>
<prop rotation="1" x="539" y="468">
<name>medieval_stone_1</name>
</prop>
<prop rotation="3" x="690" y="447">
<name>medieval_stone_1</name>
</prop>
<prop rotation="1" x="629" y="468">
<name>medieval_stone_1</name>
</prop>
<prop rotation="3" x="539" y="447">
<name>medieval_stone_1</name>
</prop>
<prop rotation="5" x="536" y="425">
<name>medieval_stone_1</name>
</prop>
<prop rotation="1" x="570" y="468">
<name>medieval_stone_1</name>
</prop>
<prop rotation="3" x="570" y="447">
<name>medieval_stone_1</name>
</prop>
<prop rotation="5" x="569" y="425">
<name>medieval_stone_1</name>
</prop>
<prop rotation="3" x="628" y="447">
<name>medieval_stone_1</name>
</prop>
<prop rotation="5" x="629" y="425">
<name>medieval_stone_1</name>
</prop>
<prop rotation="1" x="660" y="468">
<name>medieval_stone_1</name>
</prop>
<prop rotation="3" x="659" y="447">
<name>medieval_stone_1</name>
</prop>
<prop rotation="1" x="691" y="468">
<name>medieval_stone_1</name>
</prop>
<prop rotation="1" x="523" y="208">
<name>medieval_stone_1</name>
</prop>
<prop rotation="2" x="264" y="208">
<name>medieval_stone_1</name>
</prop>
<prop rotation="1" x="170" y="208">
<name>medieval_stone_1</name>
</prop>
<prop rotation="2" x="625" y="208">
<name>medieval_stone_1</name>
</prop>
<prop rotation="3" x="266" y="187">
<name>medieval_stone_1</name>
</prop>
<prop rotation="3" x="521" y="187">
<name>medieval_stone_1</name>
</prop>
<prop rotation="3" x="629" y="187">
<name>medieval_stone_1</name>
</prop>
<prop rotation="-25" x="542" y="397">
<name>medieval_catapult_stone</name>
</prop>
</props>
</level>
<level>
<!-- Level 17-->
<info rolls='12' time='60000'></info>
<rabbids>
<rabbid name="rabbid" x="180" y="245" facing="undefined"/>
</rabbids>
<polys>
<poly>
<points>150 280 220 280 270 230 310 260 240 340 290 400 230 450 280 510 230 510 220 560 470 560 470 510 400 510 350 450 410 390 350 330 400 260 440 240 600 240 600 610 130 610 50 570 90 280</points>
</poly>
<poly>
<points>603 351 665 350 635 453 619 465 620 623 582 621 580 351</points>
</poly>
</polys>
<props>
<prop rotation="0" x="353" y="516">
<name>grunt_med_1_left</name>
</prop>
<prop rotation="0" x="308" y="518">
<name>grunt_med_swordpull_right</name>
</prop>
<prop rotation="0" x="656" y="306">
<name>grunt_med_1_left</name>
</prop>
<prop rotation="1" x="460" y="228">
<name>medieval_stone_1</name>
</prop>
<prop rotation="1" x="510" y="228">
<name>medieval_stone_1</name>
</prop>
<prop rotation="1" x="550" y="228">
<name>medieval_stone_1</name>
</prop>
<prop rotation="3" x="550" y="207">
<name>medieval_stone_1</name>
</prop>
<prop rotation="3" x="509" y="207">
<name>medieval_stone_1</name>
</prop>
<prop rotation="5" x="510" y="186">
<name>medieval_stone_1</name>
</prop>
<prop rotation="1" x="585" y="228">
<name>medieval_stone_1</name>
</prop>
<prop rotation="30" x="556" y="179">
<name>medieval_catapult_stone</name>
</prop>
</props>
</level>
<level>
<!-- Level 18-->
<info rolls='12' time='60000'></info>
<rabbids>
<rabbid name="teammate_rabbid" x="230" y="395" facing="undefined"/>
<rabbid name="teammate_rabbid" x="378" y="435" facing="right"/>
<rabbid name="rabbid" x="494" y="345" facing="right"/>
</rabbids>
<polys>
<poly>
<points>120 220 130 230 190 230 200 220 200 240 120 240</points>
</poly>
<poly>
<points>250 220 250 240 330 240 330 220 320 230 260 230</points>
</poly>
<poly>
<points>620 310 670 310 660 340 630 340</points>
</poly>
<poly>
<points>370 360 320 360 290 310 410 310</points>
</poly>
<poly>
<points>370 470 390 470 390 520 350 520</points>
</poly>
<poly>
<points>220 430 240 430 240 480 190 480</points>
</poly>
<poly>
<points>640 340 640 550 660 550 660 340</points>
</poly>
<poly>
<points>480 380 510 380 510 560 490 560 490 400</points>
</poly>
<poly>
<points>110 570 160 570 170 560 170 580 100 580 100 560</points>
</poly>
<poly>
<points>270 560 280 570 310 570 330 560 320 590 270 590 260 570</points>
</poly>
</polys>
<props>
<prop rotation="0" x="160" y="188">
<name>grunt_med_swordpull_right</name>
</prop>
<prop rotation="0" x="290" y="188">
<name>grunt_med_swordpull_right</name>
</prop>
<prop rotation="0" x="665" y="266">
<name>grunt_med_1_left</name>
</prop>
<prop rotation="0" x="301" y="524">
<name>grunt_med_1_left</name>
</prop>
<prop rotation="0" x="139" y="526">
<name>grunt_med_1_left</name>
</prop>
<prop rotation="2" x="318" y="298">
<name>medieval_stone_1</name>
</prop>
<prop rotation="1" x="392" y="298">
<name>medieval_stone_1</name>
</prop>
<prop rotation="3" x="330" y="277">
<name>medieval_stone_1</name>
</prop>
<prop rotation="-3" x="384" y="276">
<name>medieval_stone_1</name>
</prop>
<prop rotation="5" x="341" y="257">
<name>medieval_stone_1</name>
</prop>
<prop rotation="-2" x="373" y="255">
<name>medieval_stone_1</name>
</prop>
<prop rotation="0" x="356" y="234">
<name>medieval_stone_1</name>
</prop>
</props>
</level>
</levels>
;
stage.addEventListener(KeyboardEvent.KEY_DOWN, doKeyboard, false, 0, true);
cPage = 0;
unLocked = 0;
cLevel = 0;
chapterLock = -1;
winLevel = 17;
if (this.root.loaderInfo.parameters.partners != undefined){
chapterLock = int(this.root.loaderInfo.parameters.partners);
};
if (chapterLock == 0){
winLevel = 5;
};
if (chapterLock == 1){
unLocked = 6;
cPage = 1;
winLevel = 11;
};
if (chapterLock == 2){
unLocked = 12;
cPage = 2;
};
so = SharedObject.getLocal("savedData");
if (so.data.soArray == undefined){
trace(so.data.soArray);
so.data.soArray = new Array();
so.data.unLocked = unLocked;
h = 0;
while (h < 18) {
so.data.soArray.push(uint(0));
h++;
};
} else {
unLocked = so.data.unLocked;
};
stop();
waitTimer = new Timer(100);
this.addEventListener(Event.ENTER_FRAME, doPreload);
waitTimer.addEventListener(TimerEvent.TIMER, proceed);
langsXML = <languages>
<language name='us'>
<play>PLAY THE GAME</play>
<highscores>HIGHSCORES</highscores>
<visit>VISIT WEBSITE</visit>
<preorder>PRE-ORDER</preorder>
<figurine>BUY FIGURINES</figurine>
<rolls>ROLLS</rolls>
<score>SCORE</score>
<time>TIME</time>
<level>LEVEL</level>
<partnerURL>http://www.ubisoft.com</partnerURL>
<preorderURL>http://www.ubisoft.com</preorderURL>
<figurineURL>http://www.ubisoft.com</figurineURL>
<siteURL>http://www.ubisoft.com</siteURL>
<message>MESSAGE</message>
<messagetexts>
<messagetext>level 1 message</messagetext>
<messagetext>level 2 message</messagetext>
<messagetext>level 3 message</messagetext>
<messagetext>level 4 message</messagetext>
<messagetext>level 5 message</messagetext>
<messagetext>level 6 message</messagetext>
<messagetext>level 7 message</messagetext>
<messagetext>level 8 message</messagetext>
<messagetext>level 9 message</messagetext>
<messagetext>level 10 message</messagetext>
<messagetext>level 11 message</messagetext>
<messagetext>level 12 message</messagetext>
<messagetext>level 13 message</messagetext>
<messagetext>level 14 message</messagetext>
<messagetext>level 15 message</messagetext>
<messagetext>level 16 message</messagetext>
<messagetext>level 17 message</messagetext>
<messagetext>level 18 message</messagetext>
</messagetexts>
<failed>FAILED!</failed>
<failedtextgrenades>You ran out of grenades!</failedtextgrenades>
<failedtexttime>You ran out of time!</failedtexttime>
<home>HOME</home>
<replay>REPLAY</replay>
<next>NEXT</next>
<levelcomplete>CLEARED!</levelcomplete>
<hits>HITS</hits>
<bonus>BONUS</bonus>
<totalscore>TOTAL SCORE</totalscore>
<congratulations>CONGRATULATIONS!</congratulations>
<congrattext>You are awesome! You have completed all the levels!</congrattext>
</language>
<language name='aut'>
<play>SPIEL STARTEN</play>
<highscores>BESTEN PUNKTE</highscores>
<visit>WEBSEITE BESUCHEN</visit>
<preorder>VORBESTELLUNG</preorder>
<figurine>FIGURINEN KAUFEN</figurine>
<rolls>ROLLEN</rolls>
<score>SCORE</score>
<time>ZEIT</time>
<level>EBENE</level>
<partnerURL>http://www.ubisoft.com</partnerURL>
<preorderURL>http://www.ubisoft.com</preorderURL>
<figurineURL>http://www.ubisoft.com</figurineURL>
<siteURL>http://www.ubisoft.com</siteURL>
<message>NACHRICHT</message>
<messagetexts>
<messagetext>level 1 message</messagetext>
<messagetext>level 2 message</messagetext>
<messagetext>level 3 message</messagetext>
<messagetext>level 4 message</messagetext>
<messagetext>level 5 message</messagetext>
<messagetext>level 6 message</messagetext>
<messagetext>level 7 message</messagetext>
<messagetext>level 8 message</messagetext>
<messagetext>level 9 message</messagetext>
<messagetext>level 10 message</messagetext>
<messagetext>level 11 message</messagetext>
<messagetext>level 12 message</messagetext>
<messagetext>level 13 message</messagetext>
<messagetext>level 14 message</messagetext>
<messagetext>level 15 message</messagetext>
<messagetext>level 16 message</messagetext>
<messagetext>level 17 message</messagetext>
<messagetext>level 18 message</messagetext>
</messagetexts>
<failed>GESCHEITERT!</failed>
<failedtextgrenades>Sie lief aus Granaten!</failedtextgrenades>
<failedtexttime>Sie rannte aus der Zeit!</failedtexttime>
<home>ZUHAUSE</home>
<replay>WIEDERHOLUNG</replay>
<next>WEITER</next>
<levelcomplete>LEVEL KLAR!</levelcomplete>
<hits>ZUGRIFFE</hits>
<bonus>BONUS</bonus>
<totalscore>GESAMTSCORE</totalscore>
<congratulations>HERZLICHEN GLÜCKWUNSCH!</congratulations>
<congrattext>Sie sind genial! Sie haben auf alle Ebenen abgeschlossen!</congrattext>
</language>
<language name='ger'>
<play>SPIEL STARTEN</play>
<highscores>BESTEN PUNKTE</highscores>
<visit>WEBSEITE BESUCHEN</visit>
<preorder>VORBESTELLUNG</preorder>
<figurine>FIGURINEN KAUFEN</figurine>
<rolls>ROLLEN</rolls>
<score>SCORE</score>
<time>ZEIT</time>
<level>EBENE</level>
<partnerURL>http://www.ubisoft.com</partnerURL>
<preorderURL>http://www.ubisoft.com</preorderURL>
<figurineURL>http://www.ubisoft.com</figurineURL>
<siteURL>http://www.ubisoft.com</siteURL>
<message>NACHRICHT</message>
<messagetexts>
<messagetext>level 1 message</messagetext>
<messagetext>level 2 message</messagetext>
<messagetext>level 3 message</messagetext>
<messagetext>level 4 message</messagetext>
<messagetext>level 5 message</messagetext>
<messagetext>level 6 message</messagetext>
<messagetext>level 7 message</messagetext>
<messagetext>level 8 message</messagetext>
<messagetext>level 9 message</messagetext>
<messagetext>level 10 message</messagetext>
<messagetext>level 11 message</messagetext>
<messagetext>level 12 message</messagetext>
<messagetext>level 13 message</messagetext>
<messagetext>level 14 message</messagetext>
<messagetext>level 15 message</messagetext>
<messagetext>level 16 message</messagetext>
<messagetext>level 17 message</messagetext>
<messagetext>level 18 message</messagetext>
</messagetexts>
<failed>GESCHEITERT!</failed>
<failedtextgrenades>Sie lief aus Granaten!</failedtextgrenades>
<failedtexttime>Sie rannte aus der Zeit!</failedtexttime>
<home>ZUHAUSE</home>
<replay>WIEDERHOLUNG</replay>
<next>WEITER</next>
<levelcomplete>LEVEL KLAR!</levelcomplete>
<hits>ZUGRIFFE</hits>
<bonus>BONUS</bonus>
<totalscore>GESAMTSCORE</totalscore>
<congratulations>HERZLICHEN GLÜCKWUNSCH!</congratulations>
<congrattext>Sie sind genial! Sie haben auf alle Ebenen abgeschlossen!</congrattext>
</language>
<language name='esp'>
<play>JUGAR EL JUEGO</play>
<highscores>PUNTUACIONES</highscores>
<visit>VISITE EL SITIO WEB</visit>
<preorder>PRE-ORDEN</preorder>
<figurine>COMPRA FIGURITAS</figurine>
<rolls>ROLLOS</rolls>
<score>PUNTUACIÓN</score>
<time>TIEMPO</time>
<level>NIVEL</level>
<partnerURL>http://www.ubisoft.com</partnerURL>
<preorderURL>http://www.ubisoft.com</preorderURL>
<figurineURL>http://www.ubisoft.com</figurineURL>
<siteURL>http://www.ubisoft.com</siteURL>
<message>MENSAJE</message>
<messagetexts>
<messagetext>level 1 message</messagetext>
<messagetext>level 2 message</messagetext>
<messagetext>level 3 message</messagetext>
<messagetext>level 4 message</messagetext>
<messagetext>level 5 message</messagetext>
<messagetext>level 6 message</messagetext>
<messagetext>level 7 message</messagetext>
<messagetext>level 8 message</messagetext>
<messagetext>level 9 message</messagetext>
<messagetext>level 10 message</messagetext>
<messagetext>level 11 message</messagetext>
<messagetext>level 12 message</messagetext>
<messagetext>level 13 message</messagetext>
<messagetext>level 14 message</messagetext>
<messagetext>level 15 message</messagetext>
<messagetext>level 16 message</messagetext>
<messagetext>level 17 message</messagetext>
<messagetext>level 18 message</messagetext>
</messagetexts>
<failed>ERROR!</failed>
<failedtextgrenades>Se quedó sin rollos!</failedtextgrenades>
<failedtexttime>Se acabó el tiempo!</failedtexttime>
<home>INICIO</home>
<replay>OTRA VEZ</replay>
<next>SIGUIENTE</next>
<levelcomplete>APROBADO!</levelcomplete>
<hits>HITS</hits>
<bonus>BONO</bonus>
<totalscore>PUNTAJE TOTAL</totalscore>
<congratulations>FELICIDADES!</congratulations>
<congrattext>Usted es impresionante! Ha completado todos los niveles!</congrattext>
</language>
<language name='fra'>
<play>JOUER</play>
<highscores>HIGH SCORE</highscores>
<visit>VISITEZ LE SITE</visit>
<preorder>PRÉ-ACHAT</preorder>
<figurine>ACHETER DES FIGURINES</figurine>
<rolls>ROLLS</rolls>
<score>SCORE</score>
<time>TEMPS</time>
<level>NIVEAU</level>
<partnerURL>http://www.ubisoft.com</partnerURL>
<preorderURL>http://www.ubisoft.com</preorderURL>
<figurineURL>http://www.ubisoft.com</figurineURL>
<siteURL>http://www.ubisoft.com</siteURL>
<message>MESSAGE</message>
<messagetexts>
<messagetext>level 1 message</messagetext>
<messagetext>level 2 message</messagetext>
<messagetext>level 3 message</messagetext>
<messagetext>level 4 message</messagetext>
<messagetext>level 5 message</messagetext>
<messagetext>level 6 message</messagetext>
<messagetext>level 7 message</messagetext>
<messagetext>level 8 message</messagetext>
<messagetext>level 9 message</messagetext>
<messagetext>level 10 message</messagetext>
<messagetext>level 11 message</messagetext>
<messagetext>level 12 message</messagetext>
<messagetext>level 13 message</messagetext>
<messagetext>level 14 message</messagetext>
<messagetext>level 15 message</messagetext>
<messagetext>level 16 message</messagetext>
<messagetext>level 17 message</messagetext>
<messagetext>level 18 message</messagetext>
</messagetexts>
<failed>MANQUE!</failed>
<failedtextgrenades>Vous avez manqué de ROLLS!</failedtextgrenades>
<failedtexttime>Vous manqué de temps!</failedtexttime>
<home>ACCUEIL</home>
<replay>ENCORE</replay>
<next>NEXTE</next>
<levelcomplete>COMPLET!</levelcomplete>
<hits>HITS</hits>
<bonus>BONUS</bonus>
<totalscore>TOTAL DES POINTS</totalscore>
<congratulations>FELICITATIONS!</congratulations>
<congrattext>Vous êtes génial! Vous avez terminé tous les niveaux!</congrattext>
</language>
<language name='ita'>
<play>gioco</play>
<highscores>Il punteggio più alto</highscores>
<visit>VISITA IL SITO</visit>
<preorder>PRE-ORDINE</preorder>
<figurine>ACQUISTA FIGURINE</figurine>
<rolls>rotoli</rolls>
<score>Punteggio</score>
<time>tempo</time>
<level>LIVELLO</level>
<partnerURL>http://www.ubisoft.com</partnerURL>
<preorderURL>http://www.ubisoft.com</preorderURL>
<figurineURL>http://www.ubisoft.com</figurineURL>
<siteURL>http://www.ubisoft.com</siteURL>
<message>MESSAGGIO</message>
<messagetexts>
<messagetext>level 1 message</messagetext>
<messagetext>level 2 message</messagetext>
<messagetext>level 3 message</messagetext>
<messagetext>level 4 message</messagetext>
<messagetext>level 5 message</messagetext>
<messagetext>level 6 message</messagetext>
<messagetext>level 7 message</messagetext>
<messagetext>level 8 message</messagetext>
<messagetext>level 9 message</messagetext>
<messagetext>level 10 message</messagetext>
<messagetext>level 11 message</messagetext>
<messagetext>level 12 message</messagetext>
<messagetext>level 13 message</messagetext>
<messagetext>level 14 message</messagetext>
<messagetext>level 15 message</messagetext>
<messagetext>level 16 message</messagetext>
<messagetext>level 17 message</messagetext>
<messagetext>level 18 message</messagetext>
</messagetexts>
<failed>MENO!</failed>
<failedtextgrenades>Ad esaurimento degli rotoli!</failedtextgrenades>
<failedtexttime>È finito il tempo!</failedtexttime>
<home>casa</home>
<replay>di nuovo</replay>
<next>prossimo</next>
<levelcomplete>COMPLETO!</levelcomplete>
<hits>HITS</hits>
<bonus>BONUS</bonus>
<totalscore>TOTALE PUNTI</totalscore>
<congratulations>COMPLIMENTI!</congratulations>
<congrattext>Lei è impressionante! Avete completato tutti i livelli!</congrattext>
</language>
<language name='uk'>
<play>PLAY THE GAME</play>
<highscores>HIGHSCORES</highscores>
<visit>VISIT WEBSITE</visit>
<preorder>PRE-ORDER</preorder>
<figurine>BUY FIGURINES</figurine>
<rolls>ROLLS</rolls>
<score>SCORE</score>
<time>TIME</time>
<level>LEVEL</level>
<partnerURL>http://www.ubisoft.com</partnerURL>
<preorderURL>http://www.ubisoft.com</preorderURL>
<figurineURL>http://www.ubisoft.com</figurineURL>
<siteURL>http://www.ubisoft.com</siteURL>
<message>MESSAGE</message>
<messagetexts>
<messagetext>level 1 message</messagetext>
<messagetext>level 2 message</messagetext>
<messagetext>level 3 message</messagetext>
<messagetext>level 4 message</messagetext>
<messagetext>level 5 message</messagetext>
<messagetext>level 6 message</messagetext>
<messagetext>level 7 message</messagetext>
<messagetext>level 8 message</messagetext>
<messagetext>level 9 message</messagetext>
<messagetext>level 10 message</messagetext>
<messagetext>level 11 message</messagetext>
<messagetext>level 12 message</messagetext>
<messagetext>level 13 message</messagetext>
<messagetext>level 14 message</messagetext>
<messagetext>level 15 message</messagetext>
<messagetext>level 16 message</messagetext>
<messagetext>level 17 message</messagetext>
<messagetext>level 18 message</messagetext>
</messagetexts>
<failed>FAILED!</failed>
<failedtextgrenades>You ran out of grenades!</failedtextgrenades>
<failedtexttime>You ran out of time!</failedtexttime>
<home>HOME</home>
<replay>REPLAY</replay>
<next>NEXT</next>
<levelcomplete>CLEARED!</levelcomplete>
<hits>HITS</hits>
<bonus>BONUS</bonus>
<totalscore>TOTAL SCORE</totalscore>
<congratulations>CONGRATULATIONS!</congratulations>
<congrattext>You are awesome! You have completed all the levels!</congrattext>
</language>
<language name='ned'>
<play>Speel het spel</play>
<highscores>HOGE SCORE</highscores>
<visit>Bezoek de Website</visit>
<preorder>Pre-Order</preorder>
<figurine>KOPEN BEELDJES</figurine>
<rolls>rollen</rolls>
<score>score</score>
<time>tijd</time>
<level>NIVEAU</level>
<partnerURL>http://www.ubisoft.com</partnerURL>
<preorderURL>http://www.ubisoft.com</preorderURL>
<figurineURL>http://www.ubisoft.com</figurineURL>
<siteURL>http://www.ubisoft.com</siteURL>
<message>BERICHT</message>
<messagetexts>
<messagetext>level 1 message</messagetext>
<messagetext>level 2 message</messagetext>
<messagetext>level 3 message</messagetext>
<messagetext>level 4 message</messagetext>
<messagetext>level 5 message</messagetext>
<messagetext>level 6 message</messagetext>
<messagetext>level 7 message</messagetext>
<messagetext>level 8 message</messagetext>
<messagetext>level 9 message</messagetext>
<messagetext>level 10 message</messagetext>
<messagetext>level 11 message</messagetext>
<messagetext>level 12 message</messagetext>
<messagetext>level 13 message</messagetext>
<messagetext>level 14 message</messagetext>
<messagetext>level 15 message</messagetext>
<messagetext>level 16 message</messagetext>
<messagetext>level 17 message</messagetext>
<messagetext>level 18 message</messagetext>
</messagetexts>
<failed>MISLUKT!</failed>
<failedtextgrenades>U liep uit rollen!</failedtextgrenades>
<failedtexttime>Je liep uit de tijd!</failedtexttime>
<home>thuis</home>
<replay>weer</replay>
<next>volgende</next>
<levelcomplete>COMPLEET!</levelcomplete>
<hits>HITS</hits>
<bonus>BONUS</bonus>
<totalscore>TOTAAL AANTAL PUNTEN</totalscore>
<congratulations>GEFELICITEERD!</congratulations>
<congrattext>Je bent geweldig! Je hebt alle levels!</congrattext>
</language>
<language name='swe'>
<play>spela spel</play>
<highscores>HÖG SCORE</highscores>
<visit>Besök webbsida</visit>
<preorder>Pre-Order</preorder>
<figurine>KÖP små figurer</figurine>
<rolls>rullar</rolls>
<score>poäng</score>
<time>tid</time>
<level>NIVÅ</level>
<partnerURL>http://www.ubisoft.com</partnerURL>
<preorderURL>http://www.ubisoft.com</preorderURL>
<figurineURL>http://www.ubisoft.com</figurineURL>
<siteURL>http://www.ubisoft.com</siteURL>
<message>MEDDELANDE</message>
<messagetexts>
<messagetext>level 1 message</messagetext>
<messagetext>level 2 message</messagetext>
<messagetext>level 3 message</messagetext>
<messagetext>level 4 message</messagetext>
<messagetext>level 5 message</messagetext>
<messagetext>level 6 message</messagetext>
<messagetext>level 7 message</messagetext>
<messagetext>level 8 message</messagetext>
<messagetext>level 9 message</messagetext>
<messagetext>level 10 message</messagetext>
<messagetext>level 11 message</messagetext>
<messagetext>level 12 message</messagetext>
<messagetext>level 13 message</messagetext>
<messagetext>level 14 message</messagetext>
<messagetext>level 15 message</messagetext>
<messagetext>level 16 message</messagetext>
<messagetext>level 17 message</messagetext>
<messagetext>level 18 message</messagetext>
</messagetexts>
<failed>MISSLYCKADES!</failed>
<failedtextgrenades>DU tog slut rullar!</failedtextgrenades>
<failedtexttime>Du fick ont om tid!</failedtexttime>
<home>hemma</home>
<replay>igen</replay>
<next>nästa</next>
<levelcomplete>KOMPLETT!</levelcomplete>
<hits>Träffar</hits>
<bonus>BONUS</bonus>
<totalscore>TOTAL Poäng</totalscore>
<congratulations>GRATTIS!</congratulations>
<congrattext>Du är grym! Du har slutfört alla nivåer!</congrattext>
</language>
</languages>
;
}
public function handleClick(_arg1:MouseEvent){
trace(_arg1.currentTarget.name);
switch (_arg1.currentTarget.name){
case "partnerLogo":
navigateToURL(new URLRequest(langXML.partnerURL), "_blank");
break;
case "b_preorder":
navigateToURL(new URLRequest(langXML.preorderURL), "_blank");
break;
case "b_figurine":
navigateToURL(new URLRequest(langXML.figurineURL), "_blank");
break;
case "b_play":
gotoAndStop("level_select");
break;
};
}
function frame20(){
TweenLite.from(gameLogo, 0.4, {alpha:0, ease:Strong.easeOut});
TweenLite.from(b_play, 0.4, {alpha:0, x:"-20", delay:0.1, ease:Bounce.easeOut});
TweenLite.from(b_high, 0.4, {alpha:0, x:"-20", delay:0.2, ease:Bounce.easeOut});
TweenLite.from(b_visit, 0.4, {alpha:0, x:"-20", delay:0.3, ease:Bounce.easeOut});
TweenLite.from(b_preorder, 0.4, {alpha:0, y:"20", delay:0.4, ease:Bounce.easeOut});
TweenLite.from(b_figurine, 0.4, {alpha:0, y:"20", delay:0.5, ease:Bounce.easeOut});
gameLogo.gotoAndStop(langIdString);
partnerLogo.gotoAndStop(langIdString);
crampText(b_play.bText, langXML.play);
crampText(b_high.bText, langXML.highscores);
crampText(b_visit.btn.bText, langXML.visit);
crampText(b_preorder.bText, langXML.preorder);
crampText(b_figurine.bText, langXML.figurine);
b_play.addEventListener(MouseEvent.CLICK, handleClick, false, 0, true);
b_high.addEventListener(MouseEvent.CLICK, handleClick, false, 0, true);
b_visit.addEventListener(MouseEvent.CLICK, handleClick, false, 0, true);
b_preorder.addEventListener(MouseEvent.CLICK, handleClick, false, 0, true);
b_figurine.addEventListener(MouseEvent.CLICK, handleClick, false, 0, true);
partnerLogo.addEventListener(MouseEvent.CLICK, handleClick, false, 0, true);
buttonize(b_play);
buttonize(b_high);
buttonize(b_visit.btn);
buttonize(b_preorder.poUS);
buttonize(b_figurine);
b_play.buttonMode = true;
b_high.buttonMode = true;
b_visit.buttonMode = true;
b_preorder.buttonMode = true;
b_figurine.buttonMode = true;
partnerLogo.buttonMode = true;
b_play.bText.mouseEnabled = false;
b_high.bText.mouseEnabled = false;
b_visit.btn.bText.mouseEnabled = false;
b_preorder.bText.mouseEnabled = false;
b_figurine.bText.mouseEnabled = false;
b_preorder.gotoAndStop(langIdString);
if (langIdString != "us"){
b_visit.gotoAndStop(2);
};
}
function frame30(){
TweenLite.from(gameLogoLevels, 0.4, {alpha:0, ease:Strong.easeOut});
TweenLite.from(rabbid1, 0.7, {x:"-200", ease:Strong.easeOut});
TweenLite.from(rabbid2, 0.7, {x:"200", ease:Strong.easeOut});
gameLogoLevels.gotoAndStop(langIdString);
freezeTimer = new Timer(600);
freeze = false;
freezeTimer.addEventListener(TimerEvent.TIMER, unFreeze, false, 0, true);
thumbsArray = new Array(t1, t2, t3, t4, t5, t6);
thumbsAddMouse();
pLeft.addEventListener(MouseEvent.CLICK, doPage, false, 0, true);
pRight.addEventListener(MouseEvent.CLICK, doPage, false, 0, true);
animRight();
initThumbs();
}
public function unFreeze(_arg1:TimerEvent){
freeze = false;
freezeTimer.stop();
}
public function initThumbs(){
var _local1:uint;
checkArrows();
_local1 = 0;
while (_local1 < thumbsArray.length) {
buttonize(thumbsArray[_local1]);
if (((cPage * 6) + _local1) <= unLocked){
thumbsArray[_local1].lock.visible = false;
thumbsArray[_local1].shade.visible = false;
thumbsArray[_local1].isLocked = false;
} else {
thumbsArray[_local1].lock.visible = true;
thumbsArray[_local1].shade.visible = true;
thumbsArray[_local1].isLocked = true;
};
_local1++;
};
}
public function animRight(){
var _local1:uint;
freeze = true;
freezeTimer.start();
_local1 = 0;
while (_local1 < thumbsArray.length) {
TweenLite.from(thumbsArray[_local1], 0.4, {alpha:0, x:"-20", delay:(_local1 / 20), ease:Strong.easeOut});
_local1++;
};
}
function frame40(){
buttonize(restartButton);
crampText(msg.box.fail.labelText, langXML.failed);
crampText(msg.box.fail.homeText, langXML.home);
crampText(msg.box.fail.replayText, langXML.replay);
crampText(msg.box.clr.homeText, langXML.home);
crampText(msg.box.clr.nextText, langXML.next);
crampText(msg.box.clr.totalText, langXML.totalscore);
crampText(msg.box.clr.bonusText, langXML.bonus);
crampText(msg.box.clr.hitsText, langXML.hits);
crampText(msg.box.clr.clearLabel, langXML.levelcomplete);
crampText(msg.box.msg.msgLabel, langXML.message);
crampText(msg.box.msg.msgText, langXML.messagetexts.children()[cLevel]);
}
public function chooseLang(_arg1:MouseEvent){
var _local2:MovieClip;
var _local3:uint;
langIdString = _arg1.currentTarget.name.slice(4, 20).toLowerCase();
trace(langIdString, "LANGUAGE");
_local2 = MovieClip(_arg1.currentTarget);
_local3 = 0;
while (_local3 < flags.length) {
if (flags[_local3] == _local2){
langId = _local3;
};
_local3++;
};
initLang(langId);
}
public function proceed(_arg1:TimerEvent){
waitTimer.stop();
waitTimer.removeEventListener(TimerEvent.TIMER, proceed);
gotoAndStop("language_select");
}
function frame41(){
stop();
msg.popScreen(1, true);
engine.dad = MovieClip(this);
engine.initGame(cLevel, getLevelName());
gameLogoGame.gotoAndStop(langIdString);
crampText(gameUi.rollsText, langXML.rolls);
crampText(gameUi.timeText, langXML.time);
crampText(gameUi.scoreText, langXML.score);
crampText(gameUi.levelText, langXML.level);
gameUi.levelNum.setNum((cLevel + 1));
trace(gameUi.levelNum);
trace(gameUi.levelNum.setNum);
trace("AAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
restartButton.addEventListener(MouseEvent.CLICK, doRestart, false, 0, true);
}
public function checkArrows(){
if (chapterLock != -1){
pLeft.visible = false;
pRight.visible = false;
return;
};
if (cPage == 0){
pLeft.visible = false;
} else {
pLeft.visible = true;
};
if (cPage == 2){
pRight.visible = false;
} else {
pRight.visible = true;
};
}
public function doOut(_arg1:MouseEvent){
if (_arg1.currentTarget.isLocked){
return;
};
_arg1.currentTarget.gotoAndPlay("out");
}
public function calculateScore(_arg1:uint, _arg2:uint, _arg3:uint){
trace(_arg1, _arg2, _arg3);
trace("hits: ", _arg1);
trace("bonus: ", ((_arg2 * 200) + uint((_arg3 * 5))));
msg.box.clr.hits.text = _arg1;
msg.box.clr.bonus.text = ((_arg2 * 200) + uint((_arg3 * 5)));
msg.box.clr.score.text = ((_arg1 + (_arg2 * 200)) + uint((_arg3 * 5)));
so.data.soArray[cLevel] = ((_arg1 + (_arg2 * 200)) + uint((_arg3 * 5)));
trace(so.data.soArray);
}
function frame50(){
gameLogoEnd.gotoAndStop(langIdString);
TweenLite.from(gameLogoEnd, 0.4, {alpha:0, ease:Strong.easeOut});
TweenLite.from(fridge, 0.8, {alpha:0, y:"-80", delay:0.1, ease:Bounce.easeOut});
TweenLite.from(rabbid1, 1.4, {alpha:0, y:"-80", delay:1, ease:Elastic.easeOut});
TweenLite.from(rabbid2, 1.4, {alpha:0, y:"-30", delay:1.1, ease:Elastic.easeOut});
TweenLite.from(rabbid3, 0.9, {alpha:0, y:"-50", delay:1.3, ease:Elastic.easeOut});
TweenLite.from(b_preorder, 0.4, {alpha:0, y:"+50", delay:1.5, ease:Bounce.easeOut});
TweenLite.from(b_visit, 0.4, {alpha:0, y:"+50", delay:1.6, ease:Bounce.easeOut});
crampText(fridge.congratsTitle, langXML.congratulations);
crampText(fridge.congratsTxt, langXML.congrattext);
crampText(fridge.totalScore, langXML.totalscore);
crampText(fridge.scoreTxt, String(getTotalScore()));
b_visit.addEventListener(MouseEvent.CLICK, handleClick, false, 0, true);
b_preorder.addEventListener(MouseEvent.CLICK, handleClick, false, 0, true);
b_visit.buttonMode = true;
b_preorder.buttonMode = true;
crampText(b_visit.btn.bText, langXML.visit);
crampText(b_preorder.bText, langXML.preorder);
b_preorder.bText.mouseEnabled = false;
b_visit.btn.bText.mouseEnabled = false;
buttonize(b_preorder.poUS);
buttonize(b_visit.btn);
b_preorder.gotoAndStop(langIdString);
if (langIdString != "us"){
b_visit.gotoAndStop(2);
};
}
public function buttonize(_arg1:MovieClip){
_arg1.buttonMode = true;
_arg1.addEventListener(MouseEvent.MOUSE_OVER, doOver, false, 0, true);
_arg1.addEventListener(MouseEvent.MOUSE_OUT, doOut, false, 0, true);
}
public function thumbsAddMouse(){
var _local1:MovieClip;
var _local2:uint;
_local2 = 0;
while (_local2 < thumbsArray.length) {
_local1 = thumbsArray[_local2];
_local1.buttonMode = true;
_local1.addEventListener(MouseEvent.CLICK, selectLevel, false, 0, true);
_local2++;
};
}
public function doRestart(_arg1:MouseEvent){
if (msg.visible){
return;
};
engine.restartLevel();
}
public function doPreload(_arg1:Event){
var _local2:uint;
_local2 = ((stage.loaderInfo.bytesLoaded / stage.loaderInfo.bytesTotal) * 100);
percentText.text = (String(_local2) + "%");
if (_local2 >= 100){
this.removeEventListener(Event.ENTER_FRAME, doPreload);
waitTimer.start();
};
}
public function initLang(_arg1:uint){
langXML = langsXML.children()[_arg1].copy();
trace(langXML);
toMainMenu();
}
public function initFlags(){
var _local1:uint;
_local1 = 0;
while (_local1 < flags.length) {
buttonize(flags[_local1]);
TweenLite.from(flags[_local1], 0.7, {alpha:0, x:"-50", ease:Elastic.easeOut, delay:(0.2 + (_local1 * 0.03))});
flags[_local1].addEventListener(MouseEvent.CLICK, chooseLang, false, 0, true);
_local1++;
};
}
public function getLevelName(){
var _local1:uint;
var _local2:String;
_local1 = (cLevel + 1);
if (_local1 < 10){
_local2 = ("0" + String(_local1));
} else {
_local2 = String(_local1);
};
_local2 = ("level" + _local2);
return (_local2);
}
public function doKeyboard(_arg1:KeyboardEvent){
if ((((this.currentFrame == 41)) && ((_arg1.keyCode == 78)))){
engine.nextLevel();
return;
};
if (_arg1.keyCode == 87){
if (this.currentFrame == 41){
engine.cleanUp();
};
gotoAndStop("final_screen");
return;
};
if (_arg1.keyCode == 72){
if (this.currentFrame == 41){
engine.cleanUp();
};
gotoAndStop("main_menu");
return;
};
trace(_arg1.keyCode);
}
public function getTotalScore(){
var _local1:uint;
var _local2:uint;
_local2 = 0;
while (_local2 < so.data.soArray.length) {
_local1 = (_local1 + so.data.soArray[_local2]);
_local2++;
};
return (_local1);
}
public function doPage(_arg1:MouseEvent){
if (freeze){
return;
};
if (_arg1.currentTarget.name == "pLeft"){
if (cPage > 0){
cPage--;
animLeft();
initThumbs();
};
} else {
if (cPage < 2){
cPage++;
animRight();
initThumbs();
};
};
}
public function crampText(_arg1:TextField, _arg2:String){
var _local3:uint;
var _local4:uint;
var _local5:Number;
var _local6:uint;
_local3 = _arg1.textHeight;
_local4 = _arg1.width;
_arg1.text = _arg2.toUpperCase();
_local6 = _arg1.textWidth;
if ((_local6 + 10) > _local4){
_local5 = (_local4 / (_local6 + 10));
_arg1.width = (_local6 + 10);
_arg1.scaleX = _local5;
_arg1.scaleY = _local5;
_arg1.y = (_arg1.y + ((_local3 - (_local3 * _local5)) / 2));
};
}
public function animLeft(){
var _local1:uint;
freeze = true;
freezeTimer.start();
_local1 = 0;
while (_local1 < thumbsArray.length) {
TweenLite.from(thumbsArray[_local1], 0.4, {alpha:0, x:"20", delay:(_local1 / 20), ease:Strong.easeOut});
_local1++;
};
}
public function selectLevel(_arg1:MouseEvent){
var _local2:uint;
_local2 = ((uint(_arg1.currentTarget.name.charAt(1)) - 1) + (cPage * 6));
if (_local2 > unLocked){
return;
};
trace(_local2);
cLevel = _local2;
trace("dad.cLevel:", cLevel);
gotoAndPlay("gameplay");
}
public function doOver(_arg1:MouseEvent){
if (_arg1.currentTarget.isLocked){
return;
};
_arg1.currentTarget.gotoAndPlay("in");
}
}
}//package GAME_08_fla
Section 139
//mc_115 (GAME_08_fla.mc_115)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_115 extends MovieClip {
public function mc_115(){
addFrameScript(29, frame30);
}
function frame30(){
gotoAndPlay("loop");
}
}
}//package GAME_08_fla
Section 140
//mc_123 (GAME_08_fla.mc_123)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_123 extends MovieClip {
public function mc_123(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 141
//mc_124 (GAME_08_fla.mc_124)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_124 extends MovieClip {
public function mc_124(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((14 * Math.random())));
}
}
}//package GAME_08_fla
Section 142
//mc_125 (GAME_08_fla.mc_125)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_125 extends MovieClip {
public function mc_125(){
addFrameScript(0, frame1, 39, frame40, 85, frame86);
}
function frame86(){
gotoAndPlay((Math.ceil((30 * Math.random())) + 86));
}
function frame1(){
gotoAndPlay(Math.ceil((125 * Math.random())));
}
function frame40(){
gotoAndPlay((Math.ceil((30 * Math.random())) + 40));
}
}
}//package GAME_08_fla
Section 143
//mc_126 (GAME_08_fla.mc_126)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_126 extends MovieClip {
public function mc_126(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((14 * Math.random())));
}
}
}//package GAME_08_fla
Section 144
//mc_127 (GAME_08_fla.mc_127)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_127 extends MovieClip {
public function mc_127(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 145
//mc_128 (GAME_08_fla.mc_128)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_128 extends MovieClip {
public function mc_128(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((14 * Math.random())));
}
}
}//package GAME_08_fla
Section 146
//mc_133 (GAME_08_fla.mc_133)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_133 extends MovieClip {
public function mc_133(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 147
//mc_138 (GAME_08_fla.mc_138)
package GAME_08_fla {
import flash.display.*;
import flash.text.*;
public dynamic class mc_138 extends MovieClip {
public var msgLabel:TextField;
public var clock:MovieClip;
public var rabbidMC:MovieClip;
public var btnOK:MovieClip;
public var sandtimer:MovieClip;
public var msgText:TextField;
}
}//package GAME_08_fla
Section 148
//mc_139 (GAME_08_fla.mc_139)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_139 extends MovieClip {
public function mc_139(){
addFrameScript(29, frame30);
}
function frame30(){
gotoAndPlay("loop");
}
}
}//package GAME_08_fla
Section 149
//mc_151 (GAME_08_fla.mc_151)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_151 extends MovieClip {
public function mc_151(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 150
//mc_158 (GAME_08_fla.mc_158)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_158 extends MovieClip {
public function mc_158(){
addFrameScript(129, frame130);
}
function frame130(){
gotoAndPlay("loop");
}
}
}//package GAME_08_fla
Section 151
//mc_161 (GAME_08_fla.mc_161)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_161 extends MovieClip {
public function mc_161(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 152
//mc_163 (GAME_08_fla.mc_163)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_163 extends MovieClip {
public function mc_163(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 153
//mc_164 (GAME_08_fla.mc_164)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_164 extends MovieClip {
public function mc_164(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package GAME_08_fla
Section 154
//mc_167 (GAME_08_fla.mc_167)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_167 extends MovieClip {
public function mc_167(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((30 * Math.random())));
}
}
}//package GAME_08_fla
Section 155
//mc_171 (GAME_08_fla.mc_171)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_171 extends MovieClip {
public function mc_171(){
addFrameScript(130, frame131);
}
function frame131(){
gotoAndPlay("loop");
}
}
}//package GAME_08_fla
Section 156
//mc_176 (GAME_08_fla.mc_176)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_176 extends MovieClip {
public function mc_176(){
addFrameScript(10, frame11);
}
function frame11(){
stop();
}
}
}//package GAME_08_fla
Section 157
//mc_177 (GAME_08_fla.mc_177)
package GAME_08_fla {
import flash.display.*;
import flash.text.*;
public dynamic class mc_177 extends MovieClip {
public var clock:MovieClip;
public var labelText:TextField;
public var sandtimer:MovieClip;
public var btnHome:MovieClip;
public var btnReplay:MovieClip;
public var failText:TextField;
public var homeText:TextField;
public var replayText:TextField;
}
}//package GAME_08_fla
Section 158
//mc_178 (GAME_08_fla.mc_178)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_178 extends MovieClip {
public function mc_178(){
addFrameScript(29, frame30);
}
function frame30(){
gotoAndPlay("loop");
}
}
}//package GAME_08_fla
Section 159
//mc_190 (GAME_08_fla.mc_190)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_190 extends MovieClip {
public function mc_190(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((14 * Math.random())));
}
}
}//package GAME_08_fla
Section 160
//mc_191 (GAME_08_fla.mc_191)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_191 extends MovieClip {
public function mc_191(){
addFrameScript(0, frame1, 39, frame40, 85, frame86);
}
function frame86(){
gotoAndPlay((Math.ceil((30 * Math.random())) + 86));
}
function frame1(){
gotoAndPlay(Math.ceil((125 * Math.random())));
}
function frame40(){
gotoAndPlay((Math.ceil((30 * Math.random())) + 40));
}
}
}//package GAME_08_fla
Section 161
//mc_192 (GAME_08_fla.mc_192)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_192 extends MovieClip {
public function mc_192(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((14 * Math.random())));
}
}
}//package GAME_08_fla
Section 162
//mc_193 (GAME_08_fla.mc_193)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_193 extends MovieClip {
public function mc_193(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 163
//mc_194 (GAME_08_fla.mc_194)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_194 extends MovieClip {
public function mc_194(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((14 * Math.random())));
}
}
}//package GAME_08_fla
Section 164
//mc_198 (GAME_08_fla.mc_198)
package GAME_08_fla {
import flash.display.*;
import flash.text.*;
public dynamic class mc_198 extends MovieClip {
public var bonusText:TextField;
public var clock:MovieClip;
public var bonus:TextField;
public var sandtimer:MovieClip;
public var btnHome:MovieClip;
public var hits:TextField;
public var btnNext:MovieClip;
public var totalText:TextField;
public var score:TextField;
public var clearLabel:TextField;
public var homeText:TextField;
public var hitsText:TextField;
public var nextText:TextField;
}
}//package GAME_08_fla
Section 165
//mc_199 (GAME_08_fla.mc_199)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_199 extends MovieClip {
public function mc_199(){
addFrameScript(32, frame33);
}
function frame33(){
gotoAndPlay("loop");
}
}
}//package GAME_08_fla
Section 166
//mc_210 (GAME_08_fla.mc_210)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_210 extends MovieClip {
public function mc_210(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 167
//mc_214 (GAME_08_fla.mc_214)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_214 extends MovieClip {
public function mc_214(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 168
//mc_235 (GAME_08_fla.mc_235)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_235 extends MovieClip {
public function mc_235(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((50 * Math.random())));
}
}
}//package GAME_08_fla
Section 169
//mc_240 (GAME_08_fla.mc_240)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_240 extends MovieClip {
public function mc_240(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 170
//mc_243 (GAME_08_fla.mc_243)
package GAME_08_fla {
import flash.display.*;
import flash.text.*;
public dynamic class mc_243 extends MovieClip {
public var congratsTitle:TextField;
public var totalScore:TextField;
public var scoreTxt:TextField;
public var congratsTxt:TextField;
}
}//package GAME_08_fla
Section 171
//mc_248 (GAME_08_fla.mc_248)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_248 extends MovieClip {
public function mc_248(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 172
//mc_25 (GAME_08_fla.mc_25)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_25 extends MovieClip {
public function mc_25(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 173
//mc_26 (GAME_08_fla.mc_26)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_26 extends MovieClip {
public function mc_26(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 174
//mc_28 (GAME_08_fla.mc_28)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_28 extends MovieClip {
public function mc_28(){
addFrameScript(0, frame1, 134, frame135);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
function frame135(){
gotoAndPlay((Math.ceil((30 * Math.random())) + 136));
}
}
}//package GAME_08_fla
Section 175
//mc_30 (GAME_08_fla.mc_30)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_30 extends MovieClip {
public function mc_30(){
addFrameScript(32, frame33);
}
function frame33(){
gotoAndPlay("loop");
}
}
}//package GAME_08_fla
Section 176
//mc_304 (GAME_08_fla.mc_304)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_304 extends MovieClip {
public var rabbidIdle:MovieClip;
public var rabbidThrow:MovieClip;
public var rabbidReload:MovieClip;
public var rabbidFail:MovieClip;
public var rabbidSuccess:MovieClip;
public function mc_304(){
addFrameScript(0, frame1, 9, frame10, 19, frame20, 29, frame30, 39, frame40, 50, frame51);
}
function frame10(){
stop();
}
function frame1(){
stop();
}
function frame20(){
stop();
}
function frame30(){
stop();
}
function frame40(){
stop();
}
function frame51(){
stop();
}
}
}//package GAME_08_fla
Section 177
//mc_310 (GAME_08_fla.mc_310)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_310 extends MovieClip {
public function mc_310(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((70 * Math.random())));
}
}
}//package GAME_08_fla
Section 178
//mc_314 (GAME_08_fla.mc_314)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_314 extends MovieClip {
public function mc_314(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 179
//mc_315 (GAME_08_fla.mc_315)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_315 extends MovieClip {
public function mc_315(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 180
//mc_318 (GAME_08_fla.mc_318)
package GAME_08_fla {
import flash.display.*;
import flash.utils.*;
import flash.geom.*;
import flash.events.*;
import flash.text.*;
import flash.net.*;
import adobe.utils.*;
import flash.accessibility.*;
import flash.errors.*;
import flash.external.*;
import flash.filters.*;
import flash.media.*;
import flash.printing.*;
import flash.system.*;
import flash.ui.*;
import flash.xml.*;
public dynamic class mc_318 extends MovieClip {
public function mc_318(){
addFrameScript(0, frame1, 50, frame51);
}
function frame1(){
if (MovieClip(parent).doLoop){
MovieClip(parent).doLoop = false;
gotoAndPlay("loop");
};
}
function frame51(){
gotoAndPlay("loop");
}
}
}//package GAME_08_fla
Section 181
//mc_322 (GAME_08_fla.mc_322)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_322 extends MovieClip {
public function mc_322(){
addFrameScript(0, frame1, 15, frame16);
}
function frame16(){
MovieClip(parent).gotoAndStop("idle");
}
function frame1(){
gotoAndPlay(8);
}
}
}//package GAME_08_fla
Section 182
//mc_323 (GAME_08_fla.mc_323)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_323 extends MovieClip {
public function mc_323(){
addFrameScript(56, frame57);
}
function frame57(){
gotoAndPlay("loop");
}
}
}//package GAME_08_fla
Section 183
//mc_326 (GAME_08_fla.mc_326)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_326 extends MovieClip {
public function mc_326(){
addFrameScript(12, frame13);
}
function frame13(){
stop();
}
}
}//package GAME_08_fla
Section 184
//mc_332 (GAME_08_fla.mc_332)
package GAME_08_fla {
import flash.display.*;
import flash.utils.*;
import flash.geom.*;
import flash.events.*;
import flash.text.*;
import flash.net.*;
import adobe.utils.*;
import flash.accessibility.*;
import flash.errors.*;
import flash.external.*;
import flash.filters.*;
import flash.media.*;
import flash.printing.*;
import flash.system.*;
import flash.ui.*;
import flash.xml.*;
public dynamic class mc_332 extends MovieClip {
public function mc_332(){
addFrameScript(24, frame25);
}
function frame25(){
MovieClip(parent).doLoop = true;
MovieClip(parent).gotoAndStop("throw");
}
}
}//package GAME_08_fla
Section 185
//mc_333 (GAME_08_fla.mc_333)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_333 extends MovieClip {
public var enemy3Idle:MovieClip;
public var enemy3Hit:MovieClip;
public function mc_333(){
addFrameScript(0, frame1, 9, frame10);
}
function frame10(){
stop();
}
function frame1(){
stop();
}
}
}//package GAME_08_fla
Section 186
//mc_342 (GAME_08_fla.mc_342)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_342 extends MovieClip {
public function mc_342(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 187
//mc_343 (GAME_08_fla.mc_343)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_343 extends MovieClip {
public function mc_343(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 188
//mc_345 (GAME_08_fla.mc_345)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_345 extends MovieClip {
public function mc_345(){
addFrameScript(0, frame1, 34, frame35);
}
function frame1(){
gotoAndPlay(6);
}
function frame35(){
stop();
MovieClip(parent.parent).removeChild(MovieClip(parent));
}
}
}//package GAME_08_fla
Section 189
//mc_350 (GAME_08_fla.mc_350)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_350 extends MovieClip {
public var enemy1Idle:MovieClip;
public var enemy1Hit:MovieClip;
public function mc_350(){
addFrameScript(0, frame1, 9, frame10);
}
function frame10(){
stop();
}
function frame1(){
stop();
}
}
}//package GAME_08_fla
Section 190
//mc_354 (GAME_08_fla.mc_354)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_354 extends MovieClip {
public function mc_354(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 191
//mc_360 (GAME_08_fla.mc_360)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_360 extends MovieClip {
public function mc_360(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 192
//mc_363 (GAME_08_fla.mc_363)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_363 extends MovieClip {
public function mc_363(){
addFrameScript(0, frame1, 34, frame35);
}
function frame1(){
gotoAndPlay(6);
}
function frame35(){
stop();
MovieClip(parent.parent).removeChild(MovieClip(parent));
}
}
}//package GAME_08_fla
Section 193
//mc_368 (GAME_08_fla.mc_368)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_368 extends MovieClip {
public var enemy2Hit:MovieClip;
public var enemy2Idle:MovieClip;
public function mc_368(){
addFrameScript(0, frame1, 9, frame10);
}
function frame10(){
stop();
}
function frame1(){
stop();
}
}
}//package GAME_08_fla
Section 194
//mc_376 (GAME_08_fla.mc_376)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_376 extends MovieClip {
public function mc_376(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 195
//mc_378 (GAME_08_fla.mc_378)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_378 extends MovieClip {
public function mc_378(){
addFrameScript(0, frame1, 34, frame35);
}
function frame1(){
gotoAndPlay(6);
}
function frame35(){
stop();
MovieClip(parent.parent).removeChild(MovieClip(parent));
}
}
}//package GAME_08_fla
Section 196
//mc_382 (GAME_08_fla.mc_382)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_382 extends MovieClip {
public var enemy2Hit:MovieClip;
public var enemy2Idle:MovieClip;
public function mc_382(){
addFrameScript(0, frame1, 9, frame10);
}
function frame10(){
stop();
}
function frame1(){
stop();
}
}
}//package GAME_08_fla
Section 197
//mc_383 (GAME_08_fla.mc_383)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_383 extends MovieClip {
public function mc_383(){
addFrameScript(0, frame1, 118, frame119, 150, frame151);
}
function frame151(){
gotoAndPlay(Math.ceil((90 * Math.random())));
}
function frame1(){
gotoAndPlay(Math.ceil((90 * Math.random())));
}
function frame119(){
gotoAndPlay((Math.ceil((60 * Math.random())) + 120));
}
}
}//package GAME_08_fla
Section 198
//mc_394 (GAME_08_fla.mc_394)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_394 extends MovieClip {
public function mc_394(){
addFrameScript(0, frame1, 34, frame35);
}
function frame1(){
gotoAndPlay(6);
}
function frame35(){
stop();
MovieClip(parent.parent).removeChild(MovieClip(parent));
}
}
}//package GAME_08_fla
Section 199
//mc_44 (GAME_08_fla.mc_44)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_44 extends MovieClip {
public function mc_44(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 200
//mc_48 (GAME_08_fla.mc_48)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_48 extends MovieClip {
public function mc_48(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 201
//mc_55 (GAME_08_fla.mc_55)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_55 extends MovieClip {
public function mc_55(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 202
//mc_56 (GAME_08_fla.mc_56)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_56 extends MovieClip {
public function mc_56(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package GAME_08_fla
Section 203
//mc_74 (GAME_08_fla.mc_74)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_74 extends MovieClip {
public function mc_74(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((30 * Math.random())));
}
}
}//package GAME_08_fla
Section 204
//mc_85 (GAME_08_fla.mc_85)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_85 extends MovieClip {
public function mc_85(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 205
//mc_86 (GAME_08_fla.mc_86)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_86 extends MovieClip {
public function mc_86(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndPlay(Math.ceil((60 * Math.random())));
}
}
}//package GAME_08_fla
Section 206
//mc_88 (GAME_08_fla.mc_88)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_88 extends MovieClip {
public function mc_88(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package GAME_08_fla
Section 207
//mc_89 (GAME_08_fla.mc_89)
package GAME_08_fla {
import flash.display.*;
public dynamic class mc_89 extends MovieClip {
public function mc_89(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package GAME_08_fla
Section 208
//messageBoard_135 (GAME_08_fla.messageBoard_135)
package GAME_08_fla {
import flash.display.*;
import flash.utils.*;
import flash.geom.*;
import com.greensock.*;
import flash.events.*;
import flash.text.*;
import com.greensock.easing.*;
import flash.net.*;
import adobe.utils.*;
import flash.accessibility.*;
import flash.errors.*;
import flash.external.*;
import flash.filters.*;
import flash.media.*;
import flash.printing.*;
import flash.system.*;
import flash.ui.*;
import flash.xml.*;
public dynamic class messageBoard_135 extends MovieClip {
public var cSTemp:Boolean;
public var screens:Array;
public var delayTimer:Timer;
public var cScreen:uint;
public var box:MovieClip;
public var fadeBg:MovieClip;
public var sTemp:uint;
public function messageBoard_135(){
addFrameScript(0, frame1);
}
public function doNextLevel(_arg1:MouseEvent){
MovieClip(parent).engine.nextLevel();
ridScreen();
}
public function popScreen(_arg1:uint, _arg2:Boolean=false){
box.msg.visible = false;
box.clr.visible = false;
box.fail.visible = false;
cScreen = _arg1;
screens[_arg1].visible = true;
this.visible = true;
box.gotoAndStop(_arg1);
fadeBg.alpha = 1;
if (!_arg2){
TweenLite.from(fadeBg, 0.7, {alpha:0, ease:Strong.easeOut});
};
box.alpha = 1;
box.scaleX = 1;
box.scaleY = 1;
TweenLite.from(box, 1, {scaleX:0.9, scaleY:0.9, ease:Elastic.easeOut});
}
public function doReplay(_arg1:MouseEvent){
MovieClip(parent).engine.restartLevel();
ridScreen();
}
function frame1(){
stop();
MovieClip(parent).buttonize(box.msg.btnOK);
MovieClip(parent).buttonize(box.fail.btnHome);
MovieClip(parent).buttonize(box.fail.btnReplay);
MovieClip(parent).buttonize(box.clr.btnHome);
MovieClip(parent).buttonize(box.clr.btnNext);
box.msg.btnOK.addEventListener(MouseEvent.CLICK, startGame, false, 0, true);
box.fail.btnHome.addEventListener(MouseEvent.CLICK, goHome, false, 0, true);
box.clr.btnHome.addEventListener(MouseEvent.CLICK, goHome, false, 0, true);
box.clr.btnNext.addEventListener(MouseEvent.CLICK, doNextLevel, false, 0, true);
box.fail.btnReplay.addEventListener(MouseEvent.CLICK, doReplay, false, 0, true);
screens = new Array("dsd", box.msg, box.fail, box.clr);
cScreen = 1;
box.msg.visible = false;
box.clr.visible = false;
box.fail.visible = false;
sTemp = 1;
cSTemp = false;
delayTimer = new Timer(2000);
delayTimer.addEventListener(TimerEvent.TIMER, doTimer, false, 0, true);
}
public function startGame(_arg1:MouseEvent){
MovieClip(parent).engine.startGame();
ridScreen();
}
public function popScreenDelayed(_arg1:uint, _arg2:Boolean=false, _arg3:uint=1000){
sTemp = _arg1;
cSTemp = _arg2;
delayTimer.delay = _arg3;
delayTimer.start();
}
public function doTimer(_arg1:TimerEvent){
popScreen(sTemp, cSTemp);
delayTimer.stop();
}
public function invisMe(){
this.visible = false;
}
public function ridScreen(){
box.scaleX = 1;
box.scaleY = 1;
TweenLite.to(box, 0.4, {scaleX:0.3, scaleY:0.3, ease:Strong.easeIn});
fadeBg.alpha = 1;
TweenLite.to(fadeBg, 0.4, {alpha:0, ease:Strong.easeIn, onComplete:invisMe});
}
public function goHome(_arg1:MouseEvent){
MovieClip(parent).engine.cleanUp();
MovieClip(parent).gotoAndStop("main_menu");
}
}
}//package GAME_08_fla
Section 209
//msgBox_137 (GAME_08_fla.msgBox_137)
package GAME_08_fla {
import flash.display.*;
public dynamic class msgBox_137 extends MovieClip {
public var fail:MovieClip;
public var clr:MovieClip;
public var msg:MovieClip;
}
}//package GAME_08_fla
Section 210
//myGrenade_231 (GAME_08_fla.myGrenade_231)
package GAME_08_fla {
import flash.display.*;
public dynamic class myGrenade_231 extends MovieClip {
public function myGrenade_231(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package GAME_08_fla
Section 211
//powerArrow_229 (GAME_08_fla.powerArrow_229)
package GAME_08_fla {
import flash.display.*;
public dynamic class powerArrow_229 extends MovieClip {
public var powerMask:MovieClip;
}
}//package GAME_08_fla
Section 212
//Screen_6 (GAME_08_fla.Screen_6)
package GAME_08_fla {
import flash.display.*;
public dynamic class Screen_6 extends MovieClip {
public var flagFRA:MovieClip;
public var flagUK:MovieClip;
public var flagUS:MovieClip;
public var rabbidMC:MovieClip;
public var flagGER:MovieClip;
public var flagSWE:MovieClip;
public var flagESP:MovieClip;
public var flagITA:MovieClip;
public var flagNED:MovieClip;
public var flagAUT:MovieClip;
}
}//package GAME_08_fla
Section 213
//soundBox_4 (GAME_08_fla.soundBox_4)
package GAME_08_fla {
import flash.display.*;
public dynamic class soundBox_4 extends MovieClip {
public function soundBox_4(){
addFrameScript(0, frame1, 2, frame3, 3, frame4, 4, frame5, 5, frame6, 6, frame7, 7, frame8, 9, frame10, 10, frame11, 14, frame15, 19, frame20, 20, frame21, 21, frame22, 22, frame23, 29, frame30, 30, frame31);
}
public function victory(){
gotoRangeRandom(20, 4);
}
function frame10(){
gotoAndStop(2);
}
function frame3(){
gotoAndStop(2);
}
function frame6(){
gotoAndStop(2);
}
function frame7(){
gotoAndStop(2);
}
function frame1(){
stop();
}
function frame22(){
gotoAndStop(2);
}
function frame23(){
gotoAndStop(2);
}
function frame4(){
gotoAndStop(2);
}
function frame5(){
gotoAndStop(2);
}
function frame21(){
gotoAndStop(2);
}
function frame8(){
gotoAndStop(2);
}
function frame15(){
gotoAndStop(2);
}
function frame30(){
gotoAndStop(2);
}
function frame20(){
gotoAndStop(2);
}
public function shortScream(){
gotoAndStop(15);
}
function frame11(){
gotoAndStop(2);
}
function frame31(){
gotoAndStop(2);
}
public function explode(){
gotoRangeRandom(30, 2);
}
public function throwTP(){
gotoRangeRandom(3, 6);
}
public function scream(){
gotoRangeRandom(10, 2);
}
public function gotoRangeRandom(_arg1:uint, _arg2:uint){
gotoAndStop((_arg1 + uint((Math.random() * _arg2))));
}
}
}//package GAME_08_fla
Section 214
//Symbol1_97 (GAME_08_fla.Symbol1_97)
package GAME_08_fla {
import flash.display.*;
import flash.utils.*;
import flash.geom.*;
import flash.events.*;
import flash.text.*;
import flash.net.*;
import adobe.utils.*;
import flash.accessibility.*;
import flash.errors.*;
import flash.external.*;
import flash.filters.*;
import flash.media.*;
import flash.printing.*;
import flash.system.*;
import flash.ui.*;
import flash.xml.*;
public dynamic class Symbol1_97 extends MovieClip {
public function Symbol1_97(){
addFrameScript(0, frame1);
}
function frame1(){
MovieClip(parent.parent).buttonize(MovieClip(parent).poUS);
MovieClip(parent.parent).crampText(MovieClip(parent).bText, MovieClip(parent.parent).langXML.preorder);
MovieClip(parent).bText.mouseEnabled = false;
trace("AAAAAAAAAAAAAA");
}
}
}//package GAME_08_fla
Section 215
//Symbol1copy_104 (GAME_08_fla.Symbol1copy_104)
package GAME_08_fla {
import flash.display.*;
import flash.utils.*;
import flash.geom.*;
import flash.events.*;
import flash.text.*;
import flash.net.*;
import adobe.utils.*;
import flash.accessibility.*;
import flash.errors.*;
import flash.external.*;
import flash.filters.*;
import flash.media.*;
import flash.printing.*;
import flash.system.*;
import flash.ui.*;
import flash.xml.*;
public dynamic class Symbol1copy_104 extends MovieClip {
public function Symbol1copy_104(){
addFrameScript(0, frame1);
}
function frame1(){
MovieClip(parent.parent).buttonize(MovieClip(parent).btn);
MovieClip(parent.parent).crampText(MovieClip(parent).btn.bText, MovieClip(parent.parent).langXML.visit);
MovieClip(parent).btn.bText.mouseEnabled = false;
trace("AAAAAAAAAAAAAA");
}
}
}//package GAME_08_fla
Section 216
//Color (wumedia.parsers.swf.Color)
package wumedia.parsers.swf {
public class Color {
public var b:uint;
public var a:uint;
public var r:uint;
public var g:uint;
public function Color(_arg1:Data, _arg2:Boolean){
r = _arg1.readUnsignedByte();
g = _arg1.readUnsignedByte();
b = _arg1.readUnsignedByte();
if (_arg2){
a = _arg1.readUnsignedByte();
} else {
a = 0xFF;
};
}
public function get color():uint{
return ((((r << 16) | (g << 8)) | b));
}
public function toString():String{
return (value.toString(16));
}
public function get value():uint{
return (((((a << 24) | (r << 16)) | (g << 8)) | b));
}
public function get alpha():Number{
return ((a / 0xFF));
}
}
}//package wumedia.parsers.swf
Section 217
//Data (wumedia.parsers.swf.Data)
package wumedia.parsers.swf {
import flash.utils.*;
import flash.geom.*;
public class Data implements IDataInput {
protected var _data:ByteArray;
protected var _bitPos:int;
protected var _bitBuff:int;
public function Data(_arg1:ByteArray){
_data = _arg1;
_data.endian = Endian.LITTLE_ENDIAN;
synchBits();
}
public function readBytes(_arg1:ByteArray, _arg2:uint=0, _arg3:uint=0):void{
synchBits();
_data.readBytes(_arg1, _arg2, _arg3);
}
public function readShort():int{
synchBits();
return (_data.readShort());
}
public function readDouble():Number{
var _local1:ByteArray;
var _local2:ByteArray;
_local1 = new ByteArray();
_local2 = new ByteArray();
_data.readBytes(_local1, 0, 8);
_local2.length = 8;
_local2[0] = _local1[3];
_local2[1] = _local1[2];
_local2[2] = _local1[1];
_local2[3] = _local1[0];
_local2[4] = _local1[7];
_local2[5] = _local1[6];
_local2[6] = _local1[5];
_local2[7] = _local1[4];
_local2.position = 0;
return (_local2.readDouble());
}
public function readUnsignedShort():uint{
synchBits();
return (_data.readUnsignedShort());
}
public function readRect():Rectangle{
var _local1:uint;
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
_local1 = readUBits(5);
_local2 = (readSBits(_local1) * 0.05);
_local3 = (readSBits(_local1) * 0.05);
_local4 = (readSBits(_local1) * 0.05);
_local5 = (readSBits(_local1) * 0.05);
synchBits();
return (new Rectangle(_local2, _local4, (_local3 - _local2), (_local5 - _local4)));
}
public function get endian():String{
return (_data.endian);
}
public function get bytesAvailable():uint{
return (_data.bytesAvailable);
}
public function readSBits(_arg1:uint):int{
var _local2:int;
_local2 = readUBits(_arg1);
if ((_local2 & (1 << (_arg1 - 1))) != 0){
_local2 = (_local2 | (-1 << _arg1));
};
return (_local2);
}
public function readUBits(_arg1:uint):uint{
var _local2:int;
var _local3:int;
var _local4:int;
if (_arg1 == 0){
return (0);
};
_local2 = _arg1;
_local3 = 0;
if (_bitPos == 0){
_bitBuff = _data.readUnsignedByte();
_bitPos = 8;
};
while (true) {
_local4 = (_local2 - _bitPos);
if (_local4 > 0){
_local3 = (_local3 | (_bitBuff << _local4));
_local2 = (_local2 - _bitPos);
_bitBuff = _data.readUnsignedByte();
_bitPos = 8;
} else {
_local3 = (_local3 | (_bitBuff >> -(_local4)));
_bitPos = (_bitPos - _local2);
_bitBuff = (_bitBuff & (0xFF >> (8 - _bitPos)));
break;
};
};
return (_local3);
}
public function get position():int{
return (_data.position);
}
public function get data():ByteArray{
return (_data);
}
public function readUTF():String{
synchBits();
return (_data.readUTF());
}
public function set endian(_arg1:String):void{
_data.endian = _arg1;
}
public function readBoolean():Boolean{
synchBits();
return (_data.readBoolean());
}
public function readByte():int{
synchBits();
return (readByte());
}
public function readUnsignedInt():uint{
synchBits();
return (_data.readUnsignedInt());
}
public function readString():String{
var _local1:String;
var _local2:uint;
_local1 = "";
while ((_local2 = readUnsignedByte()) != 0) {
_local1 = (_local1 + String.fromCharCode(_local2));
};
return (_local1);
}
public function readUTFBytes(_arg1:uint):String{
synchBits();
return (_data.readUTFBytes(_arg1));
}
public function get objectEncoding():uint{
return (_data.objectEncoding);
}
public function set position(_arg1:int):void{
_data.position = _arg1;
}
public function synchBits():void{
_bitBuff = 0;
_bitPos = 0;
}
public function set data(_arg1:ByteArray):void{
_data = _arg1;
synchBits();
}
public function readUnsignedByte():uint{
synchBits();
return (_data.readUnsignedByte());
}
public function set objectEncoding(_arg1:uint):void{
_data.objectEncoding = _arg1;
}
public function readFloat():Number{
synchBits();
return (_data.readFloat());
}
public function readMultiByte(_arg1:uint, _arg2:String):String{
synchBits();
return (_data.readMultiByte(_arg1, _arg2));
}
public function readObject(){
synchBits();
return (_data.readObject());
}
public function readMatrix():Matrix{
var _local1:Number;
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:uint;
synchBits();
if (readUBits(1) == 1){
_local7 = readUBits(5);
_local1 = (readSBits(_local7) / 65536);
_local2 = (readSBits(_local7) / 65536);
} else {
_local1 = 1;
_local2 = 1;
};
if (readUBits(1) == 1){
_local7 = readUBits(5);
_local3 = (readSBits(_local7) / 65536);
_local4 = (readSBits(_local7) / 65536);
} else {
_local3 = 0;
_local4 = 0;
};
_local7 = readUBits(5);
_local5 = (readSBits(_local7) * 0.05);
_local6 = (readSBits(_local7) * 0.05);
return (new Matrix(_local1, _local3, _local4, _local2, _local5, _local6));
}
public function readInt():int{
synchBits();
return (_data.readInt());
}
public function get length():uint{
return (_data.length);
}
}
}//package wumedia.parsers.swf
Section 218
//Edge (wumedia.parsers.swf.Edge)
package wumedia.parsers.swf {
public class Edge {
public var sx:int;
public var sy:int;
public var cx:int;
public var cy:int;
public var x:int;
public var y:int;
public var type:uint;
public static const LINE:uint = 1;
public static const CURVE:uint = 0;
public function Edge(_arg1:uint, _arg2:Data, _arg3:int=0, _arg4:int=0){
this.type = _arg1;
if (_arg2){
sx = _arg3;
sy = _arg4;
if (_arg1 == CURVE){
parseCurve(_arg2);
} else {
parseLine(_arg2);
};
};
}
public function reverse():Edge{
var _local1:Edge;
_local1 = new Edge(type, null);
_local1.x = sx;
_local1.y = sy;
_local1.cx = cx;
_local1.cy = cy;
_local1.sx = x;
_local1.sy = y;
return (_local1);
}
public function apply(_arg1, _arg2:Number=1, _arg3:Number=0, _arg4:Number=0):void{
if (type == CURVE){
var _local5 = _arg1;
_local5["curveTo"](((cx * _arg2) + _arg3), ((cy * _arg2) + _arg4), ((x * _arg2) + _arg3), ((y * _arg2) + _arg4));
} else {
_local5 = _arg1;
_local5["lineTo"](((x * _arg2) + _arg3), ((y * _arg2) + _arg4));
};
}
private function parseCurve(_arg1:Data):void{
var _local2:uint;
_local2 = (_arg1.readUBits(4) + 2);
cx = (_arg1.readSBits(_local2) + sx);
cy = (_arg1.readSBits(_local2) + sy);
x = (_arg1.readSBits(_local2) + cx);
y = (_arg1.readSBits(_local2) + cy);
}
private function parseLine(_arg1:Data):void{
var _local2:uint;
var _local3:Boolean;
var _local4:Boolean;
_local2 = (_arg1.readUBits(4) + 2);
_local3 = (_arg1.readUBits(1) == 1);
if (_local3){
x = (_arg1.readSBits(_local2) + sx);
y = (_arg1.readSBits(_local2) + sy);
} else {
_local4 = (_arg1.readUBits(1) == 1);
if (_local4){
x = sx;
y = (_arg1.readSBits(_local2) + sy);
} else {
x = (_arg1.readSBits(_local2) + sx);
y = sy;
};
};
}
}
}//package wumedia.parsers.swf
Section 219
//FillStyle (wumedia.parsers.swf.FillStyle)
package wumedia.parsers.swf {
import flash.display.*;
import flash.geom.*;
public class FillStyle {
private var _method:String;
private var _fillMatrix:Matrix;
private var _solidColor:Color;
public var type:String;
private var _arguments:Array;
public function FillStyle(_arg1:Data, _arg2:Boolean){
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:Array;
var _local7:Array;
var _local8:uint;
super();
_local4 = _arg1.readUnsignedByte();
if (_local4 == 0){
_solidColor = new Color(_arg1, _arg2);
_method = "beginFill";
_arguments = [_solidColor.color, _solidColor.alpha];
type = "FS";
} else {
if ((((((_local4 == 16)) || ((_local4 == 18)))) || ((_local4 == 19)))){
_fillMatrix = _arg1.readMatrix();
_local5 = _arg1.readUnsignedByte();
_local6 = new Array(_local5);
_local7 = new Array(_local5);
_local3 = 0;
while (_local3 < _local5) {
_local6[_local3] = _arg1.readUnsignedByte();
_local7[_local3] = new Color(_arg1, _arg2);
_local3++;
};
if (_local4 == 16){
_arguments = [GradientType.LINEAR];
} else {
if (_local4 == 18){
_arguments = [GradientType.RADIAL];
} else {
_arguments = [GradientType.RADIAL];
};
};
_arguments = _arguments.concat([_local7.map(mapColors), _local7.map(mapAlphas), _local6]);
_method = "beginGradientFill";
type = "FG";
} else {
if ((((((((_local4 == 64)) || ((_local4 == 65)))) || ((_local4 == 66)))) || ((_local4 == 67)))){
_local8 = _arg1.readUnsignedShort();
_fillMatrix = _arg1.readMatrix();
_method = "beginBitmapFill";
type = "FB";
} else {
type = "FS";
_method = "beginFill";
_arguments = [0xFFFFFF];
};
};
};
}
public function get method(){
return (_method);
}
private function mapColors(_arg1:Color, ... _args):uint{
return (_arg1.color);
}
private function mapAlphas(_arg1:Color, ... _args):uint{
return (_arg1.alpha);
}
public function apply(_arg1, _arg2:Number=1, _arg3:Number=0, _arg4:Number=0):void{
var mat:Matrix;
var graphics = _arg1;
var scale = _arg2;
var offsetX = _arg3;
var offsetY = _arg4;
if (graphics["hasOwnProperty"](_method)){
if (type == "FS"){
graphics[_method].apply(null, _arguments);
} else {
mat = _fillMatrix.clone();
mat.scale(scale, scale);
mat.translate(offsetX, offsetY);
graphics[_method].apply(null, _arguments.concat(mat));
};
} else {
if (graphics["hasOwnProperty"]("beginFill")){
if (type == "FG"){
try {
var _local6 = graphics;
_local6["beginFill"](_arguments[1][0]);
} catch(err:Error) {
var _local7 = graphics;
_local7["beginFill"](0);
};
} else {
_local6 = graphics;
_local6["beginFill"](0);
};
};
};
}
}
}//package wumedia.parsers.swf
Section 220
//LineStyle (wumedia.parsers.swf.LineStyle)
package wumedia.parsers.swf {
import flash.display.*;
public class LineStyle {
public var width:Number;
private var _flags:uint;
public var type:uint;
public var jointStyle:String;
public var endCaps:String;
public var color:Color;
public var startCaps:String;
public var miterLimit:Number;
public var noClose:Boolean;
public static const TYPE_1:uint = 0;
public static const TYPE_2:uint = 1;
public function LineStyle(_arg1:uint, _arg2:Data, _arg3:Boolean=true){
this.type = _arg1;
if (_arg2){
if (_arg1 == TYPE_1){
parseStyle1(_arg2, _arg3);
} else {
parseStyle2(_arg2, _arg3);
};
};
}
public function get noVScale():Boolean{
return (!(((_flags & 2) == 0)));
}
public function get pixelHinting():Boolean{
return (!(((_flags & 1) == 0)));
}
public function apply(_arg1):void{
if (_arg1["hasOwnProperty"]("lineStyle")){
if (color){
var _local2 = _arg1;
_local2["lineStyle"](width, color.color, color.alpha);
} else {
_local2 = _arg1;
_local2["lineStyle"]();
};
};
}
public function get noHScale():Boolean{
return (!(((_flags & 4) == 0)));
}
private function parseStyle1(_arg1:Data, _arg2:Boolean=true):void{
width = (_arg1.readUnsignedShort() * 0.05);
color = new Color(_arg1, _arg2);
}
private function parseStyle2(_arg1:Data, _arg2:Boolean=true):void{
var _local3:uint;
width = (_arg1.readUnsignedShort() * 0.05);
_local3 = _arg1.readUBits(2);
if (_local3 == 0){
startCaps = CapsStyle.ROUND;
} else {
if (_local3 == 1){
startCaps = CapsStyle.NONE;
} else {
startCaps = CapsStyle.SQUARE;
};
};
_local3 = _arg1.readUBits(2);
if (_local3 == 0){
jointStyle = JointStyle.ROUND;
} else {
if (_local3 == 1){
jointStyle = JointStyle.BEVEL;
} else {
jointStyle = JointStyle.MITER;
};
};
_flags = _arg1.readUBits(4);
_arg1.readUBits(5);
noClose = (_arg1.readUBits(1) == 1);
_local3 = _arg1.readUBits(2);
if (_local3 == 0){
endCaps = CapsStyle.ROUND;
} else {
if (_local3 == 1){
endCaps = CapsStyle.NONE;
} else {
endCaps = CapsStyle.SQUARE;
};
};
if (jointStyle == JointStyle.MITER){
miterLimit = (_arg1.readUnsignedShort() * 0.05);
};
if (hasFill){
} else {
color = new Color(_arg1, _arg2);
};
}
public function get hasFill():Boolean{
return (!(((_flags & 8) == 0)));
}
}
}//package wumedia.parsers.swf
Section 221
//ShapeRecord (wumedia.parsers.swf.ShapeRecord)
package wumedia.parsers.swf {
import flash.display.*;
import flash.geom.*;
public class ShapeRecord {
private var _hasAlpha:Boolean;
private var _fillBits:uint;
private var _fill1Index:uint;
private var _fill0:Array;
private var _fills:Array;
private var _bounds:Rectangle;
private var _elements:Array;
private var _hasExtendedFill:Boolean;
private var _hasStyle:Boolean;
private var _fill1:Array;
private var _hasStateNewStyle:Boolean;
private var _fill0Index:uint;
private var _tagType:uint;
private var _lineBits:uint;
private static var _shape:Shape = new Shape();
public function ShapeRecord(_arg1:Data, _arg2:uint){
_tagType = _arg2;
_hasStyle = (((((((_tagType == TagTypes.DEFINE_SHAPE)) || ((_tagType == TagTypes.DEFINE_SHAPE2)))) || ((_tagType == TagTypes.DEFINE_SHAPE3)))) || ((_tagType == TagTypes.DEFINE_SHAPE4)));
_hasAlpha = (((_tagType == TagTypes.DEFINE_SHAPE3)) || ((_tagType == TagTypes.DEFINE_SHAPE4)));
_hasExtendedFill = (((((_tagType == TagTypes.DEFINE_SHAPE2)) || ((_tagType == TagTypes.DEFINE_SHAPE3)))) || ((_tagType == TagTypes.DEFINE_SHAPE4)));
_hasStateNewStyle = (((((_tagType == TagTypes.DEFINE_SHAPE2)) || ((_tagType == TagTypes.DEFINE_SHAPE3)))) || ((_tagType == TagTypes.DEFINE_SHAPE4)));
parse(_arg1);
if (_elements.length > 0){
calculateBounds();
} else {
_bounds = new Rectangle(0, 0, 0, 0);
};
}
private function calculateBounds():void{
var _local1:Graphics;
_local1 = _shape.graphics;
_local1.clear();
_local1.beginFill(0);
drawShape(_local1, this);
_local1.endFill();
_bounds = _shape.getRect(_shape);
}
public function get bounds():Rectangle{
return (_bounds);
}
private function queueEdges():void{
if (_fill0){
_fills[_fill0Index] = _fills[_fill0Index].concat(_fill0);
};
if (_fill1){
_fills[_fill1Index] = _fills[_fill1Index].concat(_fill1);
};
}
private function sortEdges(_arg1:Array):Array{
var _local2:int;
var _local3:int;
var _local4:Array;
var _local5:Edge;
_local4 = [_arg1.shift()];
while (_arg1.length > 0) {
_local5 = _arg1.pop();
_local4.push(_local5);
_local3 = _arg1.length;
while (--_local3 > -1) {
_local2 = _arg1.length;
while (--_local2 > -1) {
if ((((_local5.x == _arg1[_local2].sx)) && ((_local5.y == _arg1[_local2].sy)))){
_local5 = _arg1.splice(_local2, 1)[0];
_local4.push(_local5);
continue;
};
};
};
};
return (_local4);
}
private function saveEdges():void{
var _local1:int;
var _local2:int;
queueEdges();
_local2 = _fills.length;
_local1 = -1;
while (++_local1 < _local2) {
_fills[_local1] = sortEdges(_fills[_local1]);
_elements = _elements.concat(_fills[_local1]);
};
_fills = new Array();
}
public function get elements():Array{
return (_elements);
}
private function parse(_arg1:Data):void{
var _local2:Boolean;
var _local3:Boolean;
var _local4:Boolean;
var _local5:Boolean;
var _local6:Boolean;
var _local7:uint;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:uint;
var _local12:int;
var _local13:int;
var _local14:Edge;
var _local15:uint;
_local12 = 0;
_local13 = 0;
_elements = new Array();
_fills = new Array();
_arg1.synchBits();
if (_hasStyle){
parseStyles(_arg1);
_arg1.synchBits();
} else {
_fills = [[]];
_fill0 = [];
_fill0Index = 0;
};
_fillBits = _arg1.readUBits(4);
_lineBits = _arg1.readUBits(4);
while (true) {
_local15 = _arg1.readUBits(1);
if (_local15 == 1){
_local14 = new Edge(((_arg1.readUBits(1) == 0)) ? Edge.CURVE : Edge.LINE, _arg1, _local12, _local13);
if (_fill0){
_fill0.push(_local14.reverse());
};
if (_fill1){
_fill1.push(_local14);
};
_local12 = _local14.x;
_local13 = _local14.y;
} else {
_local11 = _arg1.readUBits(5);
if (_local11 == 0){
break;
};
_local2 = !(((_local11 & 1) == 0));
_local3 = !(((_local11 & 2) == 0));
_local4 = !(((_local11 & 4) == 0));
_local5 = !(((_local11 & 8) == 0));
_local6 = !(((_local11 & 16) == 0));
if (_local2){
_local7 = _arg1.readUBits(5);
_local12 = _arg1.readSBits(_local7);
_local13 = _arg1.readSBits(_local7);
};
if (_local3){
_local8 = _arg1.readUBits(_fillBits);
};
if (_local4){
_local9 = _arg1.readUBits(_fillBits);
};
if (_local5){
_local10 = _arg1.readUBits(_lineBits);
};
if (_hasStyle){
queueEdges();
_fill0Index = (_local8 - 1);
if ((((_local8 > 0)) && (_fills[_fill0Index]))){
_fill0 = [];
} else {
_fill0 = null;
};
_fill1Index = (_local9 - 1);
if ((((_local9 > 0)) && (_fills[_fill1Index]))){
_fill1 = [];
} else {
_fill1 = null;
};
};
if (((_hasStateNewStyle) && (_local6))){
parseStyles(_arg1);
_fillBits = _arg1.readUBits(4);
_lineBits = _arg1.readUBits(4);
};
};
};
saveEdges();
}
private function parseStyles(_arg1:Data):void{
var _local2:int;
var _local3:int;
saveEdges();
_local3 = _arg1.readUnsignedByte();
if (((_hasExtendedFill) && ((_local3 == 0xFF)))){
_local3 = _arg1.readUnsignedShort();
};
_local2 = 0;
while (_local2 < _local3) {
_fills.push([new FillStyle(_arg1, _hasAlpha)]);
_local2++;
};
_local3 = _arg1.readUnsignedByte();
if (_local3 == 0xFF){
_local3 = _arg1.readUnsignedShort();
};
_local2 = 0;
while (_local2 < _local3) {
new LineStyle(((_tagType == TagTypes.DEFINE_SHAPE4)) ? LineStyle.TYPE_2 : LineStyle.TYPE_1, _arg1, _hasAlpha);
_local2++;
};
}
public static function getPoints(_arg1:ShapeRecord, _arg2:Number=1):Array{
var _local3:Array;
var _local4:Array;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:Edge;
_local3 = new Array();
_local4 = _arg1._elements;
_local5 = -1;
_local6 = _local4.length;
_local7 = 0;
_local8 = 0;
_arg2 = (_arg2 * 0.05);
while (++_local5 < _local6) {
if ((_local4[_local5] is Edge)){
_local9 = _local4[_local5];
_local3.push(new Point((_local9.x * _arg2), (_local9.y * _arg2)));
_local7 = _local9.x;
_local8 = _local9.y;
};
};
return (_local3);
}
public static function drawShape(_arg1, _arg2:ShapeRecord, _arg3:Number=1, _arg4:Number=0, _arg5:Number=0):void{
var _local6:Array;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:Edge;
_local6 = _arg2._elements;
_local7 = -1;
_local8 = _local6.length;
_local9 = 0;
_local10 = 0;
_arg3 = (_arg3 * 0.05);
while (++_local7 < _local8) {
if ((_local6[_local7] is Edge)){
_local11 = _local6[_local7];
if (((!((_local9 == _local11.sx))) || (!((_local10 == _local11.sy))))){
var _local12 = _arg1;
_local12["moveTo"]((_arg4 + (_local11.sx * _arg3)), (_arg5 + (_local11.sy * _arg3)));
};
_local11.apply(_arg1, _arg3, _arg4, _arg5);
_local9 = _local11.x;
_local10 = _local11.y;
} else {
if ((_local6[_local7] is FillStyle)){
(_local6[_local7] as FillStyle).apply(_arg1, _arg3, _arg4, _arg5);
};
};
};
}
}
}//package wumedia.parsers.swf
Section 222
//SWFParser (wumedia.parsers.swf.SWFParser)
package wumedia.parsers.swf {
import flash.utils.*;
import flash.geom.*;
public class SWFParser {
protected var _size:uint;
protected var _rect:Rectangle;
protected var _frames:uint;
protected var _data:Data;
protected var _frameRate:uint;
protected var _version:uint;
public function SWFParser(_arg1:ByteArray){
var _local2:String;
var _local3:ByteArray;
super();
if (_arg1){
_arg1.position = 0;
_local2 = _arg1.readUTFBytes(3);
_version = _arg1.readUnsignedByte();
_size = _arg1.readUnsignedInt();
_data = new Data(_arg1);
if (_local2 == "CWS"){
_local3 = new ByteArray();
_data.readBytes(_local3);
_local3.position = 0;
_local3.uncompress();
_local3.position = 0;
_data = new Data(_local3);
};
_rect = _data.readRect();
_frameRate = (_data.readUnsignedShort() >> 8);
_frames = _data.readShort();
};
}
public function get data():Data{
return (_data);
}
public function get rect():Rectangle{
return (_rect);
}
public function get size():uint{
return (_size);
}
public function parseTags(_arg1, _arg2:Boolean, _arg3:uint=0, _arg4:Data=null):Array{
var _local5:int;
var _local6:uint;
var _local7:uint;
var _local8:uint;
var _local9:Array;
var _local10:Tag;
var _local11:ByteArray;
if (_arg4 == null){
_arg4 = _data;
};
_local5 = -1;
_local8 = _arg4.position;
_local9 = [];
while (((_arg4.bytesAvailable) && (!((_local5 == _arg3))))) {
_local5 = _arg4.readUnsignedShort();
_local6 = (_local5 & 63);
if (_local6 == 63){
_local6 = _arg4.readUnsignedInt();
};
_local5 = (_local5 >> 6);
_local7 = _arg4.position;
if ((((_local5 == _arg1)) || (((_arg1 is Array)) ? !(((_arg1 as Array).indexOf(_local5) == -1)) : false))){
_local10 = new Tag(_local5, _arg4.position, _local6);
if (_arg2){
_local11 = new ByteArray();
_arg4.readBytes(_local11, 0, _local10.length);
_local11.position = 0;
_local10.data = new Data(_local11);
};
_local9.push(_local10);
};
if (_arg4.position == _local7){
_arg4.position = (_arg4.position + _local6);
};
};
_arg4.position = _local8;
return (_local9);
}
public function get frameRate():uint{
return (_frameRate);
}
public function get frames():uint{
return (_frames);
}
public function get ver():uint{
return (_version);
}
}
}//package wumedia.parsers.swf
Section 223
//Tag (wumedia.parsers.swf.Tag)
package wumedia.parsers.swf {
public class Tag {
public var data:Data;
public var length:uint;
public var position:uint;
public var type:int;
public function Tag(_arg1:uint=0, _arg2:uint=0, _arg3:uint=0){
this.type = _arg1;
this.position = _arg2;
this.length = _arg3;
}
}
}//package wumedia.parsers.swf
Section 224
//TagTypes (wumedia.parsers.swf.TagTypes)
package wumedia.parsers.swf {
public class TagTypes {
public static const SYMBOL_CLASS:uint = 76;
public static const DEFINE_BITS:uint = 6;
public static const SCRIPT_LIMITS:uint = 65;
public static const CSM_TEXT_SETTINGS:uint = 74;
public static const DEFINE_FONT_INFO:uint = 13;
public static const DEFINE_MORPH_SHAPE2:uint = 84;
public static const JPEG_TABLES:uint = 8;
public static const DEFINE_TEXT2:uint = 33;
public static const SOUND_STREAM_HEAD2:uint = 45;
public static const METADATA:uint = 77;
public static const DEFINE_TEXT:uint = 11;
public static const DEFINE_BUTTON:uint = 7;
public static const REMNOVE_OBJECT2:uint = 28;
public static const DEFINE_FONT2:uint = 48;
public static const DEFINE_FONT3:uint = 75;
public static const DEFINE_FONT4:uint = 91;
public static const DEFINE_BUTTON_CX_FORM:uint = 23;
public static const SOUND_STREAM_BLOCK:uint = 19;
public static const SET_BACKGROUND_COLOR:uint = 9;
public static const DEFINE_FONT:uint = 10;
public static const DEFINE_BITS_JPEG2:uint = 21;
public static const DEFINE_BITS_JPEG4:uint = 90;
public static const DEFINE_FONT_INFO2:uint = 62;
public static const REMOVE_OBJECT:uint = 5;
public static const DEFINE_BITS_JPEG3:uint = 35;
public static const DEFINE_FONT_ALIGN_ZONES:uint = 73;
public static const FRAME_LABEL:uint = 43;
public static const DO_ACTION:uint = 12;
public static const DEFINE_SOUND:uint = 14;
public static const EXPORT_ASSETS:uint = 56;
public static const ENABLE_DEBUGGER2:uint = 64;
public static const PLACE_OBJECT2:uint = 26;
public static const ENABLE_DEBUGGER:uint = 58;
public static const DEFINE_BITS_LOSSLESS2:uint = 36;
public static const IMPORT_ASSETS2:uint = 71;
public static const SHOW_FRAME:uint = 1;
public static const DO_ABC:uint = 82;
public static const DO_INIT_ACTION:uint = 59;
public static const PLACE_OBJECT3:uint = 70;
public static const PLACE_OBJECT:uint = 4;
public static const DEFINE_BINARY_DATA:uint = 87;
public static const SET_TAB_INDEX:uint = 66;
public static const DEFINE_BUTTON_SOUND:uint = 17;
public static const PROTECT:uint = 24;
public static const START_SOUND:uint = 15;
public static const END:uint = 0;
public static const DEFINE_BUTTON2:uint = 34;
public static const DEFINE_EDIT_TEXT:uint = 37;
public static const START_SOUND2:uint = 89;
public static const DEFINE_SCALIGN_GRID:uint = 78;
public static const DEFINE_SPRITE:uint = 39;
public static const IMOPRT_ASSETS:uint = 57;
public static const DEFINE_BITS_LOSSLESS:uint = 20;
public static const DEFINE_SHAPE2:uint = 22;
public static const DEFINE_SHAPE4:uint = 83;
public static const DEFINE_SHAPE3:uint = 32;
public static const VIDEO_STREAM:uint = 61;
public static const DEFINE_MORPH_SHAPE:uint = 46;
public static const DEFINE_VIDEO_STREAM:uint = 60;
public static const DEFINE_SCENE_AND_FRAME_LABEL_DATA:uint = 86;
public static const SOUND_STREAM_HEAD:uint = 18;
public static const DEFINE_FONT_NAME:uint = 88;
public static const FILE_ATTRIBUTES:uint = 69;
public static const DEFINE_SHAPE:uint = 2;
}
}//package wumedia.parsers.swf
Section 225
//VectorShapes (wumedia.vector.VectorShapes)
package wumedia.vector {
import wumedia.parsers.swf.*;
import flash.utils.*;
import flash.geom.*;
public class VectorShapes {
private static var _library:Object = new Object();
public function VectorShapes(){
throw (new Error((getQualifiedClassName(this) + " can not be instantiated")));
}
public static function draw(_arg1, _arg2:String, _arg3:Number=1, _arg4:Number=0, _arg5:Number=0):void{
if (_library[_arg2]){
ShapeRecord.drawShape(_arg1, _library[_arg2], _arg3, _arg4, _arg5);
} else {
trace((("ERROR: missing " + _arg2) + " vector"));
};
}
private static function getShapeFromPlaceTags(_arg1:SWFParser, _arg2:Array):Tag{
var lib:Array;
var swf = _arg1;
var placeTags = _arg2;
lib = swf.parseTags([TagTypes.DEFINE_SHAPE, TagTypes.DEFINE_SHAPE2, TagTypes.DEFINE_SHAPE3, TagTypes.DEFINE_SHAPE4], true).filter(function (_arg1:Tag, ... _args):Boolean{
var _local3:*;
_local3 = _arg1.data.readUnsignedShort();
_arg1.data.position = 0;
return (!((placeTags.indexOf(_local3) == -1)));
});
return (lib[0]);
}
private static function parsePlacetags(_arg1:Array):Array{
var _local2:Array;
var _local3:int;
var _local4:int;
var _local5:uint;
var _local6:Matrix;
var _local7:Data;
var _local8:uint;
var _local9:uint;
_local2 = [];
_local3 = -1;
_local4 = _arg1.length;
while (++_local3 < _local4) {
_local7 = _arg1[_local3].data;
_local8 = _arg1[_local3].type;
if (_local8 == TagTypes.PLACE_OBJECT){
_local5 = _local7.readUnsignedShort();
_local7.readUnsignedShort();
_local6 = _local7.readMatrix();
} else {
if (_local8 == TagTypes.PLACE_OBJECT2){
_local7.readUBits(8);
_local7.readUnsignedShort();
_local5 = _local7.readUnsignedShort();
_local6 = _local7.readMatrix();
} else {
if (_local8 == TagTypes.PLACE_OBJECT3){
_local9 = _local7.readUBits(16);
_local7.readUnsignedShort();
if (((((!(((_local9 & 8) == 0))) || (!(((_local9 & 16) == 0))))) || (!(((_local9 & 0x0200) == 0))))){
_local7.readString();
};
_local5 = _local7.readUnsignedShort();
_local6 = _local7.readMatrix();
} else {
_local5 = 0;
};
};
};
if (_local5 != 0){
_local2.push(_local5);
_local2.push(_local6);
};
};
return (_local2);
}
private static function parseClassIdTable(_arg1:SWFParser):Object{
var _local2:Object;
var _local3:Array;
var _local4:Data;
var _local5:uint;
var _local6:int;
var _local7:uint;
var _local8:String;
_local2 = {};
_local3 = _arg1.parseTags(TagTypes.SYMBOL_CLASS, true);
if (_local3.length != 1){
return (_local2);
};
_local4 = _local3[0].data;
_local5 = _local4.readUnsignedShort();
_local6 = -1;
while (++_local6 < _local5) {
_local7 = _local4.readUnsignedShort();
_local8 = _local4.readString();
_local2[_local7] = _local8;
};
return (_local2);
}
private static function shiftDataPosToShapeRecord(_arg1:Data, _arg2:uint):void{
_arg1.readUnsignedShort();
_arg1.readRect();
if (_arg2 == TagTypes.DEFINE_SHAPE4){
_arg1.readRect();
_arg1.readUBits(5);
_arg1.readUBits(1);
_arg1.readUBits(1);
_arg1.readUBits(1);
};
}
public static function extractFromLibrary(_arg1:ByteArray, _arg2:Array):void{
var swf:SWFParser;
var classes:Object;
var sprites:Array;
var i:int;
var l:int;
var placeTags:Array;
var defineShape:Tag;
var spriteId:uint;
var bytes = _arg1;
var ids = _arg2;
try {
swf = new SWFParser(bytes);
classes = parseClassIdTable(swf);
sprites = swf.parseTags([TagTypes.DEFINE_SPRITE], true).filter(function (_arg1:Tag, ... _args):Boolean{
var _local3:*;
_local3 = _arg1.data.readUnsignedShort();
_arg1.data.position = (_arg1.data.position - 2);
return (!((ids.indexOf(classes[_local3]) == -1)));
});
i = -1;
l = sprites.length;
while ((i = (i + 1)), (i + 1) < l) {
sprites[i].data.readUnsignedInt();
placeTags = parsePlacetags(swf.parseTags([TagTypes.PLACE_OBJECT, TagTypes.PLACE_OBJECT2, TagTypes.PLACE_OBJECT3], true, 1, sprites[i].data));
defineShape = getShapeFromPlaceTags(swf, placeTags);
if (defineShape){
sprites[i].data.position = 0;
spriteId = sprites[i].data.readUnsignedShort();
defineShape.data.position = 0;
shiftDataPosToShapeRecord(defineShape.data, defineShape.type);
if (!_library[classes[spriteId]]){
_library[classes[spriteId]] = new ShapeRecord(defineShape.data, defineShape.type);
} else {
trace((("WARNING: vector shape with id " + classes[spriteId]) + " already exists. skipping."));
};
};
};
} catch(err:Error) {
trace("**************************************************");
trace("** Error: unable to extract vectors from swf bytes");
trace(err.getStackTrace());
trace("**************************************************");
};
}
public static function extractFromStage(_arg1:ByteArray, _arg2:String):void{
var swf:SWFParser;
var placeTags:Array;
var defineShape:Tag;
var bytes = _arg1;
var id = _arg2;
try {
swf = new SWFParser(bytes);
placeTags = parsePlacetags(swf.parseTags([TagTypes.PLACE_OBJECT, TagTypes.PLACE_OBJECT2, TagTypes.PLACE_OBJECT3], true, 1));
defineShape = getShapeFromPlaceTags(swf, placeTags);
if (defineShape){
defineShape.data.position = 0;
shiftDataPosToShapeRecord(defineShape.data, defineShape.type);
if (!_library[id]){
_library[id] = new ShapeRecord(defineShape.data, defineShape.type);
} else {
trace((("WARNING: vector shape with id " + id) + " already exists, skipping."));
};
} else {
throw (new Error("no shapes found"));
};
} catch(err:Error) {
trace("**************************************************");
trace("** Error: unable to extract vectors from swf bytes");
trace(err.getStackTrace());
trace("**************************************************");
};
}
public static function getPoints(_arg1:String, _arg2:Number=1):Array{
if (_library[_arg1]){
return (ShapeRecord.getPoints(_library[_arg1], _arg2));
};
trace((("ERROR: missing " + _arg1) + " vector"));
return (null);
}
public static function get library():Object{
return (_library);
}
}
}//package wumedia.vector
Section 226
//level01 (level01)
package {
import flash.display.*;
public dynamic class level01 extends MovieClip {
public var FG:MovieClip;
}
}//package
Section 227
//level02 (level02)
package {
import flash.display.*;
public dynamic class level02 extends MovieClip {
public var FG:MovieClip;
public function level02(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 228
//level03 (level03)
package {
import flash.display.*;
public dynamic class level03 extends MovieClip {
public var FG:MovieClip;
public function level03(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 229
//level04 (level04)
package {
import flash.display.*;
public dynamic class level04 extends MovieClip {
public var FG:MovieClip;
public function level04(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 230
//level05 (level05)
package {
import flash.display.*;
public dynamic class level05 extends MovieClip {
public var FG:MovieClip;
public function level05(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 231
//level06 (level06)
package {
import flash.display.*;
public dynamic class level06 extends MovieClip {
public var FG:MovieClip;
public function level06(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 232
//level07 (level07)
package {
import flash.display.*;
public dynamic class level07 extends MovieClip {
public var FG:MovieClip;
public function level07(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 233
//level08 (level08)
package {
import flash.display.*;
public dynamic class level08 extends MovieClip {
public var FG:MovieClip;
public function level08(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 234
//level09 (level09)
package {
import flash.display.*;
public dynamic class level09 extends MovieClip {
public var FG:MovieClip;
public function level09(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 235
//level10 (level10)
package {
import flash.display.*;
public dynamic class level10 extends MovieClip {
public var FG:MovieClip;
public function level10(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 236
//level11 (level11)
package {
import flash.display.*;
public dynamic class level11 extends MovieClip {
public var FG:MovieClip;
public function level11(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 237
//level12 (level12)
package {
import flash.display.*;
public dynamic class level12 extends MovieClip {
public var FG:MovieClip;
public function level12(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 238
//level13 (level13)
package {
import flash.display.*;
public dynamic class level13 extends MovieClip {
public var FG:MovieClip;
public function level13(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 239
//level14 (level14)
package {
import flash.display.*;
public dynamic class level14 extends MovieClip {
public var FG:MovieClip;
public function level14(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 240
//level15 (level15)
package {
import flash.display.*;
public dynamic class level15 extends MovieClip {
public var FG:MovieClip;
public function level15(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 241
//level16 (level16)
package {
import flash.display.*;
public dynamic class level16 extends MovieClip {
public var FG:MovieClip;
public function level16(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 242
//level17 (level17)
package {
import flash.display.*;
public dynamic class level17 extends MovieClip {
public var FG:MovieClip;
public function level17(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 243
//level18 (level18)
package {
import flash.display.*;
public dynamic class level18 extends MovieClip {
public var FG:MovieClip;
public function level18(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 244
//props (props)
package {
import flash.display.*;
public dynamic class props extends MovieClip {
public var rabbid:MovieClip;
public var enemy:MovieClip;
public function props(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 245
//tpExplode (tpExplode)
package {
import flash.display.*;
public dynamic class tpExplode extends MovieClip {
public var str6:MovieClip;
public function tpExplode(){
addFrameScript(0, frame1, 34, frame35);
}
function frame1(){
gotoAndPlay(5);
}
function frame35(){
stop();
MovieClip(parent).removeChild(this);
}
}
}//package