Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function LegoFreightvehicleSpeedCheck(%this, %obj)
- {
- if(!isObject(%obj))
- return;
- %vehicle = %obj;
- %slot = 0; //Play the sound in the driver's spot
- %speed = vectorLen(%obj.getVelocity());
- if(!%vehicle.oldSpeed)
- %vehicle.oldSpeed = %speed;
- //Braking is not working currently
- if(%vehicle.oldSpeed)
- {
- if((%vehicle.oldSpeed - %speed) > 1) //Braking rate of speed in 500MS
- %applyBrakes = true;
- if((%vehicle.oldSpeed - %speed) < 1)
- %applyBrakes = false;
- }
- if(%speed < 0) //Keeps throwing random negative numbers when train is at dead stop
- %speed = 0;
- %vehicle.oldSpeed = %speed;
- commandtoclient(%vehicle.getControllingClient(),'bottomprint', mFloor(%speed * 2) @"<font:impact:25><color:FFFFFF> BPS", 1);
- //We use else if's so that it will find a true statement then skip the rest
- if(%speed < 2) {
- %vehicle.stopAudio(%slot);
- }
- else if(%speed < 10)
- %vehicle.playAudio(%slot, throttle0Sound);
- else if(%speed < 15)
- %vehicle.playAudio(%slot, throttle1Sound);
- else if(%speed < 30)
- %vehicle.playAudio(%slot, throttle2Sound);
- else if(%speed < 45)
- %vehicle.playAudio(%slot, throttle3Sound);
- else if(%speed < 60)
- %vehicle.playAudio(%slot, throttle4Sound);
- else if(%speed < 80)
- %vehicle.playAudio(%slot, throttle5Sound);
- else if(%speed < 90)
- %vehicle.playAudio(%slot, throttle6Sound);
- if(%applyBrakes)
- %vehicle.playAudio(1, squealSound);
- if(!%applyBrakes)
- %vehicle.stopAudio(1);
- // Correct Axis
- %fullPos = %vehicle.getPosition();
- %actualPos = getWord(%vehicle.getPosition(), %vehicle.axisOfCorrection);
- %dif = mAbs(%actualPos - %vehicle.AutoCorrectPos);
- if(%dif > 0.02)
- {
- // Make Correction
- if(%vehicle.axisOfCorrection == 0)
- {
- // Correcting the X axis
- %x = %vehicle.AutoCorrectPos;
- %y = getWord(%fullPos, 1);
- %z = getWord(%fullPos, 2);
- %vehicle.setTransform(%x SPC %y SPC %z SPC %obj.AutoCorrectRot);
- }
- if(%vehicle.axisOfCorrection == 1)
- {
- // Correcting the Y axis
- %x = getWord(%fullPos, 0);
- %y = %vehicle.AutoCorrectPos;
- %z = getWord(%fullPos, 2);
- %vehicle.setTransform(%x SPC %y SPC %z SPC %obj.AutoCorrectRot);
- }
- }
- schedule(500,0,"LegoFreightvehicleSpeedCheck",%this,%obj);
- }
- function LegoFreightvehicle::onadd(%this, %obj)
- {
- parent::onadd(%this,%obj);
- LegoFreightvehicleSpeedCheck(%this, %obj);
- schedule(100,0,"TrainAutoCorrect_GetData",%this,%obj);
- }
- function axisToEuler(%axis)
- {
- %angleOver2 = getWord(%axis,3) * 0.5;
- %angleOver2 = -%angleOver2;
- %sinThetaOver2 = mSin(%angleOver2);
- %cosThetaOver2 = mCos(%angleOver2);
- %q0 = %cosThetaOver2;
- %q1 = getWord(%axis,0) * %sinThetaOver2;
- %q2 = getWord(%axis,1) * %sinThetaOver2;
- %q3 = getWord(%axis,2) * %sinThetaOver2;
- %q0q0 = %q0 * %q0;
- %q1q2 = %q1 * %q2;
- %q0q3 = %q0 * %q3;
- %q1q3 = %q1 * %q3;
- %q0q2 = %q0 * %q2;
- %q2q2 = %q2 * %q2;
- %q2q3 = %q2 * %q3;
- %q0q1 = %q0 * %q1;
- %q3q3 = %q3 * %q3;
- %m13 = 2.0 * (%q1q3 - %q0q2);
- %m21 = 2.0 * (%q1q2 - %q0q3);
- %m22 = 2.0 * %q0q0 - 1.0 + 2.0 * %q2q2;
- %m23 = 2.0 * (%q2q3 + %q0q1);
- %m33 = 2.0 * %q0q0 - 1.0 + 2.0 * %q3q3;
- return mRadToDeg(mAsin(%m23)) SPC mRadToDeg(mAtan(-%m13, %m33)) SPC mRadToDeg(mAtan(-%m21, %m22));
- }
- function TrainAutoCorrect_GetData(%this, %obj)
- {
- %spawnBrick = %obj.spawnBrick;
- %spawnBrickTransform = %spawnBrick.getTransform();
- %spawnBrickRotation = getWords(%spawnBrickTransform, 3, 6);
- %spawnBrickEuler = axisToEuler(%spawnBrickRotation);
- %zRot = mFloor(mAbs(getWord(%spawnBrickEuler, 2)));
- if(%zRot == 90)
- %obj.axisOfCorrection = 1;
- else
- %obj.axisOfCorrection = 0;
- %obj.AutoCorrectRot = %spawnBrickRotation;
- %obj.AutoCorrectPos = getWord(%spawnBrickTransform, %obj.axisOfCorrection);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement