context: #region License
  
  /*
   Copyright 2014 - 2015 Nikita Bernthaler
   GameObjects.cs is part of SFXUtility.
  
   SFXUtility is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.
  
   SFXUtility is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
   GNU General Public License for more details.
  
   You should have received a copy of the GNU General Public License
   along with SFXUtility. If not, see <http://www.gnu.org/licenses/>.
  */
  
  #endregion License
  
  #region
  
  using System;
  using System.Collections.Generic;
  using System.Linq;
  using LeagueSharp;
  using LeagueSharp.Common;
  
  #endregion
  
  namespace SFXUtility.Library
  {
      /// <summary>
      ///     A static (stack) class which contains a sort-of cached versions of the important game objects.
      /// </summary>
      public static class GameObjects
      {
          #region Constructors and Destructors
  
          /// <summary>
          ///     Initializes static members of the <see cref="GameObjects" /> class.
          /// </summary>
          static GameObjects()
          {
              if (!_initialized)
              {
                  Initialize();
              }
          }
  
          #endregion
  
          #region Public Methods and Operators
  
          /// <summary>
          ///     Compares two <see cref="GameObject" /> and returns if they are identical.
          /// </summary>
          /// <param name="gameObject">The GameObject</param>
          /// <param name="object">The Compare GameObject</param>
          /// <returns>Whether the <see cref="GameObject" />s are identical.</returns>
          public static bool Compare(this GameObject gameObject, GameObject @object)
          {
              return gameObject.NetworkId == @object.NetworkId;
          }
  
          #endregion
  
          #region Static Fields
  
          /// <summary>
          ///     The ally heroes list.
          /// </summary>
          private static readonly HashSet<Obj_AI_Hero> AllyHeroesList = new HashSet<Obj_AI_Hero>();
  
          /// <summary>
          ///     The ally list.
          /// </summary>
          private static readonly HashSet<Obj_AI_Base> AllyList = new HashSet<Obj_AI_Base>();
  
          /// <summary>
          ///     The ally minions list.
          /// </summary>
          private static readonly HashSet<Obj_AI_Minion> AllyMinionsList = new HashSet<Obj_AI_Minion>();
  
          /// <summary>
          ///     The ally shops list.
          /// </summary>
          private static readonly HashSet<Obj_Shop> AllyShopsList = new HashSet<Obj_Shop>();
  
          /// <summary>
          ///     The ally spawn points list.
          /// </summary>
          private static readonly HashSet<Obj_SpawnPoint> AllySpawnPointsList = new HashSet<Obj_SpawnPoint>();
  
          /// <summary>
          ///     The ally inhibitor turrets list.
          /// </summary>
          private static readonly HashSet<Obj_BarracksDampener> AllyInhibitorsList = new HashSet<Obj_BarracksDampener>();
  
          /// <summary>
          ///     The ally turrets list.
          /// </summary>
          private static readonly HashSet<Obj_AI_Turret> AllyTurretsList = new HashSet<Obj_AI_Turret>();
  
          /// <summary>
          ///     The ally wards list.
          /// </summary>
          private static readonly HashSet<Obj_AI_Minion> AllyWardsList = new HashSet<Obj_AI_Minion>();
  
          /// <summary>
          ///     The enemy heroes list.
          /// </summary>
          private static readonly HashSet<Obj_AI_Hero> EnemyHeroesList = new HashSet<Obj_AI_Hero>();
  
          /// <summary>
          ///     The enemy list.
          /// </summary>
          private static readonly HashSet<Obj_AI_Base> EnemyList = new HashSet<Obj_AI_Base>();
  
          /// <summary>
          ///     The enemy minions list.
          /// </summary>
          private static readonly HashSet<Obj_AI_Minion> EnemyMinionsList = new HashSet<Obj_AI_Minion>();
  
          /// <summary>
          ///     The enemy shops list.
          /// </summary>
          private static readonly HashSet<Obj_Shop> EnemyShopsList = new HashSet<Obj_Shop>();
  
          /// <summary>
          ///     The enemy spawn points list.
          /// </summary>
          private static readonly HashSet<Obj_SpawnPoint> EnemySpawnPointsList = new HashSet<Obj_SpawnPoint>();
  
          /// <summary>
          ///     The enemy inhibitor turrets list.
          /// </summary>
          private static readonly HashSet<Obj_BarracksDampener> EnemyInhibitorsList = new HashSet<Obj_BarracksDampener>();
  
          /// <summary>
          ///     The enemy turrets list.
          /// </summary>
          private static readonly HashSet<Obj_AI_Turret> EnemyTurretsList = new HashSet<Obj_AI_Turret>();
  
          /// <summary>
          ///     The enemy wards list.
          /// </summary>
          private static readonly HashSet<Obj_AI_Minion> EnemyWardsList = new HashSet<Obj_AI_Minion>();
  
          /// <summary>
          ///     The game objects list.
          /// </summary>
          private static readonly HashSet<GameObject> GameObjectsList = new HashSet<GameObject>();
  
          /// <summary>
          ///     The heroes list.
          /// </summary>
          private static readonly HashSet<Obj_AI_Hero> HeroesList = new HashSet<Obj_AI_Hero>();
  
          /// <summary>
          ///     The jungle list.
          /// </summary>
          private static readonly HashSet<Obj_AI_Minion> JungleList = new HashSet<Obj_AI_Minion>();
  
          /// <summary>
          ///     The minions list.
          /// </summary>
          private static readonly HashSet<Obj_AI_Minion> MinionsList = new HashSet<Obj_AI_Minion>();
  
          /// <summary>
          ///     The shops list.
          /// </summary>
          private static readonly HashSet<Obj_Shop> ShopsList = new HashSet<Obj_Shop>();
  
          /// <summary>
          ///     The spawn points list.
          /// </summary>
          private static readonly HashSet<Obj_SpawnPoint> SpawnPointsList = new HashSet<Obj_SpawnPoint>();
  
          /// <summary>
          ///     The inhibitor turrets list.
          /// </summary>
          private static readonly HashSet<Obj_BarracksDampener> InhibitorsList = new HashSet<Obj_BarracksDampener>();
  
          /// <summary>
          ///     The turrets list.
          /// </summary>
          private static readonly HashSet<Obj_AI_Turret> TurretsList = new HashSet<Obj_AI_Turret>();
  
          /// <summary>
          ///     The wards list.
          /// </summary>
          private static readonly HashSet<Obj_AI_Minion> WardsList = new HashSet<Obj_AI_Minion>();
  
          /// <summary>
          ///     Indicates whether the <see cref="GameObjects" /> stack was initialized and saved required instances.
          /// </summary>
          private static bool _initialized;
  
          #endregion
  
          #region Public Properties
  
          /// <summary>
          ///     Gets the game objects.
          /// </summary>
          public static IEnumerable<GameObject> AllGameObjects
          {
              get { return GameObjectsList; }
          }
  
          /// <summary>
          ///     Gets the ally.
          /// </summary>
          public static IEnumerable<Obj_AI_Base> Ally
          {
              get { return AllyList; }
          }
  
          /// <summary>
          ///     Gets the ally heroes.
          /// </summary>
          public static IEnumerable<Obj_AI_Hero> AllyHeroes
          {
              get { return AllyHeroesList; }
          }
  
          /// <summary>
          ///     Gets the ally minions.
          /// </summary>
          public static IEnumerable<Obj_AI_Minion> AllyMinions
          {
              get { return AllyMinionsList; }
          }
  
          /// <summary>
          ///     Gets the ally shops.
          /// </summary>
          public static IEnumerable<Obj_Shop> AllyShops
          {
              get { return AllyShopsList; }
          }
  
          /// <summary>
          ///     Gets the ally spawn points.
          /// </summary>
          public static IEnumerable<Obj_SpawnPoint> AllySpawnPoints
          {
              get { return AllySpawnPointsList; }
          }
  
          /// <summary>
          ///     Gets the ally turrets.
          /// </summary>
          public static IEnumerable<Obj_AI_Turret> AllyTurrets
          {
              get { return AllyTurretsList; }
          }
  
          /// <summary>
          ///     Gets the ally inhibitors.
          /// </summary>
          public static IEnumerable<Obj_BarracksDampener> AllyInhibitors
          {
              get { return AllyInhibitorsList; }
          }
  
          /// <summary>
          ///     Gets the ally wards.
          /// </summary>
          public static IEnumerable<Obj_AI_Minion> AllyWards
          {
              get { return AllyWardsList; }
          }
  
          /// <summary>
          ///     Gets the enemy.
          /// </summary>
          public static IEnumerable<Obj_AI_Base> Enemy
          {
              get { return EnemyList; }
          }
  
          /// <summary>
          ///     Gets the enemy heroes.
          /// </summary>
          public static IEnumerable<Obj_AI_Hero> EnemyHeroes
          {
              get { return EnemyHeroesList; }
          }
  
          /// <summary>
          ///     Gets the enemy minions.
          /// </summary>
          public static IEnumerable<Obj_AI_Minion> EnemyMinions
          {
              get { return EnemyMinionsList; }
          }
  
          /// <summary>
          ///     Gets the enemy shops.
          /// </summary>
          public static IEnumerable<Obj_Shop> EnemyShops
          {
              get { return EnemyShopsList; }
          }
  
          /// <summary>
          ///     Gets the enemy spawn points.
          /// </summary>
          public static IEnumerable<Obj_SpawnPoint> EnemySpawnPoints
          {
              get { return EnemySpawnPointsList; }
          }
  
          /// <summary>
          ///     Gets the enemy inhibitors.
          /// </summary>
          public static IEnumerable<Obj_BarracksDampener> EnemyInhibitors
          {
              get { return EnemyInhibitorsList; }
          }
  
          /// <summary>
          ///     Gets the enemy turrets.
          /// </summary>
          public static IEnumerable<Obj_AI_Turret> EnemyTurrets
          {
  
gt:             get { return EnemyTurretsList; }