Merge pull request #3795 from acemod/deprecate-components

Add Deprecate components support
This commit is contained in:
Glowbal 2016-05-31 10:40:24 +02:00
commit d7b239f487
4 changed files with 66 additions and 3 deletions

View File

@ -24,6 +24,7 @@ PREP(debugModule);
PREP(defineVariable); PREP(defineVariable);
PREP(deviceKeyFindValidIndex); PREP(deviceKeyFindValidIndex);
PREP(deviceKeyRegisterNew); PREP(deviceKeyRegisterNew);
PREP(deprecateComponent);
PREP(disableAI); PREP(disableAI);
PREP(disableUserInput); PREP(disableUserInput);
PREP(displayIcon); PREP(displayIcon);

View File

@ -0,0 +1,63 @@
/*
* Author: Glowbal
* Mark a component as deprecated and switches it to a new component if that is available
*
* Arguments:
* 0: Component <Array>
* 1: New component <Array>
* 2: Version when the compent will be removed <String>
*
* Return Value:
* Replaced by new component <Boolean>
*
* Public: No
*
* Example:
* [["ace_sitting", "ace_sitting_enabled"], ["acex_sitting", "acex_sitting_enabled"], "3.7.0"] call ace_common_fnc_deprecateComponent;
*/
#include "script_component.hpp"
params ["_oldComponent", "_newComponent", "_version"];
_oldComponent params ["_oldComponentName", "_oldSettingName"];
_newComponent params ["_newComponentName", "_newSettingName"];
private _isReplacementAvailable = isClass (configFile >> "CfgPatches" >> _newComponentName);
private _isDeprecatedLoaded = missionNamespace getvariable [_oldSettingName, false];
private _isReplacementLoaded = missionNamespace getvariable [_newSettingName, false];
if (_isDeprecatedLoaded && {_isReplacementAvailable} && {!_isReplacementLoaded}) then {
[_newSettingName, true, true, true] call FUNC(setSetting);
};
if (_isDeprecatedLoaded && {!_isReplacementLoaded}) then {
private _componentVersion = getText (configFile >> "CfgPatches" >> _oldComponentName >> "version");
((_componentVersion splitString ".") apply {parseNumber _x}) params ["_componentMajor", "_componentMinor", "_componentPatch"];
((_version splitString ".") apply {parseNumber _x}) params ["_major", "_minor", "_patch"];
switch (true) do {
case (_componentMajor >= _major && {_componentMinor >= _minor} && {_componentPatch >= _patch}): { // Removed from this version
private _message = format[
"Component %1 is deprecated. It has been replaced by %2. The component %1 is no longer usable on this version. ", _oldComponentName, _newComponentName, _version];
systemChat format["ACE [ERROR] - %1", _message];
ACE_LOGERROR(_message);
};
case (_componentMajor >= _major && {_componentMinor >= _minor-1}): { // Removed the next this version
private _message = format[
"Component %1 is deprecated. It is replaced by %2. Please disable %1 and make use of %2. "
+ "The component (%1) will no longer be available from version %3 and later.", _oldComponentName, _newComponentName, _version];
systemChat format["ACE [WARNING] - %1", _message];
ACE_LOGWARNING(_message);
};
case (_componentMajor == _major && {_componentMinor >= _minor - 2}): { // we are in a version leading up to removal
private _message = format[
"Component %1 is deprecated. It is replaced by %2. Please disable %1 and make use of %2. "
+ "The component (%1) will no longer be available from version %3 and later.", _oldComponentName, _newComponentName, _version];
ACE_LOGWARNING(_message);
};
default {
};
};
};
_isReplacementAvailable;

View File

@ -8,7 +8,7 @@ class CfgVehicles {
category = "ACE"; category = "ACE";
displayName = CSTRING(ModuleDisplayName); displayName = CSTRING(ModuleDisplayName);
function = QFUNC(moduleInit); function = QFUNC(moduleInit);
scope = 2; scope = 1;
isGlobal = 1; isGlobal = 1;
isSingular = 1; isSingular = 1;
icon = QPATHTOF(UI\Icon_Module_Sitting_ca.paa); icon = QPATHTOF(UI\Icon_Module_Sitting_ca.paa);

View File

@ -4,8 +4,7 @@
if (!hasInterface) exitWith {}; if (!hasInterface) exitWith {};
["SettingsInitialized", { ["SettingsInitialized", {
TRACE_1("SettingInit", GVAR(enable)); if ([[QUOTE(ADDON), QGVAR(enable)], ["acex_sitting", "acex_sitting_enable"], "3.8.0"] call EFUNC(common,deprecateComponent)) exitwith {};
//If not enabled, then do not add CanInteractWith Condition or event handlers: //If not enabled, then do not add CanInteractWith Condition or event handlers:
if (!GVAR(enable)) exitWith {}; if (!GVAR(enable)) exitWith {};