Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if(!isObject(ChargedObjects))
- new SimSet(ChargedObjects);
- function forceLoop()
- {
- cancel($forceLoop);
- for(%i = 0; %i < ChargedObjects.getCount(); %i++)
- {
- %affectedObject = ChargedObjects.getObject(%i);
- if(!isNumber(%affectedObject.charge) || %affectedObject.charge == 0 || !isFunction(%affectedObject.getClassName(), "addVelocity"))
- continue;
- %netForce = "0 0 0";
- for(%j = 0; %j < ChargedObjects.getCount(); %j++)
- {
- %affectingObject = ChargedObjects.getObject(%j);
- if(%affectedObject == %affectingObject || %affectedObject.getObjectMount() == %affectingObject || %affectedObject.getMountedObject(0) == %affectingObject)
- continue;
- %force = calculateElectricForce(%affectingObject, %affectedObject);
- %netForce = vectorAdd(%netForce, %force);
- if(!isFunction(%affectingObject.getClassName(), "getVelocity"))
- continue;
- %force = calculateMagneticForce(%affectingObject, %affectedObject);
- %netForce = vectorAdd(%netForce, %force);
- }
- %before = %affectedObject.getVelocity();
- %mass = %affectedObject.getDatablock().mass;
- %acceleration = vectorScale(%netForce, 1 / %mass);
- %velocity = vectorScale(%acceleration, 0.050);
- %affectedObject.addVelocity(%velocity);
- //if(%affectedObject == 321209)
- //talk("adding " @ %velocity @ " to " @ %before @ " = " @ %affectedObject.getVelocity());
- }
- $forceLoop = schedule(50, 0, forceLoop);
- }
- function calculateElectricForce(%affectingObject, %affectedObject)
- {
- %k = 8.99e+9;
- %dist = vectorDist(%affectingObject.getPosition(), %affectedObject.getPosition());
- %charge1 = %affectingObject.charge;
- %charge2 = %affectedObject.charge;
- %dirVector = vectorNormalize(vectorSub(%affectedObject.getPosition(), %affectingObject.getPosition()));
- return vectorScale(%dirVector, %k * %charge1 * %charge2 / (%dist * %dist));
- }
- function calculateMagneticForce(%affectingObject, %affectedObject)
- {
- %mu = 1.2566370614e-6;
- %rhat = vectorNormalize(vectorSub(%affectedObject.getPosition(), %affectingObject.getPosition()));
- %charge1 = %affectedObject.charge;
- %charge2 = %affectingObject.charge;
- %dist = vectorDist(%affectingObject.getPosition(), %affectedObject.getPosition());
- return vectorScale(vectorCross(%affectedObject.getVelocity(), vectorCross(%affectingObject.getVelocity(), %rhat)), %mu * %charge1 * %charge2 / (4*$pi * %dist * %dist));
- }
- function Vehicle::addVelocity(%this, %vel)
- {
- %this.setVelocity(vectorAdd(%this.getVelocity(), %vel));
- }
- function serverCmdSetCharge(%cl, %n)
- {
- if(isNumber(%n) && isObject(%pl = %cl.player))
- {
- %pl.charge = %n;
- messageClient(%cl, '', "\c6Your charge has been set to \c3" @ %n);
- if(!ChargedObjects.isMember(%pl))
- ChargedObjects.add(%pl);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement