diff --git a/addons/arsenal/XEH_PREP.hpp b/addons/arsenal/XEH_PREP.hpp index b640f3d051..4b24b7731e 100644 --- a/addons/arsenal/XEH_PREP.hpp +++ b/addons/arsenal/XEH_PREP.hpp @@ -33,6 +33,7 @@ PREP(onSelChangedLeft); PREP(onSelChangedLoadouts); PREP(onSelChangedRight); PREP(onSelChangedRightListnBox); +PREP(open3DEN); PREP(openBox); PREP(removeBox); PREP(removeVirtualItems); diff --git a/addons/arsenal/XEH_postInit.sqf b/addons/arsenal/XEH_postInit.sqf index 436ac7df03..402dded7c2 100644 --- a/addons/arsenal/XEH_postInit.sqf +++ b/addons/arsenal/XEH_postInit.sqf @@ -2,7 +2,6 @@ #include "defines.hpp" GVAR(EH_ID) = 0; -GVAR(modList) = ["","curator","kart","heli","mark","expansion","expansionpremium"]; GVAR(lastSearchTextLeft) = ""; GVAR(lastSearchTextRight) = ""; diff --git a/addons/arsenal/XEH_preInit.sqf b/addons/arsenal/XEH_preInit.sqf index b8d730f31d..d60eb63ade 100644 --- a/addons/arsenal/XEH_preInit.sqf +++ b/addons/arsenal/XEH_preInit.sqf @@ -7,6 +7,8 @@ PREP_RECOMPILE_START; PREP_RECOMPILE_END; // Arsenal +GVAR(modList) = ["","curator","kart","heli","mark","expansion","expansionpremium"]; + [QGVAR(camInverted), "CHECKBOX", "Invert camera controls", "ACE3 Arsenal", false] call CBA_Settings_fnc_init; // TBL [QGVAR(canUseCurrentMagTab), "CHECKBOX", "Can use currentMag tab", "ACE3 Arsenal", false] call CBA_Settings_fnc_init; // TBL [QGVAR(enableModIcons), "CHECKBOX", "Enable mod logos", "ACE3 Arsenal", true] call CBA_Settings_fnc_init; // TBL diff --git a/addons/arsenal/functions/fnc_addListBoxItem.sqf b/addons/arsenal/functions/fnc_addListBoxItem.sqf index 2890f72d1c..2ac5efe9f3 100644 --- a/addons/arsenal/functions/fnc_addListBoxItem.sqf +++ b/addons/arsenal/functions/fnc_addListBoxItem.sqf @@ -25,7 +25,6 @@ if (_cachedItemInfo isEqualTo []) then {//Not in cache. So get info and put into }; }; - if (_dlcName != "") then { _cachedItemInfo set [2, (modParams [_dlcName,["logo"]]) param [0,""]];//mod picture _modID = GVAR(modList) find _dlcName; diff --git a/addons/arsenal/functions/fnc_onArsenalClose.sqf b/addons/arsenal/functions/fnc_onArsenalClose.sqf index 86aca3d4a9..de65bdc71a 100644 --- a/addons/arsenal/functions/fnc_onArsenalClose.sqf +++ b/addons/arsenal/functions/fnc_onArsenalClose.sqf @@ -9,7 +9,27 @@ camDestroy GVAR(camera); GVAR(center) switchCamera GVAR(cameraView); deleteVehicle GVAR(cameraHelper); +if (is3DEN) then { + + GVAR(centerOrigin) setUnitLoadout (getUnitLoadout GVAR(center)); + GVAR(centerOrigin) setFace GVAR(currentFace); + GVAR(centerOrigin) setSpeaker GVAR(currentVoice); + + deleteVehicle GVAR(sphere); + deleteVehicle GVAR(light); + deleteVehicle GVAR(center); + + GVAR(centerOrigin) = nil; + GVAR(sphere) = nil; + GVAR(light) = nil; + + get3DENCamera cameraEffect ["internal","back"]; + ["ShowInterface",true] call bis_fnc_3DENInterface; + GVAR(visionMode) call bis_fnc_3DENVisionMode; +}; + if (isMultiplayer) then { + [QGVAR(broadcastFace), [GVAR(center), GVAR(currentFace)], QGVAR(center) + "_face"] call CBA_fnc_globalEventJIP; [QGVAR(center) + "_face", GVAR(center)] call CBA_fnc_removeGlobalEventJIP; diff --git a/addons/arsenal/functions/fnc_onArsenalOpen.sqf b/addons/arsenal/functions/fnc_onArsenalOpen.sqf index e57ff89c89..a001faede3 100644 --- a/addons/arsenal/functions/fnc_onArsenalOpen.sqf +++ b/addons/arsenal/functions/fnc_onArsenalOpen.sqf @@ -254,6 +254,43 @@ showHUD false; private _mouseAreaCtrl = _display displayCtrl IDC_mouseArea; ctrlSetFocus _mouseAreaCtrl; +// 3DEN support, lifted from BIS_fnc_arsenal +if (is3DEN) then { + + GVAR(centerOrigin) = GVAR(center); + private _centerPos = position GVAR(centerOrigin); + _centerPos set [2,500]; + GVAR(sphere) = createVehicle ["Sphere_3DEN", _centerPos, [], 0, "none"]; + GVAR(sphere) setPosAtl _centerPos; + GVAR(sphere) setDir 0; + GVAR(sphere) setObjectTexture [0,"#(argb,8,8,3)color(0.93,1.0,0.98,0.028,co)"]; + GVAR(sphere) setObjectTexture [1,"#(argb,8,8,3)color(0.93,1.0,0.98,0.01,co)"]; + + GVAR(center) = createAgent [typeOf GVAR(centerOrigin), position GVAR(centerOrigin), [], 0, "none"]; + GVAR(center) setPosAtl getPosAtl GVAR(sphere); + GVAR(center) setDir 0; + GVAR(center) switchMove animationState GVAR(centerOrigin); + GVAR(center) switchAction "playerstand"; + GVAR(center) enableSimulation false; + + GVAR(center) setUnitLoadout (getUnitLoadout GVAR(centerOrigin)); + GVAR(center) setFace GVAR(currentFace); + GVAR(center) setSpeaker GVAR(currentVoice); + + //--- Create light for night editing (code based on BIS_fnc_3DENFlashlight) + private _intensity = 20; + GVAR(light) = "#lightpoint" createVehicle _centerPos; + GVAR(light) setLightBrightness _intensity; + GVAR(light) setLightAmbient [1,1,1]; + GVAR(light) setLightColor [0,0,0]; + GVAR(light) lightAttachObject [GVAR(sphere), [0, 0, -_intensity * 7]]; + + //--- Use the same vision mode as in Eden + GVAR(visionMode)= -2 call bis_fnc_3DENVisionMode; + ["ShowInterface",false] spawn bis_fnc_3DENInterface; + if (get3denactionstate "togglemap" > 0) then {do3DENAction "togglemap";}; +}; + //--------------- Init camera GVAR(cameraPosition) = [5,0,0,[0,0,0.85]]; diff --git a/addons/arsenal/functions/fnc_open3DEN.sqf b/addons/arsenal/functions/fnc_open3DEN.sqf new file mode 100644 index 0000000000..88229cf790 --- /dev/null +++ b/addons/arsenal/functions/fnc_open3DEN.sqf @@ -0,0 +1,4 @@ +#include "script_component.hpp" + +private _entity = (uinamespace getvariable ["bis_fnc_3DENEntityMenu_data",[]]) param [1, objnull]; +[_entity, _entity, true] call FUNC(openBox); diff --git a/addons/arsenal/functions/fnc_updateCamPos.sqf b/addons/arsenal/functions/fnc_updateCamPos.sqf index 05f32a17de..1bee0ae2da 100644 --- a/addons/arsenal/functions/fnc_updateCamPos.sqf +++ b/addons/arsenal/functions/fnc_updateCamPos.sqf @@ -12,4 +12,21 @@ GVAR(camera) setVectorDirAndUp [vectorDir GVAR(cameraHelper), vectorUp GVAR(came if ((getPosAsl GVAR(camera) select 2) < (getPosAsl GVAR(center) select 2)) then { private _disCoef = ((getPosAsl GVAR(cameraHelper) select 2) - (getPosAsl GVAR(center) select 2)) / ((getPosAsl GVAR(cameraHelper) select 2) - (getPosAsl GVAR(camera) select 2) + 0.001); GVAR(camera) setPos (GVAR(cameraHelper) modelToWorldVisual [0, -_distance * _disCoef, 0]); +}; + +if (is3DEN) then { + for "_x" from -5 to 5 step 1 do { + drawLine3D [ + GVAR(sphere) modelToWorld [_x, -5, 0], + GVAR(sphere) modelToWorld [_x, +5, 0], + [0.03, 0.03, 0.03, 1] + ]; + }; + for "_y" from -5 to 5 step 1 do { + drawLine3D [ + GVAR(sphere) modelToWorld [-5, _y, 0], + GVAR(sphere) modelToWorld [+5, _y, 0], + [0.03, 0.03, 0.03, 1] + ]; + }; }; \ No newline at end of file diff --git a/addons/arsenal/ui/RscCommon.hpp b/addons/arsenal/ui/RscCommon.hpp index f74326bcfb..2a88204d7b 100644 --- a/addons/arsenal/ui/RscCommon.hpp +++ b/addons/arsenal/ui/RscCommon.hpp @@ -266,3 +266,13 @@ class ctrlMapEmpty; class ctrlMapMain; class ctrlListNBox; class ctrlCheckboxToolbar; + +class Display3DEN { + class ContextMenu :ctrlMenu { + class Items { + class Arsenal { + action= QUOTE(call FUNC(open3DEN)); + }; + }; + }; +};