void SetVision(Team targetTeam, Team enemyTeam) { Dictionary <Body, UnitEntity> targetPlayers = new Dictionary <Body, UnitEntity>(units[targetTeam]); Dictionary <Body, UnitEntity> enemyPlayers = new Dictionary <Body, UnitEntity>(units[enemyTeam]); foreach (var enemyPlayer in enemyPlayers) { if (targetPlayers.Count == 0) { break; } var bodies = collision.GetCircleBodies(((DynamicBody)enemyPlayer.Key).GetPosition(), visionRadius); foreach (var body in bodies) { if (targetPlayers.Any(x => x.Key == body)) { if (collision.CheckLineOfSight(((DynamicBody)enemyPlayer.Key).GetPosition(), ((DynamicBody)body).GetPosition())) { var item = targetPlayers.First(x => x.Key == body); targetPlayers[item.Key].GetComponent <VisionComponent>().SetVision(enemyTeam, true); targetPlayers.Remove(item.Key); } } } } foreach (var targetPlayer in targetPlayers.Values) { targetPlayer.GetComponent <VisionComponent>().SetVision(enemyTeam, false); } }