Untitled diff

Created Diff never expires
23 removals
Lines
Total
Removed
Words
Total
Removed
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
79 lines
19 additions
Lines
Total
Added
Words
Total
Added
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
83 lines
// _null = [this, 0, 1] execVM "moveWithWind.sqf"; // Rotate with Wind
// _null = [this, 0, 1] execVM "moveWithWind.sqf"; // Rotate with Wind
// _null = [this, 1, 1] execVM "moveWithWind.sqf"; // Continuous rotation
// _null = [this, 1, 1] execVM "moveWithWind.sqf"; // Continuous rotation
private ["_obj", "_mod", "_vel", "_dif", "_wdr", "_upd"];

params [
_obj = _this select 0; // The object being affected
"_obj", // The object being affected
_mod = _this select 1; // The mode of movement (0 = wind, 1 = Rotation, 2 = TBD, etc.)
"_mod", // The mode of movement (0 = wind, 1 = Rotation, 2 = TBD, etc.)
_vel = _this select 2; // Movement velocity (1° to 45°)
"_vel" // Movement velocity (1° to 45°)
_upd = 1 / 30; // The object update rate
];

// If this isn't the server then get out
// If this isn't the server then get out
if (!isServer) exitWith {};
if (!isServer) exitWith {};

private _upd = 1 / 30; // The object update rate

//----------------------------------------------------------------------
//----------------------------------------------------------------------
// Constrain velocity
// Constrain velocity
if (_mod == 0) then {
if (_mod == 0) then {
_vel = abs _vel;
_vel = abs _vel;
if (_vel < 1) then {
if (_vel < 1) then {
_vel = 1;
_vel = 1;
};
};
if (_vel > 45) then {
if (_vel > 45) then {
_vel = 45;
_vel = 45;
};
};
};
};
//----------------------------------------------------------------------
//----------------------------------------------------------------------
if (_mod == 1) then {
if (_mod == 1) then {
if (_vel < -360) then {
if (_vel < -360) then {
_vel = -360;
_vel = -360;
};
};
if (_vel > 360) then {
if (_vel > 360) then {
_vel = 360;
_vel = 360;
};
};
};
};
//----------------------------------------------------------------------
//----------------------------------------------------------------------
// Do forever...
// Do forever...
while {0 != 1} do
while {true} do {
{
//----------------------------------------------------------------------
//----------------------------------------------------------------------
// Set direction based on wind
// Set direction based on wind
if (_mod == 0) then {
if (_mod == 0) then {
// Get current wind direction
// Get current wind direction
_wdr = windDir;
private _wdr = windDir;
// Randomise wind direction
// Randomise wind direction
_wdr = _wdr + ((random (_vel * 2))- _vel);
_wdr = _wdr + ((random (_vel * 2))- _vel);
// Get difference in direction
// Get difference in direction
_dif = (_wdr - (getDir _obj));
private _dif = (_wdr - (getDir _obj));
// If difference is greather than 180°
// If difference is greather than 180°
if (abs _dif > 180) then {
if (abs _dif > 180) then {
// Rotate counter-clockwise
// Rotate counter-clockwise
_dif = _vel * -1;
_dif = _vel * -1;
}
} else {
else
{
// Rotate clockwise
// Rotate clockwise
_dif = _vel;
_dif = _vel;
};
};
// Alternatively: _dif = [_vel, _vel * -1] select (abs _dif > 180);

// Calculate rate of change
// Calculate rate of change
_dif = _dif * _upd;
_dif = _dif * _upd;
// Increment current direction
// Increment current direction
_dif = (getDir _obj) + _dif;
_dif = (getDir _obj) + _dif;
// Set to new direction
// Set to new direction
_obj setDir _dif;
_obj setDir _dif;
};
};
//----------------------------------------------------------------------
//----------------------------------------------------------------------
// Rotate object clockwise/counter-clockwise
// Rotate object clockwise/counter-clockwise
if (_mod == 1) then {
if (_mod == 1) then {
// Update rotation
// Update rotation
_dif = (getDir _obj) + (_vel * _upd);
private _dif = (getDir _obj) + (_vel * _upd);
// Deal with out of range rotations
// Deal with out of range rotations
if (_dif < 0) then {
if (_dif < 0) then {
_dif = _dif + 360;
_dif = _dif + 360;
};
};
if (_dif > 360) then {
if (_dif > 360) then {
_dif = _dif - 360;
_dif = _dif - 360;
};
};
// Set to new rotatoin
// Set to new rotatoin
_obj setDir _dif;
_obj setDir _dif;
};
};
//----------------------------------------------------------------------
//----------------------------------------------------------------------
// Wait for next update time
// Wait for next update time
sleep _upd;
sleep _upd;
};
};