2015-01-16 23:21:47 +00:00
|
|
|
/**
|
|
|
|
* fn_limitSpeed.sqf
|
|
|
|
* @Descr: Limits the speed of an object
|
|
|
|
* @Author: Glowbal
|
|
|
|
*
|
|
|
|
* @Arguments: [vehicle OBJECT, maxSpeed NUMBER]
|
|
|
|
* @Return: void
|
|
|
|
* @PublicAPI: true
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "script_component.hpp"
|
|
|
|
|
2015-01-17 11:53:23 +00:00
|
|
|
private ["_vehicle", "_maxSpeed"];
|
|
|
|
_vehicle = _this select 0;
|
|
|
|
_maxSpeed = _this select 1;
|
2015-01-16 23:21:47 +00:00
|
|
|
|
2015-01-17 11:53:23 +00:00
|
|
|
if ((_vehicle getvariable [QGVAR(limitSpeed_f),false])) then {
|
|
|
|
_vehicle setvariable [QGVAR(limitSpeed_f),nil,true];
|
|
|
|
};
|
|
|
|
|
|
|
|
if (_maxSpeed < 0) exitwith {};
|
|
|
|
_vehicle setvariable [QGVAR(limitSpeed_f),true,true];
|
2015-01-16 23:21:47 +00:00
|
|
|
|
2015-01-17 11:53:23 +00:00
|
|
|
{
|
|
|
|
private["_vehicle","_maxSpeed","_speed","_x","_y","_z", "_diff","_percentage","_newVelocity","_velocity"];
|
|
|
|
_vehicle = (_this select 0) select 0;
|
|
|
|
_maxSpeed = (_this select 0) select 1;
|
|
|
|
if !(_vehicle getvariable [QGVAR(limitSpeed_f),false]) exitwith {
|
|
|
|
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
|
|
|
};
|
2015-01-16 23:21:47 +00:00
|
|
|
|
2015-01-17 11:53:23 +00:00
|
|
|
_speed = speed _vehicle;
|
|
|
|
if (_speed > _maxSpeed) then {
|
|
|
|
_velocity = velocity _vehicle;
|
|
|
|
_x = _velocity select 0;
|
|
|
|
_y = _velocity select 1;
|
|
|
|
_z = _velocity select 2;
|
2015-01-16 23:21:47 +00:00
|
|
|
|
2015-01-17 11:53:23 +00:00
|
|
|
_diff = _speed - _maxSpeed;
|
|
|
|
_percentage = (_speed / 100) * _diff;
|
|
|
|
_newVelocity = [_x - (_x * _percentage), _y - (_y * _percentage), _z - (_z * _percentage)];
|
|
|
|
_vehicle setVelocity _newVelocity;
|
2015-01-16 23:21:47 +00:00
|
|
|
};
|
2015-01-17 11:53:23 +00:00
|
|
|
}, 0, [_vehicle,_maxSpeed] ] call CBA_fnc_addPerFrameHandler;
|