home *** CD-ROM | disk | FTP | other *** search
- class CLineManager
- {
- var mArena;
- var mLineList_Temp;
- var mPointList_Temp;
- var mLineList;
- var mMap;
- static var mCellSize = 40;
- static var JoinTolerance = 5;
- function CLineManager(tArena)
- {
- this.mArena = tArena;
- }
- function AddLine(node1, node2)
- {
- var _loc4_ = new flash.geom.Point(0,0);
- var _loc3_ = new flash.geom.Point(0,0);
- node1.localToGlobal(_loc4_);
- this.mArena.globalToLocal(_loc4_);
- node2.localToGlobal(_loc3_);
- this.mArena.globalToLocal(_loc3_);
- node1._visible = node2._visible = false;
- this.mLineList_Temp = this.mLineList_Temp != undefined ? this.mLineList_Temp : new Array();
- var _loc2_ = new Object();
- _loc2_.mP1 = this.AddPoint(_loc4_,_loc2_);
- _loc2_.mP2 = this.AddPoint(_loc3_,_loc2_);
- this.mLineList_Temp[this.mLineList_Temp.length] = _loc2_;
- _loc2_.mNormal = CLine.GetNormal(_loc4_,_loc3_);
- _loc2_.mAdded = false;
- }
- function AddPoint(p, oLine)
- {
- this.mPointList_Temp = this.mPointList_Temp != undefined ? this.mPointList_Temp : new Array();
- for(var _loc4_ in this.mPointList_Temp)
- {
- if(flash.geom.Point.distance(this.mPointList_Temp[_loc4_].mP,p) <= CLineManager.JoinTolerance)
- {
- this.mPointList_Temp[_loc4_].mLineList[this.mPointList_Temp[_loc4_].mLineList.length] = oLine;
- return this.mPointList_Temp[_loc4_];
- }
- }
- var _loc5_ = {mP:p,mLineList:[oLine]};
- this.mPointList_Temp[this.mPointList_Temp.length] = _loc5_;
- return _loc5_;
- }
- function Compile(r)
- {
- if(this.mLineList == undefined)
- {
- this.mLineList = new Array();
- var _loc18_ = 0;
- while(_loc18_ < this.mLineList_Temp.length)
- {
- var _loc2_ = this.mLineList_Temp[_loc18_];
- while(_loc2_ != undefined && !_loc2_.mAdded)
- {
- var _loc17_ = _loc2_.mNormal.clone();
- _loc17_.normalize(r);
- var _loc5_ = _loc2_.mP1.pNext != undefined ? _loc2_.mP1.pNext : _loc2_.mP1.mP.add(_loc17_);
- var _loc6_ = _loc2_.mP2.mP.add(_loc17_);
- var _loc14_ = _loc2_.mP2.mP;
- var _loc10_ = _loc2_.mP1.pNext == undefined && _loc2_.mP1.mLineList.length > 1;
- var _loc3_ = _loc2_.mP2.mLineList[_loc2_.mP2.mLineList[0] != _loc2_ ? 0 : 1];
- if(_loc3_ == undefined)
- {
- if(!_loc10_)
- {
- this._AddLine2p(_loc5_,_loc6_);
- _loc2_.mAdded = true;
- }
- break;
- }
- var _loc7_ = _loc3_.mNormal.clone();
- _loc7_.normalize(r);
- var _loc9_ = _loc3_.mP1.mP.add(_loc7_);
- var _loc11_ = _loc3_.mP2.mP.add(_loc7_);
- if(_loc2_ == _loc3_)
- {
- trace("***************** Lines are the same ***********************");
- trace(_loc5_ + "," + _loc6_ + "," + _loc9_ + "," + _loc11_);
- break;
- }
- var _loc8_ = CLine.LOI(_loc5_,_loc6_,_loc9_,_loc11_);
- if(_loc8_ == undefined)
- {
- if(!_loc10_)
- {
- this._AddLine2p(_loc5_,_loc6_);
- _loc2_.mAdded = true;
- }
- this._RoundedLine(_loc14_,_loc17_,_loc7_,r);
- _loc3_.mP1.pNext = _loc9_;
- }
- else
- {
- if(!_loc10_)
- {
- this._AddLine2p(_loc5_,_loc8_,false,true);
- _loc2_.mAdded = true;
- }
- _loc3_.mP1.pNext = _loc8_;
- _loc3_.mP1.mConcave = true;
- }
- _loc2_ = _loc3_;
- }
- _loc18_ = _loc18_ + 1;
- }
- var _loc23_ = this.mArena.mEdgeDraw;
- var _loc22_ = flash.display.BitmapData.loadBitmap("Graphic.Edge");
- var _loc24_ = flash.display.BitmapData.loadBitmap("Graphic.Edge.2");
- var _loc21_ = _loc22_.height - 1;
- _loc18_ = 0;
- while(_loc18_ < this.mLineList_Temp.length)
- {
- var _loc4_ = this.mLineList_Temp[_loc18_];
- var _loc12_ = _loc4_.mP1.mLineList[_loc4_.mP1.mLineList[0] != _loc4_ ? 0 : 1];
- var _loc15_ = _loc4_.mP2.mLineList[_loc4_.mP2.mLineList[0] != _loc4_ ? 0 : 1];
- _loc17_ = _loc12_.mNormal;
- _loc17_.normalize(_loc21_);
- _loc7_ = _loc4_.mNormal;
- _loc7_.normalize(_loc21_);
- var _loc16_ = _loc15_.mNormal;
- _loc16_.normalize(_loc21_);
- var _loc20_ = _loc12_ != undefined ? CLine.LOI2(_loc12_.mP1.mP.subtract(_loc17_),_loc12_.mP2.mP.subtract(_loc17_),_loc4_.mP1.mP.subtract(_loc7_),_loc4_.mP2.mP.subtract(_loc7_)) : _loc4_.mP1.mP.subtract(_loc7_);
- var _loc19_ = _loc15_ != undefined ? CLine.LOI2(_loc15_.mP1.mP.subtract(_loc16_),_loc15_.mP2.mP.subtract(_loc16_),_loc4_.mP1.mP.subtract(_loc7_),_loc4_.mP2.mP.subtract(_loc7_)) : _loc4_.mP2.mP.subtract(_loc7_);
- if(_loc20_ == undefined)
- {
- _loc20_ = _loc4_.mP1.mP.subtract(_loc7_);
- }
- if(_loc19_ == undefined)
- {
- _loc19_ = _loc4_.mP2.mP.subtract(_loc7_);
- }
- this._DrawEdge(_loc23_,_loc22_,_loc4_.mP1.mP,_loc4_.mP2.mP,_loc19_,_loc20_);
- _loc18_ = _loc18_ + 1;
- }
- delete this.mLineList_Temp;
- delete this.mPointList_Temp;
- }
- }
- function _DrawEdge(dp, tBitmap, p1, p2, p3, p4)
- {
- var _loc3_ = new flash.geom.Matrix();
- _loc3_.rotate(Math.atan2(p2.y - p1.y,p2.x - p1.x));
- _loc3_.translate(p1.x,p1.y);
- dp.beginBitmapFill(tBitmap,_loc3_,true,true);
- dp.moveTo(p1.x,p1.y);
- dp.lineTo(p2.x,p2.y);
- dp.lineTo(p3.x,p3.y);
- dp.lineTo(p4.x,p4.y);
- dp.lineTo(p1.x,p1.y);
- dp.endFill();
- }
- function _RoundedLine(sharePoint, n1, n2, r)
- {
- if(flash.geom.Point.distance(n1,n2) <= r * 0.6666666666666666)
- {
- var _loc8_ = sharePoint.add(n1);
- var _loc7_ = sharePoint.add(n2);
- this._AddLine2p(_loc8_,_loc7_);
- return undefined;
- }
- var _loc2_ = n1.add(n2);
- _loc2_.normalize(r);
- this._RoundedLine(sharePoint,n1,_loc2_,r);
- this._RoundedLine(sharePoint,_loc2_,n2,r);
- }
- function _AddLine2p(p1, p2, tConcaveP1, tConcaveP2)
- {
- this.mArena.mCollisionDraw.lineStyle(0,16711935,50);
- var _loc4_ = 0;
- this.mArena.mCollisionDraw.moveTo(p1.x + _loc4_,p1.y + _loc4_);
- this.mArena.mCollisionDraw.lineTo(p2.x + _loc4_,p2.y + _loc4_);
- this.mArena.mCollisionDraw.moveTo(p1.x - 2,p1.y + 2);
- this.mArena.mCollisionDraw.lineTo(p1.x + 2,p1.y - 2);
- this.mArena.mCollisionDraw.moveTo(p1.x + 2,p1.y + 2);
- this.mArena.mCollisionDraw.lineTo(p1.x - 2,p1.y - 2);
- this.mArena.mCollisionDraw.moveTo(p2.x - 2,p2.y + 2);
- this.mArena.mCollisionDraw.lineTo(p2.x + 2,p2.y - 2);
- this.mArena.mCollisionDraw.moveTo(p2.x + 2,p2.y + 2);
- this.mArena.mCollisionDraw.lineTo(p2.x - 2,p2.y - 2);
- this._AddLine(new CLine(this.mArena,p1,p2,tConcaveP1,tConcaveP2));
- }
- function _AddLine(tLine)
- {
- this.mLineList = this.mLineList != undefined ? this.mLineList : new Array();
- this.mLineList[this.mLineList.length] = tLine;
- this.MarkMap(tLine);
- }
- function GetLineList(oldPosition, newPosition, tSize)
- {
- var _loc5_ = oldPosition.clone();
- var _loc3_ = newPosition.clone();
- if(_loc5_.x > _loc3_.x)
- {
- var _loc8_ = _loc5_.x;
- _loc5_.x = _loc3_.x;
- _loc3_.x = _loc8_;
- }
- if(_loc5_.y > _loc3_.y)
- {
- _loc8_ = _loc5_.y;
- _loc5_.y = _loc3_.y;
- _loc3_.y = _loc8_;
- }
- _loc5_.x = Math.floor(_loc5_.x / CLineManager.mCellSize);
- _loc5_.y = Math.floor(_loc5_.y / CLineManager.mCellSize);
- _loc3_.x = Math.floor(_loc3_.x / CLineManager.mCellSize);
- _loc3_.y = Math.floor(_loc3_.y / CLineManager.mCellSize);
- var _loc7_ = new Array();
- var _loc4_ = _loc5_.y;
- while(_loc4_ <= _loc3_.y)
- {
- var _loc6_ = this.mMap[_loc4_];
- var _loc2_ = _loc5_.x;
- while(_loc2_ <= _loc3_.x)
- {
- this.AddToLL(_loc7_,_loc6_[_loc2_]);
- _loc2_ = _loc2_ + 1;
- }
- _loc4_ = _loc4_ + 1;
- }
- return _loc7_;
- }
- function AddToLL(ll, pll)
- {
- for(var _loc5_ in pll)
- {
- var _loc2_ = true;
- for(var _loc4_ in ll)
- {
- if(pll[_loc5_] == ll[_loc4_])
- {
- _loc2_ = false;
- break;
- }
- }
- if(_loc2_)
- {
- ll[ll.length] = pll[_loc5_];
- }
- }
- }
- function MarkMap(tLine)
- {
- var _loc7_ = tLine.mP1;
- var _loc6_ = tLine.mP2;
- var _loc2_ = _loc6_.subtract(_loc7_);
- if(Math.abs(_loc2_.x) > Math.abs(_loc2_.y))
- {
- var _loc3_ = _loc6_.x <= _loc7_.x ? _loc6_.clone() : _loc7_.clone();
- var _loc9_ = _loc6_.x <= _loc7_.x ? _loc7_.clone() : _loc6_.clone();
- _loc2_ = _loc9_.subtract(_loc3_);
- var _loc8_ = Math.ceil(_loc2_.x / CLineManager.mCellSize);
- _loc2_.y = _loc2_.y / _loc2_.x * CLineManager.mCellSize;
- _loc2_.x = CLineManager.mCellSize;
- this.MarkMap_Cell(tLine,_loc3_);
- var _loc4_ = undefined;
- while((_loc8_ = _loc8_ - 1) >= 0)
- {
- if(_loc4_ != undefined)
- {
- this._mmCell(tLine,_loc3_,_loc4_);
- }
- _loc4_ = _loc3_;
- _loc3_ = _loc3_.add(_loc2_);
- }
- this._mmCell(tLine,_loc9_,_loc4_);
- }
- else
- {
- _loc3_ = _loc6_.y <= _loc7_.y ? _loc6_.clone() : _loc7_.clone();
- _loc9_ = _loc6_.y <= _loc7_.y ? _loc7_.clone() : _loc6_.clone();
- _loc2_ = _loc9_.subtract(_loc3_);
- _loc8_ = Math.ceil(_loc2_.y / CLineManager.mCellSize);
- _loc2_.x = _loc2_.x / _loc2_.y * CLineManager.mCellSize;
- _loc2_.y = CLineManager.mCellSize;
- this.MarkMap_Cell(tLine,_loc3_);
- while((_loc8_ = _loc8_ - 1) >= 0)
- {
- if(_loc4_ != undefined)
- {
- this._mmCell(tLine,_loc3_,_loc4_);
- }
- _loc4_ = _loc3_;
- _loc3_ = _loc3_.add(_loc2_);
- }
- this._mmCell(tLine,_loc9_,_loc4_);
- }
- }
- function _mmCell(tLine, sp, lsp)
- {
- this.MarkMap_Cell(tLine,new flash.geom.Point(sp.x,sp.y));
- this.MarkMap_Cell(tLine,new flash.geom.Point(sp.x,lsp.y));
- this.MarkMap_Cell(tLine,new flash.geom.Point(lsp.x,sp.y));
- }
- function MarkMap_Cell(tLine, p)
- {
- p = p.clone();
- p.x = Math.floor(p.x / CLineManager.mCellSize);
- p.y = Math.floor(p.y / CLineManager.mCellSize);
- if(p.x < 0 || p.y < 0)
- {
- return undefined;
- }
- this.mMap = this.mMap != undefined ? this.mMap : (this.mMap = new Array());
- this.mMap[p.y] = this.mMap[p.y] != undefined ? this.mMap[p.y] : (this.mMap[p.y] = new Array());
- this.mMap[p.y][p.x] = this.mMap[p.y][p.x] != undefined ? this.mMap[p.y][p.x] : (this.mMap[p.y][p.x] = new Array());
- var _loc3_ = this.mMap[p.y][p.x];
- var _loc4_ = false;
- for(var _loc8_ in _loc3_)
- {
- if(_loc3_[_loc8_] == tLine)
- {
- _loc4_ = true;
- break;
- }
- }
- if(!_loc4_)
- {
- _loc3_[_loc3_.length] = tLine;
- }
- return undefined;
- }
- }
-