From 0f04d0dfb1c8fdd80f9cf3b573f73378cfd6a4fa Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Sun, 18 Jan 2015 21:43:51 +0200 Subject: [PATCH 01/10] Moved goggles to addons folder and renamed all occurances of AGM to ACE. --- TO_MERGE/agm/Goggles/config.cpp | 295 ------------------ .../Goggles/functions/fn_ApplyDirtEffect.sqf | 32 -- .../agm/Goggles/functions/fn_CheckGoggles.sqf | 52 --- TO_MERGE/agm/Goggles/functions/fn_Init.sqf | 111 ------- .../agm/Goggles/functions/fn_OnEachFrame.sqf | 80 ----- .../agm/Goggles/functions/fn_RainEffect.sqf | 61 ---- .../Goggles/functions/fn_RemoveRainEffect.sqf | 21 -- TO_MERGE/agm/Goggles/script.sqf | 21 -- .../goggles}/CfgFunctions.hpp | 6 +- .../Goggles => addons/goggles}/RscTitles.hpp | 20 +- .../goggles}/anim/WipeGlasses.rtm | Bin .../Goggles => addons/goggles}/anim/model.cfg | 0 addons/goggles/config.cpp | 295 ++++++++++++++++++ .../agm/Goggles => addons/goggles}/define.hpp | 0 .../goggles/functions/fn_ApplyDirtEffect.sqf | 32 ++ .../goggles}/functions/fn_ApplyDust.sqf | 36 +-- .../functions/fn_ApplyGlassesEffect.sqf | 32 +- addons/goggles/functions/fn_CheckGoggles.sqf | 52 +++ .../goggles}/functions/fn_ClearGlasses.sqf | 16 +- .../goggles}/functions/fn_DustHandler.sqf | 12 +- .../goggles}/functions/fn_ExternalCamera.sqf | 6 +- .../functions/fn_GetExplosionIndex.sqf | 4 +- addons/goggles/functions/fn_Init.sqf | 111 +++++++ addons/goggles/functions/fn_OnEachFrame.sqf | 80 +++++ addons/goggles/functions/fn_RainEffect.sqf | 61 ++++ .../functions/fn_RemoveDirtEffect.sqf | 8 +- .../functions/fn_RemoveDustEffect.sqf | 8 +- .../functions/fn_RemoveGlassesEffect.sqf | 16 +- .../goggles/functions/fn_RemoveRainEffect.sqf | 21 ++ .../goggles}/functions/fn_isDivingGoggles.sqf | 4 +- .../functions/fn_isGogglesVisible.sqf | 10 +- .../goggles}/functions/fn_isInRotorWash.sqf | 6 +- addons/goggles/script.sqf | 21 ++ .../goggles}/stringtable.xml | 8 +- .../goggles}/textures/HUD/CombatGoggles.paa | Bin .../textures/HUD/CombatGogglesCracked.paa | Bin .../goggles}/textures/HUD/Cracked.paa | Bin .../goggles}/textures/HUD/DivingGoggles.paa | Bin .../textures/HUD/DivingGogglesCracked.paa | Bin .../goggles}/textures/fx/dust/1.paa | Bin .../goggles}/textures/fx/dust/2.paa | Bin 41 files changed, 769 insertions(+), 769 deletions(-) delete mode 100644 TO_MERGE/agm/Goggles/config.cpp delete mode 100644 TO_MERGE/agm/Goggles/functions/fn_ApplyDirtEffect.sqf delete mode 100644 TO_MERGE/agm/Goggles/functions/fn_CheckGoggles.sqf delete mode 100644 TO_MERGE/agm/Goggles/functions/fn_Init.sqf delete mode 100644 TO_MERGE/agm/Goggles/functions/fn_OnEachFrame.sqf delete mode 100644 TO_MERGE/agm/Goggles/functions/fn_RainEffect.sqf delete mode 100644 TO_MERGE/agm/Goggles/functions/fn_RemoveRainEffect.sqf delete mode 100644 TO_MERGE/agm/Goggles/script.sqf rename {TO_MERGE/agm/Goggles => addons/goggles}/CfgFunctions.hpp (86%) rename {TO_MERGE/agm/Goggles => addons/goggles}/RscTitles.hpp (50%) rename {TO_MERGE/agm/Goggles => addons/goggles}/anim/WipeGlasses.rtm (100%) rename {TO_MERGE/agm/Goggles => addons/goggles}/anim/model.cfg (100%) create mode 100644 addons/goggles/config.cpp rename {TO_MERGE/agm/Goggles => addons/goggles}/define.hpp (100%) create mode 100644 addons/goggles/functions/fn_ApplyDirtEffect.sqf rename {TO_MERGE/agm/Goggles => addons/goggles}/functions/fn_ApplyDust.sqf (54%) rename {TO_MERGE/agm/Goggles => addons/goggles}/functions/fn_ApplyGlassesEffect.sqf (58%) create mode 100644 addons/goggles/functions/fn_CheckGoggles.sqf rename {TO_MERGE/agm/Goggles => addons/goggles}/functions/fn_ClearGlasses.sqf (58%) rename {TO_MERGE/agm/Goggles => addons/goggles}/functions/fn_DustHandler.sqf (87%) rename {TO_MERGE/agm/Goggles => addons/goggles}/functions/fn_ExternalCamera.sqf (64%) rename {TO_MERGE/agm/Goggles => addons/goggles}/functions/fn_GetExplosionIndex.sqf (81%) create mode 100644 addons/goggles/functions/fn_Init.sqf create mode 100644 addons/goggles/functions/fn_OnEachFrame.sqf create mode 100644 addons/goggles/functions/fn_RainEffect.sqf rename {TO_MERGE/agm/Goggles => addons/goggles}/functions/fn_RemoveDirtEffect.sqf (50%) rename {TO_MERGE/agm/Goggles => addons/goggles}/functions/fn_RemoveDustEffect.sqf (50%) rename {TO_MERGE/agm/Goggles => addons/goggles}/functions/fn_RemoveGlassesEffect.sqf (52%) create mode 100644 addons/goggles/functions/fn_RemoveRainEffect.sqf rename {TO_MERGE/agm/Goggles => addons/goggles}/functions/fn_isDivingGoggles.sqf (84%) rename {TO_MERGE/agm/Goggles => addons/goggles}/functions/fn_isGogglesVisible.sqf (73%) rename {TO_MERGE/agm/Goggles => addons/goggles}/functions/fn_isInRotorWash.sqf (84%) create mode 100644 addons/goggles/script.sqf rename {TO_MERGE/agm/Goggles => addons/goggles}/stringtable.xml (91%) rename {TO_MERGE/agm/Goggles => addons/goggles}/textures/HUD/CombatGoggles.paa (100%) rename {TO_MERGE/agm/Goggles => addons/goggles}/textures/HUD/CombatGogglesCracked.paa (100%) rename {TO_MERGE/agm/Goggles => addons/goggles}/textures/HUD/Cracked.paa (100%) rename {TO_MERGE/agm/Goggles => addons/goggles}/textures/HUD/DivingGoggles.paa (100%) rename {TO_MERGE/agm/Goggles => addons/goggles}/textures/HUD/DivingGogglesCracked.paa (100%) rename {TO_MERGE/agm/Goggles => addons/goggles}/textures/fx/dust/1.paa (100%) rename {TO_MERGE/agm/Goggles => addons/goggles}/textures/fx/dust/2.paa (100%) diff --git a/TO_MERGE/agm/Goggles/config.cpp b/TO_MERGE/agm/Goggles/config.cpp deleted file mode 100644 index 8bc8ffa9b5..0000000000 --- a/TO_MERGE/agm/Goggles/config.cpp +++ /dev/null @@ -1,295 +0,0 @@ -#define COLOUR 8.0 -class CfgPatches { - class AGM_Goggles { - units[] = {}; - weapons[] = {}; - requiredVersion = 0.60; - requiredAddons[] = {AGM_Core}; - version = "0.95"; - versionStr = "0.95"; - versionAr[] = {0,95,0}; - author[] = {"Garth 'L-H' de Wet"}; - authorUrl = "https://github.com/CorruptedHeart"; - }; -}; - -#include "CfgFunctions.hpp" -#define COMBAT_GOGGLES AGM_Overlay="AGM_Goggles\textures\HUD\CombatGoggles.paa"; \ - AGM_OverlayCracked = "AGM_Goggles\textures\HUD\CombatGogglesCracked.paa"; \ - AGM_Resistance = 2; \ - AGM_Protection = 1; - -class CfgGlasses { - class None { - AGM_Color[] = {0,0,0}; - AGM_TintAmount=0; - AGM_Overlay = ""; - AGM_OverlayDirt = "A3\Ui_f\data\igui\rsctitles\HealthTextures\dust_upper_ca.paa"; - AGM_OverlayCracked = "AGM_Goggles\textures\HUD\Cracked.paa"; - AGM_Resistance = 0; - AGM_Protection = 0; - AGM_DustPath = "AGM_Goggles\textures\fx\dust\%1.paa"; - }; - - class G_Combat:None { - COMBAT_GOGGLES - }; - - class G_Diving { - AGM_Overlay="AGM_Goggles\textures\HUD\DivingGoggles.paa"; - AGM_OverlayCracked = "AGM_Goggles\textures\HUD\DivingGogglesCracked.paa"; - AGM_Resistance = 2; - AGM_Protection = 1; - }; - - class G_Lowprofile:None { - AGM_TintAmount=COLOUR*2; - AGM_Resistance = 2; - AGM_Protection = 1; - }; - - class G_Shades_Black:None { - AGM_TintAmount=COLOUR*2; - AGM_Resistance = 1; - }; - - class G_Shades_Blue:None{ - AGM_Color[] = {0,0,1}; - AGM_TintAmount=COLOUR; - AGM_Resistance = 1; - }; - - class G_Shades_Green:None{ - AGM_Color[] = {0,1,0}; - AGM_TintAmount=COLOUR; - AGM_Resistance = 1; - }; - - class G_Shades_Red:None{ - AGM_Color[] = {1,0,0}; - AGM_TintAmount=COLOUR; - AGM_Resistance = 1; - }; - - class G_Spectacles:None{ - AGM_TintAmount=COLOUR; - AGM_Resistance = 1; - }; - - class G_Spectacles_Tinted:None{ - AGM_TintAmount=COLOUR*2; - AGM_Resistance = 1; - }; - - class G_Sport_Blackred:None{ - AGM_Color[] = {1,0,0}; - AGM_TintAmount=COLOUR; - AGM_Resistance = 1; - }; - - class G_Sport_BlackWhite:None{ - AGM_Color[] = {0,0,1}; - AGM_TintAmount=COLOUR; - AGM_Resistance = 1; - }; - - class G_Sport_Blackyellow:None{ - AGM_TintAmount=COLOUR*2; - AGM_Resistance = 1; - }; - - class G_Sport_Checkered:None{ - AGM_TintAmount=COLOUR*2; - AGM_Resistance = 1; - }; - - class G_Sport_Greenblack:None{ - AGM_TintAmount=COLOUR*2; - AGM_Resistance = 1; - }; - - class G_Sport_Red:None{ - AGM_TintAmount=COLOUR*2; - AGM_Color[] = {0,0,0}; - AGM_Resistance = 1; - }; - - class G_Squares:None{ - AGM_TintAmount=COLOUR; - AGM_Resistance = 1; - }; - - class G_Squares_Tinted:None{ - AGM_TintAmount=COLOUR; - AGM_Resistance = 1; - }; - - class G_Tactical_Black:None{ - AGM_TintAmount=COLOUR; - AGM_Color[] = {0,0,-1.5}; - AGM_Resistance = 1; - }; - - class G_Tactical_Clear:None{ - AGM_TintAmount=COLOUR; - AGM_Color[] = {0,0,-1}; - AGM_Resistance = 1; - }; - - class G_Aviator:None{ - AGM_Color[] = {0,0,-1}; - AGM_TintAmount=COLOUR; - AGM_Resistance = 1; - }; - - class G_Lady_Blue:None{ - AGM_Color[] = {0,0,1}; - AGM_TintAmount=COLOUR; - AGM_Resistance = 1; - }; - - class G_Lady_Red:None{ - AGM_Color[] = {1,0,0}; - AGM_TintAmount=COLOUR; - AGM_Resistance = 1; - }; - - class G_Lady_Dark:None{ - AGM_TintAmount=COLOUR*2; - AGM_Resistance = 1; - }; - - class G_Lady_Mirror:None{ - AGM_TintAmount=COLOUR; - AGM_Resistance = 1; - }; - - class AV_ESS_blk:None{ - COMBAT_GOGGLES - }; - - class G_Balaclava_blk; - - class G_Balaclava_combat:G_Balaclava_blk { - COMBAT_GOGGLES - }; - - class G_Balaclava_lowprofile:G_Balaclava_blk { - AGM_TintAmount=COLOUR*2; - AGM_Resistance = 2; - AGM_Protection = 1; - }; - - class G_Bandanna_blk; - class G_Bandanna_shades:G_Bandanna_blk { - AGM_TintAmount=COLOUR*2; - AGM_Resistance = 1; - AGM_Protection = 1; - }; - class G_Bandanna_sport:G_Bandanna_blk { - AGM_Color[] = {1,0,0}; - AGM_TintAmount=COLOUR; - AGM_Resistance = 1; - AGM_Protection = 1; - }; - class G_Bandanna_aviator:G_Bandanna_blk { - AGM_Color[] = {0,0,-1}; - AGM_TintAmount=COLOUR; - AGM_Resistance = 1; - AGM_Protection = 1; - }; -}; - -#include "RscTitles.hpp" - -class CfgMovesBasic -{ - class ManActions - { - GestureWipeFace[] = {"GestureWipeFace", "gesture"}; - }; -}; - -class CfgGesturesMale -{ - class States - { - class GestureFreezeStand; - class GestureWipeFace: GestureFreezeStand - { - file = "\AGM_Goggles\anim\WipeGlasses.rtm"; - canPullTrigger = 0; - }; - }; -}; - -class CfgWeapons{ - class H_HelmetB; - - class H_CrewHelmetHeli_B:H_HelmetB { - AGM_Protection = 1; - }; - class H_PilotHelmetHeli_B:H_HelmetB { - AGM_Protection = 1; - }; - class H_PilotHelmetFighter_B:H_HelmetB { - AGM_Protection = 1; - }; -}; - -class RifleAssaultCloud { - AGM_Goggles_BulletCount = 4; -}; -class MachineGunCloud { - AGM_Goggles_BulletCount = 3; -}; -class SniperCloud { - AGM_Goggles_BulletCount = 1; -}; - -class AGM_Core_Default_Keys { - class wipeGlasses { - displayName = $STR_AGM_Goggles_WipeGlasses; - condition = "!(player getVariable['AGM_isUnconscious', false])"; - statement = "call AGM_Goggles_fnc_ClearGlasses;"; - key = 20; // T - shift = 1; - control = 1; - alt = 0; - }; -}; - -class AGM_Core_Options { - class showInThirdPerson { - displayName = $STR_AGM_Goggles_ShowInThirdPerson; - default = 0; - }; -}; - -class CfgCloudlets { - class Default; - class AGMRainEffect:Default { - interval = 0.001; - particleShape = "\A3\data_f\ParticleEffects\Universal\Refract"; - particleFSNtieth = 1; - particleFSIndex = 0; - particleFSFrameCount = 1; - particleFSLoop = 1; - - particleType = "Billboard"; - lifeTime = 0.5; - rotationVelocity = 1; - weight = 100; - volume = 0.000; - rubbing = 1.7; - size[] = {0.1}; - color[] = {{1,1,1,1}}; - animationSpeed[] = {0,1}; - randomDirectionPeriod = 0.2; - randomDirectionIntensity = 1.2; - positionVar[] = {2, 2, 2.5}; - sizeVar = 0.01; - colorVar[] = {0, 0, 0, 0.1}; - destroyOnWaterSurface = 1; - }; -}; diff --git a/TO_MERGE/agm/Goggles/functions/fn_ApplyDirtEffect.sqf b/TO_MERGE/agm/Goggles/functions/fn_ApplyDirtEffect.sqf deleted file mode 100644 index eea86c295e..0000000000 --- a/TO_MERGE/agm/Goggles/functions/fn_ApplyDirtEffect.sqf +++ /dev/null @@ -1,32 +0,0 @@ -/* - Name: AGM_Goggles_fnc_ApplyDirtEffect - - Author: Garth de Wet (LH) - - Description: - Adds dirt effect to the glasses. - - Parameters: - Nothing - - Returns: - BOOLEAN - True if succeeded false if not - - Example: - call AGM_Goggles_fnc_ApplyDirtEffect; -*/ -#include "\AGM_Goggles\script.sqf" - -if (cameraOn != player || call AGM_Goggles_fnc_ExternalCamera) exitWith{false}; -private "_dirtImage"; -AGM_Goggles_Effects set [DIRT, true]; - -if (player call AGM_Goggles_fnc_isGogglesVisible) then{ - _dirtImage = getText(ConfigFile >> "CfgGlasses" >> goggles player >> "AGM_OverlayDirt"); - if (_dirtImage != "") then { - 100 cutRsc["RscAGM_GogglesEffects", "PLAIN",0.1, false]; - (uiNamespace getVariable ["AGM_Goggles_DisplayEffects", displayNull] displayCtrl 10660) ctrlSetText _dirtImage; - }; -}; - -true \ No newline at end of file diff --git a/TO_MERGE/agm/Goggles/functions/fn_CheckGoggles.sqf b/TO_MERGE/agm/Goggles/functions/fn_CheckGoggles.sqf deleted file mode 100644 index e03bbc6069..0000000000 --- a/TO_MERGE/agm/Goggles/functions/fn_CheckGoggles.sqf +++ /dev/null @@ -1,52 +0,0 @@ -/* - Author: Garth de Wet (LH) - - Description: - Performs rain checks and checks to see whether glasses effects have been applied or not. - Checks for external camera and removes effects. - - Parameters: - Nothing - - Returns: - Nothing - - Example: - [] execVM "AGM_Goggles\functions\fn_CheckGoggles.sqf"; -*/ -#include "\AGM_Goggles\script.sqf" -waitUntil {sleep 0.46;alive player}; -call AGM_Goggles_fnc_CheckGlasses; -["AGM_Goggles_RotorWash", "OnEachFrame", {call AGM_Goggles_fnc_OnEachFrame;}] call BIS_fnc_addStackedEventHandler; -[] spawn AGM_Goggles_fnc_RainEffect; -while {alive player} do { - sleep 1; - if (true) then { - // Detect if curator interface is open and disable effects - if (!isNull(findDisplay 312)) exitWith { - if (AGM_Goggles_EffectsActive) then { - call AGM_Goggles_fnc_RemoveGlassesEffect; - }; - }; - call AGM_Goggles_fnc_CheckGlasses; - if !(player call AGM_Goggles_fnc_isGogglesVisible) exitWith { - if (AGM_Goggles_EffectsActive) then { - call AGM_Goggles_fnc_RemoveGlassesEffect; - }; - }; - if (call AGM_Goggles_fnc_ExternalCamera) exitWith { - if (AGM_Goggles_EffectsActive) then { - call AGM_Goggles_fnc_RemoveGlassesEffect; - }; - }; - if !(AGM_Goggles_EffectsActive) then { - (goggles player) call AGM_Goggles_fnc_ApplyGlassesEffect; - } else { - if ((goggles player) call AGM_Goggles_fnc_isDivingGoggles && {underwater player}) then { - call AGM_Goggles_fnc_RemoveRainEffect; - call AGM_Goggles_fnc_RemoveDirtEffect; - call AGM_Goggles_fnc_RemoveDustEffect; - }; - }; - }; -}; \ No newline at end of file diff --git a/TO_MERGE/agm/Goggles/functions/fn_Init.sqf b/TO_MERGE/agm/Goggles/functions/fn_Init.sqf deleted file mode 100644 index 7a8710c7f7..0000000000 --- a/TO_MERGE/agm/Goggles/functions/fn_Init.sqf +++ /dev/null @@ -1,111 +0,0 @@ -/* - Name: AGM_Goggles_fnc_Init - - Author: Garth de Wet (LH) - - Description: - Sets up the glasses mod for usage. Initialises variables and event handlers. - Shouldn't be called by a user/modder ever. Done by the engine. - - Parameters: - Nothing - - Returns: - Nothing - - Example: - call AGM_Goggles_fnc_Init; -*/ -if (!hasInterface) exitWith {}; -#include "\AGM_Goggles\script.sqf" - -if isNil("AGM_Goggles_UsePP") then { - AGM_Goggles_UsePP = true; -}; - -AGM_Goggles_PostProcess = ppEffectCreate ["ColorCorrections", 1995]; -AGM_Goggles_PostProcessEyes = ppEffectCreate ["ColorCorrections", 1992]; -AGM_Goggles_PostProcessEyes ppEffectAdjust[1, 1, 0, [0,0,0,0], [0,0,0,1],[1,1,1,0]]; -AGM_Goggles_PostProcessEyes ppEffectCommit 0; -AGM_Goggles_PostProcessEyes ppEffectEnable false; -AGM_Goggles_EffectsActive = false; -AGM_Goggles_Effects = GLASSESDEFAULT; -AGM_Goggles_Current = "None"; -AGM_Goggles_EyesDamageScript = 0 spawn {}; -AGM_Goggles_FrameEvent = [false, [false,20]]; -AGM_Goggles_PostProcessEyes_Enabled = false; -AGM_Goggles_DustHandler = 0 spawn {}; -AGM_Goggles_RainDrops = objNull; - -AGM_Goggles_fnc_CheckGlasses = { - if (AGM_Goggles_Current != (goggles player)) then { - AGM_Goggles_Current = (goggles player); - ["GlassesChanged",[AGM_Goggles_Current]] call CBA_fnc_localEvent; - }; -}; - -player addEventHandler ["Explosion", { - if (alive player) then { - call AGM_Goggles_fnc_ApplyDirtEffect; - if (GETBROKEN) exitWith {}; - if (((_this select 1) call AGM_Goggles_fnc_GetExplosionIndex) < getNumber(ConfigFile >> "CfgGlasses" >> AGM_Goggles_Current >> "AGM_Resistance")) exitWith {}; - if !(player call AGM_Goggles_fnc_isGogglesVisible) exitWith {["GlassesCracked",[player]] call CBA_fnc_localEvent;}; - AGM_Goggles_Effects set [BROKEN, true]; - if (getText(ConfigFile >> "CfgGlasses" >> AGM_Goggles_Current >> "AGM_OverlayCracked") != "" && {cameraOn == player}) then { - if (call AGM_Goggles_fnc_ExternalCamera) exitWith {}; - if (isNull(GLASSDISPLAY)) then { - 150 cutRsc["RscAGM_Goggles", "PLAIN",1, false]; - }; - (GLASSDISPLAY displayCtrl 10650) ctrlSetText getText(ConfigFile >> "CfgGlasses" >> AGM_Goggles_Current >> "AGM_OverlayCracked"); - }; - ["GlassesCracked",[player]] call CBA_fnc_localEvent; - }; -}]; -player addEventHandler ["Killed",{ - [] spawn { - sleep 2; - AGM_Goggles_PostProcessEyes ppEffectEnable false; - AGM_Goggles_Effects = GLASSESDEFAULT; - call AGM_Goggles_fnc_RemoveGlassesEffect; - AGM_Goggles_EffectsActive=false; - player setVariable ["AGM_EyesDamaged", false]; - terminate AGM_Goggles_EyesDamageScript; - terminate AGM_Goggles_MainLoop; - terminate AGM_Goggles_DustHandler; - AGM_Goggles_MainLoop = [] spawn AGM_Goggles_fnc_CheckGoggles; - }; -}]; -player addEventHandler ["Fired",{[_this select 0, _this select 1] call AGM_Goggles_fnc_DustHandler;}]; -player AddEventHandler ["Take",{call AGM_Goggles_fnc_CheckGlasses;}]; -player AddEventHandler ["Put", {call AGM_Goggles_fnc_CheckGlasses;}]; - -["GlassesChanged",{ - AGM_Goggles_Effects = GLASSESDEFAULT; - - if (call AGM_Goggles_fnc_ExternalCamera) exitWith {call AGM_Goggles_fnc_RemoveGlassesEffect}; - - if (player call AGM_Goggles_fnc_isGogglesVisible) then { - (_this select 0) call AGM_Goggles_fnc_ApplyGlassesEffect; - } else { - call AGM_Goggles_fnc_RemoveGlassesEffect; - }; -}] call CBA_fnc_addEventHandler; -["GlassesCracked",{ - if (_this select 0 != player) exitWith {}; - player setVariable ["AGM_EyesDamaged", true]; - if !(scriptDone AGM_Goggles_EyesDamageScript) then { - terminate AGM_Goggles_EyesDamageScript; - }; - AGM_Goggles_PostProcessEyes ppEffectAdjust[1, 1, 0, [0,0,0,0], [0.5,0.5,0.5,0.5],[1,1,1,0]]; - AGM_Goggles_PostProcessEyes ppEffectCommit 0; - AGM_Goggles_PostProcessEyes ppEffectEnable true; - AGM_Goggles_EyesDamageScript = [] spawn { - sleep 25; - AGM_Goggles_PostProcessEyes ppEffectAdjust[1, 1, 0, [0,0,0,0], [1,1,1,1],[1,1,1,0]]; - AGM_Goggles_PostProcessEyes ppEffectCommit 5; - sleep 5; - AGM_Goggles_PostProcessEyes ppEffectEnable false; - player setVariable ["AGM_EyesDamaged", false]; - }; -}] call CBA_fnc_addEventHandler; -AGM_Goggles_MainLoop = [] spawn AGM_Goggles_fnc_CheckGoggles; diff --git a/TO_MERGE/agm/Goggles/functions/fn_OnEachFrame.sqf b/TO_MERGE/agm/Goggles/functions/fn_OnEachFrame.sqf deleted file mode 100644 index 660c3d7afa..0000000000 --- a/TO_MERGE/agm/Goggles/functions/fn_OnEachFrame.sqf +++ /dev/null @@ -1,80 +0,0 @@ -/* - Name: AGM_Goggles_fnc_OnEachFrame - - Author: Garth de Wet (LH) - - Description: - Runs every frame checking for helicopters. - - Parameters: - Nothing - - Returns: - Nothing - - Example: - ["AGM_Goggles_RotorWash", "OnEachFrame", "call AGM_Goggles_fnc_OnEachFrame;"] call BIS_fnc_addStackedEventHandler; -*/ -#include "\AGM_Goggles\script.sqf" -if (isNull(player)) then { - ["AGM_Goggles_RotorWash", "OnEachFrame"] call BIS_fnc_removeStackedEventHandler; -}; -AGM_Goggles_FrameEvent set [0, !(AGM_Goggles_FrameEvent select 0)]; -if (AGM_Goggles_FrameEvent select 0) exitWith { - if (vehicle player != player && {!([player] call AGM_Core_fnc_isTurnedOut)}) exitWith {(AGM_Goggles_FrameEvent select 1) set [0, false]; }; - AGM_Goggles_FrameEvent set [1, ([player] call AGM_Goggles_fnc_isInRotorWash)]; -}; -private ["_rotorWash","_safe"]; -_rotorWash = AGM_Goggles_FrameEvent select 1; -_safe = false; -if !(_rotorWash select 0) exitWith { - if (AGM_Goggles_PostProcessEyes_Enabled) then { - AGM_Goggles_PostProcessEyes_Enabled = false; - if (!scriptDone (AGM_Goggles_DustHandler)) then { - terminate AGM_Goggles_DustHandler; - }; - AGM_Goggles_DustHandler = [] spawn { - AGM_Goggles_PostProcessEyes ppEffectAdjust [1, 1, 0, [0,0,0,0], [0,0,0,1],[1,1,1,0]]; - AGM_Goggles_PostProcessEyes ppEffectCommit 2; - sleep 2; - AGM_Goggles_PostProcessEyes ppEffectEnable false; - }; - }; -}; -if ((headgear player) != "") then { - _safe = (getNumber (ConfigFile >> "CfgWeapons" >> (headgear player) >> "AGM_Protection") == 1); -}; -if !(_safe) then { - if !(player call AGM_Goggles_fnc_isGogglesVisible) exitWith{}; - if (GETDUSTT(DAMOUNT) < 2) then { - if (!GETDUSTT(DACTIVE)) then { - SETDUST(DACTIVE,true); - call AGM_Goggles_fnc_ApplyDust; - } else { - if ((_rotorWash select 1) > 0.5) then { - call AGM_Goggles_fnc_ApplyDust; - }; - }; - }; - _safe = (getNumber (ConfigFile >> "CfgGlasses" >> AGM_Goggles_Current >> "AGM_Protection") == 1); -}; -if (_safe) exitWith {}; -if ((_rotorWash select 1) <= 15) then { - private "_scale"; - _scale = 0.7; - if ((_rotorWash select 1) != 0) then { - _scale = CLAMP(0.3*(_rotorWash select 1),0.1,0.3); - } else { - _scale = 0.1; - }; - _scale = 1 - _scale; - if (!scriptDone (AGM_Goggles_DustHandler)) then { - terminate AGM_Goggles_DustHandler; - }; - if !(player getVariable ["AGM_EyesDamaged", false]) then { - AGM_Goggles_PostProcessEyes_Enabled = true; - AGM_Goggles_PostProcessEyes ppEffectAdjust [1, 1, 0, [0,0,0,0], [_scale,_scale,_scale,_scale],[1,1,1,0]]; - AGM_Goggles_PostProcessEyes ppEffectCommit 0.5; - AGM_Goggles_PostProcessEyes ppEffectEnable true; - }; -}; diff --git a/TO_MERGE/agm/Goggles/functions/fn_RainEffect.sqf b/TO_MERGE/agm/Goggles/functions/fn_RainEffect.sqf deleted file mode 100644 index a52862a20e..0000000000 --- a/TO_MERGE/agm/Goggles/functions/fn_RainEffect.sqf +++ /dev/null @@ -1,61 +0,0 @@ -/* - Name: AGM_Goggles_fnc_RainEffect - - Author: Garth de Wet (LH) - - Description: - - - Parameters: - Nothing - - Returns: - Nothing - - Example: - [] spawn AGM_Goggles_fnc_RainEffect; -*/ -#include "\AGM_Goggles\script.sqf" -AGM_Goggles_RainDrops = objNull; -AGM_Goggles_Rain_Active = false; -_fnc_underCover = { - private ["_pos", "_unit"]; - _unit = (_this select 0); - if (vehicle _unit != _unit && {!([_unit] call AGM_Core_fnc_isTurnedOut)}) exitWith {true}; - _pos = eyePos _unit; - ((positionCameraToWorld [0,0,1] select 2) < ((positionCameraToWorld [0,0,0] select 2) - 0.4)) || {(lineIntersects [_pos, _pos vectorAdd [0,0,15], _unit])} -}; -private ["_lastRain"]; -_lastRain = 0; -while {alive player} do { - sleep 0.5; - if (isNull(findDisplay 312)) then { - // Ignore if player is under water - if (!AGM_Goggles_EffectsActive || {underwater player}) exitWith{call AGM_Goggles_fnc_RemoveRainEffect;}; - if (_lastRain != rain) then { - call AGM_Goggles_fnc_RemoveRainEffect; - _lastRain = rain; - // Rain is happening - if (_lastRain > 0.05 && {!([player] call _fnc_underCover)}) then { - AGM_Goggles_Rain_Active = true; - AGM_Goggles_RainDrops = "#particlesource" createVehicleLocal GetPos player; - AGM_Goggles_RainDrops setParticleClass "AGMRainEffect"; - AGM_Goggles_RainDrops setDropInterval (0.07 * (1.1 - _lastRain)); - AGM_Goggles_RainDrops attachTo [vehicle player,[0,0,0]]; - }; - }else{ - if (_lastRain > 0.05) then { - if (AGM_Goggles_Rain_Active && {[player] call _fnc_underCover}) exitWith { - call AGM_Goggles_fnc_RemoveRainEffect; - }; - if (!AGM_Goggles_Rain_Active) then { - _lastRain = -1; - }; - }; - }; - }else{ - if (AGM_Goggles_Rain_Active) then { - call AGM_Goggles_fnc_RemoveRainEffect; - }; - }; -}; \ No newline at end of file diff --git a/TO_MERGE/agm/Goggles/functions/fn_RemoveRainEffect.sqf b/TO_MERGE/agm/Goggles/functions/fn_RemoveRainEffect.sqf deleted file mode 100644 index a3e3629bb1..0000000000 --- a/TO_MERGE/agm/Goggles/functions/fn_RemoveRainEffect.sqf +++ /dev/null @@ -1,21 +0,0 @@ -/* - Name: AGM_Goggles_fnc_RemoveRainEffect - - Author: Garth de Wet (LH) - - Description: - Removes rain effects from the screen. Resets the rain array. - - Parameters: - Nothing - - Returns: - Nothing - - Example: - call AGM_Goggles_fnc_RemoveRainEffect; -*/ -if (!isNull (AGM_Goggles_RainDrops)) then { - deleteVehicle (AGM_Goggles_RainDrops); -}; -AGM_Goggles_Rain_Active = false; \ No newline at end of file diff --git a/TO_MERGE/agm/Goggles/script.sqf b/TO_MERGE/agm/Goggles/script.sqf deleted file mode 100644 index 92f681915e..0000000000 --- a/TO_MERGE/agm/Goggles/script.sqf +++ /dev/null @@ -1,21 +0,0 @@ -#define GLASSESDEFAULT [false,[false,0,0,0],false] - -#define DIRT 0 -#define DUST 1 -#define BROKEN 2 - -#define GETDIRT (AGM_Goggles_Effects select DIRT) -#define GETDUST (AGM_Goggles_Effects select DUST) -#define GETBROKEN (AGM_Goggles_Effects select BROKEN) -#define GETDUSTT(type) ((AGM_Goggles_Effects select DUST) select type) - -#define SETDUST(type,value) (AGM_Goggles_Effects select DUST) set [type, value] - -#define DACTIVE 0 -#define DTIME 1 -#define DBULLETS 2 -#define DAMOUNT 3 - -#define GLASSDISPLAY (uiNamespace getVariable ["AGM_Goggles_Display", displayNull]) - -#define CLAMP(x,low,high) (if(x > high)then{high}else{if(x < low)then{low}else{x}}) diff --git a/TO_MERGE/agm/Goggles/CfgFunctions.hpp b/addons/goggles/CfgFunctions.hpp similarity index 86% rename from TO_MERGE/agm/Goggles/CfgFunctions.hpp rename to addons/goggles/CfgFunctions.hpp index 4ff3eb37cd..f7bd2157d8 100644 --- a/TO_MERGE/agm/Goggles/CfgFunctions.hpp +++ b/addons/goggles/CfgFunctions.hpp @@ -1,7 +1,7 @@ class CfgFunctions{ - class AGM_Goggles{ - class AGM_Goggles{ - file="AGM_Goggles\functions"; + class ACE_Goggles{ + class ACE_Goggles{ + file="ACE_Goggles\functions"; class Init{postInit = 1;}; class ApplyGlassesEffect; class RemoveGlassesEffect; diff --git a/TO_MERGE/agm/Goggles/RscTitles.hpp b/addons/goggles/RscTitles.hpp similarity index 50% rename from TO_MERGE/agm/Goggles/RscTitles.hpp rename to addons/goggles/RscTitles.hpp index 15a83a71ce..57975e052f 100644 --- a/TO_MERGE/agm/Goggles/RscTitles.hpp +++ b/addons/goggles/RscTitles.hpp @@ -1,21 +1,21 @@ class RscTitles{ #include "define.hpp" - class RscAGM_Goggles_BaseTitle{ + class RscACE_Goggles_BaseTitle{ idd = -1; - onLoad = "uiNamespace setVariable ['AGM_Goggles_Display', _this select 0]"; - onUnload = "uiNamespace setVariable ['AGM_Goggles_Display', displayNull]"; + onLoad = "uiNamespace setVariable ['ACE_Goggles_Display', _this select 0]"; + onUnload = "uiNamespace setVariable ['ACE_Goggles_Display', displayNull]"; fadeIn=0.5; fadeOut=0.5; movingEnable = false; duration = 10e10; - name = "RscAGM_Goggles_BaseTitle"; + name = "RscACE_Goggles_BaseTitle"; class controls; }; - class RscAGM_Goggles:RscAGM_Goggles_BaseTitle{ + class RscACE_Goggles:RscACE_Goggles_BaseTitle{ idd = 1044; - name = "RscAGM_Goggles"; + name = "RscACE_Goggles"; class controls{ class gogglesImage: RscPicture{ idc = 10650; @@ -23,11 +23,11 @@ class RscTitles{ }; }; - class RscAGM_GogglesEffects:RscAGM_Goggles_BaseTitle{ + class RscACE_GogglesEffects:RscACE_Goggles_BaseTitle{ idd = 1045; - onLoad = "uiNamespace setVariable ['AGM_Goggles_DisplayEffects', _this select 0]"; - onUnload = "uiNamespace setVariable ['AGM_Goggles_DisplayEffects', displayNull]"; - name = "RscAGM_GogglesEffects"; + onLoad = "uiNamespace setVariable ['ACE_Goggles_DisplayEffects', _this select 0]"; + onUnload = "uiNamespace setVariable ['ACE_Goggles_DisplayEffects', displayNull]"; + name = "RscACE_GogglesEffects"; fadeIn=0; fadeOut=0.5; class controls{ diff --git a/TO_MERGE/agm/Goggles/anim/WipeGlasses.rtm b/addons/goggles/anim/WipeGlasses.rtm similarity index 100% rename from TO_MERGE/agm/Goggles/anim/WipeGlasses.rtm rename to addons/goggles/anim/WipeGlasses.rtm diff --git a/TO_MERGE/agm/Goggles/anim/model.cfg b/addons/goggles/anim/model.cfg similarity index 100% rename from TO_MERGE/agm/Goggles/anim/model.cfg rename to addons/goggles/anim/model.cfg diff --git a/addons/goggles/config.cpp b/addons/goggles/config.cpp new file mode 100644 index 0000000000..19cae9b79e --- /dev/null +++ b/addons/goggles/config.cpp @@ -0,0 +1,295 @@ +#define COLOUR 8.0 +class CfgPatches { + class ACE_Goggles { + units[] = {}; + weapons[] = {}; + requiredVersion = 0.60; + requiredAddons[] = {ACE_Core}; + version = "0.95"; + versionStr = "0.95"; + versionAr[] = {0,95,0}; + author[] = {"Garth 'L-H' de Wet"}; + authorUrl = "https://github.com/CorruptedHeart"; + }; +}; + +#include "CfgFunctions.hpp" +#define COMBAT_GOGGLES ACE_Overlay="ACE_Goggles\textures\HUD\CombatGoggles.paa"; \ + ACE_OverlayCracked = "ACE_Goggles\textures\HUD\CombatGogglesCracked.paa"; \ + ACE_Resistance = 2; \ + ACE_Protection = 1; + +class CfgGlasses { + class None { + ACE_Color[] = {0,0,0}; + ACE_TintAmount=0; + ACE_Overlay = ""; + ACE_OverlayDirt = "A3\Ui_f\data\igui\rsctitles\HealthTextures\dust_upper_ca.paa"; + ACE_OverlayCracked = "ACE_Goggles\textures\HUD\Cracked.paa"; + ACE_Resistance = 0; + ACE_Protection = 0; + ACE_DustPath = "ACE_Goggles\textures\fx\dust\%1.paa"; + }; + + class G_Combat:None { + COMBAT_GOGGLES + }; + + class G_Diving { + ACE_Overlay="ACE_Goggles\textures\HUD\DivingGoggles.paa"; + ACE_OverlayCracked = "ACE_Goggles\textures\HUD\DivingGogglesCracked.paa"; + ACE_Resistance = 2; + ACE_Protection = 1; + }; + + class G_Lowprofile:None { + ACE_TintAmount=COLOUR*2; + ACE_Resistance = 2; + ACE_Protection = 1; + }; + + class G_Shades_Black:None { + ACE_TintAmount=COLOUR*2; + ACE_Resistance = 1; + }; + + class G_Shades_Blue:None{ + ACE_Color[] = {0,0,1}; + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; + + class G_Shades_Green:None{ + ACE_Color[] = {0,1,0}; + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; + + class G_Shades_Red:None{ + ACE_Color[] = {1,0,0}; + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; + + class G_Spectacles:None{ + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; + + class G_Spectacles_Tinted:None{ + ACE_TintAmount=COLOUR*2; + ACE_Resistance = 1; + }; + + class G_Sport_Blackred:None{ + ACE_Color[] = {1,0,0}; + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; + + class G_Sport_BlackWhite:None{ + ACE_Color[] = {0,0,1}; + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; + + class G_Sport_Blackyellow:None{ + ACE_TintAmount=COLOUR*2; + ACE_Resistance = 1; + }; + + class G_Sport_Checkered:None{ + ACE_TintAmount=COLOUR*2; + ACE_Resistance = 1; + }; + + class G_Sport_Greenblack:None{ + ACE_TintAmount=COLOUR*2; + ACE_Resistance = 1; + }; + + class G_Sport_Red:None{ + ACE_TintAmount=COLOUR*2; + ACE_Color[] = {0,0,0}; + ACE_Resistance = 1; + }; + + class G_Squares:None{ + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; + + class G_Squares_Tinted:None{ + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; + + class G_Tactical_Black:None{ + ACE_TintAmount=COLOUR; + ACE_Color[] = {0,0,-1.5}; + ACE_Resistance = 1; + }; + + class G_Tactical_Clear:None{ + ACE_TintAmount=COLOUR; + ACE_Color[] = {0,0,-1}; + ACE_Resistance = 1; + }; + + class G_Aviator:None{ + ACE_Color[] = {0,0,-1}; + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; + + class G_Lady_Blue:None{ + ACE_Color[] = {0,0,1}; + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; + + class G_Lady_Red:None{ + ACE_Color[] = {1,0,0}; + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; + + class G_Lady_Dark:None{ + ACE_TintAmount=COLOUR*2; + ACE_Resistance = 1; + }; + + class G_Lady_Mirror:None{ + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; + + class AV_ESS_blk:None{ + COMBAT_GOGGLES + }; + + class G_Balaclava_blk; + + class G_Balaclava_combat:G_Balaclava_blk { + COMBAT_GOGGLES + }; + + class G_Balaclava_lowprofile:G_Balaclava_blk { + ACE_TintAmount=COLOUR*2; + ACE_Resistance = 2; + ACE_Protection = 1; + }; + + class G_Bandanna_blk; + class G_Bandanna_shades:G_Bandanna_blk { + ACE_TintAmount=COLOUR*2; + ACE_Resistance = 1; + ACE_Protection = 1; + }; + class G_Bandanna_sport:G_Bandanna_blk { + ACE_Color[] = {1,0,0}; + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + ACE_Protection = 1; + }; + class G_Bandanna_aviator:G_Bandanna_blk { + ACE_Color[] = {0,0,-1}; + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + ACE_Protection = 1; + }; +}; + +#include "RscTitles.hpp" + +class CfgMovesBasic +{ + class ManActions + { + GestureWipeFace[] = {"GestureWipeFace", "gesture"}; + }; +}; + +class CfgGesturesMale +{ + class States + { + class GestureFreezeStand; + class GestureWipeFace: GestureFreezeStand + { + file = "\ACE_Goggles\anim\WipeGlasses.rtm"; + canPullTrigger = 0; + }; + }; +}; + +class CfgWeapons{ + class H_HelmetB; + + class H_CrewHelmetHeli_B:H_HelmetB { + ACE_Protection = 1; + }; + class H_PilotHelmetHeli_B:H_HelmetB { + ACE_Protection = 1; + }; + class H_PilotHelmetFighter_B:H_HelmetB { + ACE_Protection = 1; + }; +}; + +class RifleAssaultCloud { + ACE_Goggles_BulletCount = 4; +}; +class MachineGunCloud { + ACE_Goggles_BulletCount = 3; +}; +class SniperCloud { + ACE_Goggles_BulletCount = 1; +}; + +class ACE_Core_Default_Keys { + class wipeGlasses { + displayName = $STR_ACE_Goggles_WipeGlasses; + condition = "!(player getVariable['ACE_isUnconscious', false])"; + statement = "call ACE_Goggles_fnc_ClearGlasses;"; + key = 20; // T + shift = 1; + control = 1; + alt = 0; + }; +}; + +class ACE_Core_Options { + class showInThirdPerson { + displayName = $STR_ACE_Goggles_ShowInThirdPerson; + default = 0; + }; +}; + +class CfgCloudlets { + class Default; + class ACERainEffect:Default { + interval = 0.001; + particleShape = "\A3\data_f\ParticleEffects\Universal\Refract"; + particleFSNtieth = 1; + particleFSIndex = 0; + particleFSFrameCount = 1; + particleFSLoop = 1; + + particleType = "Billboard"; + lifeTime = 0.5; + rotationVelocity = 1; + weight = 100; + volume = 0.000; + rubbing = 1.7; + size[] = {0.1}; + color[] = {{1,1,1,1}}; + animationSpeed[] = {0,1}; + randomDirectionPeriod = 0.2; + randomDirectionIntensity = 1.2; + positionVar[] = {2, 2, 2.5}; + sizeVar = 0.01; + colorVar[] = {0, 0, 0, 0.1}; + destroyOnWaterSurface = 1; + }; +}; diff --git a/TO_MERGE/agm/Goggles/define.hpp b/addons/goggles/define.hpp similarity index 100% rename from TO_MERGE/agm/Goggles/define.hpp rename to addons/goggles/define.hpp diff --git a/addons/goggles/functions/fn_ApplyDirtEffect.sqf b/addons/goggles/functions/fn_ApplyDirtEffect.sqf new file mode 100644 index 0000000000..ff1ca6c71d --- /dev/null +++ b/addons/goggles/functions/fn_ApplyDirtEffect.sqf @@ -0,0 +1,32 @@ +/* + Name: ACE_Goggles_fnc_ApplyDirtEffect + + Author: Garth de Wet (LH) + + Description: + Adds dirt effect to the glasses. + + Parameters: + Nothing + + Returns: + BOOLEAN - True if succeeded false if not + + Example: + call ACE_Goggles_fnc_ApplyDirtEffect; +*/ +#include "\ACE_Goggles\script.sqf" + +if (cameraOn != player || call ACE_Goggles_fnc_ExternalCamera) exitWith{false}; +private "_dirtImage"; +ACE_Goggles_Effects set [DIRT, true]; + +if (player call ACE_Goggles_fnc_isGogglesVisible) then{ + _dirtImage = getText(ConfigFile >> "CfgGlasses" >> goggles player >> "ACE_OverlayDirt"); + if (_dirtImage != "") then { + 100 cutRsc["RscACE_GogglesEffects", "PLAIN",0.1, false]; + (uiNamespace getVariable ["ACE_Goggles_DisplayEffects", displayNull] displayCtrl 10660) ctrlSetText _dirtImage; + }; +}; + +true \ No newline at end of file diff --git a/TO_MERGE/agm/Goggles/functions/fn_ApplyDust.sqf b/addons/goggles/functions/fn_ApplyDust.sqf similarity index 54% rename from TO_MERGE/agm/Goggles/functions/fn_ApplyDust.sqf rename to addons/goggles/functions/fn_ApplyDust.sqf index b01408ed7b..8598d01d94 100644 --- a/TO_MERGE/agm/Goggles/functions/fn_ApplyDust.sqf +++ b/addons/goggles/functions/fn_ApplyDust.sqf @@ -1,5 +1,5 @@ /* - Name: AGM_Goggles_fnc_ApplyDust + Name: ACE_Goggles_fnc_ApplyDust Author: Garth de Wet (LH) @@ -13,31 +13,31 @@ Nothing Example 1: - call AGM_Goggles_fnc_ApplyDust; + call ACE_Goggles_fnc_ApplyDust; */ -#include "\AGM_Goggles\script.sqf" -if (call AGM_Goggles_fnc_ExternalCamera) exitWith {}; -if (player call AGM_Goggles_fnc_isGogglesVisible) exitWith { - 100 cutRsc["RscAGM_GogglesEffects", "PLAIN",2,false]; - (uiNamespace getVariable ["AGM_Goggles_DisplayEffects", displayNull] displayCtrl 10662) ctrlSetText format[getText(ConfigFile >> "CfgGlasses" >> AGM_Goggles_Current >> "AGM_DustPath"), GETDUSTT(DAMOUNT)+1]; +#include "\ACE_Goggles\script.sqf" +if (call ACE_Goggles_fnc_ExternalCamera) exitWith {}; +if (player call ACE_Goggles_fnc_isGogglesVisible) exitWith { + 100 cutRsc["RscACE_GogglesEffects", "PLAIN",2,false]; + (uiNamespace getVariable ["ACE_Goggles_DisplayEffects", displayNull] displayCtrl 10662) ctrlSetText format[getText(ConfigFile >> "CfgGlasses" >> ACE_Goggles_Current >> "ACE_DustPath"), GETDUSTT(DAMOUNT)+1]; SETDUST(DAMOUNT,CLAMP(GETDUSTT(DAMOUNT)+1,0,1)); SETDUST(DBULLETS,0); }; -if (player getVariable ["AGM_EyesDamaged", false]) exitWith {SETDUST(DACTIVE,false);SETDUST(DBULLETS,0);SETDUST(DAMOUNT,0);}; +if (player getVariable ["ACE_EyesDamaged", false]) exitWith {SETDUST(DACTIVE,false);SETDUST(DBULLETS,0);SETDUST(DAMOUNT,0);}; SETDUST(DAMOUNT,CLAMP(GETDUSTT(DAMOUNT)+1,0,2)); private "_amount"; _amount = 1 - (GETDUSTT(DAMOUNT) * 0.125); -AGM_Goggles_PostProcessEyes ppEffectAdjust[1, 1, 0, [0,0,0,0], [_amount,_amount,_amount,_amount],[1,1,1,0]]; -AGM_Goggles_PostProcessEyes ppEffectCommit 1; -AGM_Goggles_PostProcessEyes ppEffectEnable true; -if !(scriptDone AGM_Goggles_DustHandler) then { - terminate AGM_Goggles_DustHandler; +ACE_Goggles_PostProcessEyes ppEffectAdjust[1, 1, 0, [0,0,0,0], [_amount,_amount,_amount,_amount],[1,1,1,0]]; +ACE_Goggles_PostProcessEyes ppEffectCommit 1; +ACE_Goggles_PostProcessEyes ppEffectEnable true; +if !(scriptDone ACE_Goggles_DustHandler) then { + terminate ACE_Goggles_DustHandler; }; SETDUST(DBULLETS,0); -AGM_Goggles_DustHandler = [3] spawn { +ACE_Goggles_DustHandler = [3] spawn { private ["_loop", "_timeToSleep"]; _timeToSleep = _this select 0; _loop = true; @@ -51,13 +51,13 @@ AGM_Goggles_DustHandler = [3] spawn { SETDUST(DAMOUNT,CLAMP(GETDUSTT(DAMOUNT)-1,0,2)); private "_amount"; _amount = 1 - (GETDUSTT(DAMOUNT) * 0.125); - if !(player getVariable ["AGM_EyesDamaged", false]) then { - AGM_Goggles_PostProcessEyes ppEffectAdjust[1, 1, 0, [0,0,0,0], [_amount,_amount,_amount,_amount],[1,1,1,0]]; - AGM_Goggles_PostProcessEyes ppEffectCommit 1; + if !(player getVariable ["ACE_EyesDamaged", false]) then { + ACE_Goggles_PostProcessEyes ppEffectAdjust[1, 1, 0, [0,0,0,0], [_amount,_amount,_amount,_amount],[1,1,1,0]]; + ACE_Goggles_PostProcessEyes ppEffectCommit 1; sleep 1; }; if (GETDUSTT(DAMOUNT) <= 0) then { - AGM_Goggles_PostProcessEyes ppEffectEnable false; + ACE_Goggles_PostProcessEyes ppEffectEnable false; SETDUST(DACTIVE,false); SETDUST(DBULLETS,0); _loop = false; diff --git a/TO_MERGE/agm/Goggles/functions/fn_ApplyGlassesEffect.sqf b/addons/goggles/functions/fn_ApplyGlassesEffect.sqf similarity index 58% rename from TO_MERGE/agm/Goggles/functions/fn_ApplyGlassesEffect.sqf rename to addons/goggles/functions/fn_ApplyGlassesEffect.sqf index df535485d9..8bd31eb63d 100644 --- a/TO_MERGE/agm/Goggles/functions/fn_ApplyGlassesEffect.sqf +++ b/addons/goggles/functions/fn_ApplyGlassesEffect.sqf @@ -1,5 +1,5 @@ /* - Name: AGM_Goggles_fnc_ApplyGlassesEffect + Name: ACE_Goggles_fnc_ApplyGlassesEffect Author: Garth de Wet (LH) @@ -15,39 +15,39 @@ Nothing Example: - (goggles player) call AGM_Goggles_fnc_ApplyGlassesEffect; + (goggles player) call ACE_Goggles_fnc_ApplyGlassesEffect; */ -#include "\AGM_Goggles\script.sqf" +#include "\ACE_Goggles\script.sqf" private["_postProcessColour", "_postProcessTintAmount", "_glassesClassname", "_glassImagePath"]; _glassesClassname = _this; -_postProcessColour = getArray(configFile >> "CfgGlasses" >> _glassesClassname >> "AGM_Color"); -_postProcessTintAmount = getNumber(configFile >> "CfgGlasses" >> _glassesClassname >> "AGM_TintAmount"); +_postProcessColour = getArray(configFile >> "CfgGlasses" >> _glassesClassname >> "ACE_Color"); +_postProcessTintAmount = getNumber(configFile >> "CfgGlasses" >> _glassesClassname >> "ACE_TintAmount"); -call AGM_Goggles_fnc_RemoveGlassesEffect; -AGM_Goggles_EffectsActive = true; +call ACE_Goggles_fnc_RemoveGlassesEffect; +ACE_Goggles_EffectsActive = true; -if (_postProcessTintAmount != 0 && {AGM_Goggles_UsePP}) then { +if (_postProcessTintAmount != 0 && {ACE_Goggles_UsePP}) then { _postProcessColour set [3, _postProcessTintAmount/100]; - AGM_Goggles_PostProcess ppEffectAdjust[0.9, 1.1, 0.004, _postProcessColour, [0,0,0,1],[0,0,0,0]]; - AGM_Goggles_PostProcess ppEffectCommit 0; - AGM_Goggles_PostProcess ppEffectEnable true; + ACE_Goggles_PostProcess ppEffectAdjust[0.9, 1.1, 0.004, _postProcessColour, [0,0,0,1],[0,0,0,0]]; + ACE_Goggles_PostProcess ppEffectCommit 0; + ACE_Goggles_PostProcess ppEffectEnable true; }; -_glassImagePath = getText(configFile >> "CfgGlasses" >> _glassesClassname >> "AGM_Overlay"); +_glassImagePath = getText(configFile >> "CfgGlasses" >> _glassesClassname >> "ACE_Overlay"); if GETBROKEN then { - _glassImagePath = getText(configFile >> "CfgGlasses" >> _glassesClassname >> "AGM_OverlayCracked"); + _glassImagePath = getText(configFile >> "CfgGlasses" >> _glassesClassname >> "ACE_OverlayCracked"); }; if (_glassImagePath != "") then { - 150 cutRsc["RscAGM_Goggles", "PLAIN",1, false]; + 150 cutRsc["RscACE_Goggles", "PLAIN",1, false]; (GLASSDISPLAY displayCtrl 10650) ctrlSetText _glassImagePath; }; if GETDIRT then { - call AGM_Goggles_fnc_ApplyDirtEffect; + call ACE_Goggles_fnc_ApplyDirtEffect; }; if GETDUSTT(DACTIVE) then { SETDUST(DAMOUNT,CLAMP(GETDUSTT(DAMOUNT)-1,0,2)); - call AGM_Goggles_fnc_ApplyDust; + call ACE_Goggles_fnc_ApplyDust; }; diff --git a/addons/goggles/functions/fn_CheckGoggles.sqf b/addons/goggles/functions/fn_CheckGoggles.sqf new file mode 100644 index 0000000000..94c8b7326b --- /dev/null +++ b/addons/goggles/functions/fn_CheckGoggles.sqf @@ -0,0 +1,52 @@ +/* + Author: Garth de Wet (LH) + + Description: + Performs rain checks and checks to see whether glasses effects have been applied or not. + Checks for external camera and removes effects. + + Parameters: + Nothing + + Returns: + Nothing + + Example: + [] execVM "ACE_Goggles\functions\fn_CheckGoggles.sqf"; +*/ +#include "\ACE_Goggles\script.sqf" +waitUntil {sleep 0.46;alive player}; +call ACE_Goggles_fnc_CheckGlasses; +["ACE_Goggles_RotorWash", "OnEachFrame", {call ACE_Goggles_fnc_OnEachFrame;}] call BIS_fnc_addStackedEventHandler; +[] spawn ACE_Goggles_fnc_RainEffect; +while {alive player} do { + sleep 1; + if (true) then { + // Detect if curator interface is open and disable effects + if (!isNull(findDisplay 312)) exitWith { + if (ACE_Goggles_EffectsActive) then { + call ACE_Goggles_fnc_RemoveGlassesEffect; + }; + }; + call ACE_Goggles_fnc_CheckGlasses; + if !(player call ACE_Goggles_fnc_isGogglesVisible) exitWith { + if (ACE_Goggles_EffectsActive) then { + call ACE_Goggles_fnc_RemoveGlassesEffect; + }; + }; + if (call ACE_Goggles_fnc_ExternalCamera) exitWith { + if (ACE_Goggles_EffectsActive) then { + call ACE_Goggles_fnc_RemoveGlassesEffect; + }; + }; + if !(ACE_Goggles_EffectsActive) then { + (goggles player) call ACE_Goggles_fnc_ApplyGlassesEffect; + } else { + if ((goggles player) call ACE_Goggles_fnc_isDivingGoggles && {underwater player}) then { + call ACE_Goggles_fnc_RemoveRainEffect; + call ACE_Goggles_fnc_RemoveDirtEffect; + call ACE_Goggles_fnc_RemoveDustEffect; + }; + }; + }; +}; \ No newline at end of file diff --git a/TO_MERGE/agm/Goggles/functions/fn_ClearGlasses.sqf b/addons/goggles/functions/fn_ClearGlasses.sqf similarity index 58% rename from TO_MERGE/agm/Goggles/functions/fn_ClearGlasses.sqf rename to addons/goggles/functions/fn_ClearGlasses.sqf index ab85238818..2966a7d779 100644 --- a/TO_MERGE/agm/Goggles/functions/fn_ClearGlasses.sqf +++ b/addons/goggles/functions/fn_ClearGlasses.sqf @@ -1,5 +1,5 @@ /* - Name: AGM_Goggles_fnc_ClearGlasses + Name: ACE_Goggles_fnc_ClearGlasses Author: Garth de Wet (LH) @@ -14,14 +14,14 @@ Nothing Example: - call AGM_Goggles_fnc_ClearGlasses; + call ACE_Goggles_fnc_ClearGlasses; */ -#include "\AGM_Goggles\script.sqf" +#include "\ACE_Goggles\script.sqf" private "_broken"; _broken = GETBROKEN; -AGM_Goggles_Effects = GLASSESDEFAULT; -AGM_Goggles_Effects set [BROKEN, _broken]; +ACE_Goggles_Effects = GLASSESDEFAULT; +ACE_Goggles_Effects set [BROKEN, _broken]; if ((stance player) != "PRONE") then { player playActionNow "gestureWipeFace"; @@ -34,6 +34,6 @@ null = [] spawn { }; }; -call AGM_Goggles_fnc_RemoveDirtEffect; -call AGM_Goggles_fnc_RemoveRainEffect; -call AGM_Goggles_fnc_RemoveDustEffect; +call ACE_Goggles_fnc_RemoveDirtEffect; +call ACE_Goggles_fnc_RemoveRainEffect; +call ACE_Goggles_fnc_RemoveDustEffect; diff --git a/TO_MERGE/agm/Goggles/functions/fn_DustHandler.sqf b/addons/goggles/functions/fn_DustHandler.sqf similarity index 87% rename from TO_MERGE/agm/Goggles/functions/fn_DustHandler.sqf rename to addons/goggles/functions/fn_DustHandler.sqf index a4457815e1..b7107d86a1 100644 --- a/TO_MERGE/agm/Goggles/functions/fn_DustHandler.sqf +++ b/addons/goggles/functions/fn_DustHandler.sqf @@ -1,5 +1,5 @@ /* - Name: AGM_Goggles_fnc_DustHandler + Name: ACE_Goggles_fnc_DustHandler Author: Garth de Wet (LH) @@ -14,10 +14,10 @@ Nothing Example: - player addEventHandler ["Fired", {[_this select 0, _this select 1] call AGM_Goggles_fnc_DustHandler;}]; + player addEventHandler ["Fired", {[_this select 0, _this select 1] call ACE_Goggles_fnc_DustHandler;}]; See http://community.bistudio.com/wiki/ArmA_3:_Event_Handlers#Fired */ -#include "\AGM_Goggles\script.sqf" +#include "\ACE_Goggles\script.sqf" private ["_bullets", "_position", "_surface", "_found", "_weapon", "_cloudType"]; _weapon = _this select 1; @@ -63,13 +63,13 @@ SETDUST(DTIME,time); if (GETDUSTT(DAMOUNT) < 2) then { private "_bulletsRequired"; _bulletsRequired = 100; - if (isNumber (ConfigFile >> _cloudType >> "AGM_Goggles_BulletCount")) then { - _bulletsRequired = getNumber (ConfigFile >> _cloudType >> "AGM_Goggles_BulletCount"); + if (isNumber (ConfigFile >> _cloudType >> "ACE_Goggles_BulletCount")) then { + _bulletsRequired = getNumber (ConfigFile >> _cloudType >> "ACE_Goggles_BulletCount"); }; if (_bulletsRequired <= _bullets) then { SETDUST(DACTIVE,true); - call AGM_Goggles_fnc_ApplyDust; + call ACE_Goggles_fnc_ApplyDust; }; }; true diff --git a/TO_MERGE/agm/Goggles/functions/fn_ExternalCamera.sqf b/addons/goggles/functions/fn_ExternalCamera.sqf similarity index 64% rename from TO_MERGE/agm/Goggles/functions/fn_ExternalCamera.sqf rename to addons/goggles/functions/fn_ExternalCamera.sqf index d3e3f98366..b2aa4fbeb0 100644 --- a/TO_MERGE/agm/Goggles/functions/fn_ExternalCamera.sqf +++ b/addons/goggles/functions/fn_ExternalCamera.sqf @@ -1,5 +1,5 @@ /* - Name: AGM_Goggles_fnc_ExternalCamera + Name: ACE_Goggles_fnc_ExternalCamera Author: Garth de Wet (LH) @@ -13,7 +13,7 @@ Boolean - whether the camera is in external view or not. Example: - call AGM_Goggles_fnc_ExternalCamera; + call ACE_Goggles_fnc_ExternalCamera; */ -if (profileNamespace getVariable ["AGM_showInThirdPerson", false]) exitWith { false }; +if (profileNamespace getVariable ["ACE_showInThirdPerson", false]) exitWith { false }; (cameraView == "External") diff --git a/TO_MERGE/agm/Goggles/functions/fn_GetExplosionIndex.sqf b/addons/goggles/functions/fn_GetExplosionIndex.sqf similarity index 81% rename from TO_MERGE/agm/Goggles/functions/fn_GetExplosionIndex.sqf rename to addons/goggles/functions/fn_GetExplosionIndex.sqf index e7ac8b04f6..e076512a33 100644 --- a/TO_MERGE/agm/Goggles/functions/fn_GetExplosionIndex.sqf +++ b/addons/goggles/functions/fn_GetExplosionIndex.sqf @@ -1,5 +1,5 @@ /* - Name: AGM_Goggles_fnc_GetExplosionIndex + Name: ACE_Goggles_fnc_GetExplosionIndex Author: Garth de Wet (LH) @@ -13,7 +13,7 @@ NUMBER (the rating) [0-3] Example: - _rating = 0.05 call AGM_Goggles_fnc_GetExplosionIndex + _rating = 0.05 call ACE_Goggles_fnc_GetExplosionIndex */ private ["_effect", "_effectIndex"]; _effect = _this; diff --git a/addons/goggles/functions/fn_Init.sqf b/addons/goggles/functions/fn_Init.sqf new file mode 100644 index 0000000000..181e9cc3ac --- /dev/null +++ b/addons/goggles/functions/fn_Init.sqf @@ -0,0 +1,111 @@ +/* + Name: ACE_Goggles_fnc_Init + + Author: Garth de Wet (LH) + + Description: + Sets up the glasses mod for usage. Initialises variables and event handlers. + Shouldn't be called by a user/modder ever. Done by the engine. + + Parameters: + Nothing + + Returns: + Nothing + + Example: + call ACE_Goggles_fnc_Init; +*/ +if (!hasInterface) exitWith {}; +#include "\ACE_Goggles\script.sqf" + +if isNil("ACE_Goggles_UsePP") then { + ACE_Goggles_UsePP = true; +}; + +ACE_Goggles_PostProcess = ppEffectCreate ["ColorCorrections", 1995]; +ACE_Goggles_PostProcessEyes = ppEffectCreate ["ColorCorrections", 1992]; +ACE_Goggles_PostProcessEyes ppEffectAdjust[1, 1, 0, [0,0,0,0], [0,0,0,1],[1,1,1,0]]; +ACE_Goggles_PostProcessEyes ppEffectCommit 0; +ACE_Goggles_PostProcessEyes ppEffectEnable false; +ACE_Goggles_EffectsActive = false; +ACE_Goggles_Effects = GLASSESDEFAULT; +ACE_Goggles_Current = "None"; +ACE_Goggles_EyesDamageScript = 0 spawn {}; +ACE_Goggles_FrameEvent = [false, [false,20]]; +ACE_Goggles_PostProcessEyes_Enabled = false; +ACE_Goggles_DustHandler = 0 spawn {}; +ACE_Goggles_RainDrops = objNull; + +ACE_Goggles_fnc_CheckGlasses = { + if (ACE_Goggles_Current != (goggles player)) then { + ACE_Goggles_Current = (goggles player); + ["GlassesChanged",[ACE_Goggles_Current]] call CBA_fnc_localEvent; + }; +}; + +player addEventHandler ["Explosion", { + if (alive player) then { + call ACE_Goggles_fnc_ApplyDirtEffect; + if (GETBROKEN) exitWith {}; + if (((_this select 1) call ACE_Goggles_fnc_GetExplosionIndex) < getNumber(ConfigFile >> "CfgGlasses" >> ACE_Goggles_Current >> "ACE_Resistance")) exitWith {}; + if !(player call ACE_Goggles_fnc_isGogglesVisible) exitWith {["GlassesCracked",[player]] call CBA_fnc_localEvent;}; + ACE_Goggles_Effects set [BROKEN, true]; + if (getText(ConfigFile >> "CfgGlasses" >> ACE_Goggles_Current >> "ACE_OverlayCracked") != "" && {cameraOn == player}) then { + if (call ACE_Goggles_fnc_ExternalCamera) exitWith {}; + if (isNull(GLASSDISPLAY)) then { + 150 cutRsc["RscACE_Goggles", "PLAIN",1, false]; + }; + (GLASSDISPLAY displayCtrl 10650) ctrlSetText getText(ConfigFile >> "CfgGlasses" >> ACE_Goggles_Current >> "ACE_OverlayCracked"); + }; + ["GlassesCracked",[player]] call CBA_fnc_localEvent; + }; +}]; +player addEventHandler ["Killed",{ + [] spawn { + sleep 2; + ACE_Goggles_PostProcessEyes ppEffectEnable false; + ACE_Goggles_Effects = GLASSESDEFAULT; + call ACE_Goggles_fnc_RemoveGlassesEffect; + ACE_Goggles_EffectsActive=false; + player setVariable ["ACE_EyesDamaged", false]; + terminate ACE_Goggles_EyesDamageScript; + terminate ACE_Goggles_MainLoop; + terminate ACE_Goggles_DustHandler; + ACE_Goggles_MainLoop = [] spawn ACE_Goggles_fnc_CheckGoggles; + }; +}]; +player addEventHandler ["Fired",{[_this select 0, _this select 1] call ACE_Goggles_fnc_DustHandler;}]; +player AddEventHandler ["Take",{call ACE_Goggles_fnc_CheckGlasses;}]; +player AddEventHandler ["Put", {call ACE_Goggles_fnc_CheckGlasses;}]; + +["GlassesChanged",{ + ACE_Goggles_Effects = GLASSESDEFAULT; + + if (call ACE_Goggles_fnc_ExternalCamera) exitWith {call ACE_Goggles_fnc_RemoveGlassesEffect}; + + if (player call ACE_Goggles_fnc_isGogglesVisible) then { + (_this select 0) call ACE_Goggles_fnc_ApplyGlassesEffect; + } else { + call ACE_Goggles_fnc_RemoveGlassesEffect; + }; +}] call CBA_fnc_addEventHandler; +["GlassesCracked",{ + if (_this select 0 != player) exitWith {}; + player setVariable ["ACE_EyesDamaged", true]; + if !(scriptDone ACE_Goggles_EyesDamageScript) then { + terminate ACE_Goggles_EyesDamageScript; + }; + ACE_Goggles_PostProcessEyes ppEffectAdjust[1, 1, 0, [0,0,0,0], [0.5,0.5,0.5,0.5],[1,1,1,0]]; + ACE_Goggles_PostProcessEyes ppEffectCommit 0; + ACE_Goggles_PostProcessEyes ppEffectEnable true; + ACE_Goggles_EyesDamageScript = [] spawn { + sleep 25; + ACE_Goggles_PostProcessEyes ppEffectAdjust[1, 1, 0, [0,0,0,0], [1,1,1,1],[1,1,1,0]]; + ACE_Goggles_PostProcessEyes ppEffectCommit 5; + sleep 5; + ACE_Goggles_PostProcessEyes ppEffectEnable false; + player setVariable ["ACE_EyesDamaged", false]; + }; +}] call CBA_fnc_addEventHandler; +ACE_Goggles_MainLoop = [] spawn ACE_Goggles_fnc_CheckGoggles; diff --git a/addons/goggles/functions/fn_OnEachFrame.sqf b/addons/goggles/functions/fn_OnEachFrame.sqf new file mode 100644 index 0000000000..3281672f7d --- /dev/null +++ b/addons/goggles/functions/fn_OnEachFrame.sqf @@ -0,0 +1,80 @@ +/* + Name: ACE_Goggles_fnc_OnEachFrame + + Author: Garth de Wet (LH) + + Description: + Runs every frame checking for helicopters. + + Parameters: + Nothing + + Returns: + Nothing + + Example: + ["ACE_Goggles_RotorWash", "OnEachFrame", "call ACE_Goggles_fnc_OnEachFrame;"] call BIS_fnc_addStackedEventHandler; +*/ +#include "\ACE_Goggles\script.sqf" +if (isNull(player)) then { + ["ACE_Goggles_RotorWash", "OnEachFrame"] call BIS_fnc_removeStackedEventHandler; +}; +ACE_Goggles_FrameEvent set [0, !(ACE_Goggles_FrameEvent select 0)]; +if (ACE_Goggles_FrameEvent select 0) exitWith { + if (vehicle player != player && {!([player] call ACE_Core_fnc_isTurnedOut)}) exitWith {(ACE_Goggles_FrameEvent select 1) set [0, false]; }; + ACE_Goggles_FrameEvent set [1, ([player] call ACE_Goggles_fnc_isInRotorWash)]; +}; +private ["_rotorWash","_safe"]; +_rotorWash = ACE_Goggles_FrameEvent select 1; +_safe = false; +if !(_rotorWash select 0) exitWith { + if (ACE_Goggles_PostProcessEyes_Enabled) then { + ACE_Goggles_PostProcessEyes_Enabled = false; + if (!scriptDone (ACE_Goggles_DustHandler)) then { + terminate ACE_Goggles_DustHandler; + }; + ACE_Goggles_DustHandler = [] spawn { + ACE_Goggles_PostProcessEyes ppEffectAdjust [1, 1, 0, [0,0,0,0], [0,0,0,1],[1,1,1,0]]; + ACE_Goggles_PostProcessEyes ppEffectCommit 2; + sleep 2; + ACE_Goggles_PostProcessEyes ppEffectEnable false; + }; + }; +}; +if ((headgear player) != "") then { + _safe = (getNumber (ConfigFile >> "CfgWeapons" >> (headgear player) >> "ACE_Protection") == 1); +}; +if !(_safe) then { + if !(player call ACE_Goggles_fnc_isGogglesVisible) exitWith{}; + if (GETDUSTT(DAMOUNT) < 2) then { + if (!GETDUSTT(DACTIVE)) then { + SETDUST(DACTIVE,true); + call ACE_Goggles_fnc_ApplyDust; + } else { + if ((_rotorWash select 1) > 0.5) then { + call ACE_Goggles_fnc_ApplyDust; + }; + }; + }; + _safe = (getNumber (ConfigFile >> "CfgGlasses" >> ACE_Goggles_Current >> "ACE_Protection") == 1); +}; +if (_safe) exitWith {}; +if ((_rotorWash select 1) <= 15) then { + private "_scale"; + _scale = 0.7; + if ((_rotorWash select 1) != 0) then { + _scale = CLAMP(0.3*(_rotorWash select 1),0.1,0.3); + } else { + _scale = 0.1; + }; + _scale = 1 - _scale; + if (!scriptDone (ACE_Goggles_DustHandler)) then { + terminate ACE_Goggles_DustHandler; + }; + if !(player getVariable ["ACE_EyesDamaged", false]) then { + ACE_Goggles_PostProcessEyes_Enabled = true; + ACE_Goggles_PostProcessEyes ppEffectAdjust [1, 1, 0, [0,0,0,0], [_scale,_scale,_scale,_scale],[1,1,1,0]]; + ACE_Goggles_PostProcessEyes ppEffectCommit 0.5; + ACE_Goggles_PostProcessEyes ppEffectEnable true; + }; +}; diff --git a/addons/goggles/functions/fn_RainEffect.sqf b/addons/goggles/functions/fn_RainEffect.sqf new file mode 100644 index 0000000000..3c8c71c670 --- /dev/null +++ b/addons/goggles/functions/fn_RainEffect.sqf @@ -0,0 +1,61 @@ +/* + Name: ACE_Goggles_fnc_RainEffect + + Author: Garth de Wet (LH) + + Description: + + + Parameters: + Nothing + + Returns: + Nothing + + Example: + [] spawn ACE_Goggles_fnc_RainEffect; +*/ +#include "\ACE_Goggles\script.sqf" +ACE_Goggles_RainDrops = objNull; +ACE_Goggles_Rain_Active = false; +_fnc_underCover = { + private ["_pos", "_unit"]; + _unit = (_this select 0); + if (vehicle _unit != _unit && {!([_unit] call ACE_Core_fnc_isTurnedOut)}) exitWith {true}; + _pos = eyePos _unit; + ((positionCameraToWorld [0,0,1] select 2) < ((positionCameraToWorld [0,0,0] select 2) - 0.4)) || {(lineIntersects [_pos, _pos vectorAdd [0,0,15], _unit])} +}; +private ["_lastRain"]; +_lastRain = 0; +while {alive player} do { + sleep 0.5; + if (isNull(findDisplay 312)) then { + // Ignore if player is under water + if (!ACE_Goggles_EffectsActive || {underwater player}) exitWith{call ACE_Goggles_fnc_RemoveRainEffect;}; + if (_lastRain != rain) then { + call ACE_Goggles_fnc_RemoveRainEffect; + _lastRain = rain; + // Rain is happening + if (_lastRain > 0.05 && {!([player] call _fnc_underCover)}) then { + ACE_Goggles_Rain_Active = true; + ACE_Goggles_RainDrops = "#particlesource" createVehicleLocal GetPos player; + ACE_Goggles_RainDrops setParticleClass "ACERainEffect"; + ACE_Goggles_RainDrops setDropInterval (0.07 * (1.1 - _lastRain)); + ACE_Goggles_RainDrops attachTo [vehicle player,[0,0,0]]; + }; + }else{ + if (_lastRain > 0.05) then { + if (ACE_Goggles_Rain_Active && {[player] call _fnc_underCover}) exitWith { + call ACE_Goggles_fnc_RemoveRainEffect; + }; + if (!ACE_Goggles_Rain_Active) then { + _lastRain = -1; + }; + }; + }; + }else{ + if (ACE_Goggles_Rain_Active) then { + call ACE_Goggles_fnc_RemoveRainEffect; + }; + }; +}; \ No newline at end of file diff --git a/TO_MERGE/agm/Goggles/functions/fn_RemoveDirtEffect.sqf b/addons/goggles/functions/fn_RemoveDirtEffect.sqf similarity index 50% rename from TO_MERGE/agm/Goggles/functions/fn_RemoveDirtEffect.sqf rename to addons/goggles/functions/fn_RemoveDirtEffect.sqf index 0d63dec827..23eddf80c2 100644 --- a/TO_MERGE/agm/Goggles/functions/fn_RemoveDirtEffect.sqf +++ b/addons/goggles/functions/fn_RemoveDirtEffect.sqf @@ -1,5 +1,5 @@ /* - Name: AGM_Goggles_fnc_RemoveDirtEffect + Name: ACE_Goggles_fnc_RemoveDirtEffect Author: Garth de Wet (LH) @@ -13,8 +13,8 @@ Nothing Example: - call AGM_Goggles_fnc_RemoveDirtEffect; + call ACE_Goggles_fnc_RemoveDirtEffect; */ -if (!isNull(uiNamespace getVariable ["AGM_Goggles_DisplayEffects", displayNull])) then { - (uiNamespace getVariable ["AGM_Goggles_DisplayEffects", displayNull] displayCtrl 10660) ctrlSetText ""; +if (!isNull(uiNamespace getVariable ["ACE_Goggles_DisplayEffects", displayNull])) then { + (uiNamespace getVariable ["ACE_Goggles_DisplayEffects", displayNull] displayCtrl 10660) ctrlSetText ""; }; diff --git a/TO_MERGE/agm/Goggles/functions/fn_RemoveDustEffect.sqf b/addons/goggles/functions/fn_RemoveDustEffect.sqf similarity index 50% rename from TO_MERGE/agm/Goggles/functions/fn_RemoveDustEffect.sqf rename to addons/goggles/functions/fn_RemoveDustEffect.sqf index a895583e02..bbae944d40 100644 --- a/TO_MERGE/agm/Goggles/functions/fn_RemoveDustEffect.sqf +++ b/addons/goggles/functions/fn_RemoveDustEffect.sqf @@ -1,5 +1,5 @@ /* - Name: AGM_Goggles_fnc_RemoveDustEffect + Name: ACE_Goggles_fnc_RemoveDustEffect Author: Garth de Wet (LH) @@ -13,8 +13,8 @@ Nothing Example: - call AGM_Goggles_fnc_RemoveDustEffect; + call ACE_Goggles_fnc_RemoveDustEffect; */ -if (!isNull(uiNamespace getVariable ["AGM_Goggles_DisplayEffects", displayNull])) then { - (uiNamespace getVariable ["AGM_Goggles_DisplayEffects", displayNull] displayCtrl 10662) ctrlSetText ""; +if (!isNull(uiNamespace getVariable ["ACE_Goggles_DisplayEffects", displayNull])) then { + (uiNamespace getVariable ["ACE_Goggles_DisplayEffects", displayNull] displayCtrl 10662) ctrlSetText ""; }; diff --git a/TO_MERGE/agm/Goggles/functions/fn_RemoveGlassesEffect.sqf b/addons/goggles/functions/fn_RemoveGlassesEffect.sqf similarity index 52% rename from TO_MERGE/agm/Goggles/functions/fn_RemoveGlassesEffect.sqf rename to addons/goggles/functions/fn_RemoveGlassesEffect.sqf index b80f79a028..e60073d2be 100644 --- a/TO_MERGE/agm/Goggles/functions/fn_RemoveGlassesEffect.sqf +++ b/addons/goggles/functions/fn_RemoveGlassesEffect.sqf @@ -1,5 +1,5 @@ /* - Name: AGM_Goggles_fnc_RemoveGlassesEffect + Name: ACE_Goggles_fnc_RemoveGlassesEffect Author: Garth de Wet (LH) @@ -14,16 +14,16 @@ Nothing Example: - call AGM_Goggles_fnc_RemoveGlassesEffect; + call ACE_Goggles_fnc_RemoveGlassesEffect; */ -#include "\AGM_Goggles\script.sqf" -AGM_Goggles_EffectsActive = false; -AGM_Goggles_PostProcess ppEffectEnable false; +#include "\ACE_Goggles\script.sqf" +ACE_Goggles_EffectsActive = false; +ACE_Goggles_PostProcess ppEffectEnable false; if (!isNull(GLASSDISPLAY)) then { GLASSDISPLAY closeDisplay 0; }; -call AGM_Goggles_fnc_RemoveDirtEffect; -call AGM_Goggles_fnc_RemoveRainEffect; -call AGM_Goggles_fnc_RemoveDustEffect; +call ACE_Goggles_fnc_RemoveDirtEffect; +call ACE_Goggles_fnc_RemoveRainEffect; +call ACE_Goggles_fnc_RemoveDustEffect; diff --git a/addons/goggles/functions/fn_RemoveRainEffect.sqf b/addons/goggles/functions/fn_RemoveRainEffect.sqf new file mode 100644 index 0000000000..5fdbf7f85d --- /dev/null +++ b/addons/goggles/functions/fn_RemoveRainEffect.sqf @@ -0,0 +1,21 @@ +/* + Name: ACE_Goggles_fnc_RemoveRainEffect + + Author: Garth de Wet (LH) + + Description: + Removes rain effects from the screen. Resets the rain array. + + Parameters: + Nothing + + Returns: + Nothing + + Example: + call ACE_Goggles_fnc_RemoveRainEffect; +*/ +if (!isNull (ACE_Goggles_RainDrops)) then { + deleteVehicle (ACE_Goggles_RainDrops); +}; +ACE_Goggles_Rain_Active = false; \ No newline at end of file diff --git a/TO_MERGE/agm/Goggles/functions/fn_isDivingGoggles.sqf b/addons/goggles/functions/fn_isDivingGoggles.sqf similarity index 84% rename from TO_MERGE/agm/Goggles/functions/fn_isDivingGoggles.sqf rename to addons/goggles/functions/fn_isDivingGoggles.sqf index d4b73ff5b7..a69ae3a47e 100644 --- a/TO_MERGE/agm/Goggles/functions/fn_isDivingGoggles.sqf +++ b/addons/goggles/functions/fn_isDivingGoggles.sqf @@ -1,5 +1,5 @@ /* - Name: AGM_Goggles_fnc_isDivingGoggles + Name: ACE_Goggles_fnc_isDivingGoggles Author: Garth de Wet (LH) @@ -13,7 +13,7 @@ Boolean - whether diving goggles are worn Example: - (goggles player) call AGM_Goggles_fnc_isDivingGoggles; + (goggles player) call ACE_Goggles_fnc_isDivingGoggles; */ private ["_result", "_glasses"]; _glasses = _this; diff --git a/TO_MERGE/agm/Goggles/functions/fn_isGogglesVisible.sqf b/addons/goggles/functions/fn_isGogglesVisible.sqf similarity index 73% rename from TO_MERGE/agm/Goggles/functions/fn_isGogglesVisible.sqf rename to addons/goggles/functions/fn_isGogglesVisible.sqf index d694d18c26..69b2cfa8a7 100644 --- a/TO_MERGE/agm/Goggles/functions/fn_isGogglesVisible.sqf +++ b/addons/goggles/functions/fn_isGogglesVisible.sqf @@ -1,5 +1,5 @@ /* - Name: AGM_Goggles_fnc_isGogglesVisible + Name: ACE_Goggles_fnc_isGogglesVisible Author: Garth de Wet (LH) @@ -13,7 +13,7 @@ BOOL - Whether the goggles are visible or not. Example: - _visible = player call AGM_Goggles_fnc_isGogglesVisible; + _visible = player call ACE_Goggles_fnc_isGogglesVisible; */ private ["_currentGlasses", "_result", "_unit"]; _unit = _this; @@ -26,12 +26,12 @@ if ((vehicle _unit) != _unit) exitWith {(cameraView != "GUNNER")}; if (_currentGlasses != "") then { _position =(getPosASLW _unit); if (surfaceIsWater _position && {((_position select 2) < 0.25)}) exitWith { - _result = (_currentGlasses call AGM_Goggles_fnc_isDivingGoggles); + _result = (_currentGlasses call ACE_Goggles_fnc_isDivingGoggles); }; - if (getNumber (ConfigFile >> "CfgGlasses" >> _currentGlasses >> "AGM_Resistance") == 0) exitWith { + if (getNumber (ConfigFile >> "CfgGlasses" >> _currentGlasses >> "ACE_Resistance") == 0) exitWith { _result = false; }; - _result = !(_currentGlasses call AGM_Goggles_fnc_isDivingGoggles); + _result = !(_currentGlasses call ACE_Goggles_fnc_isDivingGoggles); }; _result \ No newline at end of file diff --git a/TO_MERGE/agm/Goggles/functions/fn_isInRotorWash.sqf b/addons/goggles/functions/fn_isInRotorWash.sqf similarity index 84% rename from TO_MERGE/agm/Goggles/functions/fn_isInRotorWash.sqf rename to addons/goggles/functions/fn_isInRotorWash.sqf index f1e69c9345..0342ec1281 100644 --- a/TO_MERGE/agm/Goggles/functions/fn_isInRotorWash.sqf +++ b/addons/goggles/functions/fn_isInRotorWash.sqf @@ -1,5 +1,5 @@ /* - Name: AGM_Goggles_fnc_isInRotorWash + Name: ACE_Goggles_fnc_isInRotorWash Author: Garth de Wet (LH) @@ -16,8 +16,8 @@ 1 - number - Amount of rotor wash. Example: - if (([player, 10] call AGM_Goggles_fnc_isInRotorWash) select 0) then { hint "Rotor wash"; }; - if (([player] call AGM_Goggles_fnc_isInRotorWash) select 0) then { hint "Rotor wash"; }; + if (([player, 10] call ACE_Goggles_fnc_isInRotorWash) select 0) then { hint "Rotor wash"; }; + if (([player] call ACE_Goggles_fnc_isInRotorWash) select 0) then { hint "Rotor wash"; }; */ private ["_heli", "_unit", "_result", "_radius"]; _unit = _this select 0; diff --git a/addons/goggles/script.sqf b/addons/goggles/script.sqf new file mode 100644 index 0000000000..843c398433 --- /dev/null +++ b/addons/goggles/script.sqf @@ -0,0 +1,21 @@ +#define GLASSESDEFAULT [false,[false,0,0,0],false] + +#define DIRT 0 +#define DUST 1 +#define BROKEN 2 + +#define GETDIRT (ACE_Goggles_Effects select DIRT) +#define GETDUST (ACE_Goggles_Effects select DUST) +#define GETBROKEN (ACE_Goggles_Effects select BROKEN) +#define GETDUSTT(type) ((ACE_Goggles_Effects select DUST) select type) + +#define SETDUST(type,value) (ACE_Goggles_Effects select DUST) set [type, value] + +#define DACTIVE 0 +#define DTIME 1 +#define DBULLETS 2 +#define DAMOUNT 3 + +#define GLASSDISPLAY (uiNamespace getVariable ["ACE_Goggles_Display", displayNull]) + +#define CLAMP(x,low,high) (if(x > high)then{high}else{if(x < low)then{low}else{x}}) diff --git a/TO_MERGE/agm/Goggles/stringtable.xml b/addons/goggles/stringtable.xml similarity index 91% rename from TO_MERGE/agm/Goggles/stringtable.xml rename to addons/goggles/stringtable.xml index 0d079a4063..1756442176 100644 --- a/TO_MERGE/agm/Goggles/stringtable.xml +++ b/addons/goggles/stringtable.xml @@ -1,8 +1,8 @@  - + - + Show Goggle Effects in Third Person Brilleneffekt in dritter Person anzeigen Mostrar efectos de las gafas en tercera persona @@ -14,7 +14,7 @@ Mostrar efeitos de óculos em Terceira Pessoa Attiva l'effetto degli occhiali in terza persona - + Wipe Goggles Brille abwischen Limpiar gafas @@ -27,4 +27,4 @@ Pulisci gli occhiali - \ No newline at end of file + diff --git a/TO_MERGE/agm/Goggles/textures/HUD/CombatGoggles.paa b/addons/goggles/textures/HUD/CombatGoggles.paa similarity index 100% rename from TO_MERGE/agm/Goggles/textures/HUD/CombatGoggles.paa rename to addons/goggles/textures/HUD/CombatGoggles.paa diff --git a/TO_MERGE/agm/Goggles/textures/HUD/CombatGogglesCracked.paa b/addons/goggles/textures/HUD/CombatGogglesCracked.paa similarity index 100% rename from TO_MERGE/agm/Goggles/textures/HUD/CombatGogglesCracked.paa rename to addons/goggles/textures/HUD/CombatGogglesCracked.paa diff --git a/TO_MERGE/agm/Goggles/textures/HUD/Cracked.paa b/addons/goggles/textures/HUD/Cracked.paa similarity index 100% rename from TO_MERGE/agm/Goggles/textures/HUD/Cracked.paa rename to addons/goggles/textures/HUD/Cracked.paa diff --git a/TO_MERGE/agm/Goggles/textures/HUD/DivingGoggles.paa b/addons/goggles/textures/HUD/DivingGoggles.paa similarity index 100% rename from TO_MERGE/agm/Goggles/textures/HUD/DivingGoggles.paa rename to addons/goggles/textures/HUD/DivingGoggles.paa diff --git a/TO_MERGE/agm/Goggles/textures/HUD/DivingGogglesCracked.paa b/addons/goggles/textures/HUD/DivingGogglesCracked.paa similarity index 100% rename from TO_MERGE/agm/Goggles/textures/HUD/DivingGogglesCracked.paa rename to addons/goggles/textures/HUD/DivingGogglesCracked.paa diff --git a/TO_MERGE/agm/Goggles/textures/fx/dust/1.paa b/addons/goggles/textures/fx/dust/1.paa similarity index 100% rename from TO_MERGE/agm/Goggles/textures/fx/dust/1.paa rename to addons/goggles/textures/fx/dust/1.paa diff --git a/TO_MERGE/agm/Goggles/textures/fx/dust/2.paa b/addons/goggles/textures/fx/dust/2.paa similarity index 100% rename from TO_MERGE/agm/Goggles/textures/fx/dust/2.paa rename to addons/goggles/textures/fx/dust/2.paa From fc18cb443ff0d2149b5802f3b1f38f8ddce95c3d Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Sun, 18 Jan 2015 23:50:45 +0200 Subject: [PATCH 02/10] Converted Goggles to use ACE/CBA macros. --- addons/goggles/$PBOPREFIX$ | 1 + addons/goggles/CfgEventHandlers.hpp | 10 ++ addons/goggles/CfgFunctions.hpp | 25 ---- addons/goggles/XEH_postInit.sqf | 108 +++++++++++++++++ addons/goggles/XEH_preInit.sqf | 23 ++++ addons/goggles/config.cpp | 65 +++++----- addons/goggles/define.hpp | 35 +++--- .../goggles/functions/fn_ApplyDirtEffect.sqf | 32 ----- addons/goggles/functions/fn_CheckGoggles.sqf | 52 -------- addons/goggles/functions/fn_ClearGlasses.sqf | 39 ------ .../functions/fn_GetExplosionIndex.sqf | 28 ----- addons/goggles/functions/fn_Init.sqf | 111 ------------------ addons/goggles/functions/fn_OnEachFrame.sqf | 80 ------------- addons/goggles/functions/fn_RainEffect.sqf | 61 ---------- .../goggles/functions/fn_RemoveDirtEffect.sqf | 20 ---- .../goggles/functions/fn_RemoveDustEffect.sqf | 20 ---- .../functions/fn_RemoveGlassesEffect.sqf | 29 ----- .../goggles/functions/fn_RemoveRainEffect.sqf | 21 ---- .../goggles/functions/fnc_applyDirtEffect.sqf | 33 ++++++ .../{fn_ApplyDust.sqf => fnc_applyDust.sqf} | 48 ++++---- ...sEffect.sqf => fnc_applyGlassesEffect.sqf} | 34 +++--- addons/goggles/functions/fnc_checkGoggles.sqf | 51 ++++++++ addons/goggles/functions/fnc_clearGlasses.sqf | 39 ++++++ ...fn_DustHandler.sqf => fnc_dustHandler.sqf} | 26 ++-- ...ernalCamera.sqf => fnc_externalCamera.sqf} | 19 +-- .../functions/fnc_getExplosionIndex.sqf | 27 +++++ ...ingGoggles.sqf => fnc_isDivingGoggles.sqf} | 17 +-- ...esVisible.sqf => fnc_isGogglesVisible.sqf} | 23 ++-- ...sInRotorWash.sqf => fnc_isInRotorWash.sqf} | 18 +-- addons/goggles/functions/fnc_onEachFrame.sqf | 80 +++++++++++++ addons/goggles/functions/fnc_rainEffect.sqf | 61 ++++++++++ .../functions/fnc_removeDirtEffect.sqf | 21 ++++ .../functions/fnc_removeDustEffect.sqf | 21 ++++ .../functions/fnc_removeGlassesEffect.sqf | 29 +++++ .../functions/fnc_removeRainEffect.sqf | 22 ++++ addons/goggles/functions/script_component.hpp | 1 + addons/goggles/script.sqf | 21 ---- addons/goggles/script_component.hpp | 34 ++++++ 38 files changed, 704 insertions(+), 681 deletions(-) create mode 100644 addons/goggles/$PBOPREFIX$ create mode 100644 addons/goggles/CfgEventHandlers.hpp delete mode 100644 addons/goggles/CfgFunctions.hpp create mode 100644 addons/goggles/XEH_postInit.sqf create mode 100644 addons/goggles/XEH_preInit.sqf delete mode 100644 addons/goggles/functions/fn_ApplyDirtEffect.sqf delete mode 100644 addons/goggles/functions/fn_CheckGoggles.sqf delete mode 100644 addons/goggles/functions/fn_ClearGlasses.sqf delete mode 100644 addons/goggles/functions/fn_GetExplosionIndex.sqf delete mode 100644 addons/goggles/functions/fn_Init.sqf delete mode 100644 addons/goggles/functions/fn_OnEachFrame.sqf delete mode 100644 addons/goggles/functions/fn_RainEffect.sqf delete mode 100644 addons/goggles/functions/fn_RemoveDirtEffect.sqf delete mode 100644 addons/goggles/functions/fn_RemoveDustEffect.sqf delete mode 100644 addons/goggles/functions/fn_RemoveGlassesEffect.sqf delete mode 100644 addons/goggles/functions/fn_RemoveRainEffect.sqf create mode 100644 addons/goggles/functions/fnc_applyDirtEffect.sqf rename addons/goggles/functions/{fn_ApplyDust.sqf => fnc_applyDust.sqf} (50%) rename addons/goggles/functions/{fn_ApplyGlassesEffect.sqf => fnc_applyGlassesEffect.sqf} (66%) create mode 100644 addons/goggles/functions/fnc_checkGoggles.sqf create mode 100644 addons/goggles/functions/fnc_clearGlasses.sqf rename addons/goggles/functions/{fn_DustHandler.sqf => fnc_dustHandler.sqf} (83%) rename addons/goggles/functions/{fn_ExternalCamera.sqf => fnc_externalCamera.sqf} (52%) create mode 100644 addons/goggles/functions/fnc_getExplosionIndex.sqf rename addons/goggles/functions/{fn_isDivingGoggles.sqf => fnc_isDivingGoggles.sqf} (79%) rename addons/goggles/functions/{fn_isGogglesVisible.sqf => fnc_isGogglesVisible.sqf} (73%) rename addons/goggles/functions/{fn_isInRotorWash.sqf => fnc_isInRotorWash.sqf} (78%) create mode 100644 addons/goggles/functions/fnc_onEachFrame.sqf create mode 100644 addons/goggles/functions/fnc_rainEffect.sqf create mode 100644 addons/goggles/functions/fnc_removeDirtEffect.sqf create mode 100644 addons/goggles/functions/fnc_removeDustEffect.sqf create mode 100644 addons/goggles/functions/fnc_removeGlassesEffect.sqf create mode 100644 addons/goggles/functions/fnc_removeRainEffect.sqf create mode 100644 addons/goggles/functions/script_component.hpp delete mode 100644 addons/goggles/script.sqf create mode 100644 addons/goggles/script_component.hpp diff --git a/addons/goggles/$PBOPREFIX$ b/addons/goggles/$PBOPREFIX$ new file mode 100644 index 0000000000..877aa261c5 --- /dev/null +++ b/addons/goggles/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\goggles diff --git a/addons/goggles/CfgEventHandlers.hpp b/addons/goggles/CfgEventHandlers.hpp new file mode 100644 index 0000000000..8c7edda20f --- /dev/null +++ b/addons/goggles/CfgEventHandlers.hpp @@ -0,0 +1,10 @@ +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_postInit)); + }; +}; diff --git a/addons/goggles/CfgFunctions.hpp b/addons/goggles/CfgFunctions.hpp deleted file mode 100644 index f7bd2157d8..0000000000 --- a/addons/goggles/CfgFunctions.hpp +++ /dev/null @@ -1,25 +0,0 @@ -class CfgFunctions{ - class ACE_Goggles{ - class ACE_Goggles{ - file="ACE_Goggles\functions"; - class Init{postInit = 1;}; - class ApplyGlassesEffect; - class RemoveGlassesEffect; - class ApplyDirtEffect; - class RemoveDirtEffect; - class isGogglesVisible; - class isDivingGoggles; - class ClearGlasses; - class CheckGoggles; - class GetExplosionIndex; - class RainEffect; - class RemoveRainEffect; - class DustHandler; - class ExternalCamera; - class isInRotorWash; - class OnEachFrame; - class ApplyDust; - class RemoveDustEffect; - }; - }; -}; \ No newline at end of file diff --git a/addons/goggles/XEH_postInit.sqf b/addons/goggles/XEH_postInit.sqf new file mode 100644 index 0000000000..2311a21c24 --- /dev/null +++ b/addons/goggles/XEH_postInit.sqf @@ -0,0 +1,108 @@ +/* + Name: XEH_postInit.sqf + + Author: Garth de Wet (LH) + + Description: + Sets up the glasses mod for usage. Initialises variables and event handlers. + Shouldn't be called by a user/modder ever. Done by the engine. + + Parameters: + Nothing + + Returns: + Nothing +*/ +#include "script_component.hpp" +if (!hasInterface) exitWith {}; + +if isNil(QGAR(UsePP)) then { + GVAR(UsePP) = true; +}; + +GVAR(PostProcess) = ppEffectCreate ["ColorCorrections", 1995]; +GVAR(PostProcessEyes) = ppEffectCreate ["ColorCorrections", 1992]; +GVAR(PostProcessEyes) ppEffectAdjust[1, 1, 0, [0,0,0,0], [0,0,0,1],[1,1,1,0]]; +GVAR(PostProcessEyes) ppEffectCommit 0; +GVAR(PostProcessEyes) ppEffectEnable false; +GVAR(EffectsActive) = false; +GVAR(Effects) = GLASSESDEFAULT; +GVAR(Current) = "None"; +GVAR(EyesDamageScript) = 0 spawn {}; +GVAR(FrameEvent) = [false, [false,20]]; +GVAR(PostProcessEyes_Enabled) = false; +GVAR(DustHandler) = 0 spawn {}; +GVAR(RainDrops) = objNull; + +FUNC(CheckGlasses) = { + if (GVAR(Current) != (goggles ace_player)) then { + GVAR(Current) = (goggles ace_player); + ["GlassesChanged",[GVAR(Current)]] call CBA_fnc_localEvent; + }; +}; + +ace_player addEventHandler ["Explosion", { + if (alive ace_player) then { + call FUNC(ApplyDirtEffect); + if (GETBROKEN) exitWith {}; + if (((_this select 1) call FUNC(GetExplosionIndex)) < getNumber(ConfigFile >> "CfgGlasses" >> GVAR(Current) >> "ACE_Resistance")) exitWith {}; + if !(ace_player call FUNC(isGogglesVisible)) exitWith {["GlassesCracked",[ace_player]] call CBA_fnc_localEvent;}; + GVAR(Effects) set [BROKEN, true]; + if (getText(ConfigFile >> "CfgGlasses" >> GVAR(Current) >> "ACE_OverlayCracked") != "" && {cameraOn == ace_player}) then { + if (call FUNC(ExternalCamera)) exitWith {}; + if (isNull(GLASSDISPLAY)) then { + 150 cutRsc["RscACE_Goggles", "PLAIN",1, false]; + }; + (GLASSDISPLAY displayCtrl 10650) ctrlSetText getText(ConfigFile >> "CfgGlasses" >> GVAR(Current) >> "ACE_OverlayCracked"); + }; + ["GlassesCracked",[ace_player]] call CBA_fnc_localEvent; + }; +}]; +ace_player addEventHandler ["Killed",{ + [] spawn { + sleep 2; + GVAR(PostProcessEyes) ppEffectEnable false; + GVAR(Effects) = GLASSESDEFAULT; + call FUNC(removeGlassesEffect); + GVAR(EffectsActive)=false; + ace_player setVariable ["ACE_EyesDamaged", false]; + terminate GVAR(EyesDamageScript); + terminate GVAR(MainLoop); + terminate GVAR(DustHandler); + GVAR(MainLoop) = [] spawn FUNC(checkGoggles); + }; +}]; +ace_player addEventHandler ["Fired",{[_this select 0, _this select 1] call FUNC(dustHandler);}]; +ace_player AddEventHandler ["Take",{call FUNC(checkGlasses);}]; +ace_player AddEventHandler ["Put", {call FUNC(checkGlasses);}]; + +["GlassesChanged",{ + GVAR(Effects) = GLASSESDEFAULT; + + if (call FUNC(ExternalCamera)) exitWith {call FUNC(RemoveGlassesEffect)}; + + if (ace_player call FUNC(isGogglesVisible)) then { + (_this select 0) call FUNC(applyGlassesEffect); + } else { + call FUNC(removeGlassesEffect); + }; +}] call CBA_fnc_addEventHandler; +["GlassesCracked",{ + if (_this select 0 != ace_player) exitWith {}; + ace_player setVariable ["ACE_EyesDamaged", true]; + if !(scriptDone GVAR(EyesDamageScript)) then { + terminate GVAR(EyesDamageScript); + }; + GVAR(PostProcessEyes) ppEffectAdjust[1, 1, 0, [0,0,0,0], [0.5,0.5,0.5,0.5],[1,1,1,0]]; + GVAR(PostProcessEyes) ppEffectCommit 0; + GVAR(PostProcessEyes) ppEffectEnable true; + GVAR(EyesDamageScript) = [] spawn { + sleep 25; + GVAR(PostProcessEyes) ppEffectAdjust[1, 1, 0, [0,0,0,0], [1,1,1,1],[1,1,1,0]]; + GVAR(PostProcessEyes) ppEffectCommit 5; + sleep 5; + GVAR(PostProcessEyes) ppEffectEnable false; + ace_player setVariable ["ACE_EyesDamaged", false]; + }; +}] call CBA_fnc_addEventHandler; +GVAR(MainLoop) = [] spawn FUNC(CheckGoggles); diff --git a/addons/goggles/XEH_preInit.sqf b/addons/goggles/XEH_preInit.sqf new file mode 100644 index 0000000000..c2878f3721 --- /dev/null +++ b/addons/goggles/XEH_preInit.sqf @@ -0,0 +1,23 @@ +#include "script_component.hpp" + +PREP(applyDirtEffect); +PREP(applyDust); +PREP(applyGlassesEffect); + +PREP(checkGoggles); +PREP(clearGlasses); +PREP(dustHandler); +PREP(externalCamera); +PREP(getExplosionIndex); + +PREP(isDivingGoggles); +PREP(isGogglesVisible); +PREP(isInRotorWash); + +PREP(onEachFrame); +PREP(rainEffect); + +PREP(removeDirtEffect); +PREP(removeDustEffect); +PREP(removeGlassesEffect); +PREP(removeRainEffect); diff --git a/addons/goggles/config.cpp b/addons/goggles/config.cpp index 19cae9b79e..bed02b7d32 100644 --- a/addons/goggles/config.cpp +++ b/addons/goggles/config.cpp @@ -1,21 +1,22 @@ +#include "script_component.hpp" + #define COLOUR 8.0 class CfgPatches { - class ACE_Goggles { + class ADDON { units[] = {}; weapons[] = {}; - requiredVersion = 0.60; - requiredAddons[] = {ACE_Core}; - version = "0.95"; - versionStr = "0.95"; - versionAr[] = {0,95,0}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common"}; author[] = {"Garth 'L-H' de Wet"}; - authorUrl = "https://github.com/CorruptedHeart"; + authorUrl = "http://garth.snakebiteink.co.za/"; + VERSION_CONFIG; }; }; -#include "CfgFunctions.hpp" -#define COMBAT_GOGGLES ACE_Overlay="ACE_Goggles\textures\HUD\CombatGoggles.paa"; \ - ACE_OverlayCracked = "ACE_Goggles\textures\HUD\CombatGogglesCracked.paa"; \ +#include "CfgEventHandlers.hpp" + +#define COMBAT_GOGGLES ACE_Overlay = QUOTE(PATHTOF(textures\HUD\CombatGoggles.paa)); \ + ACE_OverlayCracked = QUOTE(PATHTOF(textures\HUD\CombatGogglesCracked.paa)); \ ACE_Resistance = 2; \ ACE_Protection = 1; @@ -25,10 +26,10 @@ class CfgGlasses { ACE_TintAmount=0; ACE_Overlay = ""; ACE_OverlayDirt = "A3\Ui_f\data\igui\rsctitles\HealthTextures\dust_upper_ca.paa"; - ACE_OverlayCracked = "ACE_Goggles\textures\HUD\Cracked.paa"; + ACE_OverlayCracked = QUOTE(PATHTOF(textures\HUD\Cracked.paa)); ACE_Resistance = 0; ACE_Protection = 0; - ACE_DustPath = "ACE_Goggles\textures\fx\dust\%1.paa"; + ACE_DustPath = QUOTE(PATHTOF(textures\fx\dust\%1.paa)); }; class G_Combat:None { @@ -36,8 +37,8 @@ class CfgGlasses { }; class G_Diving { - ACE_Overlay="ACE_Goggles\textures\HUD\DivingGoggles.paa"; - ACE_OverlayCracked = "ACE_Goggles\textures\HUD\DivingGogglesCracked.paa"; + ACE_Overlay = QUOTE(PATHTOF(textures\HUD\DivingGoggles.paa)); + ACE_OverlayCracked = QUOTE(PATHTOF(textures\HUD\DivingGogglesCracked.paa)); ACE_Resistance = 2; ACE_Protection = 1; }; @@ -167,19 +168,19 @@ class CfgGlasses { class AV_ESS_blk:None{ COMBAT_GOGGLES }; - + class G_Balaclava_blk; - + class G_Balaclava_combat:G_Balaclava_blk { COMBAT_GOGGLES }; - + class G_Balaclava_lowprofile:G_Balaclava_blk { ACE_TintAmount=COLOUR*2; ACE_Resistance = 2; ACE_Protection = 1; }; - + class G_Bandanna_blk; class G_Bandanna_shades:G_Bandanna_blk { ACE_TintAmount=COLOUR*2; @@ -202,28 +203,23 @@ class CfgGlasses { #include "RscTitles.hpp" -class CfgMovesBasic -{ - class ManActions - { +class CfgMovesBasic { + class ManActions { GestureWipeFace[] = {"GestureWipeFace", "gesture"}; }; }; -class CfgGesturesMale -{ - class States - { +class CfgGesturesMale { + class States { class GestureFreezeStand; - class GestureWipeFace: GestureFreezeStand - { - file = "\ACE_Goggles\anim\WipeGlasses.rtm"; + class GestureWipeFace: GestureFreezeStand { + file = QUOTE(PATHTOF(anim\WipeGlasses.rtm)); canPullTrigger = 0; }; }; }; -class CfgWeapons{ +class CfgWeapons { class H_HelmetB; class H_CrewHelmetHeli_B:H_HelmetB { @@ -247,11 +243,12 @@ class SniperCloud { ACE_Goggles_BulletCount = 1; }; -class ACE_Core_Default_Keys { +class ACE_Default_Keys { class wipeGlasses { displayName = $STR_ACE_Goggles_WipeGlasses; - condition = "!(player getVariable['ACE_isUnconscious', false])"; - statement = "call ACE_Goggles_fnc_ClearGlasses;"; + //condition = QUOTE(!(GETVAR(ace_player,isUnconscious,false))); + condition = "true"; + statement = QUOTE(call FUNC(clearGlasses);); key = 20; // T shift = 1; control = 1; @@ -259,7 +256,7 @@ class ACE_Core_Default_Keys { }; }; -class ACE_Core_Options { +class ACE_Options { class showInThirdPerson { displayName = $STR_ACE_Goggles_ShowInThirdPerson; default = 0; diff --git a/addons/goggles/define.hpp b/addons/goggles/define.hpp index 3e7666bfaa..34c207bd20 100644 --- a/addons/goggles/define.hpp +++ b/addons/goggles/define.hpp @@ -6,22 +6,21 @@ //Base Classes// //////////////// -class RscPicture -{ - access = 0; - idc = -1; - type = CT_STATIC; - style = ST_PICTURE; - colorBackground[] = {0,0,0,0}; - colorText[] = {1,1,1,1}; - font = "puristaMedium"; - sizeEx = 0; - lineSpacing = 0; - fixedWidth = 0; - shadow = 0; - text = ""; - x = safezoneX; - y = safezoneY; - w = safezoneW; - h = safezoneH; +class RscPicture { + access = 0; + idc = -1; + type = CT_STATIC; + style = ST_PICTURE; + colorBackground[] = {0,0,0,0}; + colorText[] = {1,1,1,1}; + font = "puristaMedium"; + sizeEx = 0; + lineSpacing = 0; + fixedWidth = 0; + shadow = 0; + text = ""; + x = safezoneX; + y = safezoneY; + w = safezoneW; + h = safezoneH; }; diff --git a/addons/goggles/functions/fn_ApplyDirtEffect.sqf b/addons/goggles/functions/fn_ApplyDirtEffect.sqf deleted file mode 100644 index ff1ca6c71d..0000000000 --- a/addons/goggles/functions/fn_ApplyDirtEffect.sqf +++ /dev/null @@ -1,32 +0,0 @@ -/* - Name: ACE_Goggles_fnc_ApplyDirtEffect - - Author: Garth de Wet (LH) - - Description: - Adds dirt effect to the glasses. - - Parameters: - Nothing - - Returns: - BOOLEAN - True if succeeded false if not - - Example: - call ACE_Goggles_fnc_ApplyDirtEffect; -*/ -#include "\ACE_Goggles\script.sqf" - -if (cameraOn != player || call ACE_Goggles_fnc_ExternalCamera) exitWith{false}; -private "_dirtImage"; -ACE_Goggles_Effects set [DIRT, true]; - -if (player call ACE_Goggles_fnc_isGogglesVisible) then{ - _dirtImage = getText(ConfigFile >> "CfgGlasses" >> goggles player >> "ACE_OverlayDirt"); - if (_dirtImage != "") then { - 100 cutRsc["RscACE_GogglesEffects", "PLAIN",0.1, false]; - (uiNamespace getVariable ["ACE_Goggles_DisplayEffects", displayNull] displayCtrl 10660) ctrlSetText _dirtImage; - }; -}; - -true \ No newline at end of file diff --git a/addons/goggles/functions/fn_CheckGoggles.sqf b/addons/goggles/functions/fn_CheckGoggles.sqf deleted file mode 100644 index 94c8b7326b..0000000000 --- a/addons/goggles/functions/fn_CheckGoggles.sqf +++ /dev/null @@ -1,52 +0,0 @@ -/* - Author: Garth de Wet (LH) - - Description: - Performs rain checks and checks to see whether glasses effects have been applied or not. - Checks for external camera and removes effects. - - Parameters: - Nothing - - Returns: - Nothing - - Example: - [] execVM "ACE_Goggles\functions\fn_CheckGoggles.sqf"; -*/ -#include "\ACE_Goggles\script.sqf" -waitUntil {sleep 0.46;alive player}; -call ACE_Goggles_fnc_CheckGlasses; -["ACE_Goggles_RotorWash", "OnEachFrame", {call ACE_Goggles_fnc_OnEachFrame;}] call BIS_fnc_addStackedEventHandler; -[] spawn ACE_Goggles_fnc_RainEffect; -while {alive player} do { - sleep 1; - if (true) then { - // Detect if curator interface is open and disable effects - if (!isNull(findDisplay 312)) exitWith { - if (ACE_Goggles_EffectsActive) then { - call ACE_Goggles_fnc_RemoveGlassesEffect; - }; - }; - call ACE_Goggles_fnc_CheckGlasses; - if !(player call ACE_Goggles_fnc_isGogglesVisible) exitWith { - if (ACE_Goggles_EffectsActive) then { - call ACE_Goggles_fnc_RemoveGlassesEffect; - }; - }; - if (call ACE_Goggles_fnc_ExternalCamera) exitWith { - if (ACE_Goggles_EffectsActive) then { - call ACE_Goggles_fnc_RemoveGlassesEffect; - }; - }; - if !(ACE_Goggles_EffectsActive) then { - (goggles player) call ACE_Goggles_fnc_ApplyGlassesEffect; - } else { - if ((goggles player) call ACE_Goggles_fnc_isDivingGoggles && {underwater player}) then { - call ACE_Goggles_fnc_RemoveRainEffect; - call ACE_Goggles_fnc_RemoveDirtEffect; - call ACE_Goggles_fnc_RemoveDustEffect; - }; - }; - }; -}; \ No newline at end of file diff --git a/addons/goggles/functions/fn_ClearGlasses.sqf b/addons/goggles/functions/fn_ClearGlasses.sqf deleted file mode 100644 index 2966a7d779..0000000000 --- a/addons/goggles/functions/fn_ClearGlasses.sqf +++ /dev/null @@ -1,39 +0,0 @@ -/* - Name: ACE_Goggles_fnc_ClearGlasses - - Author: Garth de Wet (LH) - - Description: - Clears all dirt, rain, dust from glasses. - Removes glasses effect (PP, overlay) and then puts it back. - - Parameters: - Nothing - - Returns: - Nothing - - Example: - call ACE_Goggles_fnc_ClearGlasses; -*/ -#include "\ACE_Goggles\script.sqf" - -private "_broken"; -_broken = GETBROKEN; -ACE_Goggles_Effects = GLASSESDEFAULT; -ACE_Goggles_Effects set [BROKEN, _broken]; - -if ((stance player) != "PRONE") then { - player playActionNow "gestureWipeFace"; -}; - -null = [] spawn { - sleep 0.3; - if (cameraView == "INTERNAL") then { - addCamShake [5, 1.75, 2]; - }; -}; - -call ACE_Goggles_fnc_RemoveDirtEffect; -call ACE_Goggles_fnc_RemoveRainEffect; -call ACE_Goggles_fnc_RemoveDustEffect; diff --git a/addons/goggles/functions/fn_GetExplosionIndex.sqf b/addons/goggles/functions/fn_GetExplosionIndex.sqf deleted file mode 100644 index e076512a33..0000000000 --- a/addons/goggles/functions/fn_GetExplosionIndex.sqf +++ /dev/null @@ -1,28 +0,0 @@ -/* - Name: ACE_Goggles_fnc_GetExplosionIndex - - Author: Garth de Wet (LH) - - Description: - Turns 0-1 damage into a rating system of 0-3 - - Parameters: - 0: NUMBER - The amount of damage - - Returns: - NUMBER (the rating) [0-3] - - Example: - _rating = 0.05 call ACE_Goggles_fnc_GetExplosionIndex -*/ -private ["_effect", "_effectIndex"]; -_effect = _this; - -_effectIndex = switch true do { - case (_effect <= 0.04): {0}; - case (_effect <= 0.06): {1}; - case (_effect <= 0.09): {2}; - default {3}; -}; - -_effectIndex diff --git a/addons/goggles/functions/fn_Init.sqf b/addons/goggles/functions/fn_Init.sqf deleted file mode 100644 index 181e9cc3ac..0000000000 --- a/addons/goggles/functions/fn_Init.sqf +++ /dev/null @@ -1,111 +0,0 @@ -/* - Name: ACE_Goggles_fnc_Init - - Author: Garth de Wet (LH) - - Description: - Sets up the glasses mod for usage. Initialises variables and event handlers. - Shouldn't be called by a user/modder ever. Done by the engine. - - Parameters: - Nothing - - Returns: - Nothing - - Example: - call ACE_Goggles_fnc_Init; -*/ -if (!hasInterface) exitWith {}; -#include "\ACE_Goggles\script.sqf" - -if isNil("ACE_Goggles_UsePP") then { - ACE_Goggles_UsePP = true; -}; - -ACE_Goggles_PostProcess = ppEffectCreate ["ColorCorrections", 1995]; -ACE_Goggles_PostProcessEyes = ppEffectCreate ["ColorCorrections", 1992]; -ACE_Goggles_PostProcessEyes ppEffectAdjust[1, 1, 0, [0,0,0,0], [0,0,0,1],[1,1,1,0]]; -ACE_Goggles_PostProcessEyes ppEffectCommit 0; -ACE_Goggles_PostProcessEyes ppEffectEnable false; -ACE_Goggles_EffectsActive = false; -ACE_Goggles_Effects = GLASSESDEFAULT; -ACE_Goggles_Current = "None"; -ACE_Goggles_EyesDamageScript = 0 spawn {}; -ACE_Goggles_FrameEvent = [false, [false,20]]; -ACE_Goggles_PostProcessEyes_Enabled = false; -ACE_Goggles_DustHandler = 0 spawn {}; -ACE_Goggles_RainDrops = objNull; - -ACE_Goggles_fnc_CheckGlasses = { - if (ACE_Goggles_Current != (goggles player)) then { - ACE_Goggles_Current = (goggles player); - ["GlassesChanged",[ACE_Goggles_Current]] call CBA_fnc_localEvent; - }; -}; - -player addEventHandler ["Explosion", { - if (alive player) then { - call ACE_Goggles_fnc_ApplyDirtEffect; - if (GETBROKEN) exitWith {}; - if (((_this select 1) call ACE_Goggles_fnc_GetExplosionIndex) < getNumber(ConfigFile >> "CfgGlasses" >> ACE_Goggles_Current >> "ACE_Resistance")) exitWith {}; - if !(player call ACE_Goggles_fnc_isGogglesVisible) exitWith {["GlassesCracked",[player]] call CBA_fnc_localEvent;}; - ACE_Goggles_Effects set [BROKEN, true]; - if (getText(ConfigFile >> "CfgGlasses" >> ACE_Goggles_Current >> "ACE_OverlayCracked") != "" && {cameraOn == player}) then { - if (call ACE_Goggles_fnc_ExternalCamera) exitWith {}; - if (isNull(GLASSDISPLAY)) then { - 150 cutRsc["RscACE_Goggles", "PLAIN",1, false]; - }; - (GLASSDISPLAY displayCtrl 10650) ctrlSetText getText(ConfigFile >> "CfgGlasses" >> ACE_Goggles_Current >> "ACE_OverlayCracked"); - }; - ["GlassesCracked",[player]] call CBA_fnc_localEvent; - }; -}]; -player addEventHandler ["Killed",{ - [] spawn { - sleep 2; - ACE_Goggles_PostProcessEyes ppEffectEnable false; - ACE_Goggles_Effects = GLASSESDEFAULT; - call ACE_Goggles_fnc_RemoveGlassesEffect; - ACE_Goggles_EffectsActive=false; - player setVariable ["ACE_EyesDamaged", false]; - terminate ACE_Goggles_EyesDamageScript; - terminate ACE_Goggles_MainLoop; - terminate ACE_Goggles_DustHandler; - ACE_Goggles_MainLoop = [] spawn ACE_Goggles_fnc_CheckGoggles; - }; -}]; -player addEventHandler ["Fired",{[_this select 0, _this select 1] call ACE_Goggles_fnc_DustHandler;}]; -player AddEventHandler ["Take",{call ACE_Goggles_fnc_CheckGlasses;}]; -player AddEventHandler ["Put", {call ACE_Goggles_fnc_CheckGlasses;}]; - -["GlassesChanged",{ - ACE_Goggles_Effects = GLASSESDEFAULT; - - if (call ACE_Goggles_fnc_ExternalCamera) exitWith {call ACE_Goggles_fnc_RemoveGlassesEffect}; - - if (player call ACE_Goggles_fnc_isGogglesVisible) then { - (_this select 0) call ACE_Goggles_fnc_ApplyGlassesEffect; - } else { - call ACE_Goggles_fnc_RemoveGlassesEffect; - }; -}] call CBA_fnc_addEventHandler; -["GlassesCracked",{ - if (_this select 0 != player) exitWith {}; - player setVariable ["ACE_EyesDamaged", true]; - if !(scriptDone ACE_Goggles_EyesDamageScript) then { - terminate ACE_Goggles_EyesDamageScript; - }; - ACE_Goggles_PostProcessEyes ppEffectAdjust[1, 1, 0, [0,0,0,0], [0.5,0.5,0.5,0.5],[1,1,1,0]]; - ACE_Goggles_PostProcessEyes ppEffectCommit 0; - ACE_Goggles_PostProcessEyes ppEffectEnable true; - ACE_Goggles_EyesDamageScript = [] spawn { - sleep 25; - ACE_Goggles_PostProcessEyes ppEffectAdjust[1, 1, 0, [0,0,0,0], [1,1,1,1],[1,1,1,0]]; - ACE_Goggles_PostProcessEyes ppEffectCommit 5; - sleep 5; - ACE_Goggles_PostProcessEyes ppEffectEnable false; - player setVariable ["ACE_EyesDamaged", false]; - }; -}] call CBA_fnc_addEventHandler; -ACE_Goggles_MainLoop = [] spawn ACE_Goggles_fnc_CheckGoggles; diff --git a/addons/goggles/functions/fn_OnEachFrame.sqf b/addons/goggles/functions/fn_OnEachFrame.sqf deleted file mode 100644 index 3281672f7d..0000000000 --- a/addons/goggles/functions/fn_OnEachFrame.sqf +++ /dev/null @@ -1,80 +0,0 @@ -/* - Name: ACE_Goggles_fnc_OnEachFrame - - Author: Garth de Wet (LH) - - Description: - Runs every frame checking for helicopters. - - Parameters: - Nothing - - Returns: - Nothing - - Example: - ["ACE_Goggles_RotorWash", "OnEachFrame", "call ACE_Goggles_fnc_OnEachFrame;"] call BIS_fnc_addStackedEventHandler; -*/ -#include "\ACE_Goggles\script.sqf" -if (isNull(player)) then { - ["ACE_Goggles_RotorWash", "OnEachFrame"] call BIS_fnc_removeStackedEventHandler; -}; -ACE_Goggles_FrameEvent set [0, !(ACE_Goggles_FrameEvent select 0)]; -if (ACE_Goggles_FrameEvent select 0) exitWith { - if (vehicle player != player && {!([player] call ACE_Core_fnc_isTurnedOut)}) exitWith {(ACE_Goggles_FrameEvent select 1) set [0, false]; }; - ACE_Goggles_FrameEvent set [1, ([player] call ACE_Goggles_fnc_isInRotorWash)]; -}; -private ["_rotorWash","_safe"]; -_rotorWash = ACE_Goggles_FrameEvent select 1; -_safe = false; -if !(_rotorWash select 0) exitWith { - if (ACE_Goggles_PostProcessEyes_Enabled) then { - ACE_Goggles_PostProcessEyes_Enabled = false; - if (!scriptDone (ACE_Goggles_DustHandler)) then { - terminate ACE_Goggles_DustHandler; - }; - ACE_Goggles_DustHandler = [] spawn { - ACE_Goggles_PostProcessEyes ppEffectAdjust [1, 1, 0, [0,0,0,0], [0,0,0,1],[1,1,1,0]]; - ACE_Goggles_PostProcessEyes ppEffectCommit 2; - sleep 2; - ACE_Goggles_PostProcessEyes ppEffectEnable false; - }; - }; -}; -if ((headgear player) != "") then { - _safe = (getNumber (ConfigFile >> "CfgWeapons" >> (headgear player) >> "ACE_Protection") == 1); -}; -if !(_safe) then { - if !(player call ACE_Goggles_fnc_isGogglesVisible) exitWith{}; - if (GETDUSTT(DAMOUNT) < 2) then { - if (!GETDUSTT(DACTIVE)) then { - SETDUST(DACTIVE,true); - call ACE_Goggles_fnc_ApplyDust; - } else { - if ((_rotorWash select 1) > 0.5) then { - call ACE_Goggles_fnc_ApplyDust; - }; - }; - }; - _safe = (getNumber (ConfigFile >> "CfgGlasses" >> ACE_Goggles_Current >> "ACE_Protection") == 1); -}; -if (_safe) exitWith {}; -if ((_rotorWash select 1) <= 15) then { - private "_scale"; - _scale = 0.7; - if ((_rotorWash select 1) != 0) then { - _scale = CLAMP(0.3*(_rotorWash select 1),0.1,0.3); - } else { - _scale = 0.1; - }; - _scale = 1 - _scale; - if (!scriptDone (ACE_Goggles_DustHandler)) then { - terminate ACE_Goggles_DustHandler; - }; - if !(player getVariable ["ACE_EyesDamaged", false]) then { - ACE_Goggles_PostProcessEyes_Enabled = true; - ACE_Goggles_PostProcessEyes ppEffectAdjust [1, 1, 0, [0,0,0,0], [_scale,_scale,_scale,_scale],[1,1,1,0]]; - ACE_Goggles_PostProcessEyes ppEffectCommit 0.5; - ACE_Goggles_PostProcessEyes ppEffectEnable true; - }; -}; diff --git a/addons/goggles/functions/fn_RainEffect.sqf b/addons/goggles/functions/fn_RainEffect.sqf deleted file mode 100644 index 3c8c71c670..0000000000 --- a/addons/goggles/functions/fn_RainEffect.sqf +++ /dev/null @@ -1,61 +0,0 @@ -/* - Name: ACE_Goggles_fnc_RainEffect - - Author: Garth de Wet (LH) - - Description: - - - Parameters: - Nothing - - Returns: - Nothing - - Example: - [] spawn ACE_Goggles_fnc_RainEffect; -*/ -#include "\ACE_Goggles\script.sqf" -ACE_Goggles_RainDrops = objNull; -ACE_Goggles_Rain_Active = false; -_fnc_underCover = { - private ["_pos", "_unit"]; - _unit = (_this select 0); - if (vehicle _unit != _unit && {!([_unit] call ACE_Core_fnc_isTurnedOut)}) exitWith {true}; - _pos = eyePos _unit; - ((positionCameraToWorld [0,0,1] select 2) < ((positionCameraToWorld [0,0,0] select 2) - 0.4)) || {(lineIntersects [_pos, _pos vectorAdd [0,0,15], _unit])} -}; -private ["_lastRain"]; -_lastRain = 0; -while {alive player} do { - sleep 0.5; - if (isNull(findDisplay 312)) then { - // Ignore if player is under water - if (!ACE_Goggles_EffectsActive || {underwater player}) exitWith{call ACE_Goggles_fnc_RemoveRainEffect;}; - if (_lastRain != rain) then { - call ACE_Goggles_fnc_RemoveRainEffect; - _lastRain = rain; - // Rain is happening - if (_lastRain > 0.05 && {!([player] call _fnc_underCover)}) then { - ACE_Goggles_Rain_Active = true; - ACE_Goggles_RainDrops = "#particlesource" createVehicleLocal GetPos player; - ACE_Goggles_RainDrops setParticleClass "ACERainEffect"; - ACE_Goggles_RainDrops setDropInterval (0.07 * (1.1 - _lastRain)); - ACE_Goggles_RainDrops attachTo [vehicle player,[0,0,0]]; - }; - }else{ - if (_lastRain > 0.05) then { - if (ACE_Goggles_Rain_Active && {[player] call _fnc_underCover}) exitWith { - call ACE_Goggles_fnc_RemoveRainEffect; - }; - if (!ACE_Goggles_Rain_Active) then { - _lastRain = -1; - }; - }; - }; - }else{ - if (ACE_Goggles_Rain_Active) then { - call ACE_Goggles_fnc_RemoveRainEffect; - }; - }; -}; \ No newline at end of file diff --git a/addons/goggles/functions/fn_RemoveDirtEffect.sqf b/addons/goggles/functions/fn_RemoveDirtEffect.sqf deleted file mode 100644 index 23eddf80c2..0000000000 --- a/addons/goggles/functions/fn_RemoveDirtEffect.sqf +++ /dev/null @@ -1,20 +0,0 @@ -/* - Name: ACE_Goggles_fnc_RemoveDirtEffect - - Author: Garth de Wet (LH) - - Description: - Removes dirt from the glasses. - - Parameters: - Nothing - - Returns: - Nothing - - Example: - call ACE_Goggles_fnc_RemoveDirtEffect; -*/ -if (!isNull(uiNamespace getVariable ["ACE_Goggles_DisplayEffects", displayNull])) then { - (uiNamespace getVariable ["ACE_Goggles_DisplayEffects", displayNull] displayCtrl 10660) ctrlSetText ""; -}; diff --git a/addons/goggles/functions/fn_RemoveDustEffect.sqf b/addons/goggles/functions/fn_RemoveDustEffect.sqf deleted file mode 100644 index bbae944d40..0000000000 --- a/addons/goggles/functions/fn_RemoveDustEffect.sqf +++ /dev/null @@ -1,20 +0,0 @@ -/* - Name: ACE_Goggles_fnc_RemoveDustEffect - - Author: Garth de Wet (LH) - - Description: - Removes dust from the glasses. - - Parameters: - Nothing - - Returns: - Nothing - - Example: - call ACE_Goggles_fnc_RemoveDustEffect; -*/ -if (!isNull(uiNamespace getVariable ["ACE_Goggles_DisplayEffects", displayNull])) then { - (uiNamespace getVariable ["ACE_Goggles_DisplayEffects", displayNull] displayCtrl 10662) ctrlSetText ""; -}; diff --git a/addons/goggles/functions/fn_RemoveGlassesEffect.sqf b/addons/goggles/functions/fn_RemoveGlassesEffect.sqf deleted file mode 100644 index e60073d2be..0000000000 --- a/addons/goggles/functions/fn_RemoveGlassesEffect.sqf +++ /dev/null @@ -1,29 +0,0 @@ -/* - Name: ACE_Goggles_fnc_RemoveGlassesEffect - - Author: Garth de Wet (LH) - - Description: - Removes the glasses effect from the screen, removes dirt effect, removes rain effect, - removes dust effect. Does not reset array (glasses will still be broken, dirty, ect.) - - Parameters: - Nothing - - Returns: - Nothing - - Example: - call ACE_Goggles_fnc_RemoveGlassesEffect; -*/ -#include "\ACE_Goggles\script.sqf" -ACE_Goggles_EffectsActive = false; -ACE_Goggles_PostProcess ppEffectEnable false; - -if (!isNull(GLASSDISPLAY)) then { - GLASSDISPLAY closeDisplay 0; -}; - -call ACE_Goggles_fnc_RemoveDirtEffect; -call ACE_Goggles_fnc_RemoveRainEffect; -call ACE_Goggles_fnc_RemoveDustEffect; diff --git a/addons/goggles/functions/fn_RemoveRainEffect.sqf b/addons/goggles/functions/fn_RemoveRainEffect.sqf deleted file mode 100644 index 5fdbf7f85d..0000000000 --- a/addons/goggles/functions/fn_RemoveRainEffect.sqf +++ /dev/null @@ -1,21 +0,0 @@ -/* - Name: ACE_Goggles_fnc_RemoveRainEffect - - Author: Garth de Wet (LH) - - Description: - Removes rain effects from the screen. Resets the rain array. - - Parameters: - Nothing - - Returns: - Nothing - - Example: - call ACE_Goggles_fnc_RemoveRainEffect; -*/ -if (!isNull (ACE_Goggles_RainDrops)) then { - deleteVehicle (ACE_Goggles_RainDrops); -}; -ACE_Goggles_Rain_Active = false; \ No newline at end of file diff --git a/addons/goggles/functions/fnc_applyDirtEffect.sqf b/addons/goggles/functions/fnc_applyDirtEffect.sqf new file mode 100644 index 0000000000..2f886dc083 --- /dev/null +++ b/addons/goggles/functions/fnc_applyDirtEffect.sqf @@ -0,0 +1,33 @@ +/* + ApplyDirtEffect + + Author: Garth de Wet (LH) + + Description: + Adds dirt effect to the glasses. + + Parameters: + Nothing + + Returns: + BOOLEAN - True if succeeded false if not + + Example: + call FUNC(ApplyDirtEffect); +*/ +#include "script_component.hpp" + +if (cameraOn != ace_player || {call FUNC(externalCamera)}) exitWith{false}; +private "_dirtImage"; +GVAR(Effects) set [DIRT, true]; + +if (ace_player call FUNC(isGogglesVisible)) then{ + _dirtImage = getText(ConfigFile >> "CfgGlasses" >> goggles ace_player >> "ACE_OverlayDirt"); + if (_dirtImage != "") then { + 100 cutRsc["RscACE_GogglesEffects", "PLAIN",0.1, false]; + + (GETUVAR(GVAR(DisplayEffects),displayNull) displayCtrl 10660) ctrlSetText _dirtImage; + }; +}; + +true diff --git a/addons/goggles/functions/fn_ApplyDust.sqf b/addons/goggles/functions/fnc_applyDust.sqf similarity index 50% rename from addons/goggles/functions/fn_ApplyDust.sqf rename to addons/goggles/functions/fnc_applyDust.sqf index 8598d01d94..4b65b991db 100644 --- a/addons/goggles/functions/fn_ApplyDust.sqf +++ b/addons/goggles/functions/fnc_applyDust.sqf @@ -1,63 +1,63 @@ /* - Name: ACE_Goggles_fnc_ApplyDust - + Name: fnc_applyDust.sqf + Author: Garth de Wet (LH) - + Description: Applies dust to screen. - + Parameters: Nothing - + Returns: Nothing - + Example 1: - call ACE_Goggles_fnc_ApplyDust; + call FUNC(ApplyDust); */ -#include "\ACE_Goggles\script.sqf" -if (call ACE_Goggles_fnc_ExternalCamera) exitWith {}; -if (player call ACE_Goggles_fnc_isGogglesVisible) exitWith { +#include "script_component.hpp" +if (call FUNC(ExternalCamera)) exitWith {}; +if (ace_player call FUNC(isGogglesVisible)) exitWith { 100 cutRsc["RscACE_GogglesEffects", "PLAIN",2,false]; - (uiNamespace getVariable ["ACE_Goggles_DisplayEffects", displayNull] displayCtrl 10662) ctrlSetText format[getText(ConfigFile >> "CfgGlasses" >> ACE_Goggles_Current >> "ACE_DustPath"), GETDUSTT(DAMOUNT)+1]; + (uiNamespace getVariable ["ACE_Goggles_DisplayEffects", displayNull] displayCtrl 10662) ctrlSetText format[getText(ConfigFile >> "CfgGlasses" >> GVAR(Current) >> "ACE_DustPath"), GETDUSTT(DAMOUNT)+1]; SETDUST(DAMOUNT,CLAMP(GETDUSTT(DAMOUNT)+1,0,1)); SETDUST(DBULLETS,0); }; -if (player getVariable ["ACE_EyesDamaged", false]) exitWith {SETDUST(DACTIVE,false);SETDUST(DBULLETS,0);SETDUST(DAMOUNT,0);}; +if (GETVAR(ace_player,ACE_EyesDamaged,false)) exitWith {SETDUST(DACTIVE,false);SETDUST(DBULLETS,0);SETDUST(DAMOUNT,0);}; SETDUST(DAMOUNT,CLAMP(GETDUSTT(DAMOUNT)+1,0,2)); private "_amount"; _amount = 1 - (GETDUSTT(DAMOUNT) * 0.125); -ACE_Goggles_PostProcessEyes ppEffectAdjust[1, 1, 0, [0,0,0,0], [_amount,_amount,_amount,_amount],[1,1,1,0]]; -ACE_Goggles_PostProcessEyes ppEffectCommit 1; -ACE_Goggles_PostProcessEyes ppEffectEnable true; -if !(scriptDone ACE_Goggles_DustHandler) then { - terminate ACE_Goggles_DustHandler; +GVAR(PostProcessEyes) ppEffectAdjust[1, 1, 0, [0,0,0,0], [_amount,_amount,_amount,_amount],[1,1,1,0]]; +GVAR(PostProcessEyes) ppEffectCommit 1; +GVAR(PostProcessEyes) ppEffectEnable true; +if !(scriptDone GVAR(DustHandler)) then { + terminate GVAR(DustHandler); }; SETDUST(DBULLETS,0); -ACE_Goggles_DustHandler = [3] spawn { +GVAR(DustHandler) = [3] spawn { private ["_loop", "_timeToSleep"]; _timeToSleep = _this select 0; _loop = true; while {_loop} do { sleep _timeToSleep; _timeToSleep = GETDUSTT(DTIME); - + if(_timeToSleep >= (time - 2.5)) then { _timeToSleep = time - _timeToSleep; } else { SETDUST(DAMOUNT,CLAMP(GETDUSTT(DAMOUNT)-1,0,2)); private "_amount"; _amount = 1 - (GETDUSTT(DAMOUNT) * 0.125); - if !(player getVariable ["ACE_EyesDamaged", false]) then { - ACE_Goggles_PostProcessEyes ppEffectAdjust[1, 1, 0, [0,0,0,0], [_amount,_amount,_amount,_amount],[1,1,1,0]]; - ACE_Goggles_PostProcessEyes ppEffectCommit 1; + if !(ace_player getVariable ["ACE_EyesDamaged", false]) then { + GVAR(PostProcessEyes) ppEffectAdjust[1, 1, 0, [0,0,0,0], [_amount,_amount,_amount,_amount],[1,1,1,0]]; + GVAR(PostProcessEyes) ppEffectCommit 1; sleep 1; }; if (GETDUSTT(DAMOUNT) <= 0) then { - ACE_Goggles_PostProcessEyes ppEffectEnable false; + GVAR(PostProcessEyes) ppEffectEnable false; SETDUST(DACTIVE,false); SETDUST(DBULLETS,0); _loop = false; @@ -66,4 +66,4 @@ ACE_Goggles_DustHandler = [3] spawn { _timeToSleep = 3; }; }; -}; \ No newline at end of file +}; diff --git a/addons/goggles/functions/fn_ApplyGlassesEffect.sqf b/addons/goggles/functions/fnc_applyGlassesEffect.sqf similarity index 66% rename from addons/goggles/functions/fn_ApplyGlassesEffect.sqf rename to addons/goggles/functions/fnc_applyGlassesEffect.sqf index 8bd31eb63d..2b3cd6c8ae 100644 --- a/addons/goggles/functions/fn_ApplyGlassesEffect.sqf +++ b/addons/goggles/functions/fnc_applyGlassesEffect.sqf @@ -1,37 +1,37 @@ /* - Name: ACE_Goggles_fnc_ApplyGlassesEffect - + Name: fnc_ApplyGlassesEffect.sqf + Author: Garth de Wet (LH) - + Description: Sets screen tint for glasses. Sets screen overlay for glasses. (broken/fixed) Sets dirt/rain overlay for glasses. - - Parameters: + + Parameters: 0: STRING - Glasses class name to be applied. - + Returns: Nothing - + Example: - (goggles player) call ACE_Goggles_fnc_ApplyGlassesEffect; + (goggles ace_player) call FUNC(ApplyGlassesEffect); */ -#include "\ACE_Goggles\script.sqf" +#include "script_component.hpp" private["_postProcessColour", "_postProcessTintAmount", "_glassesClassname", "_glassImagePath"]; _glassesClassname = _this; _postProcessColour = getArray(configFile >> "CfgGlasses" >> _glassesClassname >> "ACE_Color"); _postProcessTintAmount = getNumber(configFile >> "CfgGlasses" >> _glassesClassname >> "ACE_TintAmount"); -call ACE_Goggles_fnc_RemoveGlassesEffect; -ACE_Goggles_EffectsActive = true; +call FUNC(removeGlassesEffect); +GVAR(EffectsActive) = true; -if (_postProcessTintAmount != 0 && {ACE_Goggles_UsePP}) then { +if (_postProcessTintAmount != 0 && {GVAR(UsePP)}) then { _postProcessColour set [3, _postProcessTintAmount/100]; - ACE_Goggles_PostProcess ppEffectAdjust[0.9, 1.1, 0.004, _postProcessColour, [0,0,0,1],[0,0,0,0]]; - ACE_Goggles_PostProcess ppEffectCommit 0; - ACE_Goggles_PostProcess ppEffectEnable true; + GVAR(PostProcess) ppEffectAdjust[0.9, 1.1, 0.004, _postProcessColour, [0,0,0,1],[0,0,0,0]]; + GVAR(PostProcess) ppEffectCommit 0; + GVAR(PostProcess) ppEffectEnable true; }; _glassImagePath = getText(configFile >> "CfgGlasses" >> _glassesClassname >> "ACE_Overlay"); @@ -44,10 +44,10 @@ if (_glassImagePath != "") then { }; if GETDIRT then { - call ACE_Goggles_fnc_ApplyDirtEffect; + call FUNC(applyDirtEffect); }; if GETDUSTT(DACTIVE) then { SETDUST(DAMOUNT,CLAMP(GETDUSTT(DAMOUNT)-1,0,2)); - call ACE_Goggles_fnc_ApplyDust; + call FUNC(applyDust); }; diff --git a/addons/goggles/functions/fnc_checkGoggles.sqf b/addons/goggles/functions/fnc_checkGoggles.sqf new file mode 100644 index 0000000000..a3a721cc18 --- /dev/null +++ b/addons/goggles/functions/fnc_checkGoggles.sqf @@ -0,0 +1,51 @@ +/* + Author: Garth de Wet (LH) + + Description: + Performs rain checks and checks to see whether glasses effects have been applied or not. + Checks for external camera and removes effects. + + Parameters: + Nothing + + Returns: + Nothing + + Example: + [] execVM "ACE_Goggles\functions\fn_CheckGoggles.sqf"; +*/ +#include "script_component.hpp" +call FUNC(checkGlasses); +[QGVAR(RotorWash), "OnEachFrame", {call FUNC(onEachFrame);}] call CALLSTACK(BIS_fnc_addStackedEventHandler); +[] spawn FUNC(rainEffect); +while {alive ace_player} do { + sleep 1; + if (true) then { + // Detect if curator interface is open and disable effects + if (!isNull(findDisplay 312)) exitWith { + if (GVAR(EffectsActive)) then { + call FUNC(removeGlassesEffect); + }; + }; + call FUNC(checkGlasses); + if !(ace_player call FUNC(isGogglesVisible)) exitWith { + if (GVAR(EffectsActive)) then { + call FUNC(removeGlassesEffect); + }; + }; + if (call FUNC(externalCamera)) exitWith { + if (GVAR(EffectsActive)) then { + call FUNC(removeGlassesEffect); + }; + }; + if !(GVAR(EffectsActive)) then { + (goggles ace_player) call FUNC(applyGlassesEffect); + } else { + if ((goggles ace_player) call FUNC(isDivingGoggles) && {underwater ace_player}) then { + call FUNC(removeRainEffect); + call FUNC(removeDirtEffect); + call FUNC(removeDustEffect); + }; + }; + }; +}; diff --git a/addons/goggles/functions/fnc_clearGlasses.sqf b/addons/goggles/functions/fnc_clearGlasses.sqf new file mode 100644 index 0000000000..502d0452e7 --- /dev/null +++ b/addons/goggles/functions/fnc_clearGlasses.sqf @@ -0,0 +1,39 @@ +/* + Name: fnc_clearGlasses.sqf + + Author: Garth de Wet (LH) + + Description: + Clears all dirt, rain, dust from glasses. + Removes glasses effect (PP, overlay) and then puts it back. + + Parameters: + Nothing + + Returns: + Nothing + + Example: + call FUNC(ClearGlasses); +*/ +#include "script_component.hpp" + +private "_broken"; +_broken = GETBROKEN; +GVAR(Effects) = GLASSESDEFAULT; +GVAR(Effects) set [BROKEN, _broken]; + +if ((stance ace_player) != "PRONE") then { + ace_player playActionNow "gestureWipeFace"; +}; + +null = [] spawn { + sleep 0.3; + if (cameraView == "INTERNAL") then { + addCamShake [5, 1.75, 2]; + }; +}; + +call FUNC(removeDirtEffect); +call FUNC(removeRainEffect); +call FUNC(removeDustEffect); diff --git a/addons/goggles/functions/fn_DustHandler.sqf b/addons/goggles/functions/fnc_dustHandler.sqf similarity index 83% rename from addons/goggles/functions/fn_DustHandler.sqf rename to addons/goggles/functions/fnc_dustHandler.sqf index b7107d86a1..f7e187bfd6 100644 --- a/addons/goggles/functions/fn_DustHandler.sqf +++ b/addons/goggles/functions/fnc_dustHandler.sqf @@ -1,29 +1,29 @@ /* - Name: ACE_Goggles_fnc_DustHandler - + fnc_DustHandler.sqf + Author: Garth de Wet (LH) - + Description: Determines whether to place dust on the goggles, based on calibre of weapon fired and other requirements. - - Parameters: + + Parameters: 0: Object - unit - eventhandler was attached to. (Used) 1: String - weapon - Weapon fired (Used) - + Returns: Nothing - + Example: - player addEventHandler ["Fired", {[_this select 0, _this select 1] call ACE_Goggles_fnc_DustHandler;}]; + ace_player addEventHandler ["Fired", {[_this select 0, _this select 1] call FUNC(DustHandler;}]; See http://community.bistudio.com/wiki/ArmA_3:_Event_Handlers#Fired */ -#include "\ACE_Goggles\script.sqf" +#include "script_component.hpp" private ["_bullets", "_position", "_surface", "_found", "_weapon", "_cloudType"]; _weapon = _this select 1; _cloudType = ""; -if ((_this select 0) != player) exitWith {true}; +if ((_this select 0) != ace_player) exitWith {true}; if (isClass(configFile >> "CfgWeapons" >> _weapon >> "GunParticles" >> "FirstEffect")) then { _cloudType = getText(configFile >> "CfgWeapons" >> _weapon >> "GunParticles" >> "FirstEffect" >> "effectName"); @@ -35,9 +35,9 @@ if (isClass(configFile >> "CfgWeapons" >> _weapon >> "GunParticles" >> "FirstEff if (_cloudType == "") exitWith {true}; if (rain > 0.1) exitWith {true}; -if ((stance player) != "PRONE") exitWith {true}; +if ((stance ace_player) != "PRONE") exitWith {true}; -_position = getPosATL player; +_position = getPosATL ace_player; if (surfaceIsWater _position) exitWith {}; if ((_position select 2) > 0.2) exitWith {}; @@ -69,7 +69,7 @@ if (GETDUSTT(DAMOUNT) < 2) then { if (_bulletsRequired <= _bullets) then { SETDUST(DACTIVE,true); - call ACE_Goggles_fnc_ApplyDust; + call FUNC(applyDust); }; }; true diff --git a/addons/goggles/functions/fn_ExternalCamera.sqf b/addons/goggles/functions/fnc_externalCamera.sqf similarity index 52% rename from addons/goggles/functions/fn_ExternalCamera.sqf rename to addons/goggles/functions/fnc_externalCamera.sqf index b2aa4fbeb0..66e1ae6b3d 100644 --- a/addons/goggles/functions/fn_ExternalCamera.sqf +++ b/addons/goggles/functions/fnc_externalCamera.sqf @@ -1,19 +1,20 @@ /* - Name: ACE_Goggles_fnc_ExternalCamera - + fnc_ExternalCamera.sqf + Author: Garth de Wet (LH) - + Description: Returns if the camera is external or not. - - Parameters: + + Parameters: Nothing - + Returns: Boolean - whether the camera is in external view or not. - + Example: - call ACE_Goggles_fnc_ExternalCamera; + call FUNC(ExternalCamera); */ -if (profileNamespace getVariable ["ACE_showInThirdPerson", false]) exitWith { false }; +#include "script_component.hpp" +if (GETVAR(profileNamespace,ACE_showInThirdPerson,false)) exitWith { false }; (cameraView == "External") diff --git a/addons/goggles/functions/fnc_getExplosionIndex.sqf b/addons/goggles/functions/fnc_getExplosionIndex.sqf new file mode 100644 index 0000000000..92d79f4992 --- /dev/null +++ b/addons/goggles/functions/fnc_getExplosionIndex.sqf @@ -0,0 +1,27 @@ +/* + fnc_getExplosionIndex.sqf + + Author: Garth de Wet (LH) + + Description: + Turns 0-1 damage into a rating system of 0-3 + + Parameters: + 0: NUMBER - The amount of damage + + Returns: + NUMBER (the rating) [0-3] + + Example: + _rating = 0.05 call FUNC(GetExplosionIndex); +*/ +private ["_effectIndex"]; + +_effectIndex = switch true do { + case (_this <= 0.04): {0}; + case (_this <= 0.06): {1}; + case (_this <= 0.09): {2}; + default {3}; +}; + +_effectIndex diff --git a/addons/goggles/functions/fn_isDivingGoggles.sqf b/addons/goggles/functions/fnc_isDivingGoggles.sqf similarity index 79% rename from addons/goggles/functions/fn_isDivingGoggles.sqf rename to addons/goggles/functions/fnc_isDivingGoggles.sqf index a69ae3a47e..d6b97fb80a 100644 --- a/addons/goggles/functions/fn_isDivingGoggles.sqf +++ b/addons/goggles/functions/fnc_isDivingGoggles.sqf @@ -1,20 +1,21 @@ /* - Name: ACE_Goggles_fnc_isDivingGoggles - + fnc_isDivingGoggles.sqf + Author: Garth de Wet (LH) - + Description: Determines whether current goggles worn by passed unit is diving goggles or a variant of them. - - Parameters: + + Parameters: 0: String - Glasses classname - + Returns: Boolean - whether diving goggles are worn - + Example: - (goggles player) call ACE_Goggles_fnc_isDivingGoggles; + (goggles ace_player) call FUNC(isDivingGoggles); */ +#include "script_component.hpp" private ["_result", "_glasses"]; _glasses = _this; _result = _glasses == "G_Diving"; diff --git a/addons/goggles/functions/fn_isGogglesVisible.sqf b/addons/goggles/functions/fnc_isGogglesVisible.sqf similarity index 73% rename from addons/goggles/functions/fn_isGogglesVisible.sqf rename to addons/goggles/functions/fnc_isGogglesVisible.sqf index 69b2cfa8a7..a663554b60 100644 --- a/addons/goggles/functions/fn_isGogglesVisible.sqf +++ b/addons/goggles/functions/fnc_isGogglesVisible.sqf @@ -1,20 +1,21 @@ /* - Name: ACE_Goggles_fnc_isGogglesVisible - + fnc_isGogglesVisible.sqf + Author: Garth de Wet (LH) - + Description: Determines if goggles are visible on passed unit (Also checks if unit is in vehicle and cameraView is set to GUNNER) - - Parameters: + + Parameters: 0: Object - unit to check for visible goggles - + Returns: BOOL - Whether the goggles are visible or not. - + Example: - _visible = player call ACE_Goggles_fnc_isGogglesVisible; + _visible = ace_player call FUNC(isGogglesVisible); */ +#include "script_component.hpp" private ["_currentGlasses", "_result", "_unit"]; _unit = _this; @@ -26,12 +27,12 @@ if ((vehicle _unit) != _unit) exitWith {(cameraView != "GUNNER")}; if (_currentGlasses != "") then { _position =(getPosASLW _unit); if (surfaceIsWater _position && {((_position select 2) < 0.25)}) exitWith { - _result = (_currentGlasses call ACE_Goggles_fnc_isDivingGoggles); + _result = (_currentGlasses call FUNC(isDivingGoggles)); }; if (getNumber (ConfigFile >> "CfgGlasses" >> _currentGlasses >> "ACE_Resistance") == 0) exitWith { _result = false; }; - _result = !(_currentGlasses call ACE_Goggles_fnc_isDivingGoggles); + _result = !(_currentGlasses call FUNC(isDivingGoggles)); }; -_result \ No newline at end of file +_result diff --git a/addons/goggles/functions/fn_isInRotorWash.sqf b/addons/goggles/functions/fnc_isInRotorWash.sqf similarity index 78% rename from addons/goggles/functions/fn_isInRotorWash.sqf rename to addons/goggles/functions/fnc_isInRotorWash.sqf index 0342ec1281..f8bad1a10f 100644 --- a/addons/goggles/functions/fn_isInRotorWash.sqf +++ b/addons/goggles/functions/fnc_isInRotorWash.sqf @@ -1,24 +1,25 @@ /* - Name: ACE_Goggles_fnc_isInRotorWash - + fnc_isInRotorWash.sqf + Author: Garth de Wet (LH) - + Description: Checks for nearby helicopters (within 15m) - + Parameters: 0: Object - Unit 1: NUMBER - (optional) Radius to check for helicopter Default: 15 - + Returns: Array: 0 - boolean - If in rotorwash 1 - number - Amount of rotor wash. - + Example: - if (([player, 10] call ACE_Goggles_fnc_isInRotorWash) select 0) then { hint "Rotor wash"; }; - if (([player] call ACE_Goggles_fnc_isInRotorWash) select 0) then { hint "Rotor wash"; }; + if (([ace_player, 10] call FUNC(isInRotorWash)) select 0) then { hint "Rotor wash"; }; + if (([ace_player] call FUNC(isInRotorWash)) select 0) then { hint "Rotor wash"; }; */ +#include "script_component.hpp" private ["_heli", "_unit", "_result", "_radius"]; _unit = _this select 0; _radius = 15; @@ -41,6 +42,7 @@ _heli = (getPosATL _unit) nearEntities [["Helicopter"], _radius]; }; }; }; + false } count _heli; _result diff --git a/addons/goggles/functions/fnc_onEachFrame.sqf b/addons/goggles/functions/fnc_onEachFrame.sqf new file mode 100644 index 0000000000..1de9a82ff3 --- /dev/null +++ b/addons/goggles/functions/fnc_onEachFrame.sqf @@ -0,0 +1,80 @@ +/* + fnc_onEachFrame.sqf + + Author: Garth de Wet (LH) + + Description: + Runs every frame checking for helicopters. + + Parameters: + Nothing + + Returns: + Nothing + + Example: + ["ACE_Goggles_RotorWash", "OnEachFrame", "call FUNC(OnEachFrame);"] call BIS_fnc_addStackedEventHandler; +*/ +#include "script_component.hpp" +if (isNull(ace_player)) then { + [QGVAR(RotorWash), "OnEachFrame"] call CALLSTACK(BIS_fnc_removeStackedEventHandler); +}; +GVAR(FrameEvent) set [0, !(GVAR(FrameEvent) select 0)]; +if (GVAR(FrameEvent) select 0) exitWith { + if (vehicle ace_player != ace_player && {!([ace_player] call EFUNC(common,isTurnedOut))}) exitWith {(GVAR(FrameEvent) select 1) set [0, false]; }; + GVAR(FrameEvent) set [1, ([ace_player] call FUNC(isInRotorWash))]; +}; +private ["_rotorWash","_safe"]; +_rotorWash = GVAR(FrameEvent) select 1; +_safe = false; +if !(_rotorWash select 0) exitWith { + if (GVAR(PostProcessEyes_Enabled)) then { + GVAR(PostProcessEyes_Enabled) = false; + if (!scriptDone (GVAR(DustHandler))) then { + terminate GVAR(DustHandler); + }; + GVAR(DustHandler) = [] spawn { + GVAR(PostProcessEyes) ppEffectAdjust [1, 1, 0, [0,0,0,0], [0,0,0,1],[1,1,1,0]]; + GVAR(PostProcessEyes) ppEffectCommit 2; + sleep 2; + GVAR(PostProcessEyes) ppEffectEnable false; + }; + }; +}; +if ((headgear ace_player) != "") then { + _safe = (getNumber (ConfigFile >> "CfgWeapons" >> (headgear ace_player) >> "ACE_Protection") == 1); +}; +if !(_safe) then { + if !(ace_player call FUNC(isGogglesVisible)) exitWith{}; + if (GETDUSTT(DAMOUNT) < 2) then { + if (!GETDUSTT(DACTIVE)) then { + SETDUST(DACTIVE,true); + call FUNC(ApplyDust); + } else { + if ((_rotorWash select 1) > 0.5) then { + call FUNC(ApplyDust); + }; + }; + }; + _safe = (getNumber (ConfigFile >> "CfgGlasses" >> GVAR(Current) >> "ACE_Protection") == 1); +}; +if (_safe) exitWith {}; +if ((_rotorWash select 1) <= 15) then { + private "_scale"; + _scale = 0.7; + if ((_rotorWash select 1) != 0) then { + _scale = CLAMP(0.3*(_rotorWash select 1),0.1,0.3); + } else { + _scale = 0.1; + }; + _scale = 1 - _scale; + if (!scriptDone (GVAR(DustHandler))) then { + terminate GVAR(DustHandler); + }; + if !(ace_player getVariable ["ACE_EyesDamaged", false]) then { + GVAR(PostProcessEyes_Enabled) = true; + GVAR(PostProcessEyes) ppEffectAdjust [1, 1, 0, [0,0,0,0], [_scale,_scale,_scale,_scale],[1,1,1,0]]; + GVAR(PostProcessEyes) ppEffectCommit 0.5; + GVAR(PostProcessEyes) ppEffectEnable true; + }; +}; diff --git a/addons/goggles/functions/fnc_rainEffect.sqf b/addons/goggles/functions/fnc_rainEffect.sqf new file mode 100644 index 0000000000..1fccd5a09b --- /dev/null +++ b/addons/goggles/functions/fnc_rainEffect.sqf @@ -0,0 +1,61 @@ +/* + fnc_rainEffect.sqf + + Author: Garth de Wet (LH) + + Description: + + + Parameters: + Nothing + + Returns: + Nothing + + Example: + [] spawn FUNC(RainEffect); +*/ +#include "script_component.hpp" +GVAR(RainDrops) = objNull; +GVAR(RainActive) = false; +_fnc_underCover = { + private ["_pos", "_unit"]; + _unit = (_this select 0); + if (vehicle _unit != _unit && {!([_unit] call EFUNC(common,isTurnedOut))}) exitWith {true}; + _pos = eyePos _unit; + ((positionCameraToWorld [0,0,1] select 2) < ((positionCameraToWorld [0,0,0] select 2) - 0.4)) || {(lineIntersects [_pos, _pos vectorAdd [0,0,15], _unit])} +}; +private ["_lastRain"]; +_lastRain = 0; +while {alive ace_player} do { + sleep 0.5; + if (isNull(findDisplay 312)) then { + // Ignore if ace_player is under water + if (!GVAR(EffectsActive) || {underwater ace_player}) exitWith{call FUNC(RemoveRainEffect);}; + if (_lastRain != rain) then { + call FUNC(RemoveRainEffect); + _lastRain = rain; + // Rain is happening + if (_lastRain > 0.05 && {!([ace_player] call _fnc_underCover)}) then { + GVAR(RainActive) = true; + GVAR(RainDrops) = "#particlesource" createVehicleLocal GetPos ace_player; + GVAR(RainDrops) setParticleClass "ACERainEffect"; + GVAR(RainDrops) setDropInterval (0.07 * (1.1 - _lastRain)); + GVAR(RainDrops) attachTo [vehicle ace_player,[0,0,0]]; + }; + }else{ + if (_lastRain > 0.05) then { + if (GVAR(RainActive) && {[ace_player] call _fnc_underCover}) exitWith { + call FUNC(RemoveRainEffect); + }; + if (!GVAR(RainActive)) then { + _lastRain = -1; + }; + }; + }; + }else{ + if (GVAR(RainActive)) then { + call FUNC(RemoveRainEffect); + }; + }; +}; diff --git a/addons/goggles/functions/fnc_removeDirtEffect.sqf b/addons/goggles/functions/fnc_removeDirtEffect.sqf new file mode 100644 index 0000000000..5b58fad834 --- /dev/null +++ b/addons/goggles/functions/fnc_removeDirtEffect.sqf @@ -0,0 +1,21 @@ +/* + fnc_removeDirtEffect.sqf + + Author: Garth de Wet (LH) + + Description: + Removes dirt from the glasses. + + Parameters: + Nothing + + Returns: + Nothing + + Example: + call FUNC(RemoveDirtEffect); +*/ +#include "script_component.hpp" +if (!isNull(GETUVAR(GVAR(DisplayEffects),displayNull))) then { + (GETUVAR(GVAR(DisplayEffects),displayNull) displayCtrl 10660) ctrlSetText ""; +}; diff --git a/addons/goggles/functions/fnc_removeDustEffect.sqf b/addons/goggles/functions/fnc_removeDustEffect.sqf new file mode 100644 index 0000000000..c937fe2bd1 --- /dev/null +++ b/addons/goggles/functions/fnc_removeDustEffect.sqf @@ -0,0 +1,21 @@ +/* + fnc_removeDustEffect.sqf + + Author: Garth de Wet (LH) + + Description: + Removes dust from the glasses. + + Parameters: + Nothing + + Returns: + Nothing + + Example: + call FUNC(RemoveDustEffect); +*/ +#include "script_component.hpp" +if (!isNull(GETUVAR(GVAR(DisplayEffects),displayNull))) then { + (GETUVAR(GVAR(DisplayEffects),displayNull) displayCtrl 10662) ctrlSetText ""; +}; diff --git a/addons/goggles/functions/fnc_removeGlassesEffect.sqf b/addons/goggles/functions/fnc_removeGlassesEffect.sqf new file mode 100644 index 0000000000..dc7bbee45e --- /dev/null +++ b/addons/goggles/functions/fnc_removeGlassesEffect.sqf @@ -0,0 +1,29 @@ +/* + RemoveGlassesEffect + + Author: Garth de Wet (LH) + + Description: + Removes the glasses effect from the screen, removes dirt effect, removes rain effect, + removes dust effect. Does not reset array (glasses will still be broken, dirty, ect.) + + Parameters: + Nothing + + Returns: + Nothing + + Example: + call FUNC(RemoveGlassesEffect); +*/ +#include "script_component.hpp" +GVAR(EffectsActive) = false; +GVAR(PostProcess) ppEffectEnable false; + +if (!isNull(GLASSDISPLAY)) then { + GLASSDISPLAY closeDisplay 0; +}; + +call FUNC(removeDirtEffect); +call FUNC(removeRainEffect); +call FUNC(removeDustEffect); diff --git a/addons/goggles/functions/fnc_removeRainEffect.sqf b/addons/goggles/functions/fnc_removeRainEffect.sqf new file mode 100644 index 0000000000..0f193bcd22 --- /dev/null +++ b/addons/goggles/functions/fnc_removeRainEffect.sqf @@ -0,0 +1,22 @@ +/* + RemoveRainEffect + + Author: Garth de Wet (LH) + + Description: + Removes rain effects from the screen. Resets the rain array. + + Parameters: + Nothing + + Returns: + Nothing + + Example: + call FUNC(RemoveRainEffect); +*/ +#include "script_component.hpp" +if (!isNull (GVAR(RainDrops))) then { + deleteVehicle (GVAR(RainDrops)); +}; +GVAR(RainActive) = false; diff --git a/addons/goggles/functions/script_component.hpp b/addons/goggles/functions/script_component.hpp new file mode 100644 index 0000000000..d8624df3b2 --- /dev/null +++ b/addons/goggles/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\goggles\script_component.hpp" diff --git a/addons/goggles/script.sqf b/addons/goggles/script.sqf deleted file mode 100644 index 843c398433..0000000000 --- a/addons/goggles/script.sqf +++ /dev/null @@ -1,21 +0,0 @@ -#define GLASSESDEFAULT [false,[false,0,0,0],false] - -#define DIRT 0 -#define DUST 1 -#define BROKEN 2 - -#define GETDIRT (ACE_Goggles_Effects select DIRT) -#define GETDUST (ACE_Goggles_Effects select DUST) -#define GETBROKEN (ACE_Goggles_Effects select BROKEN) -#define GETDUSTT(type) ((ACE_Goggles_Effects select DUST) select type) - -#define SETDUST(type,value) (ACE_Goggles_Effects select DUST) set [type, value] - -#define DACTIVE 0 -#define DTIME 1 -#define DBULLETS 2 -#define DAMOUNT 3 - -#define GLASSDISPLAY (uiNamespace getVariable ["ACE_Goggles_Display", displayNull]) - -#define CLAMP(x,low,high) (if(x > high)then{high}else{if(x < low)then{low}else{x}}) diff --git a/addons/goggles/script_component.hpp b/addons/goggles/script_component.hpp new file mode 100644 index 0000000000..825d6ec63f --- /dev/null +++ b/addons/goggles/script_component.hpp @@ -0,0 +1,34 @@ +#define COMPONENT goggles +#include "\z\ace\addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_GOGGLES + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_GOGGLES + #define DEBUG_SETTINGS DEBUG_SETTINGS_GOGGLES +#endif + +#include "\z\ace\addons\main\script_macros.hpp" + +// MACROS +#define GLASSESDEFAULT [false,[false,0,0,0],false] +#define DIRT 0 +#define DUST 1 +#define BROKEN 2 + +#define GETDIRT (GVAR(Effects) select DIRT) +#define GETDUST (GVAR(Effects) select DUST) +#define GETBROKEN (GVAR(Effects) select BROKEN) +#define GETDUSTT(type) ((GVAR(Effects) select DUST) select type) + +#define SETDUST(type,value) (GVAR(Effects) select DUST) set [type,value] + +#define DACTIVE 0 +#define DTIME 1 +#define DBULLETS 2 +#define DAMOUNT 3 + +#define GLASSDISPLAY (GETUVAR(GVAR(Display),displayNull)) + +#define CLAMP(x,low,high) (if(x > high)then{high}else{if(x < low)then{low}else{x}}) From 49e19610c2d2a65c6522644a79dfe9df15871944 Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Mon, 19 Jan 2015 00:57:39 +0200 Subject: [PATCH 03/10] Removed a bunch of spawns and used PFH's in their place. --- addons/goggles/XEH_postInit.sqf | 60 +++++++++++-------- addons/goggles/config.cpp | 13 ---- .../goggles/functions/fnc_applyDirtEffect.sqf | 2 +- addons/goggles/functions/fnc_applyDust.sqf | 49 ++++++--------- addons/goggles/functions/fnc_checkGoggles.sqf | 60 +++++++------------ addons/goggles/functions/fnc_dustHandler.sqf | 5 +- addons/goggles/functions/fnc_onEachFrame.sqf | 4 +- addons/goggles/functions/fnc_rainEffect.sqf | 56 ++++++++--------- .../functions/fnc_removeRainEffect.sqf | 1 + 9 files changed, 107 insertions(+), 143 deletions(-) diff --git a/addons/goggles/XEH_postInit.sqf b/addons/goggles/XEH_postInit.sqf index 2311a21c24..074757f5fc 100644 --- a/addons/goggles/XEH_postInit.sqf +++ b/addons/goggles/XEH_postInit.sqf @@ -16,7 +16,16 @@ #include "script_component.hpp" if (!hasInterface) exitWith {}; -if isNil(QGAR(UsePP)) then { +["ACE3", localize "STR_ACE_Goggles_WipeGlasses", +{ + if (!(GETVAR(ace_player,ACE_isUnconscious,false))) exitWith { + call FUNC(clearGlasses); + true + }; + false +}, [20, true, true, false], false, "keydown"] call CALLSTACK(cba_fnc_registerKeybind); + +if isNil(QGVAR(UsePP)) then { GVAR(UsePP) = true; }; @@ -31,22 +40,24 @@ GVAR(Current) = "None"; GVAR(EyesDamageScript) = 0 spawn {}; GVAR(FrameEvent) = [false, [false,20]]; GVAR(PostProcessEyes_Enabled) = false; -GVAR(DustHandler) = 0 spawn {}; +GVAR(DustHandler) = -1; GVAR(RainDrops) = objNull; +GVAR(RainActive) = false; +GVAR(RainLastLevel) = 0; FUNC(CheckGlasses) = { if (GVAR(Current) != (goggles ace_player)) then { GVAR(Current) = (goggles ace_player); - ["GlassesChanged",[GVAR(Current)]] call CBA_fnc_localEvent; + ["GlassesChanged",[GVAR(Current)]] call EFUNC(common,localEvent); }; }; -ace_player addEventHandler ["Explosion", { +player addEventHandler ["Explosion", { if (alive ace_player) then { call FUNC(ApplyDirtEffect); if (GETBROKEN) exitWith {}; if (((_this select 1) call FUNC(GetExplosionIndex)) < getNumber(ConfigFile >> "CfgGlasses" >> GVAR(Current) >> "ACE_Resistance")) exitWith {}; - if !(ace_player call FUNC(isGogglesVisible)) exitWith {["GlassesCracked",[ace_player]] call CBA_fnc_localEvent;}; + if !(ace_player call FUNC(isGogglesVisible)) exitWith {["GlassesCracked",[ace_player]] call EFUNC(common,localEvent);}; GVAR(Effects) set [BROKEN, true]; if (getText(ConfigFile >> "CfgGlasses" >> GVAR(Current) >> "ACE_OverlayCracked") != "" && {cameraOn == ace_player}) then { if (call FUNC(ExternalCamera)) exitWith {}; @@ -55,26 +66,22 @@ ace_player addEventHandler ["Explosion", { }; (GLASSDISPLAY displayCtrl 10650) ctrlSetText getText(ConfigFile >> "CfgGlasses" >> GVAR(Current) >> "ACE_OverlayCracked"); }; - ["GlassesCracked",[ace_player]] call CBA_fnc_localEvent; + ["GlassesCracked",[ace_player]] call EFUNC(common,localEvent); }; }]; -ace_player addEventHandler ["Killed",{ - [] spawn { - sleep 2; - GVAR(PostProcessEyes) ppEffectEnable false; - GVAR(Effects) = GLASSESDEFAULT; - call FUNC(removeGlassesEffect); - GVAR(EffectsActive)=false; - ace_player setVariable ["ACE_EyesDamaged", false]; - terminate GVAR(EyesDamageScript); - terminate GVAR(MainLoop); - terminate GVAR(DustHandler); - GVAR(MainLoop) = [] spawn FUNC(checkGoggles); - }; +player addEventHandler ["Killed",{ + GVAR(PostProcessEyes) ppEffectEnable false; + GVAR(Effects) = GLASSESDEFAULT; + call FUNC(removeGlassesEffect); + GVAR(EffectsActive)=false; + ace_player setVariable ["ACE_EyesDamaged", false]; + terminate GVAR(EyesDamageScript); + [GVAR(DustHandler)] call CALLSTACK(cba_fnc_removePerFrameHandler); + GVAR(DustHandler) = -1; }]; -ace_player addEventHandler ["Fired",{[_this select 0, _this select 1] call FUNC(dustHandler);}]; -ace_player AddEventHandler ["Take",{call FUNC(checkGlasses);}]; -ace_player AddEventHandler ["Put", {call FUNC(checkGlasses);}]; +player addEventHandler ["Fired",{[_this select 0, _this select 1] call FUNC(dustHandler);}]; +player AddEventHandler ["Take",{call FUNC(checkGlasses);}]; +player AddEventHandler ["Put", {call FUNC(checkGlasses);}]; ["GlassesChanged",{ GVAR(Effects) = GLASSESDEFAULT; @@ -86,7 +93,7 @@ ace_player AddEventHandler ["Put", {call FUNC(checkGlasses);}]; } else { call FUNC(removeGlassesEffect); }; -}] call CBA_fnc_addEventHandler; +}] call EFUNC(common,addEventHandler); ["GlassesCracked",{ if (_this select 0 != ace_player) exitWith {}; ace_player setVariable ["ACE_EyesDamaged", true]; @@ -104,5 +111,8 @@ ace_player AddEventHandler ["Put", {call FUNC(checkGlasses);}]; GVAR(PostProcessEyes) ppEffectEnable false; ace_player setVariable ["ACE_EyesDamaged", false]; }; -}] call CBA_fnc_addEventHandler; -GVAR(MainLoop) = [] spawn FUNC(CheckGoggles); +}] call EFUNC(common,addEventHandler); +call FUNC(checkGlasses); +[FUNC(CheckGoggles), 1, []] call CBA_fnc_addPerFrameHandler; +[FUNC(rainEffect), 0.5, []] call CBA_fnc_addPerFrameHandler; +[FUNC(onEachFrame), 0, []] call CBA_fnc_addPerFrameHandler; diff --git a/addons/goggles/config.cpp b/addons/goggles/config.cpp index bed02b7d32..16bb0f9e0f 100644 --- a/addons/goggles/config.cpp +++ b/addons/goggles/config.cpp @@ -243,19 +243,6 @@ class SniperCloud { ACE_Goggles_BulletCount = 1; }; -class ACE_Default_Keys { - class wipeGlasses { - displayName = $STR_ACE_Goggles_WipeGlasses; - //condition = QUOTE(!(GETVAR(ace_player,isUnconscious,false))); - condition = "true"; - statement = QUOTE(call FUNC(clearGlasses);); - key = 20; // T - shift = 1; - control = 1; - alt = 0; - }; -}; - class ACE_Options { class showInThirdPerson { displayName = $STR_ACE_Goggles_ShowInThirdPerson; diff --git a/addons/goggles/functions/fnc_applyDirtEffect.sqf b/addons/goggles/functions/fnc_applyDirtEffect.sqf index 2f886dc083..79e20b66ef 100644 --- a/addons/goggles/functions/fnc_applyDirtEffect.sqf +++ b/addons/goggles/functions/fnc_applyDirtEffect.sqf @@ -22,7 +22,7 @@ private "_dirtImage"; GVAR(Effects) set [DIRT, true]; if (ace_player call FUNC(isGogglesVisible)) then{ - _dirtImage = getText(ConfigFile >> "CfgGlasses" >> goggles ace_player >> "ACE_OverlayDirt"); + _dirtImage = getText(ConfigFile >> "CfgGlasses" >> (goggles ace_player) >> "ACE_OverlayDirt"); if (_dirtImage != "") then { 100 cutRsc["RscACE_GogglesEffects", "PLAIN",0.1, false]; diff --git a/addons/goggles/functions/fnc_applyDust.sqf b/addons/goggles/functions/fnc_applyDust.sqf index 4b65b991db..d8146c0095 100644 --- a/addons/goggles/functions/fnc_applyDust.sqf +++ b/addons/goggles/functions/fnc_applyDust.sqf @@ -33,37 +33,26 @@ _amount = 1 - (GETDUSTT(DAMOUNT) * 0.125); GVAR(PostProcessEyes) ppEffectAdjust[1, 1, 0, [0,0,0,0], [_amount,_amount,_amount,_amount],[1,1,1,0]]; GVAR(PostProcessEyes) ppEffectCommit 1; GVAR(PostProcessEyes) ppEffectEnable true; -if !(scriptDone GVAR(DustHandler)) then { - terminate GVAR(DustHandler); +if (GVAR(DustHandler) != -1) then { // should be fixed in dev CBA + [GVAR(DustHandler)] call CALLSTACK(cba_fnc_removePerFrameHandler); }; SETDUST(DBULLETS,0); -GVAR(DustHandler) = [3] spawn { - private ["_loop", "_timeToSleep"]; - _timeToSleep = _this select 0; - _loop = true; - while {_loop} do { - sleep _timeToSleep; - _timeToSleep = GETDUSTT(DTIME); - - if(_timeToSleep >= (time - 2.5)) then { - _timeToSleep = time - _timeToSleep; - } else { - SETDUST(DAMOUNT,CLAMP(GETDUSTT(DAMOUNT)-1,0,2)); - private "_amount"; - _amount = 1 - (GETDUSTT(DAMOUNT) * 0.125); - if !(ace_player getVariable ["ACE_EyesDamaged", false]) then { - GVAR(PostProcessEyes) ppEffectAdjust[1, 1, 0, [0,0,0,0], [_amount,_amount,_amount,_amount],[1,1,1,0]]; - GVAR(PostProcessEyes) ppEffectCommit 1; - sleep 1; - }; - if (GETDUSTT(DAMOUNT) <= 0) then { - GVAR(PostProcessEyes) ppEffectEnable false; - SETDUST(DACTIVE,false); - SETDUST(DBULLETS,0); - _loop = false; - }; - SETDUST(DTIME,time); - _timeToSleep = 3; +GVAR(DustHandler) = [{ + EXPLODE_2_PVT(_this select 0,_sleep,_startTime); + if (diag_tickTime >= GETDUSTT(DTIME) + 3) then { + SETDUST(DAMOUNT,CLAMP(GETDUSTT(DAMOUNT)-1,0,2)); + private "_amount"; + _amount = 1 - (GETDUSTT(DAMOUNT) * 0.125); + if !(ace_player getVariable ["ACE_EyesDamaged", false]) then { + GVAR(PostProcessEyes) ppEffectAdjust[1, 1, 0, [0,0,0,0], [_amount,_amount,_amount,_amount],[1,1,1,0]]; + GVAR(PostProcessEyes) ppEffectCommit 0.5; + }; + if (GETDUSTT(DAMOUNT) <= 0) then { + GVAR(PostProcessEyes) ppEffectEnable false; + SETDUST(DACTIVE,false); + SETDUST(DBULLETS,0); + [GVAR(DustHandler)] call CALLSTACK(cba_fnc_removePerFrameHandler); + GVAR(DustHandler) = -1; }; }; -}; +},0,[]] call CALLSTACK(cba_fnc_addPerFrameHandler); diff --git a/addons/goggles/functions/fnc_checkGoggles.sqf b/addons/goggles/functions/fnc_checkGoggles.sqf index a3a721cc18..a00b7371d8 100644 --- a/addons/goggles/functions/fnc_checkGoggles.sqf +++ b/addons/goggles/functions/fnc_checkGoggles.sqf @@ -4,48 +4,34 @@ Description: Performs rain checks and checks to see whether glasses effects have been applied or not. Checks for external camera and removes effects. - - Parameters: - Nothing - - Returns: - Nothing - - Example: - [] execVM "ACE_Goggles\functions\fn_CheckGoggles.sqf"; */ #include "script_component.hpp" -call FUNC(checkGlasses); -[QGVAR(RotorWash), "OnEachFrame", {call FUNC(onEachFrame);}] call CALLSTACK(BIS_fnc_addStackedEventHandler); -[] spawn FUNC(rainEffect); -while {alive ace_player} do { - sleep 1; - if (true) then { - // Detect if curator interface is open and disable effects - if (!isNull(findDisplay 312)) exitWith { - if (GVAR(EffectsActive)) then { - call FUNC(removeGlassesEffect); - }; +if (!alive ace_player) exitWith {}; +if (true) then { + // Detect if curator interface is open and disable effects + if (!isNull(findDisplay 312)) exitWith { + if (GVAR(EffectsActive)) then { + call FUNC(removeGlassesEffect); }; - call FUNC(checkGlasses); - if !(ace_player call FUNC(isGogglesVisible)) exitWith { - if (GVAR(EffectsActive)) then { - call FUNC(removeGlassesEffect); - }; + }; + call FUNC(checkGlasses); + if !(ace_player call FUNC(isGogglesVisible)) exitWith { + if (GVAR(EffectsActive)) then { + call FUNC(removeGlassesEffect); }; - if (call FUNC(externalCamera)) exitWith { - if (GVAR(EffectsActive)) then { - call FUNC(removeGlassesEffect); - }; + }; + if (call FUNC(externalCamera)) exitWith { + if (GVAR(EffectsActive)) then { + call FUNC(removeGlassesEffect); }; - if !(GVAR(EffectsActive)) then { - (goggles ace_player) call FUNC(applyGlassesEffect); - } else { - if ((goggles ace_player) call FUNC(isDivingGoggles) && {underwater ace_player}) then { - call FUNC(removeRainEffect); - call FUNC(removeDirtEffect); - call FUNC(removeDustEffect); - }; + }; + if !(GVAR(EffectsActive)) then { + (goggles ace_player) call FUNC(applyGlassesEffect); + } else { + if ((goggles ace_player) call FUNC(isDivingGoggles) && {underwater ace_player}) then { + call FUNC(removeRainEffect); + call FUNC(removeDirtEffect); + call FUNC(removeDustEffect); }; }; }; diff --git a/addons/goggles/functions/fnc_dustHandler.sqf b/addons/goggles/functions/fnc_dustHandler.sqf index f7e187bfd6..2923412f11 100644 --- a/addons/goggles/functions/fnc_dustHandler.sqf +++ b/addons/goggles/functions/fnc_dustHandler.sqf @@ -18,7 +18,6 @@ See http://community.bistudio.com/wiki/ArmA_3:_Event_Handlers#Fired */ #include "script_component.hpp" - private ["_bullets", "_position", "_surface", "_found", "_weapon", "_cloudType"]; _weapon = _this select 1; _cloudType = ""; @@ -52,13 +51,13 @@ if (!_found) exitWith {}; _bullets = GETDUSTT(DBULLETS); -if ((time - GETDUSTT(DTIME)) > 1) then { +if ((diag_tickTime - GETDUSTT(DTIME)) > 1) then { _bullets = 0; }; _bullets = _bullets + 1; SETDUST(DBULLETS,_bullets); -SETDUST(DTIME,time); +SETDUST(DTIME,diag_tickTime); if (GETDUSTT(DAMOUNT) < 2) then { private "_bulletsRequired"; diff --git a/addons/goggles/functions/fnc_onEachFrame.sqf b/addons/goggles/functions/fnc_onEachFrame.sqf index 1de9a82ff3..25be148a61 100644 --- a/addons/goggles/functions/fnc_onEachFrame.sqf +++ b/addons/goggles/functions/fnc_onEachFrame.sqf @@ -16,9 +16,7 @@ ["ACE_Goggles_RotorWash", "OnEachFrame", "call FUNC(OnEachFrame);"] call BIS_fnc_addStackedEventHandler; */ #include "script_component.hpp" -if (isNull(ace_player)) then { - [QGVAR(RotorWash), "OnEachFrame"] call CALLSTACK(BIS_fnc_removeStackedEventHandler); -}; +if (isNull(ace_player)) exitWith {}; GVAR(FrameEvent) set [0, !(GVAR(FrameEvent) select 0)]; if (GVAR(FrameEvent) select 0) exitWith { if (vehicle ace_player != ace_player && {!([ace_player] call EFUNC(common,isTurnedOut))}) exitWith {(GVAR(FrameEvent) select 1) set [0, false]; }; diff --git a/addons/goggles/functions/fnc_rainEffect.sqf b/addons/goggles/functions/fnc_rainEffect.sqf index 1fccd5a09b..e74dfcd176 100644 --- a/addons/goggles/functions/fnc_rainEffect.sqf +++ b/addons/goggles/functions/fnc_rainEffect.sqf @@ -16,8 +16,8 @@ [] spawn FUNC(RainEffect); */ #include "script_component.hpp" -GVAR(RainDrops) = objNull; -GVAR(RainActive) = false; +private ["_fnc_underCover"]; +if (isNull(ace_player) || {!(alive ace_player)}) exitWith {}; _fnc_underCover = { private ["_pos", "_unit"]; _unit = (_this select 0); @@ -25,37 +25,31 @@ _fnc_underCover = { _pos = eyePos _unit; ((positionCameraToWorld [0,0,1] select 2) < ((positionCameraToWorld [0,0,0] select 2) - 0.4)) || {(lineIntersects [_pos, _pos vectorAdd [0,0,15], _unit])} }; -private ["_lastRain"]; -_lastRain = 0; -while {alive ace_player} do { - sleep 0.5; - if (isNull(findDisplay 312)) then { - // Ignore if ace_player is under water - if (!GVAR(EffectsActive) || {underwater ace_player}) exitWith{call FUNC(RemoveRainEffect);}; - if (_lastRain != rain) then { +if (isNull(findDisplay 312)) exitWith { + if (GVAR(RainActive)) then { + call FUNC(RemoveRainEffect); + }; +}; +// Ignore if ace_player is under water +if (!GVAR(EffectsActive) || {underwater ace_player}) exitWith{call FUNC(RemoveRainEffect);}; +if (GVAR(RainLastRain) != rain) then { + call FUNC(RemoveRainEffect); + GVAR(RainLastRain) = rain; + // Rain is happening + if (GVAR(RainLastRain) > 0.05 && {!([ace_player] call _fnc_underCover)}) then { + GVAR(RainActive) = true; + GVAR(RainDrops) = "#particlesource" createVehicleLocal GetPos ace_player; + GVAR(RainDrops) setParticleClass "ACERainEffect"; + GVAR(RainDrops) setDropInterval (0.07 * (1.1 - GVAR(RainLastRain))); + GVAR(RainDrops) attachTo [vehicle ace_player,[0,0,0]]; + }; +}else{ + if (GVAR(RainLastRain) > 0.05) then { + if (GVAR(RainActive) && {[ace_player] call _fnc_underCover}) exitWith { call FUNC(RemoveRainEffect); - _lastRain = rain; - // Rain is happening - if (_lastRain > 0.05 && {!([ace_player] call _fnc_underCover)}) then { - GVAR(RainActive) = true; - GVAR(RainDrops) = "#particlesource" createVehicleLocal GetPos ace_player; - GVAR(RainDrops) setParticleClass "ACERainEffect"; - GVAR(RainDrops) setDropInterval (0.07 * (1.1 - _lastRain)); - GVAR(RainDrops) attachTo [vehicle ace_player,[0,0,0]]; - }; - }else{ - if (_lastRain > 0.05) then { - if (GVAR(RainActive) && {[ace_player] call _fnc_underCover}) exitWith { - call FUNC(RemoveRainEffect); - }; - if (!GVAR(RainActive)) then { - _lastRain = -1; - }; - }; }; - }else{ - if (GVAR(RainActive)) then { - call FUNC(RemoveRainEffect); + if (!GVAR(RainActive)) then { + GVAR(RainLastRain) = -1; }; }; }; diff --git a/addons/goggles/functions/fnc_removeRainEffect.sqf b/addons/goggles/functions/fnc_removeRainEffect.sqf index 0f193bcd22..bcef82dc81 100644 --- a/addons/goggles/functions/fnc_removeRainEffect.sqf +++ b/addons/goggles/functions/fnc_removeRainEffect.sqf @@ -20,3 +20,4 @@ if (!isNull (GVAR(RainDrops))) then { deleteVehicle (GVAR(RainDrops)); }; GVAR(RainActive) = false; +GVAR(RainLastLevel) = 0; From 10cdbeb4dd2167f40ea2752b325d686bc62c78f3 Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Mon, 19 Jan 2015 01:04:32 +0200 Subject: [PATCH 04/10] Made the glasses effects slowly fade (not completely away) over 30 seconds. --- addons/goggles/functions/fnc_applyGlassesEffect.sqf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/addons/goggles/functions/fnc_applyGlassesEffect.sqf b/addons/goggles/functions/fnc_applyGlassesEffect.sqf index 2b3cd6c8ae..496f73d4b0 100644 --- a/addons/goggles/functions/fnc_applyGlassesEffect.sqf +++ b/addons/goggles/functions/fnc_applyGlassesEffect.sqf @@ -32,6 +32,9 @@ if (_postProcessTintAmount != 0 && {GVAR(UsePP)}) then { GVAR(PostProcess) ppEffectAdjust[0.9, 1.1, 0.004, _postProcessColour, [0,0,0,1],[0,0,0,0]]; GVAR(PostProcess) ppEffectCommit 0; GVAR(PostProcess) ppEffectEnable true; + _postProcessColour set [3, _postProcessTintAmount/250]; + GVAR(PostProcess) ppEffectAdjust[0.9, 1.1, 0.004, _postProcessColour, [0,0,0,1],[0,0,0,0]]; + GVAR(PostProcess) ppEffectCommit 30; }; _glassImagePath = getText(configFile >> "CfgGlasses" >> _glassesClassname >> "ACE_Overlay"); From b499cc9a1dc593d9bedad7e7d5014f3b697cee39 Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Mon, 19 Jan 2015 01:12:45 +0200 Subject: [PATCH 05/10] Rain effect is working as expected. --- addons/goggles/functions/fnc_rainEffect.sqf | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/addons/goggles/functions/fnc_rainEffect.sqf b/addons/goggles/functions/fnc_rainEffect.sqf index e74dfcd176..030e60c149 100644 --- a/addons/goggles/functions/fnc_rainEffect.sqf +++ b/addons/goggles/functions/fnc_rainEffect.sqf @@ -13,7 +13,7 @@ Nothing Example: - [] spawn FUNC(RainEffect); + [] call FUNC(RainEffect); */ #include "script_component.hpp" private ["_fnc_underCover"]; @@ -25,31 +25,31 @@ _fnc_underCover = { _pos = eyePos _unit; ((positionCameraToWorld [0,0,1] select 2) < ((positionCameraToWorld [0,0,0] select 2) - 0.4)) || {(lineIntersects [_pos, _pos vectorAdd [0,0,15], _unit])} }; -if (isNull(findDisplay 312)) exitWith { +if (!isNull(findDisplay 312)) exitWith { if (GVAR(RainActive)) then { call FUNC(RemoveRainEffect); }; }; // Ignore if ace_player is under water if (!GVAR(EffectsActive) || {underwater ace_player}) exitWith{call FUNC(RemoveRainEffect);}; -if (GVAR(RainLastRain) != rain) then { +if (GVAR(RainLastLevel) != rain) then { call FUNC(RemoveRainEffect); - GVAR(RainLastRain) = rain; + GVAR(RainLastLevel) = rain; // Rain is happening - if (GVAR(RainLastRain) > 0.05 && {!([ace_player] call _fnc_underCover)}) then { + if (GVAR(RainLastLevel) > 0.05 && {!([ace_player] call _fnc_underCover)}) then { GVAR(RainActive) = true; GVAR(RainDrops) = "#particlesource" createVehicleLocal GetPos ace_player; GVAR(RainDrops) setParticleClass "ACERainEffect"; - GVAR(RainDrops) setDropInterval (0.07 * (1.1 - GVAR(RainLastRain))); + GVAR(RainDrops) setDropInterval (0.07 * (1.1 - GVAR(RainLastLevel))); GVAR(RainDrops) attachTo [vehicle ace_player,[0,0,0]]; }; }else{ - if (GVAR(RainLastRain) > 0.05) then { + if (GVAR(RainLastLevel) > 0.05) then { if (GVAR(RainActive) && {[ace_player] call _fnc_underCover}) exitWith { call FUNC(RemoveRainEffect); }; if (!GVAR(RainActive)) then { - GVAR(RainLastRain) = -1; + GVAR(RainLastLevel) = -1; }; }; }; From ef19ffad0cf75b68f9cf9804c63c0c3b41aebdba Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Mon, 19 Jan 2015 01:38:54 +0200 Subject: [PATCH 06/10] Glasses conditions are local to each unit. No longer global scope on each client. --- addons/goggles/XEH_postInit.sqf | 10 ++++++---- addons/goggles/functions/fnc_applyDirtEffect.sqf | 4 +++- addons/goggles/functions/fnc_applyDust.sqf | 10 ++++++++-- addons/goggles/functions/fnc_clearGlasses.sqf | 5 +++-- addons/goggles/script_component.hpp | 13 ++++++++----- 5 files changed, 28 insertions(+), 14 deletions(-) diff --git a/addons/goggles/XEH_postInit.sqf b/addons/goggles/XEH_postInit.sqf index 074757f5fc..5861de26aa 100644 --- a/addons/goggles/XEH_postInit.sqf +++ b/addons/goggles/XEH_postInit.sqf @@ -35,7 +35,7 @@ GVAR(PostProcessEyes) ppEffectAdjust[1, 1, 0, [0,0,0,0], [0,0,0,1],[1,1,1,0]]; GVAR(PostProcessEyes) ppEffectCommit 0; GVAR(PostProcessEyes) ppEffectEnable false; GVAR(EffectsActive) = false; -GVAR(Effects) = GLASSESDEFAULT; +SETGLASSES(ace_player,GLASSESDEFAULT); GVAR(Current) = "None"; GVAR(EyesDamageScript) = 0 spawn {}; GVAR(FrameEvent) = [false, [false,20]]; @@ -58,7 +58,9 @@ player addEventHandler ["Explosion", { if (GETBROKEN) exitWith {}; if (((_this select 1) call FUNC(GetExplosionIndex)) < getNumber(ConfigFile >> "CfgGlasses" >> GVAR(Current) >> "ACE_Resistance")) exitWith {}; if !(ace_player call FUNC(isGogglesVisible)) exitWith {["GlassesCracked",[ace_player]] call EFUNC(common,localEvent);}; - GVAR(Effects) set [BROKEN, true]; + _effects = GETGLASSES(ace_player,GLASSESDEFAULT); + _effects set [BROKEN, true]; + SETGLASSES(ace_player,_effects); if (getText(ConfigFile >> "CfgGlasses" >> GVAR(Current) >> "ACE_OverlayCracked") != "" && {cameraOn == ace_player}) then { if (call FUNC(ExternalCamera)) exitWith {}; if (isNull(GLASSDISPLAY)) then { @@ -71,7 +73,7 @@ player addEventHandler ["Explosion", { }]; player addEventHandler ["Killed",{ GVAR(PostProcessEyes) ppEffectEnable false; - GVAR(Effects) = GLASSESDEFAULT; + SETGLASSES(ace_player,GLASSESDEFAULT); call FUNC(removeGlassesEffect); GVAR(EffectsActive)=false; ace_player setVariable ["ACE_EyesDamaged", false]; @@ -84,7 +86,7 @@ player AddEventHandler ["Take",{call FUNC(checkGlasses);}]; player AddEventHandler ["Put", {call FUNC(checkGlasses);}]; ["GlassesChanged",{ - GVAR(Effects) = GLASSESDEFAULT; + SETGLASSES(ace_player,GLASSESDEFAULT); if (call FUNC(ExternalCamera)) exitWith {call FUNC(RemoveGlassesEffect)}; diff --git a/addons/goggles/functions/fnc_applyDirtEffect.sqf b/addons/goggles/functions/fnc_applyDirtEffect.sqf index 79e20b66ef..50d7748818 100644 --- a/addons/goggles/functions/fnc_applyDirtEffect.sqf +++ b/addons/goggles/functions/fnc_applyDirtEffect.sqf @@ -19,7 +19,9 @@ if (cameraOn != ace_player || {call FUNC(externalCamera)}) exitWith{false}; private "_dirtImage"; -GVAR(Effects) set [DIRT, true]; +_effects = GETGLASSES(ace_player,GLASSESDEFAULT); +_effects set [DIRT, true]; +SETGLASSES(ace_player,_effects); if (ace_player call FUNC(isGogglesVisible)) then{ _dirtImage = getText(ConfigFile >> "CfgGlasses" >> (goggles ace_player) >> "ACE_OverlayDirt"); diff --git a/addons/goggles/functions/fnc_applyDust.sqf b/addons/goggles/functions/fnc_applyDust.sqf index d8146c0095..62eeed19ab 100644 --- a/addons/goggles/functions/fnc_applyDust.sqf +++ b/addons/goggles/functions/fnc_applyDust.sqf @@ -38,7 +38,6 @@ if (GVAR(DustHandler) != -1) then { // should be fixed in dev CBA }; SETDUST(DBULLETS,0); GVAR(DustHandler) = [{ - EXPLODE_2_PVT(_this select 0,_sleep,_startTime); if (diag_tickTime >= GETDUSTT(DTIME) + 3) then { SETDUST(DAMOUNT,CLAMP(GETDUSTT(DAMOUNT)-1,0,2)); private "_amount"; @@ -48,7 +47,14 @@ GVAR(DustHandler) = [{ GVAR(PostProcessEyes) ppEffectCommit 0.5; }; if (GETDUSTT(DAMOUNT) <= 0) then { - GVAR(PostProcessEyes) ppEffectEnable false; + GVAR(PostProcessEyes) ppEffectAdjust[1, 1, 0, [0,0,0,0], [1,1,1,1],[1,1,1,0]]; + GVAR(PostProcessEyes) ppEffectCommit 2; + [{ + if (diag_tickTime >= ((_this select 0) select 0)) then { + GVAR(PostProcessEyes) ppEffectEnable false; + [(_this select 1)] call CALLSTACK(cba_fnc_removePerFrameHandler); + }; + },0.5,[diag_tickTime+2]] call CALLSTACK(cba_fnc_addPerFrameHandler); SETDUST(DACTIVE,false); SETDUST(DBULLETS,0); [GVAR(DustHandler)] call CALLSTACK(cba_fnc_removePerFrameHandler); diff --git a/addons/goggles/functions/fnc_clearGlasses.sqf b/addons/goggles/functions/fnc_clearGlasses.sqf index 502d0452e7..6d1c77e580 100644 --- a/addons/goggles/functions/fnc_clearGlasses.sqf +++ b/addons/goggles/functions/fnc_clearGlasses.sqf @@ -20,8 +20,9 @@ private "_broken"; _broken = GETBROKEN; -GVAR(Effects) = GLASSESDEFAULT; -GVAR(Effects) set [BROKEN, _broken]; +_effects = GLASSESDEFAULT; +_effects set [BROKEN, _broken]; +SETGLASSES(ace_player,_effects); if ((stance ace_player) != "PRONE") then { ace_player playActionNow "gestureWipeFace"; diff --git a/addons/goggles/script_component.hpp b/addons/goggles/script_component.hpp index 825d6ec63f..711a314160 100644 --- a/addons/goggles/script_component.hpp +++ b/addons/goggles/script_component.hpp @@ -13,16 +13,19 @@ // MACROS #define GLASSESDEFAULT [false,[false,0,0,0],false] +#define GETGLASSES(unit) GETVAR(unit,GVAR(Condition),GLASSESDEFAULT) +#define SETGLASSES(unit,value) SETVAR(unit,GVAR(Condition),value) + #define DIRT 0 #define DUST 1 #define BROKEN 2 -#define GETDIRT (GVAR(Effects) select DIRT) -#define GETDUST (GVAR(Effects) select DUST) -#define GETBROKEN (GVAR(Effects) select BROKEN) -#define GETDUSTT(type) ((GVAR(Effects) select DUST) select type) +#define GETDIRT (GETGLASSES(ace_player) select DIRT) +#define GETDUST (GETGLASSES(ace_player) select DUST) +#define GETBROKEN (GETGLASSES(ace_player) select BROKEN) +#define GETDUSTT(type) ((GETGLASSES(ace_player) select DUST) select type) -#define SETDUST(type,value) (GVAR(Effects) select DUST) set [type,value] +#define SETDUST(type,value) (GETGLASSES(ace_player) select DUST) set [type,value] #define DACTIVE 0 #define DTIME 1 From 2fe155f990a749a7ba108d186360a4af2d12523c Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Mon, 19 Jan 2015 10:34:49 +0200 Subject: [PATCH 07/10] Converted a couple PFHs to use the waitAndExecute function as that is what they were doing. Fixed a couple bugs. --- addons/goggles/XEH_postInit.sqf | 29 +++++++++++-------- addons/goggles/functions/fnc_applyDust.sqf | 11 +++---- addons/goggles/functions/fnc_clearGlasses.sqf | 6 ++-- addons/goggles/functions/fnc_dustHandler.sqf | 12 ++++---- addons/goggles/functions/fnc_onEachFrame.sqf | 20 +++++++------ 5 files changed, 40 insertions(+), 38 deletions(-) diff --git a/addons/goggles/XEH_postInit.sqf b/addons/goggles/XEH_postInit.sqf index 5861de26aa..a7c40bb4b5 100644 --- a/addons/goggles/XEH_postInit.sqf +++ b/addons/goggles/XEH_postInit.sqf @@ -37,7 +37,7 @@ GVAR(PostProcessEyes) ppEffectEnable false; GVAR(EffectsActive) = false; SETGLASSES(ace_player,GLASSESDEFAULT); GVAR(Current) = "None"; -GVAR(EyesDamageScript) = 0 spawn {}; +GVAR(EyesDamageScript) = -1; GVAR(FrameEvent) = [false, [false,20]]; GVAR(PostProcessEyes_Enabled) = false; GVAR(DustHandler) = -1; @@ -77,9 +77,13 @@ player addEventHandler ["Killed",{ call FUNC(removeGlassesEffect); GVAR(EffectsActive)=false; ace_player setVariable ["ACE_EyesDamaged", false]; - terminate GVAR(EyesDamageScript); - [GVAR(DustHandler)] call CALLSTACK(cba_fnc_removePerFrameHandler); - GVAR(DustHandler) = -1; + if (GVAR(EyesDamageScript) != -1) then { + [GVAR(EyesDamageScript)] call CALLSTACK(cba_fnc_removePreFrameHandler); + }; + if (GVAR(DustHandler) != -1) then { + [GVAR(DustHandler)] call CALLSTACK(cba_fnc_removePerFrameHandler); + GVAR(DustHandler) = -1; + }; }]; player addEventHandler ["Fired",{[_this select 0, _this select 1] call FUNC(dustHandler);}]; player AddEventHandler ["Take",{call FUNC(checkGlasses);}]; @@ -99,20 +103,21 @@ player AddEventHandler ["Put", {call FUNC(checkGlasses);}]; ["GlassesCracked",{ if (_this select 0 != ace_player) exitWith {}; ace_player setVariable ["ACE_EyesDamaged", true]; - if !(scriptDone GVAR(EyesDamageScript)) then { - terminate GVAR(EyesDamageScript); + if (GVAR(EyesDamageScript) != -1) then { + [GVAR(EyesDamageScript)] call CALLSTACK(cba_fnc_removePreFrameHandler); }; GVAR(PostProcessEyes) ppEffectAdjust[1, 1, 0, [0,0,0,0], [0.5,0.5,0.5,0.5],[1,1,1,0]]; GVAR(PostProcessEyes) ppEffectCommit 0; GVAR(PostProcessEyes) ppEffectEnable true; - GVAR(EyesDamageScript) = [] spawn { - sleep 25; + GVAR(EyesDamageScript) = [{ GVAR(PostProcessEyes) ppEffectAdjust[1, 1, 0, [0,0,0,0], [1,1,1,1],[1,1,1,0]]; GVAR(PostProcessEyes) ppEffectCommit 5; - sleep 5; - GVAR(PostProcessEyes) ppEffectEnable false; - ace_player setVariable ["ACE_EyesDamaged", false]; - }; + GVAR(EyesDamageScript) = [{ + GVAR(PostProcessEyes) ppEffectEnable false; + ace_player setVariable ["ACE_EyesDamaged", false]; + GVAR(EyesDamageScript) = -1; + }, [], 5, 1] call EFUNC(common,waitAndExecute); + }, [], 25, 5] call EFUNC(common,waitAndExecute); }] call EFUNC(common,addEventHandler); call FUNC(checkGlasses); [FUNC(CheckGoggles), 1, []] call CBA_fnc_addPerFrameHandler; diff --git a/addons/goggles/functions/fnc_applyDust.sqf b/addons/goggles/functions/fnc_applyDust.sqf index 62eeed19ab..53e75ba274 100644 --- a/addons/goggles/functions/fnc_applyDust.sqf +++ b/addons/goggles/functions/fnc_applyDust.sqf @@ -33,10 +33,12 @@ _amount = 1 - (GETDUSTT(DAMOUNT) * 0.125); GVAR(PostProcessEyes) ppEffectAdjust[1, 1, 0, [0,0,0,0], [_amount,_amount,_amount,_amount],[1,1,1,0]]; GVAR(PostProcessEyes) ppEffectCommit 1; GVAR(PostProcessEyes) ppEffectEnable true; +SETDUST(DBULLETS,0); + if (GVAR(DustHandler) != -1) then { // should be fixed in dev CBA [GVAR(DustHandler)] call CALLSTACK(cba_fnc_removePerFrameHandler); + GVAR(DustHandler) = -1; }; -SETDUST(DBULLETS,0); GVAR(DustHandler) = [{ if (diag_tickTime >= GETDUSTT(DTIME) + 3) then { SETDUST(DAMOUNT,CLAMP(GETDUSTT(DAMOUNT)-1,0,2)); @@ -49,12 +51,7 @@ GVAR(DustHandler) = [{ if (GETDUSTT(DAMOUNT) <= 0) then { GVAR(PostProcessEyes) ppEffectAdjust[1, 1, 0, [0,0,0,0], [1,1,1,1],[1,1,1,0]]; GVAR(PostProcessEyes) ppEffectCommit 2; - [{ - if (diag_tickTime >= ((_this select 0) select 0)) then { - GVAR(PostProcessEyes) ppEffectEnable false; - [(_this select 1)] call CALLSTACK(cba_fnc_removePerFrameHandler); - }; - },0.5,[diag_tickTime+2]] call CALLSTACK(cba_fnc_addPerFrameHandler); + [{GVAR(PostProcessEyes) ppEffectEnable false;}, [], 2, 0.5] call EFUNC(common,waitAndExecute); SETDUST(DACTIVE,false); SETDUST(DBULLETS,0); [GVAR(DustHandler)] call CALLSTACK(cba_fnc_removePerFrameHandler); diff --git a/addons/goggles/functions/fnc_clearGlasses.sqf b/addons/goggles/functions/fnc_clearGlasses.sqf index 6d1c77e580..4072e7c68a 100644 --- a/addons/goggles/functions/fnc_clearGlasses.sqf +++ b/addons/goggles/functions/fnc_clearGlasses.sqf @@ -27,13 +27,11 @@ SETGLASSES(ace_player,_effects); if ((stance ace_player) != "PRONE") then { ace_player playActionNow "gestureWipeFace"; }; - -null = [] spawn { - sleep 0.3; +[{ if (cameraView == "INTERNAL") then { addCamShake [5, 1.75, 2]; }; -}; +}, [], 0.3, 0] call EFUNC(common,waitAndExecute); call FUNC(removeDirtEffect); call FUNC(removeRainEffect); diff --git a/addons/goggles/functions/fnc_dustHandler.sqf b/addons/goggles/functions/fnc_dustHandler.sqf index 2923412f11..aae722d50f 100644 --- a/addons/goggles/functions/fnc_dustHandler.sqf +++ b/addons/goggles/functions/fnc_dustHandler.sqf @@ -18,11 +18,13 @@ See http://community.bistudio.com/wiki/ArmA_3:_Event_Handlers#Fired */ #include "script_component.hpp" -private ["_bullets", "_position", "_surface", "_found", "_weapon", "_cloudType"]; -_weapon = _this select 1; +private ["_bullets", "_position", "_surface", "_found", "_weapon", "_cloudType", "_unit"]; +EXPLODE_2_PVT(_this,_unit,_weapon); +if (_unit != ace_player) exitWith {true}; _cloudType = ""; -if ((_this select 0) != ace_player) exitWith {true}; +if (rain > 0.1) exitWith {true}; +if ((stance _unit) != "PRONE") exitWith {true}; if (isClass(configFile >> "CfgWeapons" >> _weapon >> "GunParticles" >> "FirstEffect")) then { _cloudType = getText(configFile >> "CfgWeapons" >> _weapon >> "GunParticles" >> "FirstEffect" >> "effectName"); @@ -33,10 +35,8 @@ if (isClass(configFile >> "CfgWeapons" >> _weapon >> "GunParticles" >> "FirstEff }; if (_cloudType == "") exitWith {true}; -if (rain > 0.1) exitWith {true}; -if ((stance ace_player) != "PRONE") exitWith {true}; -_position = getPosATL ace_player; +_position = getPosATL _unit; if (surfaceIsWater _position) exitWith {}; if ((_position select 2) > 0.2) exitWith {}; diff --git a/addons/goggles/functions/fnc_onEachFrame.sqf b/addons/goggles/functions/fnc_onEachFrame.sqf index 25be148a61..cd361e38cf 100644 --- a/addons/goggles/functions/fnc_onEachFrame.sqf +++ b/addons/goggles/functions/fnc_onEachFrame.sqf @@ -28,15 +28,16 @@ _safe = false; if !(_rotorWash select 0) exitWith { if (GVAR(PostProcessEyes_Enabled)) then { GVAR(PostProcessEyes_Enabled) = false; - if (!scriptDone (GVAR(DustHandler))) then { - terminate GVAR(DustHandler); + if (GVAR(DustHandler) != -1) then { // should be fixed in dev CBA + [GVAR(DustHandler)] call CALLSTACK(cba_fnc_removePerFrameHandler); + GVAR(DustHandler) = -1; }; - GVAR(DustHandler) = [] spawn { - GVAR(PostProcessEyes) ppEffectAdjust [1, 1, 0, [0,0,0,0], [0,0,0,1],[1,1,1,0]]; - GVAR(PostProcessEyes) ppEffectCommit 2; - sleep 2; + GVAR(PostProcessEyes) ppEffectAdjust [1, 1, 0, [0,0,0,0], [0,0,0,1],[1,1,1,0]]; + GVAR(PostProcessEyes) ppEffectCommit 2; + GVAR(DustHandler) = [{ GVAR(PostProcessEyes) ppEffectEnable false; - }; + GVAR(DustHandler) = -1; + }, [], 2, 0.5] call EFUNC(common,waitAndExecute); }; }; if ((headgear ace_player) != "") then { @@ -66,8 +67,9 @@ if ((_rotorWash select 1) <= 15) then { _scale = 0.1; }; _scale = 1 - _scale; - if (!scriptDone (GVAR(DustHandler))) then { - terminate GVAR(DustHandler); + if (GVAR(DustHandler) != -1) then { // should be fixed in dev CBA + [GVAR(DustHandler)] call CALLSTACK(cba_fnc_removePerFrameHandler); + GVAR(DustHandler) = -1; }; if !(ace_player getVariable ["ACE_EyesDamaged", false]) then { GVAR(PostProcessEyes_Enabled) = true; From 4356c0d02be09655dafdf93c8ac6718dab339e38 Mon Sep 17 00:00:00 2001 From: KoffeinFlummi Date: Mon, 19 Jan 2015 12:38:07 +0100 Subject: [PATCH 08/10] Add addon variable to FCS --- addons/fcs/XEH_preInit.sqf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/addons/fcs/XEH_preInit.sqf b/addons/fcs/XEH_preInit.sqf index ce6f5c99dd..18729ca54f 100644 --- a/addons/fcs/XEH_preInit.sqf +++ b/addons/fcs/XEH_preInit.sqf @@ -1,5 +1,7 @@ #include "script_component.hpp" +ADDON = false; + PREP(adjustRange); PREP(canResetFCS); PREP(canUseFCS); @@ -11,3 +13,5 @@ PREP(keyDown); PREP(keyUp); PREP(reset); PREP(vehicleInit); + +ADDON = true; From 340f75fc0378211f7fbac1b0d91a99b8fbebc7a5 Mon Sep 17 00:00:00 2001 From: KoffeinFlummi Date: Mon, 19 Jan 2015 12:40:03 +0100 Subject: [PATCH 09/10] Add ADDON variable to blank module --- extras/blank/XEH_preInit.sqf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/extras/blank/XEH_preInit.sqf b/extras/blank/XEH_preInit.sqf index 802b74fd63..69abb46fa9 100644 --- a/extras/blank/XEH_preInit.sqf +++ b/extras/blank/XEH_preInit.sqf @@ -1,3 +1,7 @@ #include "script_component.hpp" +ADDON = false; + PREP(empty); + +ADDON = true; From d2c75087e8e030d69bd34d91b3e91ed2e6f1e35a Mon Sep 17 00:00:00 2001 From: KoffeinFlummi Date: Mon, 19 Jan 2015 12:44:58 +0100 Subject: [PATCH 10/10] Make all py scripts in /tools executable --- tools/rename_fn.py | 0 tools/stringtableduplicates.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 tools/rename_fn.py mode change 100644 => 100755 tools/stringtableduplicates.py diff --git a/tools/rename_fn.py b/tools/rename_fn.py old mode 100644 new mode 100755 diff --git a/tools/stringtableduplicates.py b/tools/stringtableduplicates.py old mode 100644 new mode 100755