Merge branch 'master' into tools-cleanup

This commit is contained in:
KoffeinFlummi 2015-04-09 13:37:19 +02:00
commit 3a871eed58
152 changed files with 2450 additions and 3982 deletions

View File

@ -1,25 +0,0 @@
// TMR: Optics initialization and functions
// (C) 2013 Ryan Schultz. See LICENSE.
// Request a resource layer from the game engine.
AGM_Optics_scopeRSC = ["AGM_Optics_Scope"] call BIS_fnc_rscLayer;
// Set global variables
AGM_Optics_inScope = false; // Is the scope up?
AGM_Optics_currentOptic = ""; // What optic is attached right now?
0 = 0 spawn {
waituntil {!isNull (findDisplay 46)};
[] call AGM_Optics_fnc_initScope;
// PiP technique by BadBenson
AGM_Optics_Camera = "camera" camCreate (positioncameratoworld [0,0,0]);
AGM_Optics_Camera camSetFov 0.7;
AGM_Optics_Camera camSetTarget player;
AGM_Optics_Camera camCommit 1;
"agm_optics_rendertarget0" setPiPEffect [2, 1.0, 1.0, 1.0, 0.0, [0.0, 1.0, 0.0, 0.25], [1.0, 0.0, 1.0, 1.0], [0.199, 0.587, 0.114, 0.0]];
AGM_Optics_Camera cameraEffect ["INTERNAL", "BACK","agm_optics_rendertarget0"];
waitUntil {[] call AGM_Optics_fnc_mainLoop; False};
};

View File

@ -1,454 +0,0 @@
class CfgPatches {
class AGM_Optics {
units[] = {};
weapons[] = {};
requiredVersion = 0.60;
requiredAddons[] = {AGM_Core};
version = 0.1;
author[] = {"Taosenai"};
authorUrl = "http://www.ryanschultz.org/tmr/";
};
};
class CfgFunctions {
class AGM_Optics {
class AGM_Optics {
file = "AGM_Optics\functions";
class firedEH;
class hideScope;
class initScope;
class mainLoop;
};
};
};
class Extended_PostInit_EventHandlers {
class AGM_Optics {
clientInit = "call compile preProcessFileLineNumbers '\AGM_Optics\clientInit.sqf'";
};
};
class Extended_FiredBIS_EventHandlers {
class CAManBase {
class AGM_Optics {
clientFiredBIS = "_this call AGM_Optics_fnc_firedEH;";
};
};
};
class CfgOpticsEffect {
class AGM_OpticsRadBlur1 {
type = "radialblur";
params[] = {0.015, 0, 0.14, 0.2};
priority = 950;
};
};
class CfgWeapons {
class ItemCore;
class InventoryItem_Base_F;
class InventoryMuzzleItem_Base_F;
class InventoryOpticsItem_Base_F;
class optic_Hamr : ItemCore {
displayName = "HAMR 4x";
descriptionShort = "High Accuracy Multi-Range Optic<br />Magnification: 4x<br />Reticle: CM-RW 6.5mm";
scope = 2;
weaponInfoType = "AGM_RscWeapon";
AGM_Optics_enhanced = 1;
AGM_Optics_reticle = "\AGM_Optics\data\hamr\hamr-reticle65_ca.paa";
AGM_Optics_reticleIllum = "\AGM_Optics\data\hamr\hamr-reticle65Illum_ca.paa";
AGM_Optics_body = "\AGM_Optics\data\hamr\hamr-body_ca.paa";
AGM_Optics_bodyNight = "\AGM_Optics\data\hamr\hamr-bodyNight_ca.paa";
model = "\A3\weapons_f\acc\acco_hamr_F";
class ItemInfo : InventoryOpticsItem_Base_F {
mass = 4;
optics = 1;
optictype = 1;
rmbhint = "HAMR";
modeloptics = "\AGM_Optics\agm_optics_pip.p3d";
class OpticsModes {
class Hamr2Collimator {
AGM_Optics_enhanced = 0;
opticsID = 1;
useModelOptics = 0;
opticsppeffects[] = {};
opticsFlare = 0;
opticsDisablePeripherialVision = 0;
opticsZoomMin = 0.375;
opticsZoomMax = 1;
opticsZoomInit = 0.75;
memoryPointCamera = "eye";
visionMode[] = {};
distanceZoomMin = 300;
distanceZoomMax = 300;
};
class Hamr2Scope {
cameradir = "";
distanceZoomMin = 300;
distanceZoomMax = 300;
memorypointcamera = "opticView";
opticsdisableperipherialvision = 0;
opticsdisplayname = "IHAMR";
opticsflare = 1;
opticsid = 2;
opticsppeffects[] = {"OpticsCHAbera2", "OpticsBlur1", "AGM_OpticsRadBlur1"};
opticszoominit = 0.0872664626;
opticszoommax = 0.0872664626;
opticszoommin = 0.0872664626;
discretefov[] = {0.0872664626};
discreteinitindex = 0;
usemodeloptics = 1;
modeloptics = "\AGM_Optics\agm_optics_pip.p3d";
visionmode[] = {"Normal", "NVG"};
};
};
};
};
class optic_Arco : ItemCore {
descriptionshort = "Advanced Rifle Combat Optic<br />Magnification: 4x<br />Reticle: SpecterDR 6.5mm";
displayname = "ARCO 4x";
picture = "\A3\weapons_F\Data\UI\gear_acco_Arco_CA.paa";
scope = 2;
weaponInfoType = "AGM_RscWeapon";
model = "\A3\weapons_f\acc\acco_Arco_F";
AGM_Optics_enhanced = 1;
AGM_Optics_reticle = "\AGM_Optics\data\arco\arco-reticle65_ca.paa";
AGM_Optics_reticleIllum = "\AGM_Optics\data\arco\arco-reticle65Illum_ca.paa";
AGM_Optics_body = "\AGM_Optics\data\arco\arco-body_ca.paa";
AGM_Optics_bodyNight = "\AGM_Optics\data\arco\arco-bodyNight_ca.paa";
class ItemInfo: InventoryOpticsItem_Base_F {
mass = 4;
optics = 1;
optictype = 1;
rmbhint = "ARCO";
class OpticsModes {
class ARCO2collimator {
AGM_Optics_enhanced = 0;
cameradir = "";
distancezoommax = 300;
distancezoommin = 300;
memorypointcamera = "eye";
opticsdisableperipherialvision = 0;
opticsdisplayname = "CQB";
opticsflare = 0;
opticsid = 1;
opticsppeffects[] = {};
opticszoominit = 0.75;
opticszoommax = 1.1;
opticszoommin = 0.375;
usemodeloptics = 0;
visionmode[] = {};
};
class ARCO2scope: ARCO2collimator {
cameradir = "";
distanceZoomMin = 300;
distanceZoomMax = 300;
memorypointcamera = "opticView";
opticsdisableperipherialvision = 0;
opticsdisplayname = "ARCO";
opticsflare = 1;
opticsid = 2;
opticsppeffects[] = {"OpticsCHAbera2", "OpticsBlur1", "AGM_OpticsRadBlur1"};
opticszoominit = 0.0872664626; // 0.0872664626 rad = 5 degrees
opticszoommax = 0.0872664626; // SpecterDR 4x is 6 degrees
opticszoommin = 0.0872664626; // Scope graphic in game covers 1 degree
discretefov[] = {0.0872664626};
discreteinitindex = 0;
usemodeloptics = 1;
modeloptics = "\AGM_Optics\data\AGM_Optics_reticle90.p3d";
visionmode[] = {"Normal"};
};
};
};
};
class optic_MRCO : ItemCore {
displayName = "MRCO 1x/4x";
descriptionShort = "Medium Range Combat Optic<br />Magnification: 1x/4x<br />Reticle: Pitbull Gen II 5.56mm";
scope = 2;
weaponInfoType = "AGM_RscWeapon";
AGM_Optics_enhanced = 1;
AGM_Optics_reticle = "\AGM_Optics\data\mrco\mrco-reticle556_ca.paa";
AGM_Optics_reticleIllum = "\AGM_Optics\data\mrco\mrco-reticle556Illum_ca.paa";
AGM_Optics_body = "\AGM_Optics\data\mrco\mrco-body_ca.paa";
AGM_Optics_bodyNight = "\AGM_Optics\data\mrco\mrco-bodyNight_ca.paa";
class ItemInfo : InventoryOpticsItem_Base_F {
opticType = 1;
mass = 4;
optics = 1;
modelOptics = "\A3\Weapons_f_beta\acc\reticle_MRCO_F";
class OpticsModes {
class MRCOcq {
AGM_Optics_enhanced = 0;
opticsID = 1;
useModelOptics = 0;
opticsPPEffects[] = {};
opticsFlare = 0;
opticsDisablePeripherialVision = 0;
opticsZoomMin = 0.375;
opticsZoomMax = 1;
opticsZoomInit = 0.75;
memoryPointCamera = "eye";
visionMode[] = {};
distanceZoomMin = 100;
distanceZoomMax = 100;
};
class MRCOscope {
cameradir = "";
distanceZoomMin = 300;
distanceZoomMax = 300;
memorypointcamera = "eye";
opticsdisableperipherialvision = 0;
opticsdisplayname = "MRCO";
opticsflare = 1;
opticsid = 2;
opticsppeffects[] = {"OpticsCHAbera2", "OpticsBlur2", "AGM_OpticsRadBlur1"};
opticszoominit = 0.0872664626;
opticszoommax = 0.0872664626;
opticszoommin = 0.0872664626;
discretefov[] = {0.0872664626};
discreteinitindex = 0;
usemodeloptics = 1;
modeloptics = "\AGM_Optics\data\AGM_Optics_reticle90.p3d";
visionmode[] = {"Normal"};
};
};
};
};
class optic_Nightstalker : ItemCore {
class ItemInfo: InventoryOpticsItem_Base_F {
class OpticsModes {
class NCTALKEP {};
class Iron : NCTALKEP {
opticsppeffects[] = {}; // Fix Arma 3 bug
};
};
};
};
class optic_SOS: ItemCore {
class ItemInfo: InventoryOpticsItem_Base_F {
modelOptics = "\AGM_Optics\agm_optics_pip.p3d";
class OpticsModes {
class Snip {
visionMode[] = {"Normal","TI","NVG"};
thermalMode[] = {5,6};
opticsPPEffects[] = {"OpticsCHAbera1","radblur"};
modelOptics[] = {"\AGM_Optics\agm_optics_pip.p3d","\AGM_Optics\agm_optics_pip.p3d"};
};
};
};
};
class optic_DMS : ItemCore {
class ItemInfo: InventoryOpticsItem_Base_F {
class OpticsModes {
class Snip {};
class Iron : Snip {
opticsppeffects[] = {}; // Fix Arma 3 bug
};
};
};
};
class optic_LRPS : ItemCore {
descriptionshort = "Nightforce NXS Riflescope<br />Magnification: 5.5-22x";
displayname = "NXS 5.5-22x";
weaponinfotype = "AGM_RscWeapon";
AGM_Optics_enhanced = 1;
AGM_Optics_reticle = "\AGM_Optics\data\sos\sos-reticleMLR_ca.paa";
AGM_Optics_reticleIllum = "\AGM_Optics\data\sos\sos-reticleMLRIllum_ca.paa";
AGM_Optics_body = "\AGM_Optics\data\sos\sos-body_ca.paa";
AGM_Optics_bodyNight = "\AGM_Optics\data\sos\sos-bodyNight_ca.paa";
class ItemInfo: InventoryOpticsItem_Base_F {
modeloptics = "\AGM_Optics\data\AGM_Optics_reticle90.p3d";
weaponinfotype = "RscWeaponRangeZeroingFOV";
opticType = 2; // Sniper optics
class OpticsModes {
// Based on Nightforce NXS 5.5-22 scope
class Snip {
cameradir = "";
discretedistance[] = {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300};
discretedistanceinitindex = 0;
discreteinitindex = 0;
distancezoommax = 2300;
distancezoommin = 100;
memorypointcamera = "opticView";
modeloptics = "\AGM_Optics\data\AGM_Optics_reticle90.p3d";
opticsdisableperipherialvision = 1;
opticsdisplayname = "SOS";
opticsflare = 1;
opticsid = 1;
opticsppeffects[] = {"OpticsCHAbera1", "OpticsBlur1", "AGM_OpticsRadBlur1"};
// How to determine opticszoom
// First do the basic math based on the listed FOV of the scope to
// get a baseline FOV
// 0.1 meter at 100 meters = 1 mrad
//
// 5.5x FOV -- 5.3 m at 100 m = 53 mrad
// = 0.053 rad = 3.037 deg FOV
// 22x FOV -- 1.4 m at 100m = 14 mrad
// = 0.014 rad = 0.802 deg
// The FOV you give the engine is based on a rather larger scope outline, so we
// have to do this extra work ourselves.
// At 1680x1050
// The width of a TMR optic viewfield is 864px
// The engine viewport width (which is what the below FOV is based on) is 980
// (864/980) = (FOV to give engine / true FOV of optic)
// 864/980 * 0.053 = 0.04673
// 864/980 * 0.014 = 0.01234
// Measured experimentally, these values seem quite right.
// Certainly they're close enough after you account for pixel density, etc.
opticszoominit = 0.01234;
opticszoommax = 0.04673;
opticszoommin = 0.01234;
discretefov[] = {};
usemodeloptics = 1;
visionmode[] = {"Normal"};
};
};
};
};
class optic_Yorris : ItemCore {
descriptionshort = "Burris FastFire II Red Dot Sight<br />Magnification: 1x";
displayname = "FastFire II";
};
class optic_MRD : ItemCore {
descriptionshort = "Eotech MRDS Red Dot Sight<br />Magnification: 1x";
displayname = "MRDS";
};
class optic_Holosight : ItemCore {
descriptionshort = "Eotech XPS3 Holographic Sight<br />Magnification: 1x";
displayname = "XPS3 Holo";
};
};
class RscOpticsText;
class RscOpticsValue;
class RscInGameUI {
class RscUnitInfo;
class RscWeaponZeroing;
class AGM_RscWeapon : RscWeaponZeroing {
idd = -1;
controls[] = {"CA_Zeroing", "CA_FOVMode"};
onLoad ="with uiNameSpace do { AGM_OpticsIGUI = _this select 0 }";
class CA_FOVMode : RscOpticsValue {
idc = 154;
style = 2;
colorText[] = {0, 0, 0, 0};
x = 0;
y = 0;
w = 0;
h = 0;
};
};
};
class RscTitles {
class AGM_Optics_Scope {
idd = -1;
onLoad = "with uiNameSpace do { AGM_Optics_Scope = _this select 0 };";
onUnload = "";
movingEnable = 1;
duration = 10000;
controls[] = {"Reticle", "ReticleNight", "BodyNight", "Body"};
class Reticle {
colorBackground[] = {0,0,0, 0};
colorText[] = {1,1,1, 1};
fade = 0;
font = "PuristaMedium";
h = SafeZoneH;
idc = 1;
lineSpacing = 1.0;
movingEnable = 1;
size = 0;
sizeEx = 1;
style = 48;
text = "";
type = 0;
w = SafeZoneWAbs / ((getResolution select 0) / (getResolution select 1));
x = (SafeZoneXAbs + SafeZoneWAbs/2 - (SafeZoneWAbs / ((getResolution select 0) / (getResolution select 1)))/2);
y = SafeZoneY;
};
class ReticleNight : Reticle {
idc = 2;
text = "";
};
class Body : Reticle {
idc = 6;
text = "";
x = (SafeZoneXAbs + SafeZoneWAbs/2 - (SafeZoneWAbs / ((getResolution select 0) / (getResolution select 1))));
y = SafeZoneY - (SafeZoneH/2);
w = SafeZoneWAbs / ((getResolution select 0) / (getResolution select 1)) * 2;
h = SafeZoneH * 2;
};
class BodyNight : Body {
idc = 5;
text = "";
};
};
};
class PreloadTextures {
class CfgWeapons {
class optic_hamr {
AGM_Optics_body= "*";
AGM_Optics_bodyNight = "*";
AGM_Optics_reticle = "*";
AGM_Optics_reticleIllum = "*";
};
class optic_arco {
AGM_Optics_body= "*";
AGM_Optics_bodyNight = "*";
AGM_Optics_reticle = "*";
AGM_Optics_reticleIllum = "*";
};
class optic_mrco {
AGM_Optics_body= "*";
AGM_Optics_bodyNight = "*";
AGM_Optics_reticle = "*";
AGM_Optics_reticleIllum = "*";
};
class optic_LRPS {
AGM_Optics_body= "*";
AGM_Optics_bodyNight = "*";
AGM_Optics_reticle = "*";
AGM_Optics_reticleIllum = "*";
};
};
};

View File

@ -1,149 +0,0 @@
/*
* Original Author: Taosenai
* Adapted By: KoffeinFlummi
*
* Animates the scope when firing.
*
* Arguments:
* 0: Unit
* 1: Weapon
* 2: Muzzle
* 3: Mode
* 4: Ammo
* 5: Magazine
* 6: Projectile
*
* Return Value:
* None
*/
if (_this select 0 != AGM_player) exitwith {}; // Sanity check
0 = _this spawn {
disableSerialization;
_weaponType = _this select 1;
_config = configFile >> "CfgWeapons" >> _weaponType;
_scope = uiNameSpace getVariable "AGM_Optics_Scope";
// @todo
_recoilMulti = getNumber (_config >> "tmr_smallarms_recoil_shakeMultiplier"); // Will be 0 if undefined
if (_recoilMulti == 0) then {
_recoilMulti = 1;
};
if (_recoilMulti > 2.6) then {
_recoilMulti = 2.6; // Don't get too high
};
// Reduce the reticle movement as the player drops into lower, supported stances.
_detectStance = (player selectionPosition "Neck" select 2);
if (_detectStance < 1.3) then {
_recoilMulti = _recoilMulti - 0.10;
};
if (_detectStance < 0.7) then {
_recoilMulti = _recoilMulti - 0.20;
};
// Reduce reticle movement if the player is rested (tmr_autorest).
if (player getVariable ["tmr_autorest_rested", false]) then {
_recoilMulti = _recoilMulti - 0.20;
};
// Reduce reticle movement if the player is deployed (tmr_autorest).
if (player getVariable ["tmr_autorest_deployed", false]) then {
_recoilMulti = _recoilMulti - 0.30;
};
_recoilMulti = 1;
// @endtodo
// Constants which determine how the scope recoils
_recoilScope = 0.03 * _recoilMulti + random 0.0015;
_recoilRing = 0.03 * _recoilMulti + random 0.0015;
_randomScopeShiftX = 0.005 * _recoilMulti - random 0.011;
_randomReticleShiftX = 0.0036 * _recoilMulti + random 0.0045; // Always tend up and right;
_randomReticleShiftY = -0.0046 * _recoilMulti - random 0.0055;
/////////
// Center everything
// getResolution select 4 should return the aspect ratio, but it's totally wrong
// for triple head displays. We'll compute it manually.
_aspectRatio = (getResolution select 0) / (getResolution select 1);
_reticleX = (SafeZoneXAbs + SafeZoneWAbs/2 - (SafeZoneWAbs / _aspectRatio)/2);
_reticleY = SafeZoneY;
_reticleW = SafeZoneWAbs / _aspectRatio;
_reticleH = SafeZoneH;
// Reticle
(_scope displayCtrl 1) ctrlSetPosition [_reticleX, _reticleY, _reticleW, _reticleH];
// Reticle night (illum)
(_scope displayCtrl 2) ctrlSetPosition [_reticleX, _reticleY, _reticleW, _reticleH];
_bodyX = (SafeZoneXAbs + SafeZoneWAbs/2 - (SafeZoneWAbs / _aspectRatio));
_bodyY = SafeZoneY - (SafeZoneH/2);
_bodyW = SafeZoneWAbs / _aspectRatio * 2;
_bodyH = SafeZoneH * 2;
// Body night
(_scope displayCtrl 5) ctrlSetPosition [_bodyX, _bodyY, _bodyW, _bodyH];
// Body
(_scope displayCtrl 6) ctrlSetPosition [_bodyX, _bodyY, _bodyW, _bodyH];
_centerDelay = 0.01;
(_scope displayCtrl 1) ctrlCommit _centerDelay;
(_scope displayCtrl 2) ctrlCommit _centerDelay;
(_scope displayCtrl 5) ctrlCommit _centerDelay;
(_scope displayCtrl 6) ctrlCommit _centerDelay;
/////////
// Create and commit recoil effect
// Move reticle
(_scope displayCtrl 1) ctrlSetPosition [_reticleX - (_recoilScope/2) + _randomReticleShiftX, _reticleY - (_recoilScope/2) + _randomReticleShiftY, _reticleW + _recoilScope, _reticleH + _recoilScope];
(_scope displayCtrl 2) ctrlSetPosition [_reticleX - (_recoilScope/2) + _randomReticleShiftX, _reticleY - (_recoilScope/2) + _randomReticleShiftY, _reticleW + _recoilScope, _reticleH + _recoilScope];
// Move body
(_scope displayCtrl 5) ctrlSetPosition [_bodyX - (_recoilScope/2) + _randomScopeShiftX, _bodyY - (_recoilScope/2), _bodyW + _recoilScope, _bodyH + _recoilScope];
(_scope displayCtrl 6) ctrlSetPosition [_bodyX - (_recoilScope/2) + _randomScopeShiftX, _bodyY - (_recoilScope/2), _bodyW + _recoilScope, _bodyH + _recoilScope];
_recoilDelay = 0.036;
_fa = false;
_cwm = currentWeaponMode player;
if (_cwm == "FullAuto" || _cwm == "manual" || _cwm == "Burst") then {
_recoilDelay = getNumber (_config >> _cwm >> "reloadTime")/2.2;
_fa = true;
};
(_scope displayCtrl 1) ctrlCommit _recoilDelay;
(_scope displayCtrl 2) ctrlCommit _recoilDelay;
(_scope displayCtrl 5) ctrlCommit _recoilDelay;
(_scope displayCtrl 6) ctrlCommit _recoilDelay;
//////////////
waituntil {sleep 0.01; ctrlCommitted (_scope displayCtrl 6)};
//////////////
//////
// Bring them all back
(_scope displayCtrl 1) ctrlSetPosition [_reticleX, _reticleY, _reticleW, _reticleH];
(_scope displayCtrl 2) ctrlSetPosition [_reticleX, _reticleY, _reticleW, _reticleH];
(_scope displayCtrl 5) ctrlSetPosition [_bodyX, _bodyY, _bodyW, _bodyH];
(_scope displayCtrl 6) ctrlSetPosition [_bodyX, _bodyY, _bodyW, _bodyH];
_recenterDelay = 0.09;
if (_fa) then {
_recenterDelay = getNumber (_config >> _cwm >> "reloadTime")/2.2;
};
(_scope displayCtrl 1) ctrlCommit _recenterDelay;
(_scope displayCtrl 2) ctrlCommit _recenterDelay;
(_scope displayCtrl 5) ctrlCommit _recenterDelay;
(_scope displayCtrl 6) ctrlCommit _recenterDelay;
};

View File

@ -1,19 +0,0 @@
/*
* Original Author: Taosenai
* Adapted By: KoffeinFlummi
*
* Hides the scope.
*
*/
private ["_scope"];
((uiNameSpace getVariable "AGM_Optics_Scope") displayCtrl 1) ctrlSetTextColor [1,1,1,0];
((uiNameSpace getVariable "AGM_Optics_Scope") displayCtrl 2) ctrlSetTextColor [1,1,1,0];
((uiNameSpace getVariable "AGM_Optics_Scope") displayCtrl 5) ctrlSetTextColor [1,1,1,0];
((uiNameSpace getVariable "AGM_Optics_Scope") displayCtrl 6) ctrlSetTextColor [1,1,1,0];
((uiNameSpace getVariable "AGM_Optics_Scope") displayCtrl 1) ctrlCommit 0;
((uiNameSpace getVariable "AGM_Optics_Scope") displayCtrl 2) ctrlCommit 0;
((uiNameSpace getVariable "AGM_Optics_Scope") displayCtrl 5) ctrlCommit 0;
((uiNameSpace getVariable "AGM_Optics_Scope") displayCtrl 6) ctrlCommit 0;

View File

@ -1,25 +0,0 @@
/*
* Original Author: Taosenai
* Adapted By: KoffeinFlummi
*
* Initializes the scope resources.
*
*/
private ["_display"];
// Make sure we only cutRsc when the resource isn't already available
if (isNil {uiNameSpace getVariable "AGM_Optics_Scope"} or {isNull (uiNameSpace getVariable "AGM_Optics_Scope")}) exitWith {
AGM_Optics_scopeRSC cutRsc ["AGM_Optics_Scope","PLAIN",0];
((uiNameSpace getVariable "AGM_Optics_Scope") displayCtrl 1) ctrlSetTextColor [1,1,1,0];
((uiNameSpace getVariable "AGM_Optics_Scope") displayCtrl 2) ctrlSetTextColor [1,1,1,0];
((uiNameSpace getVariable "AGM_Optics_Scope") displayCtrl 5) ctrlSetTextColor [1,1,1,0];
((uiNameSpace getVariable "AGM_Optics_Scope") displayCtrl 6) ctrlSetTextColor [1,1,1,0];
((uiNameSpace getVariable "AGM_Optics_Scope") displayCtrl 1) ctrlCommit 0;
((uiNameSpace getVariable "AGM_Optics_Scope") displayCtrl 2) ctrlCommit 0;
((uiNameSpace getVariable "AGM_Optics_Scope") displayCtrl 5) ctrlCommit 0;
((uiNameSpace getVariable "AGM_Optics_Scope") displayCtrl 6) ctrlCommit 0;
True
};
False

View File

@ -1,94 +0,0 @@
/*
* Original Author: Taosenai
* Adapted By: KoffeinFlummi
*
* Monitors the RscInGameUI and displays the overlays when needed.
*
* Arguments:
* None
*
* Return Value:
* None
*/
if !(cameraOn == AGM_player && {alive AGM_player} && {!visibleMap} && {ctrlShown ((uinamespace getVariable "AGM_OpticsIGUI") displayCtrl 154)}) exitWith {
// Failed the state check, hide the scope if it's up
if (AGM_Optics_inScope) then {
// Hide the scope
AGM_Optics_inScope = false;
AGM_Optics_inScope_FOV = ([] call cba_fnc_getFOV) select 0;
[] call AGM_Optics_fnc_hideScope;
};
};
AGM_Optics_Camera setposATL (positioncameratoworld [0,0,0.4]);
AGM_Optics_Camera camPrepareTarget (positioncameratoworld [0,0,50]);
AGM_Optics_Camera camCommitPrepared 0;
if (cameraView == "Gunner") then {
AGM_Optics_Camera camsetFOV 0.7;
AGM_Optics_Camera camcommit 0;
} else {
AGM_Optics_Camera camsetFOV 0.01;
AGM_Optics_Camera camcommit 0;
};
private ["_optic", "_scope"];
disableSerialization;
// Get the name of the attached optic
_optic = (primaryWeaponItems AGM_player) select 2;
_scope = uiNameSpace getVariable "AGM_Optics_Scope";
// Init the scope (if needed)
[] call AGM_Optics_fnc_initScope;
// Check if the optic has changed since we last drew it
_doUpdateAllLayers = false;
if (AGM_Optics_currentOptic != _optic) then {
AGM_Optics_currentOptic = _optic;
_doUpdateAllLayers = true;
};
// Check if Splendid Camera, unit switch, etc. has blanked out our displays for no good reason (grrr)
if (ctrlText (_scope displayCtrl 1) == "") then {
_doUpdateAllLayers = true;
};
// Draw the correct layers (don't show them)
if (_doUpdateAllLayers) then {
(_scope displayCtrl 1) ctrlSetText getText (configFile >> "CfgWeapons" >> _optic >> "AGM_Optics_reticle");
(_scope displayCtrl 2) ctrlSetText getText (configFile >> "CfgWeapons" >> _optic >> "AGM_Optics_reticleIllum");
(_scope displayCtrl 5) ctrlSetText getText (configFile >> "CfgWeapons" >> _optic >> "AGM_Optics_bodyNight");
(_scope displayCtrl 6) ctrlSetText getText (configFile >> "CfgWeapons" >> _optic >> "AGM_Optics_body");
};
// Stop processing if already in the scope view and FOV hasn't changed
if (AGM_Optics_inScope) exitwith {};
// Mark that we're in enhanced scope view
AGM_Optics_inScope = true;
// Calculate lighting
_lighting = sunOrMoon; // 1 is day, 0 is night
_nightOpacity = 1;
_dayOpacity = (0 max moonIntensity * (1 - (0 max overcast)))/5;
if (_lighting == 1) then {
_nightOpacity = 0;
_dayOpacity = 1;
};
// Apply lighting and make layers visible
(_scope displayCtrl 1) ctrlSetTextColor [1,1,1,1];
(_scope displayCtrl 2) ctrlSetTextColor [1,1,1,_nightOpacity];
(_scope displayCtrl 5) ctrlSetTextColor [1,1,1,_nightOpacity];
(_scope displayCtrl 6) ctrlSetTextColor [1,1,1,_dayOpacity];
(_scope displayCtrl 1) ctrlCommit 0;
(_scope displayCtrl 2) ctrlCommit 0;
(_scope displayCtrl 5) ctrlCommit 0;
(_scope displayCtrl 6) ctrlCommit 0;

Binary file not shown.

View File

@ -100,7 +100,7 @@ class CfgVehicles {
transportMaxWeapons = 9001;
transportMaxMagazines = 9001;
transportMaxItems = 9001;
maximumload = 2000;
maximumload = 9001;
class TransportWeapons {};
class TransportMagazines {};

View File

@ -1,23 +1,107 @@
class RscInGameUI {
class RscUnitInfo;
class RscUnitInfo {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""; [ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Any')])] call FUNC(localEvent););
};
class RscUnitInfoNoHUD {
onLoad = QUOTE([ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Any')])] call FUNC(localEvent););
};
class RscUnitInfoSoldier: RscUnitInfo {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""; uiNamespace setVariable [ARR_2('ACE_dlgSoldier', _this select 0)]; [ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Soldier')])] call FUNC(localEvent););
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""; uiNamespace setVariable [ARR_2('ACE_dlgSoldier', _this select 0)]; [ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Soldier')])] call FUNC(localEvent););
};
class RscUnitInfoTank: RscUnitInfo {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""; uiNamespace setVariable [ARR_2('ACE_dlgVehicle', _this select 0)]; [ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Vehicle')])] call FUNC(localEvent););
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""; uiNamespace setVariable [ARR_2('ACE_dlgVehicle', _this select 0)]; [ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Vehicle')])] call FUNC(localEvent););
};
class RscUnitInfoAir: RscUnitInfo {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""; uiNamespace setVariable [ARR_2('ACE_dlgAircraft', _this select 0)]; [ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Aircraft')])] call FUNC(localEvent););
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""; uiNamespace setVariable [ARR_2('ACE_dlgAircraft', _this select 0)]; [ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Aircraft')])] call FUNC(localEvent););
};
class RscUnitInfo_AH64D_gunner {
onLoad = QUOTE(uiNamespace setVariable [ARR_2('ACE_dlgAircraft', _this select 0)]; [ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Aircraft')])] call FUNC(localEvent););
};
class RscUnitInfoUAV {
onLoad = QUOTE(uiNamespace setVariable [ARR_2('ACE_dlgUAV', _this select 0)]; [ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'UAV')])] call FUNC(localEvent););
};
class RscUnitInfoSubmarine: RscUnitInfo {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""; uiNamespace setVariable [ARR_2('ACE_dlgSubmarine', _this select 0)]; [ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Submarine')])] call FUNC(localEvent););
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""; uiNamespace setVariable [ARR_2('ACE_dlgSubmarine', _this select 0)]; [ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Submarine')])] call FUNC(localEvent););
};
class RscUnitInfoShip: RscUnitInfo {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""; uiNamespace setVariable [ARR_2('ACE_dlgShip', _this select 0)]; [ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Ship')])] call FUNC(localEvent););
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""; uiNamespace setVariable [ARR_2('ACE_dlgShip', _this select 0)]; [ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Ship')])] call FUNC(localEvent););
};
class RscWeaponEmpty {
onLoad = QUOTE([ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Any')])] call FUNC(localEvent););
};
class RscWeaponRangeFinder {
onLoad = QUOTE([ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Any')])] call FUNC(localEvent););
};
class RscWeaponRangeArtillery {
onLoad = QUOTE(uiNamespace setVariable [ARR_2('ACE_dlgArtillery', _this select 0)]; [ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Artillery')])] call FUNC(localEvent););
};
class RscWeaponRangeArtilleryAuto {
onLoad = QUOTE(uiNamespace setVariable [ARR_2('ACE_dlgArtillery', _this select 0)]; [ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Artillery')])] call FUNC(localEvent););
};
class RscWeaponRangeFinderPAS13 {
onLoad = QUOTE([ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Any')])] call FUNC(localEvent););
};
class RscOptics_LaserDesignator {
onLoad = QUOTE([ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Any')])] call FUNC(localEvent););
};
class RscWeaponRangeFinderMAAWS {
onLoad = QUOTE([ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Any')])] call FUNC(localEvent););
};
class RscWeaponRangeFinderAbramsCom {
onLoad = QUOTE([ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Any')])] call FUNC(localEvent););
};
class RscWeaponRangeFinderAbramsGun {
onLoad = QUOTE([ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Any')])] call FUNC(localEvent););
};
class RscWeaponRangeFinderStrykerMGSGun {
onLoad = QUOTE([ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Any')])] call FUNC(localEvent););
};
class RscOptics_strider_commander {
onLoad = QUOTE([ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Any')])] call FUNC(localEvent););
};
class RscOptics_titan {
onLoad = QUOTE([ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Any')])] call FUNC(localEvent););
};
class RscOptics_punisher {
onLoad = QUOTE([ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Any')])] call FUNC(localEvent););
};
class RscOptics_SDV_periscope {
onLoad = QUOTE([ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Any')])] call FUNC(localEvent););
};
class RscUnitInfoParachute: RscUnitInfo {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""; uiNamespace setVariable [ARR_2('ACE_dlgParachute', _this select 0)]; [ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Parachute')])] call FUNC(localEvent););
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""; uiNamespace setVariable [ARR_2('ACE_dlgParachute', _this select 0)]; [ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Parachute')])] call FUNC(localEvent););
};
class RscUnitVehicle {
onLoad = QUOTE([ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Any')])] call FUNC(localEvent););
};
class RscOptics_LaserDesignator_02 {
onLoad = QUOTE([ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Any')])] call FUNC(localEvent););
};
};
@ -25,6 +109,20 @@ class RscDisplayInventory {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscDisplayInventory"",'IGUI')] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""; [ARR_2('inventoryDisplayLoaded', _this)] call FUNC(localEvent););
};
class RscDisplayChannel {
onLoad = QUOTE(_this call FUNC(onLoadRscDisplayChannel));
// map
class RscDisplayMainMap {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscDiary"",'GUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgMap', _this select 0)]; [ARR_2('mapDisplayLoaded', [ARR_2(_this select 0, 'Ingame')])] call FUNC(localEvent););
};
class RscDisplayGetReady: RscDisplayMainMap {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscDiary"",'GUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgMap', _this select 0)]; [ARR_2('mapDisplayLoaded', [ARR_2(_this select 0, 'Briefing')])] call FUNC(localEvent););
};
class RscDisplayServerGetReady: RscDisplayGetReady {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscDiary"",'GUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgMap', _this select 0)]; [ARR_2('mapDisplayLoaded', [ARR_2(_this select 0, 'ServerBriefing')])] call FUNC(localEvent););
};
class RscDisplayClientGetReady: RscDisplayGetReady {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscDiary"",'GUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgMap', _this select 0)]; [ARR_2('mapDisplayLoaded', [ARR_2(_this select 0, 'ClientBriefing')])] call FUNC(localEvent););
};

View File

@ -126,7 +126,6 @@ PREP(numberToDigits);
PREP(numberToDigitsString);
PREP(numberToString);
PREP(onAnswerRequest);
PREP(onLoadRscDisplayChannel);
PREP(owned);
PREP(player);
PREP(playerSide);
@ -273,10 +272,10 @@ ACE_player = player;
if (hasInterface) then {
// PFH to update the ACE_player variable
[{
if !(ACE_player isEqualTo (missionNamespace getVariable ["BIS_fnc_moduleRemoteControl_unit", player])) then {
if !(ACE_player isEqualTo (call FUNC(player))) then {
_oldPlayer = ACE_player;
ACE_player = missionNamespace getVariable ["BIS_fnc_moduleRemoteControl_unit", player];
ACE_player = call FUNC(player);
uiNamespace setVariable ["ACE_player", ACE_player];
// Raise ACE event

View File

@ -7,11 +7,20 @@
* NONE.
*
* Return value:
* The current channel. Can be "group", "side", "global", "command", "vehicle" or "direct" (String)
* The current channel. Can be "group", "side", "global", "command", "vehicle", "direct" or "custom_X" (String)
*/
#include "script_component.hpp"
#define CHANNELS ["group", "side", "global", "command", "vehicle", "direct"]
#define CHANNELS_LOCALIZED [localize "str_channel_group", localize "str_channel_side", localize "str_channel_global", localize "str_channel_command", localize "str_channel_vehicle", localize "str_channel_direct"]
#define CHANNELS ["global", "side", "command", "group", "vehicle", "direct"]
#define CHANNELS_LOCALIZED [localize "str_channel_global", localize "str_channel_side", localize "str_channel_command", localize "str_channel_group", localize "str_channel_vehicle", localize "str_channel_direct"]
CHANNELS select (CHANNELS_LOCALIZED find (uiNamespace getVariable [QGVAR(currentChannel), ""])) max 0
private "_currentChannel";
_currentChannel = currentChannel;
if (_currentChannel < count CHANNELS) then {
_currentChannel = CHANNELS select _currentChannel;
} else {
_currentChannel = format ["custom_%1", _currentChannel - count CHANNELS - 1];
};
_currentChannel

View File

@ -1,5 +1,5 @@
/*
* Author: bux578
* Author: bux578, commy2
*
* Returns an array containing all items of a given unit
*
@ -7,32 +7,45 @@
* 0: Unit (Object)
*
* Return value:
* Array with all the gear
* Array with all the gear, format:
* 0: headgear (String)
* 1: goggles (String)
* 2,3: uniform (String, Array)
* 4,5: vest (String, Array)
* 6,7: backpack (String, Array)
* 8-10: rifle (String, Array, Array)
* 11-13: launcher (String, Array, Array)
* 14-16: pistol (String, Array, Array)
* 17: map, compass, watch, etc. (Array)
* 18: binocluar (String)
*
*/
#include "script_component.hpp"
EXPLODE_1_PVT(_this,_unit);
if (isNull _unit) exitWith {[]};
if (isNull _unit) exitWith {[
"",
"",
"", [],
"", [],
"", [],
"", ["","","",""], [],
"", ["","","",""], [],
"", ["","","",""], [],
[],
""
]};
[
(headgear _unit),
(goggles _unit),
(uniform _unit),
(uniformItems _unit),
(vest _unit),
(vestItems _unit),
(backpack _unit),
(backpackItems _unit),
(primaryWeapon _unit),
(primaryWeaponItems _unit),
(primaryWeaponMagazine _unit),
(secondaryWeapon _unit),
(secondaryWeaponItems _unit),
(secondaryWeaponMagazine _unit),
(handgunWeapon _unit),
(handgunItems _unit),
(handgunMagazine _unit),
(assignedItems _unit),
(binocular _unit)
]
headgear _unit,
goggles _unit,
uniform _unit, uniformItems _unit,
vest _unit, vestItems _unit,
backpack _unit, backpackItems _unit,
primaryWeapon _unit, primaryWeaponItems _unit, primaryWeaponMagazine _unit,
secondaryWeapon _unit, secondaryWeaponItems _unit, secondaryWeaponMagazine _unit,
handgunWeapon _unit, handgunItems _unit, handgunMagazine _unit,
assignedItems _unit,
binocular _unit
]

View File

@ -63,7 +63,7 @@ if (_lightSource isKindOf "CAManBase") then {
_lightLevel = (linearConversion [0, 30, _distance, 1, 0, true]) * (linearConversion [_innerAngle, _outerAngle, _angle, 1, 0, true]);
} else {
// handle any object, strcutures, cars, tanks, etc.
// handle any object, strcutures, cars, tanks, etc. @todo campfires, burning vehicles
private "_lights";
_lights = [_lightSource] call FUNC(getTurnedOnLights);

View File

@ -1,29 +0,0 @@
/*
* Author: Pabst Mirror, commy2
* When the RscDisplayChannel is loaded, this will constantly uiNamespace variable ace_common_currentChannel
* with the raw localized text of CA_Channel (IDC=101). Only runs while the display is open.
*
* Arguments:
* 0: The RscDisplayChannel Display <DISPLAY>
*
* Return Value:
* Nothing
*
* Example:
* onLoad = QUOTE(_this call FUNC(onLoadRscDisplayChannel));
*
* Public: No
*/
#include "script_component.hpp"
uiNamespace setVariable [QGVAR(currentChannelControl), ((_this select 0) displayCtrl 101)];
["ACE_currentChannel", "onEachFrame", {
if (isNull (uiNamespace getVariable [QGVAR(currentChannelControl), controlNull])) then {
["ACE_currentChannel", "onEachFrame"] call BIS_fnc_removeStackedEventHandler;
} else {
private "_localizedChannelText";
_localizedChannelText = ctrlText (uiNamespace getVariable [QGVAR(currentChannelControl), controlNull]);
uiNamespace setVariable [QGVAR(currentChannel), _localizedChannelText];
};
}] call BIS_fnc_addStackedEventhandler;

View File

@ -84,7 +84,7 @@ if (!isServer) then {
_index = _files find _x;
if (_index == -1) then {
_missingAddons pushBack _x;
if (_x != "ace_serverconfig") then {_missingAddons pushBack _x;};
} else {
_clientVersion = _versions select _index;

View File

@ -17,22 +17,18 @@ class RscMapControl;
class RscInGameUI {
class RscUnitInfo;
class RscUnitInfo_AH64D_gunner {
onLoad = "";
controls[] = {"CA_Distance","ACE_CA_Distance"};
MACRO_RANGEFINDER
};
class RscWeaponRangeFinder {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0];";
controls[] = {"CA_Distance","ACE_CA_Distance"};
MACRO_RANGEFINDER
};
class RscWeaponRangeFinderPAS13 {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0];";
MACRO_RANGEFINDER
};
class RscOptics_Rangefinder: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -40,7 +36,6 @@ class RscInGameUI {
};
};
class RscOptics_LaserDesignator {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0];";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -48,7 +43,6 @@ class RscInGameUI {
};
};
class RscWeaponRangeFinderMAAWS {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0];";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -56,22 +50,18 @@ class RscInGameUI {
};
};
class RscWeaponRangeFinderAbramsCom {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0];";
controls[] = {"CA_Distance","ACE_CA_Distance"};
MACRO_RANGEFINDER
};
class RscWeaponRangeFinderAbramsGun {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0];";
controls[] = {"CA_Distance","ACE_CA_Distance"};
MACRO_RANGEFINDER
};
class RscWeaponRangeFinderStrykerMGSGun {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0];";
controls[] = {"CA_Distance","ACE_CA_Distance"};
MACRO_RANGEFINDER
};
class RscOptics_crows: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -79,7 +69,6 @@ class RscInGameUI {
};
};
class RscOptics_strider_commander {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0];";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -88,12 +77,10 @@ class RscInGameUI {
};
class RscWeaponRangeZeroing: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
controls[] = {"CA_Zeroing", "CA_DistanceText", "CA_Distance","ACE_CA_Distance", "ACE_Rangehelper"};
MACRO_RANGEFINDER
};
class RscOptics_sos: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -101,7 +88,6 @@ class RscInGameUI {
};
};
class RscOptics_nightstalker: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -109,7 +95,6 @@ class RscInGameUI {
};
};
class RscOptics_tws: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -117,7 +102,6 @@ class RscInGameUI {
};
};
class RscOptics_punisher {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0];";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -125,7 +109,6 @@ class RscInGameUI {
};
};
class RscOptics_tws_sniper: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -133,7 +116,6 @@ class RscInGameUI {
};
};
class RscOptics_SDV_periscope {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0];";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -141,7 +123,6 @@ class RscInGameUI {
};
};
class RscOptics_Heli_Attack_02_gunner: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -157,7 +138,6 @@ class RscInGameUI {
};
};
class RscOptics_Heli_Attack_01_gunner: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -165,7 +145,6 @@ class RscInGameUI {
};
};
class RscOptics_UAV_gunner: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -173,7 +152,6 @@ class RscInGameUI {
};
};
class RscOptics_UGV_gunner: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -181,7 +159,6 @@ class RscInGameUI {
};
};
class RscOptics_APC_Tracked_01_gunner: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -189,7 +166,6 @@ class RscInGameUI {
};
};
class RscOptics_APC_Tracked_03_gunner: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -197,7 +173,6 @@ class RscInGameUI {
};
};
class RscOptics_APC_Wheeled_01_gunner: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -205,7 +180,6 @@ class RscInGameUI {
};
};
class RscOptics_APC_Wheeled_03_commander: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -213,7 +187,6 @@ class RscInGameUI {
};
};
class RscOptics_APC_Wheeled_03_gunner: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -221,7 +194,6 @@ class RscInGameUI {
};
};
class RscOptics_MBT_01_commander: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -229,7 +201,6 @@ class RscInGameUI {
};
};
class RscOptics_MBT_01_gunner: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -237,7 +208,6 @@ class RscInGameUI {
};
};
class RscOptics_MBT_02_commander: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -245,7 +215,6 @@ class RscInGameUI {
};
};
class RscOptics_MBT_02_gunner: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
@ -253,7 +222,15 @@ class RscInGameUI {
};
};
class RscOptics_MBT_03_gunner: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
};
};
};
// marksmen
class RscOptics_LaserDesignator_02 {
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER

View File

@ -139,14 +139,6 @@ class CfgVehicles {
};*/
};
class Offroad_01_base_F: Car_F {};
class Offroad_01_armed_base_F: Offroad_01_base_F {
/*class Turrets: Turrets {
class M2_Turret: MainTurret {};
};*/
};
class APC_Wheeled_01_base_F: Wheeled_APC_F {
/*class Turrets: Turrets {
class MainTurret: MainTurret {

View File

@ -6,5 +6,12 @@ GVAR(position) = [0,0,0];
#include "initKeybinds.sqf"
["infoDisplayChanged", {
if (!isNull ((_this select 0) displayCtrl 1713151)) then {
uiNamespace setVariable ["ACE_dlgRangefinder", _this select 0];
((_this select 0) displayCtrl 151) ctrlSetTextColor [0,0,0,0];
};
}] call EFUNC(common,addEventHandler);
// Register event for global updates
[QGVAR(forceUpdate), FUNC(onForceUpdate)] call ace_common_fnc_addEventHandler;
[QGVAR(forceUpdate), FUNC(onForceUpdate)] call EFUNC(common,addEventHandler);

View File

@ -32,7 +32,7 @@ GVAR(openedMenuType) = _menuType;
GVAR(useCursorMenu) = (vehicle ACE_player != ACE_player) ||
visibleMap ||
(GVAR(AlwaysUseCursorSelfInteraction) && _menuType == 1);
{(_menuType == 1) && {(isWeaponDeployed ACE_player) || GVAR(AlwaysUseCursorSelfInteraction)}};
if (GVAR(useCursorMenu)) then {
createDialog QGVAR(cursorMenu);
// The dialog sets:

View File

@ -39,14 +39,14 @@ class RscDisplayInventory {
x = X_PART(1);
y = Y_PART(1);
w = W_PART(12);
h = H_PART(22.5);
h = H_PART(22.5); //default 23
};
class CA_PlayerBackground: RscText {
//center player's container: decrease height because of progressbar height decrease
x = X_PART(14.6);
y = Y_PART(2);
w = W_PART(24.4);
h = H_PART(21.5);
h = H_PART(21.5); //default 22
};
class TitleBackground: RscText {
x = X_PART(14.6);
@ -87,25 +87,31 @@ class RscDisplayInventory {
class BackgroundSlotPrimaryMuzzle: BackgroundSlotPrimary {
x = X_PART(26.6);
y = Y_PART(9.1);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class BackgroundSlotPrimaryUnderBarrel: BackgroundSlotPrimary {
x = X_PART(29);
y = Y_PART(9.1);
w = W_PART(2.3);
h = H_PART(2);
};
class BackgroundSlotPrimaryFlashlight: BackgroundSlotPrimary {
x = X_PART(29.6);
y = Y_PART(9.1);
w = W_PART(2.9);
x = X_PART(31.4);
y = Y_PART(9.2); //not sure why different (double check release)
w = W_PART(2.3);
h = H_PART(2);
};
class BackgroundSlotPrimaryOptics: BackgroundSlotPrimary {
x = X_PART(32.6);
x = X_PART(33.8);
y = Y_PART(9.1);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class BackgroundSlotPrimaryMagazine: BackgroundSlotPrimary {
x = X_PART(35.6);
x = X_PART(36.2);
y = Y_PART(9.1);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class BackgroundSlotSecondary: BackgroundSlotPrimary {
@ -117,25 +123,31 @@ class RscDisplayInventory {
class BackgroundSlotSecondaryMuzzle: BackgroundSlotPrimary {
x = X_PART(26.6);
y = Y_PART(14.6);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class BackgroundSlotSecondaryUnderBarrel: BackgroundSlotPrimary {
x = X_PART(29);
y = Y_PART(14.6);
w = W_PART(2.3);
h = H_PART(2);
};
class BackgroundSlotSecondaryFlashlight: BackgroundSlotPrimary {
x = X_PART(29.6);
x = X_PART(31.4);
y = Y_PART(14.6);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class BackgroundSlotSecondaryOptics: BackgroundSlotPrimary {
x = X_PART(32.6);
x = X_PART(33.8);
y = Y_PART(14.6);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class BackgroundSlotSecondaryMagazine: BackgroundSlotPrimary {
x = X_PART(35.6);
x = X_PART(36.2);
y = Y_PART(14.6);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class BackgroundSlotHandgun: BackgroundSlotPrimary {
@ -147,25 +159,31 @@ class RscDisplayInventory {
class BackgroundSlotHandgunMuzzle: BackgroundSlotPrimary {
x = X_PART(26.6);
y = Y_PART(20.1);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class BackgroundSlotHandgunUnderBarrel: BackgroundSlotPrimary {
x = X_PART(29);
y = Y_PART(20.1);
w = W_PART(2.3);
h = H_PART(2);
};
class BackgroundSlotHandgunFlashlight: BackgroundSlotPrimary {
x = X_PART(29.6);
x = X_PART(31.4);
y = Y_PART(20.1);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class BackgroundSlotHandgunOptics: BackgroundSlotPrimary {
x = X_PART(32.6);
x = X_PART(33.8);
y = Y_PART(20.1);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class BackgroundSlotHandgunMagazine: BackgroundSlotPrimary {
x = X_PART(35.6);
x = X_PART(36.2);
y = Y_PART(20.1);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class BackgroundSlotHeadgear: BackgroundSlotPrimary {
@ -263,7 +281,7 @@ class RscDisplayInventory {
x = X_PART(1.5);
y = Y_PART(22.5);
w = W_PART(11);
h = H_PART(0.5);
h = H_PART(0.5); //Default 1
};
class SlotPrimary: GroundTab {
x = X_PART(26.6);
@ -274,31 +292,31 @@ class RscDisplayInventory {
class SlotPrimaryMuzzle: SlotPrimary {
x = X_PART(26.6);
y = Y_PART(9.1);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class SlotPrimaryGrip: SlotPrimary {
w = 0;
h = 0;
x = X_PART(39);
y = Y_PART(9);
class SlotPrimaryUnderBarrel: SlotPrimary {
x = X_PART(29);
y = Y_PART(9.1);
w = W_PART(2.3);
h = H_PART(2);
};
class SlotPrimaryFlashlight: SlotPrimary {
x = X_PART(29.6);
x = X_PART(31.4);
y = Y_PART(9.1);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class SlotPrimaryOptics: SlotPrimary {
x = X_PART(32.6);
x = X_PART(33.8);
y = Y_PART(9.1);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class SlotPrimaryMagazine: SlotPrimary {
x = X_PART(35.6);
x = X_PART(36.2);
y = Y_PART(9.1);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class SlotSecondary: SlotPrimary {
@ -310,31 +328,31 @@ class RscDisplayInventory {
class SlotSecondaryMuzzle: SlotPrimary {
x = X_PART(26.6);
y = Y_PART(14.6);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class SlotSecondaryGrip: SlotPrimary {
w = 0;
h = 0;
x = X_PART(39);
y = Y_PART(14.5);
class SlotSecondaryUnderBarrel: SlotPrimary {
x = X_PART(29);
y = Y_PART(14.59); //Why is this different? (check release)
w = W_PART(2.3);
h = H_PART(2);
};
class SlotSecondaryFlashlight: SlotPrimary {
x = X_PART(29.6);
x = X_PART(31.4);
y = Y_PART(14.6);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class SlotSecondaryOptics: SlotPrimary {
x = X_PART(32.6);
x = X_PART(33.8);
y = Y_PART(14.6);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class SlotSecondaryMagazine: SlotPrimary {
x = X_PART(35.6);
x = X_PART(36.2);
y = Y_PART(14.6);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class SlotHandgun: SlotPrimary {
@ -346,31 +364,31 @@ class RscDisplayInventory {
class SlotHandgunMuzzle: SlotPrimary {
x = X_PART(26.6);
y = Y_PART(20.1);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class SlotHandgunGrip: SlotPrimary {
w = 0;
h = 0;
x = X_PART(39);
y = Y_PART(20);
class SlotHandgunUnderBarrel: SlotPrimary {
x = X_PART(29);
y = Y_PART(20.1);
W = W_PART(2.3);
H = H_PART(2);
};
class SlotHandgunFlashlight: SlotPrimary {
x = X_PART(29.6);
x = X_PART(31.4);
y = Y_PART(20.1);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class SlotHandgunOptics: SlotPrimary {
x = X_PART(32.6);
x = X_PART(33.8);
y = Y_PART(20.1);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class SlotHandgunMagazine: SlotPrimary {
x = X_PART(35.6);
x = X_PART(36.2);
y = Y_PART(20.1);
w = W_PART(2.9);
w = W_PART(2.3);
h = H_PART(2);
};
class SlotHeadgear: SlotPrimary {
@ -492,7 +510,7 @@ class RscDisplayInventory {
x = X_PART(15.1);
y = Y_PART(22.5);
w = W_PART(23.4);
h = H_PART(0.5);
h = H_PART(0.5); //Default 1
};
class ContainerMarker: GroundTab {
x = X_PART(0);

View File

@ -51,6 +51,7 @@ class CfgPatches {
"a3_anims_f_epc",
"a3_anims_f_heli",
"a3_anims_f_kart",
"a3_anims_f_mark_deployment",
"a3_armor_f",
"a3_armor_f_amv",
"a3_armor_f_apc_wheeled_03",
@ -93,6 +94,7 @@ class CfgPatches {
"a3_characters_f_heads",
"a3_characters_f_indep",
"a3_characters_f_kart",
"a3_characters_f_mark",
"a3_characters_f_opfor",
"a3_characters_f_proxies",
"a3_data_f",
@ -108,6 +110,7 @@ class CfgPatches {
"a3_data_f_hook",
"a3_data_f_kart",
"a3_data_f_kart_particleeffects",
"a3_data_f_mark",
"a3_data_f_particleeffects",
"a3_dubbing_radio_f",
"a3_editor_f",
@ -117,6 +120,8 @@ class CfgPatches {
"a3_functions_f_epa",
"a3_functions_f_epc",
"a3_functions_f_heli",
"a3_functions_f_mark",
"a3_functions_f_mp_mark",
"a3_language_f",
"a3_language_f_beta",
"a3_language_f_bootcamp",
@ -127,10 +132,13 @@ class CfgPatches {
"a3_language_f_gamma",
"a3_language_f_heli",
"a3_language_f_kart",
"a3_language_f_mark",
"a3_language_f_mp_mark",
"a3_languagemissions_f",
"a3_languagemissions_f_beta",
"a3_languagemissions_f_gamma",
"a3_languagemissions_f_kart",
"a3_languagemissions_f_mp_mark",
"a3_map_altis",
"a3_map_altis_scenes",
"a3_map_data",
@ -149,6 +157,8 @@ class CfgPatches {
"a3_missions_f_gamma",
"a3_missions_f_heli",
"a3_missions_f_kart",
"a3_missions_f_mark",
"a3_missions_f_mp_mark",
"a3_modules_f",
"a3_modules_f_beta",
"a3_modules_f_beta_firingdrills",
@ -184,8 +194,12 @@ class CfgPatches {
"a3_modules_f_kart",
"a3_modules_f_kart_timetrials",
"a3_modules_f_livefeed",
"a3_modules_f_mark",
"a3_modules_f_mark_firingdrills",
"a3_modules_f_mark_objectives",
"a3_modules_f_marta",
"a3_modules_f_misc",
"a3_modules_f_mp_mark",
"a3_modules_f_multiplayer",
"a3_modules_f_objectmodifiers",
"a3_modules_f_sites",
@ -199,6 +213,7 @@ class CfgPatches {
"a3_music_f_epb",
"a3_music_f_epc",
"a3_music_f_heli",
"a3_music_f_mark",
"a3_plants_f_bush",
"a3_roads_f",
"a3_rocks_f",
@ -244,6 +259,8 @@ class CfgPatches {
"a3_static_f_gamma_aa",
"a3_static_f_gamma_at",
"a3_static_f_gamma_mortar_01",
"a3_static_f_mark_designator_01",
"a3_static_f_mark_designator_02",
"a3_static_f_mortar_01",
"a3_structures_f",
"a3_structures_f_bootcamp_civ_camping",
@ -385,6 +402,13 @@ class CfgPatches {
"a3_structures_f_kart_civ_sportsgrounds",
"a3_structures_f_kart_mil_flags",
"a3_structures_f_kart_signs_companies",
"a3_structures_f_mark_items_military",
"a3_structures_f_mark_items_sport",
"a3_structures_f_mark_mil_flags",
"a3_structures_f_mark_training",
"a3_structures_f_mark_vr_helpers",
"a3_structures_f_mark_vr_shapes",
"a3_structures_f_mark_vr_targets",
"a3_structures_f_mil",
"a3_structures_f_mil_bagbunker",
"a3_structures_f_mil_bagfence",
@ -416,6 +440,7 @@ class CfgPatches {
"a3_supplies_f_heli_cargonets",
"a3_supplies_f_heli_fuel",
"a3_supplies_f_heli_slingload",
"a3_supplies_f_mark",
"a3_uav_f_characters_f_gamma",
"a3_uav_f_weapons_f_gamma_ammoboxes",
"a3_ui_f",
@ -423,6 +448,8 @@ class CfgPatches {
"a3_ui_f_curator",
"a3_ui_f_heli",
"a3_ui_f_kart",
"a3_ui_f_mark",
"a3_ui_f_mp_mark",
"a3_uifonts_f",
"a3_weapons_f",
"a3_weapons_f_aaf",
@ -474,6 +501,28 @@ class CfgPatches {
"a3_weapons_f_longrangerifles_m320",
"a3_weapons_f_machineguns_m200",
"a3_weapons_f_machineguns_zafir",
"a3_weapons_f_mark",
"a3_weapons_f_mark_acc",
"a3_weapons_f_mark_ebr",
"a3_weapons_f_mark_longrangerifles_dmr_01",
"a3_weapons_f_mark_longrangerifles_dmr_02",
"a3_weapons_f_mark_longrangerifles_dmr_03",
"a3_weapons_f_mark_longrangerifles_dmr_04",
"a3_weapons_f_mark_longrangerifles_dmr_05",
"a3_weapons_f_mark_longrangerifles_dmr_06",
"a3_weapons_f_mark_longrangerifles_gm6",
"a3_weapons_f_mark_longrangerifles_gm6_camo",
"a3_weapons_f_mark_longrangerifles_m320",
"a3_weapons_f_mark_longrangerifles_m320_camo",
"a3_weapons_f_mark_machineguns_m200",
"a3_weapons_f_mark_machineguns_mmg_01",
"a3_weapons_f_mark_machineguns_mmg_02",
"a3_weapons_f_mark_machineguns_zafir",
"a3_weapons_f_mark_rifles_khaybar",
"a3_weapons_f_mark_rifles_mk20",
"a3_weapons_f_mark_rifles_mx",
"a3_weapons_f_mark_rifles_sdar",
"a3_weapons_f_mark_rifles_trg20",
"a3_weapons_f_nato",
"a3_weapons_f_pistols_acpc2",
"a3_weapons_f_pistols_p07",

View File

@ -36,6 +36,15 @@ class CfgVehicles {
class No { name = "No"; value = 0; default = 1;};
};
};
class MapShowCursorCoordinates {
displayName = "Show cursor coordinates?";
description = "Show the grid coordinates on the mouse pointer?";
typeName = "BOOL";
class values {
class Yes { name = "Yes"; value = 1; };
class No { name = "No"; value = 0; default = 1;};
};
};
};
};

View File

@ -8,6 +8,7 @@ PREP(blueForceTrackingUpdate);
PREP(determineMapLight);
PREP(determineZoom);
PREP(moduleMap);
PREP(onDrawMap);
PREP(updateMapEffects);
ADDON = true;

View File

@ -48,6 +48,10 @@ class ACE_Settings {
value = 0;
typeName = "BOOL";
};
class GVAR(mapShowCursorCoordinates) {
value = 0;
typeName = "BOOL";
};
};
#include "CfgEventHandlers.hpp"
@ -85,7 +89,8 @@ class RscMapControl {
class RscDisplayMainMap {
// Tweak map styling
class controlsBackground {
class CA_Map : RscMapControl {
class CA_Map: RscMapControl {
onDraw = QUOTE([ctrlParent (_this select 0)] call DFUNC(onDrawMap));
#include "MapTweaks.hpp"
};
};
@ -143,6 +148,13 @@ class RscDisplayDiary {
// BRIEFING SCREEN
class RscDisplayGetReady: RscDisplayMainMap {
// Tweak map styling
class controlsBackground {
class CA_Map: RscMapControl {
onDraw = QUOTE([ctrlParent (_this select 0)] call DFUNC(onDrawMap));
//#include "MapTweaks.hpp" @todo Shouldn't this apply to briefing too?
};
};
// get rid of the "center to player position" - button (as it works even on elite)
class controls {
class TopRight: RscControlsGroup {

View File

@ -66,10 +66,13 @@ if (_lightLevel > 0.95) exitWith {
[false, [0.5,0.5,0.5,0]]
};
private "_vehicle";
_vehicle = vehicle _unit;
// Do not obscure the map if the player is on a enclosed vehicle (assume internal illumination)
if (vehicle _unit != _unit) then {
if (_vehicle != _unit) then {
// Player is in a vehicle
if ((vehicle _unit) isKindOf "Tank") then {
if (isTurnedOut _unit && {_vehicle isKindOf "Tank" || {_vehicle isKindOf "Wheeled_APC"}}) then {
_isEnclosed = true;
};
};
@ -81,32 +84,10 @@ if (_isEnclosed) exitWith {
// Player is not in a vehicle
TRACE_1("Player is on foot or in an open vehicle","");
// Check if player is near a campfires, lights or vehicles with lights on - 15m
_nearObjects = [nearestObjects [_unit, ["All"], 15], {(inflamed _this) || (isLightOn _this)}] call EFUNC(common,filter);
if (count (_nearObjects) > 0) then {
_light = _nearObjects select 0;
_ll = (1 - (((((_unit distance _light) - 5)/10) max 0) min 1));
if (_ll > _lightLevel) then {
_lightLevel = _ll;
TRACE_1("player near campfire","");
};
};
// Gun with light
_nearObjects = [nearestObjects [_unit, ["CAManBase"], 10], { _this isFlashlightOn (currentWeapon _this)}] call EFUNC(common,filter);
if (count (_nearObjects) > 0) then {
_light = (_nearObjects select 0);
_flashlight = (_light weaponAccessories currentMuzzle _light) select 1;
// Check if it's a day laser
if (_flashlight == "ACE_acc_pointer_red") exitWith {};
if (_flashlight == "ACE_acc_pointer_green") exitWith {};
_lightLevel = _lightLevel max (1 - (((((_unit distance _light) - 2)/8) max 0) min 1));
TRACE_1("Using gun light","");
};
// Check if player is near a campfires, streetlamps, units with flashlights, vehicles with lights on, etc. - 40m
{
_lightLevel = _lightLevel max ([_unit, _x] call EFUNC(common,lightIntensityFromObject));
} forEach nearestObjects [_unit, ["All"], 40];
// @todo: Illumination flares (timed)

View File

@ -15,8 +15,9 @@ _activated = _this select 2;
if !(_activated) exitWith {};
[_logic, QGVAR(mapIllumination), "MapIllumination"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(mapShake), "MapShake" ] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(mapLimitZoom), "MapLimitZoom" ] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(mapIllumination), "MapIllumination" ] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(mapShake), "MapShake" ] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(mapLimitZoom), "MapLimitZoom" ] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(mapShowCursorCoordinates), "MapShowCursorCoordinates"] call EFUNC(common,readSettingFromModule);
diag_log text "[ACE]: Interaction Module Initialized.";

View File

@ -0,0 +1,4 @@
// by commy2
#include "script_component.hpp"
((_this select 0) displayCtrl 1016) ctrlShow GVAR(mapShowCursorCoordinates);

View File

@ -1,26 +0,0 @@
// MARKERS
class CfgMarkers {
class ACE_MapToolFixed {
name = "MapToolFixed";
icon = PATHTOF(data\mapToolFixed.paa);
scope = 0;
color[] = {1,1,1,1};
size = 32;
};
class ACE_MapToolRotatingNormal {
name = "MapToolRotating";
icon = PATHTOF(data\mapToolRotatingNormal.paa);
scope = 0;
color[] = {1,1,1,1};
size = 32;
};
class ACE_MapToolRotatingSmall {
name = "MapToolRotating";
icon = PATHTOF(data\mapToolRotatingSmall.paa);
scope = 0;
color[] = {1,1,1,1};
size = 32;
};
};

View File

@ -31,7 +31,7 @@ class RscTitles {
};
class heading: RscText{
idc = 913590;
x = X_gps + W_gps * 0.25;
x = X_gps + W_gps * 0.225;
y = Y_gps + H_gps * 0.12;
w = W_gps * 0.2;
h = H_gps * 0.16;
@ -46,7 +46,7 @@ class RscTitles {
};
class altitude: RscText{
idc = 913591;
x = X_gps + W_gps * 0.55;
x = X_gps + W_gps * 0.575;
y = Y_gps + H_gps * 0.12;
w = W_gps * 0.2;
h = H_gps * 0.16;
@ -61,9 +61,9 @@ class RscTitles {
};
class coordinates: RscText{
idc = 913592;
x = X_gps + W_gps * 0.2;
x = X_gps + W_gps * 0.15;
y = Y_gps + H_gps * 0.33;
w = W_gps * 0.6;
w = W_gps * 0.7;
h = H_gps * 0.35;
style = ST_CENTER;
text = "012.3 115.1";

Binary file not shown.

View File

@ -28,7 +28,7 @@ GVAR(drawing_controls) = [36732, 36733, 36734, 36735, 36736, 36737];
((finddisplay _d) displayctrl 51) ctrlAddEventHandler ["MouseMoving", {_this call FUNC(handleMouseMove);}];
((finddisplay _d) displayctrl 51) ctrlAddEventHandler ["MouseButtonDown", {[1, _this] call FUNC(handleMouseButton);}];
((finddisplay _d) displayctrl 51) ctrlAddEventHandler ["MouseButtonUp", {[0, _this] call FUNC(handleMouseButton)}];
((finddisplay _d) displayctrl 51) ctrlAddEventHandler ["Draw", {[] call FUNC(updateMapToolMarkers);}];
((finddisplay _d) displayctrl 51) ctrlAddEventHandler ["Draw", {_this call FUNC(updateMapToolMarkers);}];
(finddisplay _d) displayAddEventHandler ["KeyDown", {_this call FUNC(handleKeyDown);}];
};

View File

@ -32,7 +32,6 @@ class RscEdit;
#include "MapGpsUI.hpp"
#include "CfgEventHandlers.hpp"
#include "CfgMarkers.hpp"
#include "CfgVehicles.hpp"
#include "CfgWeapons.hpp"

View File

@ -1,18 +1,18 @@
/*
* Author: esteldunedain
*
* Add the line marker
*
* Argument:
* 0: Marker Name (string)
* 1: Marker start pos (array)
* 2: Marker end pos (array)
* 3: Color index (Number)
* Arguments:
* 0: Marker Name <STRING>
* 1: Marker start pos <ARRAY>
* 2: Marker end pos <ARRAY>
* 3: Color index <NUMBER>
*
* Return value:
* Return
* None
*
* Public: No
*/
#include "script_component.hpp"
_name = _this select 0;
@ -27,16 +27,16 @@ _name setMarkerColorLocal _color;
_name setMarkerPosLocal (_startPos vectorAdd (_difPos vectorMultiply 0.5));
_mag = vectorMagnitude _difPos;
if (_mag > 0) then {
_name setMarkerSizeLocal [5, _mag / 2];
_name setMarkerDirLocal (180 + (_difPos select 0) atan2 (_difPos select 1) mod 360);
_name setMarkerSizeLocal [5, _mag / 2];
_name setMarkerDirLocal (180 + (_difPos select 0) atan2 (_difPos select 1) mod 360);
} else {
_name setMarkerSizeLocal [5, 5];
_name setMarkerDirLocal 0;
_name setMarkerSizeLocal [5, 5];
_name setMarkerDirLocal 0;
};
GVAR(drawing_lineMarkers) pushBack (+_this);
if (isServer && GVAR(drawing_syncMarkers)) then {
GVAR(drawing_serverLineMarkers) pushBack (+_this);
publicVariable QGVAR(drawing_serverLineMarkers);
GVAR(drawing_serverLineMarkers) pushBack (+_this);
publicVariable QGVAR(drawing_serverLineMarkers);
};

View File

@ -1,15 +1,15 @@
/*
* Author: esteldunedain
*
* Returns the equivalent of 100m in screen coordinates
*
* Argument:
* Arguments:
* None
*
* Return value:
* Return
* No
*
* Public: No
*/
#include "script_component.hpp"
_pos = ((finddisplay 12) displayctrl 51) ctrlMapScreenToWorld [0.5, 0.5];

View File

@ -1,5 +1,15 @@
// by esteldunedain
/*
* Author: esteldunedain
* canDraw
*
* Arguments:
* None
*
* Return value:
* <BOOL>
*
* Public: No
*/
#include "script_component.hpp"
(missionNameSpace getVariable [QGVAR(drawing_syncMarkers), true] && {GVAR(EveryoneCanDrawOnBriefing)}) ||

View File

@ -1,5 +1,15 @@
// by esteldunedain
/*
* Author: esteldunedain
* canUseMapGPS
*
* Arguments:
* None
*
* Return value:
* <BOOL>
*
* Public: No
*/
#include "script_component.hpp"
visibleMap &&

View File

@ -1,5 +1,15 @@
// by esteldunedain
/*
* Author: esteldunedain
* canUseMapTools
*
* Arguments:
* None
*
* Return value:
* <BOOL>
*
* Public: No
*/
#include "script_component.hpp"
visibleMap &&

View File

@ -1,19 +1,19 @@
/*
* Author: esteldunedain
*
* Cancel the drawing of the current line marker
*
* Argument:
* Arguments:
* None
*
* Return value:
* Nothing
* None
*
* Public: No
*/
#include "script_component.hpp"
GVAR(drawing_isDrawing) = false;
if (count GVAR(drawing_tempLineMarker) > 0) then {
deleteMarkerLocal (GVAR(drawing_tempLineMarker) select 0);
deleteMarkerLocal (GVAR(drawing_tempLineMarker) select 0);
};
GVAR(drawing_tempLineMarker) = [];

View File

@ -1,23 +1,23 @@
/*
* Author: esteldunedain
*
* Copy recieved markers to map
*
* Argument:
* 0: Array of markers to copy (Array)
* Arguments:
* 0: Array of markers to copy <ARRAY>
*
* Return value:
* Return
* None
*
* Public: No
*/
#include "script_component.hpp"
PARAMS_1(_lineMarkers);
{
_marker = _x;
//Add marker if we don't already have it
if (({(_x select 0) == (_marker select 0)} count GVAR(drawing_lineMarkers)) == 0) then {
_marker call FUNC(addLineMarker);
};
_marker = _x;
//Add marker if we don't already have it
if (({(_x select 0) == (_marker select 0)} count GVAR(drawing_lineMarkers)) == 0) then {
_marker call FUNC(addLineMarker);
};
} forEach _lineMarkers;

View File

@ -1,11 +1,10 @@
/*
* Author: esteldunedain
*
* Send request to remote player
*
* Argument:
* 0: Player (Unit)
* 0: Target player (Unit)
* Arguments:
* 0: Player <OBJECT>
* 0: Target player <OBJECT>
*
* Code Chain:
* START: copyMapStart: triggers event drawing_requestMarkers on remote

View File

@ -1,9 +1,8 @@
/*
* Author: esteldunedain
*
* Handle key down on map.
*
* Argument:
* Arguments:
* 0: Display (display)
* 1: Key code (number)
* 2: Shift Key (boolean)
@ -30,45 +29,45 @@ _handled = false;
// If pressed Esc while drawing
if (_code == DIK_ESCAPE) exitWith {
if (GVAR(drawing_isDrawing)) then {
call FUNC(cancelDrawing);
_handled = true;
};
if (GVAR(drawing_isDrawing)) then {
call FUNC(cancelDrawing);
_handled = true;
};
};
if (_code == DIK_DELETE) exitWith {
if (GVAR(drawing_isDrawing)) then {
call FUNC(cancelDrawing);
_handled = true;
} else {
// Check if a line marker needs to be deleted
{
_relPos = GVAR(mousePosition) vectorDiff (_x select 1);
_diffVector = (_x select 2) vectorDiff (_x select 1);
_magDiffVector = vectorMagnitude _diffVector;
if (_magDiffVector == 0) then {
_diffVector = [10,0,0];
_magDiffVector = vectorMagnitude _diffVector;
};
_diffVector = _diffVector vectorMultiply (1/_magDiffVector);
// Projection of the relative position over the longitudinal axis
_lambdaLong = _diffVector vectorDotProduct _relPos;
// Projection of the relative position over the trasversal axis
_lambdaTrasAbs = vectorMagnitude (_relPos vectorDiff (_diffVector vectorMultiply _lambdaLong));
if (_lambdaLong >= 0 && _lambdaLong <= _magDiffVector && _lambdaTrasAbs <= 5) exitWith {
// Delete the line marker
if (GVAR(drawing_syncMarkers)) then {
["drawing_removeLineMarker", [_x select 0]] call EFUNC(common,globalEvent);
} else {
deleteMarkerLocal (_x select 0);
GVAR(drawing_lineMarkers) = GVAR(drawing_lineMarkers) - [_x];
};
if (GVAR(drawing_isDrawing)) then {
call FUNC(cancelDrawing);
_handled = true;
};
} forEach GVAR(drawing_lineMarkers);
};
} else {
// Check if a line marker needs to be deleted
{
_relPos = GVAR(mousePosition) vectorDiff (_x select 1);
_diffVector = (_x select 2) vectorDiff (_x select 1);
_magDiffVector = vectorMagnitude _diffVector;
if (_magDiffVector == 0) then {
_diffVector = [10,0,0];
_magDiffVector = vectorMagnitude _diffVector;
};
_diffVector = _diffVector vectorMultiply (1/_magDiffVector);
// Projection of the relative position over the longitudinal axis
_lambdaLong = _diffVector vectorDotProduct _relPos;
// Projection of the relative position over the trasversal axis
_lambdaTrasAbs = vectorMagnitude (_relPos vectorDiff (_diffVector vectorMultiply _lambdaLong));
if (_lambdaLong >= 0 && _lambdaLong <= _magDiffVector && _lambdaTrasAbs <= 5) exitWith {
// Delete the line marker
if (GVAR(drawing_syncMarkers)) then {
["drawing_removeLineMarker", [_x select 0]] call EFUNC(common,globalEvent);
} else {
deleteMarkerLocal (_x select 0);
GVAR(drawing_lineMarkers) = GVAR(drawing_lineMarkers) - [_x];
};
_handled = true;
};
} forEach GVAR(drawing_lineMarkers);
};
};
_handled

View File

@ -31,72 +31,72 @@ if (_button != 0) exitWith {};
// If releasing
if (_dir != 1 && (GVAR(mapTool_isDragging) or GVAR(mapTool_isRotating))) exitWith {
GVAR(mapTool_isDragging) = false;
GVAR(mapTool_isRotating) = false;
_handled = true;
_handled
GVAR(mapTool_isDragging) = false;
GVAR(mapTool_isRotating) = false;
_handled = true;
_handled
};
// If clicking
if (_dir == 1) exitWith {
if !(call FUNC(canDraw)) exitWith {_handled = false;};
if !(call FUNC(canDraw)) exitWith {_handled = false;};
// Transform mouse screen position to coordinates
_pos = _control ctrlMapScreenToWorld _screenPos;
_pos set [count _pos, 0];
// Transform mouse screen position to coordinates
_pos = _control ctrlMapScreenToWorld _screenPos;
_pos set [count _pos, 0];
if (GVAR(drawing_isDrawing)) exitWith {
// Already drawing -> Add tempLineMarker to permanent list
if (GVAR(drawing_syncMarkers)) then {
deleteMarkerLocal (GVAR(drawing_tempLineMarker) select 0);
// [GVAR(drawing_tempLineMarker), "FUNC(addLineMarker)", 2] call EFUNC(common,execRemoteFnc);
["drawing_addLineMarker", GVAR(drawing_tempLineMarker)] call EFUNC(common,globalEvent);
// Log who drew on the briefing screen
(text format ["[ACE] Server: Player %1 drew on the briefing screen", name player]) call EFUNC(common,serverLog);
} else {
GVAR(drawing_tempLineMarker) call FUNC(updateLineMarker);
GVAR(drawing_lineMarkers) pushBack (+GVAR(drawing_tempLineMarker));
if (GVAR(drawing_isDrawing)) exitWith {
// Already drawing -> Add tempLineMarker to permanent list
if (GVAR(drawing_syncMarkers)) then {
deleteMarkerLocal (GVAR(drawing_tempLineMarker) select 0);
// [GVAR(drawing_tempLineMarker), "FUNC(addLineMarker)", 2] call EFUNC(common,execRemoteFnc);
["drawing_addLineMarker", GVAR(drawing_tempLineMarker)] call EFUNC(common,globalEvent);
// Log who drew on the briefing screen
(text format ["[ACE] Server: Player %1 drew on the briefing screen", name player]) call EFUNC(common,serverLog);
} else {
GVAR(drawing_tempLineMarker) call FUNC(updateLineMarker);
GVAR(drawing_lineMarkers) pushBack (+GVAR(drawing_tempLineMarker));
};
GVAR(drawing_tempLineMarker) = [];
GVAR(drawing_isDrawing) = false;
_handled = true;
};
GVAR(drawing_tempLineMarker) = [];
GVAR(drawing_isDrawing) = false;
_handled = true;
};
if (_altKey) exitWith {
// Start drawing
GVAR(drawing_isDrawing) = true;
// Create tempLineMarker
_gui = format ["%1%2%3%4", random (100), random (100), random (100), random (100)];
GVAR(drawing_tempLineMarker) = [_gui, + _pos, + _pos, GVAR(drawing_drawColor)];
_marker = createMarkerLocal [_gui, [0,0]];
GVAR(drawing_tempLineMarker) call FUNC(updateLineMarker);
_handled = true;
};
GVAR(mapTool_isDragging) = false;
GVAR(mapTool_isRotating) = false;
// If no map tool marker then exit
if (isNil QGVAR(mapTool_markerRotatingFixed)) exitWith {_handled = false;};
// Check if clicking the maptool
if (_pos call FUNC(isInsideMapTool)) exitWith {
// Store data for dragging
GVAR(mapTool_startPos) = + GVAR(mapTool_pos);
GVAR(mapTool_startDragPos) = + _pos;
if (_ctrlKey) then {
// Store data for rotating
GVAR(mapTool_startAngle) = + GVAR(mapTool_angle);
GVAR(mapTool_startDragAngle) = (180 + ((GVAR(mapTool_startDragPos) select 0) - (GVAR(mapTool_startPos) select 0)) atan2 ((GVAR(mapTool_startDragPos) select 1) - (GVAR(mapTool_startPos) select 1)) mod 360);
// Start rotating
GVAR(mapTool_isRotating) = true;
} else {
// Start dragging
GVAR(mapTool_isDragging) = true;
if (_altKey) exitWith {
// Start drawing
GVAR(drawing_isDrawing) = true;
// Create tempLineMarker
_gui = format ["%1%2%3%4", random (100), random (100), random (100), random (100)];
GVAR(drawing_tempLineMarker) = [_gui, + _pos, + _pos, GVAR(drawing_drawColor)];
_marker = createMarkerLocal [_gui, [0,0]];
GVAR(drawing_tempLineMarker) call FUNC(updateLineMarker);
_handled = true;
};
GVAR(mapTool_isDragging) = false;
GVAR(mapTool_isRotating) = false;
// If no map tool marker then exit
if (GVAR(mapTool_Shown) == 0) exitWith {_handled = false;};
// Check if clicking the maptool
if (_pos call FUNC(isInsideMapTool)) exitWith {
// Store data for dragging
GVAR(mapTool_startPos) = + GVAR(mapTool_pos);
GVAR(mapTool_startDragPos) = + _pos;
if (_ctrlKey) then {
// Store data for rotating
GVAR(mapTool_startAngle) = + GVAR(mapTool_angle);
GVAR(mapTool_startDragAngle) = (180 + ((GVAR(mapTool_startDragPos) select 0) - (GVAR(mapTool_startPos) select 0)) atan2 ((GVAR(mapTool_startDragPos) select 1) - (GVAR(mapTool_startPos) select 1)) mod 360);
// Start rotating
GVAR(mapTool_isRotating) = true;
} else {
// Start dragging
GVAR(mapTool_isDragging) = true;
};
_handled = true;
};
_handled = true;
};
};
_handled

View File

@ -22,42 +22,42 @@ GVAR(mousePosition) set [2, 0]; //convert 2d pos to 3d
// If cannot draw then exit
if !(call FUNC(canDraw)) exitWith {
// If was drawing, cancel
if (GVAR(drawing_isDrawing)) then {
call FUNC(cancelDrawing);
};
false
// If was drawing, cancel
if (GVAR(drawing_isDrawing)) then {
call FUNC(cancelDrawing);
};
false
};
// Handle drawing
if (GVAR(drawing_isDrawing)) exitWith {
GVAR(drawing_tempLineMarker) set [2, GVAR(mousePosition)];
GVAR(drawing_tempLineMarker) call FUNC(updateLineMarker);
false
GVAR(drawing_tempLineMarker) set [2, GVAR(mousePosition)];
GVAR(drawing_tempLineMarker) call FUNC(updateLineMarker);
false
};
// Handle Map tools
if (isNil QGVAR(mapTool_markerRotatingFixed)) exitWith {false};
if (GVAR(mapTool_Shown) == 0) exitWith {false};
// Translation
if (GVAR(mapTool_isDragging)) exitWith {
GVAR(mapTool_pos) set [0, (GVAR(mapTool_startPos) select 0) + (GVAR(mousePosition) select 0) - (GVAR(mapTool_startDragPos) select 0)];
GVAR(mapTool_pos) set [1, (GVAR(mapTool_startPos) select 1) + (GVAR(mousePosition) select 1) - (GVAR(mapTool_startDragPos) select 1)];
GVAR(mapTool_pos) set [0, (GVAR(mapTool_startPos) select 0) + (GVAR(mousePosition) select 0) - (GVAR(mapTool_startDragPos) select 0)];
GVAR(mapTool_pos) set [1, (GVAR(mapTool_startPos) select 1) + (GVAR(mousePosition) select 1) - (GVAR(mapTool_startDragPos) select 1)];
// Update the size and rotation of the maptool
[] call FUNC(updateMapToolMarkers);
true
// Update the size and rotation of the maptool
[] call FUNC(updateMapToolMarkers);
true
};
// Rotation
if (GVAR(mapTool_isRotating)) exitWith {
// Get new angle
_angle = (180 + ((GVAR(mousePosition) select 0) - (GVAR(mapTool_startPos) select 0)) atan2 ((GVAR(mousePosition) select 1) - (GVAR(mapTool_startPos) select 1)) mod 360);
GVAR(mapTool_angle) = GVAR(mapTool_startAngle) + _angle - GVAR(mapTool_startDragAngle);
// Get new angle
_angle = (180 + ((GVAR(mousePosition) select 0) - (GVAR(mapTool_startPos) select 0)) atan2 ((GVAR(mousePosition) select 1) - (GVAR(mapTool_startPos) select 1)) mod 360);
GVAR(mapTool_angle) = GVAR(mapTool_startAngle) + _angle - GVAR(mapTool_startDragAngle);
// Update the size and rotation of the maptool
[] call FUNC(updateMapToolMarkers);
true
// Update the size and rotation of the maptool
[] call FUNC(updateMapToolMarkers);
true
};
false

View File

@ -29,16 +29,16 @@ _handled = true;
// ACE_Map_drawColors is never defined
/* if (count GVAR(drawing_tempLineMarker) > 0) then {
ACE_Map_drawColor = if (_dir > 0) then {ACE_Map_drawColor + 1} else {ACE_Map_drawColor - 1};
if (ACE_Map_drawColor >= count ACE_Map_drawColors) then {
ACE_Map_drawColor = if (_dir > 0) then {ACE_Map_drawColor + 1} else {ACE_Map_drawColor - 1};
if (ACE_Map_drawColor >= count ACE_Map_drawColors) then {
ACE_Map_drawColor = ACE_Map_drawColor - count ACE_Map_drawColors;
};
if (ACE_Map_drawColor < 0) then {
};
if (ACE_Map_drawColor < 0) then {
ACE_Map_drawColor = ACE_Map_drawColor + count ACE_Map_drawColors;
};
GVAR(drawing_tempLineMarker) set [3, ACE_Map_drawColor];
GVAR(drawing_tempLineMarker) call ACE_Map_fnc_updateLineMarker;
};
GVAR(drawing_tempLineMarker) set [3, ACE_Map_drawColor];
GVAR(drawing_tempLineMarker) call ACE_Map_fnc_updateLineMarker;
_handled = true;
_handled = true;
}; */
_handled

View File

@ -1,16 +1,14 @@
/*
* Author: esteldunedain
*
* Return true if the position is inside the map marker (to allow dragging).
*
* Argument:
* 0: x Position (in meters)
* 1: y Position (in meters)
* Arguments:
* 0: x Position (in meters) <NUMBER>
* 1: y Position (in meters) <NUMBER>
*
* Return value:
* Boolean
*/
#include "script_component.hpp"
#define TEXTURE_WIDTH_IN_M 6205
@ -18,6 +16,7 @@
#define DIST_TOP_TO_CENTER_PERC 0.65
#define DIST_LEFT_TO_CENTER_PERC 0.30
if (GVAR(mapTool_Shown) == 0) exitWith {false};
_textureWidth = [TEXTURE_WIDTH_IN_M, TEXTURE_WIDTH_IN_M / 2] select (GVAR(mapTool_Shown) - 1);

View File

@ -2,39 +2,32 @@
#include "script_component.hpp"
if (visibleMap) then {
// Show/Hide draw buttons
if ("ACE_MapTools" in items ACE_player) then {
{ ((finddisplay 12) displayctrl _x) ctrlShow true; } forEach GVAR(drawing_controls);
} else {
{ ((finddisplay 12) displayctrl _x) ctrlShow false; } forEach GVAR(drawing_controls);
if (GVAR(drawing_isDrawing)) then {
call FUNC(cancelDrawing);
// Show/Hide draw buttons
if ("ACE_MapTools" in items ACE_player) then {
{ ((finddisplay 12) displayctrl _x) ctrlShow true; } forEach GVAR(drawing_controls);
} else {
{ ((finddisplay 12) displayctrl _x) ctrlShow false; } forEach GVAR(drawing_controls);
if (GVAR(drawing_isDrawing)) then {
call FUNC(cancelDrawing);
};
};
};
};
//When Map is Closed:
if (GVAR(mapVisableLastFrame) && (!visibleMap)) then {
GVAR(mapVisableLastFrame) = false;
// Hide GPS
[false] call FUNC(openMapGps);
// Hide Map tools
deleteMarkerLocal MARKERNAME_MAPTOOL_FIXED;
deleteMarkerLocal MARKERNAME_MAPTOOL_ROTATINGNORMAL;
deleteMarkerLocal MARKERNAME_MAPTOOL_ROTATINGSMALL;
GVAR(mapTool_markerRotatingFixed) = nil;
GVAR(mapTool_markerRotatingNormal) = nil;
GVAR(mapTool_markerRotatingSmall) = nil;
// Cancel drawing
call FUNC(cancelDrawing);
GVAR(mapVisableLastFrame) = false;
// Hide GPS
[false] call FUNC(openMapGps);
// Cancel drawing
call FUNC(cancelDrawing);
};
//When Map is Opened:
if ((!GVAR(mapVisableLastFrame)) && (visibleMap)) then {
//todo: "mapOpened" Event????
GVAR(mapVisableLastFrame) = true;
// Show and update map tools if required
[] call FUNC(updateMapToolMarkers);
// Show GPS if required
[GVAR(mapGpsShow)] call FUNC(openMapGps);
//todo: "mapOpened" Event????
GVAR(mapVisableLastFrame) = true;
// Show and update map tools if required
[] call FUNC(updateMapToolMarkers);
// Show GPS if required
[GVAR(mapGpsShow)] call FUNC(openMapGps);
};

View File

@ -1,25 +1,24 @@
/*
* Author: esteldunedain
*
* Opens or closes the gps on the map screen, showing coordinates
*
* Argument:
* 0: Open GPS? (Boolean)
*
* Return value:
* Nothing
*/
* Author: esteldunedain
* Opens or closes the gps on the map screen, showing coordinates
*
* Arguments:
* 0: Open GPS? <BOOL>
*
* Return value:
* Nothing
*
* Public: No
*/
#include "script_component.hpp"
_shouldOpenGps = _this select 0;
_isOpen = !(isNull (uiNamespace getVariable [QGVAR(ui_mapGpsDisplay), displayNull]));
if (_shouldOpenGps && {"ItemGPS" in assignedItems ACE_player} && {!_isOpen}) then {
("RscACE_MapGps" call BIS_fnc_rscLayer) cutRsc ["RscACE_MapGps","PLAIN"];
("RscACE_MapGps" call BIS_fnc_rscLayer) cutRsc ["RscACE_MapGps","PLAIN"];
[FUNC(openMapGpsUpdate), 0.5, []] call CBA_fnc_addPerFrameHandler; //update bearing/altitude every 0.5 sec (ticktime)
[FUNC(openMapGpsUpdate), 0.5, []] call CBA_fnc_addPerFrameHandler; //update bearing/altitude every 0.5 sec (ticktime)
} else {
("RscACE_MapGps" call BIS_fnc_rscLayer) cutText ["","PLAIN"];
("RscACE_MapGps" call BIS_fnc_rscLayer) cutText ["","PLAIN"];
};

View File

@ -11,8 +11,8 @@ disableSerialization;
_mapGpsDisplay = uiNamespace getVariable [QGVAR(ui_mapGpsDisplay), displayNull];
_ctrl = _mapGpsDisplay displayCtrl 913590;
_ctrl ctrlSetText str(round(getDir player)); //set Heading
_ctrl ctrlSetText str(round(getDir ACE_player)); //set Heading
_ctrl = _mapGpsDisplay displayCtrl 913591;
_ctrl ctrlSetText str(round((getPosASL player) select 2)); //set Altitude
_ctrl ctrlSetText str(round((getPosASL ACE_player) select 2)); //set Altitude
_ctrl = _mapGpsDisplay displayCtrl 913592;
_ctrl ctrlSetText mapGridPosition player; //set grid cords
_ctrl ctrlSetText mapGridPosition ACE_player; //set grid cords

View File

@ -1,10 +1,9 @@
/*
* Author: esteldunedain
*
* Remove the line marker
*
* Argument:
* 0: Marker Name (string)
* Arguments:
* 0: Marker Name <STRING>
*
* Return value:
* Return
@ -12,20 +11,20 @@
#include "script_component.hpp"
_name = _this select 0;
_name = _this select 0;
deleteMarkerLocal _name;
deleteMarkerLocal _name;
{
if ((_x select 0) == _name) exitWith {
GVAR(drawing_lineMarkers) = GVAR(drawing_lineMarkers) - [_x];
};
if ((_x select 0) == _name) exitWith {
GVAR(drawing_lineMarkers) = GVAR(drawing_lineMarkers) - [_x];
};
} forEach GVAR(drawing_lineMarkers);
if (isServer && GVAR(drawing_syncMarkers)) then {
{
if ((_x select 0) == _name) exitWith {
GVAR(drawing_serverLineMarkers) = GVAR(drawing_serverLineMarkers) - [_x];
publicVariable QGVAR(drawing_serverLineMarkers);
};
} forEach GVAR(drawing_serverLineMarkers);
{
if ((_x select 0) == _name) exitWith {
GVAR(drawing_serverLineMarkers) = GVAR(drawing_serverLineMarkers) - [_x];
publicVariable QGVAR(drawing_serverLineMarkers);
};
} forEach GVAR(drawing_serverLineMarkers);
};

View File

@ -1,24 +1,22 @@
/*
* Author: esteldunedain
*
* Updates the line marker position and scale
*
* Argument:
* 0: Marker Name (string)
* 1: Marker start pos (array)
* 2: Marker end pos (array)
* 3: Color index (Number)
* Arguments:
* 0: Marker Name <STRING>
* 1: Marker start pos <ARRAY>
* 2: Marker end pos <ARRAY>
* 3: Color index <NUMBER>
*
* Return value:
* Return
* None
*/
#include "script_component.hpp"
_name = _this select 0;
_startPos = _this select 1;
_difPos = (_this select 2) vectorDiff _startPos ;
_color = _this select 3;
_name = _this select 0;
_startPos = _this select 1;
_difPos = (_this select 2) vectorDiff _startPos ;
_color = _this select 3;
_name setMarkerShapeLocal "RECTANGLE";
_name setMarkerAlphaLocal 1;
@ -26,9 +24,9 @@ _name setMarkerColorLocal GVAR(drawing_drawColor);
_name setMarkerPosLocal (_startPos vectorAdd (_difPos vectorMultiply 0.5));
_mag = vectorMagnitude _difPos;
if (_mag > 0) then {
_name setMarkerSizeLocal [5, _mag / 2];
_name setMarkerDirLocal (180 + (_difPos select 0) atan2 (_difPos select 1) mod 360);
_name setMarkerSizeLocal [5, _mag / 2];
_name setMarkerDirLocal (180 + (_difPos select 0) atan2 (_difPos select 1) mod 360);
} else {
_name setMarkerSizeLocal [5, 5];
_name setMarkerDirLocal 0;
_name setMarkerSizeLocal [5, 5];
_name setMarkerDirLocal 0;
};

View File

@ -1,73 +1,46 @@
/*
* Author: esteldunedain
*
* Update the map tool markers, position, size, rotation and visibility.
*
* Argument:
* None
* Arguments:
* 0: The Map <CONTROL>
*
* Return value:
* Nothing
*
* Public: No
*/
#include "script_component.hpp"
#define TEXTURE_WIDTH_IN_M 6205
#define CENTER_OFFSET_Y_PERC 0.1606
#define CONSTANT_SCALE 0.2
// If markers exist and they should'nt, delete them
if (!("ACE_MapTools" in items ACE_player) || {GVAR(mapTool_Shown) == 0}) then {
// If markers exist, delete them
if (!isNil QGVAR(mapTool_markerRotatingFixed)) then {
deleteMarkerLocal MARKERNAME_MAPTOOL_FIXED;
GVAR(mapTool_markerRotatingFixed) = nil;
};
};
if (!("ACE_MapTools" in items ACE_player) || {GVAR(mapTool_Shown) != 1}) then {
if (!isNil QGVAR(mapTool_markerRotatingNormal)) then {
deleteMarkerLocal MARKERNAME_MAPTOOL_ROTATINGNORMAL;
GVAR(mapTool_markerRotatingNormal) = nil;
};
};
if (!("ACE_MapTools" in items ACE_player) || {GVAR(mapTool_Shown) != 2}) then {
if (!isNil QGVAR(mapTool_markerRotatingSmall)) then {
deleteMarkerLocal MARKERNAME_MAPTOOL_ROTATINGSMALL;
GVAR(mapTool_markerRotatingSmall) = nil;
};
};
PARAMS_1(_theMap);
if (!("ACE_MapTools" in items ACE_player)|| {GVAR(mapTool_Shown) == 0}) exitWith {};
// If markers don't exist and should, create them
if (isNil QGVAR(mapTool_markerRotatingFixed)) then {
GVAR(mapTool_markerRotatingFixed) = createMarkerLocal [MARKERNAME_MAPTOOL_FIXED, GVAR(mapTool_pos)];
MARKERNAME_MAPTOOL_FIXED setMarkerType MARKERNAME_MAPTOOL_FIXED;
_rotatingTexture = "";
_textureWidth = 0;
if (GVAR(mapTool_Shown) == 1) then {
_rotatingTexture = QUOTE(PATHTOF(data\mapToolRotatingNormal.paa));
_textureWidth = TEXTURE_WIDTH_IN_M;
} else {
_rotatingTexture = QUOTE(PATHTOF(data\mapToolRotatingSmall.paa));
_textureWidth = TEXTURE_WIDTH_IN_M / 2;
};
if ((isNil QGVAR(mapTool_markerRotatingNormal)) && {GVAR(mapTool_Shown) == 1}) then {
GVAR(mapTool_markerRotatingNormal) = createMarkerLocal [MARKERNAME_MAPTOOL_ROTATINGNORMAL, GVAR(mapTool_pos)];
MARKERNAME_MAPTOOL_ROTATINGNORMAL setMarkerType MARKERNAME_MAPTOOL_ROTATINGNORMAL;
};
if ((isNil QGVAR(mapTool_markerRotatingSmall)) && {GVAR(mapTool_Shown) == 2}) then {
GVAR(mapTool_markerRotatingSmall) = createMarkerLocal [MARKERNAME_MAPTOOL_ROTATINGSMALL, GVAR(mapTool_pos)];
MARKERNAME_MAPTOOL_ROTATINGSMALL setMarkerType MARKERNAME_MAPTOOL_ROTATINGSMALL;
};
_rotatingMarker = [MARKERNAME_MAPTOOL_ROTATINGNORMAL, MARKERNAME_MAPTOOL_ROTATINGSMALL] select (GVAR(mapTool_Shown) - 1);
_textureWidth = [TEXTURE_WIDTH_IN_M, TEXTURE_WIDTH_IN_M / 2] select (GVAR(mapTool_Shown) - 1);
// Update scale of both parts
_scale = _textureWidth * CONSTANT_SCALE * (call FUNC(calculateMapScale));
MARKERNAME_MAPTOOL_FIXED setMarkerSizeLocal [_scale,_scale];
_rotatingMarker setMarkerSizeLocal [_scale,_scale];
_scale = _textureWidth * CONSTANT_SCALE * (call FUNC(calculateMapScale));
// Position of the fixed part
_xPos = GVAR(mapTool_pos) select 0;
_yPos = (GVAR(mapTool_pos) select 1) + _textureWidth * CENTER_OFFSET_Y_PERC;
MARKERNAME_MAPTOOL_FIXED setMarkerPosLocal [_xPos,_yPos];
_theMap drawIcon [QUOTE(PATHTOF(data\mapToolFixed.paa)), [1,1,1,1], [_xPos,_yPos], (32 * _scale), (32 * _scale), 0, "", 0];
// Position and rotation of the rotating part
_xPos = (GVAR(mapTool_pos) select 0) + sin(GVAR(mapTool_angle)) * _textureWidth * CENTER_OFFSET_Y_PERC;
_yPos = (GVAR(mapTool_pos) select 1) + cos(GVAR(mapTool_angle)) * _textureWidth * CENTER_OFFSET_Y_PERC;
_rotatingMarker setMarkerPosLocal [_xPos,_yPos];
_rotatingMarker setMarkerDirLocal GVAR(mapTool_angle);
_theMap drawIcon [_rotatingTexture, [1,1,1,1], [_xPos,_yPos], (32 * _scale), (32 * _scale), GVAR(mapTool_angle), "", 0];

View File

@ -10,8 +10,3 @@
#endif
#include "\z\ace\Addons\main\script_macros.hpp"
#define MARKERNAME_MAPTOOL_FIXED "ACE_MapToolFixed"
#define MARKERNAME_MAPTOOL_ROTATINGNORMAL "ACE_MapToolRotatingNormal"
#define MARKERNAME_MAPTOOL_ROTATINGSMALL "ACE_MapToolRotatingSmall"

View File

@ -1,4 +1,3 @@
class Extended_PreInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit));

View File

@ -1,4 +1,3 @@
class RscPicture;
class RscText;
class RscStructuredText;
@ -13,91 +12,34 @@ class RscXSliderH;
class RscDisplayInsertMarker {
onLoad = QUOTE(_this call DFUNC(initInsertMarker););
onUnload = QUOTE(_this call DFUNC(placeMarker););
idd = 54;
// idd = 54;
movingEnable = 1;
class controlsBackground {
class RscText_1000: RscText {
idc = 1000;
/*x = "0 * GUI_GRID_INSERTMARKER_W + GUI_GRID_INSERTMARKER_X";
y = "0 * GUI_GRID_INSERTMARKER_H + GUI_GRID_INSERTMARKER_Y";
w = "8 * GUI_GRID_INSERTMARKER_W";
h = "2.5 * GUI_GRID_INSERTMARKER_H";
colorBackground[] = {0,0,0,0.5};*/
};
class Description: RscStructuredText {
colorBackground[] = {0,0,0,0.7};
idc = 1100;
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
y = "9.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
};
// class RscText_1000: RscText {idc = 1000;};
};
class controls {
//delete ButtonOK;
class ButtonMenuOK: RscButtonMenuOK {
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
y = "15.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
w = "8.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
// size = "0.85 * ( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
// sizeEx = "0.85 * ( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
text = "";
// class ButtonMenuOK: RscButtonMenuOK {idc = 1;};
// class ButtonMenuCancel: RscButtonMenuCancel {idc = 2;};
// class Title: RscText {idc = 1001;};
// class Description: RscStructuredText {idc = 1100;};
// class DescriptionChannel: RscStructuredText {idc = 1101;};
// class MarkerPicture: RscPicture {idc = 102;};
// class MarkerText: RscEdit {idc = 101;};
// class MarkerChannel: RscCombo {idc = 103;};
class MarkerShape: RscCombo {
idc = 1210;
};
class ButtonMenuCancel: RscButtonMenuCancel {
x = "23 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
y = "15.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
w = "1.1 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
text = "X";
colorBackground[] = {0.75,0,0,0.5};
colorBackgroundFocused[] = {0.75,0,0,0.5};
colorBackground2[] = {1,0,0,0.5};
class MarkerColor: RscCombo {
idc = 1211;
};
/*class ButtonMenuInfo: RscButtonMenu {
idc = 2400;
text = "$STR_A3_RscDisplayInsertMarker_ButtonMenuInfo";
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
y = "13.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
};*/
delete ButtonMenuInfo;
class Title: RscText {
moving = 1;
colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])","(profilenamespace getvariable ['GUI_BCG_RGB_A',0.8])"};
idc = 1001;
text = "$STR_A3_RscDisplayInsertMarker_Title";
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
y = "8.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
class MarkerAngle: RscXSliderH {
idc = 1220;
};
delete Description;
/*class Info: RscStructuredText {
colorBackground[] = {0,0,0,0.7};
idc = 1101;
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
y = "11.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
};*/
delete Info;
class Picture: RscPicture {
idc = 102;
x = 0.259984;
y = 0.4;
w = 0.05;
h = 0.0666667;
};
class Text: RscEdit {
idc = 101;
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
y = "10.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
class MarkerAngleText: RscText {
idc = 1221;
};
/*class SizeX: RscEdit {
idc = 1200;
text = "10";
@ -114,34 +56,5 @@ class RscDisplayInsertMarker {
w = "5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
};*/
class MarkerShape: RscCombo {
idc = 1210;
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
y = "11.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
};
class MarkerColor: RscCombo {
idc = 1211;
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
y = "12.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
};
class MarkerAngle: RscXSliderH {
idc = 1220;
text = "10";
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
y = "13.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
};
class MarkerAngleText: RscText {
idc = 1221;
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
y = "14.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
};
};
};

View File

@ -11,6 +11,12 @@
if (isMultiplayer && {!isServer} && {hasInterface}) then {
private "_logic";
_logic = createGroup sideLogic createUnit ["Logic", [0,0,0], [], 0, "NONE"];
[QGVAR(sendMarkersJIP), _logic] call EFUNC(common,serverEvent);
[QGVAR(sendMarkersJIP), [_logic]] call EFUNC(common,serverEvent);
};
GVAR(mapDisplaysWithDrawEHs) = [];
GVAR(currentMarkerPosition) = [];
GVAR(currentMarkerAngle) = 0;
GVAR(currentMarkerColorConfigName) = "";
GVAR(currentMarkerConfigName) = "";

View File

@ -3,6 +3,7 @@
ADDON = false;
PREP(initInsertMarker);
PREP(mapDrawEH);
PREP(onLBSelChangedColor);
PREP(onLBSelChangedShape);
PREP(onSliderPosChangedAngle);
@ -14,25 +15,15 @@ PREP(setMarkerNetwork);
// init marker types
if (isNil QGVAR(MarkersCache)) then {
_config = configfile >> "CfgMarkers";
_index = 0;
GVAR(MarkersCache) = [];
for "_a" from 0 to (count _config - 1) do {
_marker = _config select _a;
_scope = getNumber (_marker >> "scope");
_name = getText (_marker >> "name");
_icon = getText (_marker >> "icon");
if (_scope == 2) then {
_shape lbAdd _name;
_shape lbSetValue [_index, _a];
_shape lbSetPicture [_index, _icon];
_name = getText (_marker >> "name");
_icon = getText (_marker >> "icon");
GVAR(MarkersCache) pushBack [_name, _a, _icon];
_index = _index + 1;
};
};
};
@ -40,39 +31,27 @@ if (isNil QGVAR(MarkersCache)) then {
// init marker colors
if (isNil QGVAR(MarkerColorsCache)) then {
_config = configfile >> "CfgMarkerColors";
_index = 0;
GVAR(MarkerColorsCache) = [];
for "_a" from 0 to (count _config - 1) do {
_marker = _config select _a;
_scope = getNumber (_marker >> "scope");
_name = getText (_marker >> "name");
if (_scope == 2) then {
_color lbAdd _name;
_color lbSetValue [_index, _a];
_name = getText (_marker >> "name");
_rgba = getArray (_marker >> "color");
{
if (typeName _x != "SCALAR") then {
_rgba set [_forEachIndex, call compile _x];
};
} forEach _rgba;
_icon = format ["#(argb,8,8,3)color(%1,%2,%3,%4)", _rgba select 0, _rgba select 1, _rgba select 2, _rgba select 3];
_color lbSetPicture [_index, _icon];
GVAR(MarkerColorsCache) pushBack [_name, _a, _icon];
_index = _index + 1;
};
};
};
//Server Sync JIP markers:
[QGVAR(sendMarkersJIP), FUNC(sendMarkersJIP)] call EFUNC(common,addEventHandler);
ADDON = true;

View File

@ -1,87 +1,84 @@
// stuff taken from bohemia, edited by commy2
/*
* Author: BIS, commy2
* Sets up the marker placement
* Run instead of \a3\ui_f\scripts\GUI\RscDisplayInsertMarker.sqf
*
* Arguments:
* 0: RscDisplayInsertMarker <DISPLAY>
*
* Return Value:
* Nothing
*
* Example:
* [onLoad] call ace_markers_fnc_initInsertMarker;
*
* Public: No
*/
#include "script_component.hpp"
#define BORDER 0.005
[{
disableserialization;
_display = _this select 0;
PARAMS_1(_display);
//Prevent Captive Players from placing markers
/*if (ACE_player getVariable ["ACE_isCaptive", false]) exitWith {
//Can't place markers when can't interact
if (!([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith))) exitWith {
_display closeDisplay 2; //emulate "Cancel" button
};*/
// prevent vanilla key input
_display displayAddEventHandler ["KeyDown", {(_this select 1) in [200, 208]}];
};
//BIS Controls:
_text = _display displayctrl 101;
_picture = _display displayctrl 102;
_channel = _display displayctrl 103;
_buttonOK = _display displayctrl 1;
_buttonCancel = _display displayctrl 2;
_description = _display displayctrl 1100;
_title = _display displayctrl 1001;
_sizeX = _display displayctrl 1200;
_sizeY = _display displayctrl 1201;
_shape = _display displayctrl 1210;
_color = _display displayctrl 1211;
_angle = _display displayctrl 1220;
_angleText = _display displayctrl 1221;
_descriptionChannel = _display displayctrl 1101;
//ACE Controls:
// _sizeX = _display displayctrl 1200;
// _sizeY = _display displayctrl 1201;
_aceShapeLB = _display displayctrl 1210;
_aceColorLB = _display displayctrl 1211;
_aceAngleSlider = _display displayctrl 1220;
_aceAngleSliderText = _display displayctrl 1221;
//Install MapDrawEH on current map
_mapIDD = -1;
{
if (!isNull (findDisplay _x)) exitWith {_mapIDD = _x};
} forEach [12, 37, 52, 53, 160];
if (_mapIDD == -1) exitWith {ERROR("No Map?");};
if (!(_mapIDD in GVAR(mapDisplaysWithDrawEHs))) then {
GVAR(mapDisplaysWithDrawEHs) pushBack _mapIDD;
((finddisplay _mapIDD) displayctrl 51) ctrlAddEventHandler ["Draw", {_this call FUNC(mapDrawEH)}];
};
//Calculate center position of the marker placement ctrl
_pos = ctrlPosition _picture;
_pos = [(_pos select 0) + (_pos select 2) / 2, (_pos select 1) + (_pos select 3) / 2];
GVAR(currentMarkerPosition) = ((findDisplay _mapIDD) displayCtrl 51) ctrlMapScreenToWorld _pos;
//Hide the bis picture:
_picture ctrlShow false;
// prevent vanilla key input
_display displayAddEventHandler ["KeyDown", {(_this select 1) in [200, 208]}];
//Focus on the text input
ctrlSetFocus _text;
//Change ok button's text based on current channel
[{
EXPLODE_2_PVT(_this,_params,_pfhId);
EXPLODE_1_PVT(_params,_buttonOK);
if (isNull _buttonOK) exitWith {
[_pfhId] call CBA_fnc_removePerFrameHandler;
};
_channel = "";
_textColor = [1,1,1,1];
switch (call EFUNC(common,currentChannel)) do {
case ("global"): {
_channel = localize "str_channel_global";
_textColor = [(216/255),(216/255),(216/255),1];
};
case ("side"): {
_channel = localize "str_channel_side";
_textColor = [(70/255),(211/255),(252/255),1];
};
case ("group"): {
_channel = localize "str_channel_group";
_textColor = [(181/255),(248/255),(98/255),1];
};
case ("vehicle"): {
_channel = localize "str_channel_vehicle";
_textColor = [(255/255),(208/255),(0/255),1];
};
case ("direct"): {
_channel = localize "str_channel_direct";
_textColor = [(255/255),(255/255),(255/255),1];
};
case ("command"): {
_channel = localize "str_channel_command";
_textColor = [(255/255),(255/255),(70/255),1];
};
};
//If localization not found, then don't touch anything (default is RscButtonMenuOK's localized text)
if (_channel != "") then {
_buttonOK ctrlSetTextColor _textColor;
_buttonOK ctrlSetText format [localize "STR_ACE_Markers_PlaceIn", _channel];
};
}, 0, [_buttonOK]] call CBA_fnc_addPerFrameHandler;
//--- Background
_pos = ctrlposition _text;
_posX = (_pos select 0) + 0.01;
_posY = _pos select 1;
_posW = _pos select 2;
_posH = _pos select 3;
_posY = _posY min ((safeZoneH + safeZoneY) - (6 * _posH + 8 * BORDER)); //prevent buttons being placed below bottom edge of screen
_posY = _posY min ((safeZoneH + safeZoneY) - (8 * _posH + 8 * BORDER)); //prevent buttons being placed below bottom edge of screen
_pos set [0,_posX];
_pos set [1,_posY];
_text ctrlsetposition _pos;
@ -96,46 +93,67 @@
//--- Description
_pos set [1,_posY - 1*_posH];
_pos set [3,6*_posH + 6 * BORDER];
_description ctrlenable false;
_description ctrlsetposition _pos;
_description ctrlsetstructuredtext parsetext format ["<t size='0.8'>%1</t>","Description:"]; //--- ToDo: Localze
_description ctrlsetstructuredtext parsetext format ["<t size='0.8'>%1</t>", (localize "str_lib_label_description")];
_description ctrlcommit 0;
_activeColor = (["IGUI","WARNING_RGB"] call bis_fnc_displaycolorget) call bis_fnc_colorRGBtoHTML;
//--- Shape
_pos set [1,_posY + 1 * _posH + 2 * BORDER];
_pos set [2,_posW];
_pos set [3,_posH];
_shape ctrlsetposition _pos;
_shape ctrlcommit 0;
_aceShapeLB ctrlsetposition _pos;
_aceShapeLB ctrlcommit 0;
//--- Color
_pos set [1,_posY + 2 * _posH + 3 * BORDER];
_pos set [2,_posW];
_color ctrlsetposition _pos;
_color ctrlcommit 0;
_aceColorLB ctrlsetposition _pos;
_aceColorLB ctrlcommit 0;
//--- Angle
_pos set [1,_posY + 3 * _posH + 4 * BORDER];
_pos set [2,_posW];
_angle ctrlsetposition _pos;
_angle ctrlcommit 0;
_aceAngleSlider ctrlsetposition _pos;
_aceAngleSlider ctrlcommit 0;
//--- Angle Text
_pos set [1,_posY + 4 * _posH + 5 * BORDER];
_pos set [2,_posW];
_angleText ctrlsetposition _pos;
_angleText ctrlcommit 0;
_aceAngleSliderText ctrlsetposition _pos;
_aceAngleSliderText ctrlcommit 0;
_offsetButtons = 0;
if (isMultiplayer) then {
_pos set [1,_posY + 5 * _posH + 7 * BORDER];
_pos set [3,_posH];
_descriptionChannel ctrlsetstructuredtext parsetext format ["<t size='0.8'>%1</t>", (localize "str_a3_cfgvehicles_modulerespawnposition_f_arguments_marker_0") + ":"];
_descriptionChannel ctrlsetposition _pos;
_descriptionChannel ctrlcommit 0;
_pos set [1,_posY + 6 * _posH + 7 * BORDER];
_pos set [3,_posH];
_channel ctrlsetposition _pos;
_channel ctrlcommit 0;
_offsetButtons = 7 * _posH + 8 * BORDER;
} else {
_descriptionChannel ctrlshow false;
_channel ctrlshow false;
_offsetButtons = 5 * _posH + 7 * BORDER;
};
//--- ButtonOK
_pos set [1,_posY + 5 * _posH + 7 * BORDER];
_pos set [2,_posW * (8.9/10) - BORDER];
_pos set [1,_posY + _offsetButtons];
_pos set [2,_posW / 2 - BORDER];
_pos set [3,_posH];
_buttonOk ctrlsetposition _pos;
_buttonOk ctrlcommit 0;
//--- ButtonCancel
_pos set [0,_posX + _posW * (8.9 / 10)];
_pos set [2,_posW * (1.1 / 10)];
_pos set [0,_posX + _posW / 2];
_pos set [1,_posY + _offsetButtons];
_pos set [2,_posW / 2];
_pos set [3,_posH];
_buttonCancel ctrlsetposition _pos;
_buttonCancel ctrlcommit 0;
@ -151,56 +169,41 @@
// init marker shape lb
lbClear _aceShapeLB;
{
_shape lbAdd (_x select 0);
_shape lbSetValue [_forEachIndex, _x select 1];
_shape lbSetPicture [_forEachIndex, _x select 2];
_aceShapeLB lbAdd (_x select 0);
_aceShapeLB lbSetValue [_forEachIndex, _x select 1];
_aceShapeLB lbSetPicture [_forEachIndex, _x select 2];
} forEach GVAR(MarkersCache);
_shape ctrlAddEventHandler ["LBSelChanged", {_this call FUNC(onLBSelChangedShape)}];
_curSelShape = GETGVAR(curSelMarkerShape,0);
_shape lbSetCurSel _curSelShape;
_data = _shape lbValue _curSelShape;
_config = (configfile >> "CfgMarkers") select _data;
_icon = getText (_config >> "icon");
_picture ctrlSetText _icon;
_aceShapeLB lbSetCurSel _curSelShape;
//Update now and add eventHandler:
[_aceShapeLB, _curSelShape] call FUNC(onLBSelChangedShape);
_aceShapeLB ctrlAddEventHandler ["LBSelChanged", {_this call FUNC(onLBSelChangedShape)}];
// init marker color lb
lbClear _aceColorLB;
{
_color lbAdd (_x select 0);
_color lbSetValue [_forEachIndex, _x select 1];
_color lbSetPicture [_forEachIndex, _x select 2];
_aceColorLB lbAdd (_x select 0);
_aceColorLB lbSetValue [_forEachIndex, _x select 1];
_aceColorLB lbSetPicture [_forEachIndex, _x select 2];
} forEach GVAR(MarkerColorsCache);
_color ctrlAddEventHandler ["LBSelChanged", {_this call FUNC(onLBSelChangedColor)}];
_curSelColor = GETGVAR(curSelMarkerColor,0);
_color lbSetCurSel _curSelColor;
_data = _color lbValue _curSelColor;
_config = (configfile >> "CfgMarkerColors") select _data;
_rgba = getArray (_config >> "color");
{
if (typeName _x != "SCALAR") then {
_rgba set [_forEachIndex, call compile _x];
};
} forEach _rgba;
_picture ctrlSetTextColor _rgba;
_aceColorLB lbSetCurSel _curSelColor;
//Update now and add eventHandler:
[_aceColorLB, _curSelColor] call FUNC(onLBSelChangedColor);
_aceColorLB ctrlAddEventHandler ["LBSelChanged", {_this call FUNC(onLBSelChangedColor)}];
// init marker angle slider
_angle sliderSetRange [-180, 180];
_angle ctrlAddEventHandler ["SliderPosChanged", {_this call FUNC(onSliderPosChangedAngle)}];
_curSelAngle = GETGVAR(curSelMarkerAngle,0);
_angle sliderSetPosition _curSelAngle;
_curSelAngle = round _curSelAngle;
if (_curSelAngle < 0) then {
_curSelAngle = _curSelAngle + 360;
};
_angleText ctrlSetText format [localize "STR_ACE_Markers_MarkerDirection", _curSelAngle];
_aceAngleSlider sliderSetRange [-180, 180];
_curSelAngle = GETGVAR(currentMarkerAngle,0);
_aceAngleSlider sliderSetPosition _curSelAngle;
//Update now and add eventHandler:
[_aceAngleSlider, _curSelAngle] call FUNC(onSliderPosChangedAngle);
_aceAngleSlider ctrlAddEventHandler ["SliderPosChanged", {_this call FUNC(onSliderPosChangedAngle)}];
}, _this] call EFUNC(common,execNextFrame);

View File

@ -0,0 +1,45 @@
/*
* Author: PabstMirror
* Draws the current temp marker. Allows rotation.
*
* Arguments:
* 0: TheMap <Control>
*
* Return Value:
* Nothing
*
* Example:
* [theMapControl] call ace_markers_fnc_mapDrawEH;
*
* Public: No
*/
#include "script_component.hpp"
private ["_theMap", "_sizeX", "_sizeY", "_textureConfig", "_texture", "_markerSize", "_markerShadow", "_colorConfig", "_drawColor"];
PARAMS_1(_theMap);
//Only show if marker place is open:
if (isNull (findDisplay 54)) exitWith {};
//Error checking:
if ((GVAR(currentMarkerConfigName) == "") || {GVAR(currentMarkerColorConfigName) == ""} || {GVAR(currentMarkerPosition) isEqualTo []}) exitWith {ERROR("Bad Data");};
_sizeX = 1;
_sizeY = 1;
_textureConfig = configFile >> "CfgMarkers" >> GVAR(currentMarkerConfigName);
_texture = getText (_textureConfig >> "icon");
_markerSize = getNumber (_textureConfig >> "size");
_markerShadow = getNumber (_textureConfig >> "shadow");
_colorConfig = (configFile >> "CfgMarkerColors" >> GVAR(currentMarkerColorConfigName));
_drawColor = getArray (_colorConfig >> "color");
//Convert possible code into numbers
{
if (typeName _x == "STRING") then {
_drawColor set [_forEachIndex, (call compile _x)];
};
} forEach _drawColor;
_drawColor set [3, ((_drawColor select 3) * 0.875)]; //Arma adds a slight transparency
_theMap drawIcon [_texture, _drawColor, GVAR(currentMarkerPosition), (_sizeX * _markerSize), (_sizeY * _markerSize), GVAR(currentMarkerAngle), "", _markerShadow];

View File

@ -1,23 +1,28 @@
// by commy2
/*
* Author: commy2
* When the color list box is changed.
*
* Arguments:
* 0: Color ListBox (idc 1211) <CONTROL>
* 1: Selected Index <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* [ColorLB, 5] call ace_markers_fnc_onLBSelChangedColor;
*
* Public: No
*/
#include "script_component.hpp"
private ["_ctrl", "_data", "_config", "_color"];
private ["_data", "_config"];
_ctrl = _this select 0;
_data = _ctrl lbValue (_this select 1);
PARAMS_2(_ctrl,_index);
_data = _ctrl lbValue _index;
GVAR(curSelMarkerColor) = _this select 1;
GVAR(curSelMarkerColor) = _index;
_config = (configfile >> "CfgMarkerColors") select _data;
_color = getArray (_config >> "color");
{
if (typeName _x != "SCALAR") then {
_color set [_forEachIndex, call compile _x];
};
} forEach _color;
((ctrlParent _ctrl) displayCtrl 102) ctrlSetTextColor _color;
GVAR(currentMarkerColorConfigName) = (configName _config);

View File

@ -1,17 +1,28 @@
// by commy2
/*
* Author: commy2
* When the shape list box is changed.
*
* Arguments:
* 0: Shape ListBox (idc 1210) <CONTROL>
* 1: Selected Index <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* [ColorLB, 5] call ace_markers_fnc_onLBSelChangedShape;
*
* Public: No
*/
#include "script_component.hpp"
private ["_ctrl", "_data", "_config", "_icon"];
private ["_data", "_config"];
_ctrl = _this select 0;
_data = _ctrl lbValue (_this select 1);
PARAMS_2(_ctrl,_index);
_data = _ctrl lbValue _index;
GVAR(curSelMarkerShape) = _this select 1;
GVAR(curSelMarkerShape) = _index;
_config = (configfile >> "CfgMarkers") select _data;
_icon = getText (_config >> "icon");
((ctrlParent _ctrl) displayCtrl 102) ctrlSetText _icon;
GVAR(currentMarkerConfigName) = (configName _config);

View File

@ -1,12 +1,24 @@
// by commy2
/*
* Author: commy2
* Angle Slider Pos changed
*
* Arguments:
* 0: Slider (idc 1210) <CONTROL>
* 1: Slider Data (angle: -180..180) <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* [Slider, 2] call ace_markers_fnc_onSliderPosChangedAngle;
*
* Public: No
*/
#include "script_component.hpp"
private ["_ctrl", "_data", "_direction"];
private ["_direction"];
_ctrl = _this select 0;
_data = _this select 1;
GVAR(curSelMarkerAngle) = _data;
PARAMS_2(_ctrl,_data);
_direction = round _data;
if (_direction < 0) then {

View File

@ -1,46 +1,36 @@
// by commy2
/*
* Author: commy2
* MarkerPlacement closed
*
* Arguments:
* 0: RscDisplayInsertMarker <DISPLAY>
* 1: CloseNumber (1 = ButtonOk) <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* [onUnloadEvent] call ace_markers_fnc_placeMarker;
*
* Public: No
*/
#include "script_component.hpp"
if (_this select 1 == 1) then {
disableserialization;
_display = _this select 0;
disableserialization;
PARAMS_2(_display,_closeNum);
_pos = ctrlPosition (_display displayCtrl 102);
_pos = [
(_pos select 0) + (_pos select 2) / 2,
(_pos select 1) + (_pos select 3) / 2
];
switch (true) do {
case (!isNull findDisplay 12): {
_pos = (findDisplay 12 displayCtrl 51) ctrlMapScreenToWorld _pos;
};
case (!isNull findDisplay 37): {
_pos = (findDisplay 37 displayCtrl 51) ctrlMapScreenToWorld _pos;
};
case (!isNull findDisplay 52): {
_pos = (findDisplay 52 displayCtrl 51) ctrlMapScreenToWorld _pos;
};
case (!isNull findDisplay 53): {
_pos = (findDisplay 53 displayCtrl 51) ctrlMapScreenToWorld _pos;
};
};
if (_closeNum == 1) then {
// set and send marker data the next frame. the actual marker isn't created yet
[
{
[QGVAR(setMarkerNetwork), [
allMapMarkers select (count allMapMarkers - 1), [
GETGVAR(currentMarkerConfigName,""),
GETGVAR(currentMarkerColorConfigName,""),
_this,
GETGVAR(currentMarkerAngle,0)
]
]] call EFUNC(common,globalEvent);
},
_pos
] call EFUNC(common,execNextFrame);
[{
[QGVAR(setMarkerNetwork), [
allMapMarkers select (count allMapMarkers - 1), [
GETGVAR(currentMarkerConfigName,""),
GETGVAR(currentMarkerColorConfigName,""),
GETGVAR(currentMarkerPosition,[]),
GETGVAR(currentMarkerAngle,0)
]
]] call EFUNC(common,globalEvent);
}, []] call EFUNC(common,execNextFrame);
};

View File

@ -1,13 +1,25 @@
// by commy2
/*
* Author: commy2
* Server: Recives a dummy logic, sends marker data back to the owner.
*
* Arguments:
* 0: Logic <OBJECT>
*
* Return Value:
* Nothing
*
* Example:
* [onUnloadEvent] call ace_markers_fnc_sendMarkerJIP;
*
* Public: No
*/
#include "script_component.hpp"
private "_logic";
PARAMS_1(_logic);
_logic = _this;
[QGVAR(setMarkerJIP), _logic, [
GETGVAR(allMapMarkers,[]),
GETGVAR(allMapMarkersProperties,[]),
_logic
]
[QGVAR(setMarkerJIP), [_logic], [
GETGVAR(allMapMarkers,[]),
GETGVAR(allMapMarkersProperties,[]),
_logic
]
] call EFUNC(common,targetEvent);

View File

@ -1,35 +1,49 @@
// by commy2
/*
* Author: commy2
* Client: Recives a marker data from server.
*
* Arguments:
* 0: Array of map marker names <ARRAY>
* 1: Array of map marker data <ARRAY>
* 2: Logic <OBJECT>
*
* Return Value:
* Nothing
*
* Example:
* [[],[],dummyLogic] call ace_markers_fnc_setMarkerJIP;
*
* Public: No
*/
#include "script_component.hpp"
private ["_allMapMarkers", "_allMapMarkersProperties", "_index", "_data", "_config"];
private ["_index", "_data", "_config"];
_allMapMarkers = _this select 0;
_allMapMarkersProperties = _this select 1;
_logic = _this select 2;
PARAMS_3(_allMapMarkers,_allMapMarkersProperties,_logic);
{
_index = _allMapMarkers find _x;
_index = _allMapMarkers find _x;
if (_index != -1) then {
_data = _allMapMarkersProperties select _index;
if (_index != -1) then {
_data = _allMapMarkersProperties select _index;
_config = (configfile >> "CfgMarkers") >> (_data select 0);
if (!isClass _config) then {
WARNING("CfgMarker not found, changed to milDot");
_config == (configFile >> "CfgMarkers" >> "MilDot");
_config = (configfile >> "CfgMarkers") >> (_data select 0);
if (!isClass _config) then {
WARNING("CfgMarker not found, changed to milDot");
_config == (configFile >> "CfgMarkers" >> "MilDot");
};
_x setMarkerTypeLocal (configName _config);
_config = (configfile >> "CfgMarkerColors") >> (_data select 1);
if (!isClass _config) then {
WARNING("CfgMarkerColors not found, changed to Default");
_config == (configFile >> "CfgMarkerColors" >> "Default");
};
_x setMarkerColorLocal (configName _config);
_x setMarkerPosLocal (_data select 2);
_x setMarkerDirLocal (_data select 3);
};
_x setMarkerTypeLocal (configName _config);
_config = (configfile >> "CfgMarkerColors") >> (_data select 1);
if (!isClass _config) then {
WARNING("CfgMarkerColors not found, changed to Default");
_config == (configFile >> "CfgMarkerColors" >> "Default");
};
_x setMarkerColorLocal (configName _config);
_x setMarkerPosLocal (_data select 2);
_x setMarkerDirLocal (_data select 3);
};
} forEach allMapMarkers;
deleteVehicle _logic;

View File

@ -1,45 +1,61 @@
// by commy2
/*
* Author: commy2
* Sets newly placed marker
* Handles the QGVAR(setMarkerNetwork) event.
*
* Arguments:
* 0: Markername <STRING>
* 1: Marker Data <ARRAY>
*
* Return Value:
* Nothing
*
* Example:
* [[],[],dummyLogic] call ace_markers_fnc_setMarkerJIP;
*
* Public: No
*/
#include "script_component.hpp"
private ["_marker", "_data", "_config"];
private ["_config"];
_marker = _this select 0;
_data = _this select 1;
PARAMS_2(_marker,_data);
EXPLODE_4_PVT(_data,_markerClassname,_colorClassname,_markerPos,_markerDir);
_config = (configfile >> "CfgMarkers") >> (_data select 0);
_config = (configfile >> "CfgMarkers") >> _markerClassname;
if (!isClass _config) then {
WARNING("CfgMarker not found, changed to milDot");
_config == (configFile >> "CfgMarkers" >> "MilDot");
WARNING("CfgMarker not found, changed to milDot");
_config == (configFile >> "CfgMarkers" >> "MilDot");
};
_marker setMarkerTypeLocal (configName _config);
_config = (configfile >> "CfgMarkerColors") >> (_data select 1);
_config = (configfile >> "CfgMarkerColors") >> _colorClassname;
if (!isClass _config) then {
WARNING("CfgMarkerColors not found, changed to Default");
_config == (configFile >> "CfgMarkerColors" >> "Default");
WARNING("CfgMarkerColors not found, changed to Default");
_config == (configFile >> "CfgMarkerColors" >> "Default");
};
_marker setMarkerColorLocal configName _config;
_marker setMarkerPosLocal (_data select 2);
_marker setMarkerDirLocal (_data select 3);
_marker setMarkerPosLocal _markerPos;
_marker setMarkerDirLocal _markerDir;
// save properties on server machine for JIP, marker editing ready
if (isMultiplayer && {isServer}) then {
private ["_allMapMarkers", "_allMapMarkersProperties", "_index"];
private ["_allMapMarkers", "_allMapMarkersProperties", "_index"];
_allMapMarkers = GETMVAR(allMapMarkers,[]);
_allMapMarkersProperties = GETMVAR(allMapMarkersProperties,[]);
_allMapMarkers = GETGVAR(allMapMarkers,[]);
_allMapMarkersProperties = GETGVAR(allMapMarkersProperties,[]);
_index = _allMapMarkers find _marker;
_index = _allMapMarkers find _marker;
if (_index == -1) then {
_allMapMarkers pushBack _marker;
_allMapMarkersProperties pushBack _data;
} else {
_allMapMarkers set [_index, _marker];
_allMapMarkersProperties set [_index, _data];
};
if (_index == -1) then {
_allMapMarkers pushBack _marker;
_allMapMarkersProperties pushBack _data;
} else {
_allMapMarkers set [_index, _marker];
_allMapMarkersProperties set [_index, _data];
};
GVAR(allMapMarkers) = _allMapMarkers;
GVAR(allMapMarkersProperties) = _allMapMarkersProperties;
GVAR(allMapMarkers) = _allMapMarkers;
GVAR(allMapMarkersProperties) = _allMapMarkersProperties;
};

View File

@ -11,13 +11,5 @@
<Spanish>Dirección: %1°</Spanish>
<Russian>Направление: %1</Russian>
</Key>
<Key ID="STR_ACE_Markers_PlaceIn">
<English>Place in: %1</English>
<German>Platz in: %1</German>
<Spanish>Colocar en: %1</Spanish>
<Polish>Umieść na: %1</Polish>
<Czech>Umístit do: %1</Czech>
<Russian>Место в: %1</Russian>
</Key>
</Package>
</Project>

View File

@ -440,6 +440,7 @@ class CfgVehicles {
statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation));
icon = PATHTOF(UI\icons\medical_cross.paa);
#undef EXCEPTIONS
#define EXCEPTIONS exceptions[] = {"isNotInside"};
#include "ACE_Medical_Actions.hpp"
};

View File

@ -25,9 +25,9 @@ GVAR(heartBeatSounds_Slow) = ["ACE_heartbeat_slow_1", "ACE_heartbeat_slow_2"];
} else {
_unit setVariable ["tf_globalVolume", 1];
_unit setVariable ["tf_voiceVolume", 1, true];
_unit setVariable ["tf_unable_to_use_radio", true, true];
_unit setVariable ["tf_unable_to_use_radio", false, true];
_unit setVariable ["acre_sys_core_isDisabled", true, true];
_unit setVariable ["acre_sys_core_isDisabled", false, true];
_unit setVariable ["acre_sys_core_globalVolume", 1];
};
};

View File

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

View File

@ -0,0 +1,20 @@
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));
};
};
class Extended_FiredBIS_EventHandlers {
class CAManBase {
class AGM_Optics {
clientFiredBIS = QUOTE(if (_this select 0 == ACE_player) then {_this call DFUNC(handleFired)};);
};
};
};

View File

@ -0,0 +1,8 @@
class CfgOpticsEffect {
class ACE_OpticsRadBlur1 {
type = "radialblur";
params[] = {0.015,0,0.14,0.2};
priority = 950;
};
};

View File

@ -0,0 +1,50 @@
#define MACRO_PRELOAD \
GVAR(BodyDay) = "*"; \
GVAR(BodyNight) = "*"; \
GVAR(ReticleDay) = "*"; \
GVAR(ReticleNight) = "*"
class PreloadTextures {
class CfgWeapons {
class ACE_optic_Hamr_2D {
MACRO_PRELOAD;
};
class ACE_optic_Hamr_PIP {
MACRO_PRELOAD;
};
class ACE_optic_Arco_2D {
MACRO_PRELOAD;
};
class ACE_optic_Arco_PIP {
MACRO_PRELOAD;
};
class ACE_optic_MRCO_2D {
MACRO_PRELOAD;
};
class ACE_optic_MRCO_PIP {
MACRO_PRELOAD;
};
class ACE_optic_SOS_2D {
MACRO_PRELOAD;
};
class ACE_optic_SOS_PIP {
MACRO_PRELOAD;
};
class ACE_optic_LRPS_2D {
MACRO_PRELOAD;
};
class ACE_optic_LRPS_PIP {
MACRO_PRELOAD;
};
};
};

View File

@ -0,0 +1,188 @@
class RscOpticsValue;
class RscMapControl;
class RscText;
class RscInGameUI {
class RscUnitInfo;
class RscWeaponZeroing: RscUnitInfo {
class CA_Zeroing;
};
class ACE_RscWeaponZeroing: RscWeaponZeroing {
controls[] = {"CA_Zeroing","CA_FOVMode","ACE_DrawReticleHelper","ACE_ScriptedReticle"};
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;
style = 2;
colorText[] = {0,0,0,0};
x = 0;
y = 0;
w = 0;
h = 0;
};
class ACE_DrawReticleHelper: RscMapControl {
onDraw = QUOTE([ctrlParent (_this select 0)] call DFUNC(onDrawScope));
idc = -1;
w = 0;
h = 0;
};
class ACE_ScriptedReticle: RscText {
idc = 1713154;
style = 48;
size = 1;
sizeEx = 0;
text = QUOTE(PATHTOF(reticles\ace_shortdot_reticle_1.paa));
w = 0;
h = 0;
};
};
class ACE_RscWeapon_base: RscWeaponZeroing {
controls[] = {"CA_Zeroing","CA_FOVMode","ACE_DrawReticleHelper","ReticleDay","ReticleNight","BodyNight","BodyDay"}; // 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;
style = 2;
colorText[] = {0,0,0,0};
x = 0;
y = 0;
w = 0;
h = 0;
};
class ACE_DrawReticleHelper: RscMapControl {
onDraw = QUOTE([ctrlParent (_this select 0)] call DFUNC(onDrawScope2D));
idc = -1;
w = 0;
h = 0;
};
#define SIZEX 0.75/(getResolution select 5)
class ReticleDay: RscText {
idc = 1713001;
style = 48;
size = 0;
sizeEx = 1;
text = "";
colorText[] = {1,1,1,0};
colorBackground[] = {0,0,0,0};
x = safezoneX+0.5*safezoneW-0.5*SIZEX;
y = safezoneY+0.5*safezoneH-0.5*SIZEX*safezoneW/safezoneH;
w = SIZEX;
h = SIZEX*safezoneW/safezoneH;
};
class ReticleNight: ReticleDay {
idc = 1713002;
text = "";
};
#undef SIZEX
#define SIZEX 2*0.75/(getResolution select 5)
class BodyDay: ReticleDay {
idc = 1713005;
text = "";
x = safezoneX+0.5*safezoneW-0.5*SIZEX;
y = safezoneY+0.5*safezoneH-0.5*SIZEX*safezoneW/safezoneH;
w = SIZEX;
h = SIZEX*safezoneW/safezoneH;
};
class BodyNight: BodyDay {
idc = 1713006;
text = "";
};
};
class ACE_RscWeapon_Hamr: ACE_RscWeapon_base {
class ReticleDay: ReticleDay {
text = QUOTE(PATHTOF(reticles\hamr-reticle65_ca.paa));
};
class ReticleNight: ReticleNight {
text = QUOTE(PATHTOF(reticles\hamr-reticle65Illum_ca.paa));
};
class BodyDay: BodyDay {
text = QUOTE(PATHTOF(reticles\hamr-body_ca.paa));
};
class BodyNight: BodyNight {
text = QUOTE(PATHTOF(reticles\hamr-bodyNight_ca.paa));
};
};
class ACE_RscWeapon_Arco: ACE_RscWeapon_base {
class ReticleDay: ReticleDay {
text = QUOTE(PATHTOF(reticles\arco-reticle65_ca.paa));
};
class ReticleNight: ReticleNight {
text = QUOTE(PATHTOF(reticles\arco-reticle65Illum_ca.paa));
};
class BodyDay: BodyDay {
text = QUOTE(PATHTOF(reticles\arco-body_ca.paa));
};
class BodyNight: BodyNight {
text = QUOTE(PATHTOF(reticles\arco-bodyNight_ca.paa));
};
};
class ACE_RscWeapon_MRCO: ACE_RscWeapon_base {
class ReticleDay: ReticleDay {
text = QUOTE(PATHTOF(reticles\mrco-reticle556_ca.paa));
};
class ReticleNight: ReticleNight {
text = QUOTE(PATHTOF(reticles\mrco-reticle556Illum_ca.paa));
};
class BodyDay: BodyDay {
text = QUOTE(PATHTOF(reticles\mrco-body_ca.paa));
};
class BodyNight: BodyNight {
text = QUOTE(PATHTOF(reticles\mrco-bodyNight_ca.paa));
};
};
class ACE_RscWeapon_SOS: ACE_RscWeapon_base {
class ReticleDay: ReticleDay {
text = QUOTE(PATHTOF(reticles\sos-reticleMLR_ca.paa));
};
class ReticleNight: ReticleNight {
text = QUOTE(PATHTOF(reticles\sos-reticleMLRIllum_ca.paa));
};
class BodyDay: BodyDay {
text = QUOTE(PATHTOF(reticles\sos-body_ca.paa));
};
class BodyNight: BodyNight {
text = QUOTE(PATHTOF(reticles\sos-bodyNight_ca.paa));
};
};
};
/*
_ctrl = (D displayCtrl 1713006);
_sizeX = 1.54/(getResolution select 5);
_sizeY = _sizeX*safezoneW/safezoneH;
_ctrl ctrlSetPosition [
safezoneX+0.5*safezoneW-0.5*_sizeX,
safezoneY+0.5*safezoneH-0.5*_sizeY,
_sizeX,
_sizeY
];
_ctrl ctrlCommit 0
*/

View File

@ -0,0 +1,19 @@
class CfgVehicles {
class Box_NATO_Support_F;
class ACE_Box_Misc: Box_NATO_Support_F {
class TransportItems {
MACRO_ADDITEM(ACE_optic_Hamr_2D,2);
MACRO_ADDITEM(ACE_optic_Hamr_PIP,2);
MACRO_ADDITEM(ACE_optic_Arco_2D,2);
MACRO_ADDITEM(ACE_optic_Arco_PIP,2);
MACRO_ADDITEM(ACE_optic_MRCO_2D,2);
//MACRO_ADDITEM(ACE_optic_MRCO_PIP,2);
MACRO_ADDITEM(ACE_optic_SOS_2D,2);
MACRO_ADDITEM(ACE_optic_SOS_PIP,2);
MACRO_ADDITEM(ACE_optic_LRPS_2D,2);
MACRO_ADDITEM(ACE_optic_LRPS_PIP,2);
MACRO_ADDITEM(ACE_optic_DMS,2);
};
};
};

View File

@ -0,0 +1,303 @@
class CfgWeapons {
class ItemCore;
class InventoryOpticsItem_Base_F;
// zooming reticle scopes
class optic_DMS: ItemCore {
class ItemInfo: InventoryOpticsItem_Base_F {
class OpticsModes {
class Snip;
class Iron;
};
};
};
class ACE_optic_DMS: optic_DMS {
author = "$STR_ACE_Common_ACETeam";
_generalMacro = "ACE_optic_DMS";
scope = 1;
displayName = "LOCALIZE ACE DMS";
//descriptionShort = "$STR_A3_CFGWEAPONS_ACC_DMS1";
weaponInfoType = "ACE_RscWeaponZeroing";
class ItemInfo: ItemInfo {
modelOptics = QUOTE(PATHTOF(models\ace_shortdot_optics.p3d));
class OpticsModes: OpticsModes {
class Snip: Snip {
opticsZoomMin = 0.05;
opticsZoomMax = 0.3;
opticsZoomInit = 0.3;
discretefov[] = {};
modelOptics[] = {};
};
class Iron: Iron {};
};
};
};
// PIP scopes
class optic_Hamr: ItemCore {
class ItemInfo: InventoryOpticsItem_Base_F {
class OpticsModes {
class Hamr2Collimator;
class Hamr2Scope;
};
};
};
class ACE_optic_Hamr_2D: optic_Hamr {
GVAR(BodyDay) = QUOTE(PATHTOF(reticles\hamr-body_ca.paa));
GVAR(BodyNight) = QUOTE(PATHTOF(reticles\hamr-bodyNight_ca.paa));
GVAR(ReticleDay) = QUOTE(PATHTOF(reticles\hamr-reticle65_ca.paa));
GVAR(ReticleNight) = QUOTE(PATHTOF(reticles\hamr-reticle65Illum_ca.paa));
author = "$STR_ACE_Common_ACETeam";
_generalMacro = "ACE_optic_Hamr_2D";
displayName = "$STR_ACE_optic_hamr";
weaponInfoType = "ACE_RscWeapon_Hamr";
class ItemInfo: ItemInfo {
modelOptics = QUOTE(PATHTOF(models\ace_optics_reticle90.p3d));
class OpticsModes: OpticsModes {
class Hamr2Collimator: Hamr2Collimator {};
class Hamr2Scope: Hamr2Scope {
useModelOptics = 1;
opticsZoomInit = 0.0872664626;
opticsZoomMax = 0.0872664626;
opticsZoomMin = 0.0872664626;
opticsPPEffects[] = {"OpticsCHAbera5","OpticsBlur5","ACE_OpticsRadBlur1"};
opticsDisablePeripherialVision = 0;
visionMode[] = {"Normal","NVG"};
};
};
};
};
class ACE_optic_Hamr_PIP: ACE_optic_Hamr_2D {
author = "$STR_ACE_Common_ACETeam";
_generalMacro = "ACE_optic_Hamr_PIP";
scopeArsenal = 1;
displayName = "$STR_ACE_optic_hamr_pip";
class ItemInfo: ItemInfo {
modelOptics = QUOTE(PATHTOF(models\ace_optics_pip.p3d));
};
};
class optic_Arco: ItemCore {
class ItemInfo: InventoryOpticsItem_Base_F {
class OpticsModes {
class ARCO2collimator;
class ARCO2scope: ARCO2collimator {};
};
};
};
class ACE_optic_Arco_2D: optic_Arco {
GVAR(BodyDay) = QUOTE(PATHTOF(reticles\arco-body_ca.paa));
GVAR(BodyNight) = QUOTE(PATHTOF(reticles\arco-bodyNight_ca.paa));
GVAR(ReticleDay) = QUOTE(PATHTOF(reticles\arco-reticle65_ca.paa));
GVAR(ReticleNight) = QUOTE(PATHTOF(reticles\arco-reticle65Illum_ca.paa));
author = "$STR_ACE_Common_ACETeam";
_generalMacro = "ACE_optic_Arco_2D";
displayName = "$STR_ACE_optic_arco";
weaponInfoType = "ACE_RscWeapon_Arco";
class ItemInfo: ItemInfo {
modelOptics = QUOTE(PATHTOF(models\ace_optics_reticle90.p3d));
class OpticsModes: OpticsModes {
class ARCO2collimator: ARCO2collimator {};
class ARCO2scope: ARCO2scope {
useModelOptics = 1;
opticsZoomInit = 0.0872664626;
opticsZoomMax = 0.0872664626;
opticsZoomMin = 0.0872664626;
opticsPPEffects[] = {"OpticsCHAbera5","OpticsBlur5","ACE_OpticsRadBlur1"};
opticsDisablePeripherialVision = 0;
visionMode[] = {"Normal"};
};
};
};
};
class ACE_optic_Arco_PIP: ACE_optic_Arco_2D {
author = "$STR_ACE_Common_ACETeam";
_generalMacro = "ACE_optic_Arco_PIP";
scopeArsenal = 1;
displayName = "$STR_ACE_optic_arco_pip";
class ItemInfo: ItemInfo {
modelOptics = QUOTE(PATHTOF(models\ace_optics_pip.p3d));
};
};
class optic_MRCO: ItemCore {
class ItemInfo: InventoryOpticsItem_Base_F {
class OpticsModes {
class MRCOcq;
class MRCOscope;
};
};
};
class ACE_optic_MRCO_2D: optic_MRCO {
GVAR(BodyDay) = QUOTE(PATHTOF(reticles\mrco-body_ca.paa));
GVAR(BodyNight) = QUOTE(PATHTOF(reticles\mrco-bodyNight_ca.paa));
GVAR(ReticleDay) = QUOTE(PATHTOF(reticles\mrco-reticle556_ca.paa));
GVAR(ReticleNight) = QUOTE(PATHTOF(reticles\mrco-reticle556Illum_ca.paa));
author = "$STR_ACE_Common_ACETeam";
_generalMacro = "ACE_optic_MRCO_2D";
displayName = "$STR_ACE_optic_valdada";
weaponInfoType = "ACE_RscWeapon_MRCO";
class ItemInfo: ItemInfo {
modelOptics = QUOTE(PATHTOF(models\ace_optics_reticle90.p3d));
class OpticsModes: OpticsModes {
class MRCOcq: MRCOcq {};
class MRCOscope: MRCOscope {
useModelOptics = 1;
opticsZoomInit = 0.0872664626;
opticsZoomMax = 0.0872664626;
opticsZoomMin = 0.0872664626;
opticsPPEffects[] = {"OpticsCHAbera5","OpticsBlur5","ACE_OpticsRadBlur1"};
opticsDisablePeripherialVision = 0;
visionMode[] = {"Normal"};
};
};
};
};
class ACE_optic_MRCO_PIP: ACE_optic_MRCO_2D {
author = "$STR_ACE_Common_ACETeam";
_generalMacro = "ACE_optic_MRCO_PIP";
scope = 1;
scopeArsenal = 1;
displayName = "$STR_ACE_optic_valdada_pip";
class ItemInfo: ItemInfo {
modelOptics = QUOTE(PATHTOF(models\ace_optics_pip.p3d));
};
};
class optic_SOS: ItemCore {
class ItemInfo: InventoryOpticsItem_Base_F {
class OpticsModes {
class Snip;
class Iron;
};
};
};
class ACE_optic_SOS_2D: optic_SOS {
author = "$STR_ACE_Common_ACETeam";
_generalMacro = "ACE_optic_SOS_2D";
displayName = "$STR_ACE_optic_sos";
weaponInfoType = "ACE_RscWeapon_SOS";
class ItemInfo: ItemInfo {
class OpticsModes: OpticsModes {
class Snip: Snip {
modelOptics[] = {QUOTE(PATHTOF(models\ace_optics_reticle90.p3d)),QUOTE(PATHTOF(models\ace_optics_reticle90.p3d))};
opticsDisablePeripherialVision = 0;
};
class Iron: Iron {};
};
};
};
class ACE_optic_SOS_PIP: ACE_optic_SOS_2D {
GVAR(BodyDay) = QUOTE(PATHTOF(reticles\sos-body_ca.paa));
GVAR(BodyNight) = QUOTE(PATHTOF(reticles\sos-bodyNight_ca.paa));
GVAR(ReticleDay) = QUOTE(PATHTOF(reticles\sos-reticleMLR_ca.paa));
GVAR(ReticleNight) = QUOTE(PATHTOF(reticles\sos-reticleMLRIllum_ca.paa));
author = "$STR_ACE_Common_ACETeam";
_generalMacro = "ACE_optic_SOS_PIP";
scopeArsenal = 1;
displayName = "$STR_ACE_optic_sos_pip";
class ItemInfo: ItemInfo {
class OpticsModes: OpticsModes {
class Snip: Snip {
modelOptics[] = {QUOTE(PATHTOF(models\ace_optics_pip.p3d)),QUOTE(PATHTOF(models\ace_optics_pip.p3d))};
};
};
};
};
class optic_LRPS: ItemCore {
class ItemInfo: InventoryOpticsItem_Base_F {
class OpticsModes {
class Snip;
};
};
};
class ACE_optic_LRPS_2D: optic_LRPS {
GVAR(BodyDay) = QUOTE(PATHTOF(reticles\sos-body_ca.paa));
GVAR(BodyNight) = QUOTE(PATHTOF(reticles\sos-bodyNight_ca.paa));
GVAR(ReticleDay) = QUOTE(PATHTOF(reticles\sos-reticleMLR_ca.paa));
GVAR(ReticleNight) = QUOTE(PATHTOF(reticles\sos-reticleMLRIllum_ca.paa));
author = "$STR_ACE_Common_ACETeam";
_generalMacro = "ACE_optic_LRPS_2D";
displayName = "$STR_ACE_optic_lrps";
weaponInfoType = "ACE_RscWeapon_SOS";
class ItemInfo: ItemInfo {
class OpticsModes: OpticsModes {
class Snip: Snip {
modelOptics[] = {QUOTE(PATHTOF(models\ace_optics_reticle90.p3d)),QUOTE(PATHTOF(models\ace_optics_reticle90.p3d))};
useModelOptics = 1;
opticsZoomInit = 0.01234;
opticsZoomMax = 0.04673;
opticsZoomMin = 0.01234;
discreteFOV[] = {};
opticsPPEffects[] = {"OpticsCHAbera1","OpticsBlur1","ACE_OpticsRadBlur1"};
opticsDisablePeripherialVision = 0;
};
};
};
};
class ACE_optic_LRPS_PIP: ACE_optic_LRPS_2D {
author = "$STR_ACE_Common_ACETeam";
_generalMacro = "ACE_optic_LRPS_PIP";
scopeArsenal = 1;
displayName = "$STR_ACE_optic_lrps_pip";
class ItemInfo: ItemInfo {
class OpticsModes: OpticsModes {
class Snip: Snip {
modelOptics[] = {QUOTE(PATHTOF(models\ace_optics_pip.p3d)),QUOTE(PATHTOF(models\ace_optics_pip.p3d))};
};
};
};
};
};
class SlotInfo;
class CowsSlot: SlotInfo {
compatibleItems[] += {
"ACE_optic_Hamr_2D",
"ACE_optic_Hamr_PIP",
"ACE_optic_Arco_2D",
"ACE_optic_Arco_PIP",
"ACE_optic_MRCO_2D",
"ACE_optic_MRCO_PIP",
"ACE_optic_SOS_2D",
"ACE_optic_SOS_PIP",
"ACE_optic_LRPS_2D",
"ACE_optic_LRPS_PIP",
"ACE_optic_DMS"
};
};

View File

@ -0,0 +1,24 @@
// by commy2
#include "script_component.hpp"
if (!hasInterface) exitWith {};
0 = 0 spawn {
waituntil {!isNull ACE_player};
// PiP technique by BadBenson
GVAR(camera) = "camera" camCreate positioncameratoworld [0,0,0];
GVAR(camera) camSetFov 0.7;
GVAR(camera) camSetTarget ACE_player;
GVAR(camera) camCommit 1;
"ace_optics_rendertarget0" setPiPEffect [2, 1.0, 1.0, 1.0, 0.0, [0.0, 1.0, 0.0, 0.25], [1.0, 0.0, 1.0, 1.0], [0.199, 0.587, 0.114, 0.0]];
GVAR(camera) cameraEffect ["INTERNAL", "BACK", "ace_optics_rendertarget0"];
};
// save control for fired EH
["infoDisplayChanged", {
if (!isNull ((_this select 0) displayCtrl 1713001)) then {
uiNamespace setVariable [QGVAR(RscWeaponInfo2D), _this select 0];
};
}] call EFUNC(common,addEventHandler);

View File

@ -2,7 +2,8 @@
ADDON = false;
PREP(burstDispersion);
PREP(camShake);
PREP(handleFired);
PREP(onDrawScope);
PREP(onDrawScope2D);
ADDON = true;

34
addons/optics/config.cpp Normal file
View File

@ -0,0 +1,34 @@
#include "script_component.hpp"
class CfgPatches {
class ADDON {
units[] = {};
weapons[] = {
"ACE_optic_Hamr_2D",
"ACE_optic_Hamr_PIP",
"ACE_optic_Arco_2D",
"ACE_optic_Arco_PIP",
"ACE_optic_MRCO_2D",
//"ACE_optic_MRCO_PIP",
"ACE_optic_SOS_2D",
"ACE_optic_SOS_PIP",
"ACE_optic_LRPS_2D",
"ACE_optic_LRPS_PIP",
"ACE_optic_DMS"
};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common"};
author[] = {"Taosenai","KoffeinFlummi","commy2"};
authorUrl = "http://www.ryanschultz.org/tmr/";
VERSION_CONFIG;
};
};
#include "CfgEventHandlers.hpp"
#include "CfgOpticsEffect.hpp"
#include "CfgRscTitles.hpp"
#include "CfgVehicles.hpp"
#include "CfgWeapons.hpp"
#include "CfgPreloadTextures.hpp"

View File

@ -0,0 +1,111 @@
/*
* Original Author: Taosenai
* Adapted By: KoffeinFlummi, commy2
*
* Animates the scope when firing.
*
* Arguments:
* 0: Unit (Object)
* 1: Weapon (String)
* 2: Muzzle (String)
* 3: Mode (String)
* 4: Ammo (Object)
* 5: Magazine (String)
* 6: Projectile (Object)
*
* Return Value:
* None
*/
#include "script_component.hpp"
private ["_unit", "_weapon"];
_unit = _this select 0;
_weapon = _this select 1;
// check if compatible scope is used
private "_display";
_display = uiNamespace getVariable [QGVAR(RscWeaponInfo2D), displayNull];
if (isNull _display) exitWith {};
// Reduce the reticle movement as the player drops into lower, supported stances.
private "_recoilCoef";
_recoilCoef = switch (true) do {
case (isWeaponDeployed _unit): {0.1};
case (isWeaponRested _unit): {0.4};
default {1};
};
// Constants which determine how the scope recoils
private ["_recoilScope", "_reticleShiftX", "_reticleShiftY", "_scopeShiftX", "_scopeShiftY"];
_recoilScope = _recoilCoef * linearConversion [0, 1, random 1, SCOPE_RECOIL_MIN, SCOPE_RECOIL_MAX, false];
_reticleShiftX = _recoilCoef * linearConversion [0, 1, random 1, RETICLE_SHIFT_X_MIN, RETICLE_SHIFT_X_MAX, false];
_reticleShiftY = _recoilCoef * linearConversion [0, 1, random 1, RETICLE_SHIFT_Y_MIN, RETICLE_SHIFT_Y_MAX, false];
_scopeShiftX = _recoilCoef * linearConversion [0, 1, random 1, SCOPE_SHIFT_X_MIN, SCOPE_SHIFT_X_MAX, false];
_scopeShiftY = _recoilCoef * linearConversion [0, 1, random 1, SCOPE_SHIFT_Y_MIN, SCOPE_SHIFT_Y_MAX, false];
// Create and commit recoil effect
private ["_sizeX", "_sizeY"];
_sizeX = (0.75+_recoilScope)/(getResolution select 5);
_sizeY = _sizeX*safezoneW/safezoneH;
private "_positionReticle";
_positionReticle = [
safezoneX+0.5*safezoneW-0.5*(_sizeX+_reticleShiftX),
safezoneY+0.5*safezoneH-0.5*(_sizeY+_reticleShiftY),
_sizeX,
_sizeY
];
(_display displayCtrl 1713001) ctrlSetPosition _positionReticle;
(_display displayCtrl 1713002) ctrlSetPosition _positionReticle;
private "_positionBody";
_positionBody = [
safezoneX+0.5*safezoneW-0.5*(2*_sizeX+_scopeShiftX),
safezoneY+0.5*safezoneH-0.5*(2*_sizeY+_scopeShiftY),
2*_sizeX,
2*_sizeY
];
(_display displayCtrl 1713005) ctrlSetPosition _positionBody;
(_display displayCtrl 1713006) ctrlSetPosition _positionBody;
(_display displayCtrl 1713001) ctrlCommit 0;
(_display displayCtrl 1713002) ctrlCommit 0;
(_display displayCtrl 1713005) ctrlCommit 0;
(_display displayCtrl 1713006) ctrlCommit 0;
// Bring them all back
_sizeX = 0.75/(getResolution select 5);
_sizeY = _sizeX*safezoneW/safezoneH;
_positionReticle = [
safezoneX+0.5*safezoneW-0.5*_sizeX,
safezoneY+0.5*safezoneH-0.5*_sizeY,
_sizeX,
_sizeY
];
(_display displayCtrl 1713001) ctrlSetPosition _positionReticle;
(_display displayCtrl 1713002) ctrlSetPosition _positionReticle;
_positionBody = [
safezoneX+0.5*safezoneW-0.5*2*_sizeX,
safezoneY+0.5*safezoneH-0.5*2*_sizeY,
2*_sizeX,
2*_sizeY
];
(_display displayCtrl 1713005) ctrlSetPosition _positionBody;
(_display displayCtrl 1713006) ctrlSetPosition _positionBody;
(_display displayCtrl 1713001) ctrlCommit RECENTER_TIME;
(_display displayCtrl 1713002) ctrlCommit RECENTER_TIME;
(_display displayCtrl 1713005) ctrlCommit RECENTER_TIME;
(_display displayCtrl 1713006) ctrlCommit RECENTER_TIME;

View File

@ -0,0 +1,29 @@
// by commy2
#include "script_component.hpp"
disableSerialization;
private ["_display", "_control"];
_display = _this select 0;
_control = _display displayCtrl 1713154;
if (!ctrlShown (_display displayCtrl 154)) exitWith {
_control ctrlShow false;
};
private ["_sizeX", "_sizeY"];
_sizeX = (call EFUNC(common,getZoom))/4;
_sizeY = _sizeX*safezoneW/safezoneH;
_control ctrlSetPosition [
safezoneX+0.5*safezoneW-0.5*_sizeX,
safezoneY+0.5*safezoneH-0.5*_sizeY,
_sizeX,
_sizeY
];
_control ctrlCommit 0;
_control ctrlShow true;

View File

@ -0,0 +1,56 @@
// by commy2
#include "script_component.hpp"
disableSerialization;
private "_display";
_display = _this select 0;
if (!ctrlShown (_display displayCtrl 154)) exitWith {
(_display displayCtrl 1713001) ctrlShow false;
(_display displayCtrl 1713002) ctrlShow false;
(_display displayCtrl 1713005) ctrlShow false;
(_display displayCtrl 1713006) ctrlShow false;
};
GVAR(camera) setposATL positioncameratoworld [0,0,0.4];
GVAR(camera) camPrepareTarget positioncameratoworld [0,0,50];
GVAR(camera) camCommitPrepared 0;
// @todo, check if that needs to be done at all
if (cameraView == "GUNNER") then {
GVAR(camera) camsetFOV 0.7;
GVAR(camera) camcommit 0;
} else {
GVAR(camera) camsetFOV 0.01;
GVAR(camera) camcommit 0;
};
// @todo, all weapon types
private "_optic";
_optic = (primaryWeaponItems ACE_player) select 2;
// calculate lighting
private ["_dayOpacity", "_nightOpacity"];
_dayOpacity = call EFUNC(common,ambientBrightness);
_nightOpacity = [1,0] select (_dayOpacity == 1);
// Apply lighting and make layers visible
(_display displayCtrl 1713001) ctrlSetTextColor [1,1,1,1];
(_display displayCtrl 1713002) ctrlSetTextColor [1,1,1,_nightOpacity];
(_display displayCtrl 1713005) ctrlSetTextColor [1,1,1,_dayOpacity];
(_display displayCtrl 1713006) ctrlSetTextColor [1,1,1,_nightOpacity];
/*
(_display displayCtrl 1713001) ctrlCommit 0;
(_display displayCtrl 1713002) ctrlCommit 0;
(_display displayCtrl 1713005) ctrlCommit 0;
(_display displayCtrl 1713006) ctrlCommit 0;
*/
(_display displayCtrl 1713001) ctrlShow true;
(_display displayCtrl 1713002) ctrlShow true;
(_display displayCtrl 1713005) ctrlShow true;
(_display displayCtrl 1713006) ctrlShow true;

View File

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

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More