ACE3/addons/irlight/CfgWeapons.hpp
BaerMitUmlaut d6faac5881
Add IR Flashlights (#6563)
* Initial IR flashlight tests

* More experiments

* Rewrite using engine IR lights

* Rework ranges, fix bugs, add docs

* Fix uncommented DISABLE_COMPILE_CACHE

Co-authored-by: jonpas <jonpas33@gmail.com>

* Markdown fixes

Co-authored-by: jonpas <jonpas33@gmail.com>

* Markdown fixes

Co-authored-by: jonpas <jonpas33@gmail.com>

* Markdown fixes

Co-authored-by: jonpas <jonpas33@gmail.com>

* Markdown fixes

Co-authored-by: jonpas <jonpas33@gmail.com>

* Markdown fixes

Co-authored-by: jonpas <jonpas33@gmail.com>

* Use baseWeapon instead of custom property

* Add baseWeapon to SPIR

---------

Co-authored-by: jonpas <jonpas33@gmail.com>
2023-09-17 09:32:39 +02:00

396 lines
12 KiB
C++

// Attenuation and Flashlight seem to not work with inheritance
#define VISIBLE_POINTER_FLASHLIGHT \
class Flashlight { \
color[] = {0, 0, 0}; \
ambient[] = {0, 0, 0}; \
size = 0; \
innerAngle = 0; \
outerAngle = 0; \
position = "laser pos"; \
direction = "laser dir"; \
useFlare = 0; \
flareSize = 0; \
flareMaxDistance = 0; \
coneFadeCoef = 0; \
intensity = 0; \
irLight = 0; \
volumeShape = ""; \
scale[] = {0, 0, 0}; \
class Attenuation { \
constant = 0; \
linear = 0; \
quadratic = 0; \
start = 0; \
hardLimitStart = 0; \
hardLimitEnd = 0; \
}; \
}
#define DBAL_A3_FLASHLIGHT \
class Flashlight { \
color[] = {1, 1, 1}; \
ambient[] = {1, 1, 1}; \
size = 1; \
innerAngle = 10; \
outerAngle = 12; \
position = "laser pos"; \
direction = "laser dir"; \
useFlare = 1; \
flareSize = 1.4; \
flareMaxDistance = 200; \
coneFadeCoef = 6; \
intensity = 100; \
irLight = 1; \
volumeShape = "a3\data_f\VolumeLightFlashlight.p3d"; \
scale[] = {0.25, 0.25, 1}; \
class Attenuation { \
constant = 1; \
linear = 0; \
quadratic = 0.008; \
start = 1; \
hardLimitStart = 220; \
hardLimitEnd = 250; \
}; \
}
#define DBAL_A3_FLASHLIGHT_LR \
class Flashlight { \
color[] = {1, 1, 1}; \
ambient[] = {1, 1, 1}; \
size = 1; \
innerAngle = 10; \
outerAngle = 12; \
position = "laser pos"; \
direction = "laser dir"; \
useFlare = 1; \
flareSize = 1.4; \
flareMaxDistance = 200; \
coneFadeCoef = 6; \
intensity = 200; \
irLight = 1; \
volumeShape = "a3\data_f\VolumeLightFlashlight.p3d"; \
scale[] = {0.25, 0.25, 1}; \
class Attenuation { \
constant = 1; \
linear = 0; \
quadratic = 0.001; \
start = 1; \
hardLimitStart = 570; \
hardLimitEnd = 600; \
}; \
}
#define SPIR_FLASHLIGHT(hardLimitStart,hardLimitEnd) \
color[] = {1, 1, 1}; \
ambient[] = {1, 1, 1}; \
size = 1; \
position = "flash dir"; \
direction = "flash"; \
useFlare = 1; \
flareSize = 1.4; \
flareMaxDistance = 100; \
irLight = 1; \
volumeShape = "a3\data_f\VolumeLightFlashlight.p3d"; \
class Attenuation { \
constant = 1; \
linear = 0; \
quadratic = 0.02; \
start = 1; \
hardLimitStart = hardLimitStart; \
hardLimitEnd = hardLimitEnd; \
}
#define SPIR_FLASHLIGHT_LR(hardLimitStart,hardLimitEnd) \
color[] = {1, 1, 1}; \
ambient[] = {1, 1, 1}; \
size = 1; \
position = "flash dir"; \
direction = "flash"; \
useFlare = 1; \
flareSize = 1.4; \
flareMaxDistance = 100; \
irLight = 1; \
volumeShape = "a3\data_f\VolumeLightFlashlight.p3d"; \
class Attenuation { \
constant = 1; \
linear = 0; \
quadratic = 0.002; \
start = 1; \
hardLimitStart = hardLimitStart; \
hardLimitEnd = hardLimitEnd; \
}
#define POINTER \
class Pointer { \
irLaserPos = "laser pos"; \
irLaserEnd = "laser dir"; \
irDistance = 5; \
}
class CfgWeapons {
class acc_pointer_IR;
class acc_flashlight;
class InventoryFlashlightItem_Base_F;
// DBAL-A3 (red pointer)
class ACE_DBAL_A3_Red: acc_pointer_IR {
author = ECSTRING(common,ACETeam);
displayName = CSTRING(DBAL_A3_Red);
descriptionUse = CSTRING(DBAL_A3_DescriptionUse);
descriptionShort = CSTRING(DBAL_A3_DescriptionShort);
MRT_SwitchItemNextClass = "ACE_DBAL_A3_Red_IP";
MRT_SwitchItemPrevClass = "ACE_DBAL_A3_Red_VP";
MRT_SwitchItemHintText = CSTRING(Mode_IRDual);
baseWeapon = "ACE_DBAL_A3_Red";
class ItemInfo: InventoryFlashLightItem_Base_F {
DBAL_A3_FLASHLIGHT;
POINTER;
};
};
class ACE_DBAL_A3_Red_IP: ACE_DBAL_A3_Red {
scope = 1;
MRT_SwitchItemNextClass = "ACE_DBAL_A3_Red_II";
MRT_SwitchItemPrevClass = "ACE_DBAL_A3_Red";
MRT_SwitchItemHintText = CSTRING(Mode_IRPointer);
class ItemInfo: InventoryFlashLightItem_Base_F {
class Flashlight {};
POINTER;
};
};
class ACE_DBAL_A3_Red_II: ACE_DBAL_A3_Red {
scope = 1;
MRT_SwitchItemNextClass = "ACE_DBAL_A3_Red_VP";
MRT_SwitchItemPrevClass = "ACE_DBAL_A3_Red_IP";
MRT_SwitchItemHintText = CSTRING(Mode_IRIlluminator);
class ItemInfo: InventoryFlashLightItem_Base_F {
DBAL_A3_FLASHLIGHT;
};
};
class ACE_DBAL_A3_Red_VP: ACE_DBAL_A3_Red {
scope = 1;
ACE_laserpointer = 1;
MRT_SwitchItemNextClass = "ACE_DBAL_A3_Red";
MRT_SwitchItemPrevClass = "ACE_DBAL_A3_Red_II";
MRT_SwitchItemHintText = CSTRING(Mode_VisiblePointer);
class ItemInfo: InventoryFlashLightItem_Base_F {
VISIBLE_POINTER_FLASHLIGHT;
POINTER;
};
};
// DBAL-A3 (red pointer, long range)
class ACE_DBAL_A3_Red_LR: ACE_DBAL_A3_Red {
scope = 1;
MRT_SwitchItemNextClass = "ACE_DBAL_A3_Red_LR_IP";
MRT_SwitchItemPrevClass = "ACE_DBAL_A3_Red_LR_VP";
baseWeapon = "ACE_DBAL_A3_Red_LR";
class ItemInfo: InventoryFlashLightItem_Base_F {
DBAL_A3_FLASHLIGHT_LR;
POINTER;
};
};
class ACE_DBAL_A3_Red_LR_IP: ACE_DBAL_A3_Red_IP {
MRT_SwitchItemNextClass = "ACE_DBAL_A3_Red_LR_II";
MRT_SwitchItemPrevClass = "ACE_DBAL_A3_Red_LR";
baseWeapon = "ACE_DBAL_A3_Red_LR";
};
class ACE_DBAL_A3_Red_LR_II: ACE_DBAL_A3_Red_II {
MRT_SwitchItemNextClass = "ACE_DBAL_A3_Red_LR_VP";
MRT_SwitchItemPrevClass = "ACE_DBAL_A3_Red_LR_IP";
baseWeapon = "ACE_DBAL_A3_Red_LR";
class ItemInfo: InventoryFlashLightItem_Base_F {
DBAL_A3_FLASHLIGHT_LR;
};
};
class ACE_DBAL_A3_Red_LR_VP: ACE_DBAL_A3_Red_VP {
MRT_SwitchItemNextClass = "ACE_DBAL_A3_Red_LR";
MRT_SwitchItemPrevClass = "ACE_DBAL_A3_Red_LR_II";
baseWeapon = "ACE_DBAL_A3_Red_LR";
};
// DBAL-A3 (green pointer)
class ACE_DBAL_A3_Green: ACE_DBAL_A3_Red {
scope = 2;
displayName = CSTRING(DBAL_A3_Green);
MRT_SwitchItemNextClass = "ACE_DBAL_A3_Green_IP";
MRT_SwitchItemPrevClass = "ACE_DBAL_A3_Green_VP";
baseWeapon = "ACE_DBAL_A3_Green";
};
class ACE_DBAL_A3_Green_IP: ACE_DBAL_A3_Red_IP {
displayName = CSTRING(DBAL_A3_Green);
MRT_SwitchItemNextClass = "ACE_DBAL_A3_Green_II";
MRT_SwitchItemPrevClass = "ACE_DBAL_A3_Green";
baseWeapon = "ACE_DBAL_A3_Green";
};
class ACE_DBAL_A3_Green_II: ACE_DBAL_A3_Red_II {
displayName = CSTRING(DBAL_A3_Green);
MRT_SwitchItemNextClass = "ACE_DBAL_A3_Green_VP";
MRT_SwitchItemPrevClass = "ACE_DBAL_A3_Green_IP";
baseWeapon = "ACE_DBAL_A3_Green";
};
class ACE_DBAL_A3_Green_VP: ACE_DBAL_A3_Red_VP {
displayName = CSTRING(DBAL_A3_Green);
ACE_laserpointer = 2;
MRT_SwitchItemNextClass = "ACE_DBAL_A3_Green";
MRT_SwitchItemPrevClass = "ACE_DBAL_A3_Green_II";
baseWeapon = "ACE_DBAL_A3_Green";
};
// DBAL-A3 (green pointer, long range)
class ACE_DBAL_A3_Green_LR: ACE_DBAL_A3_Green {
scope = 1;
MRT_SwitchItemNextClass = "ACE_DBAL_A3_Green_LR_IP";
MRT_SwitchItemPrevClass = "ACE_DBAL_A3_Green_LR_VP";
baseWeapon = "ACE_DBAL_A3_Green_LR";
class ItemInfo: InventoryFlashLightItem_Base_F {
DBAL_A3_FLASHLIGHT;
POINTER;
};
};
class ACE_DBAL_A3_Green_LR_IP: ACE_DBAL_A3_Green_IP {
MRT_SwitchItemNextClass = "ACE_DBAL_A3_Green_LR_II";
MRT_SwitchItemPrevClass = "ACE_DBAL_A3_Green_LR";
baseWeapon = "ACE_DBAL_A3_Green_LR";
};
class ACE_DBAL_A3_Green_LR_II: ACE_DBAL_A3_Green_II {
MRT_SwitchItemNextClass = "ACE_DBAL_A3_Green_LR_VP";
MRT_SwitchItemPrevClass = "ACE_DBAL_A3_Green_LR_IP";
baseWeapon = "ACE_DBAL_A3_Green_LR";
class ItemInfo: InventoryFlashLightItem_Base_F {
DBAL_A3_FLASHLIGHT;
};
};
class ACE_DBAL_A3_Green_LR_VP: ACE_DBAL_A3_Green_VP {
MRT_SwitchItemNextClass = "ACE_DBAL_A3_Green_LR";
MRT_SwitchItemPrevClass = "ACE_DBAL_A3_Green_LR_II";
baseWeapon = "ACE_DBAL_A3_Green_LR";
};
// SPIR
class ACE_SPIR: acc_flashlight {
author = ECSTRING(common,ACETeam);
displayName = "SPIR";
descriptionUse = CSTRING(SPIR_DescriptionUse);
descriptionShort = CSTRING(SPIR_DescriptionShort);
MRT_SwitchItemNextClass = "ACE_SPIR_Medium";
MRT_SwitchItemPrevClass = "ACE_SPIR_Narrow";
MRT_SwitchItemHintText = CSTRING(Mode_Wide);
baseWeapon = "ACE_SPIR";
class ItemInfo: InventoryFlashlightItem_Base_F {
class Flashlight {
SPIR_FLASHLIGHT(50,70);
innerAngle = 20;
outerAngle = 32;
coneFadeCoef = 2;
intensity = 50;
scale[] = {1, 1, 1};
};
};
};
class ACE_SPIR_Medium: ACE_SPIR {
scope = 1;
MRT_SwitchItemNextClass = "ACE_SPIR_Narrow";
MRT_SwitchItemPrevClass = "ACE_SPIR";
MRT_SwitchItemHintText = CSTRING(Mode_Medium);
class ItemInfo: InventoryFlashlightItem_Base_F {
class Flashlight {
SPIR_FLASHLIGHT(80,100);
intensity = 100;
innerAngle = 10;
outerAngle = 12;
coneFadeCoef = 3;
scale[] = {1, 1, 5};
};
};
};
class ACE_SPIR_Narrow: ACE_SPIR {
scope = 1;
MRT_SwitchItemNextClass = "ACE_SPIR";
MRT_SwitchItemPrevClass = "ACE_SPIR_Medium";
MRT_SwitchItemHintText = CSTRING(Mode_Narrow);
class ItemInfo: InventoryFlashlightItem_Base_F {
class Flashlight {
SPIR_FLASHLIGHT(120,150);
intensity = 200;
innerAngle = 5;
outerAngle = 6;
coneFadeCoef = 4;
scale[] = {1, 1, 10};
};
};
};
// SPIR (long range)
class ACE_SPIR_LR: ACE_SPIR {
scope = 1;
MRT_SwitchItemNextClass = "ACE_SPIR_LR_Medium";
MRT_SwitchItemPrevClass = "ACE_SPIR_LR_Narrow";
baseWeapon = "ACE_SPIR_LR";
class ItemInfo: InventoryFlashlightItem_Base_F {
class Flashlight {
SPIR_FLASHLIGHT_LR(80,100);
innerAngle = 20;
outerAngle = 32;
coneFadeCoef = 2;
intensity = 50;
scale[] = {1, 1, 1};
};
};
};
class ACE_SPIR_LR_Medium: ACE_SPIR_LR {
MRT_SwitchItemNextClass = "ACE_SPIR_LR_Narrow";
MRT_SwitchItemPrevClass = "ACE_SPIR_LR";
MRT_SwitchItemHintText = CSTRING(Mode_Medium);
class ItemInfo: InventoryFlashlightItem_Base_F {
class Flashlight {
SPIR_FLASHLIGHT_LR(100,120);
intensity = 100;
innerAngle = 10;
outerAngle = 12;
coneFadeCoef = 3;
scale[] = {1, 1, 5};
};
};
};
class ACE_SPIR_LR_Narrow: ACE_SPIR_LR {
MRT_SwitchItemNextClass = "ACE_SPIR_LR";
MRT_SwitchItemPrevClass = "ACE_SPIR_LR_Medium";
MRT_SwitchItemHintText = CSTRING(Mode_Narrow);
class ItemInfo: InventoryFlashlightItem_Base_F {
class Flashlight {
SPIR_FLASHLIGHT_LR(180,200);
intensity = 200;
innerAngle = 5;
outerAngle = 6;
coneFadeCoef = 4;
scale[] = {1, 1, 10};
};
};
};
};