mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
98 lines
3.8 KiB
Plaintext
98 lines
3.8 KiB
Plaintext
/*
|
|
* Author: ACE2 Team, esteldunedain
|
|
* Calculate the wind and rain evolution on the server. Broadcast the current and next values to the clients
|
|
*
|
|
* Argument:
|
|
* None
|
|
*
|
|
* Return value:
|
|
* None
|
|
*/
|
|
#include "script_component.hpp"
|
|
private ["_gustCount","_gustDir","_gustSpeed","_gustTime","_gusts","_i","_lastRain","_maxInterval","_rainOverCast","_startDir","_startSpeed","_time","_timeTillGust","_transitionTime"];
|
|
|
|
// Rain simulation
|
|
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))+1;
|
|
GVAR(rain_current_range) = -1+(random 2);
|
|
|
|
ACE_RAIN_PARAMS = [_lastRain, GVAR(current_rain), _transitionTime];
|
|
TRACE_4("",_lastRain,_rainOverCast,_transitionTime, overcast);
|
|
} else {
|
|
GVAR(current_rain) = 0;
|
|
_lastRain = GVAR(current_rain);
|
|
_rainOverCast = 1;
|
|
_transitionTime = (_rainOverCast*5)+(random (_rainOverCast*20))+1;
|
|
|
|
ACE_RAIN_PARAMS = [_lastRain, GVAR(current_rain), _transitionTime];
|
|
TRACE_4("",_lastRain,_rainOverCast,_transitionTime, overcast);
|
|
};
|
|
|
|
GVAR(rain_period_start_time) = time;
|
|
publicVariable "ACE_RAIN_PARAMS";
|
|
};
|
|
|
|
// Wind simulation
|
|
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]];
|
|
};
|
|
};
|
|
|
|
GVAR(wind_total_time) = GVAR(wind_total_time) + GVAR(wind_next_period);
|
|
|
|
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";
|
|
};
|
|
|
|
// Sync misc. parameters
|
|
ACE_MISC_PARAMS = [lightnings, rainbow, fogParams];
|
|
publicVariable "ACE_MISC_PARAMS";
|
|
|
|
GVAR(rain_period_count) = GVAR(rain_period_count) + 1;
|
|
GVAR(wind_period_count) = GVAR(wind_period_count) + 1; |