home *** CD-ROM | disk | FTP | other *** search
- package org.cove.ape
- {
- public class WheelParticle extends CircleParticle
- {
-
-
- private var _traction:Number;
-
- private var normSlip:Vector;
-
- private var tan:Vector;
-
- private var rp:RimParticle;
-
- private var orientation:Vector;
-
- public function WheelParticle(param1:Number, param2:Number, param3:Number, param4:Boolean = false, param5:Number = 1, param6:Number = 0.3, param7:Number = 0, param8:Number = 1)
- {
- super(param1,param2,param3,param4,param5,param6,param7);
- tan = new Vector(0,0);
- normSlip = new Vector(0,0);
- rp = new RimParticle(param3,2);
- this.traction = param8;
- orientation = new Vector();
- }
-
- public function set speed(param1:Number) : void
- {
- rp.speed = param1;
- }
-
- override public function init() : void
- {
- cleanup();
- if(displayObject != null)
- {
- initDisplay();
- }
- else
- {
- sprite.graphics.clear();
- sprite.graphics.lineStyle(lineThickness,lineColor,lineAlpha);
- sprite.graphics.beginFill(fillColor,fillAlpha);
- sprite.graphics.drawCircle(0,0,radius);
- sprite.graphics.endFill();
- sprite.graphics.moveTo(-radius,0);
- sprite.graphics.lineTo(radius,0);
- sprite.graphics.moveTo(0,-radius);
- sprite.graphics.lineTo(0,radius);
- }
- paint();
- }
-
- public function set traction(param1:Number) : void
- {
- _traction = 1 - param1;
- }
-
- override internal function resolveCollision(param1:Vector, param2:Vector, param3:Vector, param4:Number, param5:int, param6:AbstractParticle) : void
- {
- super.resolveCollision(param1,param2,param3,param4,param5,param6);
- resolve(param3.mult(MathUtil.sign(param4 * param5)));
- }
-
- public function get traction() : Number
- {
- return 1 - _traction;
- }
-
- public function get radian() : Number
- {
- orientation.setTo(rp.curr.x,rp.curr.y);
- return Math.atan2(orientation.y,orientation.x) + Math.PI;
- }
-
- public function set angularVelocity(param1:Number) : void
- {
- rp.angularVelocity = param1;
- }
-
- public function get speed() : Number
- {
- return rp.speed;
- }
-
- override public function update(param1:Number) : void
- {
- super.update(param1);
- rp.update(param1);
- }
-
- public function get angle() : Number
- {
- return radian * MathUtil.ONE_EIGHTY_OVER_PI;
- }
-
- override public function paint() : void
- {
- sprite.x = curr.x;
- sprite.y = curr.y;
- sprite.rotation = angle;
- }
-
- public function get angularVelocity() : Number
- {
- return rp.angularVelocity;
- }
-
- private function resolve(param1:Vector) : void
- {
- var _loc2_:Vector = null;
- var _loc3_:Vector = null;
- var _loc4_:Number = NaN;
- var _loc5_:Number = NaN;
- tan.setTo(-rp.curr.y,rp.curr.x);
- tan = tan.normalize();
- _loc2_ = tan.mult(rp.speed);
- _loc3_ = velocity.plusEquals(_loc2_);
- _loc4_ = _loc3_.cross(param1);
- tan.multEquals(_loc4_);
- rp.prev.copy(rp.curr.minus(tan));
- _loc5_ = (1 - _traction) * rp.speed;
- normSlip.setTo(_loc5_ * param1.y,_loc5_ * param1.x);
- curr.plusEquals(normSlip);
- rp.speed *= _traction;
- }
- }
- }
-