STORY   LOOP   FURRY   PORN   GAMES
• C •   SERVICES [?] [R] RND   POPULAR
Archived flashes:
228064
/disc/ · /res/     /show/ · /fap/ · /gg/ · /swf/P0001 · P2560 · P5120

<div style="position:absolute;top:-99px;left:-99px;"><img src="http://swfchan.com:57475/91912115?noj=FRM91912115-27DC" width="1" height="1"></div>

face-touch.swf

This is the info page for
Flash #118817

(Click the ID number above for more basic data on this flash file.)


Text
<p align="left"><font face="Times New Roman" size="25" color="#ffffff" letterSpacing="2.000000" kerning="1">Loading...</font></p>

<p align="left"></p>

<p align="left"></p>

ActionScript [AS3]

Section 1
//BaseSquare (BaseClass.BaseSquare) package BaseClass { import flash.display.*; import flash.events.*; import UserdefinedClass.*; import Box2D.Dynamics.*; import Box2D.Common.Math.*; import flash.utils.*; public class BaseSquare extends MovieClip { public var power:int;// = 30 public var count:int;// = 0 public var state:String; public var kind:String; public var isMouse:Boolean;// = false public var corlorarr:Array; public var burstMC:Array; public var bd:b2Body; public var canhit;// = true public var G:int;// = 1 public var delaytime:Timer; public var R:Number;// = 18 public var particletime:Timer; public var face:MovieClip; public var hittime:int;// = 0 public var timecount:int; public var color:int; public var hitarr:Array; public var burstSP:Sprite; public function BaseSquare(){ state = new String(); corlorarr = new Array(0xFF3300, 0xFFCC00, 26316, 0x339900); super(); } public function Normal(){ state = "normal"; face.gotoAndStop("normal"); } public function Wait(){ state = "wait"; face.gotoAndStop("wait"); } public function rehitMC():MovieClip{ return ((this.getChildByName("hitmc") as MovieClip)); } public function destory(){ if (parent){ parent.removeChild(this); }; } public function burst(){ var temp:MovieClip; var wei:int; burstMC = new Array(); var filters_temp:Array = new Array(); var i:int; while (i < 5) { temp = new MovieClip(); temp.x = this.x; temp.y = this.y; temp.graphics.beginFill(corlorarr[color]); wei = MyMath.FrandRange(2, 12); temp.graphics.lineStyle(2); temp.graphics.moveTo(0, 0); temp.graphics.lineTo(wei, 0); temp.graphics.lineTo(wei, wei); temp.graphics.lineTo(0, wei); temp.graphics.lineTo(0, 0); temp.speedx = MyMath.FrandRange(-10, 10); temp.speedy = MyMath.FrandRange(10, 20); burstSP.addChild(temp); burstMC.push(temp); i++; }; timecount = 0; particletime = new Timer(30); particletime.start(); particletime.addEventListener(TimerEvent.TIMER, onsetburst); if (Box2dFactory.getInstance().tempmc == this){ Box2dFactory.getInstance().destroyMouse(); }; this.alpha = 0; rebody(); } public function reparticle(){ var len:int = burstMC.length; var i:int; while (i < len) { if (burstMC[i].parent){ burstSP.removeChild(burstMC[i]); }; i++; }; } public function addForce(x:int, y:int){ bd.ApplyForce(new b2Vec2((x * power), (y * power)), bd.GetWorldCenter()); } public function rebody(){ Box2dFactory.getInstance().world.DestroyBody(bd); } public function stopburst(){ particletime.stop(); particletime.removeEventListener(TimerEvent.TIMER, onsetburst); } public function onsetburst(e:TimerEvent):void{ var len:int = burstMC.length; if (particletime.currentCount == 30){ particletime.stop(); particletime.removeEventListener(TimerEvent.TIMER, onsetburst); reparticle(); return; }; var i:int; while (i < len) { burstMC[i].x = (burstMC[i].x + burstMC[i].speedx); burstMC[i].y = (burstMC[i].y - burstMC[i].speedy); burstMC[i].speedy = (burstMC[i].speedy - G); i++; }; timecount++; } public function Die(sp:Sprite){ canhit = false; state = "die"; face.gotoAndStop("die"); burstSP = sp; burst(); } public function restartburst(){ particletime.start(); particletime.addEventListener(TimerEvent.TIMER, onsetburst); } public function Move(){ state = "move"; face.gotoAndStop("move"); } } }//package BaseClass
Section 2
//BaseStage (BaseClass.BaseStage) package BaseClass { import Element.*; import flash.display.*; import flash.events.*; import caurina.transitions.*; import flash.geom.*; import UserdefinedClass.*; import Box2D.Common.Math.*; import Box2D.Collision.*; import flash.filters.*; public class BaseStage extends MovieClip { public var lv:int;// = 0 public var spaceT:int;// = 0 public var count:int;// = 0 public var world:Box2dFactory; public var hit:Sprite; public var combo:int;// = 0 public var square:Sprite; public var levelup:MovieClip; public var burst:Sprite; public var score:int;// = 0 public var standby2:Sprite; public var stageNUM:int; public var standby1:Sprite; public var upperpoint:Point; public var lowerpoint:Point; public var passscore:int;// = 0 public var background:Sprite; public var main:Main; public var comboMC:MovieClip; public var gametime:MyTime; public var FPS:int;// = 30 public var Maxcombo:int;// = 0 public var pausebool:Boolean;// = false public var hitcount:int;// = 0 public var allowsq:int; public var sqspace:Array; public var sqnum:int;// = 0 public var startcombo:Boolean;// = false public var mouseeffect:Sprite; public var game:Sprite; public function BaseStage(mainobj:Object){ lowerpoint = new Point(-100, -100); upperpoint = new Point(100, 100); sqspace = new Array([278, 150], [444, 150], [332, 142], [388, 142], [308, 196], [363, 196], [415, 196]); super(); main = (mainobj as Main); initgame(); } public function restartgame(){ addEventListener(Event.ENTER_FRAME, updata); addEventListener(MouseEvent.MOUSE_DOWN, onhit); addEventListener(Event.ENTER_FRAME, gameenterframe); gametime.restart(); } public function initgame(){ game = new Sprite(); background = new Sprite(); standby1 = new Sprite(); mouseeffect = new Sprite(); square = new Sprite(); burst = new Sprite(); hit = new Sprite(); standby2 = new Sprite(); comboMC = new ComboMC(); levelup = new Levelup(); addChild(game); game.addChild(background); game.addChild(standby1); game.addChild(mouseeffect); game.addChild(square); game.addChild(standby2); game.addChild(burst); game.addChild(hit); initworld(); initSound(); inititem(); initui(); loaddata(); } public function stopgame(){ Box2dFactory.getInstance().destroyMouse(); removeEventListener(Event.ENTER_FRAME, updata); removeEventListener(MouseEvent.MOUSE_DOWN, onhit); removeEventListener(Event.ENTER_FRAME, gameenterframe); gametime.pausetime(); } public function removeMouseMC(){ var tempmc:MovieClip; var len:int = mouseeffect.numChildren; if (!len){ return; }; var temp:Array = new Array(); var filters_temp:Array = new Array(); var i:int; while (i < len) { tempmc = (mouseeffect.getChildAt(i) as MovieClip); if (tempmc.alpha > 0){ tempmc.alpha = (tempmc.alpha - 0.05); }; filters_temp = new Array(); filters_temp.push(new BlurFilter(4, 4, tempmc.time)); tempmc.time = (tempmc.time + 1); tempmc.filters = filters_temp; i++; }; i = 0; while (i < len) { tempmc = (mouseeffect.getChildAt(0) as MovieClip); if (tempmc.alpha <= 0){ mouseeffect.removeChild(tempmc); }; i++; }; } public function gameenterframe(e:Event):void{ var len:int; var temparr:Array = new Array(); var j:int; var i:int; while (i < 16) { temparr = ergodHit(MyData.getInstance().Faceobj.ground[i]); len = temparr.length; if (len){ j = 0; while (j < len) { (temparr[j] as BaseSquare).Die(burst); j++; }; score = (score + gradescore(len)); main.setScore(score); setcombo(); }; i++; }; count++; if ((count % spaceT) == 0){ count = 0; buildsquare(); }; starthitcount(); removeMouseMC(); if (score >= passscore){ lvup(); }; } public function initworld(){ world = Box2dFactory.getInstance(); var aabb:b2AABB = new b2AABB(); aabb.lowerBound.Set(lowerpoint.x, lowerpoint.y); aabb.upperBound.Set(upperpoint.x, upperpoint.y); world.createWorld(new b2Vec2(0, 2), aabb); } public function buildsquare(){ var _sqnum:int; var totalsq:int = squarenum(); if (totalsq == 20){ return; }; if ((totalsq + sqnum) <= 20){ _sqnum = sqnum; } else { _sqnum = (20 - totalsq); }; var temparr:Array = MyMath.ranRangeground(0, 5, _sqnum); var len:int = temparr.length; var i:int; while (i < len) { newsquare(square, sqspace[temparr[i]][0], sqspace[temparr[i]][1], 2, MyMath.randRange(3)); i++; }; } public function loaddata(){ } public function startlistener(){ addEventListener(Event.ENTER_FRAME, updata); addEventListener(MouseEvent.MOUSE_DOWN, onhit); addEventListener(Event.ENTER_FRAME, gameenterframe); gametime.starttime(); } public function resquare():MovieClip{ var tempmc:MovieClip; var i:int; if (!square.hitTestPoint(mouseX, mouseY, true)){ return (null); }; var len:int = square.numChildren; var hitbool:Boolean; var j:int; while (j < len) { tempmc = (square.getChildAt(i) as MovieClip); if (tempmc.alpha == 0){ if (tempmc.parent){ square.removeChild(tempmc); }; }; j++; }; len = square.numChildren; i = 0; while (i < len) { tempmc = (square.getChildAt(i) as MovieClip); if (((tempmc.canhit) && (tempmc.hitTestPoint(mouseX, mouseY, true)))){ hitbool = true; break; }; i++; }; if (hitbool){ return ((square.getChildAt(i) as MovieClip)); }; return (null); } public function gradescore(N:int):int{ if (N == 0){ return (0); }; var S = 150; if (N >= 3){ return ((S + ((N - 3) * 100))); }; return (0); } public function inititem(){ } public function stopallSq(){ } public function lvup(){ if (lv < 10){ Main.lv_sd.playsound(1); lv++; trace("lvup"); loaddata(); main.setLv(lv); if (levelup.parent){ hit.removeChild(levelup); }; levelup.alpha = 1; hit.addChild(levelup); levelup.x = 275; levelup.y = 230; Tweener.addTween(levelup, {y:180, alpha:0, time:1, transition:"easeInSine"}); } else { win(); }; } public function destory(){ stopgame(); Box2dFactory.getInstance().clear(); gametime.removetime(); removeAllChildren(background); removeAllChildren(standby1); removeAllChildren(square); removeAllChildren(standby2); removeAllChildren(burst); removeAllChildren(mouseeffect); removeAllChildren(hit); removeAllChildren(game); removeAllChildren(this); Tweener.removeAllTweens(); SoundControl.stopallsound(); } public function restartallSq(){ var len:int = square.numChildren; var i:int; while (i < len) { if ((square.getChildAt(i) as BaseSquare).state == "die"){ (square.getChildAt(i) as BaseSquare).restartburst(); }; i++; }; } public function newsquare(container:Sprite, x:Number, y:Number, kind:int, col:int):BaseSquare{ var sq:BaseSquare; var _col:String = MyData.facedataground[kind][col]; switch (kind){ case 0: sq = new Rotundity(x, y, _col); break; case 1: sq = new Four(x, y, _col); break; case 2: sq = new Six(x, y, _col); break; case 3: sq = new Eight(x, y, _col); break; }; sq.color = col; container.addChild(sq); return (sq); } public function starthitcount(){ if (startcombo){ hitcount++; if (hitcount >= 60){ hitcount = 0; combo = 0; startcombo = false; }; }; } public function initui(){ main.setCombo(0); main.setLv(1); main.setScore(score); } public function updata(e:Event){ Box2dFactory.getInstance().updata(); } public function gameover(){ main.setScore(score); stopgame(); removesq(); main.showGameover(score); } public function onhit(e:MouseEvent):void{ } public function removeAllChildren(container:DisplayObjectContainer):void{ var count:int = container.numChildren; var i:int; while (i < count) { container.removeChildAt(0); i++; }; } public function setTime(){ main.setTime(gametime.count); } public function squarenum():int{ var len:int = square.numChildren; if (!len){ return (0); }; var tempcount:int; var i:int; while (i < len) { if ((square.getChildAt(i) as BaseSquare).canhit){ tempcount++; }; i++; }; return (tempcount); } public function removesq(){ removeAllChildren(square); removeAllChildren(mouseeffect); } public function initSound(){ SoundControl.destorySdground(); } public function win():void{ trace("win"); main.setScore(score); stopgame(); removesq(); main.showWin(score, gametime.count); } public function pausegame(){ if (pausebool){ restartgame(); } else { stopgame(); }; if (pausebool){ pausebool = false; } else { pausebool = true; }; } public function setcombo(){ var S:int; Main.bz_sd.playsound(1); startcombo = true; if (hitcount < 45){ combo = (combo + 1); hitcount = 0; S = (combo * 50); score = (score + S); if (combo > 1){ Main.combo_sd.playsound(1); if (Maxcombo < (combo - 1)){ Maxcombo = (combo - 1); main.setCombo(Maxcombo); }; if (comboMC.parent){ hit.removeChild(comboMC); }; comboMC.alpha = 1; hit.addChild(comboMC); BaseUI.setcombo(comboMC, (combo - 1)); comboMC.x = 460; comboMC.y = 210; Tweener.addTween(comboMC, {alpha:0, time:1, transition:"linear"}); }; }; } public function ergodHit(hitarr:Array):Array{ var checkRepeat:*; var len:int; var k:int; var mcA:BaseSquare; var mcB:BaseSquare; var i:int; var rearr:Array; var tempcount:int; var j:int; var hitlen:int; var hitarr = hitarr; checkRepeat = function (item:Object, index:int, arr:Array):Boolean{ return ((arr.indexOf(item) == index)); }; var temparr:Array = hitarr; if (temparr.length < 2){ return (new Array()); }; len = temparr.length; k = 0; while (k < len) { temparr[k].hittime = 0; temparr[k].hitarr = new Array(); k = (k + 1); }; i = 0; while (i < len) { mcA = (temparr[i] as BaseSquare); j = (i + 1); while (j < len) { mcB = (temparr[j] as BaseSquare); if (((mcA.canhit) && (mcB.canhit))){ if (HitTest.complexHitTestObject(mcA, mcB)){ mcA.hittime++; mcA.hitarr.push(mcB); mcB.hittime++; mcB.hitarr.push(mcA); }; }; j = (j + 1); }; i = (i + 1); }; rearr = new Array(); i = 0; while (i < len) { mcA = (temparr[i] as BaseSquare); if (mcA.hittime == 0){ if (((!((mcA.state == "move"))) && (!((mcA.state == "die"))))){ mcA.Normal(); }; } else { if (mcA.hittime == 1){ if (((!((mcA.state == "move"))) && (!((mcA.state == "die"))))){ mcA.Wait(); }; } else { if (mcA.hittime >= 2){ hitlen = mcA.hitarr.length; rearr.push(mcA); j = 0; while (j < hitlen) { rearr.push(mcA.hitarr[j]); j = (j + 1); }; }; }; }; i = (i + 1); }; tempcount = 0; i = 0; while (i < len) { if (hitarr[tempcount] != undefined){ mcA = (hitarr[tempcount] as BaseSquare); if (mcA.alpha <= 0){ ((mcA.parent) && (square.removeChild(mcA))); hitarr.splice(tempcount, 1); } else { tempcount = (tempcount + 1); }; }; i = (i + 1); }; return (rearr.filter(checkRepeat)); } } }//package BaseClass
Section 3
//BaseUI (BaseClass.BaseUI) package BaseClass { import flash.display.*; import UserdefinedClass.*; public class BaseUI { public static var uisp:Sprite = new Sprite(); public function BaseUI(){ super(); } public static function setcombo(obj:MovieClip, num:int){ var temp:Array = MyMath.worknum(num); (obj.c0 as MovieClip).alpha = 1; if (num > 9){ (obj.c1 as MovieClip).alpha = 1; } else { (obj.c1 as MovieClip).alpha = 0; }; (obj.c0 as MovieClip).gotoAndStop((temp[0] + 1)); (obj.c1 as MovieClip).gotoAndStop((temp[1] + 1)); } public static function showscore(scnum:int, objname, Container:DisplayObjectContainer, x:Number, y:Number, size:Number=1, flushleft:Boolean=true){ var sc:MovieClip; Clr.removeAllChildren(uisp); var tempnum:Array = MyMath.NumtoArray(scnum, flushleft); var len:int = tempnum.length; var i:int; while (i < len) { sc = (new (objname) as MovieClip); sc.scaleX = (sc.scaleY = size); sc.x = (sc.width * i); if (!flushleft){ sc.x = (-(sc.width) * i); }; sc.gotoAndStop((tempnum[i] + 1)); uisp.addChild(sc); i++; }; uisp.x = x; uisp.y = y; Container.addChild(uisp); } public static function setValue(obj:MovieClip, objname:String, frame:int){ obj[objname].gotoAndStop(frame); } public static function setWinScore(obj:MovieClip, Scorenum:int){ var Temp:Array = new Array(obj.s0, obj.s1, obj.s2, obj.s3, obj.s4); var tempnum:Array = MyMath.NumtoArray(Scorenum); var len:int = tempnum.length; var i:int; while (i < 5) { if (i < len){ Temp[i].alpha = 1; Temp[i].gotoAndStop((tempnum[i] + 1)); } else { Temp[i].alpha = 0; }; i++; }; } public static function setlv(obj:MovieClip, num:int){ var temp:Array = MyMath.worknum(num); (obj.lv0 as MovieClip).gotoAndStop((temp[0] + 1)); (obj.lv1 as MovieClip).gotoAndStop((temp[1] + 1)); } public static function settime(Mc:MovieClip, num:int){ var timearr:Array = MyMath.TimeFormat(num); var timemcname:Array = new Array(Mc.t0, Mc.t1, Mc.t2, Mc.t3); var i:int; while (i < 4) { (timemcname[i] as MovieClip).gotoAndStop((timearr[i] + 1)); i++; }; } } }//package BaseClass
Section 4
//b2CircleDef (Box2D.Collision.Shapes.b2CircleDef) package Box2D.Collision.Shapes { import Box2D.Common.Math.*; public class b2CircleDef extends b2ShapeDef { public var radius:Number; public var localPosition:b2Vec2; public function b2CircleDef(){ localPosition = new b2Vec2(0, 0); super(); type = b2Shape.e_circleShape; radius = 1; } } }//package Box2D.Collision.Shapes
Section 5
//b2CircleShape (Box2D.Collision.Shapes.b2CircleShape) package Box2D.Collision.Shapes { import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Collision.*; import Box2D.Common.*; public class b2CircleShape extends b2Shape { public var m_localPosition:b2Vec2; public var m_radius:Number; public function b2CircleShape(def:b2ShapeDef){ m_localPosition = new b2Vec2(); super(def); var circleDef:b2CircleDef = (def as b2CircleDef); m_type = e_circleShape; m_localPosition.SetV(circleDef.localPosition); m_radius = circleDef.radius; } override public function TestSegment(transform:b2XForm, lambda:Array, normal:b2Vec2, segment:b2Segment, maxLambda:Number):Boolean{ var sY:Number; var tMat:b2Mat22 = transform.R; var positionX:Number = (transform.position.x + ((tMat.col1.x * m_localPosition.x) + (tMat.col2.x * m_localPosition.y))); var positionY:Number = (transform.position.y + ((tMat.col1.y * m_localPosition.x) + (tMat.col2.y * m_localPosition.y))); var sX:Number = (segment.p1.x - positionX); sY = (segment.p1.y - positionY); var b:Number = (((sX * sX) + (sY * sY)) - (m_radius * m_radius)); if (b < 0){ return (false); }; var rX:Number = (segment.p2.x - segment.p1.x); var rY:Number = (segment.p2.y - segment.p1.y); var c:Number = ((sX * rX) + (sY * rY)); var rr:Number = ((rX * rX) + (rY * rY)); var sigma:Number = ((c * c) - (rr * b)); if ((((sigma < 0)) || ((rr < Number.MIN_VALUE)))){ return (false); }; var a:Number = -((c + Math.sqrt(sigma))); if ((((0 <= a)) && ((a <= (maxLambda * rr))))){ a = (a / rr); lambda[0] = a; normal.x = (sX + (a * rX)); normal.y = (sY + (a * rY)); normal.Normalize(); return (true); }; return (false); } public function GetLocalPosition():b2Vec2{ return (m_localPosition); } public function GetRadius():Number{ return (m_radius); } override public function ComputeSweptAABB(aabb:b2AABB, transform1:b2XForm, transform2:b2XForm):void{ var tMat:b2Mat22; tMat = transform1.R; var p1X:Number = (transform1.position.x + ((tMat.col1.x * m_localPosition.x) + (tMat.col2.x * m_localPosition.y))); var p1Y:Number = (transform1.position.y + ((tMat.col1.y * m_localPosition.x) + (tMat.col2.y * m_localPosition.y))); tMat = transform2.R; var p2X:Number = (transform2.position.x + ((tMat.col1.x * m_localPosition.x) + (tMat.col2.x * m_localPosition.y))); var p2Y:Number = (transform2.position.y + ((tMat.col1.y * m_localPosition.x) + (tMat.col2.y * m_localPosition.y))); aabb.lowerBound.Set((((p1X < p2X)) ? p1X : p2X - m_radius), (((p1Y < p2Y)) ? p1Y : p2Y - m_radius)); aabb.upperBound.Set((((p1X > p2X)) ? p1X : p2X + m_radius), (((p1Y > p2Y)) ? p1Y : p2Y + m_radius)); } override public function ComputeMass(massData:b2MassData):void{ massData.mass = (((m_density * b2Settings.b2_pi) * m_radius) * m_radius); massData.center.SetV(m_localPosition); massData.I = (massData.mass * (((0.5 * m_radius) * m_radius) + ((m_localPosition.x * m_localPosition.x) + (m_localPosition.y * m_localPosition.y)))); } override public function UpdateSweepRadius(center:b2Vec2):void{ var dX:Number = (m_localPosition.x - center.x); var dY:Number = (m_localPosition.y - center.y); dX = Math.sqrt(((dX * dX) + (dY * dY))); m_sweepRadius = ((dX + m_radius) - b2Settings.b2_toiSlop); } override public function ComputeAABB(aabb:b2AABB, transform:b2XForm):void{ var tMat:b2Mat22 = transform.R; var pX:Number = (transform.position.x + ((tMat.col1.x * m_localPosition.x) + (tMat.col2.x * m_localPosition.y))); var pY:Number = (transform.position.y + ((tMat.col1.y * m_localPosition.x) + (tMat.col2.y * m_localPosition.y))); aabb.lowerBound.Set((pX - m_radius), (pY - m_radius)); aabb.upperBound.Set((pX + m_radius), (pY + m_radius)); } override public function TestPoint(transform:b2XForm, p:b2Vec2):Boolean{ var tMat:b2Mat22 = transform.R; var dX:Number = (transform.position.x + ((tMat.col1.x * m_localPosition.x) + (tMat.col2.x * m_localPosition.y))); var dY:Number = (transform.position.y + ((tMat.col1.y * m_localPosition.x) + (tMat.col2.y * m_localPosition.y))); dX = (p.x - dX); dY = (p.y - dY); return ((((dX * dX) + (dY * dY)) <= (m_radius * m_radius))); } } }//package Box2D.Collision.Shapes
Section 6
//b2FilterData (Box2D.Collision.Shapes.b2FilterData) package Box2D.Collision.Shapes { import Box2D.Common.Math.*; public class b2FilterData { public var maskBits:uint;// = 0xFFFF public var groupIndex:int;// = 0 public var categoryBits:uint;// = 1 public function Copy():b2FilterData{ var copy:b2FilterData = new b2FilterData(); copy.categoryBits = categoryBits; copy.maskBits = maskBits; copy.groupIndex = groupIndex; return (copy); } } }//package Box2D.Collision.Shapes
Section 7
//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(){ center = new b2Vec2(0, 0); super(); } } }//package Box2D.Collision.Shapes
Section 8
//b2PolygonDef (Box2D.Collision.Shapes.b2PolygonDef) package Box2D.Collision.Shapes { import Box2D.Common.Math.*; import Box2D.Common.*; public class b2PolygonDef extends b2ShapeDef { public var vertices:Array; public var vertexCount:int; private static var s_mat:b2Mat22 = new b2Mat22(); public function b2PolygonDef(){ vertices = new Array(b2Settings.b2_maxPolygonVertices); super(); type = b2Shape.e_polygonShape; vertexCount = 0; var i:int; while (i < b2Settings.b2_maxPolygonVertices) { vertices[i] = new b2Vec2(); i++; }; } public function SetAsOrientedBox(hx:Number, hy:Number, center:b2Vec2=null, angle:Number=0):void{ var xfPosition:b2Vec2; var xfR:b2Mat22; var i:int; vertexCount = 4; vertices[0].Set(-(hx), -(hy)); vertices[1].Set(hx, -(hy)); vertices[2].Set(hx, hy); vertices[3].Set(-(hx), hy); if (center){ xfPosition = center; xfR = s_mat; xfR.Set(angle); i = 0; while (i < vertexCount) { center = vertices[i]; hx = (xfPosition.x + ((xfR.col1.x * center.x) + (xfR.col2.x * center.y))); center.y = (xfPosition.y + ((xfR.col1.y * center.x) + (xfR.col2.y * center.y))); center.x = hx; i++; }; }; } public function SetAsBox(hx:Number, hy:Number):void{ vertexCount = 4; vertices[0].Set(-(hx), -(hy)); vertices[1].Set(hx, -(hy)); vertices[2].Set(hx, hy); vertices[3].Set(-(hx), hy); } } }//package Box2D.Collision.Shapes
Section 9
//b2PolygonShape (Box2D.Collision.Shapes.b2PolygonShape) package Box2D.Collision.Shapes { import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Collision.*; import Box2D.Common.*; public class b2PolygonShape extends b2Shape { public var m_coreVertices:Array; public var m_vertices:Array; private var s_supportVec:b2Vec2; public var m_centroid:b2Vec2; public var m_normals:Array; public var m_obb:b2OBB; public 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(def:b2ShapeDef){ var i:int; var edgeX:Number; var edgeY:Number; var len:Number; var n1X:Number; var n1Y:Number; var n2X:Number; var n2Y:Number; var vX:Number; var vY:Number; var dX:Number; var dY:Number; var det: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(def); m_type = e_polygonShape; var poly:b2PolygonDef = (def as b2PolygonDef); m_vertexCount = poly.vertexCount; var i1:int = i; var i2:int = i; i = 0; while (i < m_vertexCount) { m_vertices[i] = poly.vertices[i].Copy(); i++; }; i = 0; while (i < m_vertexCount) { i1 = i; i2 = (((i + 1) < m_vertexCount)) ? (i + 1) : 0; edgeX = (m_vertices[i2].x - m_vertices[i1].x); edgeY = (m_vertices[i2].y - m_vertices[i1].y); len = Math.sqrt(((edgeX * edgeX) + (edgeY * edgeY))); m_normals[i] = new b2Vec2((edgeY / len), (-(edgeX) / len)); i++; }; m_centroid = ComputeCentroid(poly.vertices, poly.vertexCount); ComputeOBB(m_obb, m_vertices, m_vertexCount); i = 0; while (i < m_vertexCount) { i1 = (((i - 1) >= 0)) ? (i - 1) : (m_vertexCount - 1); i2 = i; n1X = m_normals[i1].x; n1Y = m_normals[i1].y; n2X = m_normals[i2].x; n2Y = m_normals[i2].y; vX = (m_vertices[i].x - m_centroid.x); vY = (m_vertices[i].y - m_centroid.y); dX = (((n1X * vX) + (n1Y * vY)) - b2Settings.b2_toiSlop); dY = (((n2X * vX) + (n2Y * vY)) - b2Settings.b2_toiSlop); det = (1 / ((n1X * n2Y) - (n1Y * n2X))); m_coreVertices[i] = new b2Vec2(((det * ((n2Y * dX) - (n1Y * dY))) + m_centroid.x), ((det * ((n1X * dY) - (n2X * dX))) + m_centroid.y)); i++; }; } override public function ComputeSweptAABB(aabb:b2AABB, transform1:b2XForm, transform2:b2XForm):void{ var aabb1:b2AABB = s_sweptAABB1; var aabb2:b2AABB = s_sweptAABB2; ComputeAABB(aabb1, transform1); ComputeAABB(aabb2, transform2); aabb.lowerBound.Set(((aabb1.lowerBound.x < aabb2.lowerBound.x)) ? aabb1.lowerBound.x : aabb2.lowerBound.x, ((aabb1.lowerBound.y < aabb2.lowerBound.y)) ? aabb1.lowerBound.y : aabb2.lowerBound.y); aabb.upperBound.Set(((aabb1.upperBound.x > aabb2.upperBound.x)) ? aabb1.upperBound.x : aabb2.upperBound.x, ((aabb1.upperBound.y > aabb2.upperBound.y)) ? aabb1.upperBound.y : aabb2.upperBound.y); } public function GetVertices():Array{ return (m_vertices); } public function GetCoreVertices():Array{ return (m_coreVertices); } public function GetCentroid():b2Vec2{ return (m_centroid); } public function GetOBB():b2OBB{ return (m_obb); } public function GetFirstVertex(xf:b2XForm):b2Vec2{ return (b2Math.b2MulX(xf, m_coreVertices[0])); } public function Centroid(xf:b2XForm):b2Vec2{ return (b2Math.b2MulX(xf, m_centroid)); } override public function TestSegment(xf:b2XForm, lambda:Array, normal:b2Vec2, segment:b2Segment, maxLambda:Number):Boolean{ var tX:Number; var tY:Number; var tMat:b2Mat22; var tVec:b2Vec2; var numerator:Number; var denominator:Number; var lower:Number = 0; var upper:Number = maxLambda; tX = (segment.p1.x - xf.position.x); tY = (segment.p1.y - xf.position.y); tMat = xf.R; var p1X:Number = ((tX * tMat.col1.x) + (tY * tMat.col1.y)); var p1Y:Number = ((tX * tMat.col2.x) + (tY * tMat.col2.y)); tX = (segment.p2.x - xf.position.x); tY = (segment.p2.y - xf.position.y); tMat = xf.R; var p2X:Number = ((tX * tMat.col1.x) + (tY * tMat.col1.y)); var p2Y:Number = ((tX * tMat.col2.x) + (tY * tMat.col2.y)); var dX:Number = (p2X - p1X); var dY:Number = (p2Y - p1Y); var index = -1; var i:int; while (i < m_vertexCount) { tVec = m_vertices[i]; tX = (tVec.x - p1X); tY = (tVec.y - p1Y); tVec = m_normals[i]; numerator = ((tVec.x * tX) + (tVec.y * tY)); denominator = ((tVec.x * dX) + (tVec.y * dY)); if ((((denominator < 0)) && ((numerator < (lower * denominator))))){ lower = (numerator / denominator); index = i; } else { if ((((denominator > 0)) && ((numerator < (upper * denominator))))){ upper = (numerator / denominator); }; }; if (upper < lower){ return (false); }; i++; }; if (index >= 0){ lambda[0] = lower; tMat = xf.R; tVec = m_normals[index]; normal.x = ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y)); normal.y = ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y)); return (true); }; return (false); } override public function ComputeMass(massData:b2MassData):void{ var p2:b2Vec2; var p3:b2Vec2; var e1X:Number; var e1Y:Number; var e2X:Number; var e2Y:Number; var D:Number; var triangleArea:Number; var px:Number; var py:Number; var ex1:Number; var ey1:Number; var ex2:Number; var ey2:Number; var intx2:Number; var inty2:Number; var centerX:Number = 0; var centerY:Number = 0; var area:Number = 0; var I:Number = 0; var p1X:Number = 0; var p1Y:Number = 0; var k_inv3:Number = (1 / 3); var i:int; while (i < m_vertexCount) { p2 = m_vertices[i]; p3 = (((i + 1) < m_vertexCount)) ? m_vertices[int((i + 1))] : m_vertices[0]; e1X = (p2.x - p1X); e1Y = (p2.y - p1Y); e2X = (p3.x - p1X); e2Y = (p3.y - p1Y); D = ((e1X * e2Y) - (e1Y * e2X)); triangleArea = (0.5 * D); area = (area + triangleArea); centerX = (centerX + ((triangleArea * k_inv3) * ((p1X + p2.x) + p3.x))); centerY = (centerY + ((triangleArea * k_inv3) * ((p1Y + p2.y) + p3.y))); px = p1X; py = p1Y; ex1 = e1X; ey1 = e1Y; ex2 = e2X; ey2 = e2Y; intx2 = ((k_inv3 * ((0.25 * (((ex1 * ex1) + (ex2 * ex1)) + (ex2 * ex2))) + ((px * ex1) + (px * ex2)))) + ((0.5 * px) * px)); inty2 = ((k_inv3 * ((0.25 * (((ey1 * ey1) + (ey2 * ey1)) + (ey2 * ey2))) + ((py * ey1) + (py * ey2)))) + ((0.5 * py) * py)); I = (I + (D * (intx2 + inty2))); i++; }; massData.mass = (m_density * area); centerX = (centerX * (1 / area)); centerY = (centerY * (1 / area)); massData.center.Set(centerX, centerY); massData.I = (m_density * I); } public function GetNormals():Array{ return (m_normals); } public function Support(xf:b2XForm, dX:Number, dY:Number):b2Vec2{ var tVec:b2Vec2; var tMat:b2Mat22; var value:Number; tMat = xf.R; var dLocalX:Number = ((dX * tMat.col1.x) + (dY * tMat.col1.y)); var dLocalY:Number = ((dX * tMat.col2.x) + (dY * tMat.col2.y)); var bestIndex:int; tVec = m_coreVertices[0]; var bestValue:Number = ((tVec.x * dLocalX) + (tVec.y * dLocalY)); var i = 1; while (i < m_vertexCount) { tVec = m_coreVertices[i]; value = ((tVec.x * dLocalX) + (tVec.y * dLocalY)); if (value > bestValue){ bestIndex = i; bestValue = value; }; i++; }; tMat = xf.R; tVec = m_coreVertices[bestIndex]; s_supportVec.x = (xf.position.x + ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y))); s_supportVec.y = (xf.position.y + ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y))); return (s_supportVec); } public function GetVertexCount():int{ return (m_vertexCount); } override public function ComputeAABB(aabb:b2AABB, xf:b2XForm):void{ var tMat:b2Mat22; var tVec:b2Vec2; var R:b2Mat22 = s_computeMat; tMat = xf.R; tVec = m_obb.R.col1; R.col1.x = ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y)); R.col1.y = ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y)); tVec = m_obb.R.col2; R.col2.x = ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y)); R.col2.y = ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y)); R.Abs(); var absR:b2Mat22 = R; tVec = m_obb.extents; var hX:Number = ((absR.col1.x * tVec.x) + (absR.col2.x * tVec.y)); var hY:Number = ((absR.col1.y * tVec.x) + (absR.col2.y * tVec.y)); tMat = xf.R; tVec = m_obb.center; var positionX:Number = (xf.position.x + ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y))); var positionY:Number = (xf.position.y + ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y))); aabb.lowerBound.Set((positionX - hX), (positionY - hY)); aabb.upperBound.Set((positionX + hX), (positionY + hY)); } override public function UpdateSweepRadius(center:b2Vec2):void{ var tVec:b2Vec2; var dX:Number; var dY:Number; m_sweepRadius = 0; var i:int; while (i < m_vertexCount) { tVec = m_coreVertices[i]; dX = (tVec.x - center.x); dY = (tVec.y - center.y); dX = Math.sqrt(((dX * dX) + (dY * dY))); if (dX > m_sweepRadius){ m_sweepRadius = dX; }; i++; }; } override public function TestPoint(xf:b2XForm, p:b2Vec2):Boolean{ var tVec:b2Vec2; var dot:Number; var tMat:b2Mat22 = xf.R; var tX:Number = (p.x - xf.position.x); var tY:Number = (p.y - xf.position.y); var pLocalX:Number = ((tX * tMat.col1.x) + (tY * tMat.col1.y)); var pLocalY:Number = ((tX * tMat.col2.x) + (tY * tMat.col2.y)); var i:int; while (i < m_vertexCount) { tVec = m_vertices[i]; tX = (pLocalX - tVec.x); tY = (pLocalY - tVec.y); tVec = m_normals[i]; dot = ((tVec.x * tX) + (tVec.y * tY)); if (dot > 0){ return (false); }; i++; }; return (true); } public static function ComputeCentroid(vs:Array, count:int):b2Vec2{ var c:b2Vec2; var inv3:Number; var p2:b2Vec2; var p3:b2Vec2; var e1X:Number; var e1Y:Number; var e2X:Number; var e2Y:Number; var D:Number; var triangleArea:Number; c = new b2Vec2(); var area:Number = 0; var p1X:Number = 0; var p1Y:Number = 0; inv3 = (1 / 3); var i:int; while (i < count) { p2 = vs[i]; p3 = (((i + 1) < count)) ? vs[int((i + 1))] : vs[0]; e1X = (p2.x - p1X); e1Y = (p2.y - p1Y); e2X = (p3.x - p1X); e2Y = (p3.y - p1Y); D = ((e1X * e2Y) - (e1Y * e2X)); triangleArea = (0.5 * D); area = (area + triangleArea); c.x = (c.x + ((triangleArea * inv3) * ((p1X + p2.x) + p3.x))); c.y = (c.y + ((triangleArea * inv3) * ((p1Y + p2.y) + p3.y))); i++; }; c.x = (c.x * (1 / area)); c.y = (c.y * (1 / area)); return (c); } public static function ComputeOBB(obb:b2OBB, vs:Array, count:int):void{ var i:int; var root:b2Vec2; var uxX:Number; var uxY:Number; var length:Number; var uyX:Number; var uyY:Number; var lowerX:Number; var lowerY:Number; var upperX:Number; var upperY:Number; var j:int; var area:Number; var dX:Number; var dY:Number; var rX:Number; var rY:Number; var centerX:Number; var centerY:Number; var tMat:b2Mat22; var p:Array = new Array((b2Settings.b2_maxPolygonVertices + 1)); i = 0; while (i < count) { p[i] = vs[i]; i++; }; p[count] = p[0]; var minArea:Number = Number.MAX_VALUE; i = 1; while (i <= count) { root = p[int((i - 1))]; uxX = (p[i].x - root.x); uxY = (p[i].y - root.y); length = Math.sqrt(((uxX * uxX) + (uxY * uxY))); uxX = (uxX / length); uxY = (uxY / length); uyX = -(uxY); uyY = uxX; lowerX = Number.MAX_VALUE; lowerY = Number.MAX_VALUE; upperX = -(Number.MAX_VALUE); upperY = -(Number.MAX_VALUE); j = 0; while (j < count) { dX = (p[j].x - root.x); dY = (p[j].y - root.y); rX = ((uxX * dX) + (uxY * dY)); rY = ((uyX * dX) + (uyY * dY)); if (rX < lowerX){ lowerX = rX; }; if (rY < lowerY){ lowerY = rY; }; if (rX > upperX){ upperX = rX; }; if (rY > upperY){ upperY = rY; }; j++; }; area = ((upperX - lowerX) * (upperY - lowerY)); if (area < (0.95 * minArea)){ minArea = area; obb.R.col1.x = uxX; obb.R.col1.y = uxY; obb.R.col2.x = uyX; obb.R.col2.y = uyY; centerX = (0.5 * (lowerX + upperX)); centerY = (0.5 * (lowerY + upperY)); tMat = obb.R; obb.center.x = (root.x + ((tMat.col1.x * centerX) + (tMat.col2.x * centerY))); obb.center.y = (root.y + ((tMat.col1.y * centerX) + (tMat.col2.y * centerY))); obb.extents.x = (0.5 * (upperX - lowerX)); obb.extents.y = (0.5 * (upperY - lowerY)); }; i++; }; } } }//package Box2D.Collision.Shapes
Section 10
//b2Shape (Box2D.Collision.Shapes.b2Shape) package Box2D.Collision.Shapes { import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Collision.*; import Box2D.Common.*; public class b2Shape { public var m_next:b2Shape; public var m_type:int; public var m_sweepRadius:Number; public var m_density:Number; public var m_filter:b2FilterData; public var m_friction:Number; public var m_isSensor:Boolean; public var m_restitution:Number; public var m_userData; public var m_proxyId:uint; public var m_body:b2Body; public static const e_polygonShape:int = 1; public static const e_unknownShape:int = -1; public static const e_circleShape:int = 0; public static const e_shapeTypeCount:int = 2; 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(def:b2ShapeDef){ super(); m_userData = def.userData; m_friction = def.friction; m_restitution = def.restitution; m_density = def.density; m_body = null; m_sweepRadius = 0; m_next = null; m_proxyId = b2Pair.b2_nullProxy; m_filter = def.filter.Copy(); m_isSensor = def.isSensor; } public function SetUserData(data):void{ m_userData = data; } public function GetSweepRadius():Number{ return (m_sweepRadius); } public function GetNext():b2Shape{ return (m_next); } public function ComputeSweptAABB(aabb:b2AABB, xf1:b2XForm, xf2:b2XForm):void{ } public function GetType():int{ return (m_type); } public function GetRestitution():Number{ return (m_restitution); } public function GetFriction():Number{ return (m_friction); } public function GetFilterData():b2FilterData{ return (m_filter.Copy()); } public function TestSegment(xf:b2XForm, lambda:Array, normal:b2Vec2, segment:b2Segment, maxLambda:Number):Boolean{ return (false); } public function RefilterProxy(broadPhase:b2BroadPhase, transform:b2XForm):void{ if (m_proxyId == b2Pair.b2_nullProxy){ return; }; broadPhase.DestroyProxy(m_proxyId); var aabb:b2AABB = s_resetAABB; ComputeAABB(aabb, transform); var inRange:Boolean = broadPhase.InRange(aabb); if (inRange){ m_proxyId = broadPhase.CreateProxy(aabb, this); } else { m_proxyId = b2Pair.b2_nullProxy; }; } public function SetFilterData(filter:b2FilterData):void{ m_filter = filter.Copy(); } public function GetUserData(){ return (m_userData); } public function Synchronize(broadPhase:b2BroadPhase, transform1:b2XForm, transform2:b2XForm):Boolean{ if (m_proxyId == b2Pair.b2_nullProxy){ return (false); }; var aabb:b2AABB = s_syncAABB; ComputeSweptAABB(aabb, transform1, transform2); if (broadPhase.InRange(aabb)){ broadPhase.MoveProxy(m_proxyId, aabb); return (true); }; return (false); } public function ComputeMass(massData:b2MassData):void{ } public function IsSensor():Boolean{ return (m_isSensor); } public function DestroyProxy(broadPhase:b2BroadPhase):void{ if (m_proxyId != b2Pair.b2_nullProxy){ broadPhase.DestroyProxy(m_proxyId); m_proxyId = b2Pair.b2_nullProxy; }; } public function UpdateSweepRadius(center:b2Vec2):void{ } public function ComputeAABB(aabb:b2AABB, xf:b2XForm):void{ } public function GetBody():b2Body{ return (m_body); } public function CreateProxy(broadPhase:b2BroadPhase, transform:b2XForm):void{ var aabb:b2AABB = s_proxyAABB; ComputeAABB(aabb, transform); var inRange:Boolean = broadPhase.InRange(aabb); if (inRange){ m_proxyId = broadPhase.CreateProxy(aabb, this); } else { m_proxyId = b2Pair.b2_nullProxy; }; } public function TestPoint(xf:b2XForm, p:b2Vec2):Boolean{ return (false); } public static function Destroy(shape:b2Shape, allocator):void{ } public static function Create(def:b2ShapeDef, allocator):b2Shape{ switch (def.type){ case e_circleShape: return (new b2CircleShape(def)); case e_polygonShape: return (new b2PolygonShape(def)); default: return (null); }; } } }//package Box2D.Collision.Shapes
Section 11
//b2ShapeDef (Box2D.Collision.Shapes.b2ShapeDef) package Box2D.Collision.Shapes { import Box2D.Common.Math.*; import Box2D.Common.*; public class b2ShapeDef { public var friction:Number;// = 0.2 public var isSensor:Boolean;// = false public var density:Number;// = 0 public var restitution:Number;// = 0 public var userData;// = null public var filter:b2FilterData; public var type:int; public function b2ShapeDef(){ type = b2Shape.e_unknownShape; filter = new b2FilterData(); super(); } } }//package Box2D.Collision.Shapes
Section 12
//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 IsValid():Boolean{ var dX:Number = (upperBound.x - lowerBound.x); var dY:Number = (upperBound.y - lowerBound.y); var valid:Boolean = (((dX >= 0)) && ((dY >= 0))); valid = ((((valid) && (lowerBound.IsValid()))) && (upperBound.IsValid())); return (valid); } } }//package Box2D.Collision
Section 13
//b2Bound (Box2D.Collision.b2Bound) package Box2D.Collision { public class b2Bound { public var value:uint; public var proxyId:uint; public var stabbingCount:uint; public function Swap(b:b2Bound):void{ var tempValue:uint = value; var tempProxyId:uint = proxyId; var tempStabbingCount:uint = stabbingCount; value = b.value; proxyId = b.proxyId; stabbingCount = b.stabbingCount; b.value = tempValue; b.proxyId = tempProxyId; b.stabbingCount = tempStabbingCount; } public function IsLower():Boolean{ return (((value & 1) == 0)); } public function IsUpper():Boolean{ return (((value & 1) == 1)); } } }//package Box2D.Collision
Section 14
//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 15
//b2BroadPhase (Box2D.Collision.b2BroadPhase) package Box2D.Collision { import Box2D.Common.Math.*; import Box2D.Common.*; public class b2BroadPhase { public var m_bounds:Array; public var m_quantizationFactor:b2Vec2; public var m_worldAABB:b2AABB; public var m_freeProxy:uint; public var m_proxyCount:int; public var m_proxyPool:Array; public var m_queryResultCount:int; public var m_pairManager:b2PairManager; public var m_timeStamp:uint; public 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(worldAABB:b2AABB, callback:b2PairCallback){ var i:int; var dY:Number; var tProxy:b2Proxy; var j:int; m_pairManager = new b2PairManager(); m_proxyPool = new Array(b2Settings.b2_maxPairs); m_bounds = new Array((2 * b2Settings.b2_maxProxies)); m_queryResults = new Array(b2Settings.b2_maxProxies); m_quantizationFactor = new b2Vec2(); super(); m_pairManager.Initialize(this, callback); m_worldAABB = worldAABB; m_proxyCount = 0; i = 0; while (i < b2Settings.b2_maxProxies) { m_queryResults[i] = 0; i++; }; m_bounds = new Array(2); i = 0; while (i < 2) { m_bounds[i] = new Array((2 * b2Settings.b2_maxProxies)); j = 0; while (j < (2 * b2Settings.b2_maxProxies)) { m_bounds[i][j] = new b2Bound(); j++; }; i++; }; var dX:Number = (worldAABB.upperBound.x - worldAABB.lowerBound.x); dY = (worldAABB.upperBound.y - worldAABB.lowerBound.y); m_quantizationFactor.x = (b2Settings.USHRT_MAX / dX); m_quantizationFactor.y = (b2Settings.USHRT_MAX / dY); i = 0; while (i < (b2Settings.b2_maxProxies - 1)) { tProxy = new b2Proxy(); m_proxyPool[i] = tProxy; tProxy.SetNext((i + 1)); tProxy.timeStamp = 0; tProxy.overlapCount = b2_invalid; tProxy.userData = null; i++; }; tProxy = new b2Proxy(); m_proxyPool[int((b2Settings.b2_maxProxies - 1))] = tProxy; tProxy.SetNext(b2Pair.b2_nullProxy); tProxy.timeStamp = 0; tProxy.overlapCount = b2_invalid; tProxy.userData = null; m_freeProxy = 0; m_timeStamp = 1; m_queryResultCount = 0; } public function QueryAABB(aabb:b2AABB, userData, maxCount:int):int{ var lowerIndex:uint; var upperIndex:uint; var proxy:b2Proxy; var lowerValues:Array = new Array(); var upperValues:Array = new Array(); ComputeBounds(lowerValues, upperValues, aabb); var lowerIndexOut:Array = [lowerIndex]; var upperIndexOut:Array = [upperIndex]; Query(lowerIndexOut, upperIndexOut, lowerValues[0], upperValues[0], m_bounds[0], (2 * m_proxyCount), 0); Query(lowerIndexOut, upperIndexOut, lowerValues[1], upperValues[1], m_bounds[1], (2 * m_proxyCount), 1); var count:int; var i:int; while ((((i < m_queryResultCount)) && ((count < maxCount)))) { proxy = m_proxyPool[m_queryResults[i]]; userData[i] = proxy.userData; i++; count++; }; m_queryResultCount = 0; IncrementTimeStamp(); return (count); } public function Commit():void{ m_pairManager.Commit(); } public function GetProxy(proxyId:int):b2Proxy{ var proxy:b2Proxy = m_proxyPool[proxyId]; if ((((proxyId == b2Pair.b2_nullProxy)) || ((proxy.IsValid() == false)))){ return (null); }; return (proxy); } private function IncrementTimeStamp():void{ var i:uint; if (m_timeStamp == b2Settings.USHRT_MAX){ i = 0; while (i < b2Settings.b2_maxProxies) { (m_proxyPool[i] as b2Proxy).timeStamp = 0; i++; }; m_timeStamp = 1; } else { m_timeStamp++; }; } private function Query(lowerQueryOut:Array, upperQueryOut:Array, lowerValue:uint, upperValue:uint, bounds:Array, boundCount:uint, axis:int):void{ var bound:b2Bound; var i:int; var s:int; var proxy:b2Proxy; var lowerQuery:uint = BinarySearch(bounds, boundCount, lowerValue); var upperQuery:uint = BinarySearch(bounds, boundCount, upperValue); var j:uint = lowerQuery; while (j < upperQuery) { bound = bounds[j]; if (bound.IsLower()){ IncrementOverlapCount(bound.proxyId); }; j++; }; if (lowerQuery > 0){ i = (lowerQuery - 1); bound = bounds[i]; s = bound.stabbingCount; while (s) { bound = bounds[i]; if (bound.IsLower()){ proxy = m_proxyPool[bound.proxyId]; if (lowerQuery <= proxy.upperBounds[axis]){ IncrementOverlapCount(bound.proxyId); s--; }; }; i--; }; }; lowerQueryOut[0] = lowerQuery; upperQueryOut[0] = upperQuery; } private function TestOverlapValidate(p1:b2Proxy, p2:b2Proxy):Boolean{ var bounds:Array; var bound1:b2Bound; var bound2:b2Bound; var axis:int; while (axis < 2) { bounds = m_bounds[axis]; bound1 = bounds[p1.lowerBounds[axis]]; bound2 = bounds[p2.upperBounds[axis]]; if (bound1.value > bound2.value){ return (false); }; bound1 = bounds[p1.upperBounds[axis]]; bound2 = bounds[p2.lowerBounds[axis]]; if (bound1.value < bound2.value){ return (false); }; axis++; }; return (true); } private function ComputeBounds(lowerValues:Array, upperValues:Array, aabb:b2AABB):void{ var minVertexX:Number = aabb.lowerBound.x; var minVertexY:Number = aabb.lowerBound.y; minVertexX = b2Math.b2Min(minVertexX, m_worldAABB.upperBound.x); minVertexY = b2Math.b2Min(minVertexY, m_worldAABB.upperBound.y); minVertexX = b2Math.b2Max(minVertexX, m_worldAABB.lowerBound.x); minVertexY = b2Math.b2Max(minVertexY, m_worldAABB.lowerBound.y); var maxVertexX:Number = aabb.upperBound.x; var maxVertexY:Number = aabb.upperBound.y; maxVertexX = b2Math.b2Min(maxVertexX, m_worldAABB.upperBound.x); maxVertexY = b2Math.b2Min(maxVertexY, m_worldAABB.upperBound.y); maxVertexX = b2Math.b2Max(maxVertexX, m_worldAABB.lowerBound.x); maxVertexY = b2Math.b2Max(maxVertexY, m_worldAABB.lowerBound.y); lowerValues[0] = (uint((m_quantizationFactor.x * (minVertexX - m_worldAABB.lowerBound.x))) & (b2Settings.USHRT_MAX - 1)); upperValues[0] = ((uint((m_quantizationFactor.x * (maxVertexX - m_worldAABB.lowerBound.x))) & 0xFFFF) | 1); lowerValues[1] = (uint((m_quantizationFactor.y * (minVertexY - m_worldAABB.lowerBound.y))) & (b2Settings.USHRT_MAX - 1)); upperValues[1] = ((uint((m_quantizationFactor.y * (maxVertexY - m_worldAABB.lowerBound.y))) & 0xFFFF) | 1); } public function CreateProxy(aabb:b2AABB, userData):uint{ var index:uint; var proxy:b2Proxy; var bounds:Array; var lowerIndex:uint; var upperIndex:uint; var lowerIndexOut:Array; var upperIndexOut:Array; var tArr:Array; var j:int; var tEnd:int; var tBound1:b2Bound; var tBound2:b2Bound; var tBoundAS3:b2Bound; var tIndex:int; var proxy2:b2Proxy; var proxyId:uint = m_freeProxy; proxy = m_proxyPool[proxyId]; m_freeProxy = proxy.GetNext(); proxy.overlapCount = 0; proxy.userData = userData; var boundCount:uint = (2 * m_proxyCount); var lowerValues:Array = new Array(); var upperValues:Array = new Array(); ComputeBounds(lowerValues, upperValues, aabb); var axis:int; while (axis < 2) { bounds = m_bounds[axis]; lowerIndexOut = [lowerIndex]; upperIndexOut = [upperIndex]; Query(lowerIndexOut, upperIndexOut, lowerValues[axis], upperValues[axis], bounds, boundCount, axis); lowerIndex = lowerIndexOut[0]; upperIndex = upperIndexOut[0]; tArr = new Array(); tEnd = (boundCount - upperIndex); j = 0; while (j < tEnd) { tArr[j] = new b2Bound(); tBound1 = tArr[j]; tBound2 = bounds[int((upperIndex + j))]; tBound1.value = tBound2.value; tBound1.proxyId = tBound2.proxyId; tBound1.stabbingCount = tBound2.stabbingCount; j++; }; tEnd = tArr.length; tIndex = (upperIndex + 2); j = 0; while (j < tEnd) { tBound2 = tArr[j]; tBound1 = bounds[int((tIndex + j))]; tBound1.value = tBound2.value; tBound1.proxyId = tBound2.proxyId; tBound1.stabbingCount = tBound2.stabbingCount; j++; }; tArr = new Array(); tEnd = (upperIndex - lowerIndex); j = 0; while (j < tEnd) { tArr[j] = new b2Bound(); tBound1 = tArr[j]; tBound2 = bounds[int((lowerIndex + j))]; tBound1.value = tBound2.value; tBound1.proxyId = tBound2.proxyId; tBound1.stabbingCount = tBound2.stabbingCount; j++; }; tEnd = tArr.length; tIndex = (lowerIndex + 1); j = 0; while (j < tEnd) { tBound2 = tArr[j]; tBound1 = bounds[int((tIndex + j))]; tBound1.value = tBound2.value; tBound1.proxyId = tBound2.proxyId; tBound1.stabbingCount = tBound2.stabbingCount; j++; }; upperIndex++; tBound1 = bounds[lowerIndex]; tBound2 = bounds[upperIndex]; tBound1.value = lowerValues[axis]; tBound1.proxyId = proxyId; tBound2.value = upperValues[axis]; tBound2.proxyId = proxyId; tBoundAS3 = bounds[int((lowerIndex - 1))]; tBound1.stabbingCount = ((lowerIndex == 0)) ? 0 : tBoundAS3.stabbingCount; tBoundAS3 = bounds[int((upperIndex - 1))]; tBound2.stabbingCount = tBoundAS3.stabbingCount; index = lowerIndex; while (index < upperIndex) { tBoundAS3 = bounds[index]; tBoundAS3.stabbingCount++; index++; }; index = lowerIndex; while (index < (boundCount + 2)) { tBound1 = bounds[index]; proxy2 = m_proxyPool[tBound1.proxyId]; if (tBound1.IsLower()){ proxy2.lowerBounds[axis] = index; } else { proxy2.upperBounds[axis] = index; }; index++; }; axis++; }; m_proxyCount++; var i:int; while (i < m_queryResultCount) { m_pairManager.AddBufferedPair(proxyId, m_queryResults[i]); i++; }; m_pairManager.Commit(); m_queryResultCount = 0; IncrementTimeStamp(); return (proxyId); } public function DestroyProxy(proxyId:uint):void{ var tBound1:b2Bound; var tBound2:b2Bound; var bounds:Array; var lowerIndex:uint; var upperIndex:uint; var lowerValue:uint; var upperValue:uint; var tArr:Array; var j:int; var tEnd:int; var tIndex:int; var index:uint; var index2:int; var proxy2:b2Proxy; var proxy:b2Proxy = m_proxyPool[proxyId]; var boundCount:int = (2 * m_proxyCount); var axis:int; while (axis < 2) { bounds = m_bounds[axis]; lowerIndex = proxy.lowerBounds[axis]; upperIndex = proxy.upperBounds[axis]; tBound1 = bounds[lowerIndex]; lowerValue = tBound1.value; tBound2 = bounds[upperIndex]; upperValue = tBound2.value; tArr = new Array(); tEnd = ((upperIndex - lowerIndex) - 1); j = 0; while (j < tEnd) { tArr[j] = new b2Bound(); tBound1 = tArr[j]; tBound2 = bounds[int(((lowerIndex + 1) + j))]; tBound1.value = tBound2.value; tBound1.proxyId = tBound2.proxyId; tBound1.stabbingCount = tBound2.stabbingCount; j++; }; tEnd = tArr.length; tIndex = lowerIndex; j = 0; while (j < tEnd) { tBound2 = tArr[j]; tBound1 = bounds[int((tIndex + j))]; tBound1.value = tBound2.value; tBound1.proxyId = tBound2.proxyId; tBound1.stabbingCount = tBound2.stabbingCount; j++; }; tArr = new Array(); tEnd = ((boundCount - upperIndex) - 1); j = 0; while (j < tEnd) { tArr[j] = new b2Bound(); tBound1 = tArr[j]; tBound2 = bounds[int(((upperIndex + 1) + j))]; tBound1.value = tBound2.value; tBound1.proxyId = tBound2.proxyId; tBound1.stabbingCount = tBound2.stabbingCount; j++; }; tEnd = tArr.length; tIndex = (upperIndex - 1); j = 0; while (j < tEnd) { tBound2 = tArr[j]; tBound1 = bounds[int((tIndex + j))]; tBound1.value = tBound2.value; tBound1.proxyId = tBound2.proxyId; tBound1.stabbingCount = tBound2.stabbingCount; j++; }; tEnd = (boundCount - 2); index = lowerIndex; while (index < tEnd) { tBound1 = bounds[index]; proxy2 = m_proxyPool[tBound1.proxyId]; if (tBound1.IsLower()){ proxy2.lowerBounds[axis] = index; } else { proxy2.upperBounds[axis] = index; }; index++; }; tEnd = (upperIndex - 1); index2 = lowerIndex; while (index2 < tEnd) { tBound1 = bounds[index2]; tBound1.stabbingCount--; index2++; }; Query([0], [0], lowerValue, upperValue, bounds, (boundCount - 2), axis); axis++; }; var i:int; while (i < m_queryResultCount) { m_pairManager.RemoveBufferedPair(proxyId, m_queryResults[i]); i++; }; m_pairManager.Commit(); m_queryResultCount = 0; IncrementTimeStamp(); proxy.userData = null; proxy.overlapCount = b2_invalid; proxy.lowerBounds[0] = b2_invalid; proxy.lowerBounds[1] = b2_invalid; proxy.upperBounds[0] = b2_invalid; proxy.upperBounds[1] = b2_invalid; proxy.SetNext(m_freeProxy); m_freeProxy = proxyId; m_proxyCount--; } public function TestOverlap(b:b2BoundValues, p:b2Proxy):Boolean{ var bounds:Array; var bound:b2Bound; var axis:int; while (axis < 2) { bounds = m_bounds[axis]; bound = bounds[p.upperBounds[axis]]; if (b.lowerValues[axis] > bound.value){ return (false); }; bound = bounds[p.lowerBounds[axis]]; if (b.upperValues[axis] < bound.value){ return (false); }; axis++; }; return (true); } public function Validate():void{ var pair:b2Pair; var proxy1:b2Proxy; var proxy2:b2Proxy; var overlap:Boolean; var bounds:b2Bound; var boundCount:uint; var stabbingCount:uint; var i:uint; var bound:b2Bound; var axis:int; while (axis < 2) { bounds = m_bounds[axis]; boundCount = (2 * m_proxyCount); stabbingCount = 0; i = 0; while (i < boundCount) { bound = bounds[i]; if (bound.IsLower() == true){ stabbingCount++; } else { stabbingCount--; }; i++; }; axis++; }; } private function IncrementOverlapCount(proxyId:uint):void{ var proxy:b2Proxy = m_proxyPool[proxyId]; if (proxy.timeStamp < m_timeStamp){ proxy.timeStamp = m_timeStamp; proxy.overlapCount = 1; } else { proxy.overlapCount = 2; m_queryResults[m_queryResultCount] = proxyId; m_queryResultCount++; }; } public function InRange(aabb:b2AABB):Boolean{ var dX:Number; var dY:Number; var d2X:Number; var d2Y:Number; dX = aabb.lowerBound.x; dY = aabb.lowerBound.y; dX = (dX - m_worldAABB.upperBound.x); dY = (dY - m_worldAABB.upperBound.y); d2X = m_worldAABB.lowerBound.x; d2Y = m_worldAABB.lowerBound.y; d2X = (d2X - aabb.upperBound.x); d2Y = (d2Y - aabb.upperBound.y); dX = b2Math.b2Max(dX, d2X); dY = b2Math.b2Max(dY, d2Y); return ((b2Math.b2Max(dX, dY) < 0)); } public function MoveProxy(proxyId:uint, aabb:b2AABB):void{ var as3arr:Array; var as3int:int; var axis:uint; var index:uint; var bound:b2Bound; var prevBound:b2Bound; var nextBound:b2Bound; var nextProxyId:uint; var nextProxy:b2Proxy; var bounds:Array; var lowerIndex:uint; var upperIndex:uint; var lowerValue:uint; var upperValue:uint; var deltaLower:int; var deltaUpper:int; var prevProxyId:uint; var prevProxy:b2Proxy; if ((((proxyId == b2Pair.b2_nullProxy)) || ((b2Settings.b2_maxProxies <= proxyId)))){ return; }; if (aabb.IsValid() == false){ return; }; var boundCount:uint = (2 * m_proxyCount); var proxy:b2Proxy = m_proxyPool[proxyId]; var newValues:b2BoundValues = new b2BoundValues(); ComputeBounds(newValues.lowerValues, newValues.upperValues, aabb); var oldValues:b2BoundValues = new b2BoundValues(); axis = 0; while (axis < 2) { bound = m_bounds[axis][proxy.lowerBounds[axis]]; oldValues.lowerValues[axis] = bound.value; bound = m_bounds[axis][proxy.upperBounds[axis]]; oldValues.upperValues[axis] = bound.value; axis++; }; axis = 0; while (axis < 2) { bounds = m_bounds[axis]; lowerIndex = proxy.lowerBounds[axis]; upperIndex = proxy.upperBounds[axis]; lowerValue = newValues.lowerValues[axis]; upperValue = newValues.upperValues[axis]; bound = bounds[lowerIndex]; deltaLower = (lowerValue - bound.value); bound.value = lowerValue; bound = bounds[upperIndex]; deltaUpper = (upperValue - bound.value); bound.value = upperValue; if (deltaLower < 0){ index = lowerIndex; while ((((index > 0)) && ((lowerValue < (bounds[int((index - 1))] as b2Bound).value)))) { bound = bounds[index]; prevBound = bounds[int((index - 1))]; prevProxyId = prevBound.proxyId; prevProxy = m_proxyPool[prevBound.proxyId]; prevBound.stabbingCount++; if (prevBound.IsUpper() == true){ if (TestOverlap(newValues, prevProxy)){ m_pairManager.AddBufferedPair(proxyId, prevProxyId); }; as3arr = prevProxy.upperBounds; as3int = as3arr[axis]; as3int++; as3arr[axis] = as3int; bound.stabbingCount++; } else { as3arr = prevProxy.lowerBounds; as3int = as3arr[axis]; as3int++; as3arr[axis] = as3int; bound.stabbingCount--; }; as3arr = proxy.lowerBounds; as3int = as3arr[axis]; as3int--; as3arr[axis] = as3int; bound.Swap(prevBound); index--; }; }; if (deltaUpper > 0){ index = upperIndex; while ((((index < (boundCount - 1))) && (((bounds[int((index + 1))] as b2Bound).value <= upperValue)))) { bound = bounds[index]; nextBound = bounds[int((index + 1))]; nextProxyId = nextBound.proxyId; nextProxy = m_proxyPool[nextProxyId]; nextBound.stabbingCount++; if (nextBound.IsLower() == true){ if (TestOverlap(newValues, nextProxy)){ m_pairManager.AddBufferedPair(proxyId, nextProxyId); }; as3arr = nextProxy.lowerBounds; as3int = as3arr[axis]; as3int--; as3arr[axis] = as3int; bound.stabbingCount++; } else { as3arr = nextProxy.upperBounds; as3int = as3arr[axis]; as3int--; as3arr[axis] = as3int; bound.stabbingCount--; }; as3arr = proxy.upperBounds; as3int = as3arr[axis]; as3int++; as3arr[axis] = as3int; bound.Swap(nextBound); index++; }; }; if (deltaLower > 0){ index = lowerIndex; while ((((index < (boundCount - 1))) && (((bounds[int((index + 1))] as b2Bound).value <= lowerValue)))) { bound = bounds[index]; nextBound = bounds[int((index + 1))]; nextProxyId = nextBound.proxyId; nextProxy = m_proxyPool[nextProxyId]; nextBound.stabbingCount--; if (nextBound.IsUpper()){ if (TestOverlap(oldValues, nextProxy)){ m_pairManager.RemoveBufferedPair(proxyId, nextProxyId); }; as3arr = nextProxy.upperBounds; as3int = as3arr[axis]; as3int--; as3arr[axis] = as3int; bound.stabbingCount--; } else { as3arr = nextProxy.lowerBounds; as3int = as3arr[axis]; as3int--; as3arr[axis] = as3int; bound.stabbingCount++; }; as3arr = proxy.lowerBounds; as3int = as3arr[axis]; as3int++; as3arr[axis] = as3int; bound.Swap(nextBound); index++; }; }; if (deltaUpper < 0){ index = upperIndex; while ((((index > 0)) && ((upperValue < (bounds[int((index - 1))] as b2Bound).value)))) { bound = bounds[index]; prevBound = bounds[int((index - 1))]; prevProxyId = prevBound.proxyId; prevProxy = m_proxyPool[prevProxyId]; prevBound.stabbingCount--; if (prevBound.IsLower() == true){ if (TestOverlap(oldValues, prevProxy)){ m_pairManager.RemoveBufferedPair(proxyId, prevProxyId); }; as3arr = prevProxy.lowerBounds; as3int = as3arr[axis]; as3int++; as3arr[axis] = as3int; bound.stabbingCount--; } else { as3arr = prevProxy.upperBounds; as3int = as3arr[axis]; as3int++; as3arr[axis] = as3int; bound.stabbingCount++; }; as3arr = proxy.upperBounds; as3int = as3arr[axis]; as3int--; as3arr[axis] = as3int; bound.Swap(prevBound); index--; }; }; axis++; }; } public static function BinarySearch(bounds:Array, count:int, value:uint):uint{ var mid:int; var bound:b2Bound; var low:int; var high:int = (count - 1); while (low <= high) { mid = ((low + high) / 2); bound = bounds[mid]; if (bound.value > value){ high = (mid - 1); } else { if (bound.value < value){ low = (mid + 1); } else { return (uint(mid)); }; }; }; return (uint(low)); } } }//package Box2D.Collision
Section 16
//b2BufferedPair (Box2D.Collision.b2BufferedPair) package Box2D.Collision { public class b2BufferedPair { public var proxyId1:uint; public var proxyId2:uint; } }//package Box2D.Collision
Section 17
//b2Collision (Box2D.Collision.b2Collision) package Box2D.Collision { import Box2D.Common.Math.*; import Box2D.Collision.Shapes.*; import Box2D.Common.*; public class b2Collision { public static const b2_nullFeature:uint = 0xFF; private static var b2CollidePolyTempVec:b2Vec2 = new b2Vec2(); public static function EdgeSeparation(poly1:b2PolygonShape, xf1:b2XForm, edge1:int, poly2:b2PolygonShape, xf2:b2XForm):Number{ var tMat:b2Mat22; var tVec:b2Vec2; var dot:Number; var count1:int = poly1.m_vertexCount; var vertices1:Array = poly1.m_vertices; var normals1:Array = poly1.m_normals; var count2:int = poly2.m_vertexCount; var vertices2:Array = poly2.m_vertices; tMat = xf1.R; tVec = normals1[edge1]; var normal1WorldX:Number = ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y)); var normal1WorldY:Number = ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y)); tMat = xf2.R; var normal1X:Number = ((tMat.col1.x * normal1WorldX) + (tMat.col1.y * normal1WorldY)); var normal1Y:Number = ((tMat.col2.x * normal1WorldX) + (tMat.col2.y * normal1WorldY)); var index:int; var minDot:Number = Number.MAX_VALUE; var i:int; while (i < count2) { tVec = vertices2[i]; dot = ((tVec.x * normal1X) + (tVec.y * normal1Y)); if (dot < minDot){ minDot = dot; index = i; }; i++; }; tVec = vertices1[edge1]; tMat = xf1.R; var v1X:Number = (xf1.position.x + ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y))); var v1Y:Number = (xf1.position.y + ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y))); tVec = vertices2[index]; tMat = xf2.R; var v2X:Number = (xf2.position.x + ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y))); var v2Y:Number = (xf2.position.y + ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y))); v2X = (v2X - v1X); v2Y = (v2Y - v1Y); var separation:Number = ((v2X * normal1WorldX) + (v2Y * normal1WorldY)); return (separation); } public static function b2TestOverlap(a:b2AABB, b:b2AABB):Boolean{ var t1:b2Vec2 = b.lowerBound; var t2:b2Vec2 = a.upperBound; var d1X:Number = (t1.x - t2.x); var d1Y:Number = (t1.y - t2.y); t1 = a.lowerBound; t2 = b.upperBound; var d2X:Number = (t1.x - t2.x); var d2Y:Number = (t1.y - t2.y); if ((((d1X > 0)) || ((d1Y > 0)))){ return (false); }; if ((((d2X > 0)) || ((d2Y > 0)))){ return (false); }; return (true); } public static function FindIncidentEdge(c:Array, poly1:b2PolygonShape, xf1:b2XForm, edge1:int, poly2:b2PolygonShape, xf2:b2XForm):void{ var tMat:b2Mat22; var tVec:b2Vec2; var tClip:ClipVertex; var dot:Number; var count1:int = poly1.m_vertexCount; var normals1:Array = poly1.m_normals; var count2:int = poly2.m_vertexCount; var vertices2:Array = poly2.m_vertices; var normals2:Array = poly2.m_normals; tMat = xf1.R; tVec = normals1[edge1]; var normal1X:Number = ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y)); var normal1Y:Number = ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y)); tMat = xf2.R; var tX:Number = ((tMat.col1.x * normal1X) + (tMat.col1.y * normal1Y)); normal1Y = ((tMat.col2.x * normal1X) + (tMat.col2.y * normal1Y)); normal1X = tX; var index:int; var minDot:Number = Number.MAX_VALUE; var i:int; while (i < count2) { tVec = normals2[i]; dot = ((normal1X * tVec.x) + (normal1Y * tVec.y)); if (dot < minDot){ minDot = dot; index = i; }; i++; }; var i1:int = index; var i2:int = (((i1 + 1) < count2)) ? (i1 + 1) : 0; tClip = c[0]; tVec = vertices2[i1]; tMat = xf2.R; tClip.v.x = (xf2.position.x + ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y))); tClip.v.y = (xf2.position.y + ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y))); tClip.id.features.referenceEdge = edge1; tClip.id.features.incidentEdge = i1; tClip.id.features.incidentVertex = 0; tClip = c[1]; tVec = vertices2[i2]; tMat = xf2.R; tClip.v.x = (xf2.position.x + ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y))); tClip.v.y = (xf2.position.y + ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y))); tClip.id.features.referenceEdge = edge1; tClip.id.features.incidentEdge = i2; tClip.id.features.incidentVertex = 1; } public static function b2CollidePolygons(manifold:b2Manifold, polyA:b2PolygonShape, xfA:b2XForm, polyB:b2PolygonShape, xfB:b2XForm):void{ var cv:ClipVertex; var poly1:b2PolygonShape; var poly2:b2PolygonShape; var edge1:int; var flip:uint; var np:int; var v12:b2Vec2; var separation:Number; var cp:b2ManifoldPoint; manifold.pointCount = 0; var edgeA:int; var edgeAO:Array = [edgeA]; var separationA:Number = FindMaxSeparation(edgeAO, polyA, xfA, polyB, xfB); edgeA = edgeAO[0]; if (separationA > 0){ return; }; var edgeB:int; var edgeBO:Array = [edgeB]; var separationB:Number = FindMaxSeparation(edgeBO, polyB, xfB, polyA, xfA); edgeB = edgeBO[0]; if (separationB > 0){ return; }; var xf1:b2XForm = new b2XForm(); var xf2:b2XForm = new b2XForm(); var k_relativeTol:Number = 0.98; var k_absoluteTol:Number = 0.001; if (separationB > ((k_relativeTol * separationA) + k_absoluteTol)){ poly1 = polyB; poly2 = polyA; xf1.Set(xfB); xf2.Set(xfA); edge1 = edgeB; flip = 1; } else { poly1 = polyA; poly2 = polyB; xf1.Set(xfA); xf2.Set(xfB); edge1 = edgeA; flip = 0; }; var incidentEdge:Array = [new ClipVertex(), new ClipVertex()]; FindIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2); var count1:int = poly1.m_vertexCount; var vertices1:Array = poly1.m_vertices; var tVec:b2Vec2 = vertices1[edge1]; var v11:b2Vec2 = tVec.Copy(); if ((edge1 + 1) < count1){ tVec = vertices1[int((edge1 + 1))]; v12 = tVec.Copy(); } else { tVec = vertices1[0]; v12 = tVec.Copy(); }; var dv:b2Vec2 = b2Math.SubtractVV(v12, v11); var sideNormal:b2Vec2 = b2Math.b2MulMV(xf1.R, b2Math.SubtractVV(v12, v11)); sideNormal.Normalize(); var frontNormal:b2Vec2 = b2Math.b2CrossVF(sideNormal, 1); v11 = b2Math.b2MulX(xf1, v11); v12 = b2Math.b2MulX(xf1, v12); var frontOffset:Number = b2Math.b2Dot(frontNormal, v11); var sideOffset1:Number = -(b2Math.b2Dot(sideNormal, v11)); var sideOffset2:Number = b2Math.b2Dot(sideNormal, v12); var clipPoints1:Array = [new ClipVertex(), new ClipVertex()]; var clipPoints2:Array = [new ClipVertex(), new ClipVertex()]; np = ClipSegmentToLine(clipPoints1, incidentEdge, sideNormal.Negative(), sideOffset1); if (np < 2){ return; }; np = ClipSegmentToLine(clipPoints2, clipPoints1, sideNormal, sideOffset2); if (np < 2){ return; }; manifold.normal = (flip) ? frontNormal.Negative() : frontNormal.Copy(); var pointCount:int; var i:int; while (i < b2Settings.b2_maxManifoldPoints) { cv = clipPoints2[i]; separation = (b2Math.b2Dot(frontNormal, cv.v) - frontOffset); if (separation <= 0){ cp = manifold.points[pointCount]; cp.separation = separation; cp.localPoint1 = b2Math.b2MulXT(xfA, cv.v); cp.localPoint2 = b2Math.b2MulXT(xfB, cv.v); cp.id.key = cv.id._key; cp.id.features.flip = flip; pointCount++; }; i++; }; manifold.pointCount = pointCount; } public static function FindMaxSeparation(edgeIndex:Array, poly1:b2PolygonShape, xf1:b2XForm, poly2:b2PolygonShape, xf2:b2XForm):Number{ var tVec:b2Vec2; var tMat:b2Mat22; var bestEdge:int; var bestSeparation:Number; var increment:int; var dot:Number; var count1:int = poly1.m_vertexCount; var normals1:Array = poly1.m_normals; tMat = xf2.R; tVec = poly2.m_centroid; var dX:Number = (xf2.position.x + ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y))); var dY:Number = (xf2.position.y + ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y))); tMat = xf1.R; tVec = poly1.m_centroid; dX = (dX - (xf1.position.x + ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y)))); dY = (dY - (xf1.position.y + ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y)))); var dLocal1X:Number = ((dX * xf1.R.col1.x) + (dY * xf1.R.col1.y)); var dLocal1Y:Number = ((dX * xf1.R.col2.x) + (dY * xf1.R.col2.y)); var edge:int; var maxDot:Number = -(Number.MAX_VALUE); var i:int; while (i < count1) { tVec = normals1[i]; dot = ((tVec.x * dLocal1X) + (tVec.y * dLocal1Y)); if (dot > maxDot){ maxDot = dot; edge = i; }; i++; }; var s:Number = EdgeSeparation(poly1, xf1, edge, poly2, xf2); if (s > 0){ return (s); }; var prevEdge:int = (((edge - 1) >= 0)) ? (edge - 1) : (count1 - 1); var sPrev:Number = EdgeSeparation(poly1, xf1, prevEdge, poly2, xf2); if (sPrev > 0){ return (sPrev); }; var nextEdge:int = (((edge + 1) < count1)) ? (edge + 1) : 0; var sNext:Number = EdgeSeparation(poly1, xf1, nextEdge, poly2, xf2); if (sNext > 0){ return (sNext); }; if ((((sPrev > s)) && ((sPrev > sNext)))){ increment = -1; bestEdge = prevEdge; bestSeparation = sPrev; } else { if (sNext > s){ increment = 1; bestEdge = nextEdge; bestSeparation = sNext; } else { edgeIndex[0] = edge; return (s); }; }; while (true) { if (increment == -1){ edge = (((bestEdge - 1) >= 0)) ? (bestEdge - 1) : (count1 - 1); } else { edge = (((bestEdge + 1) < count1)) ? (bestEdge + 1) : 0; }; s = EdgeSeparation(poly1, xf1, edge, poly2, xf2); if (s > 0){ return (s); }; if (s > bestSeparation){ bestEdge = edge; bestSeparation = s; } else { break; }; }; edgeIndex[0] = bestEdge; return (bestSeparation); } public static function ClipSegmentToLine(vOut:Array, vIn:Array, normal:b2Vec2, offset:Number):int{ var cv:ClipVertex; var numOut:int; var vIn0:b2Vec2; var vIn1:b2Vec2; var distance0:Number; var interp:Number; var tVec:b2Vec2; var cv2:ClipVertex; numOut = 0; cv = vIn[0]; vIn0 = cv.v; cv = vIn[1]; vIn1 = cv.v; distance0 = (b2Math.b2Dot(normal, vIn0) - offset); var distance1:Number = (b2Math.b2Dot(normal, vIn1) - offset); if (distance0 <= 0){ var _temp1 = numOut; numOut = (numOut + 1); var _local14 = _temp1; vOut[_local14] = vIn[0]; }; if (distance1 <= 0){ var _temp2 = numOut; numOut = (numOut + 1); _local14 = _temp2; vOut[_local14] = vIn[1]; }; if ((distance0 * distance1) < 0){ interp = (distance0 / (distance0 - distance1)); cv = vOut[numOut]; tVec = cv.v; tVec.x = (vIn0.x + (interp * (vIn1.x - vIn0.x))); tVec.y = (vIn0.y + (interp * (vIn1.y - vIn0.y))); cv = vOut[numOut]; if (distance0 > 0){ cv2 = vIn[0]; cv.id = cv2.id; } else { cv2 = vIn[1]; cv.id = cv2.id; }; numOut++; }; return (numOut); } public static function b2CollideCircles(manifold:b2Manifold, circle1:b2CircleShape, xf1:b2XForm, circle2:b2CircleShape, xf2:b2XForm):void{ var tMat:b2Mat22; var tVec:b2Vec2; var separation:Number; var dist:Number; var a:Number; manifold.pointCount = 0; tMat = xf1.R; tVec = circle1.m_localPosition; var p1X:Number = (xf1.position.x + ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y))); var p1Y:Number = (xf1.position.y + ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y))); tMat = xf2.R; tVec = circle2.m_localPosition; var p2X:Number = (xf2.position.x + ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y))); var p2Y:Number = (xf2.position.y + ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y))); var dX:Number = (p2X - p1X); var dY:Number = (p2Y - p1Y); var distSqr:Number = ((dX * dX) + (dY * dY)); var r1:Number = circle1.m_radius; var r2:Number = circle2.m_radius; var radiusSum:Number = (r1 + r2); if (distSqr > (radiusSum * radiusSum)){ return; }; if (distSqr < Number.MIN_VALUE){ separation = -(radiusSum); manifold.normal.Set(0, 1); } else { dist = Math.sqrt(distSqr); separation = (dist - radiusSum); a = (1 / dist); manifold.normal.x = (a * dX); manifold.normal.y = (a * dY); }; manifold.pointCount = 1; var tPoint:b2ManifoldPoint = manifold.points[0]; tPoint.id.key = 0; tPoint.separation = separation; p1X = (p1X + (r1 * manifold.normal.x)); p1Y = (p1Y + (r1 * manifold.normal.y)); p2X = (p2X - (r2 * manifold.normal.x)); p2Y = (p2Y - (r2 * manifold.normal.y)); var pX:Number = (0.5 * (p1X + p2X)); var pY:Number = (0.5 * (p1Y + p2Y)); var tX:Number = (pX - xf1.position.x); var tY:Number = (pY - xf1.position.y); tPoint.localPoint1.x = ((tX * xf1.R.col1.x) + (tY * xf1.R.col1.y)); tPoint.localPoint1.y = ((tX * xf1.R.col2.x) + (tY * xf1.R.col2.y)); tX = (pX - xf2.position.x); tY = (pY - xf2.position.y); tPoint.localPoint2.x = ((tX * xf2.R.col1.x) + (tY * xf2.R.col1.y)); tPoint.localPoint2.y = ((tX * xf2.R.col2.x) + (tY * xf2.R.col2.y)); } public static function b2CollidePolygonAndCircle(manifold:b2Manifold, polygon:b2PolygonShape, xf1:b2XForm, circle:b2CircleShape, xf2:b2XForm):void{ var tPoint:b2ManifoldPoint; var dX:Number; var dY:Number; var positionX:Number; var positionY:Number; var tVec:b2Vec2; var tMat:b2Mat22; var dist:Number; var pX:Number; var pY:Number; var s:Number; manifold.pointCount = 0; tMat = xf2.R; tVec = circle.m_localPosition; var cX:Number = (xf2.position.x + ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y))); var cY:Number = (xf2.position.y + ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y))); dX = (cX - xf1.position.x); dY = (cY - xf1.position.y); tMat = xf1.R; var cLocalX:Number = ((dX * tMat.col1.x) + (dY * tMat.col1.y)); var cLocalY:Number = ((dX * tMat.col2.x) + (dY * tMat.col2.y)); var normalIndex:int; var separation:Number = -(Number.MAX_VALUE); var radius:Number = circle.m_radius; var vertexCount:int = polygon.m_vertexCount; var vertices:Array = polygon.m_vertices; var normals:Array = polygon.m_normals; var i:int; while (i < vertexCount) { tVec = vertices[i]; dX = (cLocalX - tVec.x); dY = (cLocalY - tVec.y); tVec = normals[i]; s = ((tVec.x * dX) + (tVec.y * dY)); if (s > radius){ return; }; if (s > separation){ separation = s; normalIndex = i; }; i++; }; if (separation < Number.MIN_VALUE){ manifold.pointCount = 1; tVec = normals[normalIndex]; tMat = xf1.R; manifold.normal.x = ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y)); manifold.normal.y = ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y)); tPoint = manifold.points[0]; tPoint.id.features.incidentEdge = normalIndex; tPoint.id.features.incidentVertex = b2_nullFeature; tPoint.id.features.referenceEdge = 0; tPoint.id.features.flip = 0; positionX = (cX - (radius * manifold.normal.x)); positionY = (cY - (radius * manifold.normal.y)); dX = (positionX - xf1.position.x); dY = (positionY - xf1.position.y); tMat = xf1.R; tPoint.localPoint1.x = ((dX * tMat.col1.x) + (dY * tMat.col1.y)); tPoint.localPoint1.y = ((dX * tMat.col2.x) + (dY * tMat.col2.y)); dX = (positionX - xf2.position.x); dY = (positionY - xf2.position.y); tMat = xf2.R; tPoint.localPoint2.x = ((dX * tMat.col1.x) + (dY * tMat.col1.y)); tPoint.localPoint2.y = ((dX * tMat.col2.x) + (dY * tMat.col2.y)); tPoint.separation = (separation - radius); return; }; var vertIndex1:int = normalIndex; var vertIndex2:int = (((vertIndex1 + 1) < vertexCount)) ? (vertIndex1 + 1) : 0; tVec = vertices[vertIndex1]; var tVec2:b2Vec2 = vertices[vertIndex2]; var eX:Number = (tVec2.x - tVec.x); var eY:Number = (tVec2.y - tVec.y); var length:Number = Math.sqrt(((eX * eX) + (eY * eY))); eX = (eX / length); eY = (eY / length); dX = (cLocalX - tVec.x); dY = (cLocalY - tVec.y); var u:Number = ((dX * eX) + (dY * eY)); tPoint = manifold.points[0]; if (u <= 0){ pX = tVec.x; pY = tVec.y; tPoint.id.features.incidentEdge = b2_nullFeature; tPoint.id.features.incidentVertex = vertIndex1; } else { if (u >= length){ pX = tVec2.x; pY = tVec2.y; tPoint.id.features.incidentEdge = b2_nullFeature; tPoint.id.features.incidentVertex = vertIndex2; } else { pX = ((eX * u) + tVec.x); pY = ((eY * u) + tVec.y); tPoint.id.features.incidentEdge = normalIndex; tPoint.id.features.incidentVertex = b2_nullFeature; }; }; dX = (cLocalX - pX); dY = (cLocalY - pY); dist = Math.sqrt(((dX * dX) + (dY * dY))); dX = (dX / dist); dY = (dY / dist); if (dist > radius){ return; }; manifold.pointCount = 1; tMat = xf1.R; manifold.normal.x = ((tMat.col1.x * dX) + (tMat.col2.x * dY)); manifold.normal.y = ((tMat.col1.y * dX) + (tMat.col2.y * dY)); positionX = (cX - (radius * manifold.normal.x)); positionY = (cY - (radius * manifold.normal.y)); dX = (positionX - xf1.position.x); dY = (positionY - xf1.position.y); tMat = xf1.R; tPoint.localPoint1.x = ((dX * tMat.col1.x) + (dY * tMat.col1.y)); tPoint.localPoint1.y = ((dX * tMat.col2.x) + (dY * tMat.col2.y)); dX = (positionX - xf2.position.x); dY = (positionY - xf2.position.y); tMat = xf2.R; tPoint.localPoint2.x = ((dX * tMat.col1.x) + (dY * tMat.col1.y)); tPoint.localPoint2.y = ((dX * tMat.col2.x) + (dY * tMat.col2.y)); tPoint.separation = (dist - radius); tPoint.id.features.referenceEdge = 0; tPoint.id.features.flip = 0; } } }//package Box2D.Collision
Section 18
//b2ContactID (Box2D.Collision.b2ContactID) package Box2D.Collision { public class b2ContactID { public var _key:uint; public var features:Features; public function b2ContactID(){ features = new Features(); super(); features._m_id = this; } public function Set(id:b2ContactID):void{ key = id._key; } public function Copy():b2ContactID{ var id:b2ContactID = new b2ContactID(); id.key = key; return (id); } public function set key(value:uint):void{ _key = value; features._referenceEdge = (_key & 0xFF); features._incidentEdge = (((_key & 0xFF00) >> 8) & 0xFF); features._incidentVertex = (((_key & 0xFF0000) >> 16) & 0xFF); features._flip = (((_key & 4278190080) >> 24) & 0xFF); } public function get key():uint{ return (_key); } } }//package Box2D.Collision
Section 19
//b2ContactPoint (Box2D.Collision.b2ContactPoint) package Box2D.Collision { import Box2D.Common.Math.*; import Box2D.Collision.Shapes.*; public class b2ContactPoint { public var friction:Number; 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 velocity:b2Vec2; public function b2ContactPoint(){ position = new b2Vec2(); velocity = new b2Vec2(); normal = new b2Vec2(); id = new b2ContactID(); super(); } } }//package Box2D.Collision
Section 20
//b2Distance (Box2D.Collision.b2Distance) package Box2D.Collision { import Box2D.Common.Math.*; import Box2D.Collision.Shapes.*; 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(w:b2Vec2, points:Array, pointCount:int):Boolean{ var points_i:b2Vec2; var dX:Number; var dY:Number; var mX:Number; var mY:Number; var k_tolerance:Number = (100 * Number.MIN_VALUE); var i:int; while (i < pointCount) { points_i = points[i]; dX = Math.abs((w.x - points_i.x)); dY = Math.abs((w.y - points_i.y)); mX = Math.max(Math.abs(w.x), Math.abs(points_i.x)); mY = Math.max(Math.abs(w.y), Math.abs(points_i.y)); if ((((dX < (k_tolerance * (mX + 1)))) && ((dY < (k_tolerance * (mY + 1)))))){ return (true); }; i++; }; return (false); } public static function DistanceGeneric(x1:b2Vec2, x2:b2Vec2, shape1, xf1:b2XForm, shape2, xf2:b2XForm):Number{ var tVec:b2Vec2; var vX:Number; var vY:Number; var w1:b2Vec2; var w2:b2Vec2; var wX:Number; var wY:Number; var vw:Number; var maxSqr:Number; var i:int; var p1s:Array = s_p1s; var p2s:Array = s_p2s; var points:Array = s_points; var pointCount:int; x1.SetV(shape1.GetFirstVertex(xf1)); x2.SetV(shape2.GetFirstVertex(xf2)); var vSqr:Number = 0; var maxIterations = 20; var iter:int; while (iter < maxIterations) { vX = (x2.x - x1.x); vY = (x2.y - x1.y); w1 = shape1.Support(xf1, vX, vY); w2 = shape2.Support(xf2, -(vX), -(vY)); vSqr = ((vX * vX) + (vY * vY)); wX = (w2.x - w1.x); wY = (w2.y - w1.y); vw = ((vX * wX) + (vY * wY)); if ((vSqr - vw) <= (0.01 * vSqr)){ if (pointCount == 0){ x1.SetV(w1); x2.SetV(w2); }; g_GJK_Iterations = iter; return (Math.sqrt(vSqr)); }; switch (pointCount){ case 0: tVec = p1s[0]; tVec.SetV(w1); tVec = p2s[0]; tVec.SetV(w2); tVec = points[0]; tVec.x = wX; tVec.y = wY; x1.SetV(p1s[0]); x2.SetV(p2s[0]); pointCount++; break; case 1: tVec = p1s[1]; tVec.SetV(w1); tVec = p2s[1]; tVec.SetV(w2); tVec = points[1]; tVec.x = wX; tVec.y = wY; pointCount = ProcessTwo(x1, x2, p1s, p2s, points); break; case 2: tVec = p1s[2]; tVec.SetV(w1); tVec = p2s[2]; tVec.SetV(w2); tVec = points[2]; tVec.x = wX; tVec.y = wY; pointCount = ProcessThree(x1, x2, p1s, p2s, points); break; }; if (pointCount == 3){ g_GJK_Iterations = iter; return (0); }; maxSqr = -(Number.MAX_VALUE); i = 0; while (i < pointCount) { tVec = points[i]; maxSqr = b2Math.b2Max(maxSqr, ((tVec.x * tVec.x) + (tVec.y * tVec.y))); i++; }; if ((((pointCount == 3)) || ((vSqr <= ((100 * Number.MIN_VALUE) * maxSqr))))){ g_GJK_Iterations = iter; vX = (x2.x - x1.x); vY = (x2.y - x1.y); vSqr = ((vX * vX) + (vY * vY)); return (Math.sqrt(vSqr)); }; iter++; }; g_GJK_Iterations = maxIterations; return (Math.sqrt(vSqr)); } public static function DistanceCC(x1:b2Vec2, x2:b2Vec2, circle1:b2CircleShape, xf1:b2XForm, circle2:b2CircleShape, xf2:b2XForm):Number{ var tMat:b2Mat22; var tVec:b2Vec2; var dLen:Number; var distance:Number; tMat = xf1.R; tVec = circle1.m_localPosition; var p1X:Number = (xf1.position.x + ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y))); var p1Y:Number = (xf1.position.y + ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y))); tMat = xf2.R; tVec = circle2.m_localPosition; var p2X:Number = (xf2.position.x + ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y))); var p2Y:Number = (xf2.position.y + ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y))); var dX:Number = (p2X - p1X); var dY:Number = (p2Y - p1Y); var dSqr:Number = ((dX * dX) + (dY * dY)); var r1:Number = (circle1.m_radius - b2Settings.b2_toiSlop); var r2:Number = (circle2.m_radius - b2Settings.b2_toiSlop); var r:Number = (r1 + r2); if (dSqr > (r * r)){ dLen = Math.sqrt(dSqr); dX = (dX / dLen); dY = (dY / dLen); distance = (dLen - r); x1.x = (p1X + (r1 * dX)); x1.y = (p1Y + (r1 * dY)); x2.x = (p2X - (r2 * dX)); x2.y = (p2Y - (r2 * dY)); return (distance); }; if (dSqr > (Number.MIN_VALUE * Number.MIN_VALUE)){ dLen = Math.sqrt(dSqr); dX = (dX / dLen); dY = (dY / dLen); x1.x = (p1X + (r1 * dX)); x1.y = (p1Y + (r1 * dY)); x2.x = x1.x; x2.y = x1.y; return (0); }; x1.x = p1X; x1.y = p1Y; x2.x = x1.x; x2.y = x1.y; return (0); } public static function ProcessThree(x1:b2Vec2, x2:b2Vec2, p1s:Array, p2s:Array, points:Array):int{ var points_0:b2Vec2; var points_1:b2Vec2; var points_2:b2Vec2; var p1s_0:b2Vec2; var p1s_1:b2Vec2; var p1s_2:b2Vec2; var p2s_0:b2Vec2; var p2s_1:b2Vec2; var lambda:Number; points_0 = points[0]; points_1 = points[1]; points_2 = points[2]; p1s_0 = p1s[0]; p1s_1 = p1s[1]; p1s_2 = p1s[2]; p2s_0 = p2s[0]; p2s_1 = p2s[1]; var p2s_2:b2Vec2 = p2s[2]; var aX:Number = points_0.x; var aY:Number = points_0.y; var bX:Number = points_1.x; var bY:Number = points_1.y; var cX:Number = points_2.x; var cY:Number = points_2.y; var abX:Number = (bX - aX); var abY:Number = (bY - aY); var acX:Number = (cX - aX); var acY:Number = (cY - aY); var bcX:Number = (cX - bX); var bcY:Number = (cY - bY); var sn:Number = -(((aX * abX) + (aY * abY))); var sd:Number = ((bX * abX) + (bY * abY)); var tn:Number = -(((aX * acX) + (aY * acY))); var td:Number = ((cX * acX) + (cY * acY)); var un:Number = -(((bX * bcX) + (bY * bcY))); var ud:Number = ((cX * bcX) + (cY * bcY)); if ((((td <= 0)) && ((ud <= 0)))){ x1.SetV(p1s_2); x2.SetV(p2s_2); p1s_0.SetV(p1s_2); p2s_0.SetV(p2s_2); points_0.SetV(points_2); return (1); }; var n:Number = ((abX * acY) - (abY * acX)); var vc:Number = (n * ((aX * bY) - (aY * bX))); var va:Number = (n * ((bX * cY) - (bY * cX))); if ((((((((va <= 0)) && ((un >= 0)))) && ((ud >= 0)))) && (((un + ud) > 0)))){ lambda = (un / (un + ud)); x1.x = (p1s_1.x + (lambda * (p1s_2.x - p1s_1.x))); x1.y = (p1s_1.y + (lambda * (p1s_2.y - p1s_1.y))); x2.x = (p2s_1.x + (lambda * (p2s_2.x - p2s_1.x))); x2.y = (p2s_1.y + (lambda * (p2s_2.y - p2s_1.y))); p1s_0.SetV(p1s_2); p2s_0.SetV(p2s_2); points_0.SetV(points_2); return (2); }; var vb:Number = (n * ((cX * aY) - (cY * aX))); if ((((((((vb <= 0)) && ((tn >= 0)))) && ((td >= 0)))) && (((tn + td) > 0)))){ lambda = (tn / (tn + td)); x1.x = (p1s_0.x + (lambda * (p1s_2.x - p1s_0.x))); x1.y = (p1s_0.y + (lambda * (p1s_2.y - p1s_0.y))); x2.x = (p2s_0.x + (lambda * (p2s_2.x - p2s_0.x))); x2.y = (p2s_0.y + (lambda * (p2s_2.y - p2s_0.y))); p1s_1.SetV(p1s_2); p2s_1.SetV(p2s_2); points_1.SetV(points_2); return (2); }; var denom:Number = ((va + vb) + vc); denom = (1 / denom); var u:Number = (va * denom); var v:Number = (vb * denom); var w:Number = ((1 - u) - v); x1.x = (((u * p1s_0.x) + (v * p1s_1.x)) + (w * p1s_2.x)); x1.y = (((u * p1s_0.y) + (v * p1s_1.y)) + (w * p1s_2.y)); x2.x = (((u * p2s_0.x) + (v * p2s_1.x)) + (w * p2s_2.x)); x2.y = (((u * p2s_0.y) + (v * p2s_1.y)) + (w * p2s_2.y)); return (3); } public static function DistancePC(x1:b2Vec2, x2:b2Vec2, polygon:b2PolygonShape, xf1:b2XForm, circle:b2CircleShape, xf2:b2XForm):Number{ var tMat:b2Mat22; var tVec:b2Vec2; var dX:Number; var dY:Number; var dLen:Number; var point:b2Point = gPoint; tVec = circle.m_localPosition; tMat = xf2.R; point.p.x = (xf2.position.x + ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y))); point.p.y = (xf2.position.y + ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y))); var distance:Number = DistanceGeneric(x1, x2, polygon, xf1, point, b2Math.b2XForm_identity); var r:Number = (circle.m_radius - b2Settings.b2_toiSlop); if (distance > r){ distance = (distance - r); dX = (x2.x - x1.x); dY = (x2.y - x1.y); dLen = Math.sqrt(((dX * dX) + (dY * dY))); dX = (dX / dLen); dY = (dY / dLen); x2.x = (x2.x - (r * dX)); x2.y = (x2.y - (r * dY)); } else { distance = 0; x2.x = x1.x; x2.y = x1.y; }; return (distance); } public static function Distance(x1:b2Vec2, x2:b2Vec2, shape1:b2Shape, xf1:b2XForm, shape2:b2Shape, xf2:b2XForm):Number{ var type1:int = shape1.m_type; var type2:int = shape2.m_type; if ((((type1 == b2Shape.e_circleShape)) && ((type2 == b2Shape.e_circleShape)))){ return (DistanceCC(x1, x2, (shape1 as b2CircleShape), xf1, (shape2 as b2CircleShape), xf2)); }; if ((((type1 == b2Shape.e_polygonShape)) && ((type2 == b2Shape.e_circleShape)))){ return (DistancePC(x1, x2, (shape1 as b2PolygonShape), xf1, (shape2 as b2CircleShape), xf2)); }; if ((((type1 == b2Shape.e_circleShape)) && ((type2 == b2Shape.e_polygonShape)))){ return (DistancePC(x2, x1, (shape2 as b2PolygonShape), xf2, (shape1 as b2CircleShape), xf1)); }; if ((((type1 == b2Shape.e_polygonShape)) && ((type2 == b2Shape.e_polygonShape)))){ return (DistanceGeneric(x1, x2, (shape1 as b2PolygonShape), xf1, (shape2 as b2PolygonShape), xf2)); }; return (0); } public static function ProcessTwo(x1:b2Vec2, x2:b2Vec2, p1s:Array, p2s:Array, points:Array):int{ var p1s_1:b2Vec2; var p2s_0:b2Vec2; var p2s_1:b2Vec2; var lambda:Number; var points_0:b2Vec2 = points[0]; var points_1:b2Vec2 = points[1]; var p1s_0:b2Vec2 = p1s[0]; p1s_1 = p1s[1]; p2s_0 = p2s[0]; p2s_1 = p2s[1]; var rX:Number = -(points_1.x); var rY:Number = -(points_1.y); var dX:Number = (points_0.x - points_1.x); var dY:Number = (points_0.y - points_1.y); var length:Number = Math.sqrt(((dX * dX) + (dY * dY))); dX = (dX / length); dY = (dY / length); lambda = ((rX * dX) + (rY * dY)); if ((((lambda <= 0)) || ((length < Number.MIN_VALUE)))){ x1.SetV(p1s_1); x2.SetV(p2s_1); p1s_0.SetV(p1s_1); p2s_0.SetV(p2s_1); points_0.SetV(points_1); return (1); }; lambda = (lambda / length); x1.x = (p1s_1.x + (lambda * (p1s_0.x - p1s_1.x))); x1.y = (p1s_1.y + (lambda * (p1s_0.y - p1s_1.y))); x2.x = (p2s_1.x + (lambda * (p2s_0.x - p2s_1.x))); x2.y = (p2s_1.y + (lambda * (p2s_0.y - p2s_1.y))); return (2); } } }//package Box2D.Collision
Section 21
//b2Manifold (Box2D.Collision.b2Manifold) package Box2D.Collision { import Box2D.Common.Math.*; import Box2D.Common.*; public class b2Manifold { public var pointCount:int;// = 0 public var normal:b2Vec2; public var points:Array; public function b2Manifold(){ super(); points = new Array(b2Settings.b2_maxManifoldPoints); var i:int; while (i < b2Settings.b2_maxManifoldPoints) { points[i] = new b2ManifoldPoint(); i++; }; normal = new b2Vec2(); } public function Set(m:b2Manifold):void{ pointCount = m.pointCount; var i:int; while (i < b2Settings.b2_maxManifoldPoints) { (points[i] as b2ManifoldPoint).Set(m.points[i]); i++; }; normal.SetV(m.normal); } public function Reset():void{ var i:int; while (i < b2Settings.b2_maxManifoldPoints) { (points[i] as b2ManifoldPoint).Reset(); i++; }; normal.SetZero(); pointCount = 0; } } }//package Box2D.Collision
Section 22
//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(m:b2ManifoldPoint):void{ localPoint1.SetV(m.localPoint1); localPoint2.SetV(m.localPoint2); separation = m.separation; normalImpulse = m.normalImpulse; tangentImpulse = m.tangentImpulse; id.key = m.id.key; } public function Reset():void{ localPoint1.SetZero(); localPoint2.SetZero(); separation = 0; normalImpulse = 0; tangentImpulse = 0; id.key = 0; } } }//package Box2D.Collision
Section 23
//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 24
//b2Pair (Box2D.Collision.b2Pair) package Box2D.Collision { import Box2D.Common.*; public class b2Pair { public var proxyId1:uint; public var userData;// = null public var proxyId2:uint; public var status:uint; public var next:uint; public static var e_pairFinal:uint = 4; public static var b2_tableMask:int = (b2_tableCapacity - 1); public static var e_pairRemoved:uint = 2; public static var b2_nullPair:uint = b2Settings.USHRT_MAX; public static var e_pairBuffered:uint = 1; public static var b2_nullProxy:uint = b2Settings.USHRT_MAX; public static var b2_tableCapacity:int = b2Settings.b2_maxPairs; 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 25
//b2PairCallback (Box2D.Collision.b2PairCallback) package Box2D.Collision { public class b2PairCallback { public function PairRemoved(proxyUserData1, proxyUserData2, pairUserData):void{ } public function PairAdded(proxyUserData1, proxyUserData2){ return (null); } } }//package Box2D.Collision
Section 26
//b2PairManager (Box2D.Collision.b2PairManager) package Box2D.Collision { import Box2D.Common.Math.*; import Box2D.Common.*; public class b2PairManager { public var m_pairCount:int; public var m_pairBuffer:Array; public var m_hashTable:Array; public var m_callback:b2PairCallback; public var m_pairs:Array; public var m_pairBufferCount:int; public var m_broadPhase:b2BroadPhase; public var m_freePair:uint; public function b2PairManager(){ var i:uint; super(); m_hashTable = new Array(b2Pair.b2_tableCapacity); i = 0; while (i < b2Pair.b2_tableCapacity) { m_hashTable[i] = b2Pair.b2_nullPair; i++; }; m_pairs = new Array(b2Settings.b2_maxPairs); i = 0; while (i < b2Settings.b2_maxPairs) { m_pairs[i] = new b2Pair(); i++; }; m_pairBuffer = new Array(b2Settings.b2_maxPairs); i = 0; while (i < b2Settings.b2_maxPairs) { m_pairBuffer[i] = new b2BufferedPair(); i++; }; i = 0; while (i < b2Settings.b2_maxPairs) { m_pairs[i].proxyId1 = b2Pair.b2_nullProxy; m_pairs[i].proxyId2 = b2Pair.b2_nullProxy; m_pairs[i].userData = null; m_pairs[i].status = 0; m_pairs[i].next = (i + 1); i++; }; m_pairs[int((b2Settings.b2_maxPairs - 1))].next = b2Pair.b2_nullPair; m_pairCount = 0; m_pairBufferCount = 0; } private function FindHash(proxyId1:uint, proxyId2:uint, hash:uint):b2Pair{ var pair:b2Pair; var index:uint = m_hashTable[hash]; pair = m_pairs[index]; while (((!((index == b2Pair.b2_nullPair))) && ((Equals(pair, proxyId1, proxyId2) == false)))) { index = pair.next; pair = m_pairs[index]; }; if (index == b2Pair.b2_nullPair){ return (null); }; return (pair); } private function Find(proxyId1:uint, proxyId2:uint):b2Pair{ var temp:uint; if (proxyId1 > proxyId2){ temp = proxyId1; proxyId1 = proxyId2; proxyId2 = temp; }; var hash:uint = (Hash(proxyId1, proxyId2) & b2Pair.b2_tableMask); return (FindHash(proxyId1, proxyId2, hash)); } private function ValidateBuffer():void{ } public function Commit():void{ var bufferedPair:b2BufferedPair; var i:int; var pair:b2Pair; var proxy1:b2Proxy; var proxy2:b2Proxy; var removeCount:int; var proxies:Array = m_broadPhase.m_proxyPool; i = 0; while (i < m_pairBufferCount) { bufferedPair = m_pairBuffer[i]; pair = Find(bufferedPair.proxyId1, bufferedPair.proxyId2); pair.ClearBuffered(); proxy1 = proxies[pair.proxyId1]; proxy2 = proxies[pair.proxyId2]; if (pair.IsRemoved()){ if (pair.IsFinal() == true){ m_callback.PairRemoved(proxy1.userData, proxy2.userData, pair.userData); }; bufferedPair = m_pairBuffer[removeCount]; bufferedPair.proxyId1 = pair.proxyId1; bufferedPair.proxyId2 = pair.proxyId2; removeCount++; } else { if (pair.IsFinal() == false){ pair.userData = m_callback.PairAdded(proxy1.userData, proxy2.userData); pair.SetFinal(); }; }; i++; }; i = 0; while (i < removeCount) { bufferedPair = m_pairBuffer[i]; RemovePair(bufferedPair.proxyId1, bufferedPair.proxyId2); i++; }; m_pairBufferCount = 0; if (b2BroadPhase.s_validate){ ValidateTable(); }; } public function RemoveBufferedPair(proxyId1:int, proxyId2:int):void{ var bufferedPair:b2BufferedPair; var pair:b2Pair = Find(proxyId1, proxyId2); if (pair == null){ return; }; if (pair.IsBuffered() == false){ pair.SetBuffered(); bufferedPair = m_pairBuffer[m_pairBufferCount]; bufferedPair.proxyId1 = pair.proxyId1; bufferedPair.proxyId2 = pair.proxyId2; m_pairBufferCount++; }; pair.SetRemoved(); if (b2BroadPhase.s_validate){ ValidateBuffer(); }; } private function RemovePair(proxyId1:uint, proxyId2:uint){ var pair:b2Pair; var temp:uint; var index:uint; var userData:*; if (proxyId1 > proxyId2){ temp = proxyId1; proxyId1 = proxyId2; proxyId2 = temp; }; var hash:uint = (Hash(proxyId1, proxyId2) & b2Pair.b2_tableMask); var node:uint = m_hashTable[hash]; var pNode:b2Pair; while (node != b2Pair.b2_nullPair) { if (Equals(m_pairs[node], proxyId1, proxyId2)){ index = node; pair = m_pairs[node]; if (pNode){ pNode.next = pair.next; } else { m_hashTable[hash] = pair.next; }; pair = m_pairs[index]; userData = pair.userData; pair.next = m_freePair; pair.proxyId1 = b2Pair.b2_nullProxy; pair.proxyId2 = b2Pair.b2_nullProxy; pair.userData = null; pair.status = 0; m_freePair = index; m_pairCount--; return (userData); } else { pNode = m_pairs[node]; node = pNode.next; }; }; return (null); } public function Initialize(broadPhase:b2BroadPhase, callback:b2PairCallback):void{ m_broadPhase = broadPhase; m_callback = callback; } public function AddBufferedPair(proxyId1:int, proxyId2:int):void{ var bufferedPair:b2BufferedPair; var pair:b2Pair = AddPair(proxyId1, proxyId2); if (pair.IsBuffered() == false){ pair.SetBuffered(); bufferedPair = m_pairBuffer[m_pairBufferCount]; bufferedPair.proxyId1 = pair.proxyId1; bufferedPair.proxyId2 = pair.proxyId2; m_pairBufferCount++; }; pair.ClearRemoved(); if (b2BroadPhase.s_validate){ ValidateBuffer(); }; } private function AddPair(proxyId1:uint, proxyId2:uint):b2Pair{ var temp:uint; if (proxyId1 > proxyId2){ temp = proxyId1; proxyId1 = proxyId2; proxyId2 = temp; }; var hash:uint = (Hash(proxyId1, proxyId2) & b2Pair.b2_tableMask); var pair = FindHash(proxyId1, proxyId2, hash); if (pair != null){ return (pair); }; var pIndex:uint = m_freePair; pair = m_pairs[pIndex]; m_freePair = pair.next; pair.proxyId1 = proxyId1; pair.proxyId2 = proxyId2; pair.status = 0; pair.userData = null; pair.next = m_hashTable[hash]; m_hashTable[hash] = pIndex; m_pairCount++; return (pair); } private function ValidateTable():void{ } public static function EqualsPair(pair1:b2BufferedPair, pair2:b2BufferedPair):Boolean{ return ((((pair1.proxyId1 == pair2.proxyId1)) && ((pair1.proxyId2 == pair2.proxyId2)))); } public static function Hash(proxyId1:uint, proxyId2:uint):uint{ var key:uint = (((proxyId2 << 16) & 4294901760) | proxyId1); key = (~(key) + ((key << 15) & 4294934528)); key = (key ^ ((key >> 12) & 1048575)); key = (key + ((key << 2) & 4294967292)); key = (key ^ ((key >> 4) & 268435455)); key = (key * 2057); key = (key ^ ((key >> 16) & 0xFFFF)); return (key); } public static function Equals(pair:b2Pair, proxyId1:uint, proxyId2:uint):Boolean{ return ((((pair.proxyId1 == proxyId1)) && ((pair.proxyId2 == proxyId2)))); } } }//package Box2D.Collision
Section 27
//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(xf:b2XForm):b2Vec2{ return (p); } public function Support(xf:b2XForm, vX:Number, vY:Number):b2Vec2{ return (p); } } }//package Box2D.Collision
Section 28
//b2Proxy (Box2D.Collision.b2Proxy) package Box2D.Collision { public class b2Proxy { public var overlapCount:uint; public var userData;// = null public var lowerBounds:Array; public var upperBounds:Array; public var timeStamp:uint; public function b2Proxy(){ lowerBounds = [uint(0), uint(0)]; upperBounds = [uint(0), uint(0)]; super(); } public function GetNext():uint{ return (lowerBounds[0]); } public function IsValid():Boolean{ return (!((overlapCount == b2BroadPhase.b2_invalid))); } public function SetNext(next:uint):void{ lowerBounds[0] = (next & 0xFFFF); } } }//package Box2D.Collision
Section 29
//b2Segment (Box2D.Collision.b2Segment) package Box2D.Collision { import Box2D.Common.Math.*; import Box2D.Common.*; public class b2Segment { public var p1:b2Vec2; public var p2:b2Vec2; public function b2Segment(){ p1 = new b2Vec2(); p2 = new b2Vec2(); super(); } public function TestSegment(lambda:Array, normal:b2Vec2, segment:b2Segment, maxLambda:Number):Boolean{ var bX:Number; var bY:Number; var a:Number; var mu2:Number; var nLen:Number; var s:b2Vec2 = segment.p1; var rX:Number = (segment.p2.x - s.x); var rY:Number = (segment.p2.y - s.y); var dX:Number = (p2.x - p1.x); var dY:Number = (p2.y - p1.y); var nX:Number = dY; var nY:Number = -(dX); var k_slop:Number = (100 * Number.MIN_VALUE); var denom:Number = -(((rX * nX) + (rY * nY))); if (denom > k_slop){ bX = (s.x - p1.x); bY = (s.y - p1.y); a = ((bX * nX) + (bY * nY)); if ((((0 <= a)) && ((a <= (maxLambda * denom))))){ mu2 = ((-(rX) * bY) + (rY * bX)); if (((((-(k_slop) * denom) <= mu2)) && ((mu2 <= (denom * (1 + k_slop)))))){ a = (a / denom); nLen = Math.sqrt(((nX * nX) + (nY * nY))); nX = (nX / nLen); nY = (nY / nLen); lambda[0] = a; normal.Set(nX, nY); return (true); }; }; }; return (false); } } }//package Box2D.Collision
Section 30
//b2TimeOfImpact (Box2D.Collision.b2TimeOfImpact) package Box2D.Collision { import Box2D.Common.Math.*; import Box2D.Collision.Shapes.*; import Box2D.Common.*; public class b2TimeOfImpact { public static var s_xf1:b2XForm = new b2XForm(); public static var s_xf2:b2XForm = new b2XForm(); public static var s_p1:b2Vec2 = new b2Vec2(); public static var s_p2:b2Vec2 = new b2Vec2(); public static function TimeOfImpact(shape1:b2Shape, sweep1:b2Sweep, shape2:b2Shape, sweep2:b2Sweep):Number{ var math1:Number; var math2:Number; var t:Number; var xf1:b2XForm; var xf2:b2XForm; var nLen:Number; var approachVelocityBound:Number; var dAlpha:Number; var newAlpha:Number; var r1:Number = shape1.m_sweepRadius; var r2:Number = shape2.m_sweepRadius; var t0:Number = sweep1.t0; var v1X:Number = (sweep1.c.x - sweep1.c0.x); var v1Y:Number = (sweep1.c.y - sweep1.c0.y); var v2X:Number = (sweep2.c.x - sweep2.c0.x); var v2Y:Number = (sweep2.c.y - sweep2.c0.y); var omega1:Number = (sweep1.a - sweep1.a0); var omega2:Number = (sweep2.a - sweep2.a0); var alpha:Number = 0; var p1:b2Vec2 = s_p1; var p2:b2Vec2 = s_p2; var k_maxIterations = 20; var iter:int; var normalX:Number = 0; var normalY:Number = 0; var distance:Number = 0; var targetDistance:Number = 0; while (true) { t = (((1 - alpha) * t0) + alpha); xf1 = s_xf1; xf2 = s_xf2; sweep1.GetXForm(xf1, t); sweep2.GetXForm(xf2, t); distance = b2Distance.Distance(p1, p2, shape1, xf1, shape2, xf2); if (iter == 0){ if (distance > (2 * b2Settings.b2_toiSlop)){ targetDistance = (1.5 * b2Settings.b2_toiSlop); } else { math1 = (0.05 * b2Settings.b2_toiSlop); math2 = (distance - (0.5 * b2Settings.b2_toiSlop)); targetDistance = ((math1 > math2)) ? math1 : math2; }; }; if (((((distance - targetDistance) < (0.05 * b2Settings.b2_toiSlop))) || ((iter == k_maxIterations)))){ break; }; normalX = (p2.x - p1.x); normalY = (p2.y - p1.y); nLen = Math.sqrt(((normalX * normalX) + (normalY * normalY))); normalX = (normalX / nLen); normalY = (normalY / nLen); approachVelocityBound = ((((normalX * (v1X - v2X)) + (normalY * (v1Y - v2Y))) + (((omega1 < 0)) ? -(omega1) : omega1 * r1)) + (((omega2 < 0)) ? -(omega2) : omega2 * r2)); if (approachVelocityBound == 0){ alpha = 1; break; }; dAlpha = ((distance - targetDistance) / approachVelocityBound); newAlpha = (alpha + dAlpha); if ((((newAlpha < 0)) || ((1 < newAlpha)))){ alpha = 1; break; }; if (newAlpha < ((1 + (100 * Number.MIN_VALUE)) * alpha)){ break; }; alpha = newAlpha; iter++; }; return (alpha); } } }//package Box2D.Collision
Section 31
//ClipVertex (Box2D.Collision.ClipVertex) package Box2D.Collision { import Box2D.Common.Math.*; public class ClipVertex { public var id:b2ContactID; public var v:b2Vec2; public function ClipVertex(){ v = new b2Vec2(); id = new b2ContactID(); super(); } } }//package Box2D.Collision
Section 32
//Features (Box2D.Collision.Features) package Box2D.Collision { public class Features { public var _referenceEdge:int; public var _incidentEdge:int; public var _flip:int; public var _incidentVertex:int; public var _m_id:b2ContactID; public function get referenceEdge():int{ return (_referenceEdge); } public function set incidentVertex(value:int):void{ _incidentVertex = value; _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(value:int):void{ _referenceEdge = value; _m_id._key = ((_m_id._key & 4294967040) | (_referenceEdge & 0xFF)); } public function get incidentVertex():int{ return (_incidentVertex); } public function set flip(value:int):void{ _flip = value; _m_id._key = ((_m_id._key & 0xFFFFFF) | ((_flip << 24) & 4278190080)); } public function set incidentEdge(value:int):void{ _incidentEdge = value; _m_id._key = ((_m_id._key & 4294902015) | ((_incidentEdge << 8) & 0xFF00)); } } }//package Box2D.Collision
Section 33
//b2Mat22 (Box2D.Common.Math.b2Mat22) package Box2D.Common.Math { import Box2D.Common.*; public class b2Mat22 { public var col1:b2Vec2; public var col2:b2Vec2; public function b2Mat22(angle:Number=0, c1:b2Vec2=null, c2:b2Vec2=null){ var c:Number; var s:Number; col1 = new b2Vec2(); col2 = new b2Vec2(); super(); if (((!((c1 == null))) && (!((c2 == null))))){ col1.SetV(c1); col2.SetV(c2); } else { c = Math.cos(angle); s = Math.sin(angle); col1.x = c; col2.x = -(s); col1.y = s; col2.y = c; }; } public function SetIdentity():void{ col1.x = 1; col2.x = 0; col1.y = 0; col2.y = 1; } public function SetVV(c1:b2Vec2, c2:b2Vec2):void{ col1.SetV(c1); col2.SetV(c2); } public function Set(angle:Number):void{ var c:Number; c = Math.cos(angle); var s:Number = Math.sin(angle); col1.x = c; col2.x = -(s); col1.y = s; col2.y = c; } public function SetZero():void{ col1.x = 0; col2.x = 0; col1.y = 0; col2.y = 0; } public function SetM(m:b2Mat22):void{ col1.SetV(m.col1); col2.SetV(m.col2); } public function AddM(m:b2Mat22):void{ col1.x = (col1.x + m.col1.x); col1.y = (col1.y + m.col1.y); col2.x = (col2.x + m.col2.x); col2.y = (col2.y + m.col2.y); } public function Abs():void{ col1.Abs(); col2.Abs(); } public function Copy():b2Mat22{ return (new b2Mat22(0, col1, col2)); } public function Invert(out:b2Mat22):b2Mat22{ var a:Number; var c:Number; var det:Number; a = col1.x; var b:Number = col2.x; c = col1.y; var d:Number = col2.y; det = ((a * d) - (b * c)); det = (1 / det); out.col1.x = (det * d); out.col2.x = (-(det) * b); out.col1.y = (-(det) * c); out.col2.y = (det * a); return (out); } public function GetAngle():Number{ return (Math.atan2(col1.y, col1.x)); } public function Solve(out:b2Vec2, bX:Number, bY:Number):b2Vec2{ var a11:Number = col1.x; var a12:Number = col2.x; var a21:Number = col1.y; var a22:Number = col2.y; var det:Number = ((a11 * a22) - (a12 * a21)); det = (1 / det); out.x = (det * ((a22 * bX) - (a12 * bY))); out.y = (det * ((a11 * bY) - (a21 * bX))); return (out); } } }//package Box2D.Common.Math
Section 34
//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(a:b2Vec2, s:Number):b2Vec2{ var v:b2Vec2 = new b2Vec2((s * a.y), (-(s) * a.x)); return (v); } public static function AddVV(a:b2Vec2, b:b2Vec2):b2Vec2{ var v:b2Vec2 = new b2Vec2((a.x + b.x), (a.y + b.y)); return (v); } public static function b2IsValid(x:Number):Boolean{ return (isFinite(x)); } public static function b2MinV(a:b2Vec2, b:b2Vec2):b2Vec2{ var c:b2Vec2 = new b2Vec2(b2Min(a.x, b.x), b2Min(a.y, b.y)); return (c); } public static function b2MulX(T:b2XForm, v:b2Vec2):b2Vec2{ var a:b2Vec2; a = b2MulMV(T.R, v); a.x = (a.x + T.position.x); a.y = (a.y + T.position.y); return (a); } public static function b2DistanceSquared(a:b2Vec2, b:b2Vec2):Number{ var cX:Number = (a.x - b.x); var cY:Number = (a.y - b.y); return (((cX * cX) + (cY * cY))); } public static function b2Swap(a:Array, b:Array):void{ var tmp:* = a[0]; a[0] = b[0]; b[0] = tmp; } public static function b2AbsM(A:b2Mat22):b2Mat22{ var B:b2Mat22 = new b2Mat22(0, b2AbsV(A.col1), b2AbsV(A.col2)); return (B); } public static function SubtractVV(a:b2Vec2, b:b2Vec2):b2Vec2{ var v:b2Vec2 = new b2Vec2((a.x - b.x), (a.y - b.y)); return (v); } public static function b2MulXT(T:b2XForm, v:b2Vec2):b2Vec2{ var a:b2Vec2; var tX:Number; a = SubtractVV(v, T.position); tX = ((a.x * T.R.col1.x) + (a.y * T.R.col1.y)); a.y = ((a.x * T.R.col2.x) + (a.y * T.R.col2.y)); a.x = tX; return (a); } public static function b2Abs(a:Number):Number{ return (((a > 0)) ? a : -(a)); } public static function b2Clamp(a:Number, low:Number, high:Number):Number{ return (b2Max(low, b2Min(a, high))); } public static function b2AbsV(a:b2Vec2):b2Vec2{ var b:b2Vec2 = new b2Vec2(b2Abs(a.x), b2Abs(a.y)); return (b); } public static function MulFV(s:Number, a:b2Vec2):b2Vec2{ var v:b2Vec2 = new b2Vec2((s * a.x), (s * a.y)); return (v); } public static function b2CrossVV(a:b2Vec2, b:b2Vec2):Number{ return (((a.x * b.y) - (a.y * b.x))); } public static function b2Dot(a:b2Vec2, b:b2Vec2):Number{ return (((a.x * b.x) + (a.y * b.y))); } public static function b2CrossFV(s:Number, a:b2Vec2):b2Vec2{ var v:b2Vec2 = new b2Vec2((-(s) * a.y), (s * a.x)); return (v); } public static function AddMM(A:b2Mat22, B:b2Mat22):b2Mat22{ var C:b2Mat22 = new b2Mat22(0, AddVV(A.col1, B.col1), AddVV(A.col2, B.col2)); return (C); } public static function b2Distance(a:b2Vec2, b:b2Vec2):Number{ var cX:Number = (a.x - b.x); var cY:Number = (a.y - b.y); return (Math.sqrt(((cX * cX) + (cY * cY)))); } public static function b2MulTMM(A:b2Mat22, B:b2Mat22):b2Mat22{ var c1:b2Vec2 = new b2Vec2(b2Dot(A.col1, B.col1), b2Dot(A.col2, B.col1)); var c2:b2Vec2 = new b2Vec2(b2Dot(A.col1, B.col2), b2Dot(A.col2, B.col2)); var C:b2Mat22 = new b2Mat22(0, c1, c2); return (C); } public static function b2MaxV(a:b2Vec2, b:b2Vec2):b2Vec2{ var c:b2Vec2 = new b2Vec2(b2Max(a.x, b.x), b2Max(a.y, b.y)); return (c); } public static function b2IsPowerOfTwo(x:uint):Boolean{ var result:Boolean = (((x > 0)) && (((x & (x - 1)) == 0))); return (result); } public static function b2ClampV(a:b2Vec2, low:b2Vec2, high:b2Vec2):b2Vec2{ return (b2MaxV(low, b2MinV(a, high))); } public static function b2RandomRange(lo:Number, hi:Number):Number{ var r:Number = Math.random(); r = (((hi - lo) * r) + lo); return (r); } public static function b2MulTMV(A:b2Mat22, v:b2Vec2):b2Vec2{ var u:b2Vec2 = new b2Vec2(b2Dot(v, A.col1), b2Dot(v, A.col2)); return (u); } public static function b2Min(a:Number, b:Number):Number{ return (((a < b)) ? a : b); } public static function b2Random():Number{ return (((Math.random() * 2) - 1)); } public static function b2MulMM(A:b2Mat22, B:b2Mat22):b2Mat22{ var C:b2Mat22 = new b2Mat22(0, b2MulMV(A, B.col1), b2MulMV(A, B.col2)); return (C); } public static function b2NextPowerOfTwo(x:uint):uint{ x = (x | ((x >> 1) & 2147483647)); x = (x | ((x >> 2) & 1073741823)); x = (x | ((x >> 4) & 268435455)); x = (x | ((x >> 8) & 0xFFFFFF)); x = (x | ((x >> 16) & 0xFFFF)); return ((x + 1)); } public static function b2Max(a:Number, b:Number):Number{ return (((a > b)) ? a : b); } public static function b2MulMV(A:b2Mat22, v:b2Vec2):b2Vec2{ var u:b2Vec2 = new b2Vec2(((A.col1.x * v.x) + (A.col2.x * v.y)), ((A.col1.y * v.x) + (A.col2.y * v.y))); return (u); } } }//package Box2D.Common.Math
Section 35
//b2Sweep (Box2D.Common.Math.b2Sweep) package Box2D.Common.Math { import Box2D.Common.*; public class b2Sweep { public var localCenter:b2Vec2; public var a:Number; public var c:b2Vec2; public var a0:Number; public var c0:b2Vec2; public var t0:Number; public function b2Sweep(){ localCenter = new b2Vec2(); c0 = new b2Vec2(); c = new b2Vec2(); super(); } public function Advance(t:Number):void{ var alpha:Number; if ((((t0 < t)) && (((1 - t0) > Number.MIN_VALUE)))){ alpha = ((t - t0) / (1 - t0)); c0.x = (((1 - alpha) * c0.x) + (alpha * c.x)); c0.y = (((1 - alpha) * c0.y) + (alpha * c.y)); a0 = (((1 - alpha) * a0) + (alpha * a)); t0 = t; }; } public function GetXForm(xf:b2XForm, t:Number):void{ var alpha:Number; var angle:Number; if ((1 - t0) > Number.MIN_VALUE){ alpha = ((t - t0) / (1 - t0)); xf.position.x = (((1 - alpha) * c0.x) + (alpha * c.x)); xf.position.y = (((1 - alpha) * c0.y) + (alpha * c.y)); angle = (((1 - alpha) * a0) + (alpha * a)); xf.R.Set(angle); } else { xf.position.SetV(c); xf.R.Set(a); }; var tMat:b2Mat22 = xf.R; xf.position.x = (xf.position.x - ((tMat.col1.x * localCenter.x) + (tMat.col2.x * localCenter.y))); xf.position.y = (xf.position.y - ((tMat.col1.y * localCenter.x) + (tMat.col2.y * localCenter.y))); } } }//package Box2D.Common.Math
Section 36
//b2Vec2 (Box2D.Common.Math.b2Vec2) package Box2D.Common.Math { import Box2D.Common.*; public class b2Vec2 { public var y:Number; public var x:Number; public function b2Vec2(x_:Number=0, y_:Number=0):void{ super(); x = x_; y = y_; } public function Add(v:b2Vec2):void{ x = (x + v.x); y = (y + v.y); } public function Set(x_:Number=0, y_:Number=0):void{ x = x_; y = y_; } public function Multiply(a:Number):void{ x = (x * a); y = (y * a); } public function Length():Number{ return (Math.sqrt(((x * x) + (y * y)))); } public function LengthSquared():Number{ return (((x * x) + (y * y))); } public function MulM(A:b2Mat22):void{ var tX:Number = x; x = ((A.col1.x * tX) + (A.col2.x * y)); y = ((A.col1.y * tX) + (A.col2.y * y)); } public function SetZero():void{ x = 0; y = 0; } public function MinV(b:b2Vec2):void{ x = ((x < b.x)) ? x : b.x; y = ((y < b.y)) ? y : b.y; } public function Normalize():Number{ var length:Number = Math.sqrt(((x * x) + (y * y))); if (length < Number.MIN_VALUE){ return (0); }; var invLength:Number = (1 / length); x = (x * invLength); y = (y * invLength); return (length); } public function CrossVF(s:Number):void{ var tX:Number = x; x = (s * y); y = (-(s) * tX); } public function MaxV(b:b2Vec2):void{ x = ((x > b.x)) ? x : b.x; y = ((y > b.y)) ? y : b.y; } public function SetV(v:b2Vec2):void{ x = v.x; y = v.y; } public function Negative():b2Vec2{ return (new b2Vec2(-(x), -(y))); } public function CrossFV(s:Number):void{ var tX:Number = x; x = (-(s) * y); y = (s * tX); } public function Abs():void{ if (x < 0){ x = -(x); }; if (y < 0){ y = -(y); }; } public function Subtract(v:b2Vec2):void{ x = (x - v.x); y = (y - v.y); } public function Copy():b2Vec2{ return (new b2Vec2(x, y)); } public function MulTM(A:b2Mat22):void{ var tX:Number = b2Math.b2Dot(this, A.col1); y = b2Math.b2Dot(this, A.col2); x = tX; } public function IsValid():Boolean{ return (((b2Math.b2IsValid(x)) && (b2Math.b2IsValid(y)))); } public static function Make(x_:Number, y_:Number):b2Vec2{ return (new b2Vec2(x_, y_)); } } }//package Box2D.Common.Math
Section 37
//b2XForm (Box2D.Common.Math.b2XForm) package Box2D.Common.Math { import Box2D.Common.*; public class b2XForm { public var position:b2Vec2; public var R:b2Mat22; public function b2XForm(pos:b2Vec2=null, r:b2Mat22=null):void{ position = new b2Vec2(); R = new b2Mat22(); super(); if (pos){ position.SetV(pos); R.SetM(r); }; } public function Initialize(pos:b2Vec2, r:b2Mat22):void{ position.SetV(pos); R.SetM(r); } public function Set(x:b2XForm):void{ position.SetV(x.position); R.SetM(x.R); } public function SetIdentity():void{ position.SetZero(); R.SetIdentity(); } } }//package Box2D.Common.Math
Section 38
//b2Color (Box2D.Common.b2Color) package Box2D.Common { import Box2D.Common.Math.*; public class b2Color { private var _r:uint;// = 0 private var _g:uint;// = 0 private var _b:uint;// = 0 public function b2Color(rr:Number, gg:Number, bb:Number){ super(); _r = uint((0xFF * b2Math.b2Clamp(rr, 0, 1))); _g = uint((0xFF * b2Math.b2Clamp(gg, 0, 1))); _b = uint((0xFF * b2Math.b2Clamp(bb, 0, 1))); } public function Set(rr:Number, gg:Number, bb:Number):void{ _r = uint((0xFF * b2Math.b2Clamp(rr, 0, 1))); _g = uint((0xFF * b2Math.b2Clamp(gg, 0, 1))); _b = uint((0xFF * b2Math.b2Clamp(bb, 0, 1))); } public function set b(bb:Number):void{ _b = uint((0xFF * b2Math.b2Clamp(bb, 0, 1))); } public function get color():uint{ return (((_r | (_g << 8)) | (_b << 16))); } public function set r(rr:Number):void{ _r = uint((0xFF * b2Math.b2Clamp(rr, 0, 1))); } public function set g(gg:Number):void{ _g = uint((0xFF * b2Math.b2Clamp(gg, 0, 1))); } } }//package Box2D.Common
Section 39
//b2Settings (Box2D.Common.b2Settings) package Box2D.Common { import Box2D.Common.Math.*; public class b2Settings { public static const b2_angularSleepTolerance:Number = 0.0111111111111111; public static const b2_linearSleepTolerance:Number = 0.01; public static const b2_angularSlop:Number = ((2 / 180) * b2_pi); public static const b2_linearSlop:Number = 0.005; public static const b2_pi:Number = Math.PI; public static const b2_maxProxies:int = 0x0200; public static const b2_maxAngularVelocitySquared:Number = 62500; 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_maxPairs:int = 4096; 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_maxAngularVelocity:Number = 250; public static const b2_maxAngularCorrection:Number = ((8 / 180) * b2_pi); public static const USHRT_MAX:int = 0xFFFF; public static const b2_maxLinearVelocity:Number = 200; public static const b2_maxLinearCorrection:Number = 0.2; public static const b2_toiSlop:Number = 0.04; public static const b2_maxLinearVelocitySquared:Number = 40000; public static function b2Assert(a:Boolean):void{ var nullVec:b2Vec2; if (!a){ nullVec.x++; }; } } }//package Box2D.Common
Section 40
//b2CircleContact (Box2D.Dynamics.Contacts.b2CircleContact) package Box2D.Dynamics.Contacts { import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Collision.*; import Box2D.Collision.Shapes.*; import Box2D.Common.*; public class b2CircleContact extends b2Contact { private var m_manifolds:Array; public var m_manifold:b2Manifold; private var m0:b2Manifold; private static const s_evalCP:b2ContactPoint = new b2ContactPoint(); public function b2CircleContact(shape1:b2Shape, shape2:b2Shape){ m_manifolds = [new b2Manifold()]; m0 = new b2Manifold(); super(shape1, shape2); m_manifold = m_manifolds[0]; m_manifold.pointCount = 0; var point:b2ManifoldPoint = m_manifold.points[0]; point.normalImpulse = 0; point.tangentImpulse = 0; } override public function Evaluate(listener:b2ContactListener):void{ var v1:b2Vec2; var v2:b2Vec2; var mp0:b2ManifoldPoint; var mp:b2ManifoldPoint; var b1:b2Body = m_shape1.m_body; var b2:b2Body = m_shape2.m_body; m0.Set(m_manifold); b2Collision.b2CollideCircles(m_manifold, (m_shape1 as b2CircleShape), b1.m_xf, (m_shape2 as b2CircleShape), b2.m_xf); var cp:b2ContactPoint = s_evalCP; cp.shape1 = m_shape1; cp.shape2 = m_shape2; cp.friction = m_friction; cp.restitution = m_restitution; if (m_manifold.pointCount > 0){ m_manifoldCount = 1; mp = m_manifold.points[0]; if (m0.pointCount == 0){ mp.normalImpulse = 0; mp.tangentImpulse = 0; if (listener){ cp.position = b1.GetWorldPoint(mp.localPoint1); v1 = b1.GetLinearVelocityFromLocalPoint(mp.localPoint1); v2 = b2.GetLinearVelocityFromLocalPoint(mp.localPoint2); cp.velocity.Set((v2.x - v1.x), (v2.y - v1.y)); cp.normal.SetV(m_manifold.normal); cp.separation = mp.separation; cp.id.key = mp.id._key; listener.Add(cp); }; } else { mp0 = m0.points[0]; mp.normalImpulse = mp0.normalImpulse; mp.tangentImpulse = mp0.tangentImpulse; if (listener){ cp.position = b1.GetWorldPoint(mp.localPoint1); v1 = b1.GetLinearVelocityFromLocalPoint(mp.localPoint1); v2 = b2.GetLinearVelocityFromLocalPoint(mp.localPoint2); cp.velocity.Set((v2.x - v1.x), (v2.y - v1.y)); cp.normal.SetV(m_manifold.normal); cp.separation = mp.separation; cp.id.key = mp.id._key; listener.Persist(cp); }; }; } else { m_manifoldCount = 0; if ((((m0.pointCount > 0)) && (listener))){ mp0 = m0.points[0]; cp.position = b1.GetWorldPoint(mp0.localPoint1); v1 = b1.GetLinearVelocityFromLocalPoint(mp0.localPoint1); v2 = b2.GetLinearVelocityFromLocalPoint(mp0.localPoint2); cp.velocity.Set((v2.x - v1.x), (v2.y - v1.y)); cp.normal.SetV(m0.normal); cp.separation = mp0.separation; cp.id.key = mp0.id._key; listener.Remove(cp); }; }; } override public function GetManifolds():Array{ return (m_manifolds); } public static function Destroy(contact:b2Contact, allocator):void{ } public static function Create(shape1:b2Shape, shape2:b2Shape, allocator):b2Contact{ return (new b2CircleContact(shape1, shape2)); } } }//package Box2D.Dynamics.Contacts
Section 41
//b2Contact (Box2D.Dynamics.Contacts.b2Contact) package Box2D.Dynamics.Contacts { import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Collision.*; import Box2D.Collision.Shapes.*; import Box2D.Common.*; public class b2Contact { public var m_shape1:b2Shape; public var m_shape2:b2Shape; public var m_prev:b2Contact; public var m_toi:Number; public var m_next:b2Contact; public var m_friction:Number; public var m_manifoldCount:int; public var m_node1:b2ContactEdge; public var m_node2:b2ContactEdge; public var m_restitution:Number; public var m_flags:uint; public static var e_toiFlag:uint = 8; public static var e_nonSolidFlag:uint = 1; public static var e_slowFlag:uint = 2; public static var e_islandFlag:uint = 4; public static var s_registers:Array; public static var s_initialized:Boolean = false; public function b2Contact(s1:b2Shape=null, s2:b2Shape=null){ m_node1 = new b2ContactEdge(); m_node2 = new b2ContactEdge(); super(); m_flags = 0; if (((!(s1)) || (!(s2)))){ m_shape1 = null; m_shape2 = null; return; }; if (((s1.IsSensor()) || (s2.IsSensor()))){ m_flags = (m_flags | e_nonSolidFlag); }; m_shape1 = s1; m_shape2 = s2; m_manifoldCount = 0; m_friction = Math.sqrt((m_shape1.m_friction * m_shape2.m_friction)); m_restitution = b2Math.b2Max(m_shape1.m_restitution, m_shape2.m_restitution); 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 IsSolid():Boolean{ return (((m_flags & e_nonSolidFlag) == 0)); } public function GetShape1():b2Shape{ return (m_shape1); } public function GetShape2():b2Shape{ return (m_shape2); } public function GetNext():b2Contact{ return (m_next); } public function GetManifoldCount():int{ return (m_manifoldCount); } public function GetManifolds():Array{ return (null); } public function Update(listener:b2ContactListener):void{ var oldCount:int = m_manifoldCount; Evaluate(listener); var newCount:int = m_manifoldCount; var body1:b2Body = m_shape1.m_body; var body2:b2Body = m_shape2.m_body; if ((((newCount == 0)) && ((oldCount > 0)))){ body1.WakeUp(); body2.WakeUp(); }; if (((((((body1.IsStatic()) || (body1.IsBullet()))) || (body2.IsStatic()))) || (body2.IsBullet()))){ m_flags = (m_flags & ~(e_slowFlag)); } else { m_flags = (m_flags | e_slowFlag); }; } public function Evaluate(listener:b2ContactListener):void{ } public static function InitializeRegisters():void{ var j:int; s_registers = new Array(b2Shape.e_shapeTypeCount); var i:int; while (i < b2Shape.e_shapeTypeCount) { s_registers[i] = new Array(b2Shape.e_shapeTypeCount); j = 0; while (j < b2Shape.e_shapeTypeCount) { s_registers[i][j] = new b2ContactRegister(); j++; }; i++; }; 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); } public static function Destroy(contact:b2Contact, allocator):void{ if (contact.m_manifoldCount > 0){ contact.m_shape1.m_body.WakeUp(); contact.m_shape2.m_body.WakeUp(); }; var type1:int = contact.m_shape1.m_type; var type2:int = contact.m_shape2.m_type; var reg:b2ContactRegister = s_registers[type1][type2]; var destroyFcn:Function = reg.destroyFcn; destroyFcn(contact, allocator); } public static function AddType(createFcn:Function, destroyFcn:Function, type1:int, type2:int):void{ s_registers[type1][type2].createFcn = createFcn; s_registers[type1][type2].destroyFcn = destroyFcn; s_registers[type1][type2].primary = true; if (type1 != type2){ s_registers[type2][type1].createFcn = createFcn; s_registers[type2][type1].destroyFcn = destroyFcn; s_registers[type2][type1].primary = false; }; } public static function Create(shape1:b2Shape, shape2:b2Shape, allocator):b2Contact{ var c:b2Contact; var i:int; var m:b2Manifold; if (s_initialized == false){ InitializeRegisters(); s_initialized = true; }; var type1:int = shape1.m_type; var type2:int = shape2.m_type; var reg:b2ContactRegister = s_registers[type1][type2]; var createFcn:Function = reg.createFcn; if (createFcn != null){ if (reg.primary){ return (createFcn(shape1, shape2, allocator)); }; c = createFcn(shape2, shape1, allocator); i = 0; while (i < c.m_manifoldCount) { m = c.GetManifolds()[i]; m.normal = m.normal.Negative(); i++; }; return (c); //unresolved jump }; return (null); } } }//package Box2D.Dynamics.Contacts
Section 42
//b2ContactConstraint (Box2D.Dynamics.Contacts.b2ContactConstraint) package Box2D.Dynamics.Contacts { import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Collision.*; import Box2D.Common.*; public class b2ContactConstraint { public var points:Array; public var normal:b2Vec2; public var restitution:Number; public var body1:b2Body; public var manifold:b2Manifold; public var body2:b2Body; public var friction:Number; public var pointCount:int; public function b2ContactConstraint(){ normal = new b2Vec2(); super(); points = new Array(b2Settings.b2_maxManifoldPoints); var i:int; while (i < b2Settings.b2_maxManifoldPoints) { points[i] = new b2ContactConstraintPoint(); i++; }; } } }//package Box2D.Dynamics.Contacts
Section 43
//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 positionImpulse:Number; public var normalImpulse:Number; public var tangentMass:Number; public var equalizedMass:Number; public var tangentImpulse:Number; public var localAnchor1:b2Vec2; public var localAnchor2:b2Vec2; public var normalMass:Number; public var velocityBias: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 44
//b2ContactEdge (Box2D.Dynamics.Contacts.b2ContactEdge) package Box2D.Dynamics.Contacts { import Box2D.Dynamics.*; public class b2ContactEdge { public var other:b2Body; public var prev:b2ContactEdge; public var contact:b2Contact; public var next:b2ContactEdge; } }//package Box2D.Dynamics.Contacts
Section 45
//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 46
//b2ContactResult (Box2D.Dynamics.Contacts.b2ContactResult) package Box2D.Dynamics.Contacts { import Box2D.Common.Math.*; import Box2D.Collision.*; import Box2D.Collision.Shapes.*; public class b2ContactResult { public var position:b2Vec2; public var shape1:b2Shape; public var shape2:b2Shape; public var normalImpulse:Number; public var normal:b2Vec2; 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 47
//b2ContactSolver (Box2D.Dynamics.Contacts.b2ContactSolver) package Box2D.Dynamics.Contacts { import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Collision.*; import Box2D.Common.*; public class b2ContactSolver { public var m_constraintCount:int; public var m_constraints:Array; public var m_allocator; public var m_step:b2TimeStep; public function b2ContactSolver(step:b2TimeStep, contacts:Array, contactCount:int, allocator){ var contact:b2Contact; var i:int; var tVec:b2Vec2; var tMat:b2Mat22; var b1:b2Body; var b2:b2Body; var manifoldCount:int; var manifolds:Array; var friction:Number; var restitution:Number; var v1X:Number; var v1Y:Number; var v2X:Number; var v2Y:Number; var w1:Number; var w2:Number; var j:int; var manifold:b2Manifold; var normalX:Number; var normalY:Number; var c:b2ContactConstraint; var k:uint; var cp:b2ManifoldPoint; var ccp:b2ContactConstraintPoint; var tX:Number; var tY:Number; var r1X:Number; var r1Y:Number; var r2X:Number; var r2Y:Number; var r1Sqr:Number; var r2Sqr:Number; var rn1:Number; var rn2:Number; var kNormal:Number; var kEqualized:Number; var tangentX:Number; var tangentY:Number; var rt1:Number; var rt2:Number; var kTangent:Number; var vRel:Number; m_step = new b2TimeStep(); m_constraints = new Array(); super(); m_step.dt = step.dt; m_step.inv_dt = step.inv_dt; m_step.maxIterations = step.maxIterations; m_allocator = allocator; m_constraintCount = 0; i = 0; while (i < contactCount) { contact = contacts[i]; m_constraintCount = (m_constraintCount + contact.m_manifoldCount); i++; }; i = 0; while (i < m_constraintCount) { m_constraints[i] = new b2ContactConstraint(); i++; }; var count:int; i = 0; while (i < contactCount) { contact = contacts[i]; b1 = contact.m_shape1.m_body; b2 = contact.m_shape2.m_body; manifoldCount = contact.m_manifoldCount; manifolds = contact.GetManifolds(); friction = contact.m_friction; restitution = contact.m_restitution; v1X = b1.m_linearVelocity.x; v1Y = b1.m_linearVelocity.y; v2X = b2.m_linearVelocity.x; v2Y = b2.m_linearVelocity.y; w1 = b1.m_angularVelocity; w2 = b2.m_angularVelocity; j = 0; while (j < manifoldCount) { manifold = manifolds[j]; normalX = manifold.normal.x; normalY = manifold.normal.y; c = m_constraints[count]; c.body1 = b1; c.body2 = b2; c.manifold = manifold; c.normal.x = normalX; c.normal.y = normalY; c.pointCount = manifold.pointCount; c.friction = friction; c.restitution = restitution; k = 0; while (k < c.pointCount) { cp = manifold.points[k]; ccp = c.points[k]; ccp.normalImpulse = cp.normalImpulse; ccp.tangentImpulse = cp.tangentImpulse; ccp.separation = cp.separation; ccp.positionImpulse = 0; ccp.localAnchor1.SetV(cp.localPoint1); ccp.localAnchor2.SetV(cp.localPoint2); tMat = b1.m_xf.R; r1X = (cp.localPoint1.x - b1.m_sweep.localCenter.x); r1Y = (cp.localPoint1.y - b1.m_sweep.localCenter.y); tX = ((tMat.col1.x * r1X) + (tMat.col2.x * r1Y)); r1Y = ((tMat.col1.y * r1X) + (tMat.col2.y * r1Y)); r1X = tX; ccp.r1.Set(r1X, r1Y); tMat = b2.m_xf.R; r2X = (cp.localPoint2.x - b2.m_sweep.localCenter.x); r2Y = (cp.localPoint2.y - b2.m_sweep.localCenter.y); tX = ((tMat.col1.x * r2X) + (tMat.col2.x * r2Y)); r2Y = ((tMat.col1.y * r2X) + (tMat.col2.y * r2Y)); r2X = tX; ccp.r2.Set(r2X, r2Y); r1Sqr = ((r1X * r1X) + (r1Y * r1Y)); r2Sqr = ((r2X * r2X) + (r2Y * r2Y)); rn1 = ((r1X * normalX) + (r1Y * normalY)); rn2 = ((r2X * normalX) + (r2Y * normalY)); kNormal = (b1.m_invMass + b2.m_invMass); kNormal = (kNormal + ((b1.m_invI * (r1Sqr - (rn1 * rn1))) + (b2.m_invI * (r2Sqr - (rn2 * rn2))))); ccp.normalMass = (1 / kNormal); kEqualized = ((b1.m_mass * b1.m_invMass) + (b2.m_mass * b2.m_invMass)); kEqualized = (kEqualized + (((b1.m_mass * b1.m_invI) * (r1Sqr - (rn1 * rn1))) + ((b2.m_mass * b2.m_invI) * (r2Sqr - (rn2 * rn2))))); ccp.equalizedMass = (1 / kEqualized); tangentX = normalY; tangentY = -(normalX); rt1 = ((r1X * tangentX) + (r1Y * tangentY)); rt2 = ((r2X * tangentX) + (r2Y * tangentY)); kTangent = (b1.m_invMass + b2.m_invMass); kTangent = (kTangent + ((b1.m_invI * (r1Sqr - (rt1 * rt1))) + (b2.m_invI * (r2Sqr - (rt2 * rt2))))); ccp.tangentMass = (1 / kTangent); ccp.velocityBias = 0; if (ccp.separation > 0){ ccp.velocityBias = (-60 * ccp.separation); }; tX = (((v2X + (-(w2) * r2Y)) - v1X) - (-(w1) * r1Y)); tY = (((v2Y + (w2 * r2X)) - v1Y) - (w1 * r1X)); vRel = ((c.normal.x * tX) + (c.normal.y * tY)); if (vRel < -(b2Settings.b2_velocityThreshold)){ ccp.velocityBias = (ccp.velocityBias + (-(c.restitution) * vRel)); }; k++; }; count++; j++; }; i++; }; } public function InitVelocityConstraints(step:b2TimeStep):void{ var tVec:b2Vec2; var tVec2:b2Vec2; var tMat:b2Mat22; var c:b2ContactConstraint; var b1:b2Body; var b2:b2Body; var invMass1:Number; var invI1:Number; var invMass2:Number; var invI2:Number; var normalX:Number; var normalY:Number; var tangentX:Number; var tangentY:Number; var tX:Number; var j:int; var tCount:int; var ccp:b2ContactConstraintPoint; var PX:Number; var PY:Number; var ccp2:b2ContactConstraintPoint; var i:int; while (i < m_constraintCount) { c = m_constraints[i]; b1 = c.body1; b2 = c.body2; invMass1 = b1.m_invMass; invI1 = b1.m_invI; invMass2 = b2.m_invMass; invI2 = b2.m_invI; normalX = c.normal.x; normalY = c.normal.y; tangentX = normalY; tangentY = -(normalX); if (step.warmStarting){ tCount = c.pointCount; j = 0; while (j < tCount) { ccp = c.points[j]; ccp.normalImpulse = (ccp.normalImpulse * step.dtRatio); ccp.tangentImpulse = (ccp.tangentImpulse * step.dtRatio); PX = ((ccp.normalImpulse * normalX) + (ccp.tangentImpulse * tangentX)); PY = ((ccp.normalImpulse * normalY) + (ccp.tangentImpulse * tangentY)); b1.m_angularVelocity = (b1.m_angularVelocity - (invI1 * ((ccp.r1.x * PY) - (ccp.r1.y * PX)))); b1.m_linearVelocity.x = (b1.m_linearVelocity.x - (invMass1 * PX)); b1.m_linearVelocity.y = (b1.m_linearVelocity.y - (invMass1 * PY)); b2.m_angularVelocity = (b2.m_angularVelocity + (invI2 * ((ccp.r2.x * PY) - (ccp.r2.y * PX)))); b2.m_linearVelocity.x = (b2.m_linearVelocity.x + (invMass2 * PX)); b2.m_linearVelocity.y = (b2.m_linearVelocity.y + (invMass2 * PY)); j++; }; } else { tCount = c.pointCount; j = 0; while (j < tCount) { ccp2 = c.points[j]; ccp2.normalImpulse = 0; ccp2.tangentImpulse = 0; j++; }; }; i++; }; } public function SolvePositionConstraints(baumgarte:Number):Boolean{ var tMat:b2Mat22; var tVec:b2Vec2; var c:b2ContactConstraint; var b1:b2Body; var b2:b2Body; var b1_sweep_c:b2Vec2; var b1_sweep_a:Number; var b2_sweep_c:b2Vec2; var b2_sweep_a:Number; var invMass1:Number; var invI1:Number; var invMass2:Number; var invI2:Number; var normalX:Number; var normalY:Number; var tCount:int; var j:int; var ccp:b2ContactConstraintPoint; var r1X:Number; var r1Y:Number; var r2X:Number; var r2Y:Number; var tX:Number; var p1X:Number; var p1Y:Number; var p2X:Number; var p2Y:Number; var dpX:Number; var dpY:Number; var separation:Number; var C:Number; var dImpulse:Number; var impulse0:Number; var impulseX:Number; var impulseY:Number; var minSeparation:Number = 0; var i:int; while (i < m_constraintCount) { c = m_constraints[i]; b1 = c.body1; b2 = c.body2; b1_sweep_c = b1.m_sweep.c; b1_sweep_a = b1.m_sweep.a; b2_sweep_c = b2.m_sweep.c; b2_sweep_a = b2.m_sweep.a; invMass1 = (b1.m_mass * b1.m_invMass); invI1 = (b1.m_mass * b1.m_invI); invMass2 = (b2.m_mass * b2.m_invMass); invI2 = (b2.m_mass * b2.m_invI); normalX = c.normal.x; normalY = c.normal.y; tCount = c.pointCount; j = 0; while (j < tCount) { ccp = c.points[j]; tMat = b1.m_xf.R; tVec = b1.m_sweep.localCenter; r1X = (ccp.localAnchor1.x - tVec.x); r1Y = (ccp.localAnchor1.y - tVec.y); tX = ((tMat.col1.x * r1X) + (tMat.col2.x * r1Y)); r1Y = ((tMat.col1.y * r1X) + (tMat.col2.y * r1Y)); r1X = tX; tMat = b2.m_xf.R; tVec = b2.m_sweep.localCenter; r2X = (ccp.localAnchor2.x - tVec.x); r2Y = (ccp.localAnchor2.y - tVec.y); tX = ((tMat.col1.x * r2X) + (tMat.col2.x * r2Y)); r2Y = ((tMat.col1.y * r2X) + (tMat.col2.y * r2Y)); r2X = tX; p1X = (b1_sweep_c.x + r1X); p1Y = (b1_sweep_c.y + r1Y); p2X = (b2_sweep_c.x + r2X); p2Y = (b2_sweep_c.y + r2Y); dpX = (p2X - p1X); dpY = (p2Y - p1Y); separation = (((dpX * normalX) + (dpY * normalY)) + ccp.separation); minSeparation = b2Math.b2Min(minSeparation, separation); C = (baumgarte * b2Math.b2Clamp((separation + b2Settings.b2_linearSlop), -(b2Settings.b2_maxLinearCorrection), 0)); dImpulse = (-(ccp.equalizedMass) * C); impulse0 = ccp.positionImpulse; ccp.positionImpulse = b2Math.b2Max((impulse0 + dImpulse), 0); dImpulse = (ccp.positionImpulse - impulse0); impulseX = (dImpulse * normalX); impulseY = (dImpulse * normalY); b1_sweep_c.x = (b1_sweep_c.x - (invMass1 * impulseX)); b1_sweep_c.y = (b1_sweep_c.y - (invMass1 * impulseY)); b1_sweep_a = (b1_sweep_a - (invI1 * ((r1X * impulseY) - (r1Y * impulseX)))); b1.m_sweep.a = b1_sweep_a; b1.SynchronizeTransform(); b2_sweep_c.x = (b2_sweep_c.x + (invMass2 * impulseX)); b2_sweep_c.y = (b2_sweep_c.y + (invMass2 * impulseY)); b2_sweep_a = (b2_sweep_a + (invI2 * ((r2X * impulseY) - (r2Y * impulseX)))); b2.m_sweep.a = b2_sweep_a; b2.SynchronizeTransform(); j++; }; i++; }; return ((minSeparation >= (-1.5 * b2Settings.b2_linearSlop))); } public function SolveVelocityConstraints():void{ var j:int; var ccp:b2ContactConstraintPoint; var r1X:Number; var r1Y:Number; var r2X:Number; var r2Y:Number; var dvX:Number; var dvY:Number; var vn:Number; var vt:Number; var lambda_n:Number; var lambda_t:Number; var newImpulse_n:Number; var newImpulse_t:Number; var PX:Number; var PY:Number; var tMat:b2Mat22; var tVec:b2Vec2; var c:b2ContactConstraint; var b1:b2Body; var b2:b2Body; var w1:Number; var w2:Number; var v1:b2Vec2; var v2:b2Vec2; var invMass1:Number; var invI1:Number; var invMass2:Number; var invI2:Number; var normalX:Number; var normalY:Number; var tangentX:Number; var tangentY:Number; var friction:Number; var tX:Number; var tCount:int; var maxFriction:Number; var i:int; while (i < m_constraintCount) { c = m_constraints[i]; b1 = c.body1; b2 = c.body2; w1 = b1.m_angularVelocity; w2 = b2.m_angularVelocity; v1 = b1.m_linearVelocity; v2 = b2.m_linearVelocity; invMass1 = b1.m_invMass; invI1 = b1.m_invI; invMass2 = b2.m_invMass; invI2 = b2.m_invI; normalX = c.normal.x; normalY = c.normal.y; tangentX = normalY; tangentY = -(normalX); friction = c.friction; tCount = c.pointCount; j = 0; while (j < tCount) { ccp = c.points[j]; dvX = (((v2.x + (-(w2) * ccp.r2.y)) - v1.x) - (-(w1) * ccp.r1.y)); dvY = (((v2.y + (w2 * ccp.r2.x)) - v1.y) - (w1 * ccp.r1.x)); vn = ((dvX * normalX) + (dvY * normalY)); lambda_n = (-(ccp.normalMass) * (vn - ccp.velocityBias)); vt = ((dvX * tangentX) + (dvY * tangentY)); lambda_t = (ccp.tangentMass * -(vt)); newImpulse_n = b2Math.b2Max((ccp.normalImpulse + lambda_n), 0); lambda_n = (newImpulse_n - ccp.normalImpulse); maxFriction = (friction * ccp.normalImpulse); newImpulse_t = b2Math.b2Clamp((ccp.tangentImpulse + lambda_t), -(maxFriction), maxFriction); lambda_t = (newImpulse_t - ccp.tangentImpulse); PX = ((lambda_n * normalX) + (lambda_t * tangentX)); PY = ((lambda_n * normalY) + (lambda_t * tangentY)); v1.x = (v1.x - (invMass1 * PX)); v1.y = (v1.y - (invMass1 * PY)); w1 = (w1 - (invI1 * ((ccp.r1.x * PY) - (ccp.r1.y * PX)))); v2.x = (v2.x + (invMass2 * PX)); v2.y = (v2.y + (invMass2 * PY)); w2 = (w2 + (invI2 * ((ccp.r2.x * PY) - (ccp.r2.y * PX)))); ccp.normalImpulse = newImpulse_n; ccp.tangentImpulse = newImpulse_t; j++; }; b1.m_angularVelocity = w1; b2.m_angularVelocity = w2; i++; }; } public function FinalizeVelocityConstraints():void{ var c:b2ContactConstraint; var m:b2Manifold; var j:int; var point1:b2ManifoldPoint; var point2:b2ContactConstraintPoint; var i:int; while (i < m_constraintCount) { c = m_constraints[i]; m = c.manifold; j = 0; while (j < c.pointCount) { point1 = m.points[j]; point2 = c.points[j]; point1.normalImpulse = point2.normalImpulse; point1.tangentImpulse = point2.tangentImpulse; j++; }; i++; }; } } }//package Box2D.Dynamics.Contacts
Section 48
//b2NullContact (Box2D.Dynamics.Contacts.b2NullContact) package Box2D.Dynamics.Contacts { import Box2D.Dynamics.*; public class b2NullContact extends b2Contact { public function b2NullContact(){ super(); } override public function Evaluate(l:b2ContactListener):void{ } override public function GetManifolds():Array{ return (null); } } }//package Box2D.Dynamics.Contacts
Section 49
//b2PolyAndCircleContact (Box2D.Dynamics.Contacts.b2PolyAndCircleContact) package Box2D.Dynamics.Contacts { import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Collision.*; import Box2D.Collision.Shapes.*; import Box2D.Common.*; public class b2PolyAndCircleContact extends b2Contact { private var m_manifolds:Array; public var m_manifold:b2Manifold; private var m0:b2Manifold; private static const s_evalCP:b2ContactPoint = new b2ContactPoint(); public function b2PolyAndCircleContact(shape1:b2Shape, shape2:b2Shape){ m_manifolds = [new b2Manifold()]; m0 = new b2Manifold(); super(shape1, shape2); 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; var point:b2ManifoldPoint = m_manifold.points[0]; point.normalImpulse = 0; point.tangentImpulse = 0; } override public function Evaluate(listener:b2ContactListener):void{ var i:int; var v1:b2Vec2; var v2:b2Vec2; var mp0:b2ManifoldPoint; var mp:b2ManifoldPoint; var found:Boolean; var idKey:uint; var j:int; var b1:b2Body = m_shape1.m_body; var b2:b2Body = m_shape2.m_body; m0.Set(m_manifold); b2Collision.b2CollidePolygonAndCircle(m_manifold, (m_shape1 as b2PolygonShape), b1.m_xf, (m_shape2 as b2CircleShape), b2.m_xf); var persisted:Array = [false, false]; var cp:b2ContactPoint = s_evalCP; cp.shape1 = m_shape1; cp.shape2 = m_shape2; cp.friction = m_friction; cp.restitution = m_restitution; if (m_manifold.pointCount > 0){ i = 0; while (i < m_manifold.pointCount) { mp = m_manifold.points[i]; mp.normalImpulse = 0; mp.tangentImpulse = 0; found = false; idKey = mp.id._key; j = 0; while (j < m0.pointCount) { if (persisted[j] == true){ } else { mp0 = m0.points[j]; if (mp0.id._key == idKey){ persisted[j] = true; mp.normalImpulse = mp0.normalImpulse; mp.tangentImpulse = mp0.tangentImpulse; found = true; if (listener != null){ cp.position = b1.GetWorldPoint(mp.localPoint1); v1 = b1.GetLinearVelocityFromLocalPoint(mp.localPoint1); v2 = b2.GetLinearVelocityFromLocalPoint(mp.localPoint2); cp.velocity.Set((v2.x - v1.x), (v2.y - v1.y)); cp.normal.SetV(m_manifold.normal); cp.separation = mp.separation; cp.id.key = idKey; listener.Persist(cp); }; break; }; }; j++; }; if ((((found == false)) && (!((listener == null))))){ cp.position = b1.GetWorldPoint(mp.localPoint1); v1 = b1.GetLinearVelocityFromLocalPoint(mp.localPoint1); v2 = b2.GetLinearVelocityFromLocalPoint(mp.localPoint2); cp.velocity.Set((v2.x - v1.x), (v2.y - v1.y)); cp.normal.SetV(m_manifold.normal); cp.separation = mp.separation; cp.id.key = idKey; listener.Add(cp); }; i++; }; m_manifoldCount = 1; } else { m_manifoldCount = 0; }; if (listener == null){ return; }; i = 0; while (i < m0.pointCount) { if (persisted[i]){ } else { mp0 = m0.points[i]; cp.position = b1.GetWorldPoint(mp0.localPoint1); v1 = b1.GetLinearVelocityFromLocalPoint(mp0.localPoint1); v2 = b2.GetLinearVelocityFromLocalPoint(mp0.localPoint2); cp.velocity.Set((v2.x - v1.x), (v2.y - v1.y)); cp.normal.SetV(m0.normal); cp.separation = mp0.separation; cp.id.key = mp0.id._key; listener.Remove(cp); }; i++; }; } override public function GetManifolds():Array{ return (m_manifolds); } public static function Destroy(contact:b2Contact, allocator):void{ } public static function Create(shape1:b2Shape, shape2:b2Shape, allocator):b2Contact{ return (new b2PolyAndCircleContact(shape1, shape2)); } } }//package Box2D.Dynamics.Contacts
Section 50
//b2PolygonContact (Box2D.Dynamics.Contacts.b2PolygonContact) package Box2D.Dynamics.Contacts { import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Collision.*; import Box2D.Collision.Shapes.*; import Box2D.Common.*; public class b2PolygonContact extends b2Contact { private var m_manifolds:Array; private var m0:b2Manifold; public var m_manifold:b2Manifold; private static const s_evalCP:b2ContactPoint = new b2ContactPoint(); public function b2PolygonContact(shape1:b2Shape, shape2:b2Shape):void{ m0 = new b2Manifold(); m_manifolds = [new b2Manifold()]; super(shape1, shape2); m_manifold = m_manifolds[0]; m_manifold.pointCount = 0; } override public function Evaluate(listener:b2ContactListener):void{ var v1:b2Vec2; var v2:b2Vec2; var mp0:b2ManifoldPoint; var cp:b2ContactPoint; var i:int; var mp:b2ManifoldPoint; var found:Boolean; var idKey:uint; var j:int; var b1:b2Body = m_shape1.m_body; var b2:b2Body = m_shape2.m_body; m0.Set(m_manifold); b2Collision.b2CollidePolygons(m_manifold, (m_shape1 as b2PolygonShape), b1.m_xf, (m_shape2 as b2PolygonShape), b2.m_xf); var persisted:Array = [false, false]; cp = s_evalCP; cp.shape1 = m_shape1; cp.shape2 = m_shape2; cp.friction = m_friction; cp.restitution = m_restitution; if (m_manifold.pointCount > 0){ i = 0; while (i < m_manifold.pointCount) { mp = m_manifold.points[i]; mp.normalImpulse = 0; mp.tangentImpulse = 0; found = false; idKey = mp.id._key; j = 0; while (j < m0.pointCount) { if (persisted[j] == true){ } else { mp0 = m0.points[j]; if (mp0.id._key == idKey){ persisted[j] = true; mp.normalImpulse = mp0.normalImpulse; mp.tangentImpulse = mp0.tangentImpulse; found = true; if (listener != null){ cp.position = b1.GetWorldPoint(mp.localPoint1); v1 = b1.GetLinearVelocityFromLocalPoint(mp.localPoint1); v2 = b2.GetLinearVelocityFromLocalPoint(mp.localPoint2); cp.velocity.Set((v2.x - v1.x), (v2.y - v1.y)); cp.normal.SetV(m_manifold.normal); cp.separation = mp.separation; cp.id.key = idKey; listener.Persist(cp); }; break; }; }; j++; }; if ((((found == false)) && (!((listener == null))))){ cp.position = b1.GetWorldPoint(mp.localPoint1); v1 = b1.GetLinearVelocityFromLocalPoint(mp.localPoint1); v2 = b2.GetLinearVelocityFromLocalPoint(mp.localPoint2); cp.velocity.Set((v2.x - v1.x), (v2.y - v1.y)); cp.normal.SetV(m_manifold.normal); cp.separation = mp.separation; cp.id.key = idKey; listener.Add(cp); }; i++; }; m_manifoldCount = 1; } else { m_manifoldCount = 0; }; if (listener == null){ return; }; i = 0; while (i < m0.pointCount) { if (persisted[i]){ } else { mp0 = m0.points[i]; cp.position = b1.GetWorldPoint(mp0.localPoint1); v1 = b1.GetLinearVelocityFromLocalPoint(mp0.localPoint1); v2 = b2.GetLinearVelocityFromLocalPoint(mp0.localPoint2); cp.velocity.Set((v2.x - v1.x), (v2.y - v1.y)); cp.normal.SetV(m0.normal); cp.separation = mp0.separation; cp.id.key = mp0.id._key; listener.Remove(cp); }; i++; }; } override public function GetManifolds():Array{ return (m_manifolds); } public static function Destroy(contact:b2Contact, allocator):void{ } public static function Create(shape1:b2Shape, shape2:b2Shape, allocator):b2Contact{ return (new b2PolygonContact(shape1, shape2)); } } }//package Box2D.Dynamics.Contacts
Section 51
//b2DistanceJoint (Box2D.Dynamics.Joints.b2DistanceJoint) package Box2D.Dynamics.Joints { import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Common.*; public class b2DistanceJoint extends b2Joint { public var m_localAnchor1:b2Vec2; public var m_localAnchor2:b2Vec2; public var m_bias:Number; public var m_gamma:Number; public var m_u:b2Vec2; public var m_mass:Number; public var m_impulse:Number; public var m_dampingRatio:Number; public var m_frequencyHz:Number; public var m_length:Number; public function b2DistanceJoint(def:b2DistanceJointDef){ var tMat:b2Mat22; var tX:Number; var tY:Number; m_localAnchor1 = new b2Vec2(); m_localAnchor2 = new b2Vec2(); m_u = new b2Vec2(); super(def); m_localAnchor1.SetV(def.localAnchor1); m_localAnchor2.SetV(def.localAnchor2); m_length = def.length; m_frequencyHz = def.frequencyHz; m_dampingRatio = def.dampingRatio; m_impulse = 0; m_gamma = 0; m_bias = 0; m_inv_dt = 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 InitVelocityConstraints(step:b2TimeStep):void{ var tMat:b2Mat22; var tX:Number; var b1:b2Body; var b2:b2Body; var r1X:Number; var r2X:Number; var C:Number; var omega:Number; var d:Number; var k:Number; var PX:Number; var PY:Number; m_inv_dt = step.inv_dt; b1 = m_body1; b2 = m_body2; tMat = b1.m_xf.R; r1X = (m_localAnchor1.x - b1.m_sweep.localCenter.x); var r1Y:Number = (m_localAnchor1.y - b1.m_sweep.localCenter.y); tX = ((tMat.col1.x * r1X) + (tMat.col2.x * r1Y)); r1Y = ((tMat.col1.y * r1X) + (tMat.col2.y * r1Y)); r1X = tX; tMat = b2.m_xf.R; r2X = (m_localAnchor2.x - b2.m_sweep.localCenter.x); var r2Y:Number = (m_localAnchor2.y - b2.m_sweep.localCenter.y); tX = ((tMat.col1.x * r2X) + (tMat.col2.x * r2Y)); r2Y = ((tMat.col1.y * r2X) + (tMat.col2.y * r2Y)); r2X = tX; m_u.x = (((b2.m_sweep.c.x + r2X) - b1.m_sweep.c.x) - r1X); m_u.y = (((b2.m_sweep.c.y + r2Y) - b1.m_sweep.c.y) - r1Y); var length:Number = Math.sqrt(((m_u.x * m_u.x) + (m_u.y * m_u.y))); if (length > b2Settings.b2_linearSlop){ m_u.Multiply((1 / length)); } else { m_u.SetZero(); }; var cr1u:Number = ((r1X * m_u.y) - (r1Y * m_u.x)); var cr2u:Number = ((r2X * m_u.y) - (r2Y * m_u.x)); var invMass:Number = (((b1.m_invMass + ((b1.m_invI * cr1u) * cr1u)) + b2.m_invMass) + ((b2.m_invI * cr2u) * cr2u)); m_mass = (1 / invMass); if (m_frequencyHz > 0){ C = (length - m_length); omega = ((2 * Math.PI) * m_frequencyHz); d = (((2 * m_mass) * m_dampingRatio) * omega); k = ((m_mass * omega) * omega); m_gamma = (1 / (step.dt * (d + (step.dt * k)))); m_bias = (((C * step.dt) * k) * m_gamma); m_mass = (1 / (invMass + m_gamma)); }; if (step.warmStarting){ m_impulse = (m_impulse * step.dtRatio); PX = (m_impulse * m_u.x); PY = (m_impulse * m_u.y); b1.m_linearVelocity.x = (b1.m_linearVelocity.x - (b1.m_invMass * PX)); b1.m_linearVelocity.y = (b1.m_linearVelocity.y - (b1.m_invMass * PY)); b1.m_angularVelocity = (b1.m_angularVelocity - (b1.m_invI * ((r1X * PY) - (r1Y * PX)))); b2.m_linearVelocity.x = (b2.m_linearVelocity.x + (b2.m_invMass * PX)); b2.m_linearVelocity.y = (b2.m_linearVelocity.y + (b2.m_invMass * PY)); b2.m_angularVelocity = (b2.m_angularVelocity + (b2.m_invI * ((r2X * PY) - (r2Y * PX)))); } else { m_impulse = 0; }; } override public function GetReactionTorque():Number{ return (0); } override public function GetReactionForce():b2Vec2{ var F:b2Vec2 = new b2Vec2(); F.SetV(m_u); F.Multiply((m_inv_dt * m_impulse)); return (F); } override public function SolvePositionConstraints():Boolean{ var tMat:b2Mat22; if (m_frequencyHz > 0){ return (true); }; var b1:b2Body = m_body1; var b2:b2Body = m_body2; tMat = b1.m_xf.R; var r1X:Number = (m_localAnchor1.x - b1.m_sweep.localCenter.x); var r1Y:Number = (m_localAnchor1.y - b1.m_sweep.localCenter.y); var tX:Number = ((tMat.col1.x * r1X) + (tMat.col2.x * r1Y)); r1Y = ((tMat.col1.y * r1X) + (tMat.col2.y * r1Y)); r1X = tX; tMat = b2.m_xf.R; var r2X:Number = (m_localAnchor2.x - b2.m_sweep.localCenter.x); var r2Y:Number = (m_localAnchor2.y - b2.m_sweep.localCenter.y); tX = ((tMat.col1.x * r2X) + (tMat.col2.x * r2Y)); r2Y = ((tMat.col1.y * r2X) + (tMat.col2.y * r2Y)); r2X = tX; var dX:Number = (((b2.m_sweep.c.x + r2X) - b1.m_sweep.c.x) - r1X); var dY:Number = (((b2.m_sweep.c.y + r2Y) - b1.m_sweep.c.y) - r1Y); var length:Number = Math.sqrt(((dX * dX) + (dY * dY))); dX = (dX / length); dY = (dY / length); var C:Number = (length - m_length); C = b2Math.b2Clamp(C, -(b2Settings.b2_maxLinearCorrection), b2Settings.b2_maxLinearCorrection); var impulse:Number = (-(m_mass) * C); m_u.Set(dX, dY); var PX:Number = (impulse * m_u.x); var PY:Number = (impulse * m_u.y); b1.m_sweep.c.x = (b1.m_sweep.c.x - (b1.m_invMass * PX)); b1.m_sweep.c.y = (b1.m_sweep.c.y - (b1.m_invMass * PY)); b1.m_sweep.a = (b1.m_sweep.a - (b1.m_invI * ((r1X * PY) - (r1Y * PX)))); b2.m_sweep.c.x = (b2.m_sweep.c.x + (b2.m_invMass * PX)); b2.m_sweep.c.y = (b2.m_sweep.c.y + (b2.m_invMass * PY)); b2.m_sweep.a = (b2.m_sweep.a + (b2.m_invI * ((r2X * PY) - (r2Y * PX)))); b1.SynchronizeTransform(); b2.SynchronizeTransform(); return ((b2Math.b2Abs(C) < b2Settings.b2_linearSlop)); } override public function SolveVelocityConstraints(step:b2TimeStep):void{ var tMat:b2Mat22; var b1:b2Body = m_body1; var b2:b2Body = m_body2; tMat = b1.m_xf.R; var r1X:Number = (m_localAnchor1.x - b1.m_sweep.localCenter.x); var r1Y:Number = (m_localAnchor1.y - b1.m_sweep.localCenter.y); var tX:Number = ((tMat.col1.x * r1X) + (tMat.col2.x * r1Y)); r1Y = ((tMat.col1.y * r1X) + (tMat.col2.y * r1Y)); r1X = tX; tMat = b2.m_xf.R; var r2X:Number = (m_localAnchor2.x - b2.m_sweep.localCenter.x); var r2Y:Number = (m_localAnchor2.y - b2.m_sweep.localCenter.y); tX = ((tMat.col1.x * r2X) + (tMat.col2.x * r2Y)); r2Y = ((tMat.col1.y * r2X) + (tMat.col2.y * r2Y)); r2X = tX; var v1X:Number = (b1.m_linearVelocity.x + (-(b1.m_angularVelocity) * r1Y)); var v1Y:Number = (b1.m_linearVelocity.y + (b1.m_angularVelocity * r1X)); var v2X:Number = (b2.m_linearVelocity.x + (-(b2.m_angularVelocity) * r2Y)); var v2Y:Number = (b2.m_linearVelocity.y + (b2.m_angularVelocity * r2X)); var Cdot:Number = ((m_u.x * (v2X - v1X)) + (m_u.y * (v2Y - v1Y))); var impulse:Number = (-(m_mass) * ((Cdot + m_bias) + (m_gamma * m_impulse))); m_impulse = (m_impulse + impulse); var PX:Number = (impulse * m_u.x); var PY:Number = (impulse * m_u.y); b1.m_linearVelocity.x = (b1.m_linearVelocity.x - (b1.m_invMass * PX)); b1.m_linearVelocity.y = (b1.m_linearVelocity.y - (b1.m_invMass * PY)); b1.m_angularVelocity = (b1.m_angularVelocity - (b1.m_invI * ((r1X * PY) - (r1Y * PX)))); b2.m_linearVelocity.x = (b2.m_linearVelocity.x + (b2.m_invMass * PX)); b2.m_linearVelocity.y = (b2.m_linearVelocity.y + (b2.m_invMass * PY)); b2.m_angularVelocity = (b2.m_angularVelocity + (b2.m_invI * ((r2X * PY) - (r2Y * PX)))); } } }//package Box2D.Dynamics.Joints
Section 52
//b2DistanceJointDef (Box2D.Dynamics.Joints.b2DistanceJointDef) package Box2D.Dynamics.Joints { import Box2D.Dynamics.*; import Box2D.Common.Math.*; public class b2DistanceJointDef extends b2JointDef { public var localAnchor1:b2Vec2; public var length:Number; public var dampingRatio:Number; public var localAnchor2:b2Vec2; public var frequencyHz:Number; public function b2DistanceJointDef(){ localAnchor1 = new b2Vec2(); localAnchor2 = new b2Vec2(); super(); type = b2Joint.e_distanceJoint; length = 1; frequencyHz = 0; dampingRatio = 0; } public function Initialize(b1:b2Body, b2:b2Body, anchor1:b2Vec2, anchor2:b2Vec2):void{ body1 = b1; body2 = b2; localAnchor1.SetV(body1.GetLocalPoint(anchor1)); localAnchor2.SetV(body2.GetLocalPoint(anchor2)); var dX:Number = (anchor2.x - anchor1.x); var dY:Number = (anchor2.y - anchor1.y); length = Math.sqrt(((dX * dX) + (dY * dY))); frequencyHz = 0; dampingRatio = 0; } } }//package Box2D.Dynamics.Joints
Section 53
//b2GearJoint (Box2D.Dynamics.Joints.b2GearJoint) package Box2D.Dynamics.Joints { import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Common.*; public class b2GearJoint extends b2Joint { public var m_ground2:b2Body; public var m_groundAnchor1:b2Vec2; public var m_groundAnchor2:b2Vec2; public var m_localAnchor1:b2Vec2; public var m_localAnchor2:b2Vec2; public var m_ratio:Number; public var m_revolute2:b2RevoluteJoint; public var m_force:Number; public var m_mass:Number; public var m_prismatic2:b2PrismaticJoint; public var m_ground1:b2Body; public var m_revolute1:b2RevoluteJoint; public var m_prismatic1:b2PrismaticJoint; public var m_constant:Number; public var m_J:b2Jacobian; public function b2GearJoint(def:b2GearJointDef){ var coordinate1:Number; var coordinate2:Number; m_groundAnchor1 = new b2Vec2(); m_groundAnchor2 = new b2Vec2(); m_localAnchor1 = new b2Vec2(); m_localAnchor2 = new b2Vec2(); m_J = new b2Jacobian(); super(def); var type1:int = def.joint1.m_type; var type2:int = def.joint2.m_type; m_revolute1 = null; m_prismatic1 = null; m_revolute2 = null; m_prismatic2 = null; m_ground1 = def.joint1.m_body1; m_body1 = def.joint1.m_body2; if (type1 == b2Joint.e_revoluteJoint){ m_revolute1 = (def.joint1 as b2RevoluteJoint); m_groundAnchor1.SetV(m_revolute1.m_localAnchor1); m_localAnchor1.SetV(m_revolute1.m_localAnchor2); coordinate1 = m_revolute1.GetJointAngle(); } else { m_prismatic1 = (def.joint1 as b2PrismaticJoint); m_groundAnchor1.SetV(m_prismatic1.m_localAnchor1); m_localAnchor1.SetV(m_prismatic1.m_localAnchor2); coordinate1 = m_prismatic1.GetJointTranslation(); }; m_ground2 = def.joint2.m_body1; m_body2 = def.joint2.m_body2; if (type2 == b2Joint.e_revoluteJoint){ m_revolute2 = (def.joint2 as b2RevoluteJoint); m_groundAnchor2.SetV(m_revolute2.m_localAnchor1); m_localAnchor2.SetV(m_revolute2.m_localAnchor2); coordinate2 = m_revolute2.GetJointAngle(); } else { m_prismatic2 = (def.joint2 as b2PrismaticJoint); m_groundAnchor2.SetV(m_prismatic2.m_localAnchor1); m_localAnchor2.SetV(m_prismatic2.m_localAnchor2); coordinate2 = m_prismatic2.GetJointTranslation(); }; m_ratio = def.ratio; m_constant = (coordinate1 + (m_ratio * coordinate2)); m_force = 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 InitVelocityConstraints(step:b2TimeStep):void{ var ugX:Number; var ugY:Number; var rX:Number; var rY:Number; var tMat:b2Mat22; var tVec:b2Vec2; var crug:Number; var tX:Number; var P:Number; var g1:b2Body = m_ground1; var g2:b2Body = m_ground2; var b1:b2Body = m_body1; var b2:b2Body = m_body2; var K:Number = 0; m_J.SetZero(); if (m_revolute1){ m_J.angular1 = -1; K = (K + b1.m_invI); } else { tMat = g1.m_xf.R; tVec = m_prismatic1.m_localXAxis1; ugX = ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y)); ugY = ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y)); tMat = b1.m_xf.R; rX = (m_localAnchor1.x - b1.m_sweep.localCenter.x); rY = (m_localAnchor1.y - b1.m_sweep.localCenter.y); tX = ((tMat.col1.x * rX) + (tMat.col2.x * rY)); rY = ((tMat.col1.y * rX) + (tMat.col2.y * rY)); rX = tX; crug = ((rX * ugY) - (rY * ugX)); m_J.linear1.Set(-(ugX), -(ugY)); m_J.angular1 = -(crug); K = (K + (b1.m_invMass + ((b1.m_invI * crug) * crug))); }; if (m_revolute2){ m_J.angular2 = -(m_ratio); K = (K + ((m_ratio * m_ratio) * b2.m_invI)); } else { tMat = g2.m_xf.R; tVec = m_prismatic2.m_localXAxis1; ugX = ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y)); ugY = ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y)); tMat = b2.m_xf.R; rX = (m_localAnchor2.x - b2.m_sweep.localCenter.x); rY = (m_localAnchor2.y - b2.m_sweep.localCenter.y); tX = ((tMat.col1.x * rX) + (tMat.col2.x * rY)); rY = ((tMat.col1.y * rX) + (tMat.col2.y * rY)); rX = tX; crug = ((rX * ugY) - (rY * ugX)); m_J.linear2.Set((-(m_ratio) * ugX), (-(m_ratio) * ugY)); m_J.angular2 = (-(m_ratio) * crug); K = (K + ((m_ratio * m_ratio) * (b2.m_invMass + ((b2.m_invI * crug) * crug)))); }; m_mass = (1 / K); if (step.warmStarting){ P = (step.dt * m_force); b1.m_linearVelocity.x = (b1.m_linearVelocity.x + ((b1.m_invMass * P) * m_J.linear1.x)); b1.m_linearVelocity.y = (b1.m_linearVelocity.y + ((b1.m_invMass * P) * m_J.linear1.y)); b1.m_angularVelocity = (b1.m_angularVelocity + ((b1.m_invI * P) * m_J.angular1)); b2.m_linearVelocity.x = (b2.m_linearVelocity.x + ((b2.m_invMass * P) * m_J.linear2.x)); b2.m_linearVelocity.y = (b2.m_linearVelocity.y + ((b2.m_invMass * P) * m_J.linear2.y)); b2.m_angularVelocity = (b2.m_angularVelocity + ((b2.m_invI * P) * m_J.angular2)); } else { m_force = 0; }; } override public function GetReactionTorque():Number{ var tMat:b2Mat22 = m_body2.m_xf.R; var rX:Number = (m_localAnchor1.x - m_body2.m_sweep.localCenter.x); var rY:Number = (m_localAnchor1.y - m_body2.m_sweep.localCenter.y); var tX:Number = ((tMat.col1.x * rX) + (tMat.col2.x * rY)); rY = ((tMat.col1.y * rX) + (tMat.col2.y * rY)); rX = tX; tX = ((m_force * m_J.angular2) - ((rX * (m_force * m_J.linear2.y)) - (rY * (m_force * m_J.linear2.x)))); return (tX); } override public function GetReactionForce():b2Vec2{ var F:b2Vec2 = new b2Vec2((m_force * m_J.linear2.x), (m_force * m_J.linear2.y)); return (F); } override public function SolvePositionConstraints():Boolean{ var coordinate1:Number; var coordinate2:Number; var linearError:Number = 0; var b1:b2Body = m_body1; var b2:b2Body = m_body2; if (m_revolute1){ coordinate1 = m_revolute1.GetJointAngle(); } else { coordinate1 = m_prismatic1.GetJointTranslation(); }; if (m_revolute2){ coordinate2 = m_revolute2.GetJointAngle(); } else { coordinate2 = m_prismatic2.GetJointTranslation(); }; var C:Number = (m_constant - (coordinate1 + (m_ratio * coordinate2))); var impulse:Number = (-(m_mass) * C); b1.m_sweep.c.x = (b1.m_sweep.c.x + ((b1.m_invMass * impulse) * m_J.linear1.x)); b1.m_sweep.c.y = (b1.m_sweep.c.y + ((b1.m_invMass * impulse) * m_J.linear1.y)); b1.m_sweep.a = (b1.m_sweep.a + ((b1.m_invI * impulse) * m_J.angular1)); b2.m_sweep.c.x = (b2.m_sweep.c.x + ((b2.m_invMass * impulse) * m_J.linear2.x)); b2.m_sweep.c.y = (b2.m_sweep.c.y + ((b2.m_invMass * impulse) * m_J.linear2.y)); b2.m_sweep.a = (b2.m_sweep.a + ((b2.m_invI * impulse) * m_J.angular2)); b1.SynchronizeTransform(); b2.SynchronizeTransform(); return ((linearError < b2Settings.b2_linearSlop)); } public function GetRatio():Number{ return (m_ratio); } override public function SolveVelocityConstraints(step:b2TimeStep):void{ var b1:b2Body = m_body1; var b2:b2Body = m_body2; var Cdot:Number = m_J.Compute(b1.m_linearVelocity, b1.m_angularVelocity, b2.m_linearVelocity, b2.m_angularVelocity); var force:Number = ((-(step.inv_dt) * m_mass) * Cdot); m_force = (m_force + force); var P:Number = (step.dt * force); b1.m_linearVelocity.x = (b1.m_linearVelocity.x + ((b1.m_invMass * P) * m_J.linear1.x)); b1.m_linearVelocity.y = (b1.m_linearVelocity.y + ((b1.m_invMass * P) * m_J.linear1.y)); b1.m_angularVelocity = (b1.m_angularVelocity + ((b1.m_invI * P) * m_J.angular1)); b2.m_linearVelocity.x = (b2.m_linearVelocity.x + ((b2.m_invMass * P) * m_J.linear2.x)); b2.m_linearVelocity.y = (b2.m_linearVelocity.y + ((b2.m_invMass * P) * m_J.linear2.y)); b2.m_angularVelocity = (b2.m_angularVelocity + ((b2.m_invI * P) * m_J.angular2)); } } }//package Box2D.Dynamics.Joints
Section 54
//b2GearJointDef (Box2D.Dynamics.Joints.b2GearJointDef) package Box2D.Dynamics.Joints { import Box2D.Common.Math.*; public class b2GearJointDef extends b2JointDef { public var joint1:b2Joint; public var joint2:b2Joint; public var ratio:Number; public function b2GearJointDef(){ super(); type = b2Joint.e_gearJoint; joint1 = null; joint2 = null; ratio = 1; } } }//package Box2D.Dynamics.Joints
Section 55
//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 angular1:Number; public var angular2:Number; public function b2Jacobian(){ linear1 = new b2Vec2(); linear2 = new b2Vec2(); super(); } public function Set(x1:b2Vec2, a1:Number, x2:b2Vec2, a2:Number):void{ linear1.SetV(x1); angular1 = a1; linear2.SetV(x2); angular2 = a2; } public function SetZero():void{ linear1.SetZero(); angular1 = 0; linear2.SetZero(); angular2 = 0; } public function Compute(x1:b2Vec2, a1:Number, x2:b2Vec2, a2:Number):Number{ return ((((((linear1.x * x1.x) + (linear1.y * x1.y)) + (angular1 * a1)) + ((linear2.x * x2.x) + (linear2.y * x2.y))) + (angular2 * a2))); } } }//package Box2D.Dynamics.Joints
Section 56
//b2Joint (Box2D.Dynamics.Joints.b2Joint) package Box2D.Dynamics.Joints { import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Common.*; public class b2Joint { public var m_islandFlag:Boolean; public var m_body1:b2Body; public var m_prev:b2Joint; public var m_next:b2Joint; public var m_type:int; public var m_collideConnected:Boolean; public var m_node1:b2JointEdge; public var m_node2:b2JointEdge; public var m_inv_dt:Number; public var m_userData; public var m_body2:b2Body; public static const e_unknownJoint:int = 0; public static const e_inactiveLimit:int = 0; public static const e_atUpperLimit:int = 2; public static const e_atLowerLimit:int = 1; public static const e_gearJoint:int = 6; public static const e_revoluteJoint:int = 1; public static const e_equalLimits:int = 3; public static const e_distanceJoint:int = 3; public static const e_pulleyJoint:int = 4; public static const e_prismaticJoint:int = 2; public static const e_mouseJoint:int = 5; public function b2Joint(def:b2JointDef){ m_node1 = new b2JointEdge(); m_node2 = new b2JointEdge(); super(); m_type = def.type; m_prev = null; m_next = null; m_body1 = def.body1; m_body2 = def.body2; m_collideConnected = def.collideConnected; m_islandFlag = false; m_userData = def.userData; } public function GetBody2():b2Body{ return (m_body2); } public function GetAnchor1():b2Vec2{ return (null); } public function GetAnchor2():b2Vec2{ return (null); } public function GetNext():b2Joint{ return (m_next); } public function GetType():int{ return (m_type); } public function InitVelocityConstraints(step:b2TimeStep):void{ } public function GetReactionTorque():Number{ return (0); } public function GetUserData(){ return (m_userData); } public function GetReactionForce():b2Vec2{ return (null); } public function SolvePositionConstraints():Boolean{ return (false); } public function SetUserData(data):void{ m_userData = data; } public function GetBody1():b2Body{ return (m_body1); } public function SolveVelocityConstraints(step:b2TimeStep):void{ } public function InitPositionConstraints():void{ } public static function Destroy(joint:b2Joint, allocator):void{ } public static function Create(def:b2JointDef, allocator):b2Joint{ var joint:b2Joint; switch (def.type){ case e_distanceJoint: joint = new b2DistanceJoint((def as b2DistanceJointDef)); break; case e_mouseJoint: joint = new b2MouseJoint((def as b2MouseJointDef)); break; case e_prismaticJoint: joint = new b2PrismaticJoint((def as b2PrismaticJointDef)); break; case e_revoluteJoint: joint = new b2RevoluteJoint((def as b2RevoluteJointDef)); break; case e_pulleyJoint: joint = new b2PulleyJoint((def as b2PulleyJointDef)); break; case e_gearJoint: joint = new b2GearJoint((def as b2GearJointDef)); break; default: break; }; return (joint); } } }//package Box2D.Dynamics.Joints
Section 57
//b2JointDef (Box2D.Dynamics.Joints.b2JointDef) package Box2D.Dynamics.Joints { import Box2D.Dynamics.*; import Box2D.Common.Math.*; public class b2JointDef { public var body2:b2Body; public var type:int; public var userData; public var collideConnected:Boolean; public var body1:b2Body; public function b2JointDef(){ super(); type = b2Joint.e_unknownJoint; userData = null; body1 = null; body2 = null; collideConnected = false; } } }//package Box2D.Dynamics.Joints
Section 58
//b2JointEdge (Box2D.Dynamics.Joints.b2JointEdge) package Box2D.Dynamics.Joints { import Box2D.Dynamics.*; public class b2JointEdge { public var other:b2Body; public var next:b2JointEdge; public var prev:b2JointEdge; public var joint:b2Joint; } }//package Box2D.Dynamics.Joints
Section 59
//b2MouseJoint (Box2D.Dynamics.Joints.b2MouseJoint) package Box2D.Dynamics.Joints { import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Common.*; public class b2MouseJoint extends b2Joint { private var K1:b2Mat22; private var K:b2Mat22; public var m_beta:Number; public var m_mass:b2Mat22; private var K2:b2Mat22; public var m_target:b2Vec2; public var m_gamma:Number; public var m_impulse:b2Vec2; public var m_C:b2Vec2; public var m_localAnchor:b2Vec2; public var m_maxForce:Number; public function b2MouseJoint(def:b2MouseJointDef){ var tY:Number; 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(def); m_target.SetV(def.target); var tX:Number = (m_target.x - m_body2.m_xf.position.x); tY = (m_target.y - m_body2.m_xf.position.y); var tMat:b2Mat22 = m_body2.m_xf.R; m_localAnchor.x = ((tX * tMat.col1.x) + (tY * tMat.col1.y)); m_localAnchor.y = ((tX * tMat.col2.x) + (tY * tMat.col2.y)); m_maxForce = def.maxForce; m_impulse.SetZero(); var mass:Number = m_body2.m_mass; var omega:Number = ((2 * b2Settings.b2_pi) * def.frequencyHz); var d:Number = (((2 * mass) * def.dampingRatio) * omega); var k:Number = ((def.timeStep * mass) * (omega * omega)); m_gamma = (1 / (d + k)); m_beta = (k / (d + k)); } public function SetTarget(target:b2Vec2):void{ if (m_body2.IsSleeping()){ m_body2.WakeUp(); }; m_target = target; } override public function GetAnchor2():b2Vec2{ return (m_body2.GetWorldPoint(m_localAnchor)); } override public function InitVelocityConstraints(step:b2TimeStep):void{ var b:b2Body; var tMat:b2Mat22; var rX:Number; var rY:Number; var invMass:Number; var invI:Number; b = m_body2; tMat = b.m_xf.R; rX = (m_localAnchor.x - b.m_sweep.localCenter.x); rY = (m_localAnchor.y - b.m_sweep.localCenter.y); var tX:Number = ((tMat.col1.x * rX) + (tMat.col2.x * rY)); rY = ((tMat.col1.y * rX) + (tMat.col2.y * rY)); rX = tX; invMass = b.m_invMass; invI = b.m_invI; K1.col1.x = invMass; K1.col2.x = 0; K1.col1.y = 0; K1.col2.y = invMass; K2.col1.x = ((invI * rY) * rY); K2.col2.x = ((-(invI) * rX) * rY); K2.col1.y = ((-(invI) * rX) * rY); K2.col2.y = ((invI * rX) * rX); K.SetM(K1); K.AddM(K2); K.col1.x = (K.col1.x + m_gamma); K.col2.y = (K.col2.y + m_gamma); K.Invert(m_mass); m_C.x = ((b.m_sweep.c.x + rX) - m_target.x); m_C.y = ((b.m_sweep.c.y + rY) - m_target.y); b.m_angularVelocity = (b.m_angularVelocity * 0.98); var PX:Number = (step.dt * m_impulse.x); var PY:Number = (step.dt * m_impulse.y); b.m_linearVelocity.x = (b.m_linearVelocity.x + (invMass * PX)); b.m_linearVelocity.y = (b.m_linearVelocity.y + (invMass * PY)); b.m_angularVelocity = (b.m_angularVelocity + (invI * ((rX * PY) - (rY * PX)))); } override public function GetAnchor1():b2Vec2{ return (m_target); } override public function GetReactionTorque():Number{ return (0); } override public function GetReactionForce():b2Vec2{ return (m_impulse); } override public function SolvePositionConstraints():Boolean{ return (true); } override public function SolveVelocityConstraints(step:b2TimeStep):void{ var tMat:b2Mat22; var tX:Number; var tY:Number; var b:b2Body = m_body2; tMat = b.m_xf.R; var rX:Number = (m_localAnchor.x - b.m_sweep.localCenter.x); var rY:Number = (m_localAnchor.y - b.m_sweep.localCenter.y); tX = ((tMat.col1.x * rX) + (tMat.col2.x * rY)); rY = ((tMat.col1.y * rX) + (tMat.col2.y * rY)); rX = tX; var CdotX:Number = (b.m_linearVelocity.x + (-(b.m_angularVelocity) * rY)); var CdotY:Number = (b.m_linearVelocity.y + (b.m_angularVelocity * rX)); tMat = m_mass; tX = ((CdotX + ((m_beta * step.inv_dt) * m_C.x)) + ((m_gamma * step.dt) * m_impulse.x)); tY = ((CdotY + ((m_beta * step.inv_dt) * m_C.y)) + ((m_gamma * step.dt) * m_impulse.y)); var forceX:Number = (-(step.inv_dt) * ((tMat.col1.x * tX) + (tMat.col2.x * tY))); var forceY:Number = (-(step.inv_dt) * ((tMat.col1.y * tX) + (tMat.col2.y * tY))); var oldForceX:Number = m_impulse.x; var oldForceY:Number = m_impulse.y; m_impulse.x = (m_impulse.x + forceX); m_impulse.y = (m_impulse.y + forceY); var forceMagnitude:Number = m_impulse.Length(); if (forceMagnitude > m_maxForce){ m_impulse.Multiply((m_maxForce / forceMagnitude)); }; forceX = (m_impulse.x - oldForceX); forceY = (m_impulse.y - oldForceY); var PX:Number = (step.dt * forceX); var PY:Number = (step.dt * forceY); b.m_linearVelocity.x = (b.m_linearVelocity.x + (b.m_invMass * PX)); b.m_linearVelocity.y = (b.m_linearVelocity.y + (b.m_invMass * PY)); b.m_angularVelocity = (b.m_angularVelocity + (b.m_invI * ((rX * PY) - (rY * PX)))); } } }//package Box2D.Dynamics.Joints
Section 60
//b2MouseJointDef (Box2D.Dynamics.Joints.b2MouseJointDef) package Box2D.Dynamics.Joints { import Box2D.Common.Math.*; public class b2MouseJointDef extends b2JointDef { public var timeStep:Number; public var target:b2Vec2; public var maxForce:Number; public var dampingRatio:Number; public var frequencyHz:Number; public function b2MouseJointDef(){ target = new b2Vec2(); super(); type = b2Joint.e_mouseJoint; maxForce = 0; frequencyHz = 5; dampingRatio = 0.7; timeStep = (1 / 60); } } }//package Box2D.Dynamics.Joints
Section 61
//b2PrismaticJoint (Box2D.Dynamics.Joints.b2PrismaticJoint) package Box2D.Dynamics.Joints { import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Common.*; public class b2PrismaticJoint extends b2Joint { public var m_limitForce:Number; public var m_lowerTranslation:Number; public var m_localXAxis1:b2Vec2; public var m_refAngle:Number; public var m_torque:Number; public var m_motorForce:Number; public var m_enableLimit:Boolean; public var m_angularMass:Number; public var m_maxMotorForce:Number; public var m_localYAxis1:b2Vec2; public var m_force:Number; public var m_motorMass:Number; public var m_upperTranslation:Number; public var m_localAnchor1:b2Vec2; public var m_localAnchor2:b2Vec2; public var m_limitState:int; public var m_linearMass:Number; public var m_motorJacobian:b2Jacobian; public var m_limitPositionImpulse:Number; public var m_motorSpeed:Number; public var m_enableMotor:Boolean; public var m_linearJacobian:b2Jacobian; public function b2PrismaticJoint(def:b2PrismaticJointDef){ var tMat:b2Mat22; var tX:Number; var tY:Number; m_localAnchor1 = new b2Vec2(); m_localAnchor2 = new b2Vec2(); m_localXAxis1 = new b2Vec2(); m_localYAxis1 = new b2Vec2(); m_linearJacobian = new b2Jacobian(); m_motorJacobian = new b2Jacobian(); super(def); m_localAnchor1.SetV(def.localAnchor1); m_localAnchor2.SetV(def.localAnchor2); m_localXAxis1.SetV(def.localAxis1); m_localYAxis1.x = -(m_localXAxis1.y); m_localYAxis1.y = m_localXAxis1.x; m_refAngle = def.referenceAngle; m_linearJacobian.SetZero(); m_linearMass = 0; m_force = 0; m_angularMass = 0; m_torque = 0; m_motorJacobian.SetZero(); m_motorMass = 0; m_motorForce = 0; m_limitForce = 0; m_limitPositionImpulse = 0; m_lowerTranslation = def.lowerTranslation; m_upperTranslation = def.upperTranslation; m_maxMotorForce = def.maxMotorForce; m_motorSpeed = def.motorSpeed; m_enableLimit = def.enableLimit; m_enableMotor = def.enableMotor; } override public function SolveVelocityConstraints(step:b2TimeStep):void{ var oldLimitForce:Number; var motorCdot:Number; var motorForce:Number; var oldMotorForce:Number; var limitCdot:Number; var limitForce:Number; var b1:b2Body = m_body1; var b2:b2Body = m_body2; var invMass1:Number = b1.m_invMass; var invMass2:Number = b2.m_invMass; var invI1:Number = b1.m_invI; var invI2:Number = b2.m_invI; var linearCdot:Number = m_linearJacobian.Compute(b1.m_linearVelocity, b1.m_angularVelocity, b2.m_linearVelocity, b2.m_angularVelocity); var force:Number = ((-(step.inv_dt) * m_linearMass) * linearCdot); m_force = (m_force + force); var P:Number = (step.dt * force); b1.m_linearVelocity.x = (b1.m_linearVelocity.x + ((invMass1 * P) * m_linearJacobian.linear1.x)); b1.m_linearVelocity.y = (b1.m_linearVelocity.y + ((invMass1 * P) * m_linearJacobian.linear1.y)); b1.m_angularVelocity = (b1.m_angularVelocity + ((invI1 * P) * m_linearJacobian.angular1)); b2.m_linearVelocity.x = (b2.m_linearVelocity.x + ((invMass2 * P) * m_linearJacobian.linear2.x)); b2.m_linearVelocity.y = (b2.m_linearVelocity.y + ((invMass2 * P) * m_linearJacobian.linear2.y)); b2.m_angularVelocity = (b2.m_angularVelocity + ((invI2 * P) * m_linearJacobian.angular2)); var angularCdot:Number = (b2.m_angularVelocity - b1.m_angularVelocity); var torque:Number = ((-(step.inv_dt) * m_angularMass) * angularCdot); m_torque = (m_torque + torque); var L:Number = (step.dt * torque); b1.m_angularVelocity = (b1.m_angularVelocity - (invI1 * L)); b2.m_angularVelocity = (b2.m_angularVelocity + (invI2 * L)); if (((m_enableMotor) && (!((m_limitState == e_equalLimits))))){ motorCdot = (m_motorJacobian.Compute(b1.m_linearVelocity, b1.m_angularVelocity, b2.m_linearVelocity, b2.m_angularVelocity) - m_motorSpeed); motorForce = ((-(step.inv_dt) * m_motorMass) * motorCdot); oldMotorForce = m_motorForce; m_motorForce = b2Math.b2Clamp((m_motorForce + motorForce), -(m_maxMotorForce), m_maxMotorForce); motorForce = (m_motorForce - oldMotorForce); P = (step.dt * motorForce); b1.m_linearVelocity.x = (b1.m_linearVelocity.x + ((invMass1 * P) * m_motorJacobian.linear1.x)); b1.m_linearVelocity.y = (b1.m_linearVelocity.y + ((invMass1 * P) * m_motorJacobian.linear1.y)); b1.m_angularVelocity = (b1.m_angularVelocity + ((invI1 * P) * m_motorJacobian.angular1)); b2.m_linearVelocity.x = (b2.m_linearVelocity.x + ((invMass2 * P) * m_motorJacobian.linear2.x)); b2.m_linearVelocity.y = (b2.m_linearVelocity.y + ((invMass2 * P) * m_motorJacobian.linear2.y)); b2.m_angularVelocity = (b2.m_angularVelocity + ((invI2 * P) * m_motorJacobian.angular2)); }; if (((m_enableLimit) && (!((m_limitState == e_inactiveLimit))))){ limitCdot = m_motorJacobian.Compute(b1.m_linearVelocity, b1.m_angularVelocity, b2.m_linearVelocity, b2.m_angularVelocity); limitForce = ((-(step.inv_dt) * m_motorMass) * limitCdot); if (m_limitState == e_equalLimits){ m_limitForce = (m_limitForce + limitForce); } else { if (m_limitState == e_atLowerLimit){ oldLimitForce = m_limitForce; m_limitForce = b2Math.b2Max((m_limitForce + limitForce), 0); limitForce = (m_limitForce - oldLimitForce); } else { if (m_limitState == e_atUpperLimit){ oldLimitForce = m_limitForce; m_limitForce = b2Math.b2Min((m_limitForce + limitForce), 0); limitForce = (m_limitForce - oldLimitForce); }; }; }; P = (step.dt * limitForce); b1.m_linearVelocity.x = (b1.m_linearVelocity.x + ((invMass1 * P) * m_motorJacobian.linear1.x)); b1.m_linearVelocity.y = (b1.m_linearVelocity.y + ((invMass1 * P) * m_motorJacobian.linear1.y)); b1.m_angularVelocity = (b1.m_angularVelocity + ((invI1 * P) * m_motorJacobian.angular1)); b2.m_linearVelocity.x = (b2.m_linearVelocity.x + ((invMass2 * P) * m_motorJacobian.linear2.x)); b2.m_linearVelocity.y = (b2.m_linearVelocity.y + ((invMass2 * P) * m_motorJacobian.linear2.y)); b2.m_angularVelocity = (b2.m_angularVelocity + ((invI2 * P) * m_motorJacobian.angular2)); }; } 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_upperTranslation); } public function GetLowerLimit():Number{ return (m_lowerTranslation); } public function EnableMotor(flag:Boolean):void{ m_enableMotor = flag; } public function GetJointTranslation():Number{ var tMat:b2Mat22; var b1:b2Body = m_body1; var b2:b2Body = m_body2; var p1:b2Vec2 = b1.GetWorldPoint(m_localAnchor1); var p2:b2Vec2 = b2.GetWorldPoint(m_localAnchor2); var dX:Number = (p2.x - p1.x); var dY:Number = (p2.y - p1.y); var axis:b2Vec2 = b1.GetWorldVector(m_localXAxis1); var translation:Number = ((axis.x * dX) + (axis.y * dY)); return (translation); } public function GetMotorSpeed():Number{ return (m_motorSpeed); } override public function GetReactionForce():b2Vec2{ var tMat:b2Mat22 = m_body1.m_xf.R; var ax1X:Number = (m_limitForce * ((tMat.col1.x * m_localXAxis1.x) + (tMat.col2.x * m_localXAxis1.y))); var ax1Y:Number = (m_limitForce * ((tMat.col1.y * m_localXAxis1.x) + (tMat.col2.y * m_localXAxis1.y))); var ay1X:Number = (m_force * ((tMat.col1.x * m_localYAxis1.x) + (tMat.col2.x * m_localYAxis1.y))); var ay1Y:Number = (m_force * ((tMat.col1.y * m_localYAxis1.x) + (tMat.col2.y * m_localYAxis1.y))); return (new b2Vec2(((m_limitForce * ax1X) + (m_force * ay1X)), ((m_limitForce * ax1Y) + (m_force * ay1Y)))); } override public function SolvePositionConstraints():Boolean{ var limitC:Number; var oldLimitImpulse:Number; var tMat:b2Mat22; var tX:Number; var ax1X:Number; var ax1Y:Number; var translation:Number; var limitImpulse:Number; var b1:b2Body = m_body1; var b2:b2Body = m_body2; var invMass1:Number = b1.m_invMass; var invMass2:Number = b2.m_invMass; var invI1:Number = b1.m_invI; var invI2:Number = b2.m_invI; tMat = b1.m_xf.R; var r1X:Number = (m_localAnchor1.x - b1.m_sweep.localCenter.x); var r1Y:Number = (m_localAnchor1.y - b1.m_sweep.localCenter.y); tX = ((tMat.col1.x * r1X) + (tMat.col2.x * r1Y)); r1Y = ((tMat.col1.y * r1X) + (tMat.col2.y * r1Y)); r1X = tX; tMat = b2.m_xf.R; var r2X:Number = (m_localAnchor2.x - b2.m_sweep.localCenter.x); var r2Y:Number = (m_localAnchor2.y - b2.m_sweep.localCenter.y); tX = ((tMat.col1.x * r2X) + (tMat.col2.x * r2Y)); r2Y = ((tMat.col1.y * r2X) + (tMat.col2.y * r2Y)); r2X = tX; var p1X:Number = (b1.m_sweep.c.x + r1X); var p1Y:Number = (b1.m_sweep.c.y + r1Y); var p2X:Number = (b2.m_sweep.c.x + r2X); var p2Y:Number = (b2.m_sweep.c.y + r2Y); var dX:Number = (p2X - p1X); var dY:Number = (p2Y - p1Y); tMat = b1.m_xf.R; var ay1X:Number = ((tMat.col1.x * m_localYAxis1.x) + (tMat.col2.x * m_localYAxis1.y)); var ay1Y:Number = ((tMat.col1.y * m_localYAxis1.x) + (tMat.col2.y * m_localYAxis1.y)); var linearC:Number = ((ay1X * dX) + (ay1Y * dY)); linearC = b2Math.b2Clamp(linearC, -(b2Settings.b2_maxLinearCorrection), b2Settings.b2_maxLinearCorrection); var linearImpulse:Number = (-(m_linearMass) * linearC); b1.m_sweep.c.x = (b1.m_sweep.c.x + ((invMass1 * linearImpulse) * m_linearJacobian.linear1.x)); b1.m_sweep.c.y = (b1.m_sweep.c.y + ((invMass1 * linearImpulse) * m_linearJacobian.linear1.y)); b1.m_sweep.a = (b1.m_sweep.a + ((invI1 * linearImpulse) * m_linearJacobian.angular1)); b2.m_sweep.c.x = (b2.m_sweep.c.x + ((invMass2 * linearImpulse) * m_linearJacobian.linear2.x)); b2.m_sweep.c.y = (b2.m_sweep.c.y + ((invMass2 * linearImpulse) * m_linearJacobian.linear2.y)); b2.m_sweep.a = (b2.m_sweep.a + ((invI2 * linearImpulse) * m_linearJacobian.angular2)); var positionError:Number = b2Math.b2Abs(linearC); var angularC:Number = ((b2.m_sweep.a - b1.m_sweep.a) - m_refAngle); angularC = b2Math.b2Clamp(angularC, -(b2Settings.b2_maxAngularCorrection), b2Settings.b2_maxAngularCorrection); var angularImpulse:Number = (-(m_angularMass) * angularC); b1.m_sweep.a = (b1.m_sweep.a - (b1.m_invI * angularImpulse)); b2.m_sweep.a = (b2.m_sweep.a + (b2.m_invI * angularImpulse)); b1.SynchronizeTransform(); b2.SynchronizeTransform(); var angularError:Number = b2Math.b2Abs(angularC); if (((m_enableLimit) && (!((m_limitState == e_inactiveLimit))))){ tMat = b1.m_xf.R; r1X = (m_localAnchor1.x - b1.m_sweep.localCenter.x); r1Y = (m_localAnchor1.y - b1.m_sweep.localCenter.y); tX = ((tMat.col1.x * r1X) + (tMat.col2.x * r1Y)); r1Y = ((tMat.col1.y * r1X) + (tMat.col2.y * r1Y)); r1X = tX; tMat = b2.m_xf.R; r2X = (m_localAnchor2.x - b2.m_sweep.localCenter.x); r2Y = (m_localAnchor2.y - b2.m_sweep.localCenter.y); tX = ((tMat.col1.x * r2X) + (tMat.col2.x * r2Y)); r2Y = ((tMat.col1.y * r2X) + (tMat.col2.y * r2Y)); r2X = tX; p1X = (b1.m_sweep.c.x + r1X); p1Y = (b1.m_sweep.c.y + r1Y); p2X = (b2.m_sweep.c.x + r2X); p2Y = (b2.m_sweep.c.y + r2Y); dX = (p2X - p1X); dY = (p2Y - p1Y); tMat = b1.m_xf.R; ax1X = ((tMat.col1.x * m_localXAxis1.x) + (tMat.col2.x * m_localXAxis1.y)); ax1Y = ((tMat.col1.y * m_localXAxis1.x) + (tMat.col2.y * m_localXAxis1.y)); translation = ((ax1X * dX) + (ax1Y * dY)); limitImpulse = 0; if (m_limitState == e_equalLimits){ limitC = b2Math.b2Clamp(translation, -(b2Settings.b2_maxLinearCorrection), b2Settings.b2_maxLinearCorrection); limitImpulse = (-(m_motorMass) * limitC); positionError = b2Math.b2Max(positionError, b2Math.b2Abs(angularC)); } else { if (m_limitState == e_atLowerLimit){ limitC = (translation - m_lowerTranslation); positionError = b2Math.b2Max(positionError, -(limitC)); limitC = b2Math.b2Clamp((limitC + b2Settings.b2_linearSlop), -(b2Settings.b2_maxLinearCorrection), 0); limitImpulse = (-(m_motorMass) * limitC); oldLimitImpulse = m_limitPositionImpulse; m_limitPositionImpulse = b2Math.b2Max((m_limitPositionImpulse + limitImpulse), 0); limitImpulse = (m_limitPositionImpulse - oldLimitImpulse); } else { if (m_limitState == e_atUpperLimit){ limitC = (translation - m_upperTranslation); positionError = b2Math.b2Max(positionError, limitC); limitC = b2Math.b2Clamp((limitC - b2Settings.b2_linearSlop), 0, b2Settings.b2_maxLinearCorrection); limitImpulse = (-(m_motorMass) * limitC); oldLimitImpulse = m_limitPositionImpulse; m_limitPositionImpulse = b2Math.b2Min((m_limitPositionImpulse + limitImpulse), 0); limitImpulse = (m_limitPositionImpulse - oldLimitImpulse); }; }; }; b1.m_sweep.c.x = (b1.m_sweep.c.x + ((invMass1 * limitImpulse) * m_motorJacobian.linear1.x)); b1.m_sweep.c.y = (b1.m_sweep.c.y + ((invMass1 * limitImpulse) * m_motorJacobian.linear1.y)); b1.m_sweep.a = (b1.m_sweep.a + ((invI1 * limitImpulse) * m_motorJacobian.angular1)); b2.m_sweep.c.x = (b2.m_sweep.c.x + ((invMass2 * limitImpulse) * m_motorJacobian.linear2.x)); b2.m_sweep.c.y = (b2.m_sweep.c.y + ((invMass2 * limitImpulse) * m_motorJacobian.linear2.y)); b2.m_sweep.a = (b2.m_sweep.a + ((invI2 * limitImpulse) * m_motorJacobian.angular2)); b1.SynchronizeTransform(); b2.SynchronizeTransform(); }; return ((((positionError <= b2Settings.b2_linearSlop)) && ((angularError <= b2Settings.b2_angularSlop)))); } public function SetMotorSpeed(speed:Number):void{ m_motorSpeed = speed; } public function GetJointSpeed():Number{ var tMat:b2Mat22; var b1:b2Body = m_body1; var b2:b2Body = m_body2; tMat = b1.m_xf.R; var r1X:Number = (m_localAnchor1.x - b1.m_sweep.localCenter.x); var r1Y:Number = (m_localAnchor1.y - b1.m_sweep.localCenter.y); var tX:Number = ((tMat.col1.x * r1X) + (tMat.col2.x * r1Y)); r1Y = ((tMat.col1.y * r1X) + (tMat.col2.y * r1Y)); r1X = tX; tMat = b2.m_xf.R; var r2X:Number = (m_localAnchor2.x - b2.m_sweep.localCenter.x); var r2Y:Number = (m_localAnchor2.y - b2.m_sweep.localCenter.y); tX = ((tMat.col1.x * r2X) + (tMat.col2.x * r2Y)); r2Y = ((tMat.col1.y * r2X) + (tMat.col2.y * r2Y)); r2X = tX; var p1X:Number = (b1.m_sweep.c.x + r1X); var p1Y:Number = (b1.m_sweep.c.y + r1Y); var p2X:Number = (b2.m_sweep.c.x + r2X); var p2Y:Number = (b2.m_sweep.c.y + r2Y); var dX:Number = (p2X - p1X); var dY:Number = (p2Y - p1Y); var axis:b2Vec2 = b1.GetWorldVector(m_localXAxis1); var v1:b2Vec2 = b1.m_linearVelocity; var v2:b2Vec2 = b2.m_linearVelocity; var w1:Number = b1.m_angularVelocity; var w2:Number = b2.m_angularVelocity; var speed:Number = (((dX * (-(w1) * axis.y)) + (dY * (w1 * axis.x))) + ((axis.x * (((v2.x + (-(w2) * r2Y)) - v1.x) - (-(w1) * r1Y))) + (axis.y * (((v2.y + (w2 * r2X)) - v1.y) - (w1 * r1X))))); return (speed); } override public function InitVelocityConstraints(step:b2TimeStep):void{ var tMat:b2Mat22; var tX:Number; var ax1X:Number; var ax1Y:Number; var dX:Number; var dY:Number; var jointTranslation:Number; var P1X:Number; var P1Y:Number; var P2X:Number; var P2Y:Number; var L1:Number; var L2:Number; var b1:b2Body = m_body1; var b2:b2Body = m_body2; tMat = b1.m_xf.R; var r1X:Number = (m_localAnchor1.x - b1.m_sweep.localCenter.x); var r1Y:Number = (m_localAnchor1.y - b1.m_sweep.localCenter.y); tX = ((tMat.col1.x * r1X) + (tMat.col2.x * r1Y)); r1Y = ((tMat.col1.y * r1X) + (tMat.col2.y * r1Y)); r1X = tX; tMat = b2.m_xf.R; var r2X:Number = (m_localAnchor2.x - b2.m_sweep.localCenter.x); var r2Y:Number = (m_localAnchor2.y - b2.m_sweep.localCenter.y); tX = ((tMat.col1.x * r2X) + (tMat.col2.x * r2Y)); r2Y = ((tMat.col1.y * r2X) + (tMat.col2.y * r2Y)); r2X = tX; var invMass1:Number = b1.m_invMass; var invMass2:Number = b2.m_invMass; var invI1:Number = b1.m_invI; var invI2:Number = b2.m_invI; tMat = b1.m_xf.R; var ay1X:Number = ((tMat.col1.x * m_localYAxis1.x) + (tMat.col2.x * m_localYAxis1.y)); var ay1Y:Number = ((tMat.col1.y * m_localYAxis1.x) + (tMat.col2.y * m_localYAxis1.y)); var eX:Number = ((b2.m_sweep.c.x + r2X) - b1.m_sweep.c.x); var eY:Number = ((b2.m_sweep.c.y + r2Y) - b1.m_sweep.c.y); m_linearJacobian.linear1.x = -(ay1X); m_linearJacobian.linear1.y = -(ay1Y); m_linearJacobian.linear2.x = ay1X; m_linearJacobian.linear2.y = ay1Y; m_linearJacobian.angular1 = -(((eX * ay1Y) - (eY * ay1X))); m_linearJacobian.angular2 = ((r2X * ay1Y) - (r2Y * ay1X)); m_linearMass = (((invMass1 + ((invI1 * m_linearJacobian.angular1) * m_linearJacobian.angular1)) + invMass2) + ((invI2 * m_linearJacobian.angular2) * m_linearJacobian.angular2)); m_linearMass = (1 / m_linearMass); m_angularMass = (invI1 + invI2); if (m_angularMass > Number.MIN_VALUE){ m_angularMass = (1 / m_angularMass); }; if (((m_enableLimit) || (m_enableMotor))){ tMat = b1.m_xf.R; ax1X = ((tMat.col1.x * m_localXAxis1.x) + (tMat.col2.x * m_localXAxis1.y)); ax1Y = ((tMat.col1.y * m_localXAxis1.x) + (tMat.col2.y * m_localXAxis1.y)); m_motorJacobian.linear1.x = -(ax1X); m_motorJacobian.linear1.y = -(ax1Y); m_motorJacobian.linear2.x = ax1X; m_motorJacobian.linear2.y = ax1Y; m_motorJacobian.angular1 = -(((eX * ax1Y) - (eY * ax1X))); m_motorJacobian.angular2 = ((r2X * ax1Y) - (r2Y * ax1X)); m_motorMass = (((invMass1 + ((invI1 * m_motorJacobian.angular1) * m_motorJacobian.angular1)) + invMass2) + ((invI2 * m_motorJacobian.angular2) * m_motorJacobian.angular2)); m_motorMass = (1 / m_motorMass); if (m_enableLimit){ dX = (eX - r1X); dY = (eY - r1Y); jointTranslation = ((ax1X * dX) + (ax1Y * dY)); if (b2Math.b2Abs((m_upperTranslation - m_lowerTranslation)) < (2 * b2Settings.b2_linearSlop)){ m_limitState = e_equalLimits; } else { if (jointTranslation <= m_lowerTranslation){ if (m_limitState != e_atLowerLimit){ m_limitForce = 0; }; m_limitState = e_atLowerLimit; } else { if (jointTranslation >= m_upperTranslation){ if (m_limitState != e_atUpperLimit){ m_limitForce = 0; }; m_limitState = e_atUpperLimit; } else { m_limitState = e_inactiveLimit; m_limitForce = 0; }; }; }; }; }; if (m_enableMotor == false){ m_motorForce = 0; }; if (m_enableLimit == false){ m_limitForce = 0; }; if (step.warmStarting){ P1X = (step.dt * ((m_force * m_linearJacobian.linear1.x) + ((m_motorForce + m_limitForce) * m_motorJacobian.linear1.x))); P1Y = (step.dt * ((m_force * m_linearJacobian.linear1.y) + ((m_motorForce + m_limitForce) * m_motorJacobian.linear1.y))); P2X = (step.dt * ((m_force * m_linearJacobian.linear2.x) + ((m_motorForce + m_limitForce) * m_motorJacobian.linear2.x))); P2Y = (step.dt * ((m_force * m_linearJacobian.linear2.y) + ((m_motorForce + m_limitForce) * m_motorJacobian.linear2.y))); L1 = (step.dt * (((m_force * m_linearJacobian.angular1) - m_torque) + ((m_motorForce + m_limitForce) * m_motorJacobian.angular1))); L2 = (step.dt * (((m_force * m_linearJacobian.angular2) + m_torque) + ((m_motorForce + m_limitForce) * m_motorJacobian.angular2))); b1.m_linearVelocity.x = (b1.m_linearVelocity.x + (invMass1 * P1X)); b1.m_linearVelocity.y = (b1.m_linearVelocity.y + (invMass1 * P1Y)); b1.m_angularVelocity = (b1.m_angularVelocity + (invI1 * L1)); b2.m_linearVelocity.x = (b2.m_linearVelocity.x + (invMass2 * P2X)); b2.m_linearVelocity.y = (b2.m_linearVelocity.y + (invMass2 * P2Y)); b2.m_angularVelocity = (b2.m_angularVelocity + (invI2 * L2)); } else { m_force = 0; m_torque = 0; m_limitForce = 0; m_motorForce = 0; }; m_limitPositionImpulse = 0; } public function GetMotorForce():Number{ return (m_motorForce); } public function EnableLimit(flag:Boolean):void{ m_enableLimit = flag; } public function SetMaxMotorForce(force:Number):void{ m_maxMotorForce = force; } override public function GetReactionTorque():Number{ return (m_torque); } public function IsLimitEnabled():Boolean{ return (m_enableLimit); } public function IsMotorEnabled():Boolean{ return (m_enableMotor); } public function SetLimits(lower:Number, upper:Number):void{ m_lowerTranslation = lower; m_upperTranslation = upper; } } }//package Box2D.Dynamics.Joints
Section 62
//b2PrismaticJointDef (Box2D.Dynamics.Joints.b2PrismaticJointDef) package Box2D.Dynamics.Joints { import Box2D.Dynamics.*; import Box2D.Common.Math.*; public class b2PrismaticJointDef extends b2JointDef { public var motorSpeed:Number; public var localAxis1:b2Vec2; public var referenceAngle:Number; public var upperTranslation:Number; public var localAnchor1:b2Vec2; public var localAnchor2:b2Vec2; public var enableLimit:Boolean; public var enableMotor:Boolean; public var maxMotorForce:Number; 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(b1:b2Body, b2:b2Body, anchor:b2Vec2, axis:b2Vec2):void{ body1 = b1; body2 = b2; localAnchor1 = body1.GetLocalPoint(anchor); localAnchor2 = body2.GetLocalPoint(anchor); localAxis1 = body1.GetLocalVector(axis); referenceAngle = (body2.GetAngle() - body1.GetAngle()); } } }//package Box2D.Dynamics.Joints
Section 63
//b2PulleyJoint (Box2D.Dynamics.Joints.b2PulleyJoint) package Box2D.Dynamics.Joints { import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Common.*; public class b2PulleyJoint extends b2Joint { public var m_limitState1:int; public var m_limitState2:int; public var m_ground:b2Body; public var m_maxLength2:Number; public var m_maxLength1:Number; public var m_limitPositionImpulse1:Number; public var m_limitPositionImpulse2:Number; public var m_force:Number; public var m_constant:Number; public var m_positionImpulse:Number; public var m_state:int; public var m_ratio:Number; public var m_groundAnchor1:b2Vec2; public var m_groundAnchor2:b2Vec2; public var m_localAnchor1:b2Vec2; public var m_localAnchor2:b2Vec2; public var m_limitMass1:Number; public var m_limitMass2:Number; public var m_pulleyMass:Number; public var m_u1:b2Vec2; public var m_limitForce1:Number; public var m_limitForce2:Number; public var m_u2:b2Vec2; public static const b2_minPulleyLength:Number = 2; public function b2PulleyJoint(def:b2PulleyJointDef){ var tMat:b2Mat22; var tX:Number; var tY: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(def); m_ground = m_body1.m_world.m_groundBody; m_groundAnchor1.x = (def.groundAnchor1.x - m_ground.m_xf.position.x); m_groundAnchor1.y = (def.groundAnchor1.y - m_ground.m_xf.position.y); m_groundAnchor2.x = (def.groundAnchor2.x - m_ground.m_xf.position.x); m_groundAnchor2.y = (def.groundAnchor2.y - m_ground.m_xf.position.y); m_localAnchor1.SetV(def.localAnchor1); m_localAnchor2.SetV(def.localAnchor2); m_ratio = def.ratio; m_constant = (def.length1 + (m_ratio * def.length2)); m_maxLength1 = b2Math.b2Min(def.maxLength1, (m_constant - (m_ratio * b2_minPulleyLength))); m_maxLength2 = b2Math.b2Min(def.maxLength2, ((m_constant - b2_minPulleyLength) / m_ratio)); m_force = 0; m_limitForce1 = 0; m_limitForce2 = 0; } public function GetGroundAnchor2():b2Vec2{ var a:b2Vec2 = m_ground.m_xf.position.Copy(); a.Add(m_groundAnchor2); return (a); } 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():b2Vec2{ var F:b2Vec2 = m_u2.Copy(); F.Multiply(m_force); return (F); } override public function SolvePositionConstraints():Boolean{ var tMat:b2Mat22; var r1X:Number; var r1Y:Number; var r2X:Number; var r2Y:Number; var p1X:Number; var p1Y:Number; var p2X:Number; var p2Y:Number; var length1:Number; var length2:Number; var C:Number; var impulse:Number; var oldImpulse:Number; var oldLimitPositionImpulse:Number; var tX:Number; var b1:b2Body = m_body1; var b2:b2Body = m_body2; var s1X:Number = (m_ground.m_xf.position.x + m_groundAnchor1.x); var s1Y:Number = (m_ground.m_xf.position.y + m_groundAnchor1.y); var s2X:Number = (m_ground.m_xf.position.x + m_groundAnchor2.x); var s2Y:Number = (m_ground.m_xf.position.y + m_groundAnchor2.y); var linearError:Number = 0; if (m_state == e_atUpperLimit){ tMat = b1.m_xf.R; r1X = (m_localAnchor1.x - b1.m_sweep.localCenter.x); r1Y = (m_localAnchor1.y - b1.m_sweep.localCenter.y); tX = ((tMat.col1.x * r1X) + (tMat.col2.x * r1Y)); r1Y = ((tMat.col1.y * r1X) + (tMat.col2.y * r1Y)); r1X = tX; tMat = b2.m_xf.R; r2X = (m_localAnchor2.x - b2.m_sweep.localCenter.x); r2Y = (m_localAnchor2.y - b2.m_sweep.localCenter.y); tX = ((tMat.col1.x * r2X) + (tMat.col2.x * r2Y)); r2Y = ((tMat.col1.y * r2X) + (tMat.col2.y * r2Y)); r2X = tX; p1X = (b1.m_sweep.c.x + r1X); p1Y = (b1.m_sweep.c.y + r1Y); p2X = (b2.m_sweep.c.x + r2X); p2Y = (b2.m_sweep.c.y + r2Y); m_u1.Set((p1X - s1X), (p1Y - s1Y)); m_u2.Set((p2X - s2X), (p2Y - s2Y)); length1 = m_u1.Length(); length2 = m_u2.Length(); if (length1 > b2Settings.b2_linearSlop){ m_u1.Multiply((1 / length1)); } else { m_u1.SetZero(); }; if (length2 > b2Settings.b2_linearSlop){ m_u2.Multiply((1 / length2)); } else { m_u2.SetZero(); }; C = ((m_constant - length1) - (m_ratio * length2)); linearError = b2Math.b2Max(linearError, -(C)); C = b2Math.b2Clamp((C + b2Settings.b2_linearSlop), -(b2Settings.b2_maxLinearCorrection), 0); impulse = (-(m_pulleyMass) * C); oldImpulse = m_positionImpulse; m_positionImpulse = b2Math.b2Max(0, (m_positionImpulse + impulse)); impulse = (m_positionImpulse - oldImpulse); p1X = (-(impulse) * m_u1.x); p1Y = (-(impulse) * m_u1.y); p2X = ((-(m_ratio) * impulse) * m_u2.x); p2Y = ((-(m_ratio) * impulse) * m_u2.y); b1.m_sweep.c.x = (b1.m_sweep.c.x + (b1.m_invMass * p1X)); b1.m_sweep.c.y = (b1.m_sweep.c.y + (b1.m_invMass * p1Y)); b1.m_sweep.a = (b1.m_sweep.a + (b1.m_invI * ((r1X * p1Y) - (r1Y * p1X)))); b2.m_sweep.c.x = (b2.m_sweep.c.x + (b2.m_invMass * p2X)); b2.m_sweep.c.y = (b2.m_sweep.c.y + (b2.m_invMass * p2Y)); b2.m_sweep.a = (b2.m_sweep.a + (b2.m_invI * ((r2X * p2Y) - (r2Y * p2X)))); b1.SynchronizeTransform(); b2.SynchronizeTransform(); }; if (m_limitState1 == e_atUpperLimit){ tMat = b1.m_xf.R; r1X = (m_localAnchor1.x - b1.m_sweep.localCenter.x); r1Y = (m_localAnchor1.y - b1.m_sweep.localCenter.y); tX = ((tMat.col1.x * r1X) + (tMat.col2.x * r1Y)); r1Y = ((tMat.col1.y * r1X) + (tMat.col2.y * r1Y)); r1X = tX; p1X = (b1.m_sweep.c.x + r1X); p1Y = (b1.m_sweep.c.y + r1Y); m_u1.Set((p1X - s1X), (p1Y - s1Y)); length1 = m_u1.Length(); if (length1 > b2Settings.b2_linearSlop){ m_u1.x = (m_u1.x * (1 / length1)); m_u1.y = (m_u1.y * (1 / length1)); } else { m_u1.SetZero(); }; C = (m_maxLength1 - length1); linearError = b2Math.b2Max(linearError, -(C)); C = b2Math.b2Clamp((C + b2Settings.b2_linearSlop), -(b2Settings.b2_maxLinearCorrection), 0); impulse = (-(m_limitMass1) * C); oldLimitPositionImpulse = m_limitPositionImpulse1; m_limitPositionImpulse1 = b2Math.b2Max(0, (m_limitPositionImpulse1 + impulse)); impulse = (m_limitPositionImpulse1 - oldLimitPositionImpulse); p1X = (-(impulse) * m_u1.x); p1Y = (-(impulse) * m_u1.y); b1.m_sweep.c.x = (b1.m_sweep.c.x + (b1.m_invMass * p1X)); b1.m_sweep.c.y = (b1.m_sweep.c.y + (b1.m_invMass * p1Y)); b1.m_sweep.a = (b1.m_sweep.a + (b1.m_invI * ((r1X * p1Y) - (r1Y * p1X)))); b1.SynchronizeTransform(); }; if (m_limitState2 == e_atUpperLimit){ tMat = b2.m_xf.R; r2X = (m_localAnchor2.x - b2.m_sweep.localCenter.x); r2Y = (m_localAnchor2.y - b2.m_sweep.localCenter.y); tX = ((tMat.col1.x * r2X) + (tMat.col2.x * r2Y)); r2Y = ((tMat.col1.y * r2X) + (tMat.col2.y * r2Y)); r2X = tX; p2X = (b2.m_sweep.c.x + r2X); p2Y = (b2.m_sweep.c.y + r2Y); m_u2.Set((p2X - s2X), (p2Y - s2Y)); length2 = m_u2.Length(); if (length2 > b2Settings.b2_linearSlop){ m_u2.x = (m_u2.x * (1 / length2)); m_u2.y = (m_u2.y * (1 / length2)); } else { m_u2.SetZero(); }; C = (m_maxLength2 - length2); linearError = b2Math.b2Max(linearError, -(C)); C = b2Math.b2Clamp((C + b2Settings.b2_linearSlop), -(b2Settings.b2_maxLinearCorrection), 0); impulse = (-(m_limitMass2) * C); oldLimitPositionImpulse = m_limitPositionImpulse2; m_limitPositionImpulse2 = b2Math.b2Max(0, (m_limitPositionImpulse2 + impulse)); impulse = (m_limitPositionImpulse2 - oldLimitPositionImpulse); p2X = (-(impulse) * m_u2.x); p2Y = (-(impulse) * m_u2.y); b2.m_sweep.c.x = (b2.m_sweep.c.x + (b2.m_invMass * p2X)); b2.m_sweep.c.y = (b2.m_sweep.c.y + (b2.m_invMass * p2Y)); b2.m_sweep.a = (b2.m_sweep.a + (b2.m_invI * ((r2X * p2Y) - (r2Y * p2X)))); b2.SynchronizeTransform(); }; return ((linearError < b2Settings.b2_linearSlop)); } override public function InitVelocityConstraints(step:b2TimeStep):void{ var tMat:b2Mat22; var P1X:Number; var P1Y:Number; var P2X:Number; var P2Y:Number; var b1:b2Body = m_body1; var b2:b2Body = m_body2; tMat = b1.m_xf.R; var r1X:Number = (m_localAnchor1.x - b1.m_sweep.localCenter.x); var r1Y:Number = (m_localAnchor1.y - b1.m_sweep.localCenter.y); var tX:Number = ((tMat.col1.x * r1X) + (tMat.col2.x * r1Y)); r1Y = ((tMat.col1.y * r1X) + (tMat.col2.y * r1Y)); r1X = tX; tMat = b2.m_xf.R; var r2X:Number = (m_localAnchor2.x - b2.m_sweep.localCenter.x); var r2Y:Number = (m_localAnchor2.y - b2.m_sweep.localCenter.y); tX = ((tMat.col1.x * r2X) + (tMat.col2.x * r2Y)); r2Y = ((tMat.col1.y * r2X) + (tMat.col2.y * r2Y)); r2X = tX; var p1X:Number = (b1.m_sweep.c.x + r1X); var p1Y:Number = (b1.m_sweep.c.y + r1Y); var p2X:Number = (b2.m_sweep.c.x + r2X); var p2Y:Number = (b2.m_sweep.c.y + r2Y); var s1X:Number = (m_ground.m_xf.position.x + m_groundAnchor1.x); var s1Y:Number = (m_ground.m_xf.position.y + m_groundAnchor1.y); var s2X:Number = (m_ground.m_xf.position.x + m_groundAnchor2.x); var s2Y:Number = (m_ground.m_xf.position.y + m_groundAnchor2.y); m_u1.Set((p1X - s1X), (p1Y - s1Y)); m_u2.Set((p2X - s2X), (p2Y - s2Y)); var length1:Number = m_u1.Length(); var length2:Number = m_u2.Length(); if (length1 > b2Settings.b2_linearSlop){ m_u1.Multiply((1 / length1)); } else { m_u1.SetZero(); }; if (length2 > b2Settings.b2_linearSlop){ m_u2.Multiply((1 / length2)); } else { m_u2.SetZero(); }; var C:Number = ((m_constant - length1) - (m_ratio * length2)); if (C > 0){ m_state = e_inactiveLimit; m_force = 0; } else { m_state = e_atUpperLimit; m_positionImpulse = 0; }; if (length1 < m_maxLength1){ m_limitState1 = e_inactiveLimit; m_limitForce1 = 0; } else { m_limitState1 = e_atUpperLimit; m_limitPositionImpulse1 = 0; }; if (length2 < m_maxLength2){ m_limitState2 = e_inactiveLimit; m_limitForce2 = 0; } else { m_limitState2 = e_atUpperLimit; m_limitPositionImpulse2 = 0; }; var cr1u1:Number = ((r1X * m_u1.y) - (r1Y * m_u1.x)); var cr2u2:Number = ((r2X * m_u2.y) - (r2Y * m_u2.x)); m_limitMass1 = (b1.m_invMass + ((b1.m_invI * cr1u1) * cr1u1)); m_limitMass2 = (b2.m_invMass + ((b2.m_invI * cr2u2) * cr2u2)); 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 (step.warmStarting){ P1X = ((step.dt * (-(m_force) - m_limitForce1)) * m_u1.x); P1Y = ((step.dt * (-(m_force) - m_limitForce1)) * m_u1.y); P2X = ((step.dt * ((-(m_ratio) * m_force) - m_limitForce2)) * m_u2.x); P2Y = ((step.dt * ((-(m_ratio) * m_force) - m_limitForce2)) * m_u2.y); b1.m_linearVelocity.x = (b1.m_linearVelocity.x + (b1.m_invMass * P1X)); b1.m_linearVelocity.y = (b1.m_linearVelocity.y + (b1.m_invMass * P1Y)); b1.m_angularVelocity = (b1.m_angularVelocity + (b1.m_invI * ((r1X * P1Y) - (r1Y * P1X)))); b2.m_linearVelocity.x = (b2.m_linearVelocity.x + (b2.m_invMass * P2X)); b2.m_linearVelocity.y = (b2.m_linearVelocity.y + (b2.m_invMass * P2Y)); b2.m_angularVelocity = (b2.m_angularVelocity + (b2.m_invI * ((r2X * P2Y) - (r2Y * P2X)))); } else { m_force = 0; m_limitForce1 = 0; m_limitForce2 = 0; }; } override public function GetReactionTorque():Number{ return (0); } public function GetRatio():Number{ return (m_ratio); } override public function SolveVelocityConstraints(step:b2TimeStep):void{ var tMat:b2Mat22; var v1X:Number; var v1Y:Number; var v2X:Number; var v2Y:Number; var P1X:Number; var P1Y:Number; var P2X:Number; var P2Y:Number; var Cdot:Number; var force:Number; var oldForce:Number; var b1:b2Body = m_body1; var b2:b2Body = m_body2; tMat = b1.m_xf.R; var r1X:Number = (m_localAnchor1.x - b1.m_sweep.localCenter.x); var r1Y:Number = (m_localAnchor1.y - b1.m_sweep.localCenter.y); var tX:Number = ((tMat.col1.x * r1X) + (tMat.col2.x * r1Y)); r1Y = ((tMat.col1.y * r1X) + (tMat.col2.y * r1Y)); r1X = tX; tMat = b2.m_xf.R; var r2X:Number = (m_localAnchor2.x - b2.m_sweep.localCenter.x); var r2Y:Number = (m_localAnchor2.y - b2.m_sweep.localCenter.y); tX = ((tMat.col1.x * r2X) + (tMat.col2.x * r2Y)); r2Y = ((tMat.col1.y * r2X) + (tMat.col2.y * r2Y)); r2X = tX; if (m_state == e_atUpperLimit){ v1X = (b1.m_linearVelocity.x + (-(b1.m_angularVelocity) * r1Y)); v1Y = (b1.m_linearVelocity.y + (b1.m_angularVelocity * r1X)); v2X = (b2.m_linearVelocity.x + (-(b2.m_angularVelocity) * r2Y)); v2Y = (b2.m_linearVelocity.y + (b2.m_angularVelocity * r2X)); Cdot = (-(((m_u1.x * v1X) + (m_u1.y * v1Y))) - (m_ratio * ((m_u2.x * v2X) + (m_u2.y * v2Y)))); force = ((-(step.inv_dt) * m_pulleyMass) * Cdot); oldForce = m_force; m_force = b2Math.b2Max(0, (m_force + force)); force = (m_force - oldForce); P1X = ((-(step.dt) * force) * m_u1.x); P1Y = ((-(step.dt) * force) * m_u1.y); P2X = (((-(step.dt) * m_ratio) * force) * m_u2.x); P2Y = (((-(step.dt) * m_ratio) * force) * m_u2.y); b1.m_linearVelocity.x = (b1.m_linearVelocity.x + (b1.m_invMass * P1X)); b1.m_linearVelocity.y = (b1.m_linearVelocity.y + (b1.m_invMass * P1Y)); b1.m_angularVelocity = (b1.m_angularVelocity + (b1.m_invI * ((r1X * P1Y) - (r1Y * P1X)))); b2.m_linearVelocity.x = (b2.m_linearVelocity.x + (b2.m_invMass * P2X)); b2.m_linearVelocity.y = (b2.m_linearVelocity.y + (b2.m_invMass * P2Y)); b2.m_angularVelocity = (b2.m_angularVelocity + (b2.m_invI * ((r2X * P2Y) - (r2Y * P2X)))); }; if (m_limitState1 == e_atUpperLimit){ v1X = (b1.m_linearVelocity.x + (-(b1.m_angularVelocity) * r1Y)); v1Y = (b1.m_linearVelocity.y + (b1.m_angularVelocity * r1X)); Cdot = -(((m_u1.x * v1X) + (m_u1.y * v1Y))); force = ((-(step.inv_dt) * m_limitMass1) * Cdot); oldForce = m_limitForce1; m_limitForce1 = b2Math.b2Max(0, (m_limitForce1 + force)); force = (m_limitForce1 - oldForce); P1X = ((-(step.dt) * force) * m_u1.x); P1Y = ((-(step.dt) * force) * m_u1.y); b1.m_linearVelocity.x = (b1.m_linearVelocity.x + (b1.m_invMass * P1X)); b1.m_linearVelocity.y = (b1.m_linearVelocity.y + (b1.m_invMass * P1Y)); b1.m_angularVelocity = (b1.m_angularVelocity + (b1.m_invI * ((r1X * P1Y) - (r1Y * P1X)))); }; if (m_limitState2 == e_atUpperLimit){ v2X = (b2.m_linearVelocity.x + (-(b2.m_angularVelocity) * r2Y)); v2Y = (b2.m_linearVelocity.y + (b2.m_angularVelocity * r2X)); Cdot = -(((m_u2.x * v2X) + (m_u2.y * v2Y))); force = ((-(step.inv_dt) * m_limitMass2) * Cdot); oldForce = m_limitForce2; m_limitForce2 = b2Math.b2Max(0, (m_limitForce2 + force)); force = (m_limitForce2 - oldForce); P2X = ((-(step.dt) * force) * m_u2.x); P2Y = ((-(step.dt) * force) * m_u2.y); b2.m_linearVelocity.x = (b2.m_linearVelocity.x + (b2.m_invMass * P2X)); b2.m_linearVelocity.y = (b2.m_linearVelocity.y + (b2.m_invMass * P2Y)); b2.m_angularVelocity = (b2.m_angularVelocity + (b2.m_invI * ((r2X * P2Y) - (r2Y * P2X)))); }; } public function GetLength1():Number{ var p:b2Vec2 = m_body1.GetWorldPoint(m_localAnchor1); var sX:Number = (m_ground.m_xf.position.x + m_groundAnchor1.x); var sY:Number = (m_ground.m_xf.position.y + m_groundAnchor1.y); var dX:Number = (p.x - sX); var dY:Number = (p.y - sY); return (Math.sqrt(((dX * dX) + (dY * dY)))); } public function GetLength2():Number{ var p:b2Vec2 = m_body2.GetWorldPoint(m_localAnchor2); var sX:Number = (m_ground.m_xf.position.x + m_groundAnchor2.x); var sY:Number = (m_ground.m_xf.position.y + m_groundAnchor2.y); var dX:Number = (p.x - sX); var dY:Number = (p.y - sY); return (Math.sqrt(((dX * dX) + (dY * dY)))); } public function GetGroundAnchor1():b2Vec2{ var a:b2Vec2 = m_ground.m_xf.position.Copy(); a.Add(m_groundAnchor1); return (a); } } }//package Box2D.Dynamics.Joints
Section 64
//b2PulleyJointDef (Box2D.Dynamics.Joints.b2PulleyJointDef) package Box2D.Dynamics.Joints { import Box2D.Dynamics.*; import Box2D.Common.Math.*; public class b2PulleyJointDef extends b2JointDef { public var maxLength1:Number; public var maxLength2:Number; public var length1:Number; public var localAnchor1:b2Vec2; public var localAnchor2:b2Vec2; public var groundAnchor1:b2Vec2; public var groundAnchor2:b2Vec2; public var ratio:Number; public var length2:Number; 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(b1:b2Body, b2:b2Body, ga1:b2Vec2, ga2:b2Vec2, anchor1:b2Vec2, anchor2:b2Vec2, r:Number):void{ body1 = b1; body2 = b2; groundAnchor1.SetV(ga1); groundAnchor2.SetV(ga2); localAnchor1 = body1.GetLocalPoint(anchor1); localAnchor2 = body2.GetLocalPoint(anchor2); var d1X:Number = (anchor1.x - ga1.x); var d1Y:Number = (anchor1.y - ga1.y); length1 = Math.sqrt(((d1X * d1X) + (d1Y * d1Y))); var d2X:Number = (anchor2.x - ga2.x); var d2Y:Number = (anchor2.y - ga2.y); length2 = Math.sqrt(((d2X * d2X) + (d2Y * d2Y))); ratio = r; var C:Number = (length1 + (ratio * length2)); maxLength1 = (C - (ratio * b2PulleyJoint.b2_minPulleyLength)); maxLength2 = ((C - b2PulleyJoint.b2_minPulleyLength) / ratio); } } }//package Box2D.Dynamics.Joints
Section 65
//b2RevoluteJoint (Box2D.Dynamics.Joints.b2RevoluteJoint) package Box2D.Dynamics.Joints { import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Common.*; public class b2RevoluteJoint extends b2Joint { public var m_limitForce:Number; public var m_pivotMass:b2Mat22; public var m_motorForce:Number; public var m_enableLimit:Boolean; public var m_limitState:int; public var m_motorMass:Number; public var m_localAnchor1:b2Vec2; public var m_localAnchor2:b2Vec2; private var K1:b2Mat22; private var K2:b2Mat22; private var K3:b2Mat22; private var K:b2Mat22; public var m_pivotForce:b2Vec2; public var m_enableMotor:Boolean; public var m_referenceAngle:Number; public var m_limitPositionImpulse:Number; public var m_motorSpeed:Number; public var m_upperAngle:Number; public var m_lowerAngle:Number; public var m_maxMotorTorque:Number; public static var tImpulse:b2Vec2 = new b2Vec2(); public function b2RevoluteJoint(def:b2RevoluteJointDef){ K = new b2Mat22(); K1 = new b2Mat22(); K2 = new b2Mat22(); K3 = new b2Mat22(); m_localAnchor1 = new b2Vec2(); m_localAnchor2 = new b2Vec2(); m_pivotForce = new b2Vec2(); m_pivotMass = new b2Mat22(); super(def); m_localAnchor1.SetV(def.localAnchor1); m_localAnchor2.SetV(def.localAnchor2); m_referenceAngle = def.referenceAngle; m_pivotForce.Set(0, 0); m_motorForce = 0; m_limitForce = 0; m_limitPositionImpulse = 0; m_lowerAngle = def.lowerAngle; m_upperAngle = def.upperAngle; m_maxMotorTorque = def.maxMotorTorque; m_motorSpeed = def.motorSpeed; m_enableLimit = def.enableLimit; m_enableMotor = def.enableMotor; } override public function SolveVelocityConstraints(step:b2TimeStep):void{ var tMat:b2Mat22; var tX:Number; var oldLimitForce:Number; var PY:Number; var motorCdot:Number; var motorForce:Number; var oldMotorForce:Number; var limitCdot:Number; var limitForce:Number; var b1:b2Body = m_body1; var b2:b2Body = m_body2; tMat = b1.m_xf.R; var r1X:Number = (m_localAnchor1.x - b1.m_sweep.localCenter.x); var r1Y:Number = (m_localAnchor1.y - b1.m_sweep.localCenter.y); tX = ((tMat.col1.x * r1X) + (tMat.col2.x * r1Y)); r1Y = ((tMat.col1.y * r1X) + (tMat.col2.y * r1Y)); r1X = tX; tMat = b2.m_xf.R; var r2X:Number = (m_localAnchor2.x - b2.m_sweep.localCenter.x); var r2Y:Number = (m_localAnchor2.y - b2.m_sweep.localCenter.y); tX = ((tMat.col1.x * r2X) + (tMat.col2.x * r2Y)); r2Y = ((tMat.col1.y * r2X) + (tMat.col2.y * r2Y)); r2X = tX; var pivotCdotX:Number = (((b2.m_linearVelocity.x + (-(b2.m_angularVelocity) * r2Y)) - b1.m_linearVelocity.x) - (-(b1.m_angularVelocity) * r1Y)); var pivotCdotY:Number = (((b2.m_linearVelocity.y + (b2.m_angularVelocity * r2X)) - b1.m_linearVelocity.y) - (b1.m_angularVelocity * r1X)); var pivotForceX:Number = (-(step.inv_dt) * ((m_pivotMass.col1.x * pivotCdotX) + (m_pivotMass.col2.x * pivotCdotY))); var pivotForceY:Number = (-(step.inv_dt) * ((m_pivotMass.col1.y * pivotCdotX) + (m_pivotMass.col2.y * pivotCdotY))); m_pivotForce.x = (m_pivotForce.x + pivotForceX); m_pivotForce.y = (m_pivotForce.y + pivotForceY); var PX:Number = (step.dt * pivotForceX); PY = (step.dt * pivotForceY); b1.m_linearVelocity.x = (b1.m_linearVelocity.x - (b1.m_invMass * PX)); b1.m_linearVelocity.y = (b1.m_linearVelocity.y - (b1.m_invMass * PY)); b1.m_angularVelocity = (b1.m_angularVelocity - (b1.m_invI * ((r1X * PY) - (r1Y * PX)))); b2.m_linearVelocity.x = (b2.m_linearVelocity.x + (b2.m_invMass * PX)); b2.m_linearVelocity.y = (b2.m_linearVelocity.y + (b2.m_invMass * PY)); b2.m_angularVelocity = (b2.m_angularVelocity + (b2.m_invI * ((r2X * PY) - (r2Y * PX)))); if (((m_enableMotor) && (!((m_limitState == e_equalLimits))))){ motorCdot = ((b2.m_angularVelocity - b1.m_angularVelocity) - m_motorSpeed); motorForce = ((-(step.inv_dt) * m_motorMass) * motorCdot); oldMotorForce = m_motorForce; m_motorForce = b2Math.b2Clamp((m_motorForce + motorForce), -(m_maxMotorTorque), m_maxMotorTorque); motorForce = (m_motorForce - oldMotorForce); b1.m_angularVelocity = (b1.m_angularVelocity - ((b1.m_invI * step.dt) * motorForce)); b2.m_angularVelocity = (b2.m_angularVelocity + ((b2.m_invI * step.dt) * motorForce)); }; if (((m_enableLimit) && (!((m_limitState == e_inactiveLimit))))){ limitCdot = (b2.m_angularVelocity - b1.m_angularVelocity); limitForce = ((-(step.inv_dt) * m_motorMass) * limitCdot); if (m_limitState == e_equalLimits){ m_limitForce = (m_limitForce + limitForce); } else { if (m_limitState == e_atLowerLimit){ oldLimitForce = m_limitForce; m_limitForce = b2Math.b2Max((m_limitForce + limitForce), 0); limitForce = (m_limitForce - oldLimitForce); } else { if (m_limitState == e_atUpperLimit){ oldLimitForce = m_limitForce; m_limitForce = b2Math.b2Min((m_limitForce + limitForce), 0); limitForce = (m_limitForce - oldLimitForce); }; }; }; b1.m_angularVelocity = (b1.m_angularVelocity - ((b1.m_invI * step.dt) * limitForce)); b2.m_angularVelocity = (b2.m_angularVelocity + ((b2.m_invI * step.dt) * limitForce)); }; } 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(flag:Boolean):void{ m_enableMotor = flag; } public function GetMotorSpeed():Number{ return (m_motorSpeed); } override public function GetReactionForce():b2Vec2{ return (m_pivotForce); } override public function SolvePositionConstraints():Boolean{ var oldLimitImpulse:Number; var limitC:Number; var tMat:b2Mat22; var angle:Number; var limitImpulse:Number; var b1:b2Body = m_body1; var b2:b2Body = m_body2; var positionError:Number = 0; tMat = b1.m_xf.R; var r1X:Number = (m_localAnchor1.x - b1.m_sweep.localCenter.x); var r1Y:Number = (m_localAnchor1.y - b1.m_sweep.localCenter.y); var tX:Number = ((tMat.col1.x * r1X) + (tMat.col2.x * r1Y)); r1Y = ((tMat.col1.y * r1X) + (tMat.col2.y * r1Y)); r1X = tX; tMat = b2.m_xf.R; var r2X:Number = (m_localAnchor2.x - b2.m_sweep.localCenter.x); var r2Y:Number = (m_localAnchor2.y - b2.m_sweep.localCenter.y); tX = ((tMat.col1.x * r2X) + (tMat.col2.x * r2Y)); r2Y = ((tMat.col1.y * r2X) + (tMat.col2.y * r2Y)); r2X = tX; var p1X:Number = (b1.m_sweep.c.x + r1X); var p1Y:Number = (b1.m_sweep.c.y + r1Y); var p2X:Number = (b2.m_sweep.c.x + r2X); var p2Y:Number = (b2.m_sweep.c.y + r2Y); var ptpCX:Number = (p2X - p1X); var ptpCY:Number = (p2Y - p1Y); positionError = Math.sqrt(((ptpCX * ptpCX) + (ptpCY * ptpCY))); var invMass1:Number = b1.m_invMass; var invMass2:Number = b2.m_invMass; var invI1:Number = b1.m_invI; var invI2:Number = b2.m_invI; K1.col1.x = (invMass1 + invMass2); K1.col2.x = 0; K1.col1.y = 0; K1.col2.y = (invMass1 + invMass2); K2.col1.x = ((invI1 * r1Y) * r1Y); K2.col2.x = ((-(invI1) * r1X) * r1Y); K2.col1.y = ((-(invI1) * r1X) * r1Y); K2.col2.y = ((invI1 * r1X) * r1X); K3.col1.x = ((invI2 * r2Y) * r2Y); K3.col2.x = ((-(invI2) * r2X) * r2Y); K3.col1.y = ((-(invI2) * r2X) * r2Y); K3.col2.y = ((invI2 * r2X) * r2X); K.SetM(K1); K.AddM(K2); K.AddM(K3); K.Solve(tImpulse, -(ptpCX), -(ptpCY)); var impulseX:Number = tImpulse.x; var impulseY:Number = tImpulse.y; b1.m_sweep.c.x = (b1.m_sweep.c.x - (b1.m_invMass * impulseX)); b1.m_sweep.c.y = (b1.m_sweep.c.y - (b1.m_invMass * impulseY)); b1.m_sweep.a = (b1.m_sweep.a - (b1.m_invI * ((r1X * impulseY) - (r1Y * impulseX)))); b2.m_sweep.c.x = (b2.m_sweep.c.x + (b2.m_invMass * impulseX)); b2.m_sweep.c.y = (b2.m_sweep.c.y + (b2.m_invMass * impulseY)); b2.m_sweep.a = (b2.m_sweep.a + (b2.m_invI * ((r2X * impulseY) - (r2Y * impulseX)))); b1.SynchronizeTransform(); b2.SynchronizeTransform(); var angularError:Number = 0; if (((m_enableLimit) && (!((m_limitState == e_inactiveLimit))))){ angle = ((b2.m_sweep.a - b1.m_sweep.a) - m_referenceAngle); limitImpulse = 0; if (m_limitState == e_equalLimits){ limitC = b2Math.b2Clamp(angle, -(b2Settings.b2_maxAngularCorrection), b2Settings.b2_maxAngularCorrection); limitImpulse = (-(m_motorMass) * limitC); angularError = b2Math.b2Abs(limitC); } else { if (m_limitState == e_atLowerLimit){ limitC = (angle - m_lowerAngle); angularError = b2Math.b2Max(0, -(limitC)); limitC = b2Math.b2Clamp((limitC + b2Settings.b2_angularSlop), -(b2Settings.b2_maxAngularCorrection), 0); limitImpulse = (-(m_motorMass) * limitC); oldLimitImpulse = m_limitPositionImpulse; m_limitPositionImpulse = b2Math.b2Max((m_limitPositionImpulse + limitImpulse), 0); limitImpulse = (m_limitPositionImpulse - oldLimitImpulse); } else { if (m_limitState == e_atUpperLimit){ limitC = (angle - m_upperAngle); angularError = b2Math.b2Max(0, limitC); limitC = b2Math.b2Clamp((limitC - b2Settings.b2_angularSlop), 0, b2Settings.b2_maxAngularCorrection); limitImpulse = (-(m_motorMass) * limitC); oldLimitImpulse = m_limitPositionImpulse; m_limitPositionImpulse = b2Math.b2Min((m_limitPositionImpulse + limitImpulse), 0); limitImpulse = (m_limitPositionImpulse - oldLimitImpulse); }; }; }; b1.m_sweep.a = (b1.m_sweep.a - (b1.m_invI * limitImpulse)); b2.m_sweep.a = (b2.m_sweep.a + (b2.m_invI * limitImpulse)); b1.SynchronizeTransform(); b2.SynchronizeTransform(); }; return ((((positionError <= b2Settings.b2_linearSlop)) && ((angularError <= b2Settings.b2_angularSlop)))); } public function SetMotorSpeed(speed:Number):void{ m_motorSpeed = speed; } public function GetJointSpeed():Number{ return ((m_body2.m_angularVelocity - m_body1.m_angularVelocity)); } public function SetMaxMotorTorque(torque:Number):void{ m_maxMotorTorque = torque; } public function GetJointAngle():Number{ return (((m_body2.m_sweep.a - m_body1.m_sweep.a) - m_referenceAngle)); } public function GetMotorTorque():Number{ return (m_motorForce); } override public function InitVelocityConstraints(step:b2TimeStep):void{ var b1:b2Body; var b2:b2Body; var tMat:b2Mat22; var tX:Number; var r1Y:Number; var jointAngle:Number; b1 = m_body1; b2 = m_body2; tMat = b1.m_xf.R; var r1X:Number = (m_localAnchor1.x - b1.m_sweep.localCenter.x); r1Y = (m_localAnchor1.y - b1.m_sweep.localCenter.y); tX = ((tMat.col1.x * r1X) + (tMat.col2.x * r1Y)); r1Y = ((tMat.col1.y * r1X) + (tMat.col2.y * r1Y)); r1X = tX; tMat = b2.m_xf.R; var r2X:Number = (m_localAnchor2.x - b2.m_sweep.localCenter.x); var r2Y:Number = (m_localAnchor2.y - b2.m_sweep.localCenter.y); tX = ((tMat.col1.x * r2X) + (tMat.col2.x * r2Y)); r2Y = ((tMat.col1.y * r2X) + (tMat.col2.y * r2Y)); r2X = tX; var invMass1:Number = b1.m_invMass; var invMass2:Number = b2.m_invMass; var invI1:Number = b1.m_invI; var invI2:Number = b2.m_invI; K1.col1.x = (invMass1 + invMass2); K1.col2.x = 0; K1.col1.y = 0; K1.col2.y = (invMass1 + invMass2); K2.col1.x = ((invI1 * r1Y) * r1Y); K2.col2.x = ((-(invI1) * r1X) * r1Y); K2.col1.y = ((-(invI1) * r1X) * r1Y); K2.col2.y = ((invI1 * r1X) * r1X); K3.col1.x = ((invI2 * r2Y) * r2Y); K3.col2.x = ((-(invI2) * r2X) * r2Y); K3.col1.y = ((-(invI2) * r2X) * r2Y); K3.col2.y = ((invI2 * r2X) * r2X); K.SetM(K1); K.AddM(K2); K.AddM(K3); K.Invert(m_pivotMass); m_motorMass = (1 / (invI1 + invI2)); if (m_enableMotor == false){ m_motorForce = 0; }; if (m_enableLimit){ jointAngle = ((b2.m_sweep.a - b1.m_sweep.a) - m_referenceAngle); if (b2Math.b2Abs((m_upperAngle - m_lowerAngle)) < (2 * b2Settings.b2_angularSlop)){ m_limitState = e_equalLimits; } else { if (jointAngle <= m_lowerAngle){ if (m_limitState != e_atLowerLimit){ m_limitForce = 0; }; m_limitState = e_atLowerLimit; } else { if (jointAngle >= m_upperAngle){ if (m_limitState != e_atUpperLimit){ m_limitForce = 0; }; m_limitState = e_atUpperLimit; } else { m_limitState = e_inactiveLimit; m_limitForce = 0; }; }; }; } else { m_limitForce = 0; }; if (step.warmStarting){ b1.m_linearVelocity.x = (b1.m_linearVelocity.x - ((step.dt * invMass1) * m_pivotForce.x)); b1.m_linearVelocity.y = (b1.m_linearVelocity.y - ((step.dt * invMass1) * m_pivotForce.y)); b1.m_angularVelocity = (b1.m_angularVelocity - ((step.dt * invI1) * ((((r1X * m_pivotForce.y) - (r1Y * m_pivotForce.x)) + m_motorForce) + m_limitForce))); b2.m_linearVelocity.x = (b2.m_linearVelocity.x + ((step.dt * invMass2) * m_pivotForce.x)); b2.m_linearVelocity.y = (b2.m_linearVelocity.y + ((step.dt * invMass2) * m_pivotForce.y)); b2.m_angularVelocity = (b2.m_angularVelocity + ((step.dt * invI2) * ((((r2X * m_pivotForce.y) - (r2Y * m_pivotForce.x)) + m_motorForce) + m_limitForce))); } else { m_pivotForce.SetZero(); m_motorForce = 0; m_limitForce = 0; }; m_limitPositionImpulse = 0; } public function EnableLimit(flag:Boolean):void{ m_enableLimit = flag; } override public function GetReactionTorque():Number{ return (m_limitForce); } public function IsLimitEnabled():Boolean{ return (m_enableLimit); } public function IsMotorEnabled():Boolean{ return (m_enableMotor); } public function SetLimits(lower:Number, upper:Number):void{ m_lowerAngle = lower; m_upperAngle = upper; } } }//package Box2D.Dynamics.Joints
Section 66
//b2RevoluteJointDef (Box2D.Dynamics.Joints.b2RevoluteJointDef) package Box2D.Dynamics.Joints { import Box2D.Dynamics.*; import Box2D.Common.Math.*; public class b2RevoluteJointDef extends b2JointDef { public var upperAngle:Number; public var enableMotor:Boolean; public var referenceAngle:Number; public var motorSpeed:Number; public var localAnchor1:b2Vec2; public var localAnchor2:b2Vec2; public var enableLimit:Boolean; public var lowerAngle:Number; public var maxMotorTorque:Number; 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(b1:b2Body, b2:b2Body, anchor:b2Vec2):void{ body1 = b1; body2 = b2; localAnchor1 = body1.GetLocalPoint(anchor); localAnchor2 = body2.GetLocalPoint(anchor); referenceAngle = (body2.GetAngle() - body1.GetAngle()); } } }//package Box2D.Dynamics.Joints
Section 67
//b2Body (Box2D.Dynamics.b2Body) package Box2D.Dynamics { import Box2D.Common.Math.*; import Box2D.Collision.Shapes.*; import Box2D.Dynamics.Joints.*; import Box2D.Common.*; import Box2D.Dynamics.Contacts.*; public class b2Body { public var m_next:b2Body; public var m_xf:b2XForm; public var m_contactList:b2ContactEdge; public var m_angularVelocity:Number; public var m_shapeList:b2Shape; public var m_force:b2Vec2; public var m_mass:Number; public var m_sweep:b2Sweep; public var m_torque:Number; public var m_userData; public var m_flags:uint; public var m_world:b2World; public var m_prev:b2Body; public var m_invMass:Number; public var m_type:int; public var m_linearDamping:Number; public var m_shapeCount:int; public var m_angularDamping:Number; public var m_invI:Number; public var m_linearVelocity:b2Vec2; public var m_sleepTime:Number; public var m_jointList:b2JointEdge; public var m_I:Number; public static var e_fixedRotationFlag:uint = 64; public static var e_frozenFlag:uint = 2; public static var e_maxTypes:uint = 3; public static var e_sleepFlag:uint = 8; private static var s_massData:b2MassData = new b2MassData(); public static var e_bulletFlag:uint = 32; public static var e_staticType:uint = 1; public static var e_islandFlag:uint = 4; public static var e_allowSleepFlag:uint = 16; private static var s_xf1:b2XForm = new b2XForm(); public static var e_dynamicType:uint = 2; public function b2Body(bd:b2BodyDef, world:b2World){ m_xf = new b2XForm(); m_sweep = new b2Sweep(); m_linearVelocity = new b2Vec2(); m_force = new b2Vec2(); super(); m_flags = 0; if (bd.isBullet){ m_flags = (m_flags | e_bulletFlag); }; if (bd.fixedRotation){ m_flags = (m_flags | e_fixedRotationFlag); }; if (bd.allowSleep){ m_flags = (m_flags | e_allowSleepFlag); }; if (bd.isSleeping){ m_flags = (m_flags | e_sleepFlag); }; m_world = world; m_xf.position.SetV(bd.position); m_xf.R.Set(bd.angle); m_sweep.localCenter.SetV(bd.massData.center); m_sweep.t0 = 1; m_sweep.a0 = (m_sweep.a = bd.angle); var tMat:b2Mat22 = m_xf.R; var tVec:b2Vec2 = m_sweep.localCenter; m_sweep.c.x = ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y)); m_sweep.c.y = ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.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_contactList = null; m_prev = null; m_next = null; m_linearDamping = bd.linearDamping; m_angularDamping = bd.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 = bd.massData.mass; if (m_mass > 0){ m_invMass = (1 / m_mass); }; if ((m_flags & b2Body.e_fixedRotationFlag) == 0){ m_I = bd.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 = bd.userData; m_shapeList = null; m_shapeCount = 0; } public function GetLinearVelocityFromWorldPoint(worldPoint:b2Vec2):b2Vec2{ return (new b2Vec2((m_linearVelocity.x - (m_angularVelocity * (worldPoint.y - m_sweep.c.y))), (m_linearVelocity.y + (m_angularVelocity * (worldPoint.x - m_sweep.c.x))))); } public function SetLinearVelocity(v:b2Vec2):void{ m_linearVelocity.SetV(v); } public function WakeUp():void{ m_flags = (m_flags & ~(e_sleepFlag)); m_sleepTime = 0; } public function GetLocalCenter():b2Vec2{ return (m_sweep.localCenter); } public function ApplyTorque(torque:Number):void{ if (IsSleeping()){ WakeUp(); }; m_torque = (m_torque + torque); } public function IsFrozen():Boolean{ return (((m_flags & e_frozenFlag) == e_frozenFlag)); } public function IsDynamic():Boolean{ return ((m_type == e_dynamicType)); } public function GetLinearVelocity():b2Vec2{ return (m_linearVelocity); } public function SynchronizeTransform():void{ m_xf.R.Set(m_sweep.a); var tMat:b2Mat22 = m_xf.R; var tVec:b2Vec2 = m_sweep.localCenter; m_xf.position.x = (m_sweep.c.x - ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y))); m_xf.position.y = (m_sweep.c.y - ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y))); } public function GetInertia():Number{ return (m_I); } public function IsSleeping():Boolean{ return (((m_flags & e_sleepFlag) == e_sleepFlag)); } public function SetMassFromShapes():void{ var s:b2Shape; if (m_world.m_lock == true){ return; }; m_mass = 0; m_invMass = 0; m_I = 0; m_invI = 0; var centerX:Number = 0; var centerY:Number = 0; var massData:b2MassData = s_massData; s = m_shapeList; while (s) { s.ComputeMass(massData); m_mass = (m_mass + massData.mass); centerX = (centerX + (massData.mass * massData.center.x)); centerY = (centerY + (massData.mass * massData.center.y)); m_I = (m_I + massData.I); s = s.m_next; }; if (m_mass > 0){ m_invMass = (1 / m_mass); centerX = (centerX * m_invMass); centerY = (centerY * m_invMass); }; if ((((m_I > 0)) && (((m_flags & e_fixedRotationFlag) == 0)))){ m_I = (m_I - (m_mass * ((centerX * centerX) + (centerY * centerY)))); m_invI = (1 / m_I); } else { m_I = 0; m_invI = 0; }; m_sweep.localCenter.Set(centerX, centerY); var tMat:b2Mat22 = m_xf.R; var tVec:b2Vec2 = m_sweep.localCenter; m_sweep.c.x = ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y)); m_sweep.c.y = ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.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); s = m_shapeList; while (s) { s.UpdateSweepRadius(m_sweep.localCenter); s = s.m_next; }; var oldType:int = m_type; if ((((m_invMass == 0)) && ((m_invI == 0)))){ m_type = e_staticType; } else { m_type = e_dynamicType; }; if (oldType != m_type){ s = m_shapeList; while (s) { s.RefilterProxy(m_world.m_broadPhase, m_xf); s = s.m_next; }; }; } 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 GetJointList():b2JointEdge{ return (m_jointList); } public function SetXForm(position:b2Vec2, angle:Number):Boolean{ var s:b2Shape; var inRange:Boolean; if (m_world.m_lock == true){ return (true); }; if (IsFrozen()){ return (false); }; m_xf.R.Set(angle); m_xf.position.SetV(position); var tMat:b2Mat22 = m_xf.R; var tVec:b2Vec2 = m_sweep.localCenter; m_sweep.c.x = ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y)); m_sweep.c.y = ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.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 = angle); var freeze:Boolean; s = m_shapeList; while (s) { inRange = s.Synchronize(m_world.m_broadPhase, m_xf, m_xf); if (inRange == false){ freeze = true; break; }; s = s.m_next; }; if (freeze == true){ m_flags = (m_flags | e_frozenFlag); m_linearVelocity.SetZero(); m_angularVelocity = 0; s = m_shapeList; while (s) { s.DestroyProxy(m_world.m_broadPhase); s = s.m_next; }; return (false); }; m_world.m_broadPhase.Commit(); return (true); } public function GetLocalPoint(worldPoint:b2Vec2):b2Vec2{ return (b2Math.b2MulXT(m_xf, worldPoint)); } public function ApplyForce(force:b2Vec2, point:b2Vec2):void{ if (IsSleeping()){ WakeUp(); }; m_force.x = (m_force.x + force.x); m_force.y = (m_force.y + force.y); m_torque = (m_torque + (((point.x - m_sweep.c.x) * force.y) - ((point.y - m_sweep.c.y) * force.x))); } public function SynchronizeShapes():Boolean{ var s:b2Shape; var xf1:b2XForm = s_xf1; xf1.R.Set(m_sweep.a0); var tMat:b2Mat22 = xf1.R; var tVec:b2Vec2 = m_sweep.localCenter; xf1.position.x = (m_sweep.c0.x - ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y))); xf1.position.y = (m_sweep.c0.y - ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y))); var inRange:Boolean; s = m_shapeList; while (s) { inRange = s.Synchronize(m_world.m_broadPhase, xf1, m_xf); if (inRange == false){ break; }; s = s.m_next; }; if (inRange == false){ m_flags = (m_flags | e_frozenFlag); m_linearVelocity.SetZero(); m_angularVelocity = 0; s = m_shapeList; while (s) { s.DestroyProxy(m_world.m_broadPhase); s = s.m_next; }; return (false); }; return (true); } public function GetAngle():Number{ return (m_sweep.a); } public function GetXForm():b2XForm{ return (m_xf); } public function GetLinearVelocityFromLocalPoint(localPoint:b2Vec2):b2Vec2{ var A:b2Mat22 = m_xf.R; var worldPoint:b2Vec2 = new b2Vec2(((A.col1.x * localPoint.x) + (A.col2.x * localPoint.y)), ((A.col1.y * localPoint.x) + (A.col2.y * localPoint.y))); worldPoint.x = (worldPoint.x + m_xf.position.x); worldPoint.y = (worldPoint.y + m_xf.position.y); return (new b2Vec2((m_linearVelocity.x + (m_angularVelocity * (worldPoint.y - m_sweep.c.y))), (m_linearVelocity.x - (m_angularVelocity * (worldPoint.x - m_sweep.c.x))))); } public function GetNext():b2Body{ return (m_next); } public function GetMass():Number{ return (m_mass); } public function ApplyImpulse(impulse:b2Vec2, point:b2Vec2):void{ if (IsSleeping()){ WakeUp(); }; m_linearVelocity.x = (m_linearVelocity.x + (m_invMass * impulse.x)); m_linearVelocity.y = (m_linearVelocity.y + (m_invMass * impulse.y)); m_angularVelocity = (m_angularVelocity + (m_invI * (((point.x - m_sweep.c.x) * impulse.y) - ((point.y - m_sweep.c.y) * impulse.x)))); } public function GetAngularVelocity():Number{ return (m_angularVelocity); } public function SetAngularVelocity(omega:Number):void{ m_angularVelocity = omega; } public function SetMass(massData:b2MassData):void{ var s:b2Shape; if (m_world.m_lock == true){ return; }; m_invMass = 0; m_I = 0; m_invI = 0; m_mass = massData.mass; if (m_mass > 0){ m_invMass = (1 / m_mass); }; if ((m_flags & b2Body.e_fixedRotationFlag) == 0){ m_I = massData.I; }; if (m_I > 0){ m_invI = (1 / m_I); }; m_sweep.localCenter.SetV(massData.center); var tMat:b2Mat22 = m_xf.R; var tVec:b2Vec2 = m_sweep.localCenter; m_sweep.c.x = ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y)); m_sweep.c.y = ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.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); s = m_shapeList; while (s) { s.UpdateSweepRadius(m_sweep.localCenter); s = s.m_next; }; var oldType:int = m_type; if ((((m_invMass == 0)) && ((m_invI == 0)))){ m_type = e_staticType; } else { m_type = e_dynamicType; }; if (oldType != m_type){ s = m_shapeList; while (s) { s.RefilterProxy(m_world.m_broadPhase, m_xf); s = s.m_next; }; }; } public function IsStatic():Boolean{ return ((m_type == e_staticType)); } public function GetWorldVector(localVector:b2Vec2):b2Vec2{ return (b2Math.b2MulMV(m_xf.R, localVector)); } public function GetShapeList():b2Shape{ return (m_shapeList); } public function Advance(t:Number):void{ m_sweep.Advance(t); m_sweep.c.SetV(m_sweep.c0); m_sweep.a = m_sweep.a0; SynchronizeTransform(); } public function SetBullet(flag:Boolean):void{ if (flag){ m_flags = (m_flags | e_bulletFlag); } else { m_flags = (m_flags & ~(e_bulletFlag)); }; } public function CreateShape(def:b2ShapeDef):b2Shape{ var s:b2Shape; if (m_world.m_lock == true){ return (null); }; s = b2Shape.Create(def, m_world.m_blockAllocator); s.m_next = m_shapeList; m_shapeList = s; m_shapeCount++; s.m_body = this; s.CreateProxy(m_world.m_broadPhase, m_xf); s.UpdateSweepRadius(m_sweep.localCenter); return (s); } public function IsConnected(other:b2Body):Boolean{ var jn:b2JointEdge = m_jointList; while (jn) { if (jn.other == other){ return ((jn.joint.m_collideConnected == false)); }; jn = jn.next; }; return (false); } public function DestroyShape(s:b2Shape):void{ if (m_world.m_lock == true){ return; }; s.DestroyProxy(m_world.m_broadPhase); var node:b2Shape = m_shapeList; var ppS:b2Shape; var found:Boolean; while (node != null) { if (node == s){ if (ppS){ ppS.m_next = s.m_next; } else { m_shapeList = s.m_next; }; found = true; break; }; ppS = node; node = node.m_next; }; s.m_body = null; s.m_next = null; m_shapeCount--; b2Shape.Destroy(s, m_world.m_blockAllocator); } public function GetUserData(){ return (m_userData); } public function IsBullet():Boolean{ return (((m_flags & e_bulletFlag) == e_bulletFlag)); } public function GetWorldCenter():b2Vec2{ return (m_sweep.c); } public function AllowSleeping(flag:Boolean):void{ if (flag){ m_flags = (m_flags | e_allowSleepFlag); } else { m_flags = (m_flags & ~(e_allowSleepFlag)); WakeUp(); }; } public function SetUserData(data):void{ m_userData = data; } public function GetLocalVector(worldVector:b2Vec2):b2Vec2{ return (b2Math.b2MulTMV(m_xf.R, worldVector)); } public function GetWorldPoint(localPoint:b2Vec2):b2Vec2{ var A:b2Mat22 = m_xf.R; var u:b2Vec2 = new b2Vec2(((A.col1.x * localPoint.x) + (A.col2.x * localPoint.y)), ((A.col1.y * localPoint.x) + (A.col2.y * localPoint.y))); u.x = (u.x + m_xf.position.x); u.y = (u.y + m_xf.position.y); return (u); } public function GetWorld():b2World{ return (m_world); } public function GetPosition():b2Vec2{ return (m_xf.position); } } }//package Box2D.Dynamics
Section 68
//b2BodyDef (Box2D.Dynamics.b2BodyDef) package Box2D.Dynamics { import Box2D.Common.Math.*; import Box2D.Collision.*; import Box2D.Collision.Shapes.*; import Box2D.Dynamics.Joints.*; import Box2D.Dynamics.Contacts.*; public class b2BodyDef { public var angularDamping:Number; public var angle:Number; public var isSleeping:Boolean; public var position:b2Vec2; public var isBullet:Boolean; public var allowSleep:Boolean; public var userData; public var fixedRotation:Boolean; public var linearDamping:Number; public var massData:b2MassData; public function b2BodyDef(){ massData = new b2MassData(); position = new b2Vec2(); super(); massData.center.SetZero(); massData.mass = 0; massData.I = 0; userData = null; position.Set(0, 0); angle = 0; linearDamping = 0; angularDamping = 0; allowSleep = true; isSleeping = false; fixedRotation = false; isBullet = false; } } }//package Box2D.Dynamics
Section 69
//b2BoundaryListener (Box2D.Dynamics.b2BoundaryListener) package Box2D.Dynamics { public class b2BoundaryListener { public function Violation(body:b2Body):void{ } } }//package Box2D.Dynamics
Section 70
//b2ContactFilter (Box2D.Dynamics.b2ContactFilter) package Box2D.Dynamics { import Box2D.Common.Math.*; import Box2D.Collision.*; import Box2D.Collision.Shapes.*; import Box2D.Common.*; import Box2D.Dynamics.Contacts.*; public class b2ContactFilter { public static var b2_defaultFilter:b2ContactFilter = new (b2ContactFilter); ; public function ShouldCollide(shape1:b2Shape, shape2:b2Shape):Boolean{ var filter1:b2FilterData = shape1.GetFilterData(); var filter2:b2FilterData = shape2.GetFilterData(); if ((((filter1.groupIndex == filter2.groupIndex)) && (!((filter1.groupIndex == 0))))){ return ((filter1.groupIndex > 0)); }; var collide:Boolean = ((!(((filter1.maskBits & filter2.categoryBits) == 0))) && (!(((filter1.categoryBits & filter2.maskBits) == 0)))); return (collide); } } }//package Box2D.Dynamics
Section 71
//b2ContactListener (Box2D.Dynamics.b2ContactListener) package Box2D.Dynamics { import Box2D.Collision.*; import Box2D.Dynamics.Contacts.*; public class b2ContactListener { public function Add(point:b2ContactPoint):void{ } public function Remove(point:b2ContactPoint):void{ } public function Persist(point:b2ContactPoint):void{ } public function Result(point:b2ContactResult):void{ } } }//package Box2D.Dynamics
Section 72
//b2ContactManager (Box2D.Dynamics.b2ContactManager) package Box2D.Dynamics { import Box2D.Common.Math.*; import Box2D.Collision.*; import Box2D.Collision.Shapes.*; import Box2D.Common.*; import Box2D.Dynamics.Contacts.*; public class b2ContactManager extends b2PairCallback { public var m_world:b2World; public var m_destroyImmediate:Boolean; public 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 PairRemoved(proxyUserData1, proxyUserData2, pairUserData):void{ if (pairUserData == null){ return; }; var c:b2Contact = (pairUserData as b2Contact); if (c == m_nullContact){ return; }; Destroy(c); } public function Destroy(c:b2Contact):void{ var b1:b2Body; var b2:b2Body; var manifolds:Array; var cp:b2ContactPoint; var i:int; var manifold:b2Manifold; var j:int; var mp:b2ManifoldPoint; var v1:b2Vec2; var v2:b2Vec2; var shape1:b2Shape = c.m_shape1; var shape2:b2Shape = c.m_shape2; var manifoldCount:int = c.m_manifoldCount; if ((((manifoldCount > 0)) && (m_world.m_contactListener))){ b1 = shape1.m_body; b2 = shape2.m_body; manifolds = c.GetManifolds(); cp = s_evalCP; cp.shape1 = c.m_shape1; cp.shape2 = c.m_shape2; cp.friction = c.m_friction; cp.restitution = c.m_restitution; i = 0; while (i < manifoldCount) { manifold = manifolds[i]; cp.normal.SetV(manifold.normal); j = 0; while (j < manifold.pointCount) { mp = manifold.points[j]; cp.position = b1.GetWorldPoint(mp.localPoint1); v1 = b1.GetLinearVelocityFromLocalPoint(mp.localPoint1); v2 = b2.GetLinearVelocityFromLocalPoint(mp.localPoint2); cp.velocity.Set((v2.x - v1.x), (v2.y - v1.y)); cp.separation = mp.separation; cp.id.key = mp.id._key; m_world.m_contactListener.Remove(cp); j++; }; i++; }; }; if (c.m_prev){ c.m_prev.m_next = c.m_next; }; if (c.m_next){ c.m_next.m_prev = c.m_prev; }; if (c == m_world.m_contactList){ m_world.m_contactList = c.m_next; }; var body1:b2Body = shape1.m_body; var body2:b2Body = shape2.m_body; if (c.m_node1.prev){ c.m_node1.prev.next = c.m_node1.next; }; if (c.m_node1.next){ c.m_node1.next.prev = c.m_node1.prev; }; if (c.m_node1 == body1.m_contactList){ body1.m_contactList = c.m_node1.next; }; if (c.m_node2.prev){ c.m_node2.prev.next = c.m_node2.next; }; if (c.m_node2.next){ c.m_node2.next.prev = c.m_node2.prev; }; if (c.m_node2 == body2.m_contactList){ body2.m_contactList = c.m_node2.next; }; b2Contact.Destroy(c, m_world.m_blockAllocator); m_world.m_contactCount--; } override public function PairAdded(proxyUserData1, proxyUserData2){ var shape1:b2Shape = (proxyUserData1 as b2Shape); var shape2:b2Shape = (proxyUserData2 as b2Shape); var body1:b2Body = shape1.m_body; var body2:b2Body = shape2.m_body; if (((body1.IsStatic()) && (body2.IsStatic()))){ return (m_nullContact); }; if (shape1.m_body == shape2.m_body){ return (m_nullContact); }; if (body2.IsConnected(body1)){ return (m_nullContact); }; if (((!((m_world.m_contactFilter == null))) && ((m_world.m_contactFilter.ShouldCollide(shape1, shape2) == false)))){ return (m_nullContact); }; var c:b2Contact = b2Contact.Create(shape1, shape2, m_world.m_blockAllocator); if (c == null){ return (m_nullContact); }; shape1 = c.m_shape1; shape2 = c.m_shape2; body1 = shape1.m_body; body2 = shape2.m_body; c.m_prev = null; c.m_next = m_world.m_contactList; if (m_world.m_contactList != null){ m_world.m_contactList.m_prev = c; }; m_world.m_contactList = c; c.m_node1.contact = c; c.m_node1.other = body2; c.m_node1.prev = null; c.m_node1.next = body1.m_contactList; if (body1.m_contactList != null){ body1.m_contactList.prev = c.m_node1; }; body1.m_contactList = c.m_node1; c.m_node2.contact = c; c.m_node2.other = body1; c.m_node2.prev = null; c.m_node2.next = body2.m_contactList; if (body2.m_contactList != null){ body2.m_contactList.prev = c.m_node2; }; body2.m_contactList = c.m_node2; m_world.m_contactCount++; return (c); } public function Collide():void{ var body1:b2Body; var body2:b2Body; var c:b2Contact = m_world.m_contactList; while (c) { body1 = c.m_shape1.m_body; body2 = c.m_shape2.m_body; if (((body1.IsSleeping()) && (body2.IsSleeping()))){ } else { c.Update(m_world.m_contactListener); }; c = c.m_next; }; } } }//package Box2D.Dynamics
Section 73
//b2DebugDraw (Box2D.Dynamics.b2DebugDraw) package Box2D.Dynamics { import flash.display.*; import Box2D.Common.Math.*; import Box2D.Collision.*; import Box2D.Collision.Shapes.*; import Box2D.Common.*; import Box2D.Dynamics.Contacts.*; public class b2DebugDraw { public var m_xformScale:Number;// = 1 public var m_fillAlpha:Number;// = 1 public var m_alpha:Number;// = 1 public var m_drawFlags:uint; public var m_lineThickness:Number;// = 1 public var m_drawScale:Number;// = 1 public var m_sprite:Sprite; 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_obbBit:uint = 16; public static var e_pairBit:uint = 32; public static var e_jointBit:uint = 2; public function b2DebugDraw(){ super(); m_drawFlags = 0; } public function ClearFlags(flags:uint):void{ m_drawFlags = (m_drawFlags & ~(flags)); } public function SetFlags(flags:uint):void{ m_drawFlags = flags; } public function AppendFlags(flags:uint):void{ m_drawFlags = (m_drawFlags | flags); } public function DrawSegment(p1:b2Vec2, p2:b2Vec2, color:b2Color):void{ m_sprite.graphics.lineStyle(m_lineThickness, color.color, m_alpha); m_sprite.graphics.moveTo((p1.x * m_drawScale), (p1.y * m_drawScale)); m_sprite.graphics.lineTo((p2.x * m_drawScale), (p2.y * m_drawScale)); } public function DrawSolidPolygon(vertices:Array, vertexCount:int, color:b2Color):void{ m_sprite.graphics.lineStyle(m_lineThickness, color.color, m_alpha); m_sprite.graphics.moveTo((vertices[0].x * m_drawScale), (vertices[0].y * m_drawScale)); m_sprite.graphics.beginFill(color.color, m_fillAlpha); var i = 1; while (i < vertexCount) { m_sprite.graphics.lineTo((vertices[i].x * m_drawScale), (vertices[i].y * m_drawScale)); i++; }; m_sprite.graphics.lineTo((vertices[0].x * m_drawScale), (vertices[0].y * m_drawScale)); m_sprite.graphics.endFill(); } public function DrawCircle(center:b2Vec2, radius:Number, color:b2Color):void{ m_sprite.graphics.lineStyle(m_lineThickness, color.color, m_alpha); m_sprite.graphics.drawCircle((center.x * m_drawScale), (center.y * m_drawScale), (radius * m_drawScale)); } public function DrawPolygon(vertices:Array, vertexCount:int, color:b2Color):void{ m_sprite.graphics.lineStyle(m_lineThickness, color.color, m_alpha); m_sprite.graphics.moveTo((vertices[0].x * m_drawScale), (vertices[0].y * m_drawScale)); var i = 1; while (i < vertexCount) { m_sprite.graphics.lineTo((vertices[i].x * m_drawScale), (vertices[i].y * m_drawScale)); i++; }; m_sprite.graphics.lineTo((vertices[0].x * m_drawScale), (vertices[0].y * m_drawScale)); } public function DrawSolidCircle(center:b2Vec2, radius:Number, axis:b2Vec2, color:b2Color):void{ m_sprite.graphics.lineStyle(m_lineThickness, color.color, m_alpha); m_sprite.graphics.moveTo(0, 0); m_sprite.graphics.beginFill(color.color, m_fillAlpha); m_sprite.graphics.drawCircle((center.x * m_drawScale), (center.y * m_drawScale), (radius * m_drawScale)); m_sprite.graphics.endFill(); m_sprite.graphics.moveTo((center.x * m_drawScale), (center.y * m_drawScale)); m_sprite.graphics.lineTo(((center.x + (axis.x * radius)) * m_drawScale), ((center.y + (axis.y * radius)) * m_drawScale)); } public function GetFlags():uint{ return (m_drawFlags); } public function DrawXForm(xf:b2XForm):void{ m_sprite.graphics.lineStyle(m_lineThickness, 0xFF0000, m_alpha); m_sprite.graphics.moveTo((xf.position.x * m_drawScale), (xf.position.y * m_drawScale)); m_sprite.graphics.lineTo(((xf.position.x + (m_xformScale * xf.R.col1.x)) * m_drawScale), ((xf.position.y + (m_xformScale * xf.R.col1.y)) * m_drawScale)); m_sprite.graphics.lineStyle(m_lineThickness, 0xFF00, m_alpha); m_sprite.graphics.moveTo((xf.position.x * m_drawScale), (xf.position.y * m_drawScale)); m_sprite.graphics.lineTo(((xf.position.x + (m_xformScale * xf.R.col2.x)) * m_drawScale), ((xf.position.y + (m_xformScale * xf.R.col2.y)) * m_drawScale)); } } }//package Box2D.Dynamics
Section 74
//b2DestructionListener (Box2D.Dynamics.b2DestructionListener) package Box2D.Dynamics { import Box2D.Collision.Shapes.*; import Box2D.Dynamics.Joints.*; public class b2DestructionListener { public function SayGoodbyeShape(shape:b2Shape):void{ } public function SayGoodbyeJoint(joint:b2Joint):void{ } } }//package Box2D.Dynamics
Section 75
//b2Island (Box2D.Dynamics.b2Island) package Box2D.Dynamics { import Box2D.Common.Math.*; import Box2D.Collision.*; import Box2D.Dynamics.Joints.*; import Box2D.Common.*; import Box2D.Dynamics.Contacts.*; public class b2Island { public var m_listener:b2ContactListener; public var m_positionIterationCount:int; public var m_bodyCapacity:int; public var m_bodies:Array; public var m_joints:Array; public var m_jointCapacity:int; public var m_contactCount:int; public var m_contacts:Array; public var m_contactCapacity:int; public var m_jointCount:int; public var m_allocator; public var m_bodyCount:int; private static var s_reportCR:b2ContactResult = new b2ContactResult(); public function b2Island(bodyCapacity:int, contactCapacity:int, jointCapacity:int, allocator, listener:b2ContactListener){ var i:int; super(); m_bodyCapacity = bodyCapacity; m_contactCapacity = contactCapacity; m_jointCapacity = jointCapacity; m_bodyCount = 0; m_contactCount = 0; m_jointCount = 0; m_allocator = allocator; m_listener = listener; m_bodies = new Array(bodyCapacity); i = 0; while (i < bodyCapacity) { m_bodies[i] = null; i++; }; m_contacts = new Array(contactCapacity); i = 0; while (i < contactCapacity) { m_contacts[i] = null; i++; }; m_joints = new Array(jointCapacity); i = 0; while (i < jointCapacity) { m_joints[i] = null; i++; }; m_positionIterationCount = 0; } public function AddBody(body:b2Body):void{ var _local2 = m_bodyCount++; m_bodies[_local2] = body; } public function AddJoint(joint:b2Joint):void{ var _local2 = m_jointCount++; m_joints[_local2] = joint; } public function Report(constraints:Array):void{ var tMat:b2Mat22; var tVec:b2Vec2; var c:b2Contact; var cc:b2ContactConstraint; var cr:b2ContactResult; var b1:b2Body; var manifoldCount:int; var manifolds:Array; var j:int; var manifold:b2Manifold; var k:int; var point:b2ManifoldPoint; var ccp:b2ContactConstraintPoint; if (m_listener == null){ return; }; var i:int; while (i < m_contactCount) { c = m_contacts[i]; cc = constraints[i]; cr = s_reportCR; cr.shape1 = c.m_shape1; cr.shape2 = c.m_shape2; b1 = cr.shape1.m_body; manifoldCount = c.m_manifoldCount; manifolds = c.GetManifolds(); j = 0; while (j < manifoldCount) { manifold = manifolds[j]; cr.normal.SetV(manifold.normal); k = 0; while (k < manifold.pointCount) { point = manifold.points[k]; ccp = cc.points[k]; cr.position = b1.GetWorldPoint(point.localPoint1); cr.normalImpulse = ccp.normalImpulse; cr.tangentImpulse = ccp.tangentImpulse; cr.id.key = point.id.key; m_listener.Result(cr); k++; }; j++; }; i++; }; } public function AddContact(contact:b2Contact):void{ var _local2 = m_contactCount++; m_contacts[_local2] = contact; } public function Solve(step:b2TimeStep, gravity:b2Vec2, correctPositions:Boolean, allowSleep:Boolean):void{ var i:int; var b:b2Body; var joint:b2Joint; var j:int; var contactsOkay:Boolean; var jointsOkay:Boolean; var jointOkay:Boolean; var minSleepTime:Number; var linTolSqr:Number; var angTolSqr:Number; i = 0; while (i < m_bodyCount) { b = m_bodies[i]; if (b.IsStatic()){ } else { b.m_linearVelocity.x = (b.m_linearVelocity.x + (step.dt * (gravity.x + (b.m_invMass * b.m_force.x)))); b.m_linearVelocity.y = (b.m_linearVelocity.y + (step.dt * (gravity.y + (b.m_invMass * b.m_force.y)))); b.m_angularVelocity = (b.m_angularVelocity + ((step.dt * b.m_invI) * b.m_torque)); b.m_force.SetZero(); b.m_torque = 0; b.m_linearVelocity.Multiply(b2Math.b2Clamp((1 - (step.dt * b.m_linearDamping)), 0, 1)); b.m_angularVelocity = (b.m_angularVelocity * b2Math.b2Clamp((1 - (step.dt * b.m_angularDamping)), 0, 1)); if (b.m_linearVelocity.LengthSquared() > b2Settings.b2_maxLinearVelocitySquared){ b.m_linearVelocity.Normalize(); b.m_linearVelocity.x = (b.m_linearVelocity.x * b2Settings.b2_maxLinearVelocity); b.m_linearVelocity.y = (b.m_linearVelocity.y * b2Settings.b2_maxLinearVelocity); }; if ((b.m_angularVelocity * b.m_angularVelocity) > b2Settings.b2_maxAngularVelocitySquared){ if (b.m_angularVelocity < 0){ b.m_angularVelocity = -(b2Settings.b2_maxAngularVelocity); } else { b.m_angularVelocity = b2Settings.b2_maxAngularVelocity; }; }; }; i++; }; var contactSolver:b2ContactSolver = new b2ContactSolver(step, m_contacts, m_contactCount, m_allocator); contactSolver.InitVelocityConstraints(step); i = 0; while (i < m_jointCount) { joint = m_joints[i]; joint.InitVelocityConstraints(step); i++; }; i = 0; while (i < step.maxIterations) { contactSolver.SolveVelocityConstraints(); j = 0; while (j < m_jointCount) { joint = m_joints[j]; joint.SolveVelocityConstraints(step); j++; }; i++; }; contactSolver.FinalizeVelocityConstraints(); i = 0; while (i < m_bodyCount) { b = m_bodies[i]; if (b.IsStatic()){ } else { b.m_sweep.c0.SetV(b.m_sweep.c); b.m_sweep.a0 = b.m_sweep.a; b.m_sweep.c.x = (b.m_sweep.c.x + (step.dt * b.m_linearVelocity.x)); b.m_sweep.c.y = (b.m_sweep.c.y + (step.dt * b.m_linearVelocity.y)); b.m_sweep.a = (b.m_sweep.a + (step.dt * b.m_angularVelocity)); b.SynchronizeTransform(); }; i++; }; if (correctPositions){ i = 0; while (i < m_jointCount) { joint = m_joints[i]; joint.InitPositionConstraints(); i++; }; m_positionIterationCount = 0; while (m_positionIterationCount < step.maxIterations) { contactsOkay = contactSolver.SolvePositionConstraints(b2Settings.b2_contactBaumgarte); jointsOkay = true; i = 0; while (i < m_jointCount) { joint = m_joints[i]; jointOkay = joint.SolvePositionConstraints(); jointsOkay = ((jointsOkay) && (jointOkay)); i++; }; if (((contactsOkay) && (jointsOkay))){ break; }; m_positionIterationCount++; }; }; Report(contactSolver.m_constraints); if (allowSleep){ minSleepTime = Number.MAX_VALUE; linTolSqr = (b2Settings.b2_linearSleepTolerance * b2Settings.b2_linearSleepTolerance); angTolSqr = (b2Settings.b2_angularSleepTolerance * b2Settings.b2_angularSleepTolerance); i = 0; while (i < m_bodyCount) { b = m_bodies[i]; if (b.m_invMass == 0){ } else { if ((b.m_flags & b2Body.e_allowSleepFlag) == 0){ b.m_sleepTime = 0; minSleepTime = 0; }; if (((((((b.m_flags & b2Body.e_allowSleepFlag) == 0)) || (((b.m_angularVelocity * b.m_angularVelocity) > angTolSqr)))) || ((b2Math.b2Dot(b.m_linearVelocity, b.m_linearVelocity) > linTolSqr)))){ b.m_sleepTime = 0; minSleepTime = 0; } else { b.m_sleepTime = (b.m_sleepTime + step.dt); minSleepTime = b2Math.b2Min(minSleepTime, b.m_sleepTime); }; }; i++; }; if (minSleepTime >= b2Settings.b2_timeToSleep){ i = 0; while (i < m_bodyCount) { b = m_bodies[i]; b.m_flags = (b.m_flags | b2Body.e_sleepFlag); b.m_linearVelocity.SetZero(); b.m_angularVelocity = 0; i++; }; }; }; } public function Clear():void{ m_bodyCount = 0; m_contactCount = 0; m_jointCount = 0; } public function SolveTOI(subStep:b2TimeStep):void{ var i:int; var b:b2Body; var contactsOkay:Boolean; var contactSolver:b2ContactSolver = new b2ContactSolver(subStep, m_contacts, m_contactCount, m_allocator); i = 0; while (i < subStep.maxIterations) { contactSolver.SolveVelocityConstraints(); i++; }; i = 0; while (i < m_bodyCount) { b = m_bodies[i]; if (b.IsStatic()){ } else { b.m_sweep.c0.SetV(b.m_sweep.c); b.m_sweep.a0 = b.m_sweep.a; b.m_sweep.c.x = (b.m_sweep.c.x + (subStep.dt * b.m_linearVelocity.x)); b.m_sweep.c.y = (b.m_sweep.c.y + (subStep.dt * b.m_linearVelocity.y)); b.m_sweep.a = (b.m_sweep.a + (subStep.dt * b.m_angularVelocity)); b.SynchronizeTransform(); }; i++; }; var k_toiBaumgarte:Number = 0.75; i = 0; while (i < subStep.maxIterations) { contactsOkay = contactSolver.SolvePositionConstraints(k_toiBaumgarte); if (contactsOkay){ break; }; i++; }; Report(contactSolver.m_constraints); } } }//package Box2D.Dynamics
Section 76
//b2TimeStep (Box2D.Dynamics.b2TimeStep) package Box2D.Dynamics { public class b2TimeStep { public var warmStarting:Boolean; public var positionCorrection:Boolean; public var dt:Number; public var maxIterations:int; public var dtRatio:Number; public var inv_dt:Number; } }//package Box2D.Dynamics
Section 77
//b2World (Box2D.Dynamics.b2World) package Box2D.Dynamics { import Box2D.Common.Math.*; import Box2D.Collision.*; import Box2D.Collision.Shapes.*; import Box2D.Dynamics.Joints.*; import Box2D.Common.*; import Box2D.Dynamics.Contacts.*; public class b2World { public var m_inv_dt0:Number; public var m_boundaryListener:b2BoundaryListener; public var m_contactList:b2Contact; public var m_blockAllocator; public var m_contactListener:b2ContactListener; public var m_allowSleep:Boolean; public var m_broadPhase:b2BroadPhase; public var m_destructionListener:b2DestructionListener; public var m_jointCount:int; public var m_bodyCount:int; public var m_lock:Boolean; public var m_positionIterationCount:int; public var m_groundBody:b2Body; public var m_contactCount:int; public var m_debugDraw:b2DebugDraw; public var m_contactFilter:b2ContactFilter; public var m_bodyList:b2Body; public var m_stackAllocator; public var m_jointList:b2Joint; public var m_gravity:b2Vec2; public var m_contactManager:b2ContactManager; private static var s_jointColor:b2Color = new b2Color(0.5, 0.8, 0.8); public static var m_continuousPhysics:Boolean; public static var m_warmStarting:Boolean; private static var s_coreColor:b2Color = new b2Color(0.9, 0.6, 0.6); public static var m_positionCorrection:Boolean; private static var s_xf:b2XForm = new b2XForm(); public function b2World(worldAABB:b2AABB, gravity:b2Vec2, doSleep:Boolean){ 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_bodyCount = 0; m_contactCount = 0; m_jointCount = 0; m_positionCorrection = true; m_warmStarting = true; m_continuousPhysics = true; m_allowSleep = doSleep; m_gravity = gravity; m_lock = false; m_inv_dt0 = 0; m_contactManager.m_world = this; m_broadPhase = new b2BroadPhase(worldAABB, m_contactManager); var bd:b2BodyDef = new b2BodyDef(); m_groundBody = CreateBody(bd); } public function DrawJoint(joint:b2Joint):void{ var pulley:b2PulleyJoint; var s1:b2Vec2; var s2:b2Vec2; var b1:b2Body = joint.m_body1; var b2:b2Body = joint.m_body2; var xf1:b2XForm = b1.m_xf; var xf2:b2XForm = b2.m_xf; var x1:b2Vec2 = xf1.position; var x2:b2Vec2 = xf2.position; var p1:b2Vec2 = joint.GetAnchor1(); var p2:b2Vec2 = joint.GetAnchor2(); var color:b2Color = s_jointColor; switch (joint.m_type){ case b2Joint.e_distanceJoint: m_debugDraw.DrawSegment(p1, p2, color); break; case b2Joint.e_pulleyJoint: pulley = (joint as b2PulleyJoint); s1 = pulley.GetGroundAnchor1(); s2 = pulley.GetGroundAnchor2(); m_debugDraw.DrawSegment(s1, p1, color); m_debugDraw.DrawSegment(s2, p2, color); m_debugDraw.DrawSegment(s1, s2, color); break; case b2Joint.e_mouseJoint: m_debugDraw.DrawSegment(p1, p2, color); break; default: if (b1 != m_groundBody){ m_debugDraw.DrawSegment(x1, p1, color); }; m_debugDraw.DrawSegment(p1, p2, color); if (b2 != m_groundBody){ m_debugDraw.DrawSegment(x2, p2, color); }; }; } public function Refilter(shape:b2Shape):void{ shape.RefilterProxy(m_broadPhase, shape.m_body.m_xf); } public function SetDebugDraw(debugDraw:b2DebugDraw):void{ m_debugDraw = debugDraw; } public function SetContinuousPhysics(flag:Boolean):void{ m_continuousPhysics = flag; } public function GetProxyCount():int{ return (m_broadPhase.m_proxyCount); } public function DrawDebugData():void{ var i:int; var b:b2Body; var s:b2Shape; var j:b2Joint; var bp:b2BroadPhase; var xf:b2XForm; var core:Boolean; var index:uint; var pair:b2Pair; var p1:b2Proxy; var p2:b2Proxy; var worldLower:b2Vec2; var worldUpper:b2Vec2; var p:b2Proxy; var poly:b2PolygonShape; var obb:b2OBB; var h:b2Vec2; var tMat:b2Mat22; var tVec:b2Vec2; var tX:Number; if (m_debugDraw == null){ return; }; m_debugDraw.m_sprite.graphics.clear(); var flags:uint = m_debugDraw.GetFlags(); var invQ:b2Vec2 = new b2Vec2(); var x1:b2Vec2 = new b2Vec2(); var x2:b2Vec2 = new b2Vec2(); var color:b2Color = new b2Color(0, 0, 0); var b1:b2AABB = new b2AABB(); var b2:b2AABB = new b2AABB(); var vs:Array = [new b2Vec2(), new b2Vec2(), new b2Vec2(), new b2Vec2()]; if ((flags & b2DebugDraw.e_shapeBit)){ core = ((flags & b2DebugDraw.e_coreShapeBit) == b2DebugDraw.e_coreShapeBit); b = m_bodyList; while (b) { xf = b.m_xf; s = b.GetShapeList(); while (s) { if (b.IsStatic()){ DrawShape(s, xf, new b2Color(0.5, 0.9, 0.5), core); } else { if (b.IsSleeping()){ DrawShape(s, xf, new b2Color(0.5, 0.5, 0.9), core); } else { DrawShape(s, xf, new b2Color(0.9, 0.9, 0.9), core); }; }; s = s.m_next; }; b = b.m_next; }; }; if ((flags & b2DebugDraw.e_jointBit)){ j = m_jointList; while (j) { DrawJoint(j); j = j.m_next; }; }; if ((flags & b2DebugDraw.e_pairBit)){ bp = m_broadPhase; invQ.Set((1 / bp.m_quantizationFactor.x), (1 / bp.m_quantizationFactor.y)); color.Set(0.9, 0.9, 0.3); i = 0; while (i < b2Pair.b2_tableCapacity) { index = bp.m_pairManager.m_hashTable[i]; while (index != b2Pair.b2_nullPair) { pair = bp.m_pairManager.m_pairs[index]; p1 = bp.m_proxyPool[pair.proxyId1]; p2 = bp.m_proxyPool[pair.proxyId2]; b1.lowerBound.x = (bp.m_worldAABB.lowerBound.x + (invQ.x * bp.m_bounds[0][p1.lowerBounds[0]].value)); b1.lowerBound.y = (bp.m_worldAABB.lowerBound.y + (invQ.y * bp.m_bounds[1][p1.lowerBounds[1]].value)); b1.upperBound.x = (bp.m_worldAABB.lowerBound.x + (invQ.x * bp.m_bounds[0][p1.upperBounds[0]].value)); b1.upperBound.y = (bp.m_worldAABB.lowerBound.y + (invQ.y * bp.m_bounds[1][p1.upperBounds[1]].value)); b2.lowerBound.x = (bp.m_worldAABB.lowerBound.x + (invQ.x * bp.m_bounds[0][p2.lowerBounds[0]].value)); b2.lowerBound.y = (bp.m_worldAABB.lowerBound.y + (invQ.y * bp.m_bounds[1][p2.lowerBounds[1]].value)); b2.upperBound.x = (bp.m_worldAABB.lowerBound.x + (invQ.x * bp.m_bounds[0][p2.upperBounds[0]].value)); b2.upperBound.y = (bp.m_worldAABB.lowerBound.y + (invQ.y * bp.m_bounds[1][p2.upperBounds[1]].value)); x1.x = (0.5 * (b1.lowerBound.x + b1.upperBound.x)); x1.y = (0.5 * (b1.lowerBound.y + b1.upperBound.y)); x2.x = (0.5 * (b2.lowerBound.x + b2.upperBound.x)); x2.y = (0.5 * (b2.lowerBound.y + b2.upperBound.y)); m_debugDraw.DrawSegment(x1, x2, color); index = pair.next; }; i++; }; }; if ((flags & b2DebugDraw.e_aabbBit)){ bp = m_broadPhase; worldLower = bp.m_worldAABB.lowerBound; worldUpper = bp.m_worldAABB.upperBound; invQ.Set((1 / bp.m_quantizationFactor.x), (1 / bp.m_quantizationFactor.y)); color.Set(0.9, 0.3, 0.9); i = 0; while (i < b2Settings.b2_maxProxies) { p = bp.m_proxyPool[i]; if (p.IsValid() == false){ } else { b1.lowerBound.x = (worldLower.x + (invQ.x * bp.m_bounds[0][p.lowerBounds[0]].value)); b1.lowerBound.y = (worldLower.y + (invQ.y * bp.m_bounds[1][p.lowerBounds[1]].value)); b1.upperBound.x = (worldLower.x + (invQ.x * bp.m_bounds[0][p.upperBounds[0]].value)); b1.upperBound.y = (worldLower.y + (invQ.y * bp.m_bounds[1][p.upperBounds[1]].value)); vs[0].Set(b1.lowerBound.x, b1.lowerBound.y); vs[1].Set(b1.upperBound.x, b1.lowerBound.y); vs[2].Set(b1.upperBound.x, b1.upperBound.y); vs[3].Set(b1.lowerBound.x, b1.upperBound.y); m_debugDraw.DrawPolygon(vs, 4, color); }; i++; }; vs[0].Set(worldLower.x, worldLower.y); vs[1].Set(worldUpper.x, worldLower.y); vs[2].Set(worldUpper.x, worldUpper.y); vs[3].Set(worldLower.x, worldUpper.y); m_debugDraw.DrawPolygon(vs, 4, new b2Color(0.3, 0.9, 0.9)); }; if ((flags & b2DebugDraw.e_obbBit)){ color.Set(0.5, 0.3, 0.5); b = m_bodyList; while (b) { xf = b.m_xf; s = b.GetShapeList(); while (s) { if (s.m_type != b2Shape.e_polygonShape){ } else { poly = (s as b2PolygonShape); obb = poly.GetOBB(); h = obb.extents; vs[0].Set(-(h.x), -(h.y)); vs[1].Set(h.x, -(h.y)); vs[2].Set(h.x, h.y); vs[3].Set(-(h.x), h.y); i = 0; while (i < 4) { tMat = obb.R; tVec = vs[i]; tX = (obb.center.x + ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y))); vs[i].y = (obb.center.y + ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y))); vs[i].x = tX; tMat = xf.R; tX = (xf.position.x + ((tMat.col1.x * tVec.x) + (tMat.col2.x * tVec.y))); vs[i].y = (xf.position.y + ((tMat.col1.y * tVec.x) + (tMat.col2.y * tVec.y))); vs[i].x = tX; i++; }; m_debugDraw.DrawPolygon(vs, 4, color); }; s = s.m_next; }; b = b.m_next; }; }; if ((flags & b2DebugDraw.e_centerOfMassBit)){ b = m_bodyList; while (b) { xf = s_xf; xf.R = b.m_xf.R; xf.position = b.GetWorldCenter(); m_debugDraw.DrawXForm(xf); b = b.m_next; }; }; } public function DestroyBody(b:b2Body):void{ var jn0:b2JointEdge; var s0:b2Shape; if (m_lock == true){ return; }; var jn:b2JointEdge = b.m_jointList; while (jn) { jn0 = jn; jn = jn.next; if (m_destructionListener){ m_destructionListener.SayGoodbyeJoint(jn0.joint); }; DestroyJoint(jn0.joint); }; var s:b2Shape = b.m_shapeList; while (s) { s0 = s; s = s.m_next; if (m_destructionListener){ m_destructionListener.SayGoodbyeShape(s0); }; s0.DestroyProxy(m_broadPhase); b2Shape.Destroy(s0, m_blockAllocator); }; if (b.m_prev){ b.m_prev.m_next = b.m_next; }; if (b.m_next){ b.m_next.m_prev = b.m_prev; }; if (b == m_bodyList){ m_bodyList = b.m_next; }; m_bodyCount--; } public function SetContactFilter(filter:b2ContactFilter):void{ m_contactFilter = filter; } public function GetGroundBody():b2Body{ return (m_groundBody); } public function DrawShape(shape:b2Shape, xf:b2XForm, color:b2Color, core:Boolean):void{ var circle:b2CircleShape; var center:b2Vec2; var radius:Number; var axis:b2Vec2; var i:int; var poly:b2PolygonShape; var vertexCount:int; var localVertices:Array; var vertices:Array; var localCoreVertices:Array; var coreColor:b2Color = s_coreColor; switch (shape.m_type){ case b2Shape.e_circleShape: circle = (shape as b2CircleShape); center = b2Math.b2MulX(xf, circle.m_localPosition); radius = circle.m_radius; axis = xf.R.col1; m_debugDraw.DrawSolidCircle(center, radius, axis, color); if (core){ m_debugDraw.DrawCircle(center, (radius - b2Settings.b2_toiSlop), coreColor); }; break; case b2Shape.e_polygonShape: poly = (shape as b2PolygonShape); vertexCount = poly.GetVertexCount(); localVertices = poly.GetVertices(); vertices = new Array(b2Settings.b2_maxPolygonVertices); i = 0; while (i < vertexCount) { vertices[i] = b2Math.b2MulX(xf, localVertices[i]); i++; }; m_debugDraw.DrawSolidPolygon(vertices, vertexCount, color); if (core){ localCoreVertices = poly.GetCoreVertices(); i = 0; while (i < vertexCount) { vertices[i] = b2Math.b2MulX(xf, localCoreVertices[i]); i++; }; m_debugDraw.DrawPolygon(vertices, vertexCount, coreColor); }; break; }; } public function GetContactCount():int{ return (m_contactCount); } public function Solve(step:b2TimeStep):void{ var b:b2Body; var stackCount:int; var i:int; var other:b2Body; var cn:b2ContactEdge; var jn:b2JointEdge; var inRange:Boolean; m_positionIterationCount = 0; var island:b2Island = new b2Island(m_bodyCount, m_contactCount, m_jointCount, m_stackAllocator, m_contactListener); b = m_bodyList; while (b) { b.m_flags = (b.m_flags & ~(b2Body.e_islandFlag)); b = b.m_next; }; var c:b2Contact = m_contactList; while (c) { c.m_flags = (c.m_flags & ~(b2Contact.e_islandFlag)); c = c.m_next; }; var j:b2Joint = m_jointList; while (j) { j.m_islandFlag = false; j = j.m_next; }; var stackSize:int = m_bodyCount; var stack:Array = new Array(stackSize); var seed:b2Body = m_bodyList; while (seed) { if ((seed.m_flags & ((b2Body.e_islandFlag | b2Body.e_sleepFlag) | b2Body.e_frozenFlag))){ } else { if (seed.IsStatic()){ } else { island.Clear(); stackCount = 0; var _temp1 = stackCount; stackCount = (stackCount + 1); var _local15 = _temp1; stack[_local15] = seed; seed.m_flags = (seed.m_flags | b2Body.e_islandFlag); while (stackCount > 0) { --stackCount; b = stack[stackCount]; island.AddBody(b); b.m_flags = (b.m_flags & ~(b2Body.e_sleepFlag)); if (b.IsStatic()){ } else { cn = b.m_contactList; while (cn) { if ((cn.contact.m_flags & (b2Contact.e_islandFlag | b2Contact.e_nonSolidFlag))){ } else { if (cn.contact.m_manifoldCount == 0){ } else { island.AddContact(cn.contact); cn.contact.m_flags = (cn.contact.m_flags | b2Contact.e_islandFlag); other = cn.other; if ((other.m_flags & b2Body.e_islandFlag)){ } else { var _temp2 = stackCount; stackCount = (stackCount + 1); var _local16 = _temp2; stack[_local16] = other; other.m_flags = (other.m_flags | b2Body.e_islandFlag); }; }; }; cn = cn.next; }; jn = b.m_jointList; while (jn) { if (jn.joint.m_islandFlag == true){ } else { island.AddJoint(jn.joint); jn.joint.m_islandFlag = true; other = jn.other; if ((other.m_flags & b2Body.e_islandFlag)){ } else { var _temp3 = stackCount; stackCount = (stackCount + 1); _local16 = _temp3; stack[_local16] = other; other.m_flags = (other.m_flags | b2Body.e_islandFlag); }; }; jn = jn.next; }; }; }; island.Solve(step, m_gravity, m_positionCorrection, m_allowSleep); if (island.m_positionIterationCount > m_positionIterationCount){ m_positionIterationCount = island.m_positionIterationCount; }; i = 0; while (i < island.m_bodyCount) { b = island.m_bodies[i]; if (b.IsStatic()){ b.m_flags = (b.m_flags & ~(b2Body.e_islandFlag)); }; i++; }; }; }; seed = seed.m_next; }; b = m_bodyList; while (b) { if ((b.m_flags & (b2Body.e_sleepFlag | b2Body.e_frozenFlag))){ } else { if (b.IsStatic()){ } else { inRange = b.SynchronizeShapes(); if ((((inRange == false)) && (!((m_boundaryListener == null))))){ m_boundaryListener.Violation(b); }; }; }; b = b.m_next; }; m_broadPhase.Commit(); } public function Query(aabb:b2AABB, shapes:Array, maxCount:int):int{ var results:Array = new Array(maxCount); var count:int = m_broadPhase.QueryAABB(aabb, results, maxCount); var i:int; while (i < count) { shapes[i] = results[i]; i++; }; return (count); } public function SetGravity(gravity:b2Vec2):void{ m_gravity = gravity; } public function SolveTOI(step:b2TimeStep):void{ var b:b2Body; var s1:b2Shape; var s2:b2Shape; var b1:b2Body; var b2:b2Body; var cn:b2ContactEdge; var c:b2Contact; var minContact:b2Contact; var minTOI:Number; var seed:b2Body; var stackCount:int; var subStep:b2TimeStep; var i:int; var toi:Number; var t0:Number; var other:b2Body; var inRange:Boolean; var island:b2Island = new b2Island(m_bodyCount, b2Settings.b2_maxTOIContactsPerIsland, 0, m_stackAllocator, m_contactListener); var stackSize:int = m_bodyCount; var stack:Array = new Array(stackSize); b = m_bodyList; while (b) { b.m_flags = (b.m_flags & ~(b2Body.e_islandFlag)); b.m_sweep.t0 = 0; b = b.m_next; }; c = m_contactList; while (c) { c.m_flags = (c.m_flags & ~((b2Contact.e_toiFlag | b2Contact.e_islandFlag))); c = c.m_next; }; while (true) { minContact = null; minTOI = 1; c = m_contactList; for (;c;(c = c.m_next)) { if ((c.m_flags & (b2Contact.e_slowFlag | b2Contact.e_nonSolidFlag))){ } else { toi = 1; if ((c.m_flags & b2Contact.e_toiFlag)){ toi = c.m_toi; } else { s1 = c.m_shape1; s2 = c.m_shape2; b1 = s1.m_body; b2 = s2.m_body; if (((((b1.IsStatic()) || (b1.IsSleeping()))) && (((b2.IsStatic()) || (b2.IsSleeping()))))){ continue; }; t0 = b1.m_sweep.t0; if (b1.m_sweep.t0 < b2.m_sweep.t0){ t0 = b2.m_sweep.t0; b1.m_sweep.Advance(t0); } else { if (b2.m_sweep.t0 < b1.m_sweep.t0){ t0 = b1.m_sweep.t0; b2.m_sweep.Advance(t0); }; }; toi = b2TimeOfImpact.TimeOfImpact(c.m_shape1, b1.m_sweep, c.m_shape2, b2.m_sweep); if ((((toi > 0)) && ((toi < 1)))){ toi = (((1 - toi) * t0) + toi); if (toi > 1){ toi = 1; }; }; c.m_toi = toi; c.m_flags = (c.m_flags | b2Contact.e_toiFlag); }; if ((((Number.MIN_VALUE < toi)) && ((toi < minTOI)))){ minContact = c; minTOI = toi; }; }; }; if ((((minContact == null)) || (((1 - (100 * Number.MIN_VALUE)) < minTOI)))){ break; }; s1 = minContact.m_shape1; s2 = minContact.m_shape2; b1 = s1.m_body; b2 = s2.m_body; b1.Advance(minTOI); b2.Advance(minTOI); minContact.Update(m_contactListener); minContact.m_flags = (minContact.m_flags & ~(b2Contact.e_toiFlag)); if (minContact.m_manifoldCount == 0){ } else { seed = b1; if (seed.IsStatic()){ seed = b2; }; island.Clear(); stackCount = 0; var _temp1 = stackCount; stackCount = (stackCount + 1); var _local22 = _temp1; stack[_local22] = seed; seed.m_flags = (seed.m_flags | b2Body.e_islandFlag); while (stackCount > 0) { --stackCount; b = stack[stackCount]; island.AddBody(b); b.m_flags = (b.m_flags & ~(b2Body.e_sleepFlag)); if (b.IsStatic()){ } else { cn = b.m_contactList; while (cn) { if (island.m_contactCount == island.m_contactCapacity){ } else { if ((cn.contact.m_flags & ((b2Contact.e_islandFlag | b2Contact.e_slowFlag) | b2Contact.e_nonSolidFlag))){ } else { if (cn.contact.m_manifoldCount == 0){ } else { island.AddContact(cn.contact); cn.contact.m_flags = (cn.contact.m_flags | b2Contact.e_islandFlag); other = cn.other; if ((other.m_flags & b2Body.e_islandFlag)){ } else { if (other.IsStatic() == false){ other.Advance(minTOI); other.WakeUp(); }; var _temp2 = stackCount; stackCount = (stackCount + 1); var _local23 = _temp2; stack[_local23] = other; other.m_flags = (other.m_flags | b2Body.e_islandFlag); }; }; }; }; cn = cn.next; }; }; }; subStep = new b2TimeStep(); subStep.dt = ((1 - minTOI) * step.dt); subStep.inv_dt = (1 / subStep.dt); subStep.maxIterations = step.maxIterations; island.SolveTOI(subStep); i = 0; while (i < island.m_bodyCount) { b = island.m_bodies[i]; b.m_flags = (b.m_flags & ~(b2Body.e_islandFlag)); if ((b.m_flags & (b2Body.e_sleepFlag | b2Body.e_frozenFlag))){ } else { if (b.IsStatic()){ } else { inRange = b.SynchronizeShapes(); if ((((inRange == false)) && (!((m_boundaryListener == null))))){ m_boundaryListener.Violation(b); }; cn = b.m_contactList; while (cn) { cn.contact.m_flags = (cn.contact.m_flags & ~(b2Contact.e_toiFlag)); cn = cn.next; }; }; }; i++; }; i = 0; while (i < island.m_contactCount) { c = island.m_contacts[i]; c.m_flags = (c.m_flags & ~((b2Contact.e_toiFlag | b2Contact.e_islandFlag))); i++; }; m_broadPhase.Commit(); }; }; } public function GetJointList():b2Joint{ return (m_jointList); } public function GetBodyList():b2Body{ return (m_bodyList); } public function GetPairCount():int{ return (m_broadPhase.m_pairManager.m_pairCount); } public function Validate():void{ m_broadPhase.Validate(); } public function SetWarmStarting(flag:Boolean):void{ m_warmStarting = flag; } public function SetPositionCorrection(flag:Boolean):void{ m_positionCorrection = flag; } public function CreateJoint(def:b2JointDef):b2Joint{ var b:b2Body; var s:b2Shape; var j:b2Joint = b2Joint.Create(def, m_blockAllocator); j.m_prev = null; j.m_next = m_jointList; if (m_jointList){ m_jointList.m_prev = j; }; m_jointList = j; m_jointCount++; j.m_node1.joint = j; j.m_node1.other = j.m_body2; j.m_node1.prev = null; j.m_node1.next = j.m_body1.m_jointList; if (j.m_body1.m_jointList){ j.m_body1.m_jointList.prev = j.m_node1; }; j.m_body1.m_jointList = j.m_node1; j.m_node2.joint = j; j.m_node2.other = j.m_body1; j.m_node2.prev = null; j.m_node2.next = j.m_body2.m_jointList; if (j.m_body2.m_jointList){ j.m_body2.m_jointList.prev = j.m_node2; }; j.m_body2.m_jointList = j.m_node2; if (def.collideConnected == false){ b = ((def.body1.m_shapeCount < def.body2.m_shapeCount)) ? def.body1 : def.body2; s = b.m_shapeList; while (s) { s.RefilterProxy(m_broadPhase, b.m_xf); s = s.m_next; }; }; return (j); } public function DestroyJoint(j:b2Joint):void{ var b:b2Body; var s:b2Shape; var collideConnected:Boolean = j.m_collideConnected; if (j.m_prev){ j.m_prev.m_next = j.m_next; }; if (j.m_next){ j.m_next.m_prev = j.m_prev; }; if (j == m_jointList){ m_jointList = j.m_next; }; var body1:b2Body = j.m_body1; var body2:b2Body = j.m_body2; body1.WakeUp(); body2.WakeUp(); if (j.m_node1.prev){ j.m_node1.prev.next = j.m_node1.next; }; if (j.m_node1.next){ j.m_node1.next.prev = j.m_node1.prev; }; if (j.m_node1 == body1.m_jointList){ body1.m_jointList = j.m_node1.next; }; j.m_node1.prev = null; j.m_node1.next = null; if (j.m_node2.prev){ j.m_node2.prev.next = j.m_node2.next; }; if (j.m_node2.next){ j.m_node2.next.prev = j.m_node2.prev; }; if (j.m_node2 == body2.m_jointList){ body2.m_jointList = j.m_node2.next; }; j.m_node2.prev = null; j.m_node2.next = null; b2Joint.Destroy(j, m_blockAllocator); m_jointCount--; if (collideConnected == false){ b = ((body1.m_shapeCount < body2.m_shapeCount)) ? body1 : body2; s = b.m_shapeList; while (s) { s.RefilterProxy(m_broadPhase, b.m_xf); s = s.m_next; }; }; } public function SetContactListener(listener:b2ContactListener):void{ m_contactListener = listener; } public function CreateBody(def:b2BodyDef):b2Body{ if (m_lock == true){ return (null); }; var b:b2Body = new b2Body(def, this); b.m_prev = null; b.m_next = m_bodyList; if (m_bodyList){ m_bodyList.m_prev = b; }; m_bodyList = b; m_bodyCount++; return (b); } public function SetBoundaryListener(listener:b2BoundaryListener):void{ m_boundaryListener = listener; } public function SetDestructionListener(listener:b2DestructionListener):void{ m_destructionListener = listener; } public function Step(dt:Number, iterations:int):void{ m_lock = true; var step:b2TimeStep = new b2TimeStep(); step.dt = dt; step.maxIterations = iterations; if (dt > 0){ step.inv_dt = (1 / dt); } else { step.inv_dt = 0; }; step.dtRatio = (m_inv_dt0 * dt); step.positionCorrection = m_positionCorrection; step.warmStarting = m_warmStarting; m_contactManager.Collide(); if (step.dt > 0){ Solve(step); }; if (((m_continuousPhysics) && ((step.dt > 0)))){ SolveTOI(step); }; DrawDebugData(); m_inv_dt0 = step.inv_dt; m_lock = false; } public function GetBodyCount():int{ return (m_bodyCount); } public function GetJointCount():int{ return (m_jointCount); } } }//package Box2D.Dynamics
Section 78
//AuxFunctions (caurina.transitions.AuxFunctions) package caurina.transitions { public class AuxFunctions { public static function getObjectLength(p_object:Object):uint{ var pName:String; var totalProperties:uint; for (pName in p_object) { totalProperties++; }; return (totalProperties); } public static function numberToG(p_num:Number):Number{ return (((p_num & 0xFF00) >> 8)); } public static function numberToB(p_num:Number):Number{ return ((p_num & 0xFF)); } public static function numberToR(p_num:Number):Number{ return (((p_num & 0xFF0000) >> 16)); } public static function concatObjects(... _args):Object{ var currentObject:Object; var prop:String; var finalObject:Object = {}; var i:int; while (i < _args.length) { currentObject = _args[i]; for (prop in currentObject) { if (currentObject[prop] == null){ delete finalObject[prop]; } else { finalObject[prop] = currentObject[prop]; }; }; i++; }; return (finalObject); } } }//package caurina.transitions
Section 79
//Equations (caurina.transitions.Equations) package caurina.transitions { public class Equations { public function Equations(){ super(); trace("Equations is a static class and should not be instantiated."); } public static function easeOutBounce(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ t = (t / d); if (t < (1 / 2.75)){ return (((c * ((7.5625 * t) * t)) + b)); }; if (t < (2 / 2.75)){ t = (t - (1.5 / 2.75)); return (((c * (((7.5625 * t) * t) + 0.75)) + b)); }; if (t < (2.5 / 2.75)){ t = (t - (2.25 / 2.75)); return (((c * (((7.5625 * t) * t) + 0.9375)) + b)); }; t = (t - (2.625 / 2.75)); return (((c * (((7.5625 * t) * t) + 0.984375)) + b)); } public static function easeInOutElastic(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ var s:Number; if (t == 0){ return (b); }; t = (t / (d / 2)); if (t == 2){ return ((b + c)); }; var p:Number = (((!(Boolean(p_params))) || (isNaN(p_params.period)))) ? (d * (0.3 * 1.5)) : p_params.period; var a:Number = (((!(Boolean(p_params))) || (isNaN(p_params.amplitude)))) ? 0 : p_params.amplitude; if (((!(Boolean(a))) || ((a < Math.abs(c))))){ a = c; s = (p / 4); } else { s = ((p / (2 * Math.PI)) * Math.asin((c / a))); }; if (t < 1){ --t; return (((-0.5 * ((a * Math.pow(2, (10 * t))) * Math.sin(((((t * d) - s) * (2 * Math.PI)) / p)))) + b)); }; --t; return ((((((a * Math.pow(2, (-10 * t))) * Math.sin(((((t * d) - s) * (2 * Math.PI)) / p))) * 0.5) + c) + b)); } public static function easeInOutQuad(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ t = (t / (d / 2)); if (t < 1){ return (((((c / 2) * t) * t) + b)); }; --t; return ((((-(c) / 2) * ((t * (t - 2)) - 1)) + b)); } public static function easeInOutBounce(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ if (t < (d / 2)){ return (((easeInBounce((t * 2), 0, c, d) * 0.5) + b)); }; return ((((easeOutBounce(((t * 2) - d), 0, c, d) * 0.5) + (c * 0.5)) + b)); } public static function easeInOutBack(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ var s:Number = (((!(Boolean(p_params))) || (isNaN(p_params.overshoot)))) ? 1.70158 : p_params.overshoot; t = (t / (d / 2)); if (t < 1){ s = (s * 1.525); return ((((c / 2) * ((t * t) * (((s + 1) * t) - s))) + b)); }; t = (t - 2); s = (s * 1.525); return ((((c / 2) * (((t * t) * (((s + 1) * t) + s)) + 2)) + b)); } public static function easeOutInCubic(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ if (t < (d / 2)){ return (easeOutCubic((t * 2), b, (c / 2), d, p_params)); }; return (easeInCubic(((t * 2) - d), (b + (c / 2)), (c / 2), d, p_params)); } public static function easeNone(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ return ((((c * t) / d) + b)); } public static function easeOutBack(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ var s:Number = (((!(Boolean(p_params))) || (isNaN(p_params.overshoot)))) ? 1.70158 : p_params.overshoot; t = ((t / d) - 1); return (((c * (((t * t) * (((s + 1) * t) + s)) + 1)) + b)); } public static function easeInOutSine(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ return ((((-(c) / 2) * (Math.cos(((Math.PI * t) / d)) - 1)) + b)); } public static function easeInBack(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ var s:Number = (((!(Boolean(p_params))) || (isNaN(p_params.overshoot)))) ? 1.70158 : p_params.overshoot; t = (t / d); return (((((c * t) * t) * (((s + 1) * t) - s)) + b)); } public static function easeInQuart(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ t = (t / d); return ((((((c * t) * t) * t) * t) + b)); } public static function easeOutInQuint(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ if (t < (d / 2)){ return (easeOutQuint((t * 2), b, (c / 2), d, p_params)); }; return (easeInQuint(((t * 2) - d), (b + (c / 2)), (c / 2), d, p_params)); } public static function easeOutInBounce(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ if (t < (d / 2)){ return (easeOutBounce((t * 2), b, (c / 2), d, p_params)); }; return (easeInBounce(((t * 2) - d), (b + (c / 2)), (c / 2), d, p_params)); } public static function init():void{ Tweener.registerTransition("easenone", easeNone); Tweener.registerTransition("linear", easeNone); Tweener.registerTransition("easeinquad", easeInQuad); Tweener.registerTransition("easeoutquad", easeOutQuad); Tweener.registerTransition("easeinoutquad", easeInOutQuad); Tweener.registerTransition("easeoutinquad", easeOutInQuad); Tweener.registerTransition("easeincubic", easeInCubic); Tweener.registerTransition("easeoutcubic", easeOutCubic); Tweener.registerTransition("easeinoutcubic", easeInOutCubic); Tweener.registerTransition("easeoutincubic", easeOutInCubic); Tweener.registerTransition("easeinquart", easeInQuart); Tweener.registerTransition("easeoutquart", easeOutQuart); Tweener.registerTransition("easeinoutquart", easeInOutQuart); Tweener.registerTransition("easeoutinquart", easeOutInQuart); Tweener.registerTransition("easeinquint", easeInQuint); Tweener.registerTransition("easeoutquint", easeOutQuint); Tweener.registerTransition("easeinoutquint", easeInOutQuint); Tweener.registerTransition("easeoutinquint", easeOutInQuint); Tweener.registerTransition("easeinsine", easeInSine); Tweener.registerTransition("easeoutsine", easeOutSine); Tweener.registerTransition("easeinoutsine", easeInOutSine); Tweener.registerTransition("easeoutinsine", easeOutInSine); Tweener.registerTransition("easeincirc", easeInCirc); Tweener.registerTransition("easeoutcirc", easeOutCirc); Tweener.registerTransition("easeinoutcirc", easeInOutCirc); Tweener.registerTransition("easeoutincirc", easeOutInCirc); Tweener.registerTransition("easeinexpo", easeInExpo); Tweener.registerTransition("easeoutexpo", easeOutExpo); Tweener.registerTransition("easeinoutexpo", easeInOutExpo); Tweener.registerTransition("easeoutinexpo", easeOutInExpo); Tweener.registerTransition("easeinelastic", easeInElastic); Tweener.registerTransition("easeoutelastic", easeOutElastic); Tweener.registerTransition("easeinoutelastic", easeInOutElastic); Tweener.registerTransition("easeoutinelastic", easeOutInElastic); Tweener.registerTransition("easeinback", easeInBack); Tweener.registerTransition("easeoutback", easeOutBack); Tweener.registerTransition("easeinoutback", easeInOutBack); Tweener.registerTransition("easeoutinback", easeOutInBack); Tweener.registerTransition("easeinbounce", easeInBounce); Tweener.registerTransition("easeoutbounce", easeOutBounce); Tweener.registerTransition("easeinoutbounce", easeInOutBounce); Tweener.registerTransition("easeoutinbounce", easeOutInBounce); } public static function easeOutExpo(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ return (((t)==d) ? (b + c) : (((c * 1.001) * (-(Math.pow(2, ((-10 * t) / d))) + 1)) + b)); } public static function easeOutInBack(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ if (t < (d / 2)){ return (easeOutBack((t * 2), b, (c / 2), d, p_params)); }; return (easeInBack(((t * 2) - d), (b + (c / 2)), (c / 2), d, p_params)); } public static function easeInExpo(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ return (((t)==0) ? b : (((c * Math.pow(2, (10 * ((t / d) - 1)))) + b) - (c * 0.001))); } public static function easeInCubic(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ t = (t / d); return (((((c * t) * t) * t) + b)); } public static function easeInQuint(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ t = (t / d); return (((((((c * t) * t) * t) * t) * t) + b)); } public static function easeInOutCirc(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ t = (t / (d / 2)); if (t < 1){ return ((((-(c) / 2) * (Math.sqrt((1 - (t * t))) - 1)) + b)); }; t = (t - 2); return ((((c / 2) * (Math.sqrt((1 - (t * t))) + 1)) + b)); } public static function easeInQuad(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ t = (t / d); return ((((c * t) * t) + b)); } public static function easeInBounce(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ return (((c - easeOutBounce((d - t), 0, c, d)) + b)); } public static function easeOutInExpo(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ if (t < (d / 2)){ return (easeOutExpo((t * 2), b, (c / 2), d, p_params)); }; return (easeInExpo(((t * 2) - d), (b + (c / 2)), (c / 2), d, p_params)); } public static function easeOutQuart(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ t = ((t / d) - 1); return (((-(c) * ((((t * t) * t) * t) - 1)) + b)); } public static function easeInSine(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ return ((((-(c) * Math.cos(((t / d) * (Math.PI / 2)))) + c) + b)); } public static function easeInOutQuart(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ t = (t / (d / 2)); if (t < 1){ return (((((((c / 2) * t) * t) * t) * t) + b)); }; t = (t - 2); return ((((-(c) / 2) * ((((t * t) * t) * t) - 2)) + b)); } public static function easeOutQuad(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ t = (t / d); return ((((-(c) * t) * (t - 2)) + b)); } public static function easeOutInElastic(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ if (t < (d / 2)){ return (easeOutElastic((t * 2), b, (c / 2), d, p_params)); }; return (easeInElastic(((t * 2) - d), (b + (c / 2)), (c / 2), d, p_params)); } public static function easeInElastic(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ var s:Number; if (t == 0){ return (b); }; t = (t / d); if (t == 1){ return ((b + c)); }; var p:Number = (((!(Boolean(p_params))) || (isNaN(p_params.period)))) ? (d * 0.3) : p_params.period; var a:Number = (((!(Boolean(p_params))) || (isNaN(p_params.amplitude)))) ? 0 : p_params.amplitude; if (((!(Boolean(a))) || ((a < Math.abs(c))))){ a = c; s = (p / 4); } else { s = ((p / (2 * Math.PI)) * Math.asin((c / a))); }; --t; return ((-(((a * Math.pow(2, (10 * t))) * Math.sin(((((t * d) - s) * (2 * Math.PI)) / p)))) + b)); } public static function easeOutCubic(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ t = ((t / d) - 1); return (((c * (((t * t) * t) + 1)) + b)); } public static function easeOutQuint(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ t = ((t / d) - 1); return (((c * (((((t * t) * t) * t) * t) + 1)) + b)); } public static function easeOutInQuad(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ if (t < (d / 2)){ return (easeOutQuad((t * 2), b, (c / 2), d, p_params)); }; return (easeInQuad(((t * 2) - d), (b + (c / 2)), (c / 2), d, p_params)); } public static function easeOutSine(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ return (((c * Math.sin(((t / d) * (Math.PI / 2)))) + b)); } public static function easeInOutCubic(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ t = (t / (d / 2)); if (t < 1){ return ((((((c / 2) * t) * t) * t) + b)); }; t = (t - 2); return ((((c / 2) * (((t * t) * t) + 2)) + b)); } public static function easeInOutQuint(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ t = (t / (d / 2)); if (t < 1){ return ((((((((c / 2) * t) * t) * t) * t) * t) + b)); }; t = (t - 2); return ((((c / 2) * (((((t * t) * t) * t) * t) + 2)) + b)); } public static function easeInCirc(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ t = (t / d); return (((-(c) * (Math.sqrt((1 - (t * t))) - 1)) + b)); } public static function easeOutInSine(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ if (t < (d / 2)){ return (easeOutSine((t * 2), b, (c / 2), d, p_params)); }; return (easeInSine(((t * 2) - d), (b + (c / 2)), (c / 2), d, p_params)); } public static function easeInOutExpo(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ if (t == 0){ return (b); }; if (t == d){ return ((b + c)); }; t = (t / (d / 2)); if (t < 1){ return (((((c / 2) * Math.pow(2, (10 * (t - 1)))) + b) - (c * 0.0005))); }; --t; return (((((c / 2) * 1.0005) * (-(Math.pow(2, (-10 * t))) + 2)) + b)); } public static function easeOutElastic(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ var s:Number; if (t == 0){ return (b); }; t = (t / d); if (t == 1){ return ((b + c)); }; var p:Number = (((!(Boolean(p_params))) || (isNaN(p_params.period)))) ? (d * 0.3) : p_params.period; var a:Number = (((!(Boolean(p_params))) || (isNaN(p_params.amplitude)))) ? 0 : p_params.amplitude; if (((!(Boolean(a))) || ((a < Math.abs(c))))){ a = c; s = (p / 4); } else { s = ((p / (2 * Math.PI)) * Math.asin((c / a))); }; return (((((a * Math.pow(2, (-10 * t))) * Math.sin(((((t * d) - s) * (2 * Math.PI)) / p))) + c) + b)); } public static function easeOutCirc(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ t = ((t / d) - 1); return (((c * Math.sqrt((1 - (t * t)))) + b)); } public static function easeOutInQuart(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ if (t < (d / 2)){ return (easeOutQuart((t * 2), b, (c / 2), d, p_params)); }; return (easeInQuart(((t * 2) - d), (b + (c / 2)), (c / 2), d, p_params)); } public static function easeOutInCirc(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{ if (t < (d / 2)){ return (easeOutCirc((t * 2), b, (c / 2), d, p_params)); }; return (easeInCirc(((t * 2) - d), (b + (c / 2)), (c / 2), d, p_params)); } } }//package caurina.transitions
Section 80
//PropertyInfoObj (caurina.transitions.PropertyInfoObj) package caurina.transitions { public class PropertyInfoObj { public var modifierParameters:Array; public var isSpecialProperty:Boolean; public var valueComplete:Number; public var modifierFunction:Function; public var extra:Object; public var valueStart:Number; public var hasModifier:Boolean; public var arrayIndex:Number; public var originalValueComplete:Object; public function PropertyInfoObj(p_valueStart:Number, p_valueComplete:Number, p_originalValueComplete:Object, p_arrayIndex:Number, p_extra:Object, p_isSpecialProperty:Boolean, p_modifierFunction:Function, p_modifierParameters:Array){ super(); valueStart = p_valueStart; valueComplete = p_valueComplete; originalValueComplete = p_originalValueComplete; arrayIndex = p_arrayIndex; extra = p_extra; isSpecialProperty = p_isSpecialProperty; hasModifier = Boolean(p_modifierFunction); modifierFunction = p_modifierFunction; modifierParameters = p_modifierParameters; } public function toString():String{ var returnStr:String = "\n[PropertyInfoObj "; returnStr = (returnStr + ("valueStart:" + String(valueStart))); returnStr = (returnStr + ", "); returnStr = (returnStr + ("valueComplete:" + String(valueComplete))); returnStr = (returnStr + ", "); returnStr = (returnStr + ("originalValueComplete:" + String(originalValueComplete))); returnStr = (returnStr + ", "); returnStr = (returnStr + ("arrayIndex:" + String(arrayIndex))); returnStr = (returnStr + ", "); returnStr = (returnStr + ("extra:" + String(extra))); returnStr = (returnStr + ", "); returnStr = (returnStr + ("isSpecialProperty:" + String(isSpecialProperty))); returnStr = (returnStr + ", "); returnStr = (returnStr + ("hasModifier:" + String(hasModifier))); returnStr = (returnStr + ", "); returnStr = (returnStr + ("modifierFunction:" + String(modifierFunction))); returnStr = (returnStr + ", "); returnStr = (returnStr + ("modifierParameters:" + String(modifierParameters))); returnStr = (returnStr + "]\n"); return (returnStr); } public function clone():PropertyInfoObj{ var nProperty:PropertyInfoObj = new PropertyInfoObj(valueStart, valueComplete, originalValueComplete, arrayIndex, extra, isSpecialProperty, modifierFunction, modifierParameters); return (nProperty); } } }//package caurina.transitions
Section 81
//SpecialProperty (caurina.transitions.SpecialProperty) package caurina.transitions { public class SpecialProperty { public var parameters:Array; public var getValue:Function; public var preProcess:Function; public var setValue:Function; public function SpecialProperty(p_getFunction:Function, p_setFunction:Function, p_parameters:Array=null, p_preProcessFunction:Function=null){ super(); getValue = p_getFunction; setValue = p_setFunction; parameters = p_parameters; preProcess = p_preProcessFunction; } public function toString():String{ var value:String = ""; value = (value + "[SpecialProperty "); value = (value + ("getValue:" + String(getValue))); value = (value + ", "); value = (value + ("setValue:" + String(setValue))); value = (value + ", "); value = (value + ("parameters:" + String(parameters))); value = (value + ", "); value = (value + ("preProcess:" + String(preProcess))); value = (value + "]"); return (value); } } }//package caurina.transitions
Section 82
//SpecialPropertyModifier (caurina.transitions.SpecialPropertyModifier) package caurina.transitions { public class SpecialPropertyModifier { public var getValue:Function; public var modifyValues:Function; public function SpecialPropertyModifier(p_modifyFunction:Function, p_getFunction:Function){ super(); modifyValues = p_modifyFunction; getValue = p_getFunction; } public function toString():String{ var value:String = ""; value = (value + "[SpecialPropertyModifier "); value = (value + ("modifyValues:" + String(modifyValues))); value = (value + ", "); value = (value + ("getValue:" + String(getValue))); value = (value + "]"); return (value); } } }//package caurina.transitions
Section 83
//SpecialPropertySplitter (caurina.transitions.SpecialPropertySplitter) package caurina.transitions { public class SpecialPropertySplitter { public var parameters:Array; public var splitValues:Function; public function SpecialPropertySplitter(p_splitFunction:Function, p_parameters:Array){ super(); splitValues = p_splitFunction; parameters = p_parameters; } public function toString():String{ var value:String = ""; value = (value + "[SpecialPropertySplitter "); value = (value + ("splitValues:" + String(splitValues))); value = (value + ", "); value = (value + ("parameters:" + String(parameters))); value = (value + "]"); return (value); } } }//package caurina.transitions
Section 84
//Tweener (caurina.transitions.Tweener) package caurina.transitions { import flash.display.*; import flash.events.*; import flash.utils.*; public class Tweener { private static var _timeScale:Number = 1; private static var _currentTimeFrame:Number; private static var _specialPropertySplitterList:Object; public static var autoOverwrite:Boolean = true; private static var _engineExists:Boolean = false; private static var _currentTime:Number; private static var _tweenList:Array; private static var _specialPropertyModifierList:Object; private static var _specialPropertyList:Object; private static var _transitionList:Object; private static var _inited:Boolean = false; private static var __tweener_controller__:MovieClip; public function Tweener(){ super(); trace("Tweener is a static class and should not be instantiated."); } public static function registerSpecialPropertyModifier(p_name:String, p_modifyFunction:Function, p_getFunction:Function):void{ if (!_inited){ init(); }; var spm:SpecialPropertyModifier = new SpecialPropertyModifier(p_modifyFunction, p_getFunction); _specialPropertyModifierList[p_name] = spm; } public static function registerSpecialProperty(p_name:String, p_getFunction:Function, p_setFunction:Function, p_parameters:Array=null, p_preProcessFunction:Function=null):void{ if (!_inited){ init(); }; var sp:SpecialProperty = new SpecialProperty(p_getFunction, p_setFunction, p_parameters, p_preProcessFunction); _specialPropertyList[p_name] = sp; } public static function init(... _args):void{ _inited = true; _transitionList = new Object(); Equations.init(); _specialPropertyList = new Object(); _specialPropertyModifierList = new Object(); _specialPropertySplitterList = new Object(); } private static function updateTweens():Boolean{ var i:int; if (_tweenList.length == 0){ return (false); }; i = 0; while (i < _tweenList.length) { if ((((_tweenList[i] == undefined)) || (!(_tweenList[i].isPaused)))){ if (!updateTweenByIndex(i)){ removeTweenByIndex(i); }; if (_tweenList[i] == null){ removeTweenByIndex(i, true); i--; }; }; i++; }; return (true); } public static function addCaller(p_scopes:Object=null, p_parameters:Object=null):Boolean{ var i:Number; var rScopes:Array; var rTransition:Function; var nTween:TweenListObj; var myT:Number; var trans:String; if (!Boolean(p_scopes)){ return (false); }; if ((p_scopes is Array)){ rScopes = p_scopes.concat(); } else { rScopes = [p_scopes]; }; var p_obj:Object = p_parameters; if (!_inited){ init(); }; if (((!(_engineExists)) || (!(Boolean(__tweener_controller__))))){ startEngine(); }; var rTime:Number = (isNaN(p_obj.time)) ? 0 : p_obj.time; var rDelay:Number = (isNaN(p_obj.delay)) ? 0 : p_obj.delay; if (typeof(p_obj.transition) == "string"){ trans = p_obj.transition.toLowerCase(); rTransition = _transitionList[trans]; } else { rTransition = p_obj.transition; }; if (!Boolean(rTransition)){ rTransition = _transitionList["easeoutexpo"]; }; i = 0; while (i < rScopes.length) { if (p_obj.useFrames == true){ nTween = new TweenListObj(rScopes[i], (_currentTimeFrame + (rDelay / _timeScale)), (_currentTimeFrame + ((rDelay + rTime) / _timeScale)), true, rTransition, p_obj.transitionParams); } else { nTween = new TweenListObj(rScopes[i], (_currentTime + ((rDelay * 1000) / _timeScale)), (_currentTime + (((rDelay * 1000) + (rTime * 1000)) / _timeScale)), false, rTransition, p_obj.transitionParams); }; nTween.properties = null; nTween.onStart = p_obj.onStart; nTween.onUpdate = p_obj.onUpdate; nTween.onComplete = p_obj.onComplete; nTween.onOverwrite = p_obj.onOverwrite; nTween.onStartParams = p_obj.onStartParams; nTween.onUpdateParams = p_obj.onUpdateParams; nTween.onCompleteParams = p_obj.onCompleteParams; nTween.onOverwriteParams = p_obj.onOverwriteParams; nTween.onStartScope = p_obj.onStartScope; nTween.onUpdateScope = p_obj.onUpdateScope; nTween.onCompleteScope = p_obj.onCompleteScope; nTween.onOverwriteScope = p_obj.onOverwriteScope; nTween.onErrorScope = p_obj.onErrorScope; nTween.isCaller = true; nTween.count = p_obj.count; nTween.waitFrames = p_obj.waitFrames; _tweenList.push(nTween); if ((((rTime == 0)) && ((rDelay == 0)))){ myT = (_tweenList.length - 1); updateTweenByIndex(myT); removeTweenByIndex(myT); }; i++; }; return (true); } public static function pauseAllTweens():Boolean{ var i:uint; if (!Boolean(_tweenList)){ return (false); }; var paused:Boolean; i = 0; while (i < _tweenList.length) { pauseTweenByIndex(i); paused = true; i++; }; return (paused); } public static function removeTweens(p_scope:Object, ... _args):Boolean{ var i:uint; var sps:SpecialPropertySplitter; var specialProps:Array; var j:uint; var properties:Array = new Array(); i = 0; while (i < _args.length) { if ((((typeof(_args[i]) == "string")) && ((properties.indexOf(_args[i]) == -1)))){ if (_specialPropertySplitterList[_args[i]]){ sps = _specialPropertySplitterList[_args[i]]; specialProps = sps.splitValues(p_scope, null); j = 0; while (j < specialProps.length) { properties.push(specialProps[j].name); j++; }; } else { properties.push(_args[i]); }; }; i++; }; return (affectTweens(removeTweenByIndex, p_scope, properties)); } public static function updateFrame():void{ _currentTimeFrame++; } public static function splitTweens(p_tween:Number, p_properties:Array):uint{ var i:uint; var pName:String; var found:Boolean; var originalTween:TweenListObj = _tweenList[p_tween]; var newTween:TweenListObj = originalTween.clone(false); i = 0; while (i < p_properties.length) { pName = p_properties[i]; if (Boolean(originalTween.properties[pName])){ originalTween.properties[pName] = undefined; delete originalTween.properties[pName]; }; i++; }; for (pName in newTween.properties) { found = false; i = 0; while (i < p_properties.length) { if (p_properties[i] == pName){ found = true; break; }; i++; }; if (!found){ newTween.properties[pName] = undefined; delete newTween.properties[pName]; }; }; _tweenList.push(newTween); return ((_tweenList.length - 1)); } public static function resumeTweenByIndex(p_tween:Number):Boolean{ var tTweening:TweenListObj = _tweenList[p_tween]; if ((((tTweening == null)) || (!(tTweening.isPaused)))){ return (false); }; var cTime:Number = getCurrentTweeningTime(tTweening); tTweening.timeStart = (tTweening.timeStart + (cTime - tTweening.timePaused)); tTweening.timeComplete = (tTweening.timeComplete + (cTime - tTweening.timePaused)); tTweening.timePaused = undefined; tTweening.isPaused = false; return (true); } public static function getVersion():String{ return ("AS3 1.33.74"); } public static function onEnterFrame(e:Event):void{ updateTime(); updateFrame(); var hasUpdated:Boolean; hasUpdated = updateTweens(); if (!hasUpdated){ stopEngine(); }; } public static function updateTime():void{ _currentTime = getTimer(); } private static function updateTweenByIndex(i:Number):Boolean{ var tTweening:TweenListObj; var mustUpdate:Boolean; var nv:Number; var t:Number; var b:Number; var c:Number; var d:Number; var pName:String; var eventScope:Object; var tScope:Object; var tProperty:Object; var pv:Number; var i = i; tTweening = _tweenList[i]; if ((((tTweening == null)) || (!(Boolean(tTweening.scope))))){ return (false); }; var isOver:Boolean; var cTime:Number = getCurrentTweeningTime(tTweening); if (cTime >= tTweening.timeStart){ tScope = tTweening.scope; if (tTweening.isCaller){ do { t = (((tTweening.timeComplete - tTweening.timeStart) / tTweening.count) * (tTweening.timesCalled + 1)); b = tTweening.timeStart; c = (tTweening.timeComplete - tTweening.timeStart); d = (tTweening.timeComplete - tTweening.timeStart); nv = tTweening.transition(t, b, c, d); //unresolved if if (Boolean(tTweening.onUpdate)){ eventScope = (Boolean(tTweening.onUpdateScope)) ? tTweening.onUpdateScope : tScope; tTweening.onUpdate.apply(eventScope, tTweening.onUpdateParams); continue; var _slot1 = e1; handleError(tTweening, _slot1, "onUpdate"); }; } while (tTweening.timesCalled++, !(tTweening.timesCalled >= tTweening.count)); } else { mustUpdate = (((((tTweening.skipUpdates < 1)) || (!(tTweening.skipUpdates)))) || ((tTweening.updatesSkipped >= tTweening.skipUpdates))); if (cTime >= tTweening.timeComplete){ isOver = true; mustUpdate = true; }; if (!tTweening.hasStarted){ if (Boolean(tTweening.onStart)){ eventScope = (Boolean(tTweening.onStartScope)) ? tTweening.onStartScope : tScope; tTweening.onStart.apply(eventScope, tTweening.onStartParams); //unresolved jump var _slot1 = e2; handleError(tTweening, _slot1, "onStart"); }; for (pName in tTweening.properties) { if (tTweening.properties[pName].isSpecialProperty){ if (Boolean(_specialPropertyList[pName].preProcess)){ tTweening.properties[pName].valueComplete = _specialPropertyList[pName].preProcess(tScope, _specialPropertyList[pName].parameters, tTweening.properties[pName].originalValueComplete, tTweening.properties[pName].extra); }; pv = _specialPropertyList[pName].getValue(tScope, _specialPropertyList[pName].parameters, tTweening.properties[pName].extra); } else { pv = tScope[pName]; }; tTweening.properties[pName].valueStart = (isNaN(pv)) ? tTweening.properties[pName].valueComplete : pv; }; mustUpdate = true; tTweening.hasStarted = true; }; if (mustUpdate){ for (pName in tTweening.properties) { tProperty = tTweening.properties[pName]; if (isOver){ nv = tProperty.valueComplete; } else { if (tProperty.hasModifier){ t = (cTime - tTweening.timeStart); d = (tTweening.timeComplete - tTweening.timeStart); nv = tTweening.transition(t, 0, 1, d, tTweening.transitionParams); nv = tProperty.modifierFunction(tProperty.valueStart, tProperty.valueComplete, nv, tProperty.modifierParameters); } else { t = (cTime - tTweening.timeStart); b = tProperty.valueStart; c = (tProperty.valueComplete - tProperty.valueStart); d = (tTweening.timeComplete - tTweening.timeStart); nv = tTweening.transition(t, b, c, d, tTweening.transitionParams); }; }; if (tTweening.rounded){ nv = Math.round(nv); }; if (tProperty.isSpecialProperty){ _specialPropertyList[pName].setValue(tScope, nv, _specialPropertyList[pName].parameters, tTweening.properties[pName].extra); } else { tScope[pName] = nv; }; }; tTweening.updatesSkipped = 0; if (Boolean(tTweening.onUpdate)){ eventScope = (Boolean(tTweening.onUpdateScope)) ? tTweening.onUpdateScope : tScope; tTweening.onUpdate.apply(eventScope, tTweening.onUpdateParams); //unresolved jump var _slot1 = e3; handleError(tTweening, _slot1, "onUpdate"); }; } else { tTweening.updatesSkipped++; }; }; if (((isOver) && (Boolean(tTweening.onComplete)))){ eventScope = (Boolean(tTweening.onCompleteScope)) ? tTweening.onCompleteScope : tScope; tTweening.onComplete.apply(eventScope, tTweening.onCompleteParams); //unresolved jump var _slot1 = e4; handleError(tTweening, _slot1, "onComplete"); }; return (!(isOver)); }; return (true); } public static function setTimeScale(p_time:Number):void{ var i:Number; var cTime:Number; if (isNaN(p_time)){ p_time = 1; }; if (p_time < 1E-5){ p_time = 1E-5; }; if (p_time != _timeScale){ if (_tweenList != null){ i = 0; while (i < _tweenList.length) { cTime = getCurrentTweeningTime(_tweenList[i]); _tweenList[i].timeStart = (cTime - (((cTime - _tweenList[i].timeStart) * _timeScale) / p_time)); _tweenList[i].timeComplete = (cTime - (((cTime - _tweenList[i].timeComplete) * _timeScale) / p_time)); if (_tweenList[i].timePaused != undefined){ _tweenList[i].timePaused = (cTime - (((cTime - _tweenList[i].timePaused) * _timeScale) / p_time)); }; i++; }; }; _timeScale = p_time; }; } public static function resumeAllTweens():Boolean{ var i:uint; if (!Boolean(_tweenList)){ return (false); }; var resumed:Boolean; i = 0; while (i < _tweenList.length) { resumeTweenByIndex(i); resumed = true; i++; }; return (resumed); } private static function handleError(pTweening:TweenListObj, pError:Error, pCallBackName:String):void{ var eventScope:Object; var pTweening = pTweening; var pError = pError; var pCallBackName = pCallBackName; if (((Boolean(pTweening.onError)) && ((pTweening.onError is Function)))){ eventScope = (Boolean(pTweening.onErrorScope)) ? pTweening.onErrorScope : pTweening.scope; pTweening.onError.apply(eventScope, [pTweening.scope, pError]); //unresolved jump var _slot1 = metaError; printError(((((String(pTweening.scope) + " raised an error while executing the 'onError' handler. Original error:\n ") + pError.getStackTrace()) + "\nonError error: ") + _slot1.getStackTrace())); } else { if (!Boolean(pTweening.onError)){ printError(((((String(pTweening.scope) + " raised an error while executing the '") + pCallBackName) + "'handler. \n") + pError.getStackTrace())); }; }; } private static function startEngine():void{ _engineExists = true; _tweenList = new Array(); __tweener_controller__ = new MovieClip(); __tweener_controller__.addEventListener(Event.ENTER_FRAME, _slot1.onEnterFrame); _currentTimeFrame = 0; updateTime(); } public static function removeAllTweens():Boolean{ var i:uint; if (!Boolean(_tweenList)){ return (false); }; var removed:Boolean; i = 0; while (i < _tweenList.length) { removeTweenByIndex(i); removed = true; i++; }; return (removed); } public static function addTween(p_scopes:Object=null, p_parameters:Object=null):Boolean{ var i:Number; var j:Number; var istr:String; var rScopes:Array; var rTransition:Function; var nProperties:Object; var nTween:TweenListObj; var myT:Number; var splitProperties:Array; var splitProperties2:Array; var tempModifiedProperties:Array; var trans:String; if (!Boolean(p_scopes)){ return (false); }; if ((p_scopes is Array)){ rScopes = p_scopes.concat(); } else { rScopes = [p_scopes]; }; var p_obj:Object = TweenListObj.makePropertiesChain(p_parameters); if (!_inited){ init(); }; if (((!(_engineExists)) || (!(Boolean(__tweener_controller__))))){ startEngine(); }; var rTime:Number = (isNaN(p_obj.time)) ? 0 : p_obj.time; var rDelay:Number = (isNaN(p_obj.delay)) ? 0 : p_obj.delay; var rProperties:Array = new Array(); var restrictedWords:Object = {overwrite:true, time:true, delay:true, useFrames:true, skipUpdates:true, transition:true, transitionParams:true, onStart:true, onUpdate:true, onComplete:true, onOverwrite:true, onError:true, rounded:true, onStartParams:true, onUpdateParams:true, onCompleteParams:true, onOverwriteParams:true, onStartScope:true, onUpdateScope:true, onCompleteScope:true, onOverwriteScope:true, onErrorScope:true}; var modifiedProperties:Object = new Object(); for (istr in p_obj) { if (!restrictedWords[istr]){ if (_specialPropertySplitterList[istr]){ splitProperties = _specialPropertySplitterList[istr].splitValues(p_obj[istr], _specialPropertySplitterList[istr].parameters); i = 0; while (i < splitProperties.length) { if (_specialPropertySplitterList[splitProperties[i].name]){ splitProperties2 = _specialPropertySplitterList[splitProperties[i].name].splitValues(splitProperties[i].value, _specialPropertySplitterList[splitProperties[i].name].parameters); j = 0; while (j < splitProperties2.length) { rProperties[splitProperties2[j].name] = {valueStart:undefined, valueComplete:splitProperties2[j].value, arrayIndex:splitProperties2[j].arrayIndex, isSpecialProperty:false}; j++; }; } else { rProperties[splitProperties[i].name] = {valueStart:undefined, valueComplete:splitProperties[i].value, arrayIndex:splitProperties[i].arrayIndex, isSpecialProperty:false}; }; i++; }; } else { if (_specialPropertyModifierList[istr] != undefined){ tempModifiedProperties = _specialPropertyModifierList[istr].modifyValues(p_obj[istr]); i = 0; while (i < tempModifiedProperties.length) { modifiedProperties[tempModifiedProperties[i].name] = {modifierParameters:tempModifiedProperties[i].parameters, modifierFunction:_specialPropertyModifierList[istr].getValue}; i++; }; } else { rProperties[istr] = {valueStart:undefined, valueComplete:p_obj[istr]}; }; }; }; }; for (istr in rProperties) { if (_specialPropertyList[istr] != undefined){ rProperties[istr].isSpecialProperty = true; } else { if (rScopes[0][istr] == undefined){ printError((((("The property '" + istr) + "' doesn't seem to be a normal object property of ") + String(rScopes[0])) + " or a registered special property.")); }; }; }; for (istr in modifiedProperties) { if (rProperties[istr] != undefined){ rProperties[istr].modifierParameters = modifiedProperties[istr].modifierParameters; rProperties[istr].modifierFunction = modifiedProperties[istr].modifierFunction; }; }; if (typeof(p_obj.transition) == "string"){ trans = p_obj.transition.toLowerCase(); rTransition = _transitionList[trans]; } else { rTransition = p_obj.transition; }; if (!Boolean(rTransition)){ rTransition = _transitionList["easeoutexpo"]; }; i = 0; while (i < rScopes.length) { nProperties = new Object(); for (istr in rProperties) { nProperties[istr] = new PropertyInfoObj(rProperties[istr].valueStart, rProperties[istr].valueComplete, rProperties[istr].valueComplete, rProperties[istr].arrayIndex, {}, rProperties[istr].isSpecialProperty, rProperties[istr].modifierFunction, rProperties[istr].modifierParameters); }; if (p_obj.useFrames == true){ nTween = new TweenListObj(rScopes[i], (_currentTimeFrame + (rDelay / _timeScale)), (_currentTimeFrame + ((rDelay + rTime) / _timeScale)), true, rTransition, p_obj.transitionParams); } else { nTween = new TweenListObj(rScopes[i], (_currentTime + ((rDelay * 1000) / _timeScale)), (_currentTime + (((rDelay * 1000) + (rTime * 1000)) / _timeScale)), false, rTransition, p_obj.transitionParams); }; nTween.properties = nProperties; nTween.onStart = p_obj.onStart; nTween.onUpdate = p_obj.onUpdate; nTween.onComplete = p_obj.onComplete; nTween.onOverwrite = p_obj.onOverwrite; nTween.onError = p_obj.onError; nTween.onStartParams = p_obj.onStartParams; nTween.onUpdateParams = p_obj.onUpdateParams; nTween.onCompleteParams = p_obj.onCompleteParams; nTween.onOverwriteParams = p_obj.onOverwriteParams; nTween.onStartScope = p_obj.onStartScope; nTween.onUpdateScope = p_obj.onUpdateScope; nTween.onCompleteScope = p_obj.onCompleteScope; nTween.onOverwriteScope = p_obj.onOverwriteScope; nTween.onErrorScope = p_obj.onErrorScope; nTween.rounded = p_obj.rounded; nTween.skipUpdates = p_obj.skipUpdates; if (((p_obj.overwrite == undefined)) ? autoOverwrite : p_obj.overwrite){ removeTweensByTime(nTween.scope, nTween.properties, nTween.timeStart, nTween.timeComplete); }; _tweenList.push(nTween); if ((((rTime == 0)) && ((rDelay == 0)))){ myT = (_tweenList.length - 1); updateTweenByIndex(myT); removeTweenByIndex(myT); }; i++; }; return (true); } public static function registerTransition(p_name:String, p_function:Function):void{ if (!_inited){ init(); }; _transitionList[p_name] = p_function; } public static function printError(p_message:String):void{ trace(("## [Tweener] Error: " + p_message)); } private static function affectTweens(p_affectFunction:Function, p_scope:Object, p_properties:Array):Boolean{ var i:uint; var affectedProperties:Array; var j:uint; var objectProperties:uint; var slicedTweenIndex:uint; var affected:Boolean; if (!Boolean(_tweenList)){ return (false); }; i = 0; while (i < _tweenList.length) { if (((_tweenList[i]) && ((_tweenList[i].scope == p_scope)))){ if (p_properties.length == 0){ p_affectFunction(i); affected = true; } else { affectedProperties = new Array(); j = 0; while (j < p_properties.length) { if (Boolean(_tweenList[i].properties[p_properties[j]])){ affectedProperties.push(p_properties[j]); }; j++; }; if (affectedProperties.length > 0){ objectProperties = AuxFunctions.getObjectLength(_tweenList[i].properties); if (objectProperties == affectedProperties.length){ p_affectFunction(i); affected = true; } else { slicedTweenIndex = splitTweens(i, affectedProperties); p_affectFunction(slicedTweenIndex); affected = true; }; }; }; }; i++; }; return (affected); } public static function getTweens(p_scope:Object):Array{ var i:uint; var pName:String; if (!Boolean(_tweenList)){ return ([]); }; var tList:Array = new Array(); i = 0; while (i < _tweenList.length) { if (((Boolean(_tweenList[i])) && ((_tweenList[i].scope == p_scope)))){ for (pName in _tweenList[i].properties) { tList.push(pName); }; }; i++; }; return (tList); } public static function isTweening(p_scope:Object):Boolean{ var i:uint; if (!Boolean(_tweenList)){ return (false); }; i = 0; while (i < _tweenList.length) { if (((Boolean(_tweenList[i])) && ((_tweenList[i].scope == p_scope)))){ return (true); }; i++; }; return (false); } public static function pauseTweenByIndex(p_tween:Number):Boolean{ var tTweening:TweenListObj = _tweenList[p_tween]; if ((((tTweening == null)) || (tTweening.isPaused))){ return (false); }; tTweening.timePaused = getCurrentTweeningTime(tTweening); tTweening.isPaused = true; return (true); } public static function getCurrentTweeningTime(p_tweening:Object):Number{ return ((p_tweening.useFrames) ? _currentTimeFrame : _currentTime); } public static function getTweenCount(p_scope:Object):Number{ var i:uint; if (!Boolean(_tweenList)){ return (0); }; var c:Number = 0; i = 0; while (i < _tweenList.length) { if (((Boolean(_tweenList[i])) && ((_tweenList[i].scope == p_scope)))){ c = (c + AuxFunctions.getObjectLength(_tweenList[i].properties)); }; i++; }; return (c); } private static function stopEngine():void{ _engineExists = false; _tweenList = null; _currentTime = 0; _currentTimeFrame = 0; __tweener_controller__.removeEventListener(Event.ENTER_FRAME, _slot1.onEnterFrame); __tweener_controller__ = null; } public static function removeTweensByTime(p_scope:Object, p_properties:Object, p_timeStart:Number, p_timeComplete:Number):Boolean{ var removedLocally:Boolean; var i:uint; var pName:String; var eventScope:Object; var p_scope = p_scope; var p_properties = p_properties; var p_timeStart = p_timeStart; var p_timeComplete = p_timeComplete; var removed:Boolean; var tl:uint = _tweenList.length; i = 0; while (i < tl) { if (((Boolean(_tweenList[i])) && ((p_scope == _tweenList[i].scope)))){ if ((((p_timeComplete > _tweenList[i].timeStart)) && ((p_timeStart < _tweenList[i].timeComplete)))){ removedLocally = false; for (pName in _tweenList[i].properties) { if (Boolean(p_properties[pName])){ if (Boolean(_tweenList[i].onOverwrite)){ eventScope = (Boolean(_tweenList[i].onOverwriteScope)) ? _tweenList[i].onOverwriteScope : _tweenList[i].scope; _tweenList[i].onOverwrite.apply(eventScope, _tweenList[i].onOverwriteParams); //unresolved jump var _slot1 = e; handleError(_tweenList[i], _slot1, "onOverwrite"); }; _tweenList[i].properties[pName] = undefined; delete _tweenList[i].properties[pName]; removedLocally = true; removed = true; }; }; if (removedLocally){ if (AuxFunctions.getObjectLength(_tweenList[i].properties) == 0){ removeTweenByIndex(i); }; }; }; }; i = (i + 1); }; return (removed); } public static function registerSpecialPropertySplitter(p_name:String, p_splitFunction:Function, p_parameters:Array=null):void{ if (!_inited){ init(); }; var sps:SpecialPropertySplitter = new SpecialPropertySplitter(p_splitFunction, p_parameters); _specialPropertySplitterList[p_name] = sps; } public static function removeTweenByIndex(i:Number, p_finalRemoval:Boolean=false):Boolean{ _tweenList[i] = null; if (p_finalRemoval){ _tweenList.splice(i, 1); }; return (true); } public static function resumeTweens(p_scope:Object, ... _args):Boolean{ var i:uint; var properties:Array = new Array(); i = 0; while (i < _args.length) { if ((((typeof(_args[i]) == "string")) && ((properties.indexOf(_args[i]) == -1)))){ properties.push(_args[i]); }; i++; }; return (affectTweens(resumeTweenByIndex, p_scope, properties)); } public static function pauseTweens(p_scope:Object, ... _args):Boolean{ var i:uint; var properties:Array = new Array(); i = 0; while (i < _args.length) { if ((((typeof(_args[i]) == "string")) && ((properties.indexOf(_args[i]) == -1)))){ properties.push(_args[i]); }; i++; }; return (affectTweens(pauseTweenByIndex, p_scope, properties)); } } }//package caurina.transitions
Section 85
//TweenListObj (caurina.transitions.TweenListObj) package caurina.transitions { public class TweenListObj { public var hasStarted:Boolean; public var onUpdate:Function; public var useFrames:Boolean; public var count:Number; public var onOverwriteParams:Array; public var timeStart:Number; public var timeComplete:Number; public var onStartParams:Array; public var onUpdateScope:Object; public var rounded:Boolean; public var onUpdateParams:Array; public var properties:Object; public var onComplete:Function; public var transitionParams:Object; public var updatesSkipped:Number; public var onStart:Function; public var onOverwriteScope:Object; public var skipUpdates:Number; public var onStartScope:Object; public var scope:Object; public var isCaller:Boolean; public var timePaused:Number; public var transition:Function; public var onCompleteParams:Array; public var onError:Function; public var timesCalled:Number; public var onErrorScope:Object; public var onOverwrite:Function; public var isPaused:Boolean; public var waitFrames:Boolean; public var onCompleteScope:Object; public function TweenListObj(p_scope:Object, p_timeStart:Number, p_timeComplete:Number, p_useFrames:Boolean, p_transition:Function, p_transitionParams:Object){ super(); scope = p_scope; timeStart = p_timeStart; timeComplete = p_timeComplete; useFrames = p_useFrames; transition = p_transition; transitionParams = p_transitionParams; properties = new Object(); isPaused = false; timePaused = undefined; isCaller = false; updatesSkipped = 0; timesCalled = 0; skipUpdates = 0; hasStarted = false; } public function clone(omitEvents:Boolean):TweenListObj{ var pName:String; var nTween:TweenListObj = new TweenListObj(scope, timeStart, timeComplete, useFrames, transition, transitionParams); nTween.properties = new Array(); for (pName in properties) { nTween.properties[pName] = properties[pName].clone(); }; nTween.skipUpdates = skipUpdates; nTween.updatesSkipped = updatesSkipped; if (!omitEvents){ nTween.onStart = onStart; nTween.onUpdate = onUpdate; nTween.onComplete = onComplete; nTween.onOverwrite = onOverwrite; nTween.onError = onError; nTween.onStartParams = onStartParams; nTween.onUpdateParams = onUpdateParams; nTween.onCompleteParams = onCompleteParams; nTween.onOverwriteParams = onOverwriteParams; nTween.onStartScope = onStartScope; nTween.onUpdateScope = onUpdateScope; nTween.onCompleteScope = onCompleteScope; nTween.onOverwriteScope = onOverwriteScope; nTween.onErrorScope = onErrorScope; }; nTween.rounded = rounded; nTween.isPaused = isPaused; nTween.timePaused = timePaused; nTween.isCaller = isCaller; nTween.count = count; nTween.timesCalled = timesCalled; nTween.waitFrames = waitFrames; nTween.hasStarted = hasStarted; return (nTween); } public function toString():String{ var i:String; var returnStr:String = "\n[TweenListObj "; returnStr = (returnStr + ("scope:" + String(scope))); returnStr = (returnStr + ", properties:"); var isFirst:Boolean; for (i in properties) { if (!isFirst){ returnStr = (returnStr + ","); }; returnStr = (returnStr + ("[name:" + properties[i].name)); returnStr = (returnStr + (",valueStart:" + properties[i].valueStart)); returnStr = (returnStr + (",valueComplete:" + properties[i].valueComplete)); returnStr = (returnStr + "]"); isFirst = false; }; returnStr = (returnStr + (", timeStart:" + String(timeStart))); returnStr = (returnStr + (", timeComplete:" + String(timeComplete))); returnStr = (returnStr + (", useFrames:" + String(useFrames))); returnStr = (returnStr + (", transition:" + String(transition))); returnStr = (returnStr + (", transitionParams:" + String(transitionParams))); if (skipUpdates){ returnStr = (returnStr + (", skipUpdates:" + String(skipUpdates))); }; if (updatesSkipped){ returnStr = (returnStr + (", updatesSkipped:" + String(updatesSkipped))); }; if (Boolean(onStart)){ returnStr = (returnStr + (", onStart:" + String(onStart))); }; if (Boolean(onUpdate)){ returnStr = (returnStr + (", onUpdate:" + String(onUpdate))); }; if (Boolean(onComplete)){ returnStr = (returnStr + (", onComplete:" + String(onComplete))); }; if (Boolean(onOverwrite)){ returnStr = (returnStr + (", onOverwrite:" + String(onOverwrite))); }; if (Boolean(onError)){ returnStr = (returnStr + (", onError:" + String(onError))); }; if (onStartParams){ returnStr = (returnStr + (", onStartParams:" + String(onStartParams))); }; if (onUpdateParams){ returnStr = (returnStr + (", onUpdateParams:" + String(onUpdateParams))); }; if (onCompleteParams){ returnStr = (returnStr + (", onCompleteParams:" + String(onCompleteParams))); }; if (onOverwriteParams){ returnStr = (returnStr + (", onOverwriteParams:" + String(onOverwriteParams))); }; if (onStartScope){ returnStr = (returnStr + (", onStartScope:" + String(onStartScope))); }; if (onUpdateScope){ returnStr = (returnStr + (", onUpdateScope:" + String(onUpdateScope))); }; if (onCompleteScope){ returnStr = (returnStr + (", onCompleteScope:" + String(onCompleteScope))); }; if (onOverwriteScope){ returnStr = (returnStr + (", onOverwriteScope:" + String(onOverwriteScope))); }; if (onErrorScope){ returnStr = (returnStr + (", onErrorScope:" + String(onErrorScope))); }; if (rounded){ returnStr = (returnStr + (", rounded:" + String(rounded))); }; if (isPaused){ returnStr = (returnStr + (", isPaused:" + String(isPaused))); }; if (timePaused){ returnStr = (returnStr + (", timePaused:" + String(timePaused))); }; if (isCaller){ returnStr = (returnStr + (", isCaller:" + String(isCaller))); }; if (count){ returnStr = (returnStr + (", count:" + String(count))); }; if (timesCalled){ returnStr = (returnStr + (", timesCalled:" + String(timesCalled))); }; if (waitFrames){ returnStr = (returnStr + (", waitFrames:" + String(waitFrames))); }; if (hasStarted){ returnStr = (returnStr + (", hasStarted:" + String(hasStarted))); }; returnStr = (returnStr + "]\n"); return (returnStr); } public static function makePropertiesChain(p_obj:Object):Object{ var chainedObject:Object; var chain:Object; var currChainObj:Object; var len:Number; var i:Number; var k:Number; var baseObject:Object = p_obj.base; if (baseObject){ chainedObject = {}; if ((baseObject is Array)){ chain = []; k = 0; while (k < baseObject.length) { chain.push(baseObject[k]); k++; }; } else { chain = [baseObject]; }; chain.push(p_obj); len = chain.length; i = 0; while (i < len) { if (chain[i]["base"]){ currChainObj = AuxFunctions.concatObjects(makePropertiesChain(chain[i]["base"]), chain[i]); } else { currChainObj = chain[i]; }; chainedObject = AuxFunctions.concatObjects(chainedObject, currChainObj); i++; }; if (chainedObject["base"]){ delete chainedObject["base"]; }; return (chainedObject); //unresolved jump }; return (p_obj); } } }//package caurina.transitions
Section 86
//APIEvents (com.api.as3.evnt.APIEvents) package com.api.as3.evnt { import flash.events.*; public class APIEvents extends Event { private var _data:Object; public static var GIVESCORE:String = "GIVESCORE"; public static var AUTHURL:String = "AUTHURL"; public static var BADDATA:String = "BADDATA"; public static var SECURITY_ERROR:String = "SECURITY_ERROR"; public static var LOADERROR:String = "LOADERROR"; public static var STARTGAME:String = "STARTGAME"; public static var IO_ERROR:String = "IO_ERROR"; public static var USERNAME:String = "USERNAME"; public static var GETSCORE:String = "GETSCORE"; public function APIEvents(typ:String, dat:Object=undefined, bbl:Boolean=false, ccb:Boolean=false):void{ super(typ, bbl, ccb); _data = dat; } public function get data():Object{ return (_data); } } }//package com.api.as3.evnt
Section 87
//RC4 (com.api.as3.security.RC4) package com.api.as3.security { public class RC4 { protected static var mykey:Array = new Array(0xFF); protected static var sbox:Array = new Array(0xFF); protected static function charsToHex(chars:Array):String{ var result:String = new String(""); var hexes:Array = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"); var i:Number = 0; while (i < chars.length) { result = (result + (hexes[(chars[i] >> 4)] + hexes[(chars[i] & 15)])); i++; }; return (result); } public static function encrypt(src:String, key:String):String{ var mtxt:Array = strToChars(src); var mkey:Array = strToChars(key); var result:Array = calculate(mtxt, mkey); return (charsToHex(result)); } protected static function hexToChars(hex:String):Array{ var codes:Array = new Array(); var i:Number = ((hex.substr(0, 2))=="0x") ? 2 : 0; while (i < hex.length) { codes.push(parseInt(hex.substr(i, 2), 16)); i = (i + 2); }; return (codes); } public static function decrypt(src:String, key:String):String{ var mtxt:Array = hexToChars(src); var mkey:Array = strToChars(key); var result:Array = calculate(mtxt, mkey); return (charsToStr(result)); } protected static function strToChars(str:String):Array{ var codes:Array = new Array(); var i:Number = 0; while (i < str.length) { codes.push(str.charCodeAt(i)); i++; }; return (codes); } protected static function calculate(plaintxt:Array, psw:Array):Array{ var k:Number; var temp:Number; var cipherby:Number; var idx:Number; initialize(psw); var i:Number = 0; var j:Number = 0; var cipher:Array = new Array(); var a:Number = 0; while (a < plaintxt.length) { i = ((i + 1) % 0x0100); j = ((j + sbox[i]) % 0x0100); temp = sbox[i]; sbox[i] = sbox[j]; sbox[j] = temp; idx = ((sbox[i] + sbox[j]) % 0x0100); k = sbox[idx]; cipherby = (plaintxt[a] ^ k); cipher.push(cipherby); a++; }; return (cipher); } protected static function initialize(pwd:Array){ var tempSwap:Number; var b:Number = 0; var intLength:Number = pwd.length; var a:Number = 0; while (a <= 0xFF) { mykey[a] = pwd[(a % intLength)]; sbox[a] = a; a++; }; var a2:Number = 0; while (a2 <= 0xFF) { b = (((b + sbox[a2]) + mykey[a2]) % 0x0100); tempSwap = sbox[a2]; sbox[a2] = sbox[b]; sbox[b] = tempSwap; a2++; }; } protected static function charsToStr(chars:Array):String{ var result:String = new String(""); var i:Number = 0; while (i < chars.length) { result = (result + String.fromCharCode(chars[i])); i++; }; return (result); } } }//package com.api.as3.security
Section 88
//API (com.api.as3.API) package com.api.as3 { import flash.display.*; import flash.events.*; import com.api.as3.evnt.*; import com.api.as3.security.*; import flash.net.*; public class API extends MovieClip { private var idkey:String;// = "JKLdfr34,56D5,673rdSsDS" private var gameid:String; private var theKey:String; private var url:String; public function API(gameid:String, key, url){ super(); this.theKey = key; this.url = url; this.gameid = gameid; } public function giveScore(level, score):void{ var xml:String; var query_de:String; var query_en:String; var reply_de:String; var reply_en:String; var loader:URLLoader; var level = level; var score = score; xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; xml = (xml + "\t <root>"); xml = (xml + "\t\t<query name=\"givescore\">"); xml = (xml + (((((("\t\t\t<game gameid=\"" + gameid) + "\" level=\"") + level) + "\" score=\"") + score) + "\"></game>")); xml = (xml + "\t\t</query>"); xml = (xml + "\t</root>"); query_de = xml; var query:* = RC4.encrypt(xml, theKey); query = (query + RC4.encrypt(gameid, idkey)); query_en = query; loader = new URLLoader(); loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function (event:SecurityErrorEvent){ trace(("Security Error in metod 'giveScore': " + event)); sendEvent(APIEvents.SECURITY_ERROR, {metod:"giveScore", text:event.text, type:event.type}); }); loader.addEventListener(IOErrorEvent.IO_ERROR, function (event:IOErrorEvent){ trace(("IO Error in metod 'giveScore': " + event)); sendEvent(APIEvents.IO_ERROR, {metod:"giveScore", text:event.text, type:event.type}); }); loader.addEventListener(Event.COMPLETE, function (event:Event){ var xml:XML; var p1:Number; var p2:Number; var p3:Number; var p4:String; var d:URLVariables = new URLVariables(loader.data); if (d.resp){ reply_en = d.resp; xml = new XML(RC4.decrypt(d.resp, theKey)); reply_de = xml.toString(); p1 = 0; p2 = 0; p3 = 0; p4 = ""; if (xml != ""){ p1 = (xml.reply[0].game[0].@gameid) ? xml.reply[0].game[0].@gameid : 0; p2 = (xml.reply[0].game[0].@level) ? xml.reply[0].game[0].@level : 0; p3 = (xml.reply[0].info[0].@authed) ? xml.reply[0].info[0].@authed : 0; p4 = (xml.reply[0].info[0].@username) ? xml.reply[0].info[0].@username : ""; }; sendEvent(APIEvents.GIVESCORE, {gameid:p1, level:p2, authed:p3, username:p4, query_de:query_de, query_en:query_en, reply_de:reply_de, reply_en:reply_en}); } else { trace("Bad xml data loaded in metod 'giveScore'."); sendEvent(APIEvents.BADDATA, {metod:"giveScore"}); }; }); var request:URLRequest = new URLRequest(url); var variables:URLVariables = new URLVariables(); variables.query = query; variables.k = Math.random(); request.data = variables; loader.load(request); //unresolved jump var _slot1 = error; trace("Unable to load requested document."); sendEvent(APIEvents.LOADERROR, {metod:"giveScore"}); } public function getScore(level):void{ var xml:String; var query_de:String; var query_en:String; var reply_de:String; var reply_en:String; var loader:URLLoader; var level = level; xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; xml = (xml + "\t <root>"); xml = (xml + "\t\t<query name=\"getScore\">"); xml = (xml + (((("\t\t\t<game gameid=\"" + gameid) + "\" level=\"") + level) + "\"></game>")); xml = (xml + "\t\t</query>"); xml = (xml + "\t</root>"); query_de = xml; var query:* = RC4.encrypt(xml, theKey); query = (query + RC4.encrypt(gameid, idkey)); query_en = query; loader = new URLLoader(); loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function (event:SecurityErrorEvent){ trace(("Security Erro in metod 'getScore'r: " + event)); sendEvent(APIEvents.SECURITY_ERROR, {metod:"getScore", text:event.text, type:event.type}); }); loader.addEventListener(IOErrorEvent.IO_ERROR, function (event:IOErrorEvent){ trace(("IO Error in metod 'getScore': " + event)); sendEvent(APIEvents.IO_ERROR, {metod:"getScore", text:event.text, type:event.type}); }); loader.addEventListener(Event.COMPLETE, function (event:Event){ var xml:XML; var p1:Number; var p2:Number; var p3:Number; var d:URLVariables = new URLVariables(loader.data); if (d.resp){ reply_en = d.resp; xml = new XML(RC4.decrypt(d.resp, theKey)); reply_de = xml.toString(); p1 = 0; p2 = 0; p3 = 0; if (xml != ""){ p1 = (xml.reply[0].game[0].@gameid) ? xml.reply[0].game[0].@gameid : 0; p2 = (xml.reply[0].game[0].@level) ? xml.reply[0].game[0].@level : 0; p3 = (xml.reply[0].game[0].@score) ? xml.reply[0].game[0].@score : 0; }; sendEvent(APIEvents.GETSCORE, {gameid:p1, level:p2, score:p3, query_de:query_de, query_en:query_en, reply_de:reply_de, reply_en:reply_en}); } else { trace("Bad xml data loaded in metod 'getScore'."); sendEvent(APIEvents.BADDATA, {metod:"getScore"}); }; }); var request:URLRequest = new URLRequest(url); var variables:URLVariables = new URLVariables(); variables.query = query; variables.k = Math.random(); request.data = variables; loader.load(request); //unresolved jump var _slot1 = error; trace("Unable to load requested document."); sendEvent(APIEvents.LOADERROR, {metod:"getScore"}); } public function getUserName():void{ var xml:String; var query_de:String; var query_en:String; var reply_de:String; var reply_en:String; var loader:URLLoader; xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; xml = (xml + "\t <root>"); xml = (xml + "\t\t<query name=\"getusername\">"); xml = (xml + (("\t\t\t<game gameid=\"" + gameid) + "\"></game>")); xml = (xml + "\t\t</query>"); xml = (xml + "\t</root>"); query_de = xml; var query:* = RC4.encrypt(xml, theKey); query = (query + RC4.encrypt(gameid, idkey)); query_en = query; loader = new URLLoader(); loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function (event:SecurityErrorEvent){ trace(("Security Error in metod 'getUserName': " + event)); sendEvent(APIEvents.SECURITY_ERROR, {metod:"getUserName", text:event.text, type:event.type}); }); loader.addEventListener(IOErrorEvent.IO_ERROR, function (event:IOErrorEvent){ trace(("IO Error in metod 'getUserName': " + event)); sendEvent(APIEvents.IO_ERROR, {metod:"getUserName", text:event.text, type:event.type}); }); loader.addEventListener(Event.COMPLETE, function (event:Event){ var xml:XML; var p1:String; var d:URLVariables = new URLVariables(loader.data); if (d.resp){ reply_en = d.resp; xml = new XML(RC4.decrypt(d.resp, theKey)); reply_de = xml.toString(); p1 = ""; if (xml != ""){ p1 = (xml.reply[0].info[0].@username) ? xml.reply[0].info[0].@username : ""; }; sendEvent(APIEvents.USERNAME, {username:p1, query_de:query_de, query_en:query_en, reply_de:reply_de, reply_en:reply_en}); } else { trace("Bad xml data loaded in metod 'getUserName'."); sendEvent(APIEvents.BADDATA, {metod:"getUserName"}); }; }); var request:URLRequest = new URLRequest(url); var variables:URLVariables = new URLVariables(); variables.query = query; variables.k = Math.random(); request.data = variables; loader.load(request); //unresolved jump var _slot1 = error; trace("Unable to load requested document."); sendEvent(APIEvents.LOADERROR, {metod:"getUserName"}); } public function getAuthUrl():void{ var xml:String; var query_de:String; var query_en:String; var reply_de:String; var reply_en:String; var loader:URLLoader; xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; xml = (xml + "\t <root>"); xml = (xml + "\t\t<query name=\"getauthurl\">"); xml = (xml + (("\t\t\t<game gameid=\"" + gameid) + "\"></game>")); xml = (xml + "\t\t</query>"); xml = (xml + "\t</root>"); query_de = xml; var query:* = RC4.encrypt(xml, theKey); query = (query + RC4.encrypt(gameid, idkey)); query_en = query; loader = new URLLoader(); loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function (event:SecurityErrorEvent){ trace(("Security Error in metod 'getAuthUrl': " + event)); sendEvent(APIEvents.SECURITY_ERROR, {metod:"getAuthUrl", text:event.text, type:event.type}); }); loader.addEventListener(IOErrorEvent.IO_ERROR, function (event:IOErrorEvent){ trace(("IO Error in metod 'getAuthUrl': " + event)); sendEvent(APIEvents.IO_ERROR, {metod:"getAuthUrl", text:event.text, type:event.type}); }); loader.addEventListener(Event.COMPLETE, function (event:Event){ var xml:XML; var p1:String; var d:URLVariables = new URLVariables(loader.data); if (d.resp){ reply_en = d.resp; xml = new XML(RC4.decrypt(d.resp, theKey)); reply_de = xml.toString(); p1 = ""; if (xml != ""){ p1 = (xml.reply[0].info[0].@authurl) ? xml.reply[0].info[0].@authurl : ""; }; sendEvent(APIEvents.AUTHURL, {authurl:p1, query_de:query_de, query_en:query_en, reply_de:reply_de, reply_en:reply_en}); } else { trace("Bad xml data loaded in metod 'getAuthUrl'."); sendEvent(APIEvents.BADDATA, {metod:"getAuthUrl"}); }; }); var request:URLRequest = new URLRequest(url); var variables:URLVariables = new URLVariables(); variables.query = query; variables.k = Math.random(); request.data = variables; loader.load(request); //unresolved jump var _slot1 = error; trace("Unable to load requested document."); sendEvent(APIEvents.LOADERROR, {metod:"getAuthUrl"}); } private function sendEvent(typ:String, dat:Object):void{ dispatchEvent(new APIEvents(typ, dat)); } public function startGame():void{ var xml:String; var query_de:String; var query_en:String; var reply_de:String; var reply_en:String; var loader:URLLoader; xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; xml = (xml + "\t <root>"); xml = (xml + "\t\t<query name=\"startgame\">"); xml = (xml + (("\t\t\t<game gameid=\"" + gameid) + "\"></game>")); xml = (xml + "\t\t</query>"); xml = (xml + "\t</root>"); query_de = xml; var query:* = RC4.encrypt(xml, theKey); query = (query + RC4.encrypt(gameid, idkey)); query_en = query; loader = new URLLoader(); loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function (event:SecurityErrorEvent){ trace(("Security Error in metod 'startGame': " + event)); sendEvent(APIEvents.SECURITY_ERROR, {metod:"startGame", text:event.text, type:event.type}); }); loader.addEventListener(IOErrorEvent.IO_ERROR, function (event:IOErrorEvent){ trace(("IO Error in metod 'startGame': " + event)); sendEvent(APIEvents.IO_ERROR, {metod:"startGame", text:event.text, type:event.type}); }); loader.addEventListener(Event.COMPLETE, function (event:Event){ var xml:XML; var p1:Number; var p2:String; var d:URLVariables = new URLVariables(loader.data); if (d.resp){ reply_en = d.resp; xml = new XML(RC4.decrypt(d.resp, theKey)); reply_de = xml.toString(); p1 = 0; p2 = ""; if (xml != ""){ p1 = (xml.reply[0].game[0].@authed) ? xml.reply[0].game[0].@authed : 0; p2 = (xml.reply[0].info[0].@username) ? xml.reply[0].info[0].@username : ""; }; sendEvent(APIEvents.STARTGAME, {authed:p1, username:p2, query_de:query_de, query_en:query_en, reply_de:reply_de, reply_en:reply_en}); } else { trace("Bad xml data loaded in metod 'startGame'."); sendEvent(APIEvents.BADDATA, {metod:"startGame"}); }; }); var request:URLRequest = new URLRequest(url); var variables:URLVariables = new URLVariables(); variables.query = query; variables.k = Math.random(); request.data = variables; loader.load(request); //unresolved jump var _slot1 = error; trace("Unable to load requested document."); sendEvent(APIEvents.LOADERROR, {metod:"startGame"}); } } }//package com.api.as3
Section 89
//Eight (Element.Eight) package Element { import flash.display.*; import UserdefinedClass.*; import BaseClass.*; import flash.utils.*; public class Eight extends BaseSquare { public function Eight(x:Number, y:Number, _kind:String){ super(); MyData.getInstance().Faceobj[_kind].push(this); kind = _kind; var faceclass:* = getDefinitionByName(kind); face = (new (faceclass) as MovieClip); addChild(face); Box2dFactory.getInstance().createBody(x, y, 8, R, 0, this); } } }//package Element
Section 90
//Fanstage2 (Element.Fanstage2) package Element { import flash.display.*; import flash.geom.*; import UserdefinedClass.*; import Gamestage.*; public class Fanstage2 extends MovieClip { public var phyworld:Box2dFactory; public var fan:MovieClip; public var mainobj:Gamestage2; public function Fanstage2(obj:Object){ super(); phyworld = Box2dFactory.getInstance(); mainobj = (obj as Gamestage2); makefan(); } public function setspeed(mcobj:MovieClip):Point{ var Px:int; var Py:int; if (HitTest.complexHitTestObject(fan.up, mcobj)){ Px = -2; }; if (HitTest.complexHitTestObject(fan.down, mcobj)){ Px = 2; }; if (HitTest.complexHitTestObject(fan.left, mcobj)){ Py = -2; }; if (HitTest.complexHitTestObject(fan.right, mcobj)){ Py = -2; }; return (new Point(Px, Py)); } public function makefan(){ fan = new Fan1(); mainobj.background.addChild(fan); phyworld.addToWorld((x / 30), (y / 30), 0, 100, 0, 0, fan, false, "rim"); setRlight(); } public function setGlight(){ fan.Green.gotoAndStop(2); fan.Red.gotoAndStop(1); } public function setRlight(){ fan.Green.gotoAndStop(1); fan.Red.gotoAndStop(2); } } }//package Element
Section 91
//Fanstage3 (Element.Fanstage3) package Element { import flash.display.*; import flash.geom.*; import UserdefinedClass.*; import Gamestage.*; public class Fanstage3 extends MovieClip { public var phyworld:Box2dFactory; public var fan:MovieClip; public var fanmask2:MovieClip; public var mainobj:Gamestage3; public function Fanstage3(obj:Object){ super(); phyworld = Box2dFactory.getInstance(); mainobj = (obj as Gamestage3); makefan(); } public function setspeed(mcobj:MovieClip):Point{ var Px:int; var Py:int; if (HitTest.complexHitTestObject(fan.up, mcobj)){ Px = -2; }; if (HitTest.complexHitTestObject(fan.down, mcobj)){ Px = 2; }; if (HitTest.complexHitTestObject(fan.left, mcobj)){ Py = -3; }; if (HitTest.complexHitTestObject(fan.right, mcobj)){ Py = -3; }; return (new Point(Px, Py)); } public function makefan(){ fan = new Fan2(); fanmask2 = new Fanmask2(); mainobj.background.addChild(fan); mainobj.standby2.addChild(fanmask2); phyworld.addToWorld((x / 30), (y / 30), 0, 100, 0, 0, fan, false, "rim"); } } }//package Element
Section 92
//Four (Element.Four) package Element { import flash.display.*; import UserdefinedClass.*; import BaseClass.*; import flash.utils.*; public class Four extends BaseSquare { public function Four(x:Number, y:Number, _kind:String){ super(); MyData.getInstance().Faceobj[_kind].push(this); kind = _kind; var faceclass:* = getDefinitionByName(kind); face = (new (faceclass) as MovieClip); addChild(face); Box2dFactory.getInstance().createBody(x, y, 4, 25.45, 0, this, "item", false); } } }//package Element
Section 93
//Hexagon (Element.Hexagon) package Element { import flash.display.*; import flash.events.*; import flash.geom.*; import UserdefinedClass.*; import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Dynamics.Joints.*; import Gamestage.*; public class Hexagon extends MovieClip { public var Smotor:b2RevoluteJoint; public var Blun:MovieClip; public var Byuan:MovieClip; public var Bpoint:MovieClip; public var count:int;// = 0 public var Slun:MovieClip; public var motormaxtorque:Number;// = 100 public var vec:b2Vec2; public var Spoint:MovieClip; public var mainobj:Gamestage6; public var hexagon:MovieClip; public var motorSpeed:Number; public var Bymotor:b2RevoluteJoint; public var Br:Number;// = 200 public var phyworld:Box2dFactory; public var Bmotor:b2RevoluteJoint; public var waybool:Boolean;// = true public var Sr:Number;// = 56 public function Hexagon(obj:Object){ motorSpeed = ((Math.PI * 2) / 20); super(); phyworld = Box2dFactory.getInstance(); mainobj = (obj as Gamestage6); makehexagon(); } public function makehexagon(){ hexagon = new HexagonMC(); mainobj.background.addChild(hexagon); Blun = (hexagon.getChildByName("blun") as MovieClip); Slun = (hexagon.getChildByName("slun") as MovieClip); Bpoint = (hexagon.getChildByName("a1") as MovieClip); trace(Bpoint); Spoint = (hexagon.getChildByName("a2") as MovieClip); trace(Spoint); trace(mainobj, mainobj.standby1); trace(Bpoint); var p:Point = MyMath.LtoG(mainobj.standby1, Bpoint); Bpoint.x = p.x; Bpoint.y = p.y; p = MyMath.LtoG(mainobj.standby1, Blun); Blun.x = p.x; Blun.y = p.y; mainobj.standby1.addChild(Bpoint); mainobj.standby1.addChild(Blun); phyworld.addToWorld((Bpoint.x / 30), (Bpoint.y / 30), Bpoint.rotation, 0, 0, 0, Bpoint, false, "point"); phyworld.addToWorld((Blun.x / 30), (Blun.y / 30), Blun.rotation, 100, 0, 0, Blun, false, "rim", false); Bmotor = (phyworld.createRevoluteJoint(Blun.bd, Bpoint.bd, (Blun.bd as b2Body).GetWorldCenter(), false, 0, 0, true, 0, 0) as b2RevoluteJoint); Bmotor.EnableMotor(true); p = MyMath.LtoG(mainobj.standby1, Slun); Slun.x = p.x; Slun.y = p.y; p = MyMath.LtoG(mainobj.standby1, Spoint); Spoint.x = p.x; Spoint.y = p.y; mainobj.standby1.addChild(Slun); mainobj.standby1.addChild(Spoint); phyworld.makeBodyByYuanInside((Slun.x / 30), (Slun.y / 30), Slun, 100, 100, 0, false, "gear"); phyworld.addToWorld((Spoint.x / 30), (Spoint.y / 30), Spoint.rotation, 0, 0, 0, Spoint, false, "point"); Smotor = (phyworld.createRevoluteJoint(Slun.bd, Spoint.bd, (Slun.bd as b2Body).GetWorldCenter(), false, 0, 0, true, 0, motormaxtorque) as b2RevoluteJoint); Smotor.EnableMotor(true); Smotor.SetMotorSpeed((-(motorSpeed) * 4)); Smotor.SetMaxMotorTorque(motormaxtorque); addEventListener(Event.ENTER_FRAME, onsetV); hexagon.aa.aa.gotoAndStop(1); } public function restart(){ addEventListener(Event.ENTER_FRAME, onsetV); hexagon.aa.play(); } public function onsetV(e:Event):void{ var body:b2Body = (Blun.bd as b2Body); if (Smotor.GetJointSpeed() > 0){ body.SetXForm(body.GetWorldCenter(), ((Smotor.GetJointAngle() * 0.25) + ((Math.PI * 5) / 1440))); } else { body.SetXForm(body.GetWorldCenter(), ((Smotor.GetJointAngle() * 0.25) - ((Math.PI * 5) / 1440))); }; if (hexagon.aa.currentFrame == hexagon.aa.totalFrames){ hexagon.aa.aa.gotoAndStop((MyMath.randRange(15) + 1)); }; count++; if (!(count % (30 * 15))){ count = 0; setV((waybool) ? -1 : 1); if (waybool){ waybool = false; } else { waybool = true; }; }; } public function stopAll(){ removeEventListener(Event.ENTER_FRAME, onsetV); hexagon.aa.stop(); } public function destory(){ removeEventListener(Event.ENTER_FRAME, onsetV); } public function stopmotor(){ setV(1); } public function setV(way:Number=1){ Smotor.EnableMotor(true); Smotor.SetMotorSpeed(((-(motorSpeed) * 4) * way)); Smotor.SetMaxMotorTorque(motormaxtorque); } public function resetmotop(){ setV(-1); } } }//package Element
Section 94
//MyContactFilter (Element.MyContactFilter) package Element { import Box2D.Dynamics.*; import Box2D.Collision.Shapes.*; public class MyContactFilter extends b2ContactFilter { public function MyContactFilter(){ super(); } override public function ShouldCollide(fixtureA:b2Shape, fixtureB:b2Shape):Boolean{ var b1:b2Body = fixtureA.GetBody(); var b2:b2Body = fixtureB.GetBody(); var u1:Object = b1.GetUserData(); var u2:Object = b2.GetUserData(); if (((u1) && (u2))){ if ((((u1.type == "point")) && ((u2.type == "rim")))){ return (false); }; if ((((u2.type == "point")) && ((u1.type == "rim")))){ return (false); }; if ((((u1.type == "point")) && ((u2.type == "gear")))){ return (false); }; if ((((u2.type == "point")) && ((u1.type == "gear")))){ return (false); }; if ((((u1.type == "rim")) && ((u2.type == "gear")))){ return (false); }; if ((((u2.type == "rim")) && ((u1.type == "gear")))){ return (false); }; if ((((u2.type == "gear")) && ((u1.type == "gear")))){ return (false); }; if ((((u1.type == "point")) && ((u2.type == "item")))){ return (false); }; if ((((u2.type == "point")) && ((u1.type == "item")))){ return (false); }; return (true); //unresolved jump }; return (true); } } }//package Element
Section 95
//MyData (Element.MyData) package Element { import Gamestage.*; public class MyData { private var _stageclassground:Array; private var _gamedata5:gamedata; private var _gamedata6:gamedata; private var _gamedata1:gamedata; private var _gamedata2:gamedata; private var _gamedata3:gamedata; private var _gamedata4:gamedata; public var Faceobj:faceobj; public static var facedata4:Array = new Array("R4", "Y4", "B4", "G4"); public static var facedataground:Array = new Array(facedata0, facedata4, facedata6, facedata8); public static var facedata6:Array = new Array("R6", "Y6", "B6", "G6"); public static var facedata0:Array = new Array("R0", "Y0", "B0", "G0"); public static var facedata8:Array = new Array("R8", "Y8", "B8", "G8"); public static var _instance:MyData; public function MyData(){ Faceobj = new faceobj(); _stageclassground = new Array(Gamestage1, Gamestage2, Gamestage3, Gamestage4, Gamestage5, Gamestage6); _gamedata1 = new gamedata(); _gamedata2 = new gamedata(); _gamedata3 = new gamedata(); _gamedata4 = new gamedata(); _gamedata5 = new gamedata(); _gamedata6 = new gamedata(); super(); _gamedata1.gametime = 135; _gamedata1.passscore = new Array(1500, 3000, 4500, 6000, 7500, 9000, 10500, 12000, 13500, 15000); _gamedata1.sqnum = new Array(2, 2, 2, 3, 3, 4, 4, 5, 5, 5); _gamedata1.spaceT = new Array(30, 30, 30, 30, 30, 45, 45, 45, 45, 45); _gamedata1.resclass = new Array(); _gamedata2.gametime = 130; _gamedata2.passscore = new Array(1500, 3000, 4500, 6000, 7500, 9000, 10500, 12000, 13500, 15000); _gamedata2.sqnum = new Array(2, 3, 3, 3, 4, 4, 4, 5, 5, 5); _gamedata2.spaceT = new Array(30, 30, 30, 30, 30, 45, 45, 45, 45, 45); _gamedata2.resclass = new Array(); _gamedata3.gametime = 125; _gamedata3.passscore = new Array(1500, 3000, 4500, 6000, 7500, 9000, 10500, 12000, 13500, 15000); _gamedata3.sqnum = new Array(3, 3, 3, 4, 4, 4, 5, 5, 5, 6); _gamedata3.spaceT = new Array(30, 30, 30, 30, 30, 45, 45, 45, 60, 60); _gamedata3.resclass = new Array(); _gamedata4.gametime = 120; _gamedata4.passscore = new Array(2000, 4000, 6000, 8000, 10000, 12000, 14000, 16000, 18000, 20000); _gamedata4.sqnum = new Array(3, 3, 3, 4, 4, 4, 5, 5, 6, 6); _gamedata4.spaceT = new Array(30, 30, 30, 30, 30, 45, 45, 45, 60, 60); _gamedata4.resclass = new Array(); _gamedata5.gametime = 115; _gamedata5.passscore = new Array(2000, 4000, 6000, 8000, 10000, 12000, 14000, 16000, 18000, 20000); _gamedata5.sqnum = new Array(3, 3, 4, 4, 5, 5, 5, 6, 6, 6); _gamedata5.spaceT = new Array(30, 30, 30, 30, 45, 45, 45, 45, 60, 60); _gamedata5.resclass = new Array(); _gamedata6.gametime = 110; _gamedata6.passscore = new Array(2500, 5000, 7500, 10000, 12500, 15000, 17500, 20000, 22500, 25000); _gamedata6.sqnum = new Array(3, 3, 4, 4, 5, 5, 6, 6, 6, 6); _gamedata6.spaceT = new Array(30, 30, 30, 45, 45, 45, 60, 60, 60, 60); _gamedata6.resclass = new Array(); } public function get stageclassground():Array{ return (_stageclassground); } public function get gamedata2():gamedata{ return (_gamedata2); } public function get gamedata5():gamedata{ return (_gamedata5); } public function get gamedata6():gamedata{ return (_gamedata6); } public function get gamedata1():gamedata{ return (_gamedata1); } public function get gamedata3():gamedata{ return (_gamedata3); } public function get gamedata4():gamedata{ return (_gamedata4); } public static function getInstance():MyData{ if (_instance == null){ _instance = new (MyData); }; return (_instance); } } }//package Element class gamedata { private var _passscore:Array; private var _sqnum:Array; private var _spaceT:Array; private var _resclass:Array; private var _gametime:int; private function gamedata(){ } public function get passscore():Array{ return (_passscore); } public function set spaceT(value:Array):void{ _spaceT = value; } public function set gametime(value:int):void{ _gametime = value; } public function get sqnum():Array{ return (_sqnum); } public function set resclass(value:Array):void{ _resclass = value; } public function set passscore(value:Array):void{ _passscore = value; } public function get spaceT():Array{ return (_spaceT); } public function get resclass():Array{ return (_resclass); } public function set sqnum(value:Array):void{ _sqnum = value; } public function get gametime():int{ return (_gametime); } } class faceobj { public var B8:Array; public var ground:Array; public var G0:Array; public var G4:Array; public var G6:Array; public var G8:Array; public var R4:Array; public var R0:Array; public var R8:Array; public var R6:Array; public var B4:Array; public var B6:Array; public var B0:Array; public var Y0:Array; public var Y4:Array; public var Y6:Array; public var Y8:Array; private function faceobj(){ R0 = new Array(); Y0 = new Array(); B0 = new Array(); G0 = new Array(); R4 = new Array(); Y4 = new Array(); B4 = new Array(); G4 = new Array(); R6 = new Array(); Y6 = new Array(); B6 = new Array(); G6 = new Array(); R8 = new Array(); Y8 = new Array(); B8 = new Array(); G8 = new Array(); ground = new Array(R0, Y0, B0, G0, R4, Y4, B4, G4, R6, Y6, B6, G6, R8, Y8, B8, G8); super(); } }
Section 96
//Nothingstage1 (Element.Nothingstage1) package Element { import flash.display.*; import flash.geom.*; import UserdefinedClass.*; import Gamestage.*; public class Nothingstage1 extends MovieClip { public var phyworld:Box2dFactory; public var box:MovieClip; public var mainobj:Gamestage1; public function Nothingstage1(obj:Object){ super(); phyworld = Box2dFactory.getInstance(); mainobj = (obj as Gamestage1); makebox(); } public function setspeed(mcobj:MovieClip):Point{ var Px:int; var Py:int; if (HitTest.complexHitTestObject(box.left, mcobj)){ Px = 2; }; if (HitTest.complexHitTestObject(box.right, mcobj)){ Px = -2; }; return (new Point(Px, Py)); } public function makebox():void{ box = new Boxstage1(); mainobj.background.addChild(box); phyworld.addToWorld((x / 30), (y / 30), this.rotation, 20, 0, 0, box, false, "rim"); } } }//package Element
Section 97
//Nothingstage4 (Element.Nothingstage4) package Element { import flash.display.*; import UserdefinedClass.*; import Gamestage.*; public class Nothingstage4 extends MovieClip { public var phyworld:Box2dFactory; public var box:MovieClip; public var mainobj:Gamestage4; public function Nothingstage4(obj:Object){ super(); phyworld = Box2dFactory.getInstance(); mainobj = (obj as Gamestage4); makebox(); } public function makebox():void{ box = new Boxstage4(); mainobj.background.addChild(box); phyworld.addToWorld((x / 30), (y / 30), this.rotation, 100, 0, 0, box, false, "rim"); } } }//package Element
Section 98
//Nothingstage5 (Element.Nothingstage5) package Element { import flash.display.*; import UserdefinedClass.*; import Gamestage.*; public class Nothingstage5 extends MovieClip { public var phyworld:Box2dFactory; public var box:MovieClip; public var mainobj:Gamestage5; public function Nothingstage5(obj:Object){ super(); phyworld = Box2dFactory.getInstance(); mainobj = (obj as Gamestage5); makebox(); } public function makebox():void{ box = new Boxstage5(); mainobj.background.addChild(box); phyworld.addToWorld((x / 30), (y / 30), this.rotation, 100, 0, 0, box, false, "rim"); } } }//package Element
Section 99
//Rotundity (Element.Rotundity) package Element { import flash.display.*; import UserdefinedClass.*; import BaseClass.*; import flash.utils.*; public class Rotundity extends BaseSquare { public function Rotundity(x:Number, y:Number, _kind:String){ super(); MyData.getInstance().Faceobj[_kind].push(this); kind = _kind; var faceclass:* = getDefinitionByName(kind); face = (new (faceclass) as MovieClip); addChild(face); Box2dFactory.getInstance().createRound(x, y, R, 0, this); } } }//package Element
Section 100
//Six (Element.Six) package Element { import flash.display.*; import UserdefinedClass.*; import BaseClass.*; import flash.utils.*; public class Six extends BaseSquare { public function Six(x:Number, y:Number, _kind:String){ super(); MyData.getInstance().Faceobj[_kind].push(this); kind = _kind; var faceclass:* = getDefinitionByName(kind); face = (new (faceclass) as MovieClip); addChild(face); Box2dFactory.getInstance().createBody(x, y, 6, R, 0, this); } } }//package Element
Section 101
//2_64 (FaceTouch_fla.2_64) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class 2_64 extends MovieClip { public function 2_64(){ addFrameScript(29, frame30); } function frame30(){ stop(); } } }//package FaceTouch_fla
Section 102
//blik_17 (FaceTouch_fla.blik_17) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class blik_17 extends MovieClip { public function blik_17(){ addFrameScript(36, frame37); } function frame37(){ stop(); } } }//package FaceTouch_fla
Section 103
//combo_139 (FaceTouch_fla.combo_139) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class combo_139 extends MovieClip { public function combo_139(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 104
//f_161 (FaceTouch_fla.f_161) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class f_161 extends MovieClip { public var aa:MovieClip; public function f_161(){ addFrameScript(0, frame1, 1, frame2, 13, frame14, 26, frame27, 39, frame40, 52, frame53); } function frame27(){ this.aa.aa.gotoAndStop((int((Math.random() * 4)) + 1)); } function frame1(){ this.aa.gotoAndStop((int((Math.random() * 16)) + 1)); } function frame2(){ this.aa.aa.gotoAndStop((int((Math.random() * 4)) + 1)); } function frame14(){ this.aa.aa.gotoAndStop((int((Math.random() * 4)) + 1)); } function frame40(){ this.aa.aa.gotoAndStop((int((Math.random() * 4)) + 1)); } function frame53(){ this.aa.aa.gotoAndStop((int((Math.random() * 4)) + 1)); } } }//package FaceTouch_fla
Section 105
//f_162 (FaceTouch_fla.f_162) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class f_162 extends MovieClip { public var aa:MovieClip; public function f_162(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 106
//f_163 (FaceTouch_fla.f_163) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class f_163 extends MovieClip { public function f_163(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package FaceTouch_fla
Section 107
//f_169 (FaceTouch_fla.f_169) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class f_169 extends MovieClip { public function f_169(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package FaceTouch_fla
Section 108
//f_174 (FaceTouch_fla.f_174) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class f_174 extends MovieClip { public function f_174(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package FaceTouch_fla
Section 109
//f_179 (FaceTouch_fla.f_179) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class f_179 extends MovieClip { public function f_179(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package FaceTouch_fla
Section 110
//f_184 (FaceTouch_fla.f_184) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class f_184 extends MovieClip { public function f_184(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package FaceTouch_fla
Section 111
//f_189 (FaceTouch_fla.f_189) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class f_189 extends MovieClip { public function f_189(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package FaceTouch_fla
Section 112
//f_194 (FaceTouch_fla.f_194) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class f_194 extends MovieClip { public function f_194(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package FaceTouch_fla
Section 113
//f_199 (FaceTouch_fla.f_199) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class f_199 extends MovieClip { public function f_199(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package FaceTouch_fla
Section 114
//f_204 (FaceTouch_fla.f_204) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class f_204 extends MovieClip { public function f_204(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package FaceTouch_fla
Section 115
//f_209 (FaceTouch_fla.f_209) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class f_209 extends MovieClip { public function f_209(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package FaceTouch_fla
Section 116
//f_214 (FaceTouch_fla.f_214) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class f_214 extends MovieClip { public function f_214(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package FaceTouch_fla
Section 117
//f_219 (FaceTouch_fla.f_219) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class f_219 extends MovieClip { public function f_219(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package FaceTouch_fla
Section 118
//f_224 (FaceTouch_fla.f_224) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class f_224 extends MovieClip { public function f_224(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package FaceTouch_fla
Section 119
//f_229 (FaceTouch_fla.f_229) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class f_229 extends MovieClip { public function f_229(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package FaceTouch_fla
Section 120
//f_234 (FaceTouch_fla.f_234) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class f_234 extends MovieClip { public function f_234(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package FaceTouch_fla
Section 121
//f_239 (FaceTouch_fla.f_239) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class f_239 extends MovieClip { public function f_239(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package FaceTouch_fla
Section 122
//flag_11 (FaceTouch_fla.flag_11) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class flag_11 extends MovieClip { public var color:Number; public var flag_mc:MovieClip; public var mode:String; public var mapBitmap:BitmapData; public var _scaleX:Number; public var _scaleY:Number; public var mapPoint:Point; public var componentX:Number; public var componentY:Number; public var _alpha:Number; public function flag_11(){ addFrameScript(0, frame1); } public function EnterFrame(event:Event){ var filter:DisplacementMapFilter = new DisplacementMapFilter(mapBitmap, mapPoint, componentX, componentY, _scaleX, _scaleY, mode, color, _alpha); flag_mc.filters = new Array(filter); mapPoint.x = (mapPoint.x + 2); if (mapPoint.x > 0){ mapPoint.x = -2185; }; } function frame1(){ mapBitmap = new BitmapData(2500, 300, true); mapBitmap.perlinNoise(60, 60, 2, 10, true, true, 1); mapPoint = new Point(-2457, -30); componentX = 1; componentY = 1; _scaleX = 10; _scaleY = 5; mode = "color"; color = 0; _alpha = 0; this.addEventListener(Event.ENTER_FRAME, EnterFrame); } } }//package FaceTouch_fla
Section 123
//J_154 (FaceTouch_fla.J_154) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class J_154 extends MovieClip { public function J_154(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 124
//logo_13 (FaceTouch_fla.logo_13) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class logo_13 extends MovieClip { public function logo_13(){ addFrameScript(123, frame124); } function frame124(){ stop(); } } }//package FaceTouch_fla
Section 125
//MainTimeline (FaceTouch_fla.MainTimeline) package FaceTouch_fla { import flash.display.*; import flash.events.*; import flash.geom.*; import flash.media.*; import flash.utils.*; import flash.text.*; import flash.net.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.system.*; import flash.ui.*; public dynamic class MainTimeline extends MovieClip { public var bar:MovieClip; public var barbot:MovieClip; public var splash:MovieClip; public function MainTimeline(){ addFrameScript(0, frame1, 1, frame2, 2, frame3); } function frame2(){ stop(); } public function onenterframe(e:Event=null){ var loaded:Number = 0; if (loaderInfo){ loaded = (loaderInfo.bytesLoaded / loaderInfo.bytesTotal); }; if (bar){ bar.scaleX = loaded; }; if (loaded == 1){ if (barbot.parent){ barbot.parent.removeChild(barbot); }; if (bar.parent){ bar.parent.removeChild(bar); }; removeEventListener(Event.ENTER_FRAME, onenterframe); this.gotoAndStop(2); }; } function frame1(){ stop(); addEventListener(Event.ENTER_FRAME, onenterframe); stage.quality = "medium"; } function frame3(){ SoundMixer.stopAll(); stop(); stage.frameRate = 30; trace(stage.numChildren); addChild(new Main()); } } }//package FaceTouch_fla
Section 126
//splash_clouds_3 (FaceTouch_fla.splash_clouds_3) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class splash_clouds_3 extends MovieClip { public var loadtime:Timer; public var logo:MovieClip; public function splash_clouds_3(){ addFrameScript(0, frame1, 125, frame126); } function frame1(){ this.addEventListener(MouseEvent.MOUSE_DOWN, onmousedown); } public function onmousedown(e:MouseEvent){ navigateToURL(new URLRequest("http://twotowersgames.com/eredir/bP6TgHeml5Ik"), "_blank"); } public function onclear(e:TimerEvent){ removeEventListener(MouseEvent.MOUSE_DOWN, onmousedown); this.parent.gotoAndStop("playgame"); loadtime.stop(); loadtime.removeEventListener(TimerEvent.TIMER, onclear); } function frame126(){ stop(); loadtime = new Timer(4000, 1); loadtime.addEventListener(TimerEvent.TIMER, onclear); loadtime.start(); } } }//package FaceTouch_fla
Section 127
//stars_18 (FaceTouch_fla.stars_18) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class stars_18 extends MovieClip { public function stars_18(){ addFrameScript(60, frame61); } function frame61(){ stop(); } } }//package FaceTouch_fla
Section 128
//Timeline_102 (FaceTouch_fla.Timeline_102) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_102 extends MovieClip { public function Timeline_102(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 129
//Timeline_103 (FaceTouch_fla.Timeline_103) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_103 extends MovieClip { public function Timeline_103(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 130
//Timeline_104 (FaceTouch_fla.Timeline_104) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_104 extends MovieClip { public function Timeline_104(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 131
//Timeline_106 (FaceTouch_fla.Timeline_106) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_106 extends MovieClip { public function Timeline_106(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 132
//Timeline_107 (FaceTouch_fla.Timeline_107) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_107 extends MovieClip { public function Timeline_107(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 133
//Timeline_108 (FaceTouch_fla.Timeline_108) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_108 extends MovieClip { public function Timeline_108(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 134
//Timeline_110 (FaceTouch_fla.Timeline_110) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_110 extends MovieClip { public function Timeline_110(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 135
//Timeline_111 (FaceTouch_fla.Timeline_111) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_111 extends MovieClip { public function Timeline_111(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 136
//Timeline_112 (FaceTouch_fla.Timeline_112) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_112 extends MovieClip { public function Timeline_112(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 137
//Timeline_114 (FaceTouch_fla.Timeline_114) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_114 extends MovieClip { public function Timeline_114(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 138
//Timeline_115 (FaceTouch_fla.Timeline_115) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_115 extends MovieClip { public function Timeline_115(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 139
//Timeline_116 (FaceTouch_fla.Timeline_116) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_116 extends MovieClip { public function Timeline_116(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 140
//Timeline_118 (FaceTouch_fla.Timeline_118) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_118 extends MovieClip { public function Timeline_118(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 141
//Timeline_119 (FaceTouch_fla.Timeline_119) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_119 extends MovieClip { public function Timeline_119(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 142
//Timeline_120 (FaceTouch_fla.Timeline_120) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_120 extends MovieClip { public function Timeline_120(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 143
//Timeline_122 (FaceTouch_fla.Timeline_122) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_122 extends MovieClip { public function Timeline_122(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 144
//Timeline_123 (FaceTouch_fla.Timeline_123) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_123 extends MovieClip { public function Timeline_123(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 145
//Timeline_124 (FaceTouch_fla.Timeline_124) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_124 extends MovieClip { public function Timeline_124(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 146
//Timeline_126 (FaceTouch_fla.Timeline_126) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_126 extends MovieClip { public function Timeline_126(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 147
//Timeline_127 (FaceTouch_fla.Timeline_127) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_127 extends MovieClip { public function Timeline_127(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 148
//Timeline_128 (FaceTouch_fla.Timeline_128) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_128 extends MovieClip { public function Timeline_128(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 149
//Timeline_130 (FaceTouch_fla.Timeline_130) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_130 extends MovieClip { public function Timeline_130(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 150
//Timeline_131 (FaceTouch_fla.Timeline_131) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_131 extends MovieClip { public function Timeline_131(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 151
//Timeline_132 (FaceTouch_fla.Timeline_132) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_132 extends MovieClip { public function Timeline_132(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 152
//Timeline_134 (FaceTouch_fla.Timeline_134) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_134 extends MovieClip { public function Timeline_134(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 153
//Timeline_135 (FaceTouch_fla.Timeline_135) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_135 extends MovieClip { public function Timeline_135(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 154
//Timeline_136 (FaceTouch_fla.Timeline_136) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_136 extends MovieClip { public function Timeline_136(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 155
//Timeline_143 (FaceTouch_fla.Timeline_143) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_143 extends MovieClip { public function Timeline_143(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 156
//Timeline_147 (FaceTouch_fla.Timeline_147) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_147 extends MovieClip { public function Timeline_147(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 157
//Timeline_25 (FaceTouch_fla.Timeline_25) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_25 extends MovieClip { public function Timeline_25(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 158
//Timeline_267 (FaceTouch_fla.Timeline_267) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_267 extends MovieClip { public function Timeline_267(){ addFrameScript(0, frame1, 36, frame37); } function frame37(){ stop(); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 159
//Timeline_27 (FaceTouch_fla.Timeline_27) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_27 extends MovieClip { public function Timeline_27(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 160
//Timeline_28 (FaceTouch_fla.Timeline_28) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_28 extends MovieClip { public function Timeline_28(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 161
//Timeline_30 (FaceTouch_fla.Timeline_30) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_30 extends MovieClip { public function Timeline_30(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 162
//Timeline_32 (FaceTouch_fla.Timeline_32) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_32 extends MovieClip { public function Timeline_32(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 163
//Timeline_33 (FaceTouch_fla.Timeline_33) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_33 extends MovieClip { public function Timeline_33(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 164
//Timeline_37 (FaceTouch_fla.Timeline_37) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_37 extends MovieClip { public function Timeline_37(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 165
//Timeline_39 (FaceTouch_fla.Timeline_39) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_39 extends MovieClip { public function Timeline_39(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 166
//Timeline_40 (FaceTouch_fla.Timeline_40) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_40 extends MovieClip { public function Timeline_40(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 167
//Timeline_41 (FaceTouch_fla.Timeline_41) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_41 extends MovieClip { public function Timeline_41(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 168
//Timeline_47 (FaceTouch_fla.Timeline_47) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_47 extends MovieClip { public function Timeline_47(){ addFrameScript(0, frame1); } function frame1(){ } } }//package FaceTouch_fla
Section 169
//Timeline_80 (FaceTouch_fla.Timeline_80) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_80 extends MovieClip { public function Timeline_80(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 170
//Timeline_81 (FaceTouch_fla.Timeline_81) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_81 extends MovieClip { public function Timeline_81(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 171
//Timeline_82 (FaceTouch_fla.Timeline_82) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_82 extends MovieClip { public function Timeline_82(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 172
//Timeline_84 (FaceTouch_fla.Timeline_84) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_84 extends MovieClip { public function Timeline_84(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 173
//Timeline_85 (FaceTouch_fla.Timeline_85) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_85 extends MovieClip { public function Timeline_85(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 174
//Timeline_86 (FaceTouch_fla.Timeline_86) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_86 extends MovieClip { public function Timeline_86(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 175
//Timeline_88 (FaceTouch_fla.Timeline_88) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_88 extends MovieClip { public function Timeline_88(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 176
//Timeline_89 (FaceTouch_fla.Timeline_89) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_89 extends MovieClip { public function Timeline_89(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 177
//Timeline_90 (FaceTouch_fla.Timeline_90) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_90 extends MovieClip { public function Timeline_90(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 178
//Timeline_92 (FaceTouch_fla.Timeline_92) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_92 extends MovieClip { public function Timeline_92(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 179
//Timeline_93 (FaceTouch_fla.Timeline_93) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_93 extends MovieClip { public function Timeline_93(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 180
//Timeline_94 (FaceTouch_fla.Timeline_94) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_94 extends MovieClip { public function Timeline_94(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 181
//Timeline_97 (FaceTouch_fla.Timeline_97) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_97 extends MovieClip { public function Timeline_97(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 182
//Timeline_98 (FaceTouch_fla.Timeline_98) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_98 extends MovieClip { public function Timeline_98(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 183
//Timeline_99 (FaceTouch_fla.Timeline_99) package FaceTouch_fla { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Timeline_99 extends MovieClip { public function Timeline_99(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package FaceTouch_fla
Section 184
//Gamestage1 (Gamestage.Gamestage1) package Gamestage { import Element.*; import flash.display.*; import flash.events.*; import flash.geom.*; import UserdefinedClass.*; import BaseClass.*; public class Gamestage1 extends BaseStage { public var backmc:MovieClip; public function Gamestage1(mainobj:Object){ super(mainobj); sqspace = new Array([135, -82], [183, -82], [183, -30], [572, -82], [572, -30], [616, -82]); gametime = new MyTime(MyData.getInstance().gamedata1.gametime, setTime, gameover); allowsq = 40; main.setTime(MyData.getInstance().gamedata1.gametime); Main.bgm1_sd.playsound(1000000, 0.5); } override public function loaddata(){ passscore = MyData.getInstance().gamedata1.passscore[lv]; sqnum = MyData.getInstance().gamedata1.sqnum[lv]; spaceT = MyData.getInstance().gamedata1.spaceT[lv]; } override public function inititem(){ Box2dFactory.getInstance().world.SetContactFilter(new MyContactFilter()); backmc = new Nothingstage1(this); } override public function onhit(e:MouseEvent):void{ Box2dFactory.getInstance().mouseControlBody(stage, resquare(), mouseeffect); } override public function gameenterframe(e:Event):void{ var len:int; var temparr:Array = new Array(); var j:int; var i:int; while (i < 16) { temparr = ergodHit(MyData.getInstance().Faceobj.ground[i]); len = temparr.length; if (len){ j = 0; while (j < len) { (temparr[j] as BaseSquare).Die(burst); j++; }; score = (score + gradescore(len)); main.setScore(score); setcombo(); }; i++; }; count++; if ((count % spaceT) == 0){ count = 0; buildsquare(); }; starthitcount(); sqhitfan(); removeMouseMC(); if (score >= passscore){ lvup(); }; } override public function buildsquare(){ var _sqnum:int; var totalsq:int = squarenum(); if (totalsq == allowsq){ return; }; if ((totalsq + sqnum) <= allowsq){ _sqnum = sqnum; } else { _sqnum = (allowsq - totalsq); }; var temparr:Array = MyMath.ranRangeground(0, 5, _sqnum); var len:int = temparr.length; var i:int; while (i < len) { newsquare(square, sqspace[temparr[i]][0], sqspace[temparr[i]][1], 1, MyMath.randRange(3)); i++; }; } public function sqhitfan(){ var tempmc:BaseSquare; var len:int = square.numChildren; var p:Point = new Point(); var i:int; while (i < len) { tempmc = (square.getChildAt(i) as BaseSquare); p = backmc.setspeed(tempmc); tempmc.addForce(p.x, p.y); i++; }; } } }//package Gamestage
Section 185
//Gamestage2 (Gamestage.Gamestage2) package Gamestage { import Element.*; import flash.display.*; import flash.events.*; import flash.geom.*; import UserdefinedClass.*; import BaseClass.*; public class Gamestage2 extends BaseStage { public var backmc:MovieClip; public function Gamestage2(mainobj:Object){ super(mainobj); sqspace = new Array([309, -37], [379, -37], [450, -37], [309, 14], [379, -37], [450, -37]); gametime = new MyTime(MyData.getInstance().gamedata2.gametime, setTime, gameover); allowsq = 35; main.setTime(MyData.getInstance().gamedata2.gametime); Main.bgm1_sd.playsound(1000000, 0.5); } override public function loaddata(){ passscore = MyData.getInstance().gamedata2.passscore[lv]; sqnum = MyData.getInstance().gamedata2.sqnum[lv]; spaceT = MyData.getInstance().gamedata2.spaceT[lv]; } override public function inititem(){ Box2dFactory.getInstance().world.SetContactFilter(new MyContactFilter()); backmc = new Fanstage2(this); } override public function onhit(e:MouseEvent):void{ Box2dFactory.getInstance().mouseControlBody(stage, resquare(), mouseeffect); } override public function gameenterframe(e:Event):void{ var len:int; var temparr:Array = new Array(); var j:int; var i:int; while (i < 16) { temparr = ergodHit(MyData.getInstance().Faceobj.ground[i]); len = temparr.length; if (len){ j = 0; while (j < len) { (temparr[j] as BaseSquare).Die(burst); j++; }; score = (score + gradescore(len)); main.setScore(score); setcombo(); }; i++; }; count++; if ((count % spaceT) == 0){ count = 0; buildsquare(); }; starthitcount(); sqhitfan(); removeMouseMC(); if (score >= passscore){ lvup(); }; } override public function buildsquare(){ var _sqnum:int; (backmc as Fanstage2).setRlight(); var totalsq:int = squarenum(); if (totalsq == allowsq){ return; }; if ((totalsq + sqnum) <= allowsq){ _sqnum = sqnum; } else { _sqnum = (allowsq - totalsq); }; var temparr:Array = MyMath.ranRangeground(0, 5, _sqnum); var len:int = temparr.length; var i:int; while (i < len) { newsquare(square, sqspace[temparr[i]][0], sqspace[temparr[i]][1], 1, MyMath.randRange(3)); i++; }; (backmc as Fanstage2).setGlight(); } public function sqhitfan(){ var tempmc:BaseSquare; var len:int = square.numChildren; var p:Point = new Point(); var i:int; while (i < len) { tempmc = (square.getChildAt(i) as BaseSquare); p = backmc.setspeed(tempmc); tempmc.addForce(p.x, p.y); i++; }; } } }//package Gamestage
Section 186
//Gamestage3 (Gamestage.Gamestage3) package Gamestage { import Element.*; import flash.display.*; import flash.events.*; import flash.geom.*; import UserdefinedClass.*; import BaseClass.*; public class Gamestage3 extends BaseStage { public var backmc:MovieClip; public function Gamestage3(mainobj:Object){ super(mainobj); sqspace = new Array([236, 26], [279, -7], [236, -40], [279, -82], [495, 26], [538, -7], [495, 7], [538, -40]); gametime = new MyTime(MyData.getInstance().gamedata3.gametime, setTime, gameover); allowsq = 35; main.setTime(MyData.getInstance().gamedata3.gametime); Main.bgm2_sd.playsound(1000000, 0.5); } override public function loaddata(){ passscore = MyData.getInstance().gamedata2.passscore[lv]; sqnum = MyData.getInstance().gamedata2.sqnum[lv]; spaceT = MyData.getInstance().gamedata2.spaceT[lv]; } override public function inititem(){ Box2dFactory.getInstance().world.SetContactFilter(new MyContactFilter()); backmc = new Fanstage3(this); } override public function onhit(e:MouseEvent):void{ Box2dFactory.getInstance().mouseControlBody(stage, resquare(), mouseeffect); } override public function gameenterframe(e:Event):void{ var len:int; var temparr:Array = new Array(); var j:int; var i:int; while (i < 16) { temparr = ergodHit(MyData.getInstance().Faceobj.ground[i]); len = temparr.length; if (len){ j = 0; while (j < len) { (temparr[j] as BaseSquare).Die(burst); j++; }; score = (score + gradescore(len)); main.setScore(score); setcombo(); }; i++; }; count++; if ((count % spaceT) == 0){ count = 0; buildsquare(); }; starthitcount(); sqhitfan(); removeMouseMC(); if (score >= passscore){ lvup(); }; } override public function buildsquare(){ var _sqnum:int; var totalsq:int = squarenum(); if (totalsq == allowsq){ return; }; if ((totalsq + sqnum) <= allowsq){ _sqnum = sqnum; } else { _sqnum = (allowsq - totalsq); }; var temparr:Array = MyMath.ranRangeground(0, 7, _sqnum); var len:int = temparr.length; var i:int; while (i < len) { newsquare(square, sqspace[temparr[i]][0], sqspace[temparr[i]][1], 1, MyMath.randRange(3)); i++; }; } public function sqhitfan(){ var tempmc:BaseSquare; var len:int = square.numChildren; var p:Point = new Point(); var i:int; while (i < len) { tempmc = (square.getChildAt(i) as BaseSquare); p = backmc.setspeed(tempmc); tempmc.addForce(p.x, p.y); i++; }; } } }//package Gamestage
Section 187
//Gamestage4 (Gamestage.Gamestage4) package Gamestage { import Element.*; import flash.display.*; import flash.events.*; import UserdefinedClass.*; import BaseClass.*; public class Gamestage4 extends BaseStage { public var backmc:MovieClip; public function Gamestage4(mainobj:Object){ super(mainobj); sqspace = new Array([135, -82], [183, -82], [183, -30], [572, -82], [572, -30], [616, -82]); gametime = new MyTime(MyData.getInstance().gamedata4.gametime, setTime, gameover); allowsq = 35; main.setTime(MyData.getInstance().gamedata4.gametime); Main.bgm2_sd.playsound(1000000, 0.5); } override public function loaddata(){ passscore = MyData.getInstance().gamedata4.passscore[lv]; sqnum = MyData.getInstance().gamedata4.sqnum[lv]; spaceT = MyData.getInstance().gamedata4.spaceT[lv]; } override public function inititem(){ Box2dFactory.getInstance().world.SetContactFilter(new MyContactFilter()); backmc = new Nothingstage4(this); } override public function onhit(e:MouseEvent):void{ Box2dFactory.getInstance().mouseControlBody(stage, resquare(), mouseeffect); } override public function buildsquare(){ var _sqnum:int; var totalsq:int = squarenum(); if (totalsq == allowsq){ return; }; if ((totalsq + sqnum) <= allowsq){ _sqnum = sqnum; } else { _sqnum = (allowsq - totalsq); }; var temparr:Array = MyMath.ranRangeground(0, 5, _sqnum); var len:int = temparr.length; var i:int; while (i < len) { newsquare(square, sqspace[temparr[i]][0], sqspace[temparr[i]][1], 0, MyMath.randRange(3)); i++; }; } } }//package Gamestage
Section 188
//Gamestage5 (Gamestage.Gamestage5) package Gamestage { import Element.*; import flash.display.*; import flash.events.*; import UserdefinedClass.*; import BaseClass.*; public class Gamestage5 extends BaseStage { public var backmc:MovieClip; public function Gamestage5(mainobj:Object){ super(mainobj); sqspace = new Array([135, -82], [183, -82], [183, -30], [572, -82], [572, -30], [616, -82]); gametime = new MyTime(MyData.getInstance().gamedata5.gametime, setTime, gameover); allowsq = 35; main.setTime(MyData.getInstance().gamedata5.gametime); Main.bgm3_sd.playsound(1000000, 0.5); } override public function loaddata(){ passscore = MyData.getInstance().gamedata5.passscore[lv]; sqnum = MyData.getInstance().gamedata5.sqnum[lv]; spaceT = MyData.getInstance().gamedata5.spaceT[lv]; } override public function inititem(){ Box2dFactory.getInstance().world.SetContactFilter(new MyContactFilter()); backmc = new Nothingstage5(this); } override public function onhit(e:MouseEvent):void{ Box2dFactory.getInstance().mouseControlBody(stage, resquare(), mouseeffect); } override public function buildsquare(){ var _sqnum:int; var totalsq:int = squarenum(); if (totalsq == allowsq){ return; }; if ((totalsq + sqnum) <= allowsq){ _sqnum = sqnum; } else { _sqnum = (allowsq - totalsq); }; var temparr:Array = MyMath.ranRangeground(0, 5, _sqnum); var len:int = temparr.length; var i:int; while (i < len) { newsquare(square, sqspace[temparr[i]][0], sqspace[temparr[i]][1], 3, MyMath.randRange(3)); i++; }; } } }//package Gamestage
Section 189
//Gamestage6 (Gamestage.Gamestage6) package Gamestage { import Element.*; import flash.display.*; import flash.events.*; import caurina.transitions.*; import UserdefinedClass.*; import BaseClass.*; public class Gamestage6 extends BaseStage { public var backmc:MovieClip; public var sqway:Array; public function Gamestage6(mainobj:Object){ super(mainobj); sqspace = new Array([384, 213], [407, 253], [375, 288], [326.5, 279], [313, 239], [342, 212]); sqway = new Array([-20, -20], [-20, -10], [-20, 0], [-20, 0], [-20, -10], [-20, -20]); gametime = new MyTime(MyData.getInstance().gamedata6.gametime, setTime, gameover); allowsq = 25; main.setTime(MyData.getInstance().gamedata6.gametime); Main.bgm3_sd.playsound(1000000, 0.5); } override public function restartgame(){ backmc.restart(); restartallSq(); addEventListener(Event.ENTER_FRAME, updata); addEventListener(MouseEvent.MOUSE_DOWN, onhit); addEventListener(Event.ENTER_FRAME, gameenterframe); gametime.restart(); } override public function inititem(){ Box2dFactory.getInstance().world.SetContactFilter(new MyContactFilter()); backmc = new Hexagon(this); backmc.stopAll(); } override public function buildsquare(){ var _sqnum:int; var sq:BaseSquare; var totalsq:int = squarenum(); if (totalsq == allowsq){ return; }; if ((totalsq + sqnum) <= allowsq){ _sqnum = sqnum; } else { _sqnum = (allowsq - totalsq); }; var temparr:Array = MyMath.ranRangeground(0, 5, _sqnum); var len:int = temparr.length; var i:int; while (i < len) { sq = newsquare(square, sqspace[temparr[i]][0], sqspace[temparr[i]][1], 2, MyMath.randRange(3)); sq.addForce(sqway[i][0], sqway[i][1]); i++; }; } override public function destory(){ stopallSq(); (backmc as Hexagon).destory(); stopgame(); Box2dFactory.getInstance().clear(); gametime.removetime(); removeAllChildren(background); removeAllChildren(standby1); removeAllChildren(standby2); removeAllChildren(square); removeAllChildren(burst); removeAllChildren(mouseeffect); removeAllChildren(hit); removeAllChildren(game); removeAllChildren(this); Tweener.removeAllTweens(); } private function onkeydown1(e:KeyboardEvent):void{ backmc.resetmotop(); } override public function loaddata(){ passscore = MyData.getInstance().gamedata6.passscore[lv]; sqnum = MyData.getInstance().gamedata6.sqnum[lv]; spaceT = MyData.getInstance().gamedata6.spaceT[lv]; } override public function onhit(e:MouseEvent):void{ Box2dFactory.getInstance().mouseControlBody(stage, resquare(), mouseeffect); } private function onkeyup1(e:KeyboardEvent):void{ backmc.stopmotor(); } override public function stopgame(){ backmc.stopAll(); stopallSq(); removeEventListener(Event.ENTER_FRAME, updata); removeEventListener(MouseEvent.MOUSE_DOWN, onhit); removeEventListener(Event.ENTER_FRAME, gameenterframe); gametime.pausetime(); } override public function win():void{ main.setScore(score); stopgame(); removesq(); main.showEnd(score, gametime.count); } override public function startlistener(){ backmc.restart(); addEventListener(Event.ENTER_FRAME, updata); addEventListener(MouseEvent.MOUSE_DOWN, onhit); addEventListener(Event.ENTER_FRAME, gameenterframe); gametime.starttime(); } } }//package Gamestage
Section 190
//BaseSound (UserdefinedClass.BaseSound) package UserdefinedClass { import flash.media.*; import flash.utils.*; public class BaseSound { public var sd:Sound; public var sdChannel:SoundChannel; public var sdTransform:SoundTransform; public function BaseSound(soundclassname:String){ super(); var soundclass:Object = getDefinitionByName(soundclassname); sd = (new (soundclass) as Sound); } public function playsound(loop:int, volume:Number=1){ sdTransform = new SoundTransform(); sdTransform.volume = volume; sdChannel = new SoundChannel(); sdChannel = sd.play(0, loop, sdTransform); } public function stopSound(){ sdChannel.stop(); } } }//package UserdefinedClass
Section 191
//Box2dFactory (UserdefinedClass.Box2dFactory) package UserdefinedClass { import flash.display.*; import flash.events.*; import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Collision.*; import Box2D.Collision.Shapes.*; import Box2D.Dynamics.Joints.*; import BaseClass.*; public class Box2dFactory { public var mousecount:int;// = 0 public var mX:Number; public var mY:Number; private var _world:b2World; public var _density:Number;// = 5 public var _restitution:Number;// = 0.5 public var mousesp:Sprite; private var _useMouseJoint:Boolean;// = false public var _friction:Number;// = 100 private var mouse_MaxForce:int;// = 1500 private var mouseJoint:b2MouseJoint; public var tempmc:MovieClip; public var fourangle:Number; private var _stage:Stage; public static const PHYSCALE:Number = 30; public static const STEP:Number = 0.0666666666666667; public static const ITERATION:int = 10; private static var _instance:Box2dFactory; public function Box2dFactory(){ super(); } public function createMouse(evt:MouseEvent):void{ var mouseJointDef:b2MouseJointDef; var body:b2Body = (tempmc.bd as b2Body); if (body){ if ((tempmc as BaseSquare).state != "die"){ (tempmc as BaseSquare).Move(); }; mouseJointDef = new b2MouseJointDef(); mouseJointDef.body1 = world.GetGroundBody(); mouseJointDef.body2 = body; mouseJointDef.target.Set((_stage.mouseX / 30), (_stage.mouseY / 30)); mouseJointDef.maxForce = mouse_MaxForce; mouseJointDef.timeStep = STEP; mouseJoint = (world.CreateJoint(mouseJointDef) as b2MouseJoint); }; } public function get world():b2World{ return (_world); } public function onbuildmouse(e:Event):void{ if (((!((mX == tempmc.x))) || (!((mY == tempmc.y))))){ mX = tempmc.x; mY = tempmc.y; mousecount++; }; var color:Number = (tempmc as BaseSquare).corlorarr[(tempmc as BaseSquare).color]; var temp:MovieClip = new MovieClip(); temp.x = mX; temp.y = mY; temp.graphics.beginFill(color); var wei = 25; temp.graphics.drawRect((-(wei) * 0.5), (-(wei) * 0.5), wei, wei); var filters_temp:Array = new Array(); temp.time = 1; mousesp.addChild(temp); } public function GetBodyAtMouse(includeStatic:Boolean=false):b2Body{ var tShape:b2Shape; var inside:Boolean; var mouseXWorldPhys:Number = (_stage.mouseX / PHYSCALE); var mouseYWorldPhys:Number = (_stage.mouseY / PHYSCALE); var vec:b2Vec2 = new b2Vec2(mouseXWorldPhys, mouseYWorldPhys); var aabb:b2AABB = new b2AABB(); aabb.lowerBound.Set((mouseXWorldPhys - 0.001), (mouseYWorldPhys - 0.001)); aabb.upperBound.Set((mouseXWorldPhys + 0.001), (mouseYWorldPhys + 0.001)); var k_maxCount = 10; var shapes:Array = new Array(); var count:int = world.Query(aabb, shapes, k_maxCount); var body:b2Body; var i:int; while (i < count) { if ((((shapes[i].GetBody().IsStatic() == false)) || (includeStatic))){ tShape = (shapes[i] as b2Shape); inside = tShape.TestPoint(tShape.GetBody().GetXForm(), vec); if (inside){ body = tShape.GetBody(); break; }; }; i++; }; return (body); } public function getBody():b2Body{ var temp:b2Body; var b:b2Body = world.GetBodyList(); while (b) { if (b.m_userData){ if (b.m_userData.element){ if ((b.m_userData.element is BaseSquare)){ if (b.m_userData.element.name == tempmc.name){ temp = b; break; }; }; }; }; b = b.GetNext(); }; return (temp); } public function createRevoluteJoint(body1:b2Body, body2:b2Body, anchor:b2Vec2, enableLimit:Boolean=false, lowerAngle:Number=0, upperAngle:Number=0, enableMotor:Boolean=false, motorSpeed:Number=0, maxMotorTorque:Number=0):b2Joint{ var revoluteJointDef:b2RevoluteJointDef = new b2RevoluteJointDef(); revoluteJointDef.Initialize(body1, body2, anchor); revoluteJointDef.enableLimit = enableLimit; revoluteJointDef.lowerAngle = lowerAngle; revoluteJointDef.upperAngle = upperAngle; revoluteJointDef.enableMotor = enableMotor; revoluteJointDef.motorSpeed = motorSpeed; revoluteJointDef.maxMotorTorque = maxMotorTorque; return (world.CreateJoint(revoluteJointDef)); } public function makeBodyByYuanInside(x, y, targetSprite, density=1, friction=1, restitution=1, bullet:Boolean=false, type:String="none"):b2Body{ var _b2BodyDef:b2BodyDef; var _b2Body:b2Body; var _b2CircleDef:b2CircleDef; var tem:Number; var _loc_10:* = undefined; _b2BodyDef = new b2BodyDef(); _b2BodyDef.position.Set(x, y); _b2BodyDef.userData = new Object(); _b2BodyDef.userData.element = targetSprite; _b2BodyDef.userData.type = type; _b2BodyDef.isBullet = bullet; _b2Body = world.CreateBody(_b2BodyDef); targetSprite.bd = _b2Body; var i:int; while (i < targetSprite.numChildren) { _loc_10 = targetSprite.getChildAt(i); if (_loc_10.constructor == yuan){ _b2CircleDef = new b2CircleDef(); tem = _loc_10.rotation; _loc_10.rotation = 0; _b2CircleDef.radius = (_loc_10.width / 60); _loc_10.rotation = tem; _b2CircleDef.friction = friction; _b2CircleDef.density = density; _b2CircleDef.restitution = restitution; _b2Body.CreateShape(_b2CircleDef); }; i++; }; if (density != 0){ _b2Body.SetMassFromShapes(); }; return (_b2Body); } public function createGearJoint(b1:b2Body, b2:b2Body, j1:b2Joint, j2:b2Joint, rate:Number=1):b2Joint{ var gearJointDef:b2GearJointDef = new b2GearJointDef(); gearJointDef.body1 = b1; gearJointDef.body2 = b2; gearJointDef.joint1 = j1; gearJointDef.joint2 = j2; gearJointDef.ratio = rate; return (world.CreateJoint(gearJointDef)); } public function createPulleyJoint(b1:b2Body, b2:b2Body, groundAnchor1:b2Vec2, groundAnchor2:b2Vec2, anchor1:b2Vec2, anchor2:b2Vec2, rate:Number=1, maxLength1:Number=100, maxLength2:Number=100):b2Joint{ var pulleyJointDef:b2PulleyJointDef = new b2PulleyJointDef(); pulleyJointDef.Initialize(b1, b2, groundAnchor1, groundAnchor2, anchor1, anchor2, rate); pulleyJointDef.maxLength1 = maxLength1; pulleyJointDef.maxLength2 = maxLength2; return (world.CreateJoint(pulleyJointDef)); } public function mouseControlBody(sta:Stage, mcbd:MovieClip, sp:Sprite):void{ if (((!(sta)) || ((mcbd == null)))){ return; }; _stage = sta; mousesp = sp; tempmc = mcbd; tempmc.isMouse = true; _useMouseJoint = true; _stage.addEventListener(MouseEvent.MOUSE_DOWN, createMouse); _stage.addEventListener(MouseEvent.MOUSE_UP, destroyMouse); _stage.addEventListener(Event.ENTER_FRAME, onbuildmouse); mX = _stage.mouseX; mY = _stage.mouseY; } public function createBody(x:Number, y:Number, n:int, radius:Number, angle:Number, userdata, type:String="item", four:Boolean=true):b2Body{ if (four){ fourangle = 0; } else { fourangle = (Math.PI * 0.25); }; var shapeDef:b2PolygonDef = new b2PolygonDef(); setConvexVertex(shapeDef, n, radius); var bodydef:b2BodyDef = new b2BodyDef(); bodydef.angle = angle; bodydef.position.Set((x / PHYSCALE), (y / PHYSCALE)); bodydef.userData = new Object(); bodydef.userData.type = type; bodydef.userData.element = userdata; bodydef.isBullet = false; var body:b2Body = world.CreateBody(bodydef); userdata.bd = body; body.CreateShape(shapeDef); body.SetMassFromShapes(); return (body); } public function prismatiocJoint(param1, param2):b2Joint{ var prismaticJointDef:b2PrismaticJointDef = undefined; prismaticJointDef = new b2PrismaticJointDef(); prismaticJointDef.Initialize(param1.bd, param2.bd, param2.bd.GetWorldCenter(), new b2Vec2(0, 1)); prismaticJointDef.lowerTranslation = -0.3; prismaticJointDef.upperTranslation = 0.3; prismaticJointDef.maxMotorForce = 700; prismaticJointDef.motorSpeed = 1; prismaticJointDef.enableLimit = true; prismaticJointDef.enableMotor = true; return (world.CreateJoint(prismaticJointDef)); } public function updata():void{ world.Step(STEP, ITERATION); setuserdata(); setMouseJointTarget(); } public function destroyMouse(evt:MouseEvent=null):void{ if (mouseJoint){ if ((tempmc as BaseSquare).state != "die"){ (tempmc as BaseSquare).Normal(); tempmc.isMouse = false; }; world.DestroyJoint(mouseJoint); mouseJoint = null; _stage.removeEventListener(MouseEvent.MOUSE_DOWN, createMouse); _stage.removeEventListener(MouseEvent.MOUSE_UP, destroyMouse); _stage.removeEventListener(Event.ENTER_FRAME, onbuildmouse); _useMouseJoint = false; }; } public function showDebug(container:DisplayObjectContainer):void{ var sp:Sprite = new Sprite(); container.addChild(sp); var dbg:b2DebugDraw = new b2DebugDraw(); dbg.m_sprite = sp; dbg.m_alpha = 0.5; dbg.m_drawScale = PHYSCALE; dbg.m_fillAlpha = 0.5; dbg.m_drawFlags = b2DebugDraw.e_shapeBit; dbg.m_lineThickness = 1; world.SetDebugDraw(dbg); } private function setuserdata(){ var b:b2Body = _world.m_bodyList; while (b) { if (b.m_userData){ if ((b.m_userData is Object)){ if (b.m_userData.element){ if ((b.m_userData.element is DisplayObject)){ b.m_userData.element.x = (b.GetPosition().x * 30); b.m_userData.element.y = (b.GetPosition().y * 30); b.m_userData.element.rotation = ((b.GetAngle() * 180) / Math.PI); }; }; }; }; b = b.m_next; }; } private function setMouseJointTarget():void{ var mouseXWorldPhys:Number; var mouseYWorldPhys:Number; var p2:b2Vec2; if (mouseJoint){ mouseXWorldPhys = (_stage.mouseX / PHYSCALE); mouseYWorldPhys = (_stage.mouseY / PHYSCALE); p2 = new b2Vec2(mouseXWorldPhys, mouseYWorldPhys); mouseJoint.SetTarget(p2); }; } public function clear():void{ var dBody:b2Body; var dJoint:b2Joint; var groundBody:b2Body = _world.GetGroundBody(); var tempBody:b2Body = _world.GetBodyList(); while (_world.GetBodyCount() > 1) { if (tempBody != groundBody){ dBody = tempBody; tempBody = tempBody.GetNext(); _world.DestroyBody(dBody); } else { tempBody = tempBody.GetNext(); }; }; var tempJoint:b2Joint = _world.GetJointList(); while (_world.GetJointCount() > 0) { dJoint = tempJoint; tempJoint = tempJoint.GetNext(); _world.DestroyJoint(dJoint); }; _world = null; } public function createRound(x:Number, y:Number, radius:Number, angle:Number, userdata, type:String="item"):b2Body{ var body:b2Body; var shapeDef:b2PolygonDef = new b2PolygonDef(); var bodydef:b2BodyDef = new b2BodyDef(); var circledef:b2CircleDef = new b2CircleDef(); bodydef.position.Set((x / PHYSCALE), (y / PHYSCALE)); bodydef.userData = new Object(); bodydef.userData.element = userdata; bodydef.isBullet = false; bodydef.angle = angle; bodydef.userData.type = type; circledef.radius = (radius / PHYSCALE); circledef.density = _density; circledef.restitution = _restitution; circledef.friction = _friction; body = world.CreateBody(bodydef); userdata.bd = body; body.CreateShape(circledef); body.SetMassFromShapes(); return (body); } public function setConvexVertex(shapeDef:b2PolygonDef, n:int, radius:Number, friction:Number=100, restitution:Number=0.1, density:Number=20):void{ var dx:Number; var dy:Number; shapeDef.vertexCount = n; var angle:Number = ((Math.PI * 2) / n); radius = (radius / PHYSCALE); var i:int; while (i < n) { dx = (radius * Math.cos(((angle * i) + fourangle))); dy = (radius * Math.sin(((angle * i) + fourangle))); shapeDef.vertices[i].Set(dx, dy); i++; }; shapeDef.friction = friction; shapeDef.restitution = restitution; shapeDef.density = density; } public function createWorld(gravity:b2Vec2, aabb:b2AABB, doSleep:Boolean=true):b2World{ _world = new b2World(aabb, gravity, doSleep); return (_world); } public function createPrismaticJoint(b1:b2Body, b2:b2Body, axis:b2Vec2, enableLimit:Boolean=false, lowerTranslation:Number=0, upperTranslation:Number=0, enableMotor:Boolean=false, motorSpeed:Number=0, maxMotorTorque:Number=0):b2Joint{ var prismaticJointDef:b2PrismaticJointDef = new b2PrismaticJointDef(); prismaticJointDef.Initialize(b1, b2, b2.GetWorldCenter(), axis); prismaticJointDef.enableLimit = enableLimit; prismaticJointDef.lowerTranslation = lowerTranslation; prismaticJointDef.upperTranslation = upperTranslation; prismaticJointDef.enableMotor = enableMotor; prismaticJointDef.motorSpeed = motorSpeed; prismaticJointDef.maxMotorForce = maxMotorTorque; return (world.CreateJoint(prismaticJointDef)); } public function createDistanceJoint(body1:b2Body, body2:b2Body, anchor1:b2Vec2, anchor2:b2Vec2):b2Joint{ var distanceJointDef:b2DistanceJointDef = new b2DistanceJointDef(); distanceJointDef.Initialize(body1, body2, anchor1, anchor2); return (world.CreateJoint(distanceJointDef)); } public function addToWorld(objX:Number, objY:Number, objAngle:Number, friction:Number, objDensity:Number, restitution:Number, Obj, bullet:Boolean=false, type:String="none", allowsleep:Boolean=true):b2Body{ var _b2BodyDef:b2BodyDef; var _b2Body:b2Body; var _b2PolygonDef:b2PolygonDef; var tem:Number; var _loc_10:* = undefined; _b2BodyDef = new b2BodyDef(); _b2BodyDef.position.Set(objX, objY); _b2BodyDef.angle = objAngle; _b2BodyDef.userData = new Object(); _b2BodyDef.userData.element = Obj; _b2BodyDef.userData.type = type; _b2BodyDef.isBullet = bullet; _b2BodyDef.allowSleep = allowsleep; _b2Body = world.CreateBody(_b2BodyDef); Obj.bd = _b2Body; var i:int; while (i < Obj.numChildren) { _loc_10 = Obj.getChildAt(i); if (_loc_10.constructor == fang){ _b2PolygonDef = new b2PolygonDef(); tem = _loc_10.rotation; _loc_10.rotation = 0; _b2PolygonDef.SetAsOrientedBox((_loc_10.width / 60), (_loc_10.height / 60), new b2Vec2((_loc_10.x / 30), (_loc_10.y / 30)), (tem / 57.296)); _loc_10.rotation = tem; _b2PolygonDef.friction = friction; _b2PolygonDef.density = objDensity; _b2PolygonDef.restitution = restitution; _b2Body.CreateShape(_b2PolygonDef); }; i++; }; if (objDensity != 0){ _b2Body.SetMassFromShapes(); }; return (_b2Body); } public static function getInstance():Box2dFactory{ if (_instance == null){ _instance = new (Box2dFactory); }; return (_instance); } } }//package UserdefinedClass
Section 192
//Clr (UserdefinedClass.Clr) package UserdefinedClass { import flash.display.*; public class Clr { public function Clr(){ super(); } public static function removeAllChildren(container:DisplayObjectContainer):void{ var count:int = container.numChildren; var i:int; while (i < count) { container.removeChildAt(0); i++; }; } } }//package UserdefinedClass
Section 193
//HitTest (UserdefinedClass.HitTest) package UserdefinedClass { import flash.display.*; import flash.geom.*; public class HitTest { public static function getDrawMatrix(target:DisplayObject, hitRectangle:Rectangle, accurracy:Number):Matrix{ var localToGlobal:Point; var matrix:Matrix; var rootConcatenatedMatrix:Matrix = target.root.transform.concatenatedMatrix; localToGlobal = target.localToGlobal(new Point()); matrix = target.transform.concatenatedMatrix; matrix.tx = (localToGlobal.x - hitRectangle.x); matrix.ty = (localToGlobal.y - hitRectangle.y); matrix.a = (matrix.a / rootConcatenatedMatrix.a); matrix.d = (matrix.d / rootConcatenatedMatrix.d); if (accurracy != 1){ matrix.scale(accurracy, accurracy); }; return (matrix); } public static function complexHitTestObject(target1:DisplayObject, target2:DisplayObject, accurracy:Number=1):Boolean{ return (!((complexIntersectionRectangle(target1, target2, accurracy).width == 0))); } public static function complexIntersectionRectangle(target1:DisplayObject, target2:DisplayObject, accurracy:Number=1):Rectangle{ if (accurracy <= 0){ throw (new Error("ArgumentError: Error 5001: Invalid value for accurracy", 5001)); }; if (!target1.hitTestObject(target2)){ return (new Rectangle()); }; var hitRectangle:Rectangle = intersectionRectangle(target1, target2); if (((((hitRectangle.width * accurracy) < 1)) || (((hitRectangle.height * accurracy) < 1)))){ return (new Rectangle()); }; var bitmapData:BitmapData = new BitmapData((hitRectangle.width * accurracy), (hitRectangle.height * accurracy), false, 0); bitmapData.draw(target1, _slot1.getDrawMatrix(target1, hitRectangle, accurracy), new ColorTransform(1, 1, 1, 1, 0xFF, -255, -255, 0xFF)); bitmapData.draw(target2, _slot1.getDrawMatrix(target2, hitRectangle, accurracy), new ColorTransform(1, 1, 1, 1, 0xFF, 0xFF, 0xFF, 0xFF), BlendMode.DIFFERENCE); var intersection:Rectangle = bitmapData.getColorBoundsRect(4294967295, 4278255615); bitmapData.dispose(); if (accurracy != 1){ intersection.x = (intersection.x / accurracy); intersection.y = (intersection.y / accurracy); intersection.width = (intersection.width / accurracy); intersection.height = (intersection.height / accurracy); }; intersection.x = (intersection.x + hitRectangle.x); intersection.y = (intersection.y + hitRectangle.y); return (intersection); } public static function intersectionRectangle(target1:DisplayObject, target2:DisplayObject):Rectangle{ if (((((!(target1.root)) || (!(target2.root)))) || (!(target1.hitTestObject(target2))))){ return (new Rectangle()); }; var bounds1:Rectangle = target1.getBounds(target1.root); var bounds2:Rectangle = target2.getBounds(target2.root); var intersection:Rectangle = new Rectangle(); intersection.x = Math.max(bounds1.x, bounds2.x); intersection.y = Math.max(bounds1.y, bounds2.y); intersection.width = Math.min(((bounds1.x + bounds1.width) - intersection.x), ((bounds2.x + bounds2.width) - intersection.x)); intersection.height = Math.min(((bounds1.y + bounds1.height) - intersection.y), ((bounds2.y + bounds2.height) - intersection.y)); return (intersection); } } }//package UserdefinedClass
Section 194
//Mybutton (UserdefinedClass.Mybutton) package UserdefinedClass { import flash.display.*; import flash.net.*; public class Mybutton extends SimpleButton { public var netobj:Object; public function Mybutton(){ netobj = new Object(); super(); SoundControl.Mybtnground.push(this); } public function link(){ var req:URLRequest = (netobj["req"] as URLRequest); navigateToURL(req); } public function setlink(url:String){ netobj["req"] = new URLRequest(url); } } }//package UserdefinedClass
Section 195
//MyMath (UserdefinedClass.MyMath) package UserdefinedClass { import flash.geom.*; public class MyMath { public function MyMath(){ super(); } public static function LtoG(contain, child):Point{ var _loc_3:* = undefined; var _loc_4:* = undefined; _loc_3 = child.localToGlobal(new Point(0, 0)); _loc_4 = contain.globalToLocal(_loc_3); return (new Point(_loc_4.x, _loc_4.y)); } public static function FrandRange(min:Number, max:Number):Number{ var randomNum:Number = (int((Math.random() * ((max - min) + 1))) + min); return (randomNum); } public static function TimeFormat(num:int):Array{ var minute:int = (num / 60); var second:int = (num % 60); var minutearr:Array = worknum(minute); var secondarr:Array = worknum(second); return (new Array(secondarr[0], secondarr[1], minutearr[0], minutearr[1])); } public static function ranRangeground(min:Number, max:Number, Num:int):Array{ var _random:int; var temp:Array = new Array(); var len:int = ((max - min) + 1); var rearr:Array = new Array(); var i:int; while (i < len) { temp.push((min + i)); i++; }; while (Num) { _random = randRange((len - 1)); rearr.push(temp[_random]); temp.splice(_random, 1); len--; Num--; }; return (rearr); } public static function randRange(max:Number):Number{ var randomNum:Number = int((Math.random() * (max + 1))); return (randomNum); } public static function worknum(num:int):Array{ var ten:int = (num * 0.1); var one:int = (num % 10); return (new Array(one, ten)); } public static function NumtoArray(num:int, flushleft:Boolean=true):Array{ var str:String = String(num); var len:int = str.length; var i:int; var array:Array = new Array(); while (i < len) { array.push(int(str.charAt(i))); i++; }; if (!flushleft){ array.reverse(); }; return (array); } } }//package UserdefinedClass
Section 196
//MySave (UserdefinedClass.MySave) package UserdefinedClass { import flash.net.*; public class MySave { public static var shareobj:SharedObject; public function MySave(){ super(); } public static function init(savename:String){ shareobj = SharedObject.getLocal(savename); } public static function save(){ shareobj.flush(); } public static function exist(varname:String):Boolean{ return (Boolean(((shareobj) && (shareobj.data[varname])))); } public static function getdata(varname:String){ return (shareobj.data[varname]); } public static function setdata(varname:String, vardata){ shareobj.data[varname] = vardata; } public static function clear(){ if (shareobj){ shareobj.clear(); }; } public static function cleardata(varname:String){ shareobj.data[varname] = null; delete shareobj.data[varname]; } } }//package UserdefinedClass
Section 197
//MyTime (UserdefinedClass.MyTime) package UserdefinedClass { import flash.events.*; import flash.utils.*; public class MyTime { private var endFun:Function; public var time:Timer; public var count:int; private var Fun:Function; public function MyTime(num:int, fun:Function=null, endfun:Function=null){ super(); count = num; Fun = fun; endFun = endfun; } public function pausetime(){ time.stop(); } public function restart(){ time.start(); } public function removetime(){ time.stop(); time.removeEventListener(TimerEvent.TIMER, oncountdown); Fun = null; endFun = null; } public function oncountdown(e:TimerEvent):void{ count--; Fun(); if (count <= 0){ endFun(); time.stop(); time.removeEventListener(TimerEvent.TIMER, oncountdown); }; } public function starttime(){ time = new Timer(1000); time.addEventListener(TimerEvent.TIMER, oncountdown); time.start(); } } }//package UserdefinedClass
Section 198
//SoundControl (UserdefinedClass.SoundControl) package UserdefinedClass { import flash.media.*; public class SoundControl { public static var Mysdground:Array = new Array(); public static var Mybtnground:Array = new Array(); public static var buttonsound:Number = 1; public function SoundControl(){ super(); } public static function destorySdground(){ Mysdground = new Array(); } public static function stopallsound(){ SoundMixer.stopAll(); } public static function setsd(volume:Number){ var i:*; if (!Mysdground.length){ return; }; var sdtransform:SoundTransform = new SoundTransform(volume); for (i in Mysdground) { (Mysdground[i] as BaseSound).sdChannel.soundTransform = sdtransform; }; } public static function destory(){ Mybtnground = new Array(); Mysdground = new Array(); } public static function setbtnsound(volume:Number){ var i:*; if (!Mybtnground.length){ return; }; var sdtransform:SoundTransform = new SoundTransform(volume); for (i in Mybtnground) { (Mybtnground[i] as Mybutton).soundTransform = sdtransform; }; } public static function setallsd(volume:Number){ var sdtransform:SoundTransform = new SoundTransform(); sdtransform.volume = volume; SoundMixer.soundTransform = sdtransform; } } }//package UserdefinedClass
Section 199
//B0 (B0) package { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class B0 extends MovieClip { public function B0(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package
Section 200
//B4 (B4) package { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class B4 extends MovieClip { public function B4(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package
Section 201
//B6 (B6) package { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class B6 extends MovieClip { public function B6(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package
Section 202
//B8 (B8) package { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class B8 extends MovieClip { public function B8(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package
Section 203
//BGM1_sd (BGM1_sd) package { import flash.media.*; public dynamic class BGM1_sd extends Sound { } }//package
Section 204
//BGM2_sd (BGM2_sd) package { import flash.media.*; public dynamic class BGM2_sd extends Sound { } }//package
Section 205
//BGM3_sd (BGM3_sd) package { import flash.media.*; public dynamic class BGM3_sd extends Sound { } }//package
Section 206
//Boxstage1 (Boxstage1) package { import flash.display.*; public dynamic class Boxstage1 extends MovieClip { public var right:MovieClip; public var left:MovieClip; } }//package
Section 207
//Boxstage4 (Boxstage4) package { import flash.display.*; public dynamic class Boxstage4 extends MovieClip { } }//package
Section 208
//Boxstage5 (Boxstage5) package { import flash.display.*; public dynamic class Boxstage5 extends MovieClip { } }//package
Section 209
//BurstMC (BurstMC) package { import flash.display.*; public dynamic class BurstMC extends MovieClip { } }//package
Section 210
//Bz_sd (Bz_sd) package { import flash.media.*; public dynamic class Bz_sd extends Sound { } }//package
Section 211
//Combo_sd (Combo_sd) package { import flash.media.*; public dynamic class Combo_sd extends Sound { } }//package
Section 212
//ComboMC (ComboMC) package { import flash.display.*; public dynamic class ComboMC extends MovieClip { public var c0:MovieClip; public var c1:MovieClip; } }//package
Section 213
//Cover (Cover) package { import flash.display.*; import flash.text.*; public dynamic class Cover extends MovieClip { public var music_btn:MovieClip; public var logo_btn:SimpleButton; public var input:TextField; public var moregame_btn:SimpleButton; public var play_btn:SimpleButton; public var w:MovieClip; public var howtoplay_btn:SimpleButton; public var hiscores_btn:SimpleButton; } }//package
Section 214
//Cover_sd (Cover_sd) package { import flash.media.*; public dynamic class Cover_sd extends Sound { } }//package
Section 215
//Endmc (Endmc) package { import flash.display.*; public dynamic class Endmc extends MovieClip { public var menu_btn:SimpleButton; public var retry_btn:SimpleButton; public var t3:MovieClip; public var t0:MovieClip; public var s0:MovieClip; public var s1:MovieClip; public var s2:MovieClip; public var s3:MovieClip; public var s4:MovieClip; public var moregame_btn:SimpleButton; public var t1:MovieClip; public var t2:MovieClip; } }//package
Section 216
//Fan1 (Fan1) package { import flash.display.*; public dynamic class Fan1 extends MovieClip { public var Green:MovieClip; public var left:MovieClip; public var down:MovieClip; public var Red:MovieClip; public var up:MovieClip; public var right:MovieClip; } }//package
Section 217
//Fan2 (Fan2) package { import flash.display.*; public dynamic class Fan2 extends MovieClip { public var down:MovieClip; public var left:MovieClip; public var up:MovieClip; public var right:MovieClip; } }//package
Section 218
//fang (fang) package { import flash.display.*; public dynamic class fang extends MovieClip { } }//package
Section 219
//Fanmask2 (Fanmask2) package { import flash.display.*; public dynamic class Fanmask2 extends MovieClip { } }//package
Section 220
//G0 (G0) package { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class G0 extends MovieClip { public function G0(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package
Section 221
//G4 (G4) package { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class G4 extends MovieClip { public function G4(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package
Section 222
//G6 (G6) package { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class G6 extends MovieClip { public function G6(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package
Section 223
//G8 (G8) package { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class G8 extends MovieClip { public function G8(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package
Section 224
//Gameovermc (Gameovermc) package { import flash.display.*; public dynamic class Gameovermc extends MovieClip { public var s3:MovieClip; public var s4:MovieClip; public var menu_btn:SimpleButton; public var moregame_btn:SimpleButton; public var retry_btn:SimpleButton; public var s1:MovieClip; public var s0:MovieClip; public var s2:MovieClip; } }//package
Section 225
//Gameui (Gameui) package { import flash.display.*; public dynamic class Gameui extends MovieClip { public var music_btn:MovieClip; public var t0:Score; public var t2:Score; public var pause_btn:MovieClip; public var t1:Score; public var lv0:Score; public var lv1:Score; public var c0:Score; public var c1:Score; public var menu_btn:SimpleButton; public var res_btn:SimpleButton; public var t3:Score; } }//package
Section 226
//HexagonMC (HexagonMC) package { import flash.display.*; public dynamic class HexagonMC extends MovieClip { public var aa:MovieClip; public var a2:MovieClip; public var blun:MovieClip; public var a1:MovieClip; public var slun:MovieClip; } }//package
Section 227
//Hit_sd (Hit_sd) package { import flash.media.*; public dynamic class Hit_sd extends Sound { } }//package
Section 228
//Howtoplay (Howtoplay) package { import flash.display.*; public dynamic class Howtoplay extends MovieClip { public var play_btn:SimpleButton; public var moregame_btn:SimpleButton; } }//package
Section 229
//Levelup (Levelup) package { import flash.display.*; public dynamic class Levelup extends MovieClip { } }//package
Section 230
//Loginmc (Loginmc) package { import flash.display.*; import flash.events.*; import flash.geom.*; import flash.media.*; import flash.utils.*; import flash.text.*; import flash.net.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.system.*; import flash.ui.*; public dynamic class Loginmc extends MovieClip { public var play_btn:SimpleButton; public var login_btn:SimpleButton; public var input:TextField; public function Loginmc(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package
Section 231
//Lv_sd (Lv_sd) package { import flash.media.*; public dynamic class Lv_sd extends Sound { } }//package
Section 232
//Main (Main) package { import Element.*; import flash.display.*; import flash.events.*; import caurina.transitions.*; import UserdefinedClass.*; import com.api.as3.evnt.*; import BaseClass.*; import flash.utils.*; import com.api.as3.*; import Gamestage.*; import flash.net.*; import flash.ui.*; public class Main extends MovieClip { public var game:Sprite; public var selectstage:MovieClip; public var standbymc:MovieClip; public var gameui:MovieClip; public var winmc:MovieClip; public var UI:Sprite; public var GameClass:BaseStage; public var api:API; public var hiscorelink:String;// = "http://twotowersgames.com/games/face-touch/rating" public var submitmc:MovieClip; public var highscore:Array; public var endmc:MovieClip; public var cover:MovieClip; public var loginmc:MovieClip; public var stagenum:int; public var gamestage:String; public var totalscore:int; public var stagescore:int; public var mydata:MyData; public var cover_sd:BaseSound; public var username:String; public var gameovermc:MovieClip; public var Time:Timer; public var SoundBool:Boolean;// = true public var link:String;// = "http://twotowersgames.com/eredir/bP6TgHeml5Ik" public var allowplay:int; public var howtoplay:MovieClip; public static var bgm3_sd:BaseSound = new BaseSound("BGM3_sd"); public static var bgm2_sd:BaseSound = new BaseSound("BGM2_sd"); public static var bgm1_sd:BaseSound = new BaseSound("BGM1_sd"); public static var combo_sd:BaseSound = new BaseSound("Combo_sd"); public static var lv_sd:BaseSound = new BaseSound("Lv_sd"); public static var bz_sd:BaseSound = new BaseSound("Bz_sd"); public static var hit_sd:BaseSound = new BaseSound("Hit_sd"); public function Main(){ highscore = new Array(); api = new API("000169", "LQ56C052", "http://twotowersgames.com/api/"); super(); var Mymenu:ContextMenu = new ContextMenu(); Mymenu.hideBuiltInItems(); this.contextMenu = Mymenu; contextMenu.hideBuiltInItems(); if (stage){ init(); } else { addEventListener(Event.ADDED_TO_STAGE, init); }; api.startGame(); api.addEventListener(APIEvents.STARTGAME, islogin); } public function islogin(e:APIEvents):void{ api.removeEventListener(APIEvents.STARTGAME, islogin); stage.getChildAt(0).removeChildAt(0); if (e.data.authed == 1){ username = e.data.username; showcover(); } else { username = ""; showlogin(); }; } public function initgame():void{ gamestage = "init"; addEventListener(MouseEvent.MOUSE_DOWN, onclickbtn); } public function setCombo(C:int){ var temp:Array = MyMath.worknum(C); BaseUI.setValue(gameui, "c0", (temp[0] + 1)); BaseUI.setValue(gameui, "c1", (temp[1] + 1)); } private function initgameUI(){ UI.addChild(gameui); gameui.music_btn.gotoAndStop((SoundBool) ? 1 : 2); UI.addChild(standbymc); Time = new Timer(5000, 1); Time.start(); Time.addEventListener(TimerEvent.TIMER, ongotogame); } public function init(e:Event=null):void{ removeEventListener(Event.ADDED_TO_STAGE, init); initdata(); initcontainer(); initUImc(); initgame(); loaddata(); } public function showlogin(){ loginmc.input.text = ""; gamestage = "login"; UI.addChild(loginmc); loginmc.x = (320 - (loginmc.width * 0.5)); loginmc.y = (240 - (loginmc.height * 0.5)); } public function showEnd(S:int, T:int){ if (highscore[(stagenum - 1)] < S){ highscore[(stagenum - 1)] = S; savehighscore(); }; submitscore(); BaseUI.settime(endmc, T); BaseUI.setWinScore(endmc, S); gamestage = "end"; UI.addChild(endmc); endmc.x = 164; endmc.y = -200; Tweener.addTween(endmc, {y:80, time:2, transition:"easeOutBounce"}); } private function loaddata():void{ var i:int; MySave.init("square"); if (MySave.exist("highscore")){ allowplay = MySave.getdata("allowplay"); highscore = MySave.getdata("highscore"); } else { allowplay = 1; MySave.setdata("allowplay", allowplay); highscore = new Array(); i = 0; while (i < 6) { highscore.push(0); i++; }; MySave.setdata("highscore", highscore); MySave.save(); }; } private function showhowtoplay():void{ gamestage = "howtoplay"; removeAllChildren(UI); UI.addChild(howtoplay); } public function removeAllChildren(container:DisplayObjectContainer):void{ var count:int = container.numChildren; var i:int; while (i < count) { container.removeChildAt(0); i++; }; } public function setLv(LVnum:int){ BaseUI.setlv(gameui, LVnum); } public function rehiscore():int{ var tempNum:int; var i:int; while (i < 6) { tempNum = (tempNum + highscore[i]); i++; }; return (tempNum); } public function showWin(S:int, T:int){ if (highscore[(stagenum - 1)] < S){ highscore[(stagenum - 1)] = S; savehighscore(); }; submitscore(); BaseUI.settime(winmc, T); BaseUI.setWinScore(winmc, S); allowplay = stagenum; savedata(); gamestage = "win"; UI.addChild(winmc); winmc.x = 164; winmc.y = -200; Tweener.addTween(winmc, {y:80, time:2, transition:"easeOutBounce"}); } private function savedata():void{ MySave.setdata("allowplay", allowplay); MySave.save(); } private function issave():void{ if (stagenum > MySave.getdata("allowplay")){ allowplay = stagenum; savedata(); }; } private function showselect():void{ stagenum = 0; gamestage = "select"; removeAllChildren(UI); setselectstage(); UI.addChild(selectstage); } private function ongotogame(e:TimerEvent):void{ gotogame(); } public function submitscore(){ api.giveScore("1", String(rehiscore())); } public function initdata(){ gamestage = new String(); stagenum = 0; loaddata(); mydata = MyData.getInstance(); cover_sd = new BaseSound("Cover_sd"); } private function onclickbtn(e:MouseEvent):void{ if (gamestage == "cover"){ if (hitbtn(cover.play_btn)){ showselect(); return; }; if (hitbtn(cover.howtoplay_btn)){ showhowtoplay(); return; }; if (hitbtn(cover.logo_btn)){ navigateToURL(new URLRequest(link), "_blank"); return; }; if (hitbtn(cover.moregame_btn)){ navigateToURL(new URLRequest(link), "_blank"); return; }; if (hitbtn(cover.hiscores_btn)){ navigateToURL(new URLRequest(hiscorelink), "_blank"); return; }; if (hitbtn(cover.music_btn)){ cover.music_btn.gotoAndStop(((cover.music_btn.currentFrame % 2) + 1)); if (SoundBool){ SoundBool = false; } else { SoundBool = true; }; if (SoundBool){ SoundControl.setallsd(1); } else { SoundControl.setallsd(0); }; return; }; }; if (gamestage == "howtoplay"){ if (hitbtn(howtoplay.play_btn)){ showselect(); return; }; if (hitbtn(howtoplay.moregame_btn)){ navigateToURL(new URLRequest(link), "_blank"); return; }; }; if (gamestage == "select"){ setselect(); return; }; if (gamestage == "standby"){ if (hitbtn(standbymc)){ gotogame(); return; }; }; if (gamestage == "playing"){ if (hitbtn(gameui.pause_btn)){ gameui.pause_btn.gotoAndStop(((gameui.pause_btn.currentFrame % 2) + 1)); GameClass.pausegame(); return; }; if (hitbtn(gameui.res_btn)){ GameClass.destory(); removeAllChildren(game); initstage(stagenum); return; }; if (hitbtn(gameui.menu_btn)){ GameClass.destory(); removeAllChildren(game); showcover(); return; }; if (hitbtn(gameui.music_btn)){ gameui.music_btn.gotoAndStop(((gameui.music_btn.currentFrame % 2) + 1)); if (SoundBool){ SoundBool = false; } else { SoundBool = true; }; if (SoundBool){ SoundControl.setallsd(1); } else { SoundControl.setallsd(0); }; return; }; }; if (gamestage == "over"){ if (hitbtn(gameovermc.retry_btn)){ GameClass.destory(); removeAllChildren(game); initstage(stagenum); return; }; if (hitbtn(gameovermc.menu_btn)){ GameClass.destory(); removeAllChildren(game); showcover(); return; }; if (hitbtn(gameovermc.moregame_btn)){ navigateToURL(new URLRequest(link), "_blank"); return; }; }; if (gamestage == "win"){ if (hitbtn(winmc.retry_btn)){ GameClass.destory(); removeAllChildren(game); stagenum = (stagenum + 1); issave(); stagenum = (stagenum - 1); initstage(stagenum); return; }; if (hitbtn(winmc.next_btn)){ GameClass.destory(); removeAllChildren(game); stagenum = (stagenum + 1); initstage(stagenum); issave(); return; }; if (hitbtn(winmc.moregame_btn)){ navigateToURL(new URLRequest(link), "_blank"); return; }; }; if (gamestage == "end"){ if (hitbtn(endmc.retry_btn)){ GameClass.destory(); removeAllChildren(game); initstage(stagenum); return; }; if (hitbtn(endmc.menu_btn)){ GameClass.destory(); removeAllChildren(game); showcover(); return; }; if (hitbtn(endmc.moregame_btn)){ navigateToURL(new URLRequest(link), "_blank"); return; }; }; if (gamestage == "submit"){ }; if (gamestage == "login"){ if (hitbtn(loginmc.login_btn)){ api.getAuthUrl(); api.addEventListener(APIEvents.AUTHURL, onlink); return; }; if (hitbtn(loginmc.play_btn)){ showcover(); return; }; }; } public function initUImc():void{ cover = new Cover(); howtoplay = new Howtoplay(); selectstage = new Selectstage(); gameui = new Gameui(); standbymc = new Standbymc(); gameovermc = new Gameovermc(); winmc = new Winmc(); endmc = new Endmc(); submitmc = new Submitmc(); loginmc = new Loginmc(); } public function destory():void{ removeAllChildren(game); removeAllChildren(UI); } public function setTime(T:int){ BaseUI.settime(gameui, T); } public function setScore(S:int){ BaseUI.showscore(S, Score, gameui, 86, 228, 1, false); } public function savehighscore(){ MySave.setdata("highscore", highscore); MySave.save(); } public function showsubmit(){ gamestage = "submit"; UI.addChild(submitmc); submitmc.x = (320 - (submitmc.width * 0.5)); submitmc.y = (240 - (submitmc.height * 0.5)); BaseUI.setMaxscore(submitmc, rehiscore(), "s", 8); } private function onshowcover(e:TimerEvent):void{ Time.stop(); Time.removeEventListener(TimerEvent.TIMER, onshowcover); showcover(); } private function setselect():void{ if (hitbtn(selectstage.moregame_btn)){ navigateToURL(new URLRequest(link), "_blank"); return; }; if (hitbtn(selectstage.back_btn)){ showcover(); return; }; var temp:Array = new Array(selectstage.stage1, selectstage.stage2, selectstage.stage3, selectstage.stage4, selectstage.stage5, selectstage.stage6); var unhit:Boolean; var i:int; while (i < 6) { if (((temp[i].hitTestPoint(mouseX, mouseY, true)) && (((i + 1) <= allowplay)))){ unhit = false; stagenum = (i + 1); }; i++; }; if (unhit){ return; }; initstage(stagenum); } private function showcover():void{ if (username != ""){ cover.w.alpha = 1; cover.input.text = username; } else { cover.w.alpha = 0; }; SoundControl.stopallsound(); cover_sd.playsound(1000000, 0.5); gamestage = "cover"; removeAllChildren(UI); UI.addChild(cover); } private function setselectstage():void{ var temp:Array = new Array(selectstage.s1, selectstage.s2, selectstage.s3, selectstage.s4, selectstage.s5, selectstage.s6); loaddata(); var len:int = allowplay; trace(allowplay); var i:int; while (i < len) { temp[i].gotoAndPlay(2); i++; }; } public function onlink(e:APIEvents):void{ api.removeEventListener(APIEvents.AUTHURL, onlink); navigateToURL(new URLRequest(e.data.authurl), "_self"); } public function welcome(str:String){ loginmc.input.text = ""; UI.addChild(loginmc); loginmc.x = (320 - (loginmc.width * 0.5)); loginmc.y = (240 - (loginmc.height * 0.5)); loginmc.gotoAndStop(2); gamestage = "welcome"; loginmc.input.text = str; var templen:int = (14 * str.length); loginmc.input.x = (320 - (templen * 0.5)); Time = new Timer(4000, 1); Time.start(); Time.addEventListener(TimerEvent.TIMER, onshowcover); } public function showGameover(S:int):void{ if (highscore[(stagenum - 1)] < S){ highscore[(stagenum - 1)] = S; savehighscore(); }; submitscore(); BaseUI.setWinScore(gameovermc, S); gamestage = "over"; UI.addChild(gameovermc); gameovermc.x = 164; gameovermc.y = -200; Tweener.addTween(gameovermc, {y:80, time:2, transition:"easeOutBounce"}); } private function hitbtn(btn:DisplayObject):Boolean{ if (btn){ return (btn.hitTestPoint(mouseX, mouseY, true)); }; return (false); } public function initcontainer():void{ game = new Sprite(); UI = new Sprite(); addChild(game); addChild(UI); } private function initstage(num:int):void{ cover_sd.stopSound(); setTime(0); setCombo(0); gamestage = "standby"; removeAllChildren(UI); var stageclass:Class = (mydata.stageclassground[(num - 1)] as Class); GameClass = new stageclass(this); game.addChild(GameClass); initgameUI(); } public function gotogame(){ Time.stop(); Time.removeEventListener(TimerEvent.TIMER, ongotogame); UI.removeChild(standbymc); GameClass.startlistener(); gamestage = "playing"; } } }//package
Section 233
//R0 (R0) package { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class R0 extends MovieClip { public function R0(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package
Section 234
//R4 (R4) package { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class R4 extends MovieClip { public function R4(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package
Section 235
//R6 (R6) package { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class R6 extends MovieClip { public function R6(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package
Section 236
//R8 (R8) package { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class R8 extends MovieClip { public function R8(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package
Section 237
//Score (Score) package { import flash.display.*; import flash.events.*; import flash.geom.*; import flash.media.*; import flash.utils.*; import flash.text.*; import flash.net.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.system.*; import flash.ui.*; public dynamic class Score extends MovieClip { public function Score(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package
Section 238
//Selectstage (Selectstage) package { import flash.display.*; public dynamic class Selectstage extends MovieClip { public var back_btn:SimpleButton; public var s1:MovieClip; public var s2:MovieClip; public var s3:MovieClip; public var s4:MovieClip; public var s5:MovieClip; public var s6:MovieClip; public var moregame_btn:SimpleButton; public var stage1:SimpleButton; public var stage2:SimpleButton; public var stage3:SimpleButton; public var stage4:SimpleButton; public var stage5:SimpleButton; public var stage6:SimpleButton; } }//package
Section 239
//Standbymc (Standbymc) package { import flash.display.*; public dynamic class Standbymc extends MovieClip { } }//package
Section 240
//Submitmc (Submitmc) package { import flash.display.*; public dynamic class Submitmc extends MovieClip { public var submit_btn:SimpleButton; public var logo_btn:SimpleButton; public var no_btn:SimpleButton; } }//package
Section 241
//Winmc (Winmc) package { import flash.display.*; public dynamic class Winmc extends MovieClip { public var retry_btn:SimpleButton; public var t0:MovieClip; public var next_btn:SimpleButton; public var s0:MovieClip; public var s1:MovieClip; public var s2:MovieClip; public var s3:MovieClip; public var s4:MovieClip; public var moregame_btn:SimpleButton; public var t1:MovieClip; public var t2:MovieClip; public var t3:MovieClip; } }//package
Section 242
//Y0 (Y0) package { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Y0 extends MovieClip { public function Y0(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package
Section 243
//Y4 (Y4) package { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Y4 extends MovieClip { public function Y4(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package
Section 244
//Y6 (Y6) package { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Y6 extends MovieClip { public function Y6(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package
Section 245
//Y8 (Y8) package { import flash.events.*; import flash.media.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.filters.*; import flash.net.*; import flash.system.*; import flash.text.*; import flash.ui.*; public dynamic class Y8 extends MovieClip { public function Y8(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame1(){ stop(); } function frame2(){ stop(); } function frame3(){ stop(); } function frame4(){ stop(); } } }//package
Section 246
//yuan (yuan) package { import flash.display.*; public dynamic class yuan extends MovieClip { } }//package

Library Items

Symbol 1 BitmapUsed by:2 118
Symbol 2 GraphicUses:1Used by:Timeline
Symbol 3 GraphicUsed by:4
Symbol 4 MovieClipUses:3Used by:Timeline
Symbol 5 GraphicUsed by:6
Symbol 6 MovieClipUses:5Used by:Timeline
Symbol 7 FontUsed by:8
Symbol 8 EditableTextUses:7 128Used by:Timeline
Symbol 9 Sound {Hit_sd}
Symbol 10 Sound {Lv_sd}
Symbol 11 Sound {Combo_sd}
Symbol 12 Sound {Cover_sd}
Symbol 13 Sound {BGM3_sd}
Symbol 14 Sound {BGM2_sd}
Symbol 15 Sound {BGM1_sd}
Symbol 16 Sound {Bz_sd}
Symbol 17 GraphicUsed by:18
Symbol 18 MovieClipUses:17Used by:19
Symbol 19 MovieClipUses:18Used by:36
Symbol 20 GraphicUsed by:36
Symbol 21 GraphicUsed by:22
Symbol 22 MovieClipUses:21Used by:24
Symbol 23 GraphicUsed by:24
Symbol 24 MovieClipUses:22 23Used by:25
Symbol 25 MovieClipUses:24Used by:36
Symbol 26 GraphicUsed by:31
Symbol 27 GraphicUsed by:31
Symbol 28 GraphicUsed by:31 48 103
Symbol 29 GraphicUsed by:31
Symbol 30 GraphicUsed by:31
Symbol 31 MovieClipUses:26 27 28 29 30Used by:36
Symbol 32 GraphicUsed by:36
Symbol 33 GraphicUsed by:34 35
Symbol 34 MovieClip {fang}Uses:33Used by:36 50 104 863 891 907 912
Symbol 35 MovieClipUses:33Used by:36 863 891
Symbol 36 MovieClip {Boxstage1}Uses:19 20 25 31 32 34 35
Symbol 37 GraphicUsed by:38
Symbol 38 MovieClipUses:37Used by:39
Symbol 39 MovieClipUses:38Used by:50
Symbol 40 GraphicUsed by:50
Symbol 41 GraphicUsed by:42
Symbol 42 MovieClipUses:41Used by:50 913
Symbol 43 GraphicUsed by:50
Symbol 44 GraphicUsed by:48
Symbol 45 GraphicUsed by:48
Symbol 46 GraphicUsed by:48
Symbol 47 GraphicUsed by:48
Symbol 48 MovieClipUses:44 45 28 46 47Used by:50
Symbol 49 GraphicUsed by:50
Symbol 50 MovieClip {Boxstage5}Uses:39 40 42 43 48 49 34
Symbol 51 GraphicUsed by:104
Symbol 52 GraphicUsed by:53
Symbol 53 MovieClipUses:52Used by:54
Symbol 54 MovieClipUses:53Used by:104
Symbol 55 GraphicUsed by:104
Symbol 56 GraphicUsed by:59
Symbol 57 GraphicUsed by:59
Symbol 58 GraphicUsed by:59
Symbol 59 MovieClipUses:56 57 58Used by:104
Symbol 60 GraphicUsed by:63
Symbol 61 GraphicUsed by:63
Symbol 62 GraphicUsed by:63
Symbol 63 MovieClipUses:60 61 62Used by:104
Symbol 64 GraphicUsed by:67
Symbol 65 GraphicUsed by:67 205 825
Symbol 66 GraphicUsed by:67
Symbol 67 MovieClipUses:64 65 66Used by:104
Symbol 68 GraphicUsed by:71
Symbol 69 GraphicUsed by:71 844
Symbol 70 GraphicUsed by:71
Symbol 71 MovieClipUses:68 69 70Used by:104
Symbol 72 GraphicUsed by:75
Symbol 73 GraphicUsed by:75
Symbol 74 GraphicUsed by:75
Symbol 75 MovieClipUses:72 73 74Used by:104
Symbol 76 GraphicUsed by:79
Symbol 77 GraphicUsed by:79
Symbol 78 GraphicUsed by:79
Symbol 79 MovieClipUses:76 77 78Used by:104
Symbol 80 GraphicUsed by:87
Symbol 81 GraphicUsed by:84 192 772
Symbol 82 GraphicUsed by:84 192 772
Symbol 83 GraphicUsed by:84 192 772
Symbol 84 MovieClipUses:81 82 83Used by:87 91
Symbol 85 GraphicUsed by:87
Symbol 86 GraphicUsed by:87
Symbol 87 MovieClipUses:80 84 85 86Used by:104
Symbol 88 GraphicUsed by:91
Symbol 89 GraphicUsed by:91
Symbol 90 GraphicUsed by:91
Symbol 91 MovieClipUses:88 84 89 90Used by:104
Symbol 92 GraphicUsed by:104
Symbol 93 GraphicUsed by:94
Symbol 94 MovieClipUses:93Used by:104
Symbol 95 GraphicUsed by:104
Symbol 96 GraphicUsed by:97
Symbol 97 MovieClipUses:96Used by:104
Symbol 98 GraphicUsed by:104
Symbol 99 GraphicUsed by:103
Symbol 100 GraphicUsed by:103
Symbol 101 GraphicUsed by:103
Symbol 102 GraphicUsed by:103
Symbol 103 MovieClipUses:99 100 28 101 102Used by:104
Symbol 104 MovieClip {Boxstage4}Uses:51 54 55 59 63 67 71 75 79 87 91 92 94 95 97 98 103 34
Symbol 105 GraphicUsed by:117
Symbol 106 GraphicUsed by:109
Symbol 107 GraphicUsed by:109
Symbol 108 GraphicUsed by:109
Symbol 109 ButtonUses:106 107 108Used by:117
Symbol 110 GraphicUsed by:113
Symbol 111 GraphicUsed by:113
Symbol 112 GraphicUsed by:113
Symbol 113 ButtonUses:110 111 112Used by:117
Symbol 114 BitmapUsed by:115
Symbol 115 GraphicUses:114Used by:116
Symbol 116 ButtonUses:115Used by:117
Symbol 117 MovieClip {Submitmc}Uses:105 109 113 116
Symbol 118 GraphicUses:1Used by:132
Symbol 119 GraphicUsed by:132
Symbol 120 GraphicUsed by:123
Symbol 121 GraphicUsed by:123
Symbol 122 GraphicUsed by:123
Symbol 123 ButtonUses:120 121 122Used by:132
Symbol 124 GraphicUsed by:127
Symbol 125 GraphicUsed by:127
Symbol 126 GraphicUsed by:127
Symbol 127 ButtonUses:124 125 126Used by:132
Symbol 128 FontUsed by:8 129 495
Symbol 129 EditableTextUses:128Used by:132
Symbol 130 GraphicUsed by:131
Symbol 131 MovieClipUses:130Used by:132 503
Symbol 132 MovieClip {Loginmc}Uses:118 119 123 127 129 131
Symbol 133 GraphicUsed by:134
Symbol 134 MovieClip {Standbymc}Uses:133
Symbol 135 GraphicUsed by:176
Symbol 136 BitmapUsed by:137
Symbol 137 GraphicUses:136Used by:138 139
Symbol 138 MovieClipUses:137Used by:139
Symbol 139 ButtonUses:138 137Used by:176
Symbol 140 BitmapUsed by:141
Symbol 141 GraphicUses:140Used by:142 143
Symbol 142 MovieClipUses:141Used by:143
Symbol 143 ButtonUses:142 141Used by:176
Symbol 144 GraphicUsed by:145 147
Symbol 145 MovieClipUses:144Used by:146
Symbol 146 MovieClipUses:145Used by:147
Symbol 147 ButtonUses:146 144Used by:176
Symbol 148 BitmapUsed by:149
Symbol 149 GraphicUses:148Used by:150 151
Symbol 150 MovieClipUses:149Used by:151
Symbol 151 ButtonUses:150 149Used by:176
Symbol 152 BitmapUsed by:153
Symbol 153 GraphicUses:152Used by:154 155
Symbol 154 MovieClipUses:153Used by:155
Symbol 155 ButtonUses:154 153Used by:176
Symbol 156 BitmapUsed by:157
Symbol 157 GraphicUses:156Used by:158 159
Symbol 158 MovieClipUses:157Used by:159
Symbol 159 ButtonUses:158 157Used by:176
Symbol 160 GraphicUsed by:167
Symbol 161 GraphicUsed by:162
Symbol 162 MovieClipUses:161Used by:167
Symbol 163 GraphicUsed by:167
Symbol 164 GraphicUsed by:165
Symbol 165 MovieClipUses:164Used by:167
Symbol 166 GraphicUsed by:167
Symbol 167 MovieClip {FaceTouch_fla.Timeline_267}Uses:160 162 163 165 166Used by:176
Symbol 168 GraphicUsed by:171
Symbol 169 GraphicUsed by:171
Symbol 170 GraphicUsed by:171
Symbol 171 ButtonUses:168 169 170Used by:176
Symbol 172 GraphicUsed by:175
Symbol 173 GraphicUsed by:175
Symbol 174 GraphicUsed by:175
Symbol 175 ButtonUses:172 173 174Used by:176 184 503 527 529 536
Symbol 176 MovieClip {Selectstage}Uses:135 139 143 147 151 155 159 167 171 175
Symbol 177 GraphicUsed by:184
Symbol 178 GraphicUsed by:183
Symbol 179 GraphicUsed by:180 183 483 487 508 525 533
Symbol 180 MovieClipUses:179Used by:183 483 487 508 525 533
Symbol 181 GraphicUsed by:183
Symbol 182 GraphicUsed by:183
Symbol 183 ButtonUses:178 180 181 182 179Used by:184 536
Symbol 184 MovieClip {Howtoplay}Uses:177 183 175
Symbol 185 GraphicUsed by:503
Symbol 186 GraphicUsed by:472
Symbol 187 GraphicUsed by:190
Symbol 188 GraphicUsed by:190
Symbol 189 GraphicUsed by:190
Symbol 190 MovieClipUses:187 188 189Used by:206
Symbol 191 GraphicUsed by:198
Symbol 192 MovieClipUses:81 82 83Used by:198 202 217 221 237 241 257 261
Symbol 193 GraphicUsed by:198
Symbol 194 GraphicUsed by:198
Symbol 195 GraphicUsed by:198
Symbol 196 GraphicUsed by:198
Symbol 197 GraphicUsed by:198
Symbol 198 MovieClipUses:191 192 193 194 195 196 197Used by:206
Symbol 199 GraphicUsed by:202
Symbol 200 GraphicUsed by:202
Symbol 201 GraphicUsed by:202
Symbol 202 MovieClipUses:199 192 200 201Used by:206
Symbol 203 GraphicUsed by:205
Symbol 204 GraphicUsed by:205
Symbol 205 MovieClipUses:203 65 204Used by:206
Symbol 206 MovieClip {FaceTouch_fla.f_163}Uses:190 198 202 205Used by:471
Symbol 207 GraphicUsed by:210
Symbol 208 GraphicUsed by:210
Symbol 209 GraphicUsed by:210
Symbol 210 MovieClipUses:207 208 209Used by:226
Symbol 211 GraphicUsed by:217
Symbol 212 GraphicUsed by:217
Symbol 213 GraphicUsed by:217
Symbol 214 GraphicUsed by:217
Symbol 215 GraphicUsed by:217
Symbol 216 GraphicUsed by:217
Symbol 217 MovieClipUses:211 192 212 213 214 215 216Used by:226
Symbol 218 GraphicUsed by:221
Symbol 219 GraphicUsed by:221
Symbol 220 GraphicUsed by:221
Symbol 221 MovieClipUses:218 192 219 220Used by:226
Symbol 222 GraphicUsed by:225
Symbol 223 GraphicUsed by:225
Symbol 224 GraphicUsed by:225
Symbol 225 MovieClipUses:222 223 224Used by:226
Symbol 226 MovieClip {FaceTouch_fla.f_169}Uses:210 217 221 225Used by:471
Symbol 227 GraphicUsed by:230
Symbol 228 GraphicUsed by:230
Symbol 229 GraphicUsed by:230
Symbol 230 MovieClipUses:227 228 229Used by:246
Symbol 231 GraphicUsed by:237
Symbol 232 GraphicUsed by:237
Symbol 233 GraphicUsed by:237
Symbol 234 GraphicUsed by:237
Symbol 235 GraphicUsed by:237
Symbol 236 GraphicUsed by:237
Symbol 237 MovieClipUses:231 192 232 233 234 235 236Used by:246
Symbol 238 GraphicUsed by:241
Symbol 239 GraphicUsed by:241
Symbol 240 GraphicUsed by:241
Symbol 241 MovieClipUses:238 192 239 240Used by:246
Symbol 242 GraphicUsed by:245
Symbol 243 GraphicUsed by:245
Symbol 244 GraphicUsed by:245
Symbol 245 MovieClipUses:242 243 244Used by:246
Symbol 246 MovieClip {FaceTouch_fla.f_174}Uses:230 237 241 245Used by:471
Symbol 247 GraphicUsed by:250
Symbol 248 GraphicUsed by:250
Symbol 249 GraphicUsed by:250
Symbol 250 MovieClipUses:247 248 249Used by:266
Symbol 251 GraphicUsed by:257
Symbol 252 GraphicUsed by:257
Symbol 253 GraphicUsed by:257
Symbol 254 GraphicUsed by:257
Symbol 255 GraphicUsed by:257
Symbol 256 GraphicUsed by:257
Symbol 257 MovieClipUses:251 192 252 253 254 255 256Used by:266
Symbol 258 GraphicUsed by:261
Symbol 259 GraphicUsed by:261
Symbol 260 GraphicUsed by:261
Symbol 261 MovieClipUses:258 192 259 260Used by:266
Symbol 262 GraphicUsed by:265
Symbol 263 GraphicUsed by:265
Symbol 264 GraphicUsed by:265
Symbol 265 MovieClipUses:262 263 264Used by:266
Symbol 266 MovieClip {FaceTouch_fla.f_179}Uses:250 257 261 265Used by:471
Symbol 267 GraphicUsed by:270
Symbol 268 GraphicUsed by:270
Symbol 269 GraphicUsed by:270
Symbol 270 MovieClipUses:267 268 269Used by:283
Symbol 271 GraphicUsed by:274
Symbol 272 GraphicUsed by:274
Symbol 273 GraphicUsed by:274
Symbol 274 MovieClipUses:271 272 273Used by:283
Symbol 275 GraphicUsed by:278
Symbol 276 GraphicUsed by:278
Symbol 277 GraphicUsed by:278
Symbol 278 MovieClipUses:275 276 277Used by:283
Symbol 279 GraphicUsed by:282
Symbol 280 GraphicUsed by:282
Symbol 281 GraphicUsed by:282
Symbol 282 MovieClipUses:279 280 281Used by:283
Symbol 283 MovieClip {FaceTouch_fla.f_184}Uses:270 274 278 282Used by:471
Symbol 284 GraphicUsed by:287
Symbol 285 GraphicUsed by:287
Symbol 286 GraphicUsed by:287
Symbol 287 MovieClipUses:284 285 286Used by:300
Symbol 288 GraphicUsed by:291
Symbol 289 GraphicUsed by:291
Symbol 290 GraphicUsed by:291
Symbol 291 MovieClipUses:288 289 290Used by:300
Symbol 292 GraphicUsed by:295
Symbol 293 GraphicUsed by:295
Symbol 294 GraphicUsed by:295
Symbol 295 MovieClipUses:292 293 294Used by:300
Symbol 296 GraphicUsed by:299
Symbol 297 GraphicUsed by:299
Symbol 298 GraphicUsed by:299
Symbol 299 MovieClipUses:296 297 298Used by:300
Symbol 300 MovieClip {FaceTouch_fla.f_189}Uses:287 291 295 299Used by:471
Symbol 301 GraphicUsed by:304
Symbol 302 GraphicUsed by:304
Symbol 303 GraphicUsed by:304
Symbol 304 MovieClipUses:301 302 303Used by:317
Symbol 305 GraphicUsed by:308
Symbol 306 GraphicUsed by:308
Symbol 307 GraphicUsed by:308
Symbol 308 MovieClipUses:305 306 307Used by:317
Symbol 309 GraphicUsed by:312
Symbol 310 GraphicUsed by:312
Symbol 311 GraphicUsed by:312
Symbol 312 MovieClipUses:309 310 311Used by:317
Symbol 313 GraphicUsed by:316
Symbol 314 GraphicUsed by:316
Symbol 315 GraphicUsed by:316
Symbol 316 MovieClipUses:313 314 315Used by:317
Symbol 317 MovieClip {FaceTouch_fla.f_194}Uses:304 308 312 316Used by:471
Symbol 318 GraphicUsed by:321
Symbol 319 GraphicUsed by:321
Symbol 320 GraphicUsed by:321
Symbol 321 MovieClipUses:318 319 320Used by:334
Symbol 322 GraphicUsed by:325
Symbol 323 GraphicUsed by:325
Symbol 324 GraphicUsed by:325
Symbol 325 MovieClipUses:322 323 324Used by:334
Symbol 326 GraphicUsed by:329
Symbol 327 GraphicUsed by:329
Symbol 328 GraphicUsed by:329
Symbol 329 MovieClipUses:326 327 328Used by:334
Symbol 330 GraphicUsed by:333
Symbol 331 GraphicUsed by:333
Symbol 332 GraphicUsed by:333
Symbol 333 MovieClipUses:330 331 332Used by:334
Symbol 334 MovieClip {FaceTouch_fla.f_199}Uses:321 325 329 333Used by:471
Symbol 335 GraphicUsed by:338
Symbol 336 GraphicUsed by:338
Symbol 337 GraphicUsed by:338
Symbol 338 MovieClipUses:335 336 337Used by:351
Symbol 339 GraphicUsed by:342
Symbol 340 GraphicUsed by:342
Symbol 341 GraphicUsed by:342
Symbol 342 MovieClipUses:339 340 341Used by:351
Symbol 343 GraphicUsed by:346
Symbol 344 GraphicUsed by:346
Symbol 345 GraphicUsed by:346
Symbol 346 MovieClipUses:343 344 345Used by:351
Symbol 347 GraphicUsed by:350
Symbol 348 GraphicUsed by:350
Symbol 349 GraphicUsed by:350
Symbol 350 MovieClipUses:347 348 349Used by:351
Symbol 351 MovieClip {FaceTouch_fla.f_204}Uses:338 342 346 350Used by:471
Symbol 352 GraphicUsed by:355
Symbol 353 GraphicUsed by:355
Symbol 354 GraphicUsed by:355
Symbol 355 MovieClipUses:352 353 354Used by:368
Symbol 356 GraphicUsed by:359
Symbol 357 GraphicUsed by:359
Symbol 358 GraphicUsed by:359
Symbol 359 MovieClipUses:356 357 358Used by:368
Symbol 360 GraphicUsed by:363
Symbol 361 GraphicUsed by:363
Symbol 362 GraphicUsed by:363
Symbol 363 MovieClipUses:360 361 362Used by:368
Symbol 364 GraphicUsed by:367
Symbol 365 GraphicUsed by:367
Symbol 366 GraphicUsed by:367
Symbol 367 MovieClipUses:364 365 366Used by:368
Symbol 368 MovieClip {FaceTouch_fla.f_209}Uses:355 359 363 367Used by:471
Symbol 369 GraphicUsed by:372
Symbol 370 GraphicUsed by:372
Symbol 371 GraphicUsed by:372
Symbol 372 MovieClipUses:369 370 371Used by:385
Symbol 373 GraphicUsed by:376
Symbol 374 GraphicUsed by:376
Symbol 375 GraphicUsed by:376
Symbol 376 MovieClipUses:373 374 375Used by:385
Symbol 377 GraphicUsed by:380
Symbol 378 GraphicUsed by:380
Symbol 379 GraphicUsed by:380
Symbol 380 MovieClipUses:377 378 379Used by:385
Symbol 381 GraphicUsed by:384
Symbol 382 GraphicUsed by:384
Symbol 383 GraphicUsed by:384
Symbol 384 MovieClipUses:381 382 383Used by:385
Symbol 385 MovieClip {FaceTouch_fla.f_214}Uses:372 376 380 384Used by:471
Symbol 386 GraphicUsed by:389
Symbol 387 GraphicUsed by:389
Symbol 388 GraphicUsed by:389
Symbol 389 MovieClipUses:386 387 388Used by:402
Symbol 390 GraphicUsed by:393
Symbol 391 GraphicUsed by:393
Symbol 392 GraphicUsed by:393
Symbol 393 MovieClipUses:390 391 392Used by:402
Symbol 394 GraphicUsed by:397
Symbol 395 GraphicUsed by:397
Symbol 396 GraphicUsed by:397
Symbol 397 MovieClipUses:394 395 396Used by:402
Symbol 398 GraphicUsed by:401
Symbol 399 GraphicUsed by:401
Symbol 400 GraphicUsed by:401
Symbol 401 MovieClipUses:398 399 400Used by:402
Symbol 402 MovieClip {FaceTouch_fla.f_219}Uses:389 393 397 401Used by:471
Symbol 403 GraphicUsed by:406
Symbol 404 GraphicUsed by:406
Symbol 405 GraphicUsed by:406
Symbol 406 MovieClipUses:403 404 405Used by:419
Symbol 407 GraphicUsed by:410
Symbol 408 GraphicUsed by:410
Symbol 409 GraphicUsed by:410
Symbol 410 MovieClipUses:407 408 409Used by:419
Symbol 411 GraphicUsed by:414
Symbol 412 GraphicUsed by:414
Symbol 413 GraphicUsed by:414
Symbol 414 MovieClipUses:411 412 413Used by:419
Symbol 415 GraphicUsed by:418
Symbol 416 GraphicUsed by:418
Symbol 417 GraphicUsed by:418
Symbol 418 MovieClipUses:415 416 417Used by:419
Symbol 419 MovieClip {FaceTouch_fla.f_224}Uses:406 410 414 418Used by:471
Symbol 420 GraphicUsed by:423
Symbol 421 GraphicUsed by:423
Symbol 422 GraphicUsed by:423
Symbol 423 MovieClipUses:420 421 422Used by:436
Symbol 424 GraphicUsed by:427
Symbol 425 GraphicUsed by:427
Symbol 426 GraphicUsed by:427
Symbol 427 MovieClipUses:424 425 426Used by:436
Symbol 428 GraphicUsed by:431
Symbol 429 GraphicUsed by:431
Symbol 430 GraphicUsed by:431
Symbol 431 MovieClipUses:428 429 430Used by:436
Symbol 432 GraphicUsed by:435
Symbol 433 GraphicUsed by:435
Symbol 434 GraphicUsed by:435
Symbol 435 MovieClipUses:432 433 434Used by:436
Symbol 436 MovieClip {FaceTouch_fla.f_229}Uses:423 427 431 435Used by:471
Symbol 437 GraphicUsed by:440
Symbol 438 GraphicUsed by:440
Symbol 439 GraphicUsed by:440
Symbol 440 MovieClipUses:437 438 439Used by:453
Symbol 441 GraphicUsed by:444
Symbol 442 GraphicUsed by:444
Symbol 443 GraphicUsed by:444
Symbol 444 MovieClipUses:441 442 443Used by:453
Symbol 445 GraphicUsed by:448
Symbol 446 GraphicUsed by:448
Symbol 447 GraphicUsed by:448
Symbol 448 MovieClipUses:445 446 447Used by:453
Symbol 449 GraphicUsed by:452
Symbol 450 GraphicUsed by:452
Symbol 451 GraphicUsed by:452
Symbol 452 MovieClipUses:449 450 451Used by:453
Symbol 453 MovieClip {FaceTouch_fla.f_234}Uses:440 444 448 452Used by:471
Symbol 454 GraphicUsed by:457
Symbol 455 GraphicUsed by:457
Symbol 456 GraphicUsed by:457
Symbol 457 MovieClipUses:454 455 456Used by:470
Symbol 458 GraphicUsed by:461
Symbol 459 GraphicUsed by:461
Symbol 460 GraphicUsed by:461
Symbol 461 MovieClipUses:458 459 460Used by:470
Symbol 462 GraphicUsed by:465
Symbol 463 GraphicUsed by:465
Symbol 464 GraphicUsed by:465
Symbol 465 MovieClipUses:462 463 464Used by:470
Symbol 466 GraphicUsed by:469
Symbol 467 GraphicUsed by:469
Symbol 468 GraphicUsed by:469
Symbol 469 MovieClipUses:466 467 468Used by:470
Symbol 470 MovieClip {FaceTouch_fla.f_239}Uses:457 461 465 469Used by:471
Symbol 471 MovieClip {FaceTouch_fla.f_162}Uses:206 226 246 266 283 300 317 334 351 368 385 402 419 436 453 470Used by:472
Symbol 472 MovieClip {FaceTouch_fla.f_161}Uses:186 471Used by:503
Symbol 473 GraphicUsed by:474
Symbol 474 MovieClipUses:473Used by:475
Symbol 475 MovieClipUses:474Used by:503
Symbol 476 GraphicUsed by:479
Symbol 477 GraphicUsed by:479
Symbol 478 GraphicUsed by:479
Symbol 479 MovieClipUses:476 477 478Used by:503
Symbol 480 GraphicUsed by:483
Symbol 481 GraphicUsed by:483
Symbol 482 GraphicUsed by:483
Symbol 483 ButtonUses:480 180 481 482 179Used by:503
Symbol 484 GraphicUsed by:487
Symbol 485 GraphicUsed by:487
Symbol 486 GraphicUsed by:487
Symbol 487 ButtonUses:484 180 485 486 179Used by:503
Symbol 488 GraphicUsed by:491
Symbol 489 GraphicUsed by:491
Symbol 490 GraphicUsed by:491
Symbol 491 ButtonUses:488 489 490Used by:503
Symbol 492 BitmapUsed by:493
Symbol 493 GraphicUses:492Used by:494
Symbol 494 ButtonUses:493Used by:503
Symbol 495 EditableTextUses:128Used by:503
Symbol 496 GraphicUsed by:498
Symbol 497 GraphicUsed by:498
Symbol 498 ButtonUses:496 497Used by:502
Symbol 499 GraphicUsed by:501
Symbol 500 GraphicUsed by:501
Symbol 501 ButtonUses:499 500Used by:502
Symbol 502 MovieClip {FaceTouch_fla.Timeline_147}Uses:498 501Used by:503 565
Symbol 503 MovieClip {Cover}Uses:185 472 475 479 483 487 491 175 494 495 131 502
Symbol 504 GraphicUsed by:527 529 536
Symbol 505 GraphicUsed by:508
Symbol 506 GraphicUsed by:508
Symbol 507 GraphicUsed by:508
Symbol 508 ButtonUses:180 505 506 179 507Used by:527 529
Symbol 509 GraphicUsed by:527 529 536
Symbol 510 GraphicUsed by:520
Symbol 511 GraphicUsed by:520
Symbol 512 GraphicUsed by:520
Symbol 513 GraphicUsed by:520
Symbol 514 GraphicUsed by:520
Symbol 515 GraphicUsed by:520
Symbol 516 GraphicUsed by:520
Symbol 517 GraphicUsed by:520
Symbol 518 GraphicUsed by:520
Symbol 519 GraphicUsed by:520
Symbol 520 MovieClip {FaceTouch_fla.J_154}Uses:510 511 512 513 514 515 516 517 518 519Used by:527 529 536
Symbol 521 GraphicUsed by:527
Symbol 522 GraphicUsed by:525
Symbol 523 GraphicUsed by:525
Symbol 524 GraphicUsed by:525
Symbol 525 ButtonUses:180 522 523 179 524Used by:527 529
Symbol 526 GraphicUsed by:527
Symbol 527 MovieClip {Endmc}Uses:504 508 509 520 521 525 175 526
Symbol 528 GraphicUsed by:529
Symbol 529 MovieClip {Gameovermc}Uses:504 508 509 520 525 175 528
Symbol 530 GraphicUsed by:533
Symbol 531 GraphicUsed by:533
Symbol 532 GraphicUsed by:533
Symbol 533 ButtonUses:530 180 531 532 179Used by:536
Symbol 534 GraphicUsed by:536
Symbol 535 GraphicUsed by:536
Symbol 536 MovieClip {Winmc}Uses:504 183 533 509 520 534 175 535
Symbol 537 GraphicUsed by:565
Symbol 538 GraphicUsed by:548
Symbol 539 GraphicUsed by:548
Symbol 540 GraphicUsed by:548
Symbol 541 GraphicUsed by:548
Symbol 542 GraphicUsed by:548
Symbol 543 GraphicUsed by:548
Symbol 544 GraphicUsed by:548
Symbol 545 GraphicUsed by:548
Symbol 546 GraphicUsed by:548
Symbol 547 GraphicUsed by:548
Symbol 548 MovieClip {Score}Uses:538 539 540 541 542 543 544 545 546 547Used by:565
Symbol 549 GraphicUsed by:565
Symbol 550 GraphicUsed by:553
Symbol 551 GraphicUsed by:553
Symbol 552 GraphicUsed by:553
Symbol 553 ButtonUses:550 551 552Used by:565
Symbol 554 GraphicUsed by:556
Symbol 555 GraphicUsed by:556
Symbol 556 ButtonUses:554 555Used by:560
Symbol 557 GraphicUsed by:559
Symbol 558 GraphicUsed by:559
Symbol 559 ButtonUses:557 558Used by:560
Symbol 560 MovieClip {FaceTouch_fla.Timeline_143}Uses:556 559Used by:565
Symbol 561 GraphicUsed by:563
Symbol 562 GraphicUsed by:563
Symbol 563 ButtonUses:561 562Used by:565
Symbol 564 GraphicUsed by:565
Symbol 565 MovieClip {Gameui}Uses:537 548 549 553 560 563 502 564
Symbol 566 GraphicUsed by:576
Symbol 567 GraphicUsed by:576
Symbol 568 GraphicUsed by:576
Symbol 569 GraphicUsed by:576
Symbol 570 GraphicUsed by:576
Symbol 571 GraphicUsed by:576
Symbol 572 GraphicUsed by:576
Symbol 573 GraphicUsed by:576
Symbol 574 GraphicUsed by:576
Symbol 575 GraphicUsed by:576
Symbol 576 MovieClip {FaceTouch_fla.combo_139}Uses:566 567 568 569 570 571 572 573 574 575Used by:578
Symbol 577 GraphicUsed by:578
Symbol 578 MovieClip {ComboMC}Uses:576 577
Symbol 579 GraphicUsed by:580
Symbol 580 MovieClip {Levelup}Uses:579
Symbol 581 GraphicUsed by:582
Symbol 582 MovieClipUses:581Used by:601 711 728 745
Symbol 583 GraphicUsed by:586
Symbol 584 GraphicUsed by:586
Symbol 585 GraphicUsed by:586
Symbol 586 MovieClip {FaceTouch_fla.Timeline_134}Uses:583 584 585Used by:601
Symbol 587 BitmapUsed by:588
Symbol 588 GraphicUses:587Used by:601 711 728 745
Symbol 589 GraphicUsed by:592
Symbol 590 GraphicUsed by:592
Symbol 591 GraphicUsed by:592
Symbol 592 MovieClipUses:589 590 591Used by:601 901
Symbol 593 GraphicUsed by:596
Symbol 594 GraphicUsed by:596
Symbol 595 GraphicUsed by:596
Symbol 596 MovieClip {FaceTouch_fla.Timeline_135}Uses:593 594 595Used by:601
Symbol 597 GraphicUsed by:600
Symbol 598 GraphicUsed by:600
Symbol 599 GraphicUsed by:600
Symbol 600 MovieClip {FaceTouch_fla.Timeline_136}Uses:597 598 599Used by:601
Symbol 601 MovieClip {Y0}Uses:582 586 588 592 596 600
Symbol 602 GraphicUsed by:603
Symbol 603 MovieClipUses:602Used by:622 639 926 939
Symbol 604 GraphicUsed by:607
Symbol 605 GraphicUsed by:607
Symbol 606 GraphicUsed by:607
Symbol 607 MovieClip {FaceTouch_fla.Timeline_130}Uses:604 605 606Used by:622
Symbol 608 BitmapUsed by:609
Symbol 609 GraphicUses:608Used by:622 639 926 939
Symbol 610 GraphicUsed by:613
Symbol 611 GraphicUsed by:613
Symbol 612 GraphicUsed by:613
Symbol 613 MovieClip {FaceTouch_fla.Timeline_47}Uses:610 611 612Used by:622 901
Symbol 614 GraphicUsed by:617
Symbol 615 GraphicUsed by:617
Symbol 616 GraphicUsed by:617
Symbol 617 MovieClip {FaceTouch_fla.Timeline_131}Uses:614 615 616Used by:622
Symbol 618 GraphicUsed by:621
Symbol 619 GraphicUsed by:621
Symbol 620 GraphicUsed by:621
Symbol 621 MovieClip {FaceTouch_fla.Timeline_132}Uses:618 619 620Used by:622
Symbol 622 MovieClip {R6}Uses:603 607 609 613 617 621
Symbol 623 GraphicUsed by:626
Symbol 624 GraphicUsed by:626
Symbol 625 GraphicUsed by:626
Symbol 626 MovieClip {FaceTouch_fla.Timeline_126}Uses:623 624 625Used by:639
Symbol 627 GraphicUsed by:630
Symbol 628 GraphicUsed by:630
Symbol 629 GraphicUsed by:630
Symbol 630 MovieClipUses:627 628 629Used by:639 901
Symbol 631 GraphicUsed by:634
Symbol 632 GraphicUsed by:634
Symbol 633 GraphicUsed by:634
Symbol 634 MovieClip {FaceTouch_fla.Timeline_127}Uses:631 632 633Used by:639
Symbol 635 GraphicUsed by:638
Symbol 636 GraphicUsed by:638
Symbol 637 GraphicUsed by:638
Symbol 638 MovieClip {FaceTouch_fla.Timeline_128}Uses:635 636 637Used by:639
Symbol 639 MovieClip {Y6}Uses:603 626 609 630 634 638
Symbol 640 GraphicUsed by:641
Symbol 641 MovieClipUses:640Used by:660 677 694 762
Symbol 642 GraphicUsed by:645
Symbol 643 GraphicUsed by:645
Symbol 644 GraphicUsed by:645
Symbol 645 MovieClip {FaceTouch_fla.Timeline_122}Uses:642 643 644Used by:660
Symbol 646 BitmapUsed by:647
Symbol 647 GraphicUses:646Used by:660 677 694 762
Symbol 648 GraphicUsed by:651
Symbol 649 GraphicUsed by:651
Symbol 650 GraphicUsed by:651
Symbol 651 MovieClipUses:648 649 650Used by:660 901
Symbol 652 GraphicUsed by:655
Symbol 653 GraphicUsed by:655
Symbol 654 GraphicUsed by:655
Symbol 655 MovieClip {FaceTouch_fla.Timeline_123}Uses:652 653 654Used by:660
Symbol 656 GraphicUsed by:659
Symbol 657 GraphicUsed by:659
Symbol 658 GraphicUsed by:659
Symbol 659 MovieClip {FaceTouch_fla.Timeline_124}Uses:656 657 658Used by:660
Symbol 660 MovieClip {R8}Uses:641 645 647 651 655 659
Symbol 661 GraphicUsed by:664
Symbol 662 GraphicUsed by:664
Symbol 663 GraphicUsed by:664
Symbol 664 MovieClip {FaceTouch_fla.Timeline_118}Uses:661 662 663Used by:677
Symbol 665 GraphicUsed by:668
Symbol 666 GraphicUsed by:668
Symbol 667 GraphicUsed by:668
Symbol 668 MovieClipUses:665 666 667Used by:677 901
Symbol 669 GraphicUsed by:672
Symbol 670 GraphicUsed by:672
Symbol 671 GraphicUsed by:672
Symbol 672 MovieClip {FaceTouch_fla.Timeline_119}Uses:669 670 671Used by:677
Symbol 673 GraphicUsed by:676
Symbol 674 GraphicUsed by:676
Symbol 675 GraphicUsed by:676
Symbol 676 MovieClip {FaceTouch_fla.Timeline_120}Uses:673 674 675Used by:677
Symbol 677 MovieClip {B8}Uses:641 664 647 668 672 676
Symbol 678 GraphicUsed by:681
Symbol 679 GraphicUsed by:681
Symbol 680 GraphicUsed by:681
Symbol 681 MovieClip {FaceTouch_fla.Timeline_114}Uses:678 679 680Used by:694
Symbol 682 GraphicUsed by:685
Symbol 683 GraphicUsed by:685
Symbol 684 GraphicUsed by:685
Symbol 685 MovieClipUses:682 683 684Used by:694 901
Symbol 686 GraphicUsed by:689
Symbol 687 GraphicUsed by:689
Symbol 688 GraphicUsed by:689
Symbol 689 MovieClip {FaceTouch_fla.Timeline_115}Uses:686 687 688Used by:694
Symbol 690 GraphicUsed by:693
Symbol 691 GraphicUsed by:693
Symbol 692 GraphicUsed by:693
Symbol 693 MovieClip {FaceTouch_fla.Timeline_116}Uses:690 691 692Used by:694
Symbol 694 MovieClip {Y8}Uses:641 681 647 685 689 693
Symbol 695 GraphicUsed by:698
Symbol 696 GraphicUsed by:698
Symbol 697 GraphicUsed by:698
Symbol 698 MovieClip {FaceTouch_fla.Timeline_110}Uses:695 696 697Used by:711
Symbol 699 GraphicUsed by:702
Symbol 700 GraphicUsed by:702
Symbol 701 GraphicUsed by:702
Symbol 702 MovieClipUses:699 700 701Used by:711 901
Symbol 703 GraphicUsed by:706
Symbol 704 GraphicUsed by:706
Symbol 705 GraphicUsed by:706
Symbol 706 MovieClip {FaceTouch_fla.Timeline_111}Uses:703 704 705Used by:711
Symbol 707 GraphicUsed by:710
Symbol 708 GraphicUsed by:710
Symbol 709 GraphicUsed by:710
Symbol 710 MovieClip {FaceTouch_fla.Timeline_112}Uses:707 708 709Used by:711
Symbol 711 MovieClip {R0}Uses:582 698 588 702 706 710
Symbol 712 GraphicUsed by:715
Symbol 713 GraphicUsed by:715
Symbol 714 GraphicUsed by:715
Symbol 715 MovieClip {FaceTouch_fla.Timeline_106}Uses:712 713 714Used by:728
Symbol 716 GraphicUsed by:719
Symbol 717 GraphicUsed by:719
Symbol 718 GraphicUsed by:719
Symbol 719 MovieClipUses:716 717 718Used by:728 901
Symbol 720 GraphicUsed by:723
Symbol 721 GraphicUsed by:723
Symbol 722 GraphicUsed by:723
Symbol 723 MovieClip {FaceTouch_fla.Timeline_107}Uses:720 721 722Used by:728
Symbol 724 GraphicUsed by:727
Symbol 725 GraphicUsed by:727
Symbol 726 GraphicUsed by:727
Symbol 727 MovieClip {FaceTouch_fla.Timeline_108}Uses:724 725 726Used by:728
Symbol 728 MovieClip {B0}Uses:582 715 588 719 723 727
Symbol 729 GraphicUsed by:732
Symbol 730 GraphicUsed by:732
Symbol 731 GraphicUsed by:732
Symbol 732 MovieClip {FaceTouch_fla.Timeline_102}Uses:729 730 731Used by:745
Symbol 733 GraphicUsed by:736
Symbol 734 GraphicUsed by:736
Symbol 735 GraphicUsed by:736
Symbol 736 MovieClipUses:733 734 735Used by:745 901
Symbol 737 GraphicUsed by:740
Symbol 738 GraphicUsed by:740
Symbol 739 GraphicUsed by:740
Symbol 740 MovieClip {FaceTouch_fla.Timeline_103}Uses:737 738 739Used by:745
Symbol 741 GraphicUsed by:744
Symbol 742 GraphicUsed by:744
Symbol 743 GraphicUsed by:744
Symbol 744 MovieClip {FaceTouch_fla.Timeline_104}Uses:741 742 743Used by:745
Symbol 745 MovieClip {G0}Uses:582 732 588 736 740 744
Symbol 746 GraphicUsed by:749
Symbol 747 GraphicUsed by:749
Symbol 748 GraphicUsed by:749
Symbol 749 MovieClip {FaceTouch_fla.Timeline_97}Uses:746 747 748Used by:762
Symbol 750 GraphicUsed by:753
Symbol 751 GraphicUsed by:753
Symbol 752 GraphicUsed by:753
Symbol 753 MovieClipUses:750 751 752Used by:762 901
Symbol 754 GraphicUsed by:757
Symbol 755 GraphicUsed by:757
Symbol 756 GraphicUsed by:757
Symbol 757 MovieClip {FaceTouch_fla.Timeline_98}Uses:754 755 756Used by:762
Symbol 758 GraphicUsed by:761
Symbol 759 GraphicUsed by:761
Symbol 760 GraphicUsed by:761
Symbol 761 MovieClip {FaceTouch_fla.Timeline_99}Uses:758 759 760Used by:762
Symbol 762 MovieClip {G8}Uses:641 749 647 753 757 761
Symbol 763 GraphicUsed by:764
Symbol 764 MovieClipUses:763Used by:787 807 826 845
Symbol 765 GraphicUsed by:768
Symbol 766 GraphicUsed by:768
Symbol 767 GraphicUsed by:768
Symbol 768 MovieClip {FaceTouch_fla.Timeline_92}Uses:765 766 767Used by:787
Symbol 769 BitmapUsed by:770
Symbol 770 GraphicUses:769Used by:787 807 826 845
Symbol 771 GraphicUsed by:778
Symbol 772 MovieClipUses:81 82 83Used by:778 782 798 802 818 822 837 841
Symbol 773 GraphicUsed by:778
Symbol 774 GraphicUsed by:778
Symbol 775 GraphicUsed by:778
Symbol 776 GraphicUsed by:778
Symbol 777 GraphicUsed by:778
Symbol 778 MovieClip {FaceTouch_fla.Timeline_39}Uses:771 772 773 774 775 776 777Used by:787 901
Symbol 779 GraphicUsed by:782
Symbol 780 GraphicUsed by:782
Symbol 781 GraphicUsed by:782
Symbol 782 MovieClip {FaceTouch_fla.Timeline_93}Uses:779 772 780 781Used by:787
Symbol 783 GraphicUsed by:786
Symbol 784 GraphicUsed by:786
Symbol 785 GraphicUsed by:786
Symbol 786 MovieClip {FaceTouch_fla.Timeline_94}Uses:783 784 785Used by:787
Symbol 787 MovieClip {G4}Uses:764 768 770 778 782 786
Symbol 788 GraphicUsed by:791
Symbol 789 GraphicUsed by:791
Symbol 790 GraphicUsed by:791
Symbol 791 MovieClip {FaceTouch_fla.Timeline_88}Uses:788 789 790Used by:807
Symbol 792 GraphicUsed by:798
Symbol 793 GraphicUsed by:798
Symbol 794 GraphicUsed by:798
Symbol 795 GraphicUsed by:798
Symbol 796 GraphicUsed by:798
Symbol 797 GraphicUsed by:798
Symbol 798 MovieClip {FaceTouch_fla.Timeline_40}Uses:792 772 793 794 795 796 797Used by:807 901
Symbol 799 GraphicUsed by:802
Symbol 800 GraphicUsed by:802
Symbol 801 GraphicUsed by:802
Symbol 802 MovieClip {FaceTouch_fla.Timeline_89}Uses:799 772 800 801Used by:807
Symbol 803 GraphicUsed by:806
Symbol 804 GraphicUsed by:806
Symbol 805 GraphicUsed by:806
Symbol 806 MovieClip {FaceTouch_fla.Timeline_90}Uses:803 804 805Used by:807
Symbol 807 MovieClip {B4}Uses:764 791 770 798 802 806
Symbol 808 GraphicUsed by:811
Symbol 809 GraphicUsed by:811
Symbol 810 GraphicUsed by:811
Symbol 811 MovieClip {FaceTouch_fla.Timeline_84}Uses:808 809 810Used by:826
Symbol 812 GraphicUsed by:818
Symbol 813 GraphicUsed by:818
Symbol 814 GraphicUsed by:818
Symbol 815 GraphicUsed by:818
Symbol 816 GraphicUsed by:818
Symbol 817 GraphicUsed by:818
Symbol 818 MovieClip {FaceTouch_fla.Timeline_41}Uses:812 772 813 814 815 816 817Used by:826 901
Symbol 819 GraphicUsed by:822
Symbol 820 GraphicUsed by:822
Symbol 821 GraphicUsed by:822
Symbol 822 MovieClip {FaceTouch_fla.Timeline_85}Uses:819 772 820 821Used by:826
Symbol 823 GraphicUsed by:825
Symbol 824 GraphicUsed by:825
Symbol 825 MovieClip {FaceTouch_fla.Timeline_86}Uses:823 65 824Used by:826
Symbol 826 MovieClip {R4}Uses:764 811 770 818 822 825
Symbol 827 GraphicUsed by:830
Symbol 828 GraphicUsed by:830
Symbol 829 GraphicUsed by:830
Symbol 830 MovieClip {FaceTouch_fla.Timeline_80}Uses:827 828 829Used by:845
Symbol 831 GraphicUsed by:837
Symbol 832 GraphicUsed by:837
Symbol 833 GraphicUsed by:837
Symbol 834 GraphicUsed by:837
Symbol 835 GraphicUsed by:837
Symbol 836 GraphicUsed by:837
Symbol 837 MovieClip {FaceTouch_fla.Timeline_37}Uses:831 772 832 833 834 835 836Used by:845 901
Symbol 838 GraphicUsed by:841
Symbol 839 GraphicUsed by:841
Symbol 840 GraphicUsed by:841
Symbol 841 MovieClip {FaceTouch_fla.Timeline_81}Uses:838 772 839 840Used by:845
Symbol 842 GraphicUsed by:844
Symbol 843 GraphicUsed by:844
Symbol 844 MovieClip {FaceTouch_fla.Timeline_82}Uses:842 69 843Used by:845
Symbol 845 MovieClip {Y4}Uses:764 830 770 837 841 844
Symbol 846 GraphicUsed by:863
Symbol 847 GraphicUsed by:848
Symbol 848 MovieClipUses:847Used by:849 856 872
Symbol 849 MovieClipUses:848Used by:863
Symbol 850 GraphicUsed by:863
Symbol 851 GraphicUsed by:852
Symbol 852 MovieClipUses:851Used by:853
Symbol 853 MovieClipUses:852Used by:854
Symbol 854 MovieClipUses:853Used by:863 891
Symbol 855 GraphicUsed by:863
Symbol 856 MovieClipUses:848Used by:863
Symbol 857 GraphicUsed by:863
Symbol 858 GraphicUsed by:863
Symbol 859 GraphicUsed by:863
Symbol 860 GraphicUsed by:863
Symbol 861 GraphicUsed by:863
Symbol 862 GraphicUsed by:863
Symbol 863 MovieClip {Fan2}Uses:846 849 850 854 855 856 857 858 859 860 861 862 34 35
Symbol 864 GraphicUsed by:865
Symbol 865 MovieClipUses:864Used by:868
Symbol 866 GraphicUsed by:867
Symbol 867 MovieClipUses:866Used by:868
Symbol 868 MovieClipUses:865 867Used by:870
Symbol 869 GraphicUsed by:870
Symbol 870 MovieClip {Fanmask2}Uses:868 869
Symbol 871 GraphicUsed by:891
Symbol 872 MovieClipUses:848Used by:891
Symbol 873 GraphicUsed by:891
Symbol 874 GraphicUsed by:891
Symbol 875 GraphicUsed by:882
Symbol 876 GraphicUsed by:882
Symbol 877 GraphicUsed by:878
Symbol 878 MovieClipUses:877Used by:882
Symbol 879 GraphicUsed by:882
Symbol 880 GraphicUsed by:881
Symbol 881 MovieClipUses:880Used by:882
Symbol 882 MovieClip {FaceTouch_fla.2_64}Uses:875 876 878 879 881Used by:891
Symbol 883 GraphicUsed by:887
Symbol 884 GraphicUsed by:887
Symbol 885 GraphicUsed by:886
Symbol 886 MovieClipUses:885Used by:887 890
Symbol 887 MovieClipUses:883 884 886Used by:891
Symbol 888 GraphicUsed by:890
Symbol 889 GraphicUsed by:890
Symbol 890 MovieClipUses:888 886 889Used by:891
Symbol 891 MovieClip {Fan1}Uses:871 872 873 854 874 882 887 890 35 34
Symbol 892 GraphicUsed by:913
Symbol 893 GraphicUsed by:896
Symbol 894 GraphicUsed by:896
Symbol 895 GraphicUsed by:896
Symbol 896 MovieClipUses:893 894 895Used by:901 926
Symbol 897 GraphicUsed by:900
Symbol 898 GraphicUsed by:900
Symbol 899 GraphicUsed by:900
Symbol 900 MovieClipUses:897 898 899Used by:901 939
Symbol 901 MovieClipUses:837 778 798 818 736 592 702 719 896 630 613 900 668 651 753 685Used by:902
Symbol 902 MovieClipUses:901Used by:913
Symbol 903 GraphicUsed by:913
Symbol 904 GraphicUsed by:905
Symbol 905 MovieClipUses:904Used by:907 911
Symbol 906 GraphicUsed by:907
Symbol 907 MovieClipUses:905 906 34Used by:913
Symbol 908 GraphicUsed by:911
Symbol 909 GraphicUsed by:910
Symbol 910 MovieClip {yuan}Uses:909Used by:911
Symbol 911 MovieClipUses:905 908 910Used by:913
Symbol 912 MovieClipUses:34Used by:913
Symbol 913 MovieClip {HexagonMC}Uses:892 902 903 907 911 912 42
Symbol 914 GraphicUsed by:917
Symbol 915 GraphicUsed by:917
Symbol 916 GraphicUsed by:917
Symbol 917 MovieClip {FaceTouch_fla.Timeline_30}Uses:914 915 916Used by:926
Symbol 918 GraphicUsed by:921
Symbol 919 GraphicUsed by:921
Symbol 920 GraphicUsed by:921
Symbol 921 MovieClip {FaceTouch_fla.Timeline_32}Uses:918 919 920Used by:926
Symbol 922 GraphicUsed by:925
Symbol 923 GraphicUsed by:925
Symbol 924 GraphicUsed by:925
Symbol 925 MovieClip {FaceTouch_fla.Timeline_33}Uses:922 923 924Used by:926
Symbol 926 MovieClip {B6}Uses:603 917 609 896 921 925
Symbol 927 GraphicUsed by:930
Symbol 928 GraphicUsed by:930
Symbol 929 GraphicUsed by:930
Symbol 930 MovieClip {FaceTouch_fla.Timeline_25}Uses:927 928 929Used by:939
Symbol 931 GraphicUsed by:934
Symbol 932 GraphicUsed by:934
Symbol 933 GraphicUsed by:934
Symbol 934 MovieClip {FaceTouch_fla.Timeline_27}Uses:931 932 933Used by:939
Symbol 935 GraphicUsed by:938
Symbol 936 GraphicUsed by:938
Symbol 937 GraphicUsed by:938
Symbol 938 MovieClip {FaceTouch_fla.Timeline_28}Uses:935 936 937Used by:939
Symbol 939 MovieClip {G6}Uses:603 930 609 900 934 938
Symbol 940 MovieClip {BurstMC}
Symbol 941 GraphicUsed by:993
Symbol 942 BitmapUsed by:943
Symbol 943 GraphicUses:942Used by:944
Symbol 944 MovieClipUses:943Used by:993
Symbol 945 GraphicUsed by:946
Symbol 946 MovieClipUses:945Used by:993
Symbol 947 GraphicUsed by:948
Symbol 948 MovieClipUses:947Used by:949
Symbol 949 MovieClipUses:948Used by:993
Symbol 950 GraphicUsed by:961
Symbol 951 GraphicUsed by:961
Symbol 952 GraphicUsed by:961
Symbol 953 GraphicUsed by:961
Symbol 954 GraphicUsed by:961
Symbol 955 GraphicUsed by:961
Symbol 956 GraphicUsed by:961
Symbol 957 GraphicUsed by:961
Symbol 958 GraphicUsed by:961
Symbol 959 GraphicUsed by:961
Symbol 960 GraphicUsed by:961
Symbol 961 MovieClipUses:950 951 952 953 954 955 956 957 958 959 960Used by:993
Symbol 962 GraphicUsed by:963
Symbol 963 MovieClipUses:962Used by:993
Symbol 964 GraphicUsed by:993
Symbol 965 SoundUsed by:993
Symbol 966 GraphicUsed by:971
Symbol 967 GraphicUsed by:971
Symbol 968 BitmapUsed by:969
Symbol 969 GraphicUses:968Used by:970
Symbol 970 MovieClipUses:969Used by:971
Symbol 971 MovieClip {FaceTouch_fla.flag_11}Uses:966 967 970Used by:974
Symbol 972 BitmapUsed by:973
Symbol 973 GraphicUses:972Used by:974
Symbol 974 MovieClipUses:971 973Used by:993
Symbol 975 BitmapUsed by:976
Symbol 976 GraphicUses:975Used by:977
Symbol 977 MovieClipUses:976Used by:978
Symbol 978 MovieClip {FaceTouch_fla.logo_13}Uses:977Used by:993
Symbol 979 ShapeTweeningUsed by:993
Symbol 980 BitmapUsed by:981
Symbol 981 GraphicUses:980Used by:982 984
Symbol 982 ButtonUses:981Used by:993
Symbol 983 GraphicUsed by:993
Symbol 984 MovieClipUses:981Used by:993
Symbol 985 GraphicUsed by:988
Symbol 986 ShapeTweeningUsed by:988
Symbol 987 GraphicUsed by:988
Symbol 988 MovieClip {FaceTouch_fla.blik_17}Uses:985 986 987Used by:993
Symbol 989 GraphicUsed by:990
Symbol 990 MovieClipUses:989Used by:991
Symbol 991 MovieClipUses:990Used by:992
Symbol 992 MovieClip {FaceTouch_fla.stars_18}Uses:991Used by:993
Symbol 993 MovieClip {FaceTouch_fla.splash_clouds_3}Uses:941 944 946 949 961 963 964 965 974 978 979 982 983 984 988 992Used by:Timeline

Instance Names

"barbot"Frame 1Symbol 4 MovieClip
"bar"Frame 1Symbol 6 MovieClip
"splash"Frame 2Symbol 993 MovieClip {FaceTouch_fla.splash_clouds_3}
"left"Symbol 36 MovieClip {Boxstage1} Frame 1Symbol 35 MovieClip
"right"Symbol 36 MovieClip {Boxstage1} Frame 1Symbol 35 MovieClip
"submit_btn"Symbol 117 MovieClip {Submitmc} Frame 1Symbol 109 Button
"no_btn"Symbol 117 MovieClip {Submitmc} Frame 1Symbol 113 Button
"logo_btn"Symbol 117 MovieClip {Submitmc} Frame 1Symbol 116 Button
"login_btn"Symbol 132 MovieClip {Loginmc} Frame 1Symbol 123 Button
"play_btn"Symbol 132 MovieClip {Loginmc} Frame 1Symbol 127 Button
"input"Symbol 132 MovieClip {Loginmc} Frame 1Symbol 129 EditableText
"stage1"Symbol 176 MovieClip {Selectstage} Frame 1Symbol 139 Button
"stage2"Symbol 176 MovieClip {Selectstage} Frame 1Symbol 143 Button
"stage3"Symbol 176 MovieClip {Selectstage} Frame 1Symbol 147 Button
"stage4"Symbol 176 MovieClip {Selectstage} Frame 1Symbol 151 Button
"stage5"Symbol 176 MovieClip {Selectstage} Frame 1Symbol 155 Button
"stage6"Symbol 176 MovieClip {Selectstage} Frame 1Symbol 159 Button
"s1"Symbol 176 MovieClip {Selectstage} Frame 1Symbol 167 MovieClip {FaceTouch_fla.Timeline_267}
"s2"Symbol 176 MovieClip {Selectstage} Frame 1Symbol 167 MovieClip {FaceTouch_fla.Timeline_267}
"s3"Symbol 176 MovieClip {Selectstage} Frame 1Symbol 167 MovieClip {FaceTouch_fla.Timeline_267}
"s4"Symbol 176 MovieClip {Selectstage} Frame 1Symbol 167 MovieClip {FaceTouch_fla.Timeline_267}
"s5"Symbol 176 MovieClip {Selectstage} Frame 1Symbol 167 MovieClip {FaceTouch_fla.Timeline_267}
"s6"Symbol 176 MovieClip {Selectstage} Frame 1Symbol 167 MovieClip {FaceTouch_fla.Timeline_267}
"back_btn"Symbol 176 MovieClip {Selectstage} Frame 1Symbol 171 Button
"moregame_btn"Symbol 176 MovieClip {Selectstage} Frame 1Symbol 175 Button
"play_btn"Symbol 184 MovieClip {Howtoplay} Frame 1Symbol 183 Button
"moregame_btn"Symbol 184 MovieClip {Howtoplay} Frame 1Symbol 175 Button
"aa"Symbol 471 MovieClip {FaceTouch_fla.f_162} Frame 1Symbol 206 MovieClip {FaceTouch_fla.f_163}
"aa"Symbol 471 MovieClip {FaceTouch_fla.f_162} Frame 2Symbol 226 MovieClip {FaceTouch_fla.f_169}
"aa"Symbol 471 MovieClip {FaceTouch_fla.f_162} Frame 3Symbol 246 MovieClip {FaceTouch_fla.f_174}
"aa"Symbol 471 MovieClip {FaceTouch_fla.f_162} Frame 4Symbol 266 MovieClip {FaceTouch_fla.f_179}
"aa"Symbol 471 MovieClip {FaceTouch_fla.f_162} Frame 5Symbol 283 MovieClip {FaceTouch_fla.f_184}
"aa"Symbol 471 MovieClip {FaceTouch_fla.f_162} Frame 6Symbol 300 MovieClip {FaceTouch_fla.f_189}
"aa"Symbol 471 MovieClip {FaceTouch_fla.f_162} Frame 7Symbol 317 MovieClip {FaceTouch_fla.f_194}
"aa"Symbol 471 MovieClip {FaceTouch_fla.f_162} Frame 8Symbol 334 MovieClip {FaceTouch_fla.f_199}
"aa"Symbol 471 MovieClip {FaceTouch_fla.f_162} Frame 9Symbol 351 MovieClip {FaceTouch_fla.f_204}
"aa"Symbol 471 MovieClip {FaceTouch_fla.f_162} Frame 10Symbol 368 MovieClip {FaceTouch_fla.f_209}
"aa"Symbol 471 MovieClip {FaceTouch_fla.f_162} Frame 11Symbol 385 MovieClip {FaceTouch_fla.f_214}
"aa"Symbol 471 MovieClip {FaceTouch_fla.f_162} Frame 12Symbol 402 MovieClip {FaceTouch_fla.f_219}
"aa"Symbol 471 MovieClip {FaceTouch_fla.f_162} Frame 13Symbol 419 MovieClip {FaceTouch_fla.f_224}
"aa"Symbol 471 MovieClip {FaceTouch_fla.f_162} Frame 14Symbol 436 MovieClip {FaceTouch_fla.f_229}
"aa"Symbol 471 MovieClip {FaceTouch_fla.f_162} Frame 15Symbol 453 MovieClip {FaceTouch_fla.f_234}
"aa"Symbol 471 MovieClip {FaceTouch_fla.f_162} Frame 16Symbol 470 MovieClip {FaceTouch_fla.f_239}
"aa"Symbol 472 MovieClip {FaceTouch_fla.f_161} Frame 1Symbol 471 MovieClip {FaceTouch_fla.f_162}
"play_btn"Symbol 503 MovieClip {Cover} Frame 1Symbol 483 Button
"howtoplay_btn"Symbol 503 MovieClip {Cover} Frame 1Symbol 487 Button
"hiscores_btn"Symbol 503 MovieClip {Cover} Frame 1Symbol 491 Button
"moregame_btn"Symbol 503 MovieClip {Cover} Frame 1Symbol 175 Button
"logo_btn"Symbol 503 MovieClip {Cover} Frame 1Symbol 494 Button
"input"Symbol 503 MovieClip {Cover} Frame 1Symbol 495 EditableText
"w"Symbol 503 MovieClip {Cover} Frame 1Symbol 131 MovieClip
"music_btn"Symbol 503 MovieClip {Cover} Frame 1Symbol 502 MovieClip {FaceTouch_fla.Timeline_147}
"retry_btn"Symbol 527 MovieClip {Endmc} Frame 1Symbol 508 Button
"s0"Symbol 527 MovieClip {Endmc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"s1"Symbol 527 MovieClip {Endmc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"s2"Symbol 527 MovieClip {Endmc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"s3"Symbol 527 MovieClip {Endmc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"t1"Symbol 527 MovieClip {Endmc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"t0"Symbol 527 MovieClip {Endmc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"t3"Symbol 527 MovieClip {Endmc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"t2"Symbol 527 MovieClip {Endmc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"menu_btn"Symbol 527 MovieClip {Endmc} Frame 1Symbol 525 Button
"s4"Symbol 527 MovieClip {Endmc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"moregame_btn"Symbol 527 MovieClip {Endmc} Frame 1Symbol 175 Button
"retry_btn"Symbol 529 MovieClip {Gameovermc} Frame 1Symbol 508 Button
"s0"Symbol 529 MovieClip {Gameovermc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"s1"Symbol 529 MovieClip {Gameovermc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"s2"Symbol 529 MovieClip {Gameovermc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"s3"Symbol 529 MovieClip {Gameovermc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"menu_btn"Symbol 529 MovieClip {Gameovermc} Frame 1Symbol 525 Button
"s4"Symbol 529 MovieClip {Gameovermc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"moregame_btn"Symbol 529 MovieClip {Gameovermc} Frame 1Symbol 175 Button
"next_btn"Symbol 536 MovieClip {Winmc} Frame 1Symbol 183 Button
"retry_btn"Symbol 536 MovieClip {Winmc} Frame 1Symbol 533 Button
"s0"Symbol 536 MovieClip {Winmc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"s1"Symbol 536 MovieClip {Winmc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"s2"Symbol 536 MovieClip {Winmc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"s3"Symbol 536 MovieClip {Winmc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"t1"Symbol 536 MovieClip {Winmc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"t0"Symbol 536 MovieClip {Winmc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"t3"Symbol 536 MovieClip {Winmc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"t2"Symbol 536 MovieClip {Winmc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"s4"Symbol 536 MovieClip {Winmc} Frame 1Symbol 520 MovieClip {FaceTouch_fla.J_154}
"moregame_btn"Symbol 536 MovieClip {Winmc} Frame 1Symbol 175 Button
"t0"Symbol 565 MovieClip {Gameui} Frame 1Symbol 548 MovieClip {Score}
"t1"Symbol 565 MovieClip {Gameui} Frame 1Symbol 548 MovieClip {Score}
"t2"Symbol 565 MovieClip {Gameui} Frame 1Symbol 548 MovieClip {Score}
"t3"Symbol 565 MovieClip {Gameui} Frame 1Symbol 548 MovieClip {Score}
"lv1"Symbol 565 MovieClip {Gameui} Frame 1Symbol 548 MovieClip {Score}
"lv0"Symbol 565 MovieClip {Gameui} Frame 1Symbol 548 MovieClip {Score}
"c0"Symbol 565 MovieClip {Gameui} Frame 1Symbol 548 MovieClip {Score}
"c1"Symbol 565 MovieClip {Gameui} Frame 1Symbol 548 MovieClip {Score}
"res_btn"Symbol 565 MovieClip {Gameui} Frame 1Symbol 553 Button
"pause_btn"Symbol 565 MovieClip {Gameui} Frame 1Symbol 560 MovieClip {FaceTouch_fla.Timeline_143}
"menu_btn"Symbol 565 MovieClip {Gameui} Frame 1Symbol 563 Button
"music_btn"Symbol 565 MovieClip {Gameui} Frame 1Symbol 502 MovieClip {FaceTouch_fla.Timeline_147}
"c0"Symbol 578 MovieClip {ComboMC} Frame 1Symbol 576 MovieClip {FaceTouch_fla.combo_139}
"c1"Symbol 578 MovieClip {ComboMC} Frame 1Symbol 576 MovieClip {FaceTouch_fla.combo_139}
"right"Symbol 863 MovieClip {Fan2} Frame 1Symbol 35 MovieClip
"left"Symbol 863 MovieClip {Fan2} Frame 1Symbol 35 MovieClip
"up"Symbol 863 MovieClip {Fan2} Frame 1Symbol 35 MovieClip
"down"Symbol 863 MovieClip {Fan2} Frame 1Symbol 35 MovieClip
"Green"Symbol 891 MovieClip {Fan1} Frame 1Symbol 887 MovieClip
"Red"Symbol 891 MovieClip {Fan1} Frame 1Symbol 890 MovieClip
"down"Symbol 891 MovieClip {Fan1} Frame 1Symbol 35 MovieClip
"up"Symbol 891 MovieClip {Fan1} Frame 1Symbol 35 MovieClip
"left"Symbol 891 MovieClip {Fan1} Frame 1Symbol 35 MovieClip
"right"Symbol 891 MovieClip {Fan1} Frame 1Symbol 35 MovieClip
"aa"Symbol 902 MovieClip Frame 1Symbol 901 MovieClip
"aa"Symbol 913 MovieClip {HexagonMC} Frame 1Symbol 902 MovieClip
"blun"Symbol 913 MovieClip {HexagonMC} Frame 1Symbol 907 MovieClip
"slun"Symbol 913 MovieClip {HexagonMC} Frame 1Symbol 911 MovieClip
"a1"Symbol 913 MovieClip {HexagonMC} Frame 1Symbol 912 MovieClip
"a2"Symbol 913 MovieClip {HexagonMC} Frame 1Symbol 912 MovieClip
"flag_mc"Symbol 971 MovieClip {FaceTouch_fla.flag_11} Frame 1Symbol 970 MovieClip
"logo"Symbol 993 MovieClip {FaceTouch_fla.splash_clouds_3} Frame 16Symbol 978 MovieClip {FaceTouch_fla.logo_13}

Special Tags

FileAttributes (69)Timeline Frame 1Access network only, Metadata present, AS3.
SWFMetaData (77)Timeline Frame 1953 bytes "<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmln ..."
EnableDebugger2 (64)Timeline Frame 131 bytes "..$1$42$smViorTih9OnjQAGgc.hc/."

Labels

"tower"Frame 2
"playgame"Frame 3
"normal"Symbol 601 MovieClip {Y0} Frame 1
"move"Symbol 601 MovieClip {Y0} Frame 2
"wait"Symbol 601 MovieClip {Y0} Frame 3
"die"Symbol 601 MovieClip {Y0} Frame 4
"normal"Symbol 622 MovieClip {R6} Frame 1
"move"Symbol 622 MovieClip {R6} Frame 2
"wait"Symbol 622 MovieClip {R6} Frame 3
"die"Symbol 622 MovieClip {R6} Frame 4
"normal"Symbol 639 MovieClip {Y6} Frame 1
"move"Symbol 639 MovieClip {Y6} Frame 2
"wait"Symbol 639 MovieClip {Y6} Frame 3
"die"Symbol 639 MovieClip {Y6} Frame 4
"normal"Symbol 660 MovieClip {R8} Frame 1
"move"Symbol 660 MovieClip {R8} Frame 2
"wait"Symbol 660 MovieClip {R8} Frame 3
"die"Symbol 660 MovieClip {R8} Frame 4
"normal"Symbol 677 MovieClip {B8} Frame 1
"move"Symbol 677 MovieClip {B8} Frame 2
"wait"Symbol 677 MovieClip {B8} Frame 3
"die"Symbol 677 MovieClip {B8} Frame 4
"normal"Symbol 694 MovieClip {Y8} Frame 1
"move"Symbol 694 MovieClip {Y8} Frame 2
"wait"Symbol 694 MovieClip {Y8} Frame 3
"die"Symbol 694 MovieClip {Y8} Frame 4
"normal"Symbol 711 MovieClip {R0} Frame 1
"move"Symbol 711 MovieClip {R0} Frame 2
"wait"Symbol 711 MovieClip {R0} Frame 3
"die"Symbol 711 MovieClip {R0} Frame 4
"normal"Symbol 728 MovieClip {B0} Frame 1
"move"Symbol 728 MovieClip {B0} Frame 2
"wait"Symbol 728 MovieClip {B0} Frame 3
"die"Symbol 728 MovieClip {B0} Frame 4
"normal"Symbol 745 MovieClip {G0} Frame 1
"move"Symbol 745 MovieClip {G0} Frame 2
"wait"Symbol 745 MovieClip {G0} Frame 3
"die"Symbol 745 MovieClip {G0} Frame 4
"normal"Symbol 762 MovieClip {G8} Frame 1
"move"Symbol 762 MovieClip {G8} Frame 2
"wait"Symbol 762 MovieClip {G8} Frame 3
"die"Symbol 762 MovieClip {G8} Frame 4
"normal"Symbol 787 MovieClip {G4} Frame 1
"move"Symbol 787 MovieClip {G4} Frame 2
"wait"Symbol 787 MovieClip {G4} Frame 3
"die"Symbol 787 MovieClip {G4} Frame 4
"normal"Symbol 807 MovieClip {B4} Frame 1
"move"Symbol 807 MovieClip {B4} Frame 2
"wait"Symbol 807 MovieClip {B4} Frame 3
"die"Symbol 807 MovieClip {B4} Frame 4
"normal"Symbol 826 MovieClip {R4} Frame 1
"move"Symbol 826 MovieClip {R4} Frame 2
"wait"Symbol 826 MovieClip {R4} Frame 3
"die"Symbol 826 MovieClip {R4} Frame 4
"normal"Symbol 845 MovieClip {Y4} Frame 1
"move"Symbol 845 MovieClip {Y4} Frame 2
"wait"Symbol 845 MovieClip {Y4} Frame 3
"die"Symbol 845 MovieClip {Y4} Frame 4
"normal"Symbol 926 MovieClip {B6} Frame 1
"move"Symbol 926 MovieClip {B6} Frame 2
"wait"Symbol 926 MovieClip {B6} Frame 3
"die"Symbol 926 MovieClip {B6} Frame 4
"normal"Symbol 939 MovieClip {G6} Frame 1
"move"Symbol 939 MovieClip {G6} Frame 2
"wait"Symbol 939 MovieClip {G6} Frame 3
"die"Symbol 939 MovieClip {G6} Frame 4




http://swfchan.com/24/118817/info.shtml
Created: 6/3 -2019 06:48:28 Last modified: 6/3 -2019 06:48:28 Server time: 27/04 -2024 12:20:26