Safeguard against removal of all modes

This commit is contained in:
SilentSpike 2015-07-21 21:51:32 +01:00
parent 53dc519336
commit 9f0415b9fa
4 changed files with 48 additions and 20 deletions

View File

@ -27,9 +27,9 @@
params [["_newMode",GVAR(camMode)], ["_newUnit",GVAR(camUnit)], ["_newVision",GVAR(camVision)]];
// If new mode isn't available then keep current
// If new mode isn't available then keep current (unless current also isn't)
if !(_newMode in GVAR(availableModes)) then {
_newMode = GVAR(camMode);
_newMode = GVAR(availableModes) select ((GVAR(availableModes) find GVAR(camMode)) max 0);
};
// When no units available to spectate, exit to freecam
@ -55,6 +55,11 @@ if (_newMode == 0) then { // Free
showCinemaBorder false;
cameraEffectEnableHUD false;
// If new vision isn't available then keep current (unless current also isn't)
if !(_newVision in GVAR(availableVisions)) then {
_newVision = GVAR(availableVisions) select ((GVAR(availableVisions) find GVAR(camVision)) max 0);
};
// Vision mode only applies to free cam
if (_newVision < 0) then {
false setCamUseTi 0;

View File

@ -22,16 +22,27 @@
#include "script_component.hpp"
params [["_addModes",[],[[]]], ["_removeModes",[],[[]]]];
private ["_newModes","_currentModes"];
_currentModes = GVAR(availableModes);
// Restrict additions to only possible values
_addModes = _addModes arrayIntersect [0,1,2];
_addModes sort true;
_newModes = _addModes arrayIntersect [0,1,2];
_newModes append (_currentModes - _removeModes);
// Remove and add new modes
GVAR(availableModes) = GVAR(availableModes) - _removeModes;
_newModes arrayIntersect _newModes;
_newModes sort true;
GVAR(availableModes) append _addModes;
GVAR(availableModes) arrayIntersect GVAR(availableModes);
GVAR(availableModes) sort true;
// Can't become an empty array
if (_newModes isEqualTo []) then {
[["[ACE Spectator]","Cannot remove all camera modes"],true,10] call EFUNC(common,displayStructuredText);
} else {
GVAR(availableModes) = _newModes;
};
GVAR(availableModes)
// Update camera in case of change
if !(isNil QGVAR(camera)) then {
[] call FUNC(transitionCamera);
};
_newModes

View File

@ -11,7 +11,7 @@
* - 3: Black Hot / Darker Green cold
* - 4: Light Red Hot / Darker Red Cold
* - 5: Black Hot / Darker Red Cold
* - 6: White Hot . Darker Red Col
* - 6: White Hot / Darker Red Cold
* - 7: Thermal (Shade of Red and Green, Bodies are white)
*
* Arguments:
@ -30,15 +30,27 @@
#include "script_component.hpp"
params [["_addModes",[],[[]]], ["_removeModes",[],[[]]]];
private ["_newModes","_currentModes"];
_currentModes = GVAR(availableVisions);
// Restrict additions to only possible values
_addModes = _addModes arrayIntersect [-2,-1,0,1,2,3,4,5,6,7];
_newModes = _addModes arrayIntersect [-2,-1,0,1,2,3,4,5,6,7];
_newModes append (_currentModes - _removeModes);
// Remove and add new modes
GVAR(availableVisions) = GVAR(availableVisions) - _removeModes;
_newModes arrayIntersect _newModes;
_newModes sort true;
GVAR(availableVisions) append _addModes;
GVAR(availableVisions) arrayIntersect GVAR(availableVisions);
GVAR(availableVisions) sort true;
// Can't become an empty array
if (_newModes isEqualTo []) then {
[["[ACE Spectator]","Cannot remove all vision modes"],true,10] call EFUNC(common,displayStructuredText);
} else {
GVAR(availableVisions) = _newModes;
};
GVAR(availableVisions)
// Update camera in case of change
if !(isNil QGVAR(camera)) then {
[] call FUNC(transitionCamera);
};
_newModes

View File

@ -2,7 +2,7 @@
<Project name="ACE">
<Package name="Spectator">
<Key ID="STR_ACE_Spectator_Settings_DisplayName">
<English>Spectator Setings</English>
<English>Spectator Settings</English>
</Key>
<Key ID="STR_ACE_Spectator_Settings_Descripton">
<English>Configure how the spectator system will operate by default.</English>