Fix spectator unit tree refreshing

- Account for decrement in node index when culling the tree of sides/groups/units
- Fix non-zero-based index `to` value when navigating the units in the tree
This commit is contained in:
SilentSpike 2016-05-11 13:30:17 +01:00
parent be99d4b3d7
commit 9364ae60df

View File

@ -331,31 +331,40 @@ switch (toLower _mode) do {
}; };
case "onunitsupdate": { case "onunitsupdate": {
_args params ["_tree"]; _args params ["_tree"];
private ["_cachedUnits","_cachedGrps","_cachedSides","_s","_g","_grp","_u","_unit","_side"]; private ["_cachedUnits","_cachedGrps","_cachedSides","_sT","_gT","_uT","_s","_g","_u","_grp","_unit","_side"];
// Cache existing group and side nodes and cull removed data // Cache existing group and side nodes and cull removed data
_cachedUnits = []; _cachedUnits = [];
_cachedGrps = []; _cachedGrps = [];
_cachedSides = []; _cachedSides = [];
for "_s" from 0 to ((_tree tvCount []) - 1) do { // Track deleted nodes to account for decrease in index
for "_g" from 0 to ((_tree tvCount [_s]) - 1) do { _sT = _tree tvCount [];
for [{_s = 0;}, {_s < _sT}, {_s = _s + 1}] do {
_gT = _tree tvCount [_s];
for [{_g = 0;}, {_g < _gT}, {_g = _g + 1}] do {
_grp = groupFromNetID (_tree tvData [_s,_g]); _grp = groupFromNetID (_tree tvData [_s,_g]);
if (_grp in GVAR(groupList)) then { if (_grp in GVAR(groupList)) then {
_cachedGrps pushBack _grp; _cachedGrps pushBack _grp;
_cachedGrps pushBack _g; _cachedGrps pushBack _g;
for "_u" from 0 to ((_tree tvCount [_s,_g])) do { _uT = _tree tvCount [_s,_g];
for [{_u = 0;}, {_u < _uT}, {_u = _u + 1}] do {
_unit = objectFromNetId (_tree tvData [_s,_g,_u]); _unit = objectFromNetId (_tree tvData [_s,_g,_u]);
if (_unit in GVAR(unitList)) then { if (_unit in GVAR(unitList)) then {
_cachedUnits pushBack _unit; _cachedUnits pushBack _unit;
} else { } else {
_tree tvDelete [_s,_g,_u]; _tree tvDelete [_s,_g,_u];
_u = _u - 1;
_uT = _uT - 1;
}; };
}; };
} else { } else {
_tree tvDelete [_s,_g]; _tree tvDelete [_s,_g];
_g = _g - 1;
_gT = _gT - 1;
}; };
}; };
@ -364,6 +373,8 @@ switch (toLower _mode) do {
_cachedSides pushBack _s; _cachedSides pushBack _s;
} else { } else {
_tree tvDelete [_s]; _tree tvDelete [_s];
_s = _s - 1;
_sT = _sT - 1;
}; };
}; };