Advertisement
Guest User

Untitled

a guest
Jan 21st, 2017
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.72 KB | None | 0 0
  1. if(!isObject(ChargedObjects))
  2.     new SimSet(ChargedObjects);
  3.  
  4. function forceLoop()
  5. {
  6.     cancel($forceLoop);
  7.  
  8.     for(%i = 0; %i < ChargedObjects.getCount(); %i++)
  9.     {
  10.         %affectedObject = ChargedObjects.getObject(%i);
  11.  
  12.         if(!isNumber(%affectedObject.charge) || %affectedObject.charge == 0 || !isFunction(%affectedObject.getClassName(), "addVelocity"))
  13.             continue;
  14.  
  15.         %netForce = "0 0 0";
  16.         for(%j = 0; %j < ChargedObjects.getCount(); %j++)
  17.         {
  18.             %affectingObject = ChargedObjects.getObject(%j);
  19.  
  20.             if(%affectedObject == %affectingObject || %affectedObject.getObjectMount() == %affectingObject || %affectedObject.getMountedObject(0) == %affectingObject)
  21.                 continue;
  22.  
  23.             %force = calculateElectricForce(%affectingObject, %affectedObject);
  24.             %netForce = vectorAdd(%netForce, %force);
  25.  
  26.             if(!isFunction(%affectingObject.getClassName(), "getVelocity"))
  27.                 continue;
  28.  
  29.             %force = calculateMagneticForce(%affectingObject, %affectedObject);
  30.             %netForce = vectorAdd(%netForce, %force);
  31.         }
  32.  
  33.         %before = %affectedObject.getVelocity();
  34.         %mass = %affectedObject.getDatablock().mass;
  35.         %acceleration = vectorScale(%netForce, 1 / %mass);
  36.         %velocity = vectorScale(%acceleration, 0.050);
  37.         %affectedObject.addVelocity(%velocity);
  38.  
  39.         //if(%affectedObject == 321209)
  40.             //talk("adding " @ %velocity @ " to " @ %before @ " = " @ %affectedObject.getVelocity());
  41.     }
  42.  
  43.  
  44.     $forceLoop = schedule(50, 0, forceLoop);
  45. }
  46.  
  47. function calculateElectricForce(%affectingObject, %affectedObject)
  48. {
  49.     %k = 8.99e+9;
  50.     %dist = vectorDist(%affectingObject.getPosition(), %affectedObject.getPosition());
  51.     %charge1 =  %affectingObject.charge;
  52.     %charge2 = %affectedObject.charge;
  53.     %dirVector = vectorNormalize(vectorSub(%affectedObject.getPosition(), %affectingObject.getPosition()));
  54.  
  55.     return vectorScale(%dirVector, %k * %charge1 * %charge2 / (%dist * %dist));
  56. }
  57.  
  58. function calculateMagneticForce(%affectingObject, %affectedObject)
  59. {
  60.     %mu = 1.2566370614e-6;
  61.     %rhat = vectorNormalize(vectorSub(%affectedObject.getPosition(), %affectingObject.getPosition()));
  62.     %charge1 = %affectedObject.charge;
  63.     %charge2 = %affectingObject.charge;
  64.     %dist = vectorDist(%affectingObject.getPosition(), %affectedObject.getPosition());
  65.  
  66.     return vectorScale(vectorCross(%affectedObject.getVelocity(), vectorCross(%affectingObject.getVelocity(), %rhat)), %mu * %charge1 * %charge2 / (4*$pi * %dist * %dist));
  67. }
  68.  
  69. function Vehicle::addVelocity(%this, %vel)
  70. {
  71.     %this.setVelocity(vectorAdd(%this.getVelocity(), %vel));
  72. }
  73.  
  74. function serverCmdSetCharge(%cl, %n)
  75. {
  76.     if(isNumber(%n) && isObject(%pl = %cl.player))
  77.     {
  78.         %pl.charge = %n;
  79.         messageClient(%cl, '', "\c6Your charge has been set to \c3" @ %n);
  80.  
  81.         if(!ChargedObjects.isMember(%pl))
  82.             ChargedObjects.add(%pl);
  83.     }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement