| 834 | } |
| 835 | |
| 836 | void AIMap::AddChange(bool erase, bool enemy, const AITargetInfo& info) |
| 837 | { |
| 838 | if (erase && info._idExact != nullptr) |
| 839 | { |
| 840 | // try to eliminate pairs insert - delete |
| 841 | int i; |
| 842 | for (i = _changesQueue.Size() - 1; i >= 0; i--) |
| 843 | { |
| 844 | AITargetChange& change = _changesQueue[i]; |
| 845 | if (change.idExact == info._idExact) |
| 846 | { |
| 847 | if (!change.erase && change.enemy == enemy && change.type == info._type) |
| 848 | { |
| 849 | // pair insert - delete found |
| 850 | // delete after insert - unit destroyed sooner insert applied |
| 851 | _changesQueue.Delete(i); |
| 852 | return; |
| 853 | } |
| 854 | else |
| 855 | { |
| 856 | break; |
| 857 | } |
| 858 | } |
| 859 | } |
| 860 | } |
| 861 | |
| 862 | int index = _changesQueue.Add(); |
| 863 | AITargetChange& change = _changesQueue[index]; |
| 864 | change.erase = erase; |
| 865 | change.enemy = enemy; |
| 866 | change.idExact = info._idExact; |
| 867 | change.type = info._type; |
| 868 | change.x = info._x; |
| 869 | change.z = info._z; |
| 870 | change.time = Glob.time; |
| 871 | } |
| 872 | |
| 873 | bool AIMap::ProcessChange() |
| 874 | { |
no test coverage detected