public TwistedTreeline(Game game) : base(game, 90 * 1000, 30 * 1000, 90 * 1000, true, 1)
        {
            var path = System.IO.Path.Combine(
                Program.ExecutingDirectory,
                "Content",
                "Data",
                _game.Config.ContentManager.GameModeName,
                "AIMesh",
                "Map" + GetMapId(),
                "AIPath.aimesh"
                );

            if (File.Exists(path))
            {
                AIMesh = new RAF.AIMesh(path);
            }
            else
            {
                _logger.LogCoreError("Failed to load Twisted Treeline data.");
                return;
            }

            AddObject(new LaneTurret("Turret_OrderTurretShrine_A", 295.03690f, 7271.2344f, TeamId.TEAM_BLUE, TurretType.FountainTurret));
            AddObject(new LaneTurret("Turret_T1_C_01_A", 2407.5815f, 7288.8584f, TeamId.TEAM_BLUE, TurretType.NexusTurret, GetTurretItems(TurretType.NexusTurret)));
            AddObject(new LaneTurret("Turret_T1_C_06_A", 2135.5176f, 9264.0117f, TeamId.TEAM_BLUE, TurretType.InhibitorTurret, GetTurretItems(TurretType.InhibitorTurret)));
            AddObject(new LaneTurret("Turret_T1_C_07_A", 2130.2964f, 5241.2646f, TeamId.TEAM_BLUE, TurretType.InhibitorTurret, GetTurretItems(TurretType.InhibitorTurret)));
            AddObject(new LaneTurret("Turret_T1_L_02_A", 4426.5811f, 9726.0859f, TeamId.TEAM_BLUE, TurretType.InnerTurret, GetTurretItems(TurretType.InnerTurret)));
            AddObject(new LaneTurret("Turret_T1_R_02_A", 4645.6836f, 4718.1982f, TeamId.TEAM_BLUE, TurretType.InnerTurret, GetTurretItems(TurretType.InnerTurret)));

            AddObject(new LaneTurret("Turret_ChaosTurretShrine_A", 15020.6406f, 7301.6836f, TeamId.TEAM_PURPLE, TurretType.FountainTurret));
            AddObject(new LaneTurret("Turret_T2_C_01_A", 13015.4688f, 7289.8652f, TeamId.TEAM_PURPLE, TurretType.NexusTurret, GetTurretItems(TurretType.NexusTurret)));
            AddObject(new LaneTurret("Turret_T2_L_01_A", 13291.2676f, 9260.7080f, TeamId.TEAM_PURPLE, TurretType.InhibitorTurret, GetTurretItems(TurretType.InhibitorTurret)));
            AddObject(new LaneTurret("Turret_T2_R_01_A", 13297.6621f, 5259.0078f, TeamId.TEAM_PURPLE, TurretType.InhibitorTurret, GetTurretItems(TurretType.InhibitorTurret)));
            AddObject(new LaneTurret("Turret_T2_R_02_A", 10775.8760f, 4715.4580f, TeamId.TEAM_PURPLE, TurretType.InnerTurret, GetTurretItems(TurretType.InnerTurret)));
            AddObject(new LaneTurret("Turret_T2_L_02_A", 10994.5430f, 9727.7715f, TeamId.TEAM_PURPLE, TurretType.InnerTurret, GetTurretItems(TurretType.InnerTurret)));

            AddObject(new LevelProp(1360.9241f, 5072.1309f, 291.2142f, 134.0f, 11.1111f, 0.0f, 288.8889f, -22.2222f, "LevelProp_TT_Brazier1", "TT_Brazier"));
            AddObject(new LevelProp(423.5712f, 6529.0327f, 385.9983f, 0.0f, -33.3334f, 0.0f, 277.7778f, -11.1111f, "LevelProp_TT_Brazier2", "TT_Brazier"));
            AddObject(new LevelProp(399.4241f, 8021.057f, 692.2211f, 0.0f, -22.2222f, 0.0f, 300f, 0.0f, "LevelProp_TT_Brazier3", "TT_Brazier"));
            AddObject(new LevelProp(1314.294f, 9495.576f, 582.8416f, 48.0f, -33.3334f, 0.0f, 277.7778f, 22.2223f, "LevelProp_TT_Brazier4", "TT_Brazier"));
            AddObject(new LevelProp(14080.0f, 9530.3379f, 305.0638f, 120.0f, 11.1111f, 0.0f, 277.7778f, 0.0f, "LevelProp_TT_Brazier5", "TT_Brazier"));
            AddObject(new LevelProp(14990.46f, 8053.91f, 675.8145f, 0.0f, -22.2222f, 0.0f, 266.6666f, -11.1111f, "LevelProp_TT_Brazier6", "TT_Brazier"));
            AddObject(new LevelProp(15016.35f, 6532.84f, 664.7033f, 0.0f, -11.1111f, 0.0f, 255.5555f, -11.1111f, "LevelProp_TT_Brazier7", "TT_Brazier"));
            AddObject(new LevelProp(14102.99f, 5098.367f, 580.504f, 36.0f, 0.0f, 0.0f, 244.4445f, 11.1111f, "LevelProp_TT_Brazier8", "TT_Brazier"));
            AddObject(new LevelProp(3624.281f, 3730.965f, -100.4387f, 0.0f, 88.8889f, 0.0f, -33.3334f, 66.6667f, "LevelProp_TT_Chains_Bot_Lane", "TT_Chains_Bot_Lane"));
            AddObject(new LevelProp(3778.364f, 7573.525f, -496.0713f, 0.0f, -233.3334f, 0.0f, -333.3333f, 277.7778f, "LevelProp_TT_Chains_Order_Base", "TT_Chains_Order_Base"));
            AddObject(new LevelProp(11636.06f, 7618.667f, -551.6268f, 0.0f, 200f, 0.0f, -388.8889f, 33.3334f, "LevelProp_TT_Chains_Xaos_Base", "TT_Chains_Xaos_Base"));
            AddObject(new LevelProp(759.1779f, 4740.938f, 507.9883f, 0.0f, -155.5555f, 0.0f, 44.4445f, 222.2222f, "LevelProp_TT_Chains_Order_Periph", "TT_Chains_Order_Periph"));
            AddObject(new LevelProp(3000.0f, 7289.682f, 19.51249f, 0.0f, 0.0f, 0.0f, 144.4445f, 0.0f, "LevelProp_TT_Nexus_Gears", "TT_Nexus_Gears"));
            AddObject(new LevelProp(12436.4775f, 7366.5859f, -124.9320f, 180.0f, -44.4445f, 0.0f, 122.2222f, -122.2222f, "LevelProp_TT_Nexus_Gears1", "TT_Nexus_Gears"));
            AddObject(new LevelProp(14169.09f, 7916.989f, 178.1922f, 150f, 22.2223f, 0.0f, 33.3333f, -66.6667f, "LevelProp_TT_Shopkeeper1", "TT_Shopkeeper"));
            AddObject(new LevelProp(1340.8141f, 7996.8691f, 126.2980f, 208f, -66.6667f, 0.0f, 22.2223f, -55.5556f, "LevelProp_TT_Shopkeeper", "TT_Shopkeeper"));
            AddObject(new LevelProp(7706.3052f, 6720.3926f, -124.9320f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, "LevelProp_TT_Speedshrine_Gears", "TT_Speedshrine_Gears"));

            //TODO
            var COLLISION_RADIUS = 0;
            var SIGHT_RANGE      = 1700;

            AddObject(new Inhibitor("OrderInhibitor", TeamId.TEAM_BLUE, COLLISION_RADIUS, 2155.8677f, 8411.2500f, SIGHT_RANGE, 0xffd23c3e));    //top
            AddObject(new Inhibitor("OrderInhibitor", TeamId.TEAM_BLUE, COLLISION_RADIUS, 2147.5042f, 6117.3418f, SIGHT_RANGE, 0xff9303e1));    //bot
            AddObject(new Inhibitor("ChaosInhibitor", TeamId.TEAM_PURPLE, COLLISION_RADIUS, 13284.7002f, 8408.0605f, SIGHT_RANGE, 0xff6793d0)); //top
            AddObject(new Inhibitor("ChaosInhibitor", TeamId.TEAM_PURPLE, COLLISION_RADIUS, 13295.3809f, 6124.8110f, SIGHT_RANGE, 0xff26ac0f)); //bot

            AddObject(new Nexus("OrderNexus", TeamId.TEAM_BLUE, COLLISION_RADIUS, 2981.0388f, 7283.0103f, SIGHT_RANGE, 0xfff97db5));
            AddObject(new Nexus("ChaosNexus", TeamId.TEAM_PURPLE, COLLISION_RADIUS, 12379.5439f, 7289.9409f, SIGHT_RANGE, 0xfff02c0f));

            // Start at xp to reach level 1
            ExpToLevelUp = new List <int> {
                0, 280, 660, 1140, 1720, 2400, 3180, 4060, 5040, 6120, 7300, 8580, 9960, 11440, 13020, 14700, 16480, 18360
            };

            // Announcer events
            _announcerEvents.Add(new Announce(game, 30 * 1000, Announces.WelcomeToSR, true)); // Welcome to SR
            if (_firstSpawnTime - 30 * 1000 >= 0.0f)
            {
                _announcerEvents.Add(new Announce(game, _firstSpawnTime - 30 * 1000, Announces.ThirySecondsToMinionsSpawn, true)); // 30 seconds until minions spawn
            }
            _announcerEvents.Add(new Announce(game, _firstSpawnTime, Announces.MinionsHaveSpawned, false));                        // Minions have spawned (90 * 1000)
            _announcerEvents.Add(new Announce(game, _firstSpawnTime, Announces.MinionsHaveSpawned2, false));                       // Minions have spawned [2] (90 * 1000)
        }
        public SummonersRift(Game game) : base(game, 15 * 1000, 30 * 1000, 90 * 1000, true, 1)
        {
            RAF.AIMesh aiMesh = null;
            if (!_rafManager.readAIMesh("LEVELS/Map1/AIPath.aimesh", out aiMesh))
            {
                _logger.LogCoreError("Failed to load SummonersRift data.");
                return;
            }
            AIMesh = aiMesh;

            _collisionHandler.init(3); // Needs to be initialised after AIMesh

            AddObject(new LaneTurret("Turret_T1_R_03_A", 10097.62f, 808.73f, TeamId.TEAM_BLUE,
                                     TurretType.OuterTurret, GetTurretItems(TurretType.OuterTurret)));
            AddObject(new LaneTurret("Turret_T1_R_02_A", 6512.53f, 1262.62f, TeamId.TEAM_BLUE,
                                     TurretType.InnerTurret, GetTurretItems(TurretType.InnerTurret)));
            AddObject(new LaneTurret("Turret_T1_C_07_A", 3747.26f, 1041.04f, TeamId.TEAM_BLUE,
                                     TurretType.InhibitorTurret, GetTurretItems(TurretType.InhibitorTurret)));
            AddObject(new LaneTurret("Turret_T2_R_03_A", 13459.0f, 4284.0f, TeamId.TEAM_PURPLE,
                                     TurretType.OuterTurret, GetTurretItems(TurretType.OuterTurret)));
            AddObject(new LaneTurret("Turret_T2_R_02_A", 12920.0f, 8005.0f, TeamId.TEAM_PURPLE,
                                     TurretType.InnerTurret, GetTurretItems(TurretType.InnerTurret)));
            AddObject(new LaneTurret("Turret_T2_R_01_A", 13205.0f, 10474.0f, TeamId.TEAM_PURPLE,
                                     TurretType.InhibitorTurret, GetTurretItems(TurretType.InhibitorTurret)));
            AddObject(new LaneTurret("Turret_T1_C_05_A", 5448.02f, 6169.10f, TeamId.TEAM_BLUE,
                                     TurretType.OuterTurret, GetTurretItems(TurretType.OuterTurret)));
            AddObject(new LaneTurret("Turret_T1_C_04_A", 4657.66f, 4591.91f, TeamId.TEAM_BLUE,
                                     TurretType.InnerTurret, GetTurretItems(TurretType.InnerTurret)));
            AddObject(new LaneTurret("Turret_T1_C_03_A", 3233.99f, 3447.24f, TeamId.TEAM_BLUE,
                                     TurretType.InhibitorTurret, GetTurretItems(TurretType.InhibitorTurret)));
            AddObject(new LaneTurret("Turret_T1_C_01_A", 1341.63f, 2029.98f, TeamId.TEAM_BLUE,
                                     TurretType.NexusTurret, GetTurretItems(TurretType.NexusTurret)));
            AddObject(new LaneTurret("Turret_T1_C_02_A", 1768.19f, 1589.47f, TeamId.TEAM_BLUE,
                                     TurretType.NexusTurret, GetTurretItems(TurretType.NexusTurret)));
            AddObject(new LaneTurret("Turret_T2_C_05_A", 8548.0f, 8289.0f, TeamId.TEAM_PURPLE,
                                     TurretType.OuterTurret, GetTurretItems(TurretType.OuterTurret)));
            AddObject(new LaneTurret("Turret_T2_C_04_A", 9361.0f, 9892.0f, TeamId.TEAM_PURPLE,
                                     TurretType.InnerTurret, GetTurretItems(TurretType.InnerTurret)));
            AddObject(new LaneTurret("Turret_T2_C_03_A", 10743.0f, 11010.0f, TeamId.TEAM_PURPLE,
                                     TurretType.InhibitorTurret, GetTurretItems(TurretType.InhibitorTurret)));
            AddObject(new LaneTurret("Turret_T2_C_01_A", 12662.0f, 12442.0f, TeamId.TEAM_PURPLE,
                                     TurretType.NexusTurret, GetTurretItems(TurretType.NexusTurret)));
            AddObject(new LaneTurret("Turret_T2_C_02_A", 12118.0f, 12876.0f, TeamId.TEAM_PURPLE,
                                     TurretType.NexusTurret, GetTurretItems(TurretType.NexusTurret)));
            AddObject(new LaneTurret("Turret_OrderTurretShrine_A", -236.05f, -53.32f, TeamId.TEAM_BLUE,
                                     TurretType.FountainTurret, GetTurretItems(TurretType.FountainTurret)));
            AddObject(new LaneTurret("Turret_ChaosTurretShrine_A", 14157.0f, 14456.0f, TeamId.TEAM_PURPLE,
                                     TurretType.FountainTurret, GetTurretItems(TurretType.FountainTurret)));
            AddObject(new LaneTurret("Turret_T1_L_03_A", 574.66f, 10220.47f, TeamId.TEAM_BLUE,
                                     TurretType.OuterTurret, _turretItems[TurretType.OuterTurret]));
            AddObject(new LaneTurret("Turret_T1_L_02_A", 1106.26f, 6485.25f, TeamId.TEAM_BLUE,
                                     TurretType.InnerTurret, GetTurretItems(TurretType.InnerTurret)));
            AddObject(new LaneTurret("Turret_T1_C_06_A", 802.81f, 4052.36f, TeamId.TEAM_BLUE,
                                     TurretType.InhibitorTurret, GetTurretItems(TurretType.InhibitorTurret)));
            AddObject(new LaneTurret("Turret_T2_L_03_A", 3911.0f, 13654.0f, TeamId.TEAM_PURPLE,
                                     TurretType.OuterTurret, _turretItems[TurretType.OuterTurret]));
            AddObject(new LaneTurret("Turret_T2_L_02_A", 7536.0f, 13190.0f, TeamId.TEAM_PURPLE,
                                     TurretType.InnerTurret, GetTurretItems(TurretType.InnerTurret)));
            AddObject(new LaneTurret("Turret_T2_L_01_A", 10261.0f, 13465.0f, TeamId.TEAM_PURPLE,
                                     TurretType.InhibitorTurret, GetTurretItems(TurretType.InhibitorTurret)));

            AddObject(new LevelProp(12465.0f, 14422.257f, 101.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, "LevelProp_Yonkey", "Yonkey"));
            AddObject(new LevelProp(-76.0f, 1769.1589f, 94.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, "LevelProp_Yonkey1", "Yonkey"));
            AddObject(new LevelProp(13374.17f, 14245.673f, 194.9741f, 224.0f, 33.33f, 0.0f, 0.0f, -44.44f, "LevelProp_ShopMale", "ShopMale"));
            AddObject(new LevelProp(-99.5613f, 855.6632f, 191.4039f, 158.0f, 0.0f, 0.0f, 0.0f, 0.0f, "LevelProp_ShopMale1", "ShopMale"));

            //TODO
            var COLLISION_RADIUS = 0;
            var SIGHT_RANGE      = 1700;

            AddObject(new Inhibitor("OrderInhibitor", TeamId.TEAM_BLUE, COLLISION_RADIUS, 835, 3400, SIGHT_RANGE, 0xffd23c3e));      //top
            AddObject(new Inhibitor("OrderInhibitor", TeamId.TEAM_BLUE, COLLISION_RADIUS, 2785, 3000, SIGHT_RANGE, 0xff4a20f1));     //mid
            AddObject(new Inhibitor("OrderInhibitor", TeamId.TEAM_BLUE, COLLISION_RADIUS, 3044, 1070, SIGHT_RANGE, 0xff9303e1));     //bot
            AddObject(new Inhibitor("ChaosInhibitor", TeamId.TEAM_PURPLE, COLLISION_RADIUS, 10960, 13450, SIGHT_RANGE, 0xff6793d0)); //top
            AddObject(new Inhibitor("ChaosInhibitor", TeamId.TEAM_PURPLE, COLLISION_RADIUS, 11240, 11490, SIGHT_RANGE, 0xffff8f1f)); //mid
            AddObject(new Inhibitor("ChaosInhibitor", TeamId.TEAM_PURPLE, COLLISION_RADIUS, 13200, 11200, SIGHT_RANGE, 0xff26ac0f)); //bot

            AddObject(new Nexus("OrderNexus", TeamId.TEAM_BLUE, COLLISION_RADIUS, 1170, 1470, SIGHT_RANGE, 0xfff97db5));
            AddObject(new Nexus("ChaosNexus", TeamId.TEAM_PURPLE, COLLISION_RADIUS, 12800, 13100, SIGHT_RANGE, 0xfff02c0f));

            // Start at xp to reach level 1
            ExpToLevelUp = new List <int>
            {
                0,
                280,
                660,
                1140,
                1720,
                2400,
                3180,
                4060,
                5040,
                6120,
                7300,
                8580,
                9960,
                11440,
                13020,
                14700,
                16480,
                18360
            };

            // Set first minion spawn and first gold time to be 1:30
            _firstSpawnTime    = 90 * 1000;
            this.FirstGoldTime = _firstSpawnTime;

            // Announcer events
            _announcerEvents.Add(new GameObjects.Announce(game, 30 * 1000, Announces.WelcomeToSR, true)); // Welcome to SR
            if (_firstSpawnTime - 30 * 1000 >= 0.0f)
            {
                _announcerEvents.Add(new GameObjects.Announce(game, _firstSpawnTime - 30 * 1000, Announces.ThirySecondsToMinionsSpawn, true)); // 30 seconds until minions spawn
            }
            _announcerEvents.Add(new GameObjects.Announce(game, _firstSpawnTime, Announces.MinionsHaveSpawned, false));                        // Minions have spawned (90 * 1000)
            _announcerEvents.Add(new GameObjects.Announce(game, _firstSpawnTime, Announces.MinionsHaveSpawned2, false));                       // Minions have spawned [2] (90 * 1000)
        }
        public HowlingAbyss(Game game) : base(game, 90 * 1000, 30 * 1000, 90 * 1000, false, 12)
        {
            var path = System.IO.Path.Combine(
                Program.ExecutingDirectory,
                "Content",
                "Data",
                _game.Config.ContentManager.GameModeName,
                "AIMesh",
                "Map" + GetMapId(),
                "AIPath.aimesh"
                );

            if (File.Exists(path))
            {
                AIMesh = new RAF.AIMesh(path);
            }
            else
            {
                _logger.LogCoreError("Failed to load Howling Abyss data.");
                return;
            }

            AddObject(new LaneTurret("Turret_OrderTurretShrine_A", 648.0914f, 764.2271f, TeamId.TEAM_BLUE, TurretType.FountainTurret));
            AddObject(new LaneTurret("Turret_T1_C_09_A", 2493.2317f, 2101.1807f, TeamId.TEAM_BLUE, TurretType.NexusTurret, GetTurretItems(TurretType.NexusTurret)));
            AddObject(new LaneTurret("Turret_T1_C_010_A", 2036.6566f, 2552.6812f, TeamId.TEAM_BLUE, TurretType.NexusTurret, GetTurretItems(TurretType.NexusTurret)));
            AddObject(new LaneTurret("Turret_T1_C_07_A", 3809.0610f, 3829.0515f, TeamId.TEAM_BLUE, TurretType.InhibitorTurret, GetTurretItems(TurretType.InhibitorTurret)));
            AddObject(new LaneTurret("Turret_T1_C_08_A", 4943.4775f, 4929.8193f, TeamId.TEAM_BLUE, TurretType.InnerTurret, GetTurretItems(TurretType.InnerTurret)));

            AddObject(new LaneTurret("Turret_ChaosTurretShrine_A", 12168.7266f, 11913.2891f, TeamId.TEAM_PURPLE, TurretType.FountainTurret));
            AddObject(new LaneTurret("Turret_T2_L_04_A", 10325.2227f, 10608.1982f, TeamId.TEAM_PURPLE, TurretType.NexusTurret, GetTurretItems(TurretType.NexusTurret)));
            AddObject(new LaneTurret("Turret_T2_L_03_A", 10785.1777f, 10117.5869f, TeamId.TEAM_PURPLE, TurretType.NexusTurret, GetTurretItems(TurretType.NexusTurret)));
            AddObject(new LaneTurret("Turret_T2_L_02_A", 9017.6309f, 8871.3613f, TeamId.TEAM_PURPLE, TurretType.InhibitorTurret, GetTurretItems(TurretType.InhibitorTurret)));
            AddObject(new LaneTurret("Turret_T2_L_01_A", 7879.1025f, 7774.8018f, TeamId.TEAM_PURPLE, TurretType.InnerTurret, GetTurretItems(TurretType.InnerTurret)));

            AddObject(new LevelProp(5026.5020f, 3496.3406f, -85.7209f, 134.0f, -122.2222f, 0.0f, 177.7777f, 111.1112f, "LevelProp_HA_AP_BridgeLaneStatue1", "HA_AP_BridgeLaneStatue"));
            AddObject(new LevelProp(6466.1724f, 4860.2983f, -66.8992f, 134.0f, -144.4445f, 0.0f, 155.5557f, 144.4445f, "LevelProp_HA_AP_BridgeLaneStatue2", "HA_AP_BridgeLaneStatue"));
            AddObject(new LevelProp(7899.2993f, 6244.1289f, -71.1058f, 136.0f, -122.2222f, 0.0f, 155.5557f, 133.3334f, "LevelProp_HA_AP_BridgeLaneStatue3", "HA_AP_BridgeLaneStatue"));
            AddObject(new LevelProp(9322.6357f, 7618.5068f, -64.6960f, 134.0f, -133.3333f, 0.0f, 144.4445f, 122.2222f, "LevelProp_HA_AP_BridgeLaneStatue4", "HA_AP_BridgeLaneStatue"));
            AddObject(new LevelProp(7807.8403f, 9235.3594f, -66.9590f, 316.0f, 111.1112f, 0.0f, 144.4445f, -111.1111f, "LevelProp_HA_AP_BridgeLaneStatue5", "HA_AP_BridgeLaneStatue"));
            AddObject(new LevelProp(6344.9341f, 7901.9746f, -67.3494f, 316.0f, 144.4445f, 0.0f, 155.5557f, -155.5555f, "LevelProp_HA_AP_BridgeLaneStatue6", "HA_AP_BridgeLaneStatue"));
            AddObject(new LevelProp(4911.4043f, 6519.0439f, -69.2768f, 318.0f, 144.4445f, 0.0f, 155.5557f, -166.6667f, "LevelProp_HA_AP_BridgeLaneStatue7", "HA_AP_BridgeLaneStatue"));
            AddObject(new LevelProp(3488.6599f, 5143.9497f, -68.3749f, 316.0f, 144.4445f, 0.0f, 155.5557f, -144.4445f, "LevelProp_HA_AP_BridgeLaneStatue8", "HA_AP_BridgeLaneStatue"));
            AddObject(new LevelProp(2883.209f, 5173.606f, 86.12982f, 144.0f, -88.8889f, 0.0f, 355.5555f, -100.0f, "LevelProp_HA_AP_Chains_Long", "HA_AP_Chains_Long"));
            AddObject(new LevelProp(9939.937f, 7628.735f, 69.55461f, 320.0f, 111.1112f, 0.0f, 300.0f, -111.1111f, "LevelProp_HA_AP_Chains_Long1", "HA_AP_Chains_Long"));
            AddObject(new LevelProp(4984.0581f, 3123.9731f, -269.4257f, 314.0f, 155.5557f, 0.0f, 366.6666f, -322.2222f, "LevelProp_HA_AP_Chains_Long2", "HA_AP_Chains_Long", 1)); // Needs Skin ID change, goes into reference pose after 20 seconds
            AddObject(new LevelProp(7757.7983f, 9702.5352f, -269.4257f, 134.0f, -33.3334f, 0.0f, 355.5555f, 166.6666f, "LevelProp_HA_AP_Chains_Long3", "HA_AP_Chains_Long", 1));  // Needs Skin ID change, goes into reference pose after 20 seconds
            AddObject(new LevelProp(3953.4500f, 6169.2261f, -134.2545f, 314.0f, -22.2222f, 0.0f, 222.2222f, -66.6667f, "LevelProp_HA_AP_Chains1", "HA_AP_Chains"));
            AddObject(new LevelProp(5337.1914f, 7505.3691f, -134.2545f, 316.0f, 11.1111f, 0.0f, 211.1111f, 0.0f, "LevelProp_HA_AP_Chains2", "HA_AP_Chains"));
            AddObject(new LevelProp(6804.2568f, 8921.9707f, -134.2545f, 316.0f, -33.3334f, 0.0f, 200.0f, -33.3334f, "LevelProp_HA_AP_Chains3", "HA_AP_Chains"));
            AddObject(new LevelProp(7514.7021f, 5227.9307f, -134.2545f, 320.0f, -22.2222f, 0.0f, 211.1111f, 22.2223f, "LevelProp_HA_AP_Chains4", "HA_AP_Chains"));
            AddObject(new LevelProp(8992.9395f, 6655.3198f, -134.2545f, 316.0f, -33.3334f, 0.0f, 222.2222f, -77.7778f, "LevelProp_HA_AP_Chains5", "HA_AP_Chains"));
            AddObject(new LevelProp(6152.6162f, 3912.6973f, -134.2545f, 318.0f, -77.7778f, 0.0f, 222.2222f, -44.4445f, "LevelProp_HA_AP_Chains6", "HA_AP_Chains"));
            AddObject(new LevelProp(8537.6924f, 7273.2739f, -399.9565f, 314.0f, -100.0f, 0.0f, 311.1111f, 433.3333f, "LevelProp_HA_AP_Cutaway", "HA_AP_Cutaway"));
            AddObject(new LevelProp(11129.8574f, 12007.2168f, -208.8816f, 136.0f, 88.8889f, 0.0f, 44.4445f, 30.0f, "LevelProp_HA_AP_Hermit", "HA_AP_Hermit"));
            AddObject(new LevelProp(11129.8574f, 12007.2168f, -208.8816f, 160.0f, 66.6667f, 0.0f, 0.0f, 122.2222f, "LevelProp_HA_AP_Hermit_Robot1", "HA_AP_Hermit_Robot"));
            AddObject(new LevelProp(1637.6909f, 6079.6758f, -2986.0715f, 316.0f, 0.0f, 0.0f, -1000.0f, 0.0f, "LevelProp_HA_AP_HeroTower", "HA_AP_HeroTower"));
            AddObject(new LevelProp(2493.2314f, 2101.1809f, -438.0855f, 230.0f, 0.0f, 0.0f, -33.3334f, 0.0f, "LevelProp_HA_AP_OrderCloth", "HA_AP_OrderCloth"));
            AddObject(new LevelProp(2036.6564f, 2552.6814f, -434.7120f, 226.0f, 0.0f, 0.0f, -22.2222f, 0.0f, "LevelProp_HA_AP_OrderCloth1", "HA_AP_OrderCloth"));
            AddObject(new LevelProp(3809.0608f, 3829.0518f, -410.9214f, 234.0f, 0.0f, 0.0f, -22.2222f, 0.0f, "LevelProp_HA_AP_OrderCloth2", "HA_AP_OrderCloth"));
            AddObject(new LevelProp(4943.4775f, 4929.8188f, -415.1981f, 232.0f, 0.0f, 0.0f, -33.3334f, 0.0f, "LevelProp_HA_AP_OrderCloth3", "HA_AP_OrderCloth"));
            AddObject(new LevelProp(110.9160f, 17282.7129f, -8541.3047f, 334.0f, -611.1111f, 0.0f, 322.2223f, 88.8889f, "LevelProp_HA_AP_PeriphBridge", "HA_AP_PeriphBridge"));
            AddObject(new LevelProp(456.1896f, 593.4847f, 762.9286f, 136.0f, -44.4445f, 0.0f, -11.1111f, -77.7778f, "LevelProp_HA_AP_Poro", "HA_AP_Poro"));
            AddObject(new LevelProp(2474.4504f, 4335.2720f, -57.8053f, 208.0f, -333.3333f, 0.0f, -55.5556f, 0.0f, "LevelProp_HA_AP_Poro1", "HA_AP_Poro"));
            AddObject(new LevelProp(5733.5132f, 7807.1074f, -732.7032f, 34.0f, -88.8889f, 0.0f, 0.0f, 0.0f, "LevelProp_HA_AP_Poro2", "HA_AP_Poro"));
            AddObject(new LevelProp(10992.3691f, 12432.2109f, -732.7032f, 166.0f, 44.4445f, 0.0f, 0.0f, 0.0f, "LevelProp_HA_AP_Poro3", "HA_AP_Poro"));
            AddObject(new LevelProp(10388.6416f, 8398.5537f, -319.4668f, 222.0f, 266.6666f, 0.0f, -55.5556f, -11.1111f, "LevelProp_HA_AP_Poro4", "HA_AP_Poro"));
            AddObject(new LevelProp(12845.7910f, 9704.9277f, -839.1965f, 182.0f, -288.8889f, 0.0f, -22.2222f, 244.4445f, "LevelProp_HA_AP_Poro5", "HA_AP_Poro"));
            AddObject(new LevelProp(6776.0361f, 5412.7241f, 59.4416f, 130.0f, -22.2222f, 0.0f, -11.1111f, 0.0f, "LevelProp_HA_AP_Poro6", "HA_AP_Poro"));
            AddObject(new LevelProp(11022.8477f, 12122.8457f, -106.7434f, 292.0f, -211.1111f, 0.0f, -111.1111f, -144.4445f, "LevelProp_HA_AP_ShpNorth", "HA_AP_ShpNorth"));
            AddObject(new LevelProp(454.5473f, 1901.9037f, -208.8816f, 316.0f, 66.6667f, 0.0f, 22.2223f, 11.1111f, "LevelProp_HA_AP_ShpSouth", "HA_AP_ShpSouth"));
            AddObject(new LevelProp(438.0326f, 1896.9458f, -208.8816f, 130.0f, 77.7777f, 0.0f, 111.1112f, 22.2223f, "LevelProp_HA_AP_Viking", "HA_AP_Viking"));
            AddObject(new LevelProp(7133.3125f, 5572.2632f, -868.6111f, 316.0f, -44.4445f, 0.0f, 111.1112f, 33.3333f, "LevelProp_HA_AP_BannerMidBridge", "HA_AP_BannerMidBridge"));

            //TODO
            var COLLISION_RADIUS = 0;
            var SIGHT_RANGE      = 1700;

            AddObject(new Inhibitor("OrderInhibitor", TeamId.TEAM_BLUE, COLLISION_RADIUS, 3128.5122f, 3171.5120f, SIGHT_RANGE, 0xff4a20f1));
            AddObject(new Inhibitor("ChaosInhibitor", TeamId.TEAM_PURPLE, COLLISION_RADIUS, 9699.4023f, 9515.8262f, SIGHT_RANGE, 0xffff8f1f));


            AddObject(new Nexus("OrderNexus", TeamId.TEAM_BLUE, COLLISION_RADIUS, 1849.2987f, 1962.8167f, SIGHT_RANGE, 0xfff97db5));
            AddObject(new Nexus("ChaosNexus", TeamId.TEAM_PURPLE, COLLISION_RADIUS, 10916.8809f, 10708.5723f, SIGHT_RANGE, 0xfff02c0f));

            // Start at xp to reach level 1
            ExpToLevelUp = new List <int> {
                0, 280, 660, 1140, 1720, 2400, 3180, 4060, 5040, 6120, 7300, 8580, 9960, 11440, 13020, 14700, 16480, 18360
            };

            // Announcer events
            _announcerEvents.Add(new Announce(game, 30 * 1000, Announces.ThirySecondsToMinionsSpawn, true)); // HA uses ID 2
            if (_firstSpawnTime - 30 * 1000 >= 0.0f)
            {
                _announcerEvents.Add(new Announce(game, _firstSpawnTime - 30 * 1000, Announces.ThirySecondsToMinionsSpawn, true)); // 30 seconds until minions spawn
            }
            _announcerEvents.Add(new Announce(game, _firstSpawnTime, Announces.MinionsHaveSpawned, false));                        // Minions have spawned (90 * 1000)
            _announcerEvents.Add(new Announce(game, _firstSpawnTime, Announces.MinionsHaveSpawned2, false));                       // Minions have spawned [2] (90 * 1000)
        }
        public OriginalTwistedTreeline(Game game) : base(game, 90 * 1000, 30 * 1000, 90 * 1000, true, 4)
        {
            var path = System.IO.Path.Combine(
                Program.ExecutingDirectory,
                "Content",
                "Data",
                _game.Config.ContentManager.GameModeName,
                "AIMesh",
                "Map" + GetMapId(),
                "AIPath.aimesh"
                );

            if (File.Exists(path))
            {
                AIMesh = new RAF.AIMesh(path);
            }
            else
            {
                _logger.LogCoreError("Failed to load Original Twisted Treeline data.");
                return;
            }

            AddObject(new LaneTurret("Turret_OrderTurretShrine_A", -369.365967f, 6362.34766f, TeamId.TEAM_BLUE, TurretType.FountainTurret));
            AddObject(new LaneTurret("Turret_T1_C_01_A", 1552.661f, 6320.81641f, TeamId.TEAM_BLUE, TurretType.NexusTurret, GetTurretItems(TurretType.NexusTurret)));
            AddObject(new LaneTurret("Turret_T1_C_06_A", 1139.43726f, 8629.616f, TeamId.TEAM_BLUE, TurretType.InhibitorTurret, GetTurretItems(TurretType.InhibitorTurret)));
            AddObject(new LaneTurret("Turret_T1_C_07_A", 1095.27039f, 3984.54346f, TeamId.TEAM_BLUE, TurretType.InhibitorTurret, GetTurretItems(TurretType.InhibitorTurret)));
            AddObject(new LaneTurret("Turret_T1_L_02_A", 3946.62427f, 8156.286f, TeamId.TEAM_BLUE, TurretType.InnerTurret, GetTurretItems(TurretType.InnerTurret)));
            AddObject(new LaneTurret("Turret_T1_R_02_A", 3314.54126f, 3375.20752f, TeamId.TEAM_BLUE, TurretType.InnerTurret, GetTurretItems(TurretType.InnerTurret)));

            AddObject(new LaneTurret("Turret_ChaosTurretShrine_A", 13740.7f, 6395.247f, TeamId.TEAM_PURPLE, TurretType.FountainTurret));
            AddObject(new LaneTurret("Turret_T2_C_01_A", 11750.8838f, 6288.757f, TeamId.TEAM_PURPLE, TurretType.NexusTurret, GetTurretItems(TurretType.NexusTurret)));
            AddObject(new LaneTurret("Turret_T2_L_01_A", 12332.5508f, 8572.488f, TeamId.TEAM_PURPLE, TurretType.InhibitorTurret, GetTurretItems(TurretType.InhibitorTurret)));
            AddObject(new LaneTurret("Turret_T2_R_01_A", 12355.7578f, 4041.023f, TeamId.TEAM_PURPLE, TurretType.InhibitorTurret, GetTurretItems(TurretType.InhibitorTurret)));
            AddObject(new LaneTurret("Turret_T2_R_02_A", 10079.3438f, 3400.3772f, TeamId.TEAM_PURPLE, TurretType.InnerTurret, GetTurretItems(TurretType.InnerTurret)));
            AddObject(new LaneTurret("Turret_T2_L_02_A", 9562.389f, 8235.934f, TeamId.TEAM_PURPLE, TurretType.InnerTurret, GetTurretItems(TurretType.InnerTurret)));



            //TODO
            var COLLISION_RADIUS = 0;
            var SIGHT_RANGE      = 1700;

            AddObject(new Inhibitor("OrderInhibitor", TeamId.TEAM_BLUE, COLLISION_RADIUS, 895.594f, 8153.52832f, SIGHT_RANGE, 0xffd23c3e));      //top
            AddObject(new Inhibitor("OrderInhibitor", TeamId.TEAM_BLUE, COLLISION_RADIUS, 841.4701f, 4564.76074f, SIGHT_RANGE, 0xff9303e1));     //bot
            AddObject(new Inhibitor("ChaosInhibitor", TeamId.TEAM_PURPLE, COLLISION_RADIUS, 12563.9375f, 8092.63574f, SIGHT_RANGE, 0xff6793d0)); //top
            AddObject(new Inhibitor("ChaosInhibitor", TeamId.TEAM_PURPLE, COLLISION_RADIUS, 12706.2969f, 4483.154f, SIGHT_RANGE, 0xff26ac0f));   //bot

            AddObject(new Nexus("OrderNexus", TeamId.TEAM_BLUE, COLLISION_RADIUS, 2136.014f, 6311.61035f, SIGHT_RANGE, 0xfff97db5));
            AddObject(new Nexus("ChaosNexus", TeamId.TEAM_PURPLE, COLLISION_RADIUS, 11199.9639f, 6312.051f, SIGHT_RANGE, 0xfff02c0f));

            // Start at xp to reach level 1
            ExpToLevelUp = new List <int> {
                0, 280, 660, 1140, 1720, 2400, 3180, 4060, 5040, 6120, 7300, 8580, 9960, 11440, 13020, 14700, 16480, 18360
            };

            // Announcer events
            _announcerEvents.Add(new Announce(game, 30 * 1000, Announces.WelcomeToSR, true)); // Welcome to SR
            if (_firstSpawnTime - 30 * 1000 >= 0.0f)
            {
                _announcerEvents.Add(new Announce(game, _firstSpawnTime - 30 * 1000, Announces.ThirySecondsToMinionsSpawn, true)); // 30 seconds until minions spawn
            }
            _announcerEvents.Add(new Announce(game, _firstSpawnTime, Announces.MinionsHaveSpawned, false));                        // Minions have spawned (90 * 1000)
            _announcerEvents.Add(new Announce(game, _firstSpawnTime, Announces.MinionsHaveSpawned2, false));                       // Minions have spawned [2] (90 * 1000)
        }