ACE3/addons/repair/functions/fnc_addRepairActions.sqf
Glowbal 83f46be990 Fixes and improvements for the repair module
1. Added full repair,
2. Added missing settings to modules and settings framework,
3. added assign engineer module.
4. Fixed animation bug
2015-08-14 20:49:51 +02:00

125 lines
5.2 KiB
Plaintext

/*
* Author: commy2
* Called from init eventhandler. Checks if the vehicles class already has the actions initialized. Otherwise add all available repair options.
*
* Arguments:
* 0: vehicle <OBJECT>
*
* Return Value:
* NONE
*/
#include "script_component.hpp"
#define TRACK_HITPOINTS ["HitLTrack", "HitRTrack"]
params ["_vehicle"];
TRACE_1("params", _vehicle);
private ["_type", "_initializedClasses"];
_type = typeOf _vehicle;
_initializedClasses = GETMVAR(GVAR(initializedClasses),[]);
// do nothing if the class is already initialized
if (_type in _initializedClasses) exitWith {};
// get all hitpoints
private "_hitPoints";
_hitPoints = [_vehicle] call EFUNC(common,getHitPointsWithSelections) select 0;
// get hitpoints of wheels with their selections
private ["_wheelHitPointsWithSelections", "_wheelHitPoints", "_wheelHitPointSelections"];
_wheelHitPointsWithSelections = [_vehicle] call FUNC(getWheelHitPointsWithSelections);
_wheelHitPoints = _wheelHitPointsWithSelections select 0;
_wheelHitPointSelections = _wheelHitPointsWithSelections select 1;
// add repair events to this vehicle class
{
if (_x in _wheelHitPoints) then {
// add wheel repair action
private ["_icon", "_selection"];
_icon = QUOTE(PATHTOF(ui\tire_ca.paa));
_icon = "A3\ui_f\data\igui\cfg\actions\repair_ca.paa";
// textDefault = "<img image='\A3\ui_f\data\igui\cfg\actions\repair_ca.paa' size='1.8' shadow=2 />";
_selection = _wheelHitPointSelections select (_wheelHitPoints find _x);
private ["_name", "_text", "_condition", "_statement"];
// remove wheel action
_name = format ["Remove_%1", _x];
_text = localize "STR_ACE_Repair_RemoveWheel";
_condition = {[_this select 1, _this select 0, _this select 2 select 0, "RemoveWheel"] call DFUNC(canRepair)};
_statement = {[_this select 1, _this select 0, _this select 2 select 0, "RemoveWheel"] call DFUNC(repair)};
private "_action";
_action = [_name, _text, _icon, _statement, _condition, {}, [_x], _selection, 2] call EFUNC(interact_menu,createAction);
[_type, 0, [], _action] call EFUNC(interact_menu,addActionToClass);
// replace wheel action
_name = format ["Replace_%1", _x];
_text = localize LSTRING(ReplaceWheel);
_condition = {[_this select 1, _this select 0, _this select 2 select 0, "ReplaceWheel"] call DFUNC(canRepair)};
_statement = {[_this select 1, _this select 0, _this select 2 select 0, "ReplaceWheel"] call DFUNC(repair)};
_action = [_name, _text, _icon, _statement, _condition, {}, [_x], _selection, 2] call EFUNC(interact_menu,createAction);
[_type, 0, [], _action] call EFUNC(interact_menu,addActionToClass);
} else {
// exit if the hitpoint is in the blacklist, e.g. glasses
if (_x in IGNORED_HITPOINTS) exitWith {};
// exit if the hitpoint is virtual
if (isText (configFile >> "CfgVehicles" >> _type >> "HitPoints" >> _x >> "depends")) exitWith {};
// add misc repair action
private ["_name", "_text", "_icon", "_selection", "_condition", "_statement"];
_name = format ["Repair_%1", _x];
_text = format ["STR_ACE_Repair_%1", _x];
if (isLocalized _text) then {
_text = format [localize LSTRING(RepairHitpoint), localize _text];
} else {
_text = format [localize LSTRING(RepairHitpoint), _x];
};
_icon = "A3\ui_f\data\igui\cfg\actions\repair_ca.paa";
_selection = "";
_condition = {[_this select 1, _this select 0, _this select 2 select 0, _this select 2 select 1] call DFUNC(canRepair)};
_statement = {[_this select 1, _this select 0, _this select 2 select 0, _this select 2 select 1] call DFUNC(repair)};
if (_x in TRACK_HITPOINTS) then {
if (_x == "HitLTrack") then {
_selection = [-1.75, 0, -1.75];
} else {
_selection = [1.75, 0, -1.75];
};
private "_action";
_action = [_name, _text, _icon, _statement, _condition, {}, [_x, "RepairTrack"], _selection, 4] call EFUNC(interact_menu,createAction);
[_type, 0, [], _action] call EFUNC(interact_menu,addActionToClass);
} else {
private "_action";
_action = [_name, _text, _icon, _statement, _condition, {}, [_x, "MiscRepair"], _selection, 4] call EFUNC(interact_menu,createAction);
[_type, 0, ["ACE_MainActions", QGVAR(Repair)], _action] call EFUNC(interact_menu,addActionToClass);
};
};
} forEach _hitPoints;
private ["_action", "_condition", "_statement"];
_condition = {[_this select 1, _this select 0, _this select 2 select 0, _this select 2 select 1] call DFUNC(canRepair)};
_statement = {[_this select 1, _this select 0, _this select 2 select 0, _this select 2 select 1] call DFUNC(repair)};
_action = [QGVAR(fullRepair), localize LSTRING(fullRepair), "A3\ui_f\data\igui\cfg\actions\repair_ca.paa", _statement, _condition, {}, ["", "fullRepair"], "", 4] call EFUNC(interact_menu,createAction);
[_type, 0, ["ACE_MainActions", QGVAR(Repair)], _action] call EFUNC(interact_menu,addActionToClass);
// set class as initialized
_initializedClasses pushBack _type;
SETMVAR(GVAR(initializedClasses),_initializedClasses);