home *** CD-ROM | disk | FTP | other *** search
- package org.cove.ape
- {
- internal final class CollisionResolver
- {
-
-
- public function CollisionResolver()
- {
- super();
- }
-
- internal static function resolveParticleParticle(param1:AbstractParticle, param2:AbstractParticle, param3:Vector, param4:Number) : void
- {
- var _loc5_:Vector = null;
- var _loc6_:Number = NaN;
- var _loc7_:Number = NaN;
- var _loc8_:Number = NaN;
- var _loc9_:Collision = null;
- var _loc10_:Collision = null;
- var _loc11_:Vector = null;
- var _loc12_:Vector = null;
- var _loc13_:Vector = null;
- var _loc14_:Vector = null;
- param1.curr.copy(param1.samp);
- param2.curr.copy(param2.samp);
- _loc5_ = param3.mult(param4);
- _loc6_ = param1.elasticity + param2.elasticity;
- _loc7_ = param1.invMass + param2.invMass;
- _loc8_ = clamp(1 - (param1.friction + param2.friction),0,1);
- _loc9_ = param1.getComponents(param3);
- _loc11_ = (_loc10_ = param2.getComponents(param3)).vn.mult((_loc6_ + 1) * param1.invMass).plus(_loc9_.vn.mult(param2.invMass - _loc6_ * param1.invMass)).divEquals(_loc7_);
- _loc12_ = _loc9_.vn.mult((_loc6_ + 1) * param2.invMass).plus(_loc10_.vn.mult(param1.invMass - _loc6_ * param2.invMass)).divEquals(_loc7_);
- _loc9_.vt.multEquals(_loc8_);
- _loc10_.vt.multEquals(_loc8_);
- _loc13_ = _loc5_.mult(param1.invMass / _loc7_);
- _loc14_ = _loc5_.mult(-param2.invMass / _loc7_);
- _loc11_.plusEquals(_loc9_.vt);
- _loc12_.plusEquals(_loc10_.vt);
- if(!param1.fixed)
- {
- param1.resolveCollision(_loc13_,_loc11_,param3,param4,-1,param2);
- }
- if(!param2.fixed)
- {
- param2.resolveCollision(_loc14_,_loc12_,param3,param4,1,param1);
- }
- }
-
- internal static function clamp(param1:Number, param2:Number, param3:Number) : Number
- {
- if(param1 > param3)
- {
- return param3;
- }
- if(param1 < param2)
- {
- return param2;
- }
- return param1;
- }
- }
- }
-