weather: initial port of ACE2 features. variables names changed to use macros.

This commit is contained in:
Nicolás Badano 2015-01-20 20:18:40 -03:00
parent 2255a56885
commit 71bd34234b
44 changed files with 247 additions and 565 deletions

View File

@ -0,0 +1 @@
z\ace\addons\weather

View File

@ -0,0 +1,12 @@
class Extended_PreInit_EventHandlers {
class ADDON {
clientInit = QUOTE(call COMPILE_FILE(XEH_preClientInit));
init = QUOTE(call COMPILE_FILE(XEH_preInit));
};
};
class Extended_PostInit_EventHandlers {
class ADDON {
serverInit = QUOTE(call COMPILE_FILE(XEH_PostServerInit));
init = QUOTE(call COMPILE_FILE(XEH_postInit));
};
};

View File

@ -0,0 +1,33 @@
//XEH_postInit.sqf
//#define DEBUG_MODE_FULL
#include "script_component.hpp"
"ACE_WIND_PARAMS" addPublicVariableEventHandler { GVAR(wind_period_start_time) = time; };
"ACE_RAIN_PARAMS" addPublicVariableEventHandler { GVAR(rain_period_start_time) = time; };
_fnc_uptadeWind = {
_wind = ([] call FUNC(getWind));
setWind [_wind select 0, _wind select 1, true];
// _nWind = wind;
// _pW = [_nWind select 0, _nWind select 1, 0] call CBA_fnc_vect2polar;
// _pAW = [_wind select 0, _wind select 1, 0] call CBA_fnc_vect2polar;
// hint format["w: %1 %2\na: %3 %4", _pW select 1, _pw select 0, _pAW select 1, _pAW select 0];
// diag_log text format["ACE_WIND,%1,%2,%3,%4,%5", time, _pW select 1, _pw select 0, _pAW select 1, _pAW select 0];
};
[_fnc_uptadeWind, 1, []] call CBA_fnc_addPerFrameHandler;
_fnc_updateRain = {
if(GVAR(enableRain)) then {
if(!isNil "ACE_RAIN_PARAMS" && {!isNil QGVAR(rain_period_start_time)}) then {
_oldStrength = ACE_RAIN_PARAMS select 0;
_rainStrength = ACE_RAIN_PARAMS select 1;
_transitionTime = ACE_RAIN_PARAMS select 2;
_periodPosition = (time - GVAR(rain_period_start_time)) min _transitionTime;
_periodPercent = (_periodPosition/_transitionTime) min 1;
0 setRain ((_periodPercent*(_rainStrength-_oldStrength))+_oldStrength);
};
};
};
[_fnc_updateRain, 0, []] call CBA_fnc_addPerFrameHandler;

View File

@ -1,3 +1,3 @@
#include "script_component.hpp"
[FUNC(serverController), 60] call cba_fnc_addPerFrameHandler;
#include "script_component.hpp"
[FUNC(serverController), 60] call cba_fnc_addPerFrameHandler;

View File

@ -0,0 +1,17 @@
#include "script_component.hpp"
FUNC(KEEPTIME) = {
if((count GVAR(WINDSPEED)) > 0) then {
private ["_wind", "_p", "_str"];
_wind = ACE_wind;
_p = _wind call CBA_fnc_vect2polar;
_str = format["Wind: %1 at %2m/s (%3MPH)\n%4", floor(_p select 1), floor(_p select 0), floor((_p select 0)*2.23693629), GVAR(WINDSPEED)];
TRACE_2("Wind",_wind,_str);
};
};
#ifdef DEBUG_MODE_FULL
[FUNC(KEEPTIME), 0.0, []] call CBA_fnc_addPerFrameHandler;
#endif

View File

@ -0,0 +1,39 @@
//#define DEBUG_MODE_FULL
#include "script_component.hpp"
ADDON = false;
LOG(MSG_INIT);
PREP(serverController);
PREP(getWind);
GVAR(enableRain) = false;
GVAR(overcast_multiplier) = 1;
GVAR(wind_initial_dir) = (random 360);
GVAR(wind_initial_speed) = (overcast*15)+(random (overcast*5)) max 1;
GVAR(wind_mean_speed) = GVAR(wind_initial_speed);
GVAR(wind_mean_dir) = GVAR(wind_initial_dir);
GVAR(wind_current_speed) = GVAR(wind_initial_speed);
GVAR(wind_current_dir) = GVAR(wind_initial_dir);
GVAR(wind_current_range_speed) = -1+(random 2);
GVAR(wind_current_range_dir) = -1+(random 2);
GVAR(wind_next_period) = -1; //ceil((2+random(5))/(GVAR(overcast_multiplier)/10));
GVAR(wind_next_major_period) = -1;
GVAR(wind_period_count) = 0;
GVAR(wind_major_period_count) = 0;
GVAR(wind_total_time) = 0;
GVAR(wind_period_start_time) = time;
GVAR(rain_next_period) = -1;
GVAR(rain_period_count) = 0;
GVAR(rain_initial_rain) = 0;
if(overcast >= 0.7) then {
GVAR(rain_initial_rain) = (random ((overcast-0.7)/0.3));
};
GVAR(current_rain) = GVAR(rain_initial_rain);
GVAR(rain_current_range) = -1+(random 2);
ADDON = true;

22
addons/weather/config.cpp Normal file
View File

@ -0,0 +1,22 @@
#include "script_component.hpp"
class CfgPatches {
class ADDON {
units[] = {};
weapons[] = {};// "ACE_Kestrel4500" };
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common"};
author[] = {"q1184", "Rocko", "CAA-Picard"};
VERSION_CONFIG;
};
};
#include "CfgEventhandlers.hpp"
/*class ACE_Parameters_Numeric {
GVAR(XXXX) = 100;
};
class ACE_Parameters_Boolean {
GVAR(XXXX) = 0;
};*/

View File

@ -0,0 +1,22 @@
#include "script_component.hpp"
_return = [0,0,0];
if(!isNil "ACE_WIND_PARAMS") then {
_dir = ACE_WIND_PARAMS select 0;
_dirRange = (ACE_WIND_PARAMS select 1) - (ACE_WIND_PARAMS select 0);
_spd = ACE_WIND_PARAMS select 2;
_spdRange = (ACE_WIND_PARAMS select 3) - (ACE_WIND_PARAMS select 2);
_period = ACE_WIND_PARAMS select 4;
_periodPosition = (time - GVAR(wind_period_start_time)) min _period;
_periodPercent = _periodPosition/_period;
_spdInc = _spdRange * _periodPercent;
_dirInc = _dirRange * _periodPercent;
_spd = (_spd + _spdInc);
_dir = _dir + _dirInc;
if (_dir > 360) then {_dir = _dir - 360};
if (_dir < 0) then {_dir = _dir + 360};
_return = [_spd * sin _dir, _spd * cos _dir, 0];
};
_return;

View File

@ -0,0 +1,85 @@
#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;

View File

@ -0,0 +1 @@
#include "\z\ace\addons\weather\script_component.hpp"

View File

@ -0,0 +1,12 @@
#define COMPONENT weather
#include "\z\ace\addons\main\script_mod.hpp"
#define DEBUG_ENABLED_WEATHER
#ifdef DEBUG_ENABLED_WEATHER
#define DEBUG_MODE_FULL
#endif
#ifdef DEBUG_SETTINGS_WEATHER
#define DEBUG_SETTINGS DEBUG_SETTINGS_WEATHER
#endif
#include "\z\ace\addons\main\script_macros.hpp"

View File

@ -1 +0,0 @@
z\ace\addons\wind_deflection

View File

@ -1,19 +0,0 @@
class Extended_PreInit_EventHandlers {
class ADDON {
clientInit = QUOTE(call COMPILE_FILE(XEH_preClientInit));
init = QUOTE(call COMPILE_FILE(XEH_preInit));
};
};
class Extended_PostInit_EventHandlers {
class ADDON {
serverInit = QUOTE(call COMPILE_FILE(XEH_PostServerInit));
init = QUOTE(call COMPILE_FILE(XEH_postInit));
};
};
class Extended_FiredBIS_EventHandlers {
class Man {
class ADDON {
clientFiredBisPlayer = "if (!isNull (_this select 6) && {((_this select 6) isKindOf 'bulletBase')}) then {_this call ace_sys_wind_deflection_fnc_fired_man}";
};
};
};

View File

@ -1,35 +0,0 @@
class RscTitles {
class ACE_RscWindIntuitive {
idd = -1;
onLoad ="with uiNameSpace do { ACE_RscWindIntuitive = _this select 0 };";
movingEnable = 0;
duration = 10;
fadeIn = false;
fadeOut = false;
controls[] = { "ACE_RscWindIntuitive_BG", "ACE_RscWindIntuitive_1" };
class ACE_RscWindIntuitive_BG {
idc = -1;
type = 0;
style = 128;
font = "TahomaB";
colorBackground[] = {0,0,0,0};
colorText[] = { 0,0,0,0};
text = "";
sizeEx = 0.027;
x = "SafeZoneX + 0.001";
y = "SafeZoneY + 0.04";
w = 0.3;
h = 0.3;
size = 0.034;
};
class ACE_RscWindIntuitive_1: ACE_RscWindIntuitive_BG {
// TITS = 1591514
idc = 1591514;
style = 48;
colorText[] = {0,0,0,0.1};
font ="Bitstream";
sizeEx = 0.03;
text = ""; // text = "x\ace\addons\sys_wind_deflection\data\windxx.paa";
};
};
};

View File

@ -1,33 +0,0 @@
//XEH_postInit.sqf
//#define DEBUG_MODE_FULL
#include "script_component.hpp"
"ACE_WIND_PARAMS" addPublicVariableEventHandler { ace_wind_period_start_time = time; };
"ACE_RAIN_PARAMS" addPublicVariableEventHandler { ace_wind_rain_period_start_time = time; };
_func = {
_wind = ([] call FUNC(getWind));
setWind [_wind select 0, _wind select 1, true];
// _nWind = wind;
// _pW = [_nWind select 0, _nWind select 1, 0] call CBA_fnc_vect2polar;
// _pAW = [_wind select 0, _wind select 1, 0] call CBA_fnc_vect2polar;
// hint format["w: %1 %2\na: %3 %4", _pW select 1, _pw select 0, _pAW select 1, _pAW select 0];
// diag_log text format["ACE_WIND,%1,%2,%3,%4,%5", time, _pW select 1, _pw select 0, _pAW select 1, _pAW select 0];
};
[_func, 1, []] call CBA_fnc_addPerFrameHandler;
_rainFunc = {
if(GVAR(enableRain)) then {
if(!isNil "ACE_RAIN_PARAMS" && {!isNil "ace_wind_rain_period_start_time"}) then {
_oldStrength = ACE_RAIN_PARAMS select 0;
_rainStrength = ACE_RAIN_PARAMS select 1;
_transitionTime = ACE_RAIN_PARAMS select 2;
_periodPosition = (time - ace_wind_rain_period_start_time) min _transitionTime;
_periodPercent = (_periodPosition/_transitionTime) min 1;
0 setRain ((_periodPercent*(_rainStrength-_oldStrength))+_oldStrength);
};
};
};
[_rainFunc, 0, []] call CBA_fnc_addPerFrameHandler;

View File

@ -1,34 +0,0 @@
#include "script_component.hpp"
#include "\ca\editor\Data\Scripts\dikCodes.h"
PREP(bulletflight);
PREP(fired_man);
PREP(clockwind);
PREP(wind_intuitive);
PREP(keypressed);
GVAR(running) = false;
// Settings for MP missions. in SP clientside config takes priority
GVAR(force_drift_on) = true; //true: drift always on, don't allow client to turn it off
//false: client setting will determine whether he has drift
GVAR(force_drift_off) = false; //true: drift always off, don't allow client to turn it on
//false: client setting will determine whether he has drift
GVAR(presstime) = 0;
FUNC(KEEPTIME) = {
if((count GVAR(WINDSPEED)) > 0) then {
private ["_wind", "_p", "_str"];
_wind = ACE_wind;
_p = _wind call CBA_fnc_vect2polar;
_str = format["Wind: %1 at %2m/s (%3MPH)\n%4", floor(_p select 1), floor(_p select 0), floor((_p select 0)*2.23693629), GVAR(WINDSPEED)];
TRACE_2("Wind",_wind,_str);
};
};
[QUOTE(ADDON), "Toggle_Wind_Info", { [_this] call FUNC(keypressed) }] call CBA_fnc_addKeyHandlerFromConfig; // sys_eject: Uses same keypress to show Altimeter while in a parachute or skydiving
#ifdef DEBUG_MODE_FULL
[FUNC(KEEPTIME), 0.0, []] call CBA_fnc_addPerFrameHandler;
#endif

View File

@ -1,55 +0,0 @@
//#define DEBUG_MODE_FULL
#include "script_component.hpp"
ADDON = false;
LOG(MSG_INIT);
GVAR(enableRain) = false;
ace_wind_initial_dir = (random 360);
ace_wind_initial_speed = (overcast*15)+(random (overcast*5)) max 1;
ace_wind_overcast_multiplier = 1;
ace_wind_mean_speed = ace_wind_initial_speed;
ace_wind_mean_dir = ace_wind_initial_dir;
ace_wind_current_speed = ace_wind_initial_speed;
ace_wind_current_dir = ace_wind_initial_dir;
ace_wind_current_range_speed = -1+(random 2);
ace_wind_current_range_dir = -1+(random 2);
ace_wind_next_period = -1; //ceil((2+random(5))/(ace_wind_overcast_multiplier/10));
ace_wind_next_major_period = -1;
ace_wind_period_count = 0;
ace_wind_major_period_count = 0;
ace_wind_total_time = 0;
ace_wind_period_start_time = time;
ace_wind_rain_next_period = -1;
ace_wind_rain_period_count = 0;
ace_wind_rain_initial_rain = 0;
if(overcast >= 0.7) then {
ace_wind_rain_initial_rain = (random ((overcast-0.7)/0.3));
};
ace_wind_current_rain = ace_wind_rain_initial_rain;
ace_wind_rain_current_range = -1+(random 2);
PREP(serverController);
PREP(getWind);
ADDON = true;

View File

@ -1,45 +0,0 @@
class cfgAmmo {
class BulletCore;
class BulletBase: BulletCore {
ace_windcoef = 0.4;
};
class B_545x39_Ball: BulletBase {
ace_windcoef = 0.55;
//ace_drift[] = {{0,0},{100,0.03},{200,0.07},{300,0.25},{400,0.42},{500,0.79},{600,1.27},{700,2},{800,2.98},{900,4.35},{1000,6.2}};
};
class B_556x45_Ball: BulletBase {
ace_windcoef = 0.55;
//ace_drift[] = {{0,0},{100,0.03},{200,0.07},{300,0.17},{400,0.37},{500,0.71},{600,1.2},{700,1.81},{800,2.75},{900,4},{1000,6.2}};
};
class B_762x39_Ball: BulletBase {
ace_windcoef = 0.59;
//ace_drift[] = {{0,0},{100,0.05},{200,0.1},{300,0.38},{400,0.75},{500,1.37}};
};
class B_9x39_SP5: BulletBase {
ace_windcoef = 0.2;
//ace_drift[] = {{0,0},{100,0.06},{200,0.25},{300,0.6},{400,1.1}};
};
class B_762x51_Ball: BulletBase {
ace_windcoef = 0.4;
//ace_drift[] = {{0,0},{100,0.03},{200,0.08},{300,0.18},{400,0.305},{500,0.57},{600,0.92},{700,1.3},{800,1.85},{900,2.5},{1000,3.3}};
};
class B_762x54_Ball: BulletBase {
ace_windcoef = 0.45;
//ace_drift[] = {{0,0},{100,0.025},{200,0.085},{300,0.19},{400,0.36},{500,0.6},{600,0.98},{700,1.45},{800,2.1},{900,2.9},{1000,4.15}};
};
class B_127x99_Ball: BulletBase {
ace_windcoef = 0.24;
//ace_drift[] = {{0,0},{100,0.013},{200,0.03},{300,0.07},{400,0.139},{500,0.211},{600,0.41},{700,0.46},{800,0.7},{900,0.93},{1000,1.24},{1100,1.6},{1200,2},{1300,2.42},{1400,3},{1500,3.66},{1600,4.35},{1700,5.2},{1800,6.1},{1900,7.2},{2000,8.4}};
};
class B_127x108_Ball: BulletBase {
ace_windcoef = 0.24;
//ace_drift[] = {{0,0},{100,0.013},{200,0.03},{300,0.07},{400,0.139},{500,0.211},{600,0.41},{700,0.46},{800,0.8},{900,1.1},{1000,1.5},{1100,1.9},{1200,2.3},{1300,2.87},{1400,3.5},{1500,4.25},{1600,5.05},{1700,6.1},{1800,7.25},{1900,8.55},{2000,11.2}};
};
class B_127x107_Ball: BulletBase {
ace_windcoef = 0.24;
//ace_drift[] = {{0,0},{100,0.013},{200,0.03},{300,0.07},{400,0.139},{500,0.211},{600,0.337},{700,0.46},{800,0.64},{900,0.85},{1000,1.15},{1100,1.45},{1200,1.9},{1300,2.3},{1400,2.9},{1500,3.53},{1600,4.35},{1700,5.2},{1800,6.3},{1900,7.4},{2000,9.7}};
};
class B_86x70_Ball_noTracer: BulletBase {
ace_windcoef = 0.25;
};
};

View File

@ -1,28 +0,0 @@
#include "script_component.hpp"
class CfgPatches {
class ADDON {
units[] = {};
//weapons[] = { "ACE_Kestrel4500" };
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {
"ace_common"
};
version = VERSION;
author[] = {"q1184", "Rocko"};
/*
class ACE_Options { // ACE Options
group = "INTERACTION";
title = " "; // Empty (WITH A SPACE IN BETWEEN!!!!!) if no CAPTION TEXT is wanted
class Toggle_Wind_Info { // Points to CBA Events, e.g for the keypress registered within CBA
title = $STR_ACE_MENU_MEASUREWIND;
};
};
*/
};
};
#include "CfgEventhandlers.hpp"
#include "CfgAmmo.hpp"
//#include "RscTitles.hpp"

View File

@ -1,31 +0,0 @@
#include "script_component.hpp"
//#define DEBUG_MODE_FULL
#define __cfg configFile >> "CfgAmmo" >> _ammo
private ["_unit","_t","_vel","_timeprev","_coef","_ammo","_c","_dt","_bullet"];
_bullet = _this select 0;
_unit = _this select 2;
_ammo = _this select 3;
_c = 1.42 * getNumber(__cfg >> "ace_windcoef");
_timeprev = time;
//_wind = ACE_wind; //constant wind cheat
_bulletFunc = {
_bullet = (_this select 0) select 0;
if (alive _bullet) then {
_coef = ((_this select 0) select 1)*accTime;
_vel = velocity _bullet;
_wind = ACE_wind;
_vel set [0, (_vel select 0) + (_wind select 0)*_coef];
_vel set [1, (_vel select 1) + (_wind select 1)*_coef];
#ifdef DEBUG_MODE_FULL
drop ["\Ca\Data\Cl_basic","","Billboard",1,30,getPos _bullet,[0,0,0],1,1.275,1.0,0.0,[0.125],[[1,0,0,0.5]],[0],0.0,2.0,"","",""];
#endif
_bullet setvelocity _vel;
//TRACE_1("",_wind);
} else {
[_this select 1] call cba_fnc_removePerFrameHandler;
};
};
_time = 0.075;
_h1 = [_bulletFunc, _time, [_bullet, _c*_time]] call cba_fnc_addPerFrameHandler;

View File

@ -1,26 +0,0 @@
#include "script_component.hpp"
private ["_pd","_wd","_a","_ws"];
_pd = getdir player; //player dir
_wind = ACE_wind;
_wd = (_wind select 0) atan2 (_wind select 1); //wind dir
if (_wd < 0) then {_wd = _wd + 360};
//_ws = _wd + 180; //angle to wind source
//if (_ws > 360) then {_ws = _ws - 360};
_a = _wd - _pd; //angle from player dir to wind source
if (_a < 0) then {_a = 360 + _a};
if (_a >= 345 || {_a <= 15}) exitwith {12};
if (_a > 15 && {_a <= 45}) exitwith {1};
if (_a > 45 && {_a <= 75}) exitwith {2};
if (_a > 75 && {_a <= 105}) exitwith {3};
if (_a > 105 && {_a <= 135}) exitwith {4};
if (_a > 135 && {_a <= 165}) exitwith {5};
if (_a > 165 && {_a <= 195}) exitwith {6};
if (_a > 195 && {_a <= 225}) exitwith {7};
if (_a > 225 && {_a <= 255}) exitwith {8};
if (_a > 255 && {_a <= 285}) exitwith {9};
if (_a > 285 && {_a <= 315}) exitwith {10};
if (_a > 315 && {_a < 345}) exitwith {11};

View File

@ -1,43 +0,0 @@
//dumps distance-side drift data for each frame into the rpt
#include "script_component.hpp"
//PARAMS_3(_u,_w,_magazine);
#define __cfg configFile >> "CfgAmmo" >> _ammo
if (isNil QUOTE(FUNC(supah_funwind))) then {
FUNC(supah_funwind) = {
private ["_defl","_pos0","_pos","_dist","_cos","_dir0","_dir","_d","_b"];
PARAMS_3(_pos,_pos0,_dir0); //cur bullet pos, init bullet position, init bullet direction
_d = _pos distance _pos0;
_dir = [(_pos select 0)-(_pos0 select 0),(_pos select 1)-(_pos0 select 1)];
_cos = (_dir select 0)*(_dir0 select 0) + (_dir select 1)*(_dir0 select 1);
_b = sqrt( ((_dir select 0)^2 + (_dir select 1)^2)*((_dir0 select 0)^2 + (_dir0 select 1)^2) );
_cos = if (_b == 0) then {0} else {_cos/_b};
_defl = _d*sqrt(1 - _cos^2);
TRACE_2("",_d*_cos,_defl);
};
};
private ["_unit","_weapon","_ammo","_bullet","_veh","_vel"];
_bullet = _this select 5;
if (isNull _bullet) exitwith {};
_unit = _this select 0;
_weapon = _this select 1;
_ammo = _this select 4;
_veh = vehicle player;
if (_bullet isKindOf "bulletBase") then {
[_bullet, velocity _bullet, getpos _bullet] spawn {
private ["_pos0"];
PARAMS_2(_bullet,_vel0);
_pos0 = [(_this select 2) select 0,(_this select 2) select 1];
while {alive _bullet} do {
[[(getpos _bullet) select 0,(getpos _bullet) select 1],_pos0,_vel0] call FUNC(supah_funwind);
sleep 0.001;
};
};
};

View File

@ -1,14 +0,0 @@
#include "script_component.hpp"
#define __enableWindClient (["ACE", "ACE_WIND_CONFIG", "enable_drift"] call ace_settings_fnc_getNumber)
private ["_unit","_weapon","_ammo","_bullet","_go"];
// mission global variables (force_drift_on/off) override clientside drift setting
_go = __enableWindClient;
if (isMultiplayer) then {
if (GVAR(force_drift_off)) exitwith {_go = 0};
if (GVAR(force_drift_on)) exitwith {_go = 1};
};
if (_go == 0) exitwith {};
[_this select 6,_this select 1,_this select 0,_this select 4] call FUNC(bulletflight);

View File

@ -1,20 +0,0 @@
_return = [0,0,0];
if(!isNil "ACE_WIND_PARAMS") then {
_dir = ACE_WIND_PARAMS select 0;
_dirRange = (ACE_WIND_PARAMS select 1)-(ACE_WIND_PARAMS select 0);
_spd = ACE_WIND_PARAMS select 2;
_spdRange = (ACE_WIND_PARAMS select 3)-(ACE_WIND_PARAMS select 2);
_period = ACE_WIND_PARAMS select 4;
_periodPosition = (time - ace_wind_period_start_time) min _period;
_periodPercent = _periodPosition/_period;
_spdInc = _spdRange*_periodPercent;
_dirInc = _dirRange*_periodPercent;
_spd = (_spd + _spdInc);
_dir = _dir + _dirInc;
if (_dir > 360) then {_dir = _dir - 360};
if (_dir < 0) then {_dir = _dir + 360};
_return = [_spd*sin _dir, _spd*cos _dir, 0];
};
_return;

View File

@ -1,35 +0,0 @@
#include "script_component.hpp"
#define __dsp (uiNamespace getVariable "ACE_RscWindIntuitive")
#define __ctrl (__dsp displayCtrl 1591514)
private["_class","_wpn","_s"];
PARAMS_1(_keyData);
//a 'valve' to cut off multiple key press events within 1 frame
if (GVAR(presstime) == time) exitwith {false};
GVAR(presstime) = time;
if (GVAR(running)) exitwith { GVAR(running) = false; false }; //switch info off
GVAR(running) = true;
if ((player getVariable ["ace_sys_eject_skydiving",false]) || {((vehicle player) iskindof "BIS_Steerable_Parachute" || {(vehicle player) iskindof "ParachuteBase"})}) then {
[] spawn ace_sys_eject_fnc_showAltimeter;
} else {
if (player != vehicle player && {!(vehicle player iskindof "StaticWeapon")}) exitwith { GVAR(running) = false; false }; // Allow checking wind in Static Laserdesignator and Spottingscope
0 spawn {
private ["_unit","_str","_clock","_cookie"];
_unit = player;
13523 cutRsc ["ACE_RscWindIntuitive", "PLAIN"];
__ctrl ctrlsetscale 0.75;
__ctrl ctrlcommit 0;
while { GVAR(running) && {player == _unit} && {!(isNull __dsp)} } do {
_str = ACE_wind call ACE_fnc_magnitude;
_clock = call FUNC(clockwind);
_cookie = [_clock,_str] call FUNC(wind_intuitive);
//hint format["dir %1 str %2",_clock,_str];
sleep 0.5;
};
GVAR(running) = false;
if (!isNull __dsp) then { 13523 cutRsc ["Default", "PLAIN",3] };
};
};
true;

View File

@ -1,82 +0,0 @@
#include "script_component.hpp"
//player sideChat format["overcast: %1", overcast];
if(ace_wind_rain_period_count > ace_wind_rain_next_period) then {
if(overcast >= 0.7) then {
_lastRain = ace_wind_current_rain;
_rainOverCast = ((overcast-0.7)/0.3);
ace_wind_rain_next_period = ceil((1+random(10))/(ace_wind_overcast_multiplier));
ace_wind_current_rain = (ace_wind_current_rain+(((ace_wind_current_rain))*((_rainOverCast*(ace_wind_overcast_multiplier))/8)*ace_wind_rain_current_range));
ace_wind_current_rain = (ace_wind_current_rain max 0.01) min 1;
_transitionTime = (_rainOverCast*5)+(random (_rainOverCast*20));
ace_wind_rain_current_range = -1+(random 2);
// player sideChat format["lastRain: %1 currentRain: %2", _lastRain, ace_wind_current_rain];
// player sideChat format["_transitionTime: %1", _transitionTime];
ACE_RAIN_PARAMS = [_lastRain, ace_wind_current_rain, _transitionTime];
} else {
ace_wind_current_rain = 0;
_lastRain = ace_wind_current_rain;
_rainOverCast = 1;
_transitionTime = (_rainOverCast*5)+(random (_rainOverCast*20));
ACE_RAIN_PARAMS = [_lastRain, ace_wind_current_rain, _transitionTime];
TRACE_4("",_lastRain,_rainOverCast,_transitionTime, overcast);
};
ace_wind_rain_period_start_time = time;
publicVariable "ACE_RAIN_PARAMS";
};
if(ace_wind_period_count > ace_wind_next_period) then {
_startDir = ace_wind_current_dir;
_startSpeed = ace_wind_current_speed;
ace_wind_current_dir = (ace_wind_current_dir+(((ace_wind_current_dir))*((overcast*(ace_wind_overcast_multiplier))/8)*ace_wind_current_range_dir));
ace_wind_current_speed = (ace_wind_current_speed+(((ace_wind_current_speed))*(overcast*(ace_wind_overcast_multiplier)/12)*ace_wind_current_range_speed));
ace_wind_current_speed = ace_wind_current_speed max 0.01;
if(ace_wind_current_dir < 0) then {
ace_wind_current_dir = ace_wind_current_dir+360;
};
ace_wind_current_dir = ace_wind_current_dir % 360;
ace_wind_current_range_speed = (-1)+(random 2);
ace_wind_current_range_dir = (-1)+(random 2);
ace_wind_next_period = ceil((2+random(5))/(ace_wind_overcast_multiplier));
ace_wind_period_count = 0;
_gustCount = floor(random(ace_wind_next_period*(overcast*((ace_wind_overcast_multiplier^3)))));
_time = ace_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 = (ace_wind_current_dir+(ace_wind_current_dir*(-1+(random 2))))*(overcast*(ace_wind_overcast_multiplier));
_gusts set[(count _gusts), [_timeTillGust, _gustTime, _gustSpeed, _gustDir]];
};
};
// diag_log text "-------";
// diag_log text format["startDir: %1 endDir: %2", _startDir, ace_wind_current_dir];
// diag_log text format["startSpeed: %1 endSpeed: %2", _startSpeed, ace_wind_current_speed];
// diag_log text format["ace_wind_current_range_speed: %1", ace_wind_current_range_speed];
// diag_log text format["ace_wind_current_range_dir: %1", ace_wind_current_range_dir];
// diag_log text format["gusts: %1", _gusts];
// diag_log text format["next period: %1", ace_wind_next_period];
ace_wind_total_time = ace_wind_total_time + ace_wind_next_period;
// diag_log text format["%1,%2,%3,%4", ace_wind_total_time, ace_wind_current_dir, ace_wind_current_speed, _gustCount];
ACE_WIND_PARAMS = [_startDir, ace_wind_current_dir, _startSpeed, ace_wind_current_speed, _time, _gusts];
ace_wind_period_start_time = time;
publicVariable "ACE_WIND_PARAMS";
};
ace_wind_rain_period_count = ace_wind_rain_period_count + 1;
ace_wind_period_count = ace_wind_period_count + 1;

View File

@ -1,30 +0,0 @@
/* fnc_wind_intuitive.sqf | (c) 2009 by rocko */
// [5,4] spawn ace_sys_wind_deflection_fnc_wind_intuitive
#include "script_component.hpp"
#define __dsp (uiNamespace getVariable "ACE_RscWindIntuitive")
#define __ctrl (__dsp displayCtrl 1591514)
#define __path "\x\ace\addons\sys_wind_deflection\data\"
private["_ar","_str","_str_tmp"];
PARAMS_2(_ar_number,_str_number);
// Using Beaufort scale values - assuming wind in ACE is done m/s - otherwise fuck it and make better :)
_nowind = false;
if (_str_number >= 0 && {_str_number < 0.3}) then { _str = [1,1,1,0.5], _nowind = true; }; //Calm / probably never happens in arma (even vanilla has always light wind)
if (_str_number >= 0.3 && {_str_number < 2}) then { _str = [1,1,1,0.5]}; //Light air - white
if (_str_number >= 2 && {_str_number < 3}) then { _str = [0.56,0.93,0.56,0.5]}; //Light breeze - light green
if (_str_number >= 3 && {_str_number < 5}) then { _str = [0.53,1,0.18,0.5]}; //Gentle breeze - green yellow
if (_str_number >= 5 && {_str_number < 8}) then { _str = [1,1,0,0.5]}; //Moderate breeze - yellow
if (_str_number >= 8 && {_str_number < 11}) then { _str = [0.85,0.65,0.1,0.5]}; //Fresh breeze - dark yellow
if (_str_number >= 11 && {_str_number < 14}) then { _str = [1,0.65,0,0.5]}; //Strong breeze - orange
if (_str_number >= 14 && {_str_number < 17}) then { _str = [0.93,0.25,0,0.5]}; //High wind,moderate gale, near gale - red orange
if (_str_number >= 17) then { _str = [1,0,0,0.5]}; //Gale,fresh gale - red
_ar = if (!_nowind) then { format[__path+"wind"+"%1"+".paa", _ar_number] } else { __path+"wind0.paa" };
__ctrl ctrlSetText _ar;
__ctrl ctrlSetTextColor _str;

View File

@ -1 +0,0 @@
#include "\z\ace\addons\wind_deflection\script_component.hpp"

View File

@ -1,12 +0,0 @@
#define COMPONENT wind_deflection
#include "\x\ace\addons\main\script_mod.hpp"
#ifdef DEBUG_ENABLED_WIND_DEFLECTION
#define DEBUG_MODE_FULL
#endif
#ifdef DEBUG_SETTINGS_WIND_DEFLECTION
#define DEBUG_SETTINGS DEBUG_SETTINGS_WIND_DEFLECTION
#endif
#include "\x\ace\addons\main\script_macros.hpp"

View File

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="sys_wind_deflection">
<Container name="STR_ACE_MENU">
<Key ID="STR_ACE_MENU_MEASUREWIND">
<German>Wind schätzen</German>
<English>Measure wind</English>
<Italian>Measure wind</Italian>
<Spanish>Measure wind</Spanish>
<French>Mesurer vent</French>
<Czech>Změřit sílu větru</Czech>
<Russian>Измерить ветер</Russian>
<Polish>Pomiar wiatru</Polish>
<Hungarian>Szél mérés</Hungarian>
</Key>
</Container>
</Package>
</Project>