mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Spotting scope - New reticle using CBA scripted optics (#6964)
* new reticle for spotting scope * reticle b * illuminated reticle for night * use orig spotting scope reticle, bigger occular * fix spotting scope attenuation
This commit is contained in:
parent
33602df517
commit
4e04100ea9
7
addons/spottingscope/CfgOpticsEffect.hpp
Normal file
7
addons/spottingscope/CfgOpticsEffect.hpp
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
class CfgOpticsEffect {
|
||||||
|
class GVAR(OpticsRadBlur1) {
|
||||||
|
type = "radialblur";
|
||||||
|
params[] = {0.01,0.01,0.18,0.36};
|
||||||
|
priority = 950;
|
||||||
|
};
|
||||||
|
};
|
@ -27,23 +27,16 @@ class CfgVehicles {
|
|||||||
|
|
||||||
class LandVehicle;
|
class LandVehicle;
|
||||||
class StaticWeapon: LandVehicle {
|
class StaticWeapon: LandVehicle {
|
||||||
class Turrets;
|
class Turrets {
|
||||||
|
class MainTurret;
|
||||||
|
};
|
||||||
|
|
||||||
class ACE_Actions {
|
class ACE_Actions {
|
||||||
class ACE_MainActions;
|
class ACE_MainActions;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
class StaticATWeapon: StaticWeapon {
|
class ACE_SpottingScopeObject: StaticWeapon {
|
||||||
class Turrets: Turrets {
|
|
||||||
class MainTurret;
|
|
||||||
};
|
|
||||||
|
|
||||||
class ACE_Actions: ACE_Actions {
|
|
||||||
class ACE_MainActions: ACE_MainActions {};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
class ACE_SpottingScopeObject: StaticATWeapon {
|
|
||||||
EGVAR(dragging,canDrag) = 1;
|
EGVAR(dragging,canDrag) = 1;
|
||||||
EGVAR(dragging,dragPosition)[] = {0,1,0};
|
EGVAR(dragging,dragPosition)[] = {0,1,0};
|
||||||
EGVAR(dragging,dragDirection) = 0;
|
EGVAR(dragging,dragDirection) = 0;
|
||||||
@ -68,6 +61,8 @@ class CfgVehicles {
|
|||||||
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers_base {};
|
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers_base {};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
CBA_ScriptedOpticClass = "ACE_SpottingScopeOptic";
|
||||||
|
|
||||||
author = ECSTRING(common,ACETeam);
|
author = ECSTRING(common,ACETeam);
|
||||||
scope = 1;
|
scope = 1;
|
||||||
side = 1;
|
side = 1;
|
||||||
@ -84,6 +79,7 @@ class CfgVehicles {
|
|||||||
accuracy = 0.12;
|
accuracy = 0.12;
|
||||||
cost = 10000;
|
cost = 10000;
|
||||||
icon = "\A3\Static_F_Gamma\data\UI\map_StaticTurret_AT_CA.paa";
|
icon = "\A3\Static_F_Gamma\data\UI\map_StaticTurret_AT_CA.paa";
|
||||||
|
attenuationEffectType = "";
|
||||||
|
|
||||||
class SpeechVariants {
|
class SpeechVariants {
|
||||||
class Default {
|
class Default {
|
||||||
@ -123,15 +119,15 @@ class CfgVehicles {
|
|||||||
initAngleY = 0;
|
initAngleY = 0;
|
||||||
minAngleY = -100;
|
minAngleY = -100;
|
||||||
maxAngleY = 100;
|
maxAngleY = 100;
|
||||||
minFov = 0.0025;
|
minFov = "0.25/35"; // real one is 15x-45x, but max mag in game is 37x
|
||||||
maxFov = 0.05;
|
maxFov = "0.25/5";
|
||||||
initFov= 0.05;
|
initFov= "0.25/5";
|
||||||
};
|
};
|
||||||
|
|
||||||
weapons[] = {};
|
weapons[] = {};
|
||||||
magazines[] = {};
|
magazines[] = {};
|
||||||
gunnerOpticsColor[] = {1,1,1,1};
|
gunnerOpticsColor[] = {1,1,1,1};
|
||||||
gunnerOpticsModel = "\A3\Weapons_F\empty";
|
gunnerOpticsModel = "\A3\Weapons_F\empty.p3d";
|
||||||
gunnerOpticsEffect[] = {"OpticsCHAbera1","OpticsBlur2"};
|
gunnerOpticsEffect[] = {"OpticsCHAbera1","OpticsBlur2"};
|
||||||
gunnerOutOpticsShowCursor = 0;
|
gunnerOutOpticsShowCursor = 0;
|
||||||
gunnerOpticsShowCursor = 0;
|
gunnerOpticsShowCursor = 0;
|
||||||
@ -140,7 +136,7 @@ class CfgVehicles {
|
|||||||
gunnerGetOutAction = "PlayerProne";
|
gunnerGetOutAction = "PlayerProne";
|
||||||
gunnerForceOptics = 0;
|
gunnerForceOptics = 0;
|
||||||
ejectDeadGunner = 0;
|
ejectDeadGunner = 0;
|
||||||
turretInfoType = QGVAR(RscUnitInfo);
|
turretInfoType = "CBA_ScriptedOptic_zooming";
|
||||||
opticsDisablePeripherialVision = 1;
|
opticsDisablePeripherialVision = 1;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
class CfgWeapons {
|
class CfgWeapons {
|
||||||
class ACE_ItemCore;
|
class ACE_ItemCore;
|
||||||
class CBA_MiscItem_ItemInfo;
|
class CBA_MiscItem_ItemInfo;
|
||||||
@ -15,4 +14,31 @@ class CfgWeapons {
|
|||||||
mass = 40;
|
mass = 40;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ItemCore;
|
||||||
|
class ACE_SpottingScopeOptic: ItemCore {
|
||||||
|
scope = 1;
|
||||||
|
|
||||||
|
class CBA_ScriptedOptic {
|
||||||
|
minMagnificationReticleScale[] = {5,1};
|
||||||
|
maxMagnificationReticleScale[] = {25,5};
|
||||||
|
|
||||||
|
reticleDetailTextures[] = {
|
||||||
|
// start at > this magnification, reticleTexture, reticleTextureSize, reticleTextureNight (optional)
|
||||||
|
{0, PATHTOF(data\ace_spottingscope_reticle_b1_ca.paa), 1, PATHTOF(data\ace_spottingscope_reticle_b1_ca.paa)},
|
||||||
|
{9, PATHTOF(data\ace_spottingscope_reticle_b2_ca.paa), 1/2, PATHTOF(data\ace_spottingscope_reticle_b2_ca.paa)},
|
||||||
|
{14, PATHTOF(data\ace_spottingscope_reticle_b3_ca.paa), 1/3, PATHTOF(data\ace_spottingscope_reticle_b3_ca.paa)},
|
||||||
|
{19, PATHTOF(data\ace_spottingscope_reticle_b4_ca.paa), 1/4, PATHTOF(data\ace_spottingscope_reticle_b4_ca.paa)},
|
||||||
|
{24, PATHTOF(data\ace_spottingscope_reticle_b5_ca.paa), 1/5, PATHTOF(data\ace_spottingscope_reticle_b5_ca.paa)}
|
||||||
|
};
|
||||||
|
fadeReticleInterval[] = {10.5,9.5};
|
||||||
|
|
||||||
|
bodyTexture = QPATHTOF(data\ace_spottingscope_body_co.paa);
|
||||||
|
//bodyTextureNight = QPATHTOF(data\ace_spottingscope_body_co.paa);
|
||||||
|
bodyTextureSize = 1.5;
|
||||||
|
reticleSafezoneSize = 1;
|
||||||
|
hidePeripheralVision = 1;
|
||||||
|
opticsPPEffects[] = {QGVAR(OpticsRadBlur1)};
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
@ -1,56 +0,0 @@
|
|||||||
|
|
||||||
class RscOpticsValue;
|
|
||||||
class RscMapControl;
|
|
||||||
class RscText;
|
|
||||||
class RscPicture;
|
|
||||||
|
|
||||||
class RscInGameUI {
|
|
||||||
class RscUnitInfo;
|
|
||||||
class GVAR(RscUnitInfo): RscUnitInfo {
|
|
||||||
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); {((_this select 0) displayCtrl _x) ctrlShow false} forEach [ARR_4(IDC_RETICLE,IDC_BODY,IDC_BLACK_LEFT,IDC_BLACK_RIGHT)]);
|
|
||||||
controls[] = {"CA_FOVMode","ScriptedReticleHelper","trippleHeadLeft","trippleHeadRight","Reticle","Body"}; // don't change this order
|
|
||||||
|
|
||||||
class CA_FOVMode: RscOpticsValue { // idea by Taosenai. Apparently this can be used via isNil check to determine wheter the scope or the kolimator is used
|
|
||||||
idc = 154;
|
|
||||||
w = 0;
|
|
||||||
h = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
class ScriptedReticleHelper: RscMapControl {
|
|
||||||
onDraw = QUOTE(ctrlParent (_this select 0) call FUNC(animateReticle));
|
|
||||||
idc = -1;
|
|
||||||
w = 0;
|
|
||||||
h = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
class Reticle: RscPicture {
|
|
||||||
idc = IDC_RETICLE;
|
|
||||||
text = QPATHTOF(rsc\spotting_scope_reticle_co.paa);
|
|
||||||
x = POS_X;
|
|
||||||
y = POS_Y;
|
|
||||||
w = POS_W;
|
|
||||||
h = POS_H;
|
|
||||||
};
|
|
||||||
|
|
||||||
class Body: Reticle {
|
|
||||||
idc = IDC_BODY;
|
|
||||||
text = QPATHTOF(rsc\spotting_scope_body_co.paa);
|
|
||||||
};
|
|
||||||
|
|
||||||
//These are just black side panels to cover the areas that the optics p3d doesn't cover
|
|
||||||
//It will ONLY effect tripple head users as (safezoneX == safeZoneXAbs) for everyone else
|
|
||||||
class trippleHeadLeft: RscText {
|
|
||||||
idc = IDC_BLACK_LEFT;
|
|
||||||
x = "safeZoneXAbs";
|
|
||||||
Y = "safezoneY";
|
|
||||||
w = QUOTE(POS_X_BASE(SIZEX) - safeZoneXAbs);
|
|
||||||
h = "safeZoneH";
|
|
||||||
colorBackground[] = {0,0,0,1};
|
|
||||||
};
|
|
||||||
|
|
||||||
class trippleHeadRight: trippleHeadLeft {
|
|
||||||
idc = IDC_BLACK_RIGHT;
|
|
||||||
x = QUOTE(safeZoneXAbs + safeZoneWAbs - (POS_X_BASE(SIZEX) - safeZoneXABS));
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
@ -1,4 +1,2 @@
|
|||||||
|
|
||||||
PREP(pickup);
|
PREP(pickup);
|
||||||
PREP(place);
|
PREP(place);
|
||||||
PREP(animateReticle);
|
|
||||||
|
@ -16,4 +16,12 @@ PREP_RECOMPILE_END;
|
|||||||
_tube addTorque (vectorNormalized [1 - random 2, 1 - random 2, 1 - random 2] vectorMultiply 4);
|
_tube addTorque (vectorNormalized [1 - random 2, 1 - random 2, 1 - random 2] vectorMultiply 4);
|
||||||
}] call CBA_fnc_addClassEventHandler;
|
}] call CBA_fnc_addClassEventHandler;
|
||||||
|
|
||||||
|
["ACE_SpottingScopeObject", "GetOut", {
|
||||||
|
params ["_vehicle", "", "_unit"];
|
||||||
|
|
||||||
|
if (local _unit) then {
|
||||||
|
_unit setDir getDir _vehicle;
|
||||||
|
};
|
||||||
|
}] call CBA_fnc_addClassEventHandler;
|
||||||
|
|
||||||
ADDON = true;
|
ADDON = true;
|
||||||
|
@ -18,5 +18,8 @@ class CfgPatches {
|
|||||||
#include "CfgVehicles.hpp"
|
#include "CfgVehicles.hpp"
|
||||||
#include "CfgWeapons.hpp"
|
#include "CfgWeapons.hpp"
|
||||||
#include "CfgMoves.hpp"
|
#include "CfgMoves.hpp"
|
||||||
|
#include "CfgOpticsEffect.hpp"
|
||||||
|
|
||||||
#include "RscInGameUI.hpp"
|
class CBA_PIPItems {
|
||||||
|
GVAR(enable) = "-";
|
||||||
|
};
|
||||||
|
BIN
addons/spottingscope/data/ace_spottingscope_reticle_a1_ca.paa
Normal file
BIN
addons/spottingscope/data/ace_spottingscope_reticle_a1_ca.paa
Normal file
Binary file not shown.
Binary file not shown.
BIN
addons/spottingscope/data/ace_spottingscope_reticle_a2_ca.paa
Normal file
BIN
addons/spottingscope/data/ace_spottingscope_reticle_a2_ca.paa
Normal file
Binary file not shown.
Binary file not shown.
BIN
addons/spottingscope/data/ace_spottingscope_reticle_a3_ca.paa
Normal file
BIN
addons/spottingscope/data/ace_spottingscope_reticle_a3_ca.paa
Normal file
Binary file not shown.
Binary file not shown.
BIN
addons/spottingscope/data/ace_spottingscope_reticle_a4_ca.paa
Normal file
BIN
addons/spottingscope/data/ace_spottingscope_reticle_a4_ca.paa
Normal file
Binary file not shown.
Binary file not shown.
BIN
addons/spottingscope/data/ace_spottingscope_reticle_a5_ca.paa
Normal file
BIN
addons/spottingscope/data/ace_spottingscope_reticle_a5_ca.paa
Normal file
Binary file not shown.
Binary file not shown.
BIN
addons/spottingscope/data/ace_spottingscope_reticle_b1_ca.paa
Normal file
BIN
addons/spottingscope/data/ace_spottingscope_reticle_b1_ca.paa
Normal file
Binary file not shown.
BIN
addons/spottingscope/data/ace_spottingscope_reticle_b2_ca.paa
Normal file
BIN
addons/spottingscope/data/ace_spottingscope_reticle_b2_ca.paa
Normal file
Binary file not shown.
BIN
addons/spottingscope/data/ace_spottingscope_reticle_b3_ca.paa
Normal file
BIN
addons/spottingscope/data/ace_spottingscope_reticle_b3_ca.paa
Normal file
Binary file not shown.
BIN
addons/spottingscope/data/ace_spottingscope_reticle_b4_ca.paa
Normal file
BIN
addons/spottingscope/data/ace_spottingscope_reticle_b4_ca.paa
Normal file
Binary file not shown.
BIN
addons/spottingscope/data/ace_spottingscope_reticle_b5_ca.paa
Normal file
BIN
addons/spottingscope/data/ace_spottingscope_reticle_b5_ca.paa
Normal file
Binary file not shown.
@ -1,47 +0,0 @@
|
|||||||
#include "script_component.hpp"
|
|
||||||
/*
|
|
||||||
* Author: commy2
|
|
||||||
* Animate scripted reticle of spotting scope.
|
|
||||||
*
|
|
||||||
* Arguments:
|
|
||||||
* 0: Reticles RSC info display <DISPLAY>
|
|
||||||
*
|
|
||||||
* Return Value:
|
|
||||||
* None
|
|
||||||
*
|
|
||||||
* Example:
|
|
||||||
* [DISPLAY] call ace_spottingscope_fnc_animateReticle
|
|
||||||
*
|
|
||||||
* Public: No
|
|
||||||
*/
|
|
||||||
|
|
||||||
disableSerialization;
|
|
||||||
|
|
||||||
params ["_display"];
|
|
||||||
uinamespace setVariable [QGVAR(dlgSpottingScope), _display];
|
|
||||||
|
|
||||||
private _ctrlReticle = _display displayCtrl IDC_RETICLE;
|
|
||||||
private _ctrlBody = _display displayCtrl IDC_BODY;
|
|
||||||
private _ctrlBlackLeft = _display displayCtrl IDC_BLACK_LEFT;
|
|
||||||
private _ctrlBlackRight = _display displayCtrl IDC_BLACK_RIGHT;
|
|
||||||
|
|
||||||
// check if optics are used
|
|
||||||
// hide all controls otherwise
|
|
||||||
private _isUsingOptic = ctrlShown (_display displayCtrl 154);
|
|
||||||
|
|
||||||
_ctrlReticle ctrlShow _isUsingOptic;
|
|
||||||
_ctrlBody ctrlShow _isUsingOptic;
|
|
||||||
_ctrlBlackLeft ctrlShow _isUsingOptic;
|
|
||||||
_ctrlBlackRight ctrlShow _isUsingOptic;
|
|
||||||
|
|
||||||
// animate reticle
|
|
||||||
private _zoom = ([] call EFUNC(common,getZoom)) * MAGIC_SCOPE_NUMBER;
|
|
||||||
|
|
||||||
_ctrlReticle ctrlSetPosition [
|
|
||||||
POS_X_BASE(_zoom),
|
|
||||||
POS_Y_BASE(_zoom),
|
|
||||||
POS_W_BASE(_zoom),
|
|
||||||
POS_H_BASE(_zoom)
|
|
||||||
];
|
|
||||||
|
|
||||||
_ctrlReticle ctrlCommit 0;
|
|
Binary file not shown.
@ -16,14 +16,6 @@
|
|||||||
|
|
||||||
#include "\z\ace\addons\main\script_macros.hpp"
|
#include "\z\ace\addons\main\script_macros.hpp"
|
||||||
|
|
||||||
#define IDC_RETICLE 10000
|
|
||||||
#define IDC_BODY 10001
|
|
||||||
#define IDC_BLACK_LEFT 10002
|
|
||||||
#define IDC_BLACK_RIGHT 10003
|
|
||||||
|
|
||||||
#define MAGIC_SCOPE_NUMBER 0.0235
|
|
||||||
//#define MAGIC_SCOPE_NUMBER (uiNamespace getVariable ['magic', 1])
|
|
||||||
|
|
||||||
#define POS_X_BASE(size) safezoneX + 0.5 * safezoneW - 0.5 * (size) / (getResolution select 5)
|
#define POS_X_BASE(size) safezoneX + 0.5 * safezoneW - 0.5 * (size) / (getResolution select 5)
|
||||||
#define POS_Y_BASE(size) safezoneY + 0.5 * safezoneH - 0.5 * (size) / (getResolution select 5) * 4/3
|
#define POS_Y_BASE(size) safezoneY + 0.5 * safezoneH - 0.5 * (size) / (getResolution select 5) * 4/3
|
||||||
#define POS_W_BASE(size) (size) / (getResolution select 5)
|
#define POS_W_BASE(size) (size) / (getResolution select 5)
|
||||||
|
Loading…
Reference in New Issue
Block a user