private void LateUpdate() { foreach (var target in _targets.Values) { target.Assignees.Clear(); } _aggressive.Clear(); foreach (var ai in _potentialAggressive) { var enemy = ai.Situation.Threat; if (enemy != null) { if (!_targets.ContainsKey(enemy)) { _targets[enemy] = new AIGroupTarget(enemy); } _targets[enemy].CheckIn(ai, MaxAggressive); } } foreach (var target in _targets.Values) { if (target.Assignees.Count == 0) { _targetsToRemove.Add(target.Target); } else { foreach (var assignee in target.Assignees) { _aggressive.Add(assignee.AI); } } } foreach (var target in _targetsToRemove) { _targets.Remove(target); } _targetsToRemove.Clear(); _potentialAggressive.Clear(); }
private void LateUpdate() { foreach (var target in _targets.Values) { target.Forced.Clear(); target.Unforced.Clear(); } foreach (var ai in _aggressive) { if (_aggressiveDuration.ContainsKey(ai)) { var value = _aggressiveDuration[ai]; if (value >= Sustain) { _aggressiveDuration.Remove(ai); } else { _aggressiveDuration[ai] = value + Time.deltaTime; } } else { _aggressiveDuration[ai] = 0; } } _aggressive.Clear(); foreach (var ai in _potentialAggressive) { var enemy = ai.Situation.Threat; if (enemy != null) { if (!_targets.ContainsKey(enemy)) { _targets[enemy] = new AIGroupTarget(enemy); } _targets[enemy].CheckIn(ai, MaxAggressive, _aggressiveDuration.ContainsKey(ai)); } } foreach (var target in _targets.Values) { if (target.Forced.Count == 0 && target.Unforced.Count == 0) { _targetsToRemove.Add(target.Target); } else { foreach (var assignee in target.Forced) { _aggressive.Add(assignee.AI); } var left = MaxAggressive - target.Forced.Count; if (left > target.Unforced.Count) { left = target.Unforced.Count; } for (int i = 0; i < left; i++) { _aggressive.Add(target.Unforced[i].AI); } } } foreach (var target in _targetsToRemove) { _targets.Remove(target); } _targetsToRemove.Clear(); _potentialAggressive.Clear(); }