forge/arma/client/addons/garage/functions/fnc_initHelperService.sqf
2026-03-27 19:00:32 -05:00

170 lines
6.2 KiB
Plaintext

#include "..\script_component.hpp"
/*
* File: fnc_initHelperService.sqf
* Author: IDSolutions
* Date: 2026-03-27
* Public: No
*
* Description:
* Initializes the garage helper service for vehicle metadata and UI-friendly shaping.
*
* Arguments:
* None
*
* Return Value:
* Garage helper service object [HASHMAP OBJECT]
*
* Example:
* call forge_client_garage_fnc_initHelperService;
*/
#pragma hemtt ignore_variables ["_self"]
GVAR(GarageHelperServiceBaseClass) = compileFinal createHashMapFromArray [
["#type", "GarageHelperServiceBaseClass"],
["resolveCategory", compileFinal {
params [["_className", "", [""]]];
if (_className isEqualTo "") exitWith { "other" };
switch (true) do {
case (_className isKindOf ["Car", configFile >> "CfgVehicles"]): { "car" };
case (_className isKindOf ["Tank", configFile >> "CfgVehicles"]): { "armor" };
case (_className isKindOf ["Helicopter", configFile >> "CfgVehicles"]): { "air" };
case (_className isKindOf ["Plane", configFile >> "CfgVehicles"]): { "air" };
case (_className isKindOf ["Ship", configFile >> "CfgVehicles"]): { "naval" };
default { "other" };
}
}],
["resolveDisplayName", compileFinal {
params [["_className", "", [""]]];
private _displayName = getText (configFile >> "CfgVehicles" >> _className >> "displayName");
if (_displayName isEqualTo "") then {
_displayName = _className;
};
_displayName
}],
["resolvePicture", compileFinal {
params [["_className", "", [""]]];
private _picture = getText (configFile >> "CfgVehicles" >> _className >> "editorPreview");
if (_picture isEqualTo "") then {
_picture = getText (configFile >> "CfgVehicles" >> _className >> "picture");
};
_picture
}],
["buildHitPointRows", compileFinal {
params [["_hitPoints", createHashMap, [createHashMap]]];
private _rows = [];
private _names = _hitPoints getOrDefault ["names", []];
private _selections = _hitPoints getOrDefault ["selections", []];
private _values = _hitPoints getOrDefault ["values", []];
private _count = count _names;
for "_index" from 0 to (_count - 1) do {
private _rowName = _names param [_index, ""];
_rows pushBack (createHashMapFromArray [
["name", _rowName],
["selection", _selections param [_index, ""]],
["value", _values param [_index, 0]]
]);
};
_rows
}],
["resolveHealth", compileFinal {
params [["_damage", 0, [0]], ["_hitPointRows", [], [[]]]];
private _worstHitPoint = 0;
{
private _value = _x getOrDefault ["value", 0];
if (_value > _worstHitPoint) then {
_worstHitPoint = _value;
};
} forEach _hitPointRows;
1 - ((_damage max _worstHitPoint) min 1)
}],
["buildStoredVehicle", compileFinal {
params [["_plate", "", [""]], ["_vehicleData", createHashMap, [createHashMap]]];
private _className = _vehicleData getOrDefault ["classname", ""];
private _damage = _vehicleData getOrDefault ["damage", 0];
private _fuel = _vehicleData getOrDefault ["fuel", 0];
private _hitPoints = _vehicleData getOrDefault ["hit_points", createHashMap];
private _hitPointRows = _self call ["buildHitPointRows", [_hitPoints]];
createHashMapFromArray [
["entryKind", "stored"],
["plate", _plate],
["classname", _className],
["displayName", _self call ["resolveDisplayName", [_className]]],
["picture", _self call ["resolvePicture", [_className]]],
["category", _self call ["resolveCategory", [_className]]],
["damage", _damage],
["fuel", _fuel],
["health", _self call ["resolveHealth", [_damage, _hitPointRows]]],
["hitPoints", _hitPointRows]
]
}],
["buildNearbyVehicle", compileFinal {
params [
["_vehicle", objNull, [objNull]],
["_origin", [], [[]]]
];
if (isNull _vehicle) exitWith { createHashMap };
private _className = typeOf _vehicle;
private _rawHitPoints = getAllHitPointsDamage _vehicle;
private _hitPointRows = [];
if (_rawHitPoints isEqualType [] && { count _rawHitPoints >= 3 }) then {
private _names = _rawHitPoints param [0, []];
private _selections = _rawHitPoints param [1, []];
private _values = _rawHitPoints param [2, []];
private _count = count _names;
for "_index" from 0 to (_count - 1) do {
_hitPointRows pushBack (createHashMapFromArray [
["name", _names param [_index, ""]],
["selection", _selections param [_index, ""]],
["value", _values param [_index, 0]]
]);
};
};
private _damage = damage _vehicle;
private _distance = if (_origin isEqualType [] && { count _origin >= 2 }) then {
_vehicle distance2D _origin
} else {
_vehicle distance2D player
};
private _ownerUid = _vehicle getVariable ["forge_garage_owner_uid", ""];
private _plate = _vehicle getVariable ["forge_garage_plate", ""];
createHashMapFromArray [
["entryKind", "nearby"],
["netId", netId _vehicle],
["plate", _plate],
["classname", _className],
["displayName", _self call ["resolveDisplayName", [_className]]],
["picture", _self call ["resolvePicture", [_className]]],
["category", _self call ["resolveCategory", [_className]]],
["damage", _damage],
["fuel", fuel _vehicle],
["health", _self call ["resolveHealth", [_damage, _hitPointRows]]],
["hitPoints", _hitPointRows],
["distance", _distance],
["ownerUid", _ownerUid],
["isEmpty", crew _vehicle isEqualTo []]
]
}]
];
GVAR(GarageHelperService) = createHashMapObject [GVAR(GarageHelperServiceBaseClass)];
GVAR(GarageHelperService)