Merge remote-tracking branch 'origin/wind_deflection' into weather

This commit is contained in:
Nicolás Badano 2015-01-20 18:10:24 -03:00
commit 2255a56885
34 changed files with 565 additions and 0 deletions

View File

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

View File

@ -0,0 +1,19 @@
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

@ -0,0 +1,35 @@
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

@ -0,0 +1,33 @@
//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

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

View File

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

@ -0,0 +1,55 @@
//#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

@ -0,0 +1,45 @@
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

@ -0,0 +1,28 @@
#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"

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

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

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

@ -0,0 +1,43 @@
//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

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

@ -0,0 +1,20 @@
_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

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

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

@ -0,0 +1,30 @@
/* 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

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

View File

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

@ -0,0 +1,18 @@
<?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>