ACE3/addons/weather/functions/fnc_serverController.sqf

85 lines
3.7 KiB
Plaintext

#include "script_component.hpp"
//player sideChat format["overcast: %1", overcast];
if(GVAR(rain_period_count) > GVAR(rain_next_period)) then {
if(overcast >= 0.7) then {
_lastRain = GVAR(current_rain);
_rainOverCast = ((overcast-0.7)/0.3);
GVAR(rain_next_period) = ceil((1+random(10))/GVAR(overcast_multiplier));
GVAR(current_rain) = (GVAR(current_rain)+(((GVAR(current_rain)))*((_rainOverCast*(GVAR(overcast_multiplier)))/8)*GVAR(rain_current_range)));
GVAR(current_rain) = (GVAR(current_rain) max 0.01) min 1;
_transitionTime = (_rainOverCast*5)+(random (_rainOverCast*20));
GVAR(rain_current_range) = -1+(random 2);
// player sideChat format["lastRain: %1 currentRain: %2", _lastRain, GVAR(current_rain)];
// player sideChat format["_transitionTime: %1", _transitionTime];
ACE_RAIN_PARAMS = [_lastRain, GVAR(current_rain), _transitionTime];
} else {
GVAR(current_rain) = 0;
_lastRain = GVAR(current_rain);
_rainOverCast = 1;
_transitionTime = (_rainOverCast*5)+(random (_rainOverCast*20));
ACE_RAIN_PARAMS = [_lastRain, GVAR(current_rain), _transitionTime];
TRACE_4("",_lastRain,_rainOverCast,_transitionTime, overcast);
};
GVAR(rain_period_start_time) = time;
publicVariable "ACE_RAIN_PARAMS";
};
if(GVAR(wind_period_count) > GVAR(wind_next_period)) then {
_startDir = GVAR(wind_current_dir);
_startSpeed = GVAR(wind_current_speed);
GVAR(wind_current_dir) = (GVAR(wind_current_dir)+(((GVAR(wind_current_dir)))*((overcast*(GVAR(overcast_multiplier)))/8)*GVAR(wind_current_range_dir)));
GVAR(wind_current_speed) = (GVAR(wind_current_speed)+(((GVAR(wind_current_speed)))*(overcast*(GVAR(overcast_multiplier))/12)*GVAR(wind_current_range_speed)));
GVAR(wind_current_speed) = GVAR(wind_current_speed) max 0.01;
if(GVAR(wind_current_dir) < 0) then {
GVAR(wind_current_dir) = GVAR(wind_current_dir)+360;
};
GVAR(wind_current_dir) = GVAR(wind_current_dir) % 360;
GVAR(wind_current_range_speed) = (-1)+(random 2);
GVAR(wind_current_range_dir) = (-1)+(random 2);
GVAR(wind_next_period) = ceil((2+random(5))/(GVAR(overcast_multiplier)));
GVAR(wind_period_count) = 0;
_gustCount = floor(random(GVAR(wind_next_period)*(overcast*((GVAR(overcast_multiplier)^3)))));
_time = GVAR(wind_next_period)*60;
_gusts = [];
if(_gustCount > 0) then {
_maxInterval = _time/_gustCount;
for "_i" from 0 to _gustCount-1 do {
_gustTime = (random (3 min _maxInterval));
_timeTillGust = (_maxInterval*_i)+(random (_maxInterval - _gustTime));
_gustSpeed = (random 1);
_gustDir = (GVAR(wind_current_dir)+(GVAR(wind_current_dir)*(-1+(random 2))))*(overcast*(GVAR(overcast_multiplier)));
_gusts set[(count _gusts), [_timeTillGust, _gustTime, _gustSpeed, _gustDir]];
};
};
// diag_log text "-------";
// diag_log text format["startDir: %1 endDir: %2", _startDir, GVAR(wind_current_dir)];
// diag_log text format["startSpeed: %1 endSpeed: %2", _startSpeed, GVAR(wind_current_speed)];
// diag_log text format["GVAR(wind_current_range_speed): %1", GVAR(wind_current_range_speed)];
// diag_log text format["GVAR(wind_current_range_dir): %1", GVAR(wind_current_range_dir)];
// diag_log text format["gusts: %1", _gusts];
// diag_log text format["next period: %1", GVAR(wind_next_period)];
GVAR(wind_total_time) = GVAR(wind_total_time) + GVAR(wind_next_period);
// diag_log text format["%1,%2,%3,%4", GVAR(wind_total_time), GVAR(wind_current_dir), GVAR(wind_current_speed), _gustCount];
ACE_WIND_PARAMS = [_startDir, GVAR(wind_current_dir), _startSpeed, GVAR(wind_current_speed), _time, _gusts];
GVAR(wind_period_start_time) = time;
publicVariable "ACE_WIND_PARAMS";
};
GVAR(rain_period_count) = GVAR(rain_period_count) + 1;
GVAR(wind_period_count) = GVAR(wind_period_count) + 1;