// call compileScript ["z\ace\addons\refuel\dev\exportTerrainRefuelPositions.sqf"] // can be run in Eden Editor console #include "\z\ace\addons\refuel\script_component.hpp" { if (!isArray (configFile >> QGVAR(positions) >> configName _x)) then { WARNING_1("need configs on [%1]",configName _x); }; } forEach ("true" configClasses (configFile >> "CfgWorldList")); private _basePumps = []; private _totalCount = 0; private _posCount = 0; private _message = ""; private _halfWorldSize = worldSize / 2; private _worldCenter = [_halfWorldSize, _halfWorldSize]; _halfWorldSize = _halfWorldSize * sqrt 2; private _baseStaticClasses = keys (uiNamespace getVariable QGVAR(cacheRefuelClassesBaseStatic)); private _class = ""; private _objects = []; private _positions = []; private _object = objNull; private _pos = []; { _class = _x; _objects = _worldCenter nearObjects [_class, _halfWorldSize]; if (_objects isEqualTo []) then { continue; }; ADD(_totalCount,count _objects); _positions = []; { _object = _x; _pos = ASLToAGL getPosASL _object; if (-1 < _positions findIf {60 > _x distance _pos && {20 < _x distance _pos}}) then { _message = "INCREASE DISTANCE " + str _pos; }; if (-1 == _positions findIf {20 > _x distance _pos}) then { _positions pushBack (_pos apply {round _x}); INC(_posCount); }; } forEach _objects; _positions sort true; // sort positions by smallest first _basePumps pushBack [_class, _positions]; } forEach _baseStaticClasses; _basePumps sort true; // sort pump classes alphabetically // check final array as it's calculated in postInit private _checkCount = 0; { _x params ["_class", "_positions"]; private _pumps = []; { _pumps append (_x nearObjects [_class, 30]); } forEach _positions; _pumps = _pumps arrayIntersect _pumps; _checkCount = _checkCount + count _pumps; } forEach _basePumps; if (_checkCount != _totalCount) then { _message = "WRONG COUNT " + str _checkCount; }; // export text private _nl = toString [10]; private _multipleBasePumps = 1 < count _basePumps; private _output = [format [" %1[] = { /* %2 */", worldName, getText (configfile >> "CfgWorlds" >> worldName >> "description")]]; { if (_forEachIndex > 0) then {_output pushBack ","}; _x params ["_class", "_positions"]; if (_multipleBasePumps) then { _output pushBack (_nl + " "); } else { _output pushBack " "; }; _output pushBack format ["{""%1"", {", _class]; { if (_forEachIndex > 0) then {_output pushBack ","}; _output pushBack format ["{%1,%2,%3}", _x#0, _x#1, _x#2]; } forEach _positions; _output pushBack "}}"; } forEach _basePumps; if (_multipleBasePumps) then {_output pushBack (_nl + " ")}; if (_basePumps isEqualTo []) then {_output pushBack " "}; _output pushBack ("};" + _nl); _output = _output joinString ""; copyToClipboard _output; [_totalCount, _posCount, _message, _output]