class Bug { private var c:MovieClip, dc:MovieClip; private var x:Number, y:Number, vx:Number, vy:Number, offset:Number, r:Number; private var target:Object; public var isHunted:Boolean; private var predator:Object; private var depth:Number = 100; public function Bug(c_:MovieClip, t_:Object, o_:Number, t:MovieClip) { c = c_; r = c._width/2; target = {} dc = t.createEmptyMovieClip("dc"+depth, ++depth) target.x = -40+t_.x+Math.random()*80; target.y = -40+t_.y+Math.random()*80; offset = o_; initBug(this); } private function initBug(arg:Bug):Void { vx = 0, vy = Math.random()*20; x = c._x, y = c._y; isHunted = false; c.onEnterFrame = function() { arg.routine(); } } private function fly():Void { var ox:Number = x, oy:Number = y; var dist:Number = M2.dist(predator.x, predator.y, x, y); if(dist < 100 && isHunted) { vx += (x-predator.x)*.4, vy += (y-predator.y)*.4 + Math.sin(vx)*4; } else if (dist<50 && !isHunted) { vx += (x-predator.x)/5, vy += (y-predator.y)/5; } else { vx += (target.x-x)/offset; vy += (target.y-y)/offset; vy += Math.sin(vx)*2; vx += Math.sin(vy)*2; if(M2.dist(target.x, target.y, x, y) > 30) vx*=.9, vy*=.9; } x += vx, y += vy; dc.clear(); if( isHunted ) { dc.lineStyle(3,0,20); dc.moveTo(x, y); dc.lineTo(ox, oy); } walls(); } private function render() { c._x = x, c._y = y; } private function routine() { fly(), render(); } public function setPredator(p:Predator) { predator = p; } private function walls() { if(x < r) x=r, vx*=-.7; if(y < r) y=r, vy*=-.7; if(x+r > Stage.width) x=Stage.width-r, vx*=-.7; if(y+r > Stage.height) y=Stage.height-r, vy*=-.7; } }