mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
77 lines
2.5 KiB
Plaintext
77 lines
2.5 KiB
Plaintext
|
//fnc_generateSolutions.sqf
|
||
|
#include "script_component.hpp"
|
||
|
_targetPos = _this select 0;
|
||
|
_gunPos = _this select 1;
|
||
|
_dof = _this select 2;
|
||
|
_roundType = _this select 3;
|
||
|
_fuzeType = _this select 4;
|
||
|
|
||
|
|
||
|
_roundInfo = (configFile >> "CfgMagazines" >> _roundType);
|
||
|
|
||
|
_btableTemplate = getText(_roundInfo >> "ACE_ARTY_BTABS");
|
||
|
_minCharge = getNumber(_roundInfo >> "ACE_ARTY_MINCHARGE");
|
||
|
_maxCharge = getNumber(_roundInfo >> "ACE_ARTY_MAXCHARGE");
|
||
|
_magazineTemplate = getText(_roundInfo >> "ACE_ARTY_MAGAZINE_FORMAT");
|
||
|
|
||
|
_displayName = getText(_roundInfo >> "displayName");
|
||
|
|
||
|
|
||
|
_highTables = [];
|
||
|
_lowTables = [];
|
||
|
_fastestLow = 100000;
|
||
|
_fastestHigh = 100000;
|
||
|
_bestHigh = [];
|
||
|
_bestLow = [];
|
||
|
_found = false;
|
||
|
_tableCount = 0;
|
||
|
_highSolutions = [];
|
||
|
_lowSolutions = [];
|
||
|
for "_i" from _minCharge to _maxCharge do {
|
||
|
_magazine = format[_magazineTemplate, _fuzeType, _i];
|
||
|
_highTable = format[_btableTemplate, "HA", _i];
|
||
|
_lowTable = format[_btableTemplate, "LA", _i];
|
||
|
_log = format["Generating %1 solution, charge %2.", _displayName, _i];
|
||
|
BCSLOG(_log);
|
||
|
_result = [_gunPos, _targetPos, _dof, _magazine, _lowTable, _highTable] call FUNC(firingSolution);
|
||
|
_lowTables set[(count _lowTables), [(_result select 0), _i, _targetPos]];
|
||
|
_highTables set[(count _highTables), [(_result select 1), _i, _targetPos]];
|
||
|
_resultLog = format["Solution for %1 charge %2; ", _displayName, _i];
|
||
|
|
||
|
if((count (_result select 1)) > 0) then {
|
||
|
_found = true;
|
||
|
_highSolutions set[(count _highSolutions), [(_result select 1), _i, _targetPos]];
|
||
|
_tableCount = _tableCount + 1;
|
||
|
_resultLog = _resultLog + "High: Yes; ";
|
||
|
} else {
|
||
|
_resultLog = _resultLog + "High: No; ";
|
||
|
};
|
||
|
if((count (_result select 0)) > 0) then {
|
||
|
_lowSolutions set[(count _lowSolutions), [(_result select 0), _i, _targetPos]];
|
||
|
_found = true;
|
||
|
_tableCount = _tableCount + 1;
|
||
|
_resultLog = _resultLog + "Low: Yes";
|
||
|
} else {
|
||
|
_resultLog = _resultLog + "Low: No";
|
||
|
};
|
||
|
BCSLOG(_resultLog);
|
||
|
};
|
||
|
|
||
|
_lowSolutionsRev = [];
|
||
|
|
||
|
for "_i" from (count _lowSolutions)-1 to 0 step -1 do {
|
||
|
_lowSolutionsRev set[(count _lowSolutionsRev), _lowSolutions select _i];
|
||
|
};
|
||
|
|
||
|
if(!_found) then {
|
||
|
BCSERROR("No solution could be found for the current target!");
|
||
|
} else {
|
||
|
GVAR(solutions) = _lowSolutionsRev + _highSolutions;
|
||
|
_text = format["%1 valid firing solutions found for %2.", _tableCount, _displayName];
|
||
|
BCSLOG(_text);
|
||
|
GVAR(currentComputer) setVariable [QGVAR(currentSolutions), GVAR(solutions), true];
|
||
|
GVAR(currentComputer) setVariable [QGVAR(currentSolutionsIndex), 0, true];
|
||
|
};
|
||
|
|
||
|
|
||
|
GVAR(generatingMission) = false;
|