Exemple #1
0
        public async Task <Response> AddItemAsync(BuildingLocation item)
        {
            Response result = new Response();

            Dictionary <string, string> parameters = new Dictionary <string, string>();

            parameters.Add("Id", item.Id);
            parameters.Add("Name", item.Name);

            parameters.Add("Description", item.Description);
            parameters.Add("BuildingId", item.BuildingId);
            parameters.Add("UserID", App.LogUser.Id.ToString());
            parameters.Add("ImageName", item.ImageName);
            parameters.Add("ImageUrl", item.ImageUrl);
            parameters.Add("ImageDescription", item.ImageDescription);


            //Regex UrlMatch = new Regex(@"(?i)(http(s)?:\/\/)?(\w{2,25}\.)+\w{3}([a-z0-9\-?=$-_.+!*()]+)(?i)", RegexOptions.Singleline);
            //if (item.ImageUrl == "blank.png" || UrlMatch.IsMatch(item.ImageUrl))
            //{
            //    item.ImageUrl = null;

            //}
            string ImageUrl = HttpUtil.GetImageUrl(item.ImageUrl).Result;

            result = await HttpUtil.UploadSingleImage(item.Name, ImageUrl, "api/BuildingLocation/AddEdit", parameters);


            return(await Task.FromResult(result));
        }
Exemple #2
0
        public async Task <Response> DeleteItemAsync(BuildingLocation item)
        {
            item.IsDelete = true;
            item.UserId   = App.LogUser.Id.ToString();
            using (HttpClient client = new HttpClient())
            {
                client.BaseAddress = new Uri(App.AzureBackendUrl);
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(
                    new MediaTypeWithQualityHeaderValue("application/json"));
                using (HttpResponseMessage response = await client.PostAsJsonAsync($"api/BuildingLocation/DeleteBuildingLocation", item))
                {
                    var responseBody = await response.Content.ReadAsStringAsync();

                    Response result = JsonConvert.DeserializeObject <Response>(responseBody);

                    response.EnsureSuccessStatusCode();
                    //if (response.IsSuccessStatusCode == false)
                    //{
                    //    throw new ApiException
                    //    {
                    //        StatusCode = (int)response.StatusCode,
                    //        Content = result.Message
                    //    };
                    //}
                    return(await Task.FromResult(result));
                }
            }
        }
    //-------------------------------------------------------------------------------------------------
    //nuskaito pastatų pozicijų duomenis
    public static BuildingLocation[] ReadBuildingLocations(string dataFile, int countOfBuildings)
    {
        string dataPath = Application.persistentDataPath;
        string FilePath = Path.Combine(dataPath, dataFile + ".txt");

        BuildingLocation[] locations = new BuildingLocation[countOfBuildings];
        if (File.Exists(FilePath))
        {
            StreamReader reader = new StreamReader(new FileStream(FilePath, FileMode.Open));
            int          i      = 0;
            string       line   = reader.ReadLine();
            while (line != null)
            {
                string[] values = line.Split(' ');
                float    x      = float.Parse(values[0]);
                float    y      = float.Parse(values[1]);
                float    z      = float.Parse(values[2]);
                locations[i] = new BuildingLocation(x, y, z);
                line         = reader.ReadLine();
                i++;
            }
            reader.Close();
        }
        return(locations);
    }
Exemple #4
0
        public void ConstructorShallSetType()
        {
            var type             = typeof(SingleTileBuilding);
            var buildingLocation = new BuildingLocation(type, new Tile(), Angle.Zero);

            Assert.AreEqual(type, buildingLocation.Type);
        }
Exemple #5
0
    private Vector2[,] FindBuildingSquares(int biuldingIndex, BuildingLocation buildingLocation)
    {
        Vector2[,]  squares = new Vector2[buildingsDimensions[biuldingIndex].xLength, buildingsDimensions[biuldingIndex].zWidth];
        double startX = 0;
        double startZ = 0;

        if (buildingLocation.x > 0)
        {
            startX = (double)buildingLocation.x - ((double)buildingsDimensions[biuldingIndex].xLength / 2);
        }
        else
        {
            startX = (double)buildingLocation.x - ((double)buildingsDimensions[biuldingIndex].xLength / 2);
        }
        if (buildingLocation.z > 0)
        {
            startZ = (double)buildingLocation.z - ((double)buildingsDimensions[biuldingIndex].zWidth / 2);
        }
        else
        {
            startZ = (double)buildingLocation.z - ((double)buildingsDimensions[biuldingIndex].zWidth / 2);
        }

        for (int i = 0; i < buildingsDimensions[biuldingIndex].zWidth; i++)
        {
            for (int j = 0; j < buildingsDimensions[biuldingIndex].xLength; j++)
            {
                squares[i, j].x = baseGridDimensionX_n + (float)startX + j;
                squares[i, j].y = baseGridDimensionZ_n + (float)startZ + i;
            }
        }
        return(squares);
    }
Exemple #6
0
 // Kvieciamas tik tada kai paspaudziama ant movables layer neturincio pastato
 public void DeselectBuildings()
 {
     if (selectedBuildingIndex != -1)
     {
         if (EmptySpot(selectedBuildingIndex))
         {
             ClearSquares(selectedBuildingIndex, buildingsLocations[selectedBuildingIndex]);
             buildingsLocations[selectedBuildingIndex] = new BuildingLocation(buildings[selectedBuildingIndex].transform.position.x, buildings[selectedBuildingIndex].transform.position.y, buildings[selectedBuildingIndex].transform.position.z);
             FillSquares(selectedBuildingIndex, buildingsLocations[selectedBuildingIndex]);
         }
         else
         {
             buildings[selectedBuildingIndex].transform.position        = new Vector3(buildingsLocations[selectedBuildingIndex].x, buildingsLocations[selectedBuildingIndex].y, buildingsLocations[selectedBuildingIndex].z);
             buildingBasisMeshRenderers[selectedBuildingIndex].material = green;
         }
         if (buildings[selectedBuildingIndex].transform.position == new Vector3(0, -100, 0))
         {
             CanonManager    canonManager    = buildings[selectedBuildingIndex].GetComponent(typeof(CanonManager)) as CanonManager;
             CrossbowManager crossbowManager = buildings[selectedBuildingIndex].GetComponent(typeof(CrossbowManager)) as CrossbowManager;
             if (canonManager != null)
             {
                 AddAndRemove.instance.SellCanon();
             }
             else if (crossbowManager != null)
             {
                 AddAndRemove.instance.SellCrossbowTower();
             }
         }
         PutBuildingBack(selectedBuildingIndex);
         selectedBuildingIndex = -1;
         selectedBuildingArrows.transform.position = new Vector3(0, -100, 0);
     }
     removeBuildingButton.gameObject.SetActive(false);
 }
Exemple #7
0
        public void ConstructorShallSetTile()
        {
            var tile             = new Tile();
            var buildingLocation = new BuildingLocation(typeof(SingleTileBuilding), tile, Angle.Zero);

            Assert.AreEqual(tile, buildingLocation.Tile);
        }
        private static void Spawn(BuildingLocation _location)
        {
            switch (_location.m_buildingType)
            {
            case BuildingType.BARRACKS_KNIGHT:
                for (int i = 0; i < 4; ++i)
                {
                    m_unitList.Add(new Unit((int)_location.m_position.x, (int)_location.m_position.y, _location.m_allianceType, UnitType.KNIGHT));
                }
                break;

            case BuildingType.BARRACKS_ARCHER:
                for (int i = 0; i < 2; ++i)
                {
                    m_unitList.Add(new Unit((int)_location.m_position.x, (int)_location.m_position.y, _location.m_allianceType, UnitType.ARCHER));
                }
                break;

            case BuildingType.BARRACKS_GIANT:
                for (int i = 0; i < 1; ++i)
                {
                    m_unitList.Add(new Unit((int)_location.m_position.x, (int)_location.m_position.y, _location.m_allianceType, UnitType.GIANT));
                }
                break;

            default:
                break;
            }
        }
Exemple #9
0
        public void Instantiate_ShallCreateBuilding()
        {
            var buildingLocation = new BuildingLocation(typeof(SingleTileBuilding), new Tile(), Angle.Zero);
            var result           = buildingLocation.Instantiate();

            Assert.True(result is SingleTileBuilding);
            Assert.AreEqual(Angle.Zero, result.Angle);
        }
 public static void RecordTurretDamage(Turret __instance, BuildingLocation bLoc, float totalDamage)
 {
     if (bLoc == BuildingLocation.None || bLoc == BuildingLocation.Invalid)
     {
         return;
     }
     RecordUnitDamage(bLoc.ToString(), totalDamage, __instance.GetCurrentArmor(bLoc), __instance.GetCurrentStructure(bLoc));
 }
Exemple #11
0
        public async Task <bool> UpdateItemAsync(BuildingLocation item)
        {
            var oldItem = items.Where((BuildingLocation arg) => arg.Id == item.Id).FirstOrDefault();

            items.Remove(oldItem);
            items.Add(item);

            return(await Task.FromResult(true));
        }
 public static void LogTurretDamage(Turret __instance, BuildingLocation bLoc)
 {
     try {
         if (bLoc == BuildingLocation.None || bLoc == BuildingLocation.Invalid)
         {
             return;
         }
         LogActorDamage(__instance.GetCurrentArmor(bLoc), __instance.GetCurrentStructure(bLoc));
     }                 catch (Exception ex) { Error(ex); }
 }
Exemple #13
0
 public static void FixZombieTurret(Turret __instance, ref float totalDamage, BuildingLocation bLoc)
 {
     try {
         if (bLoc == BuildingLocation.None || bLoc == BuildingLocation.Invalid)
         {
             return;
         }
         KillZombie("turret", __instance.DisplayName, __instance.GetCurrentArmor(bLoc) + __instance.GetCurrentStructure(bLoc), ref totalDamage);
     }                 catch (Exception ex) { Error(ex); }
 }
Exemple #14
0
 //langeliai uzpildomi pastato indeksu
 public void FillSquares(int buildingIndex, BuildingLocation location)
 {
     Vector2[,] buildingSquares = FindBuildingSquares(buildingIndex, location);
     for (int i = 0; i < buildingsDimensions[buildingIndex].zWidth; i++)
     {
         for (int j = 0; j < buildingsDimensions[buildingIndex].xLength; j++)
         {
             base_squares[(int)buildingSquares[i, j].y, (int)buildingSquares[i, j].x] = buildingIndex;
         }
     }
 }
Exemple #15
0
    public void RemoveBuilding()
    {
        buildings[selectedBuildingIndex].transform.position = new Vector3(0, -100, 0);
        BuildingLocation location = buildingsLocations[selectedBuildingIndex];

        ClearSquares(selectedBuildingIndex, location);
        buildingsLocations[selectedBuildingIndex] = new BuildingLocation(buildings[selectedBuildingIndex].transform.position.x, buildings[selectedBuildingIndex].transform.position.y, buildings[selectedBuildingIndex].transform.position.z);
        selectedBuildingIndex = -1;
        selectedBuildingArrows.transform.position = new Vector3(0, -100, 0);
        removeBuildingButton.gameObject.SetActive(false);
    }
Exemple #16
0
    //-----------------------------------------------------------------------------------------------------
    //Kvieciamas kai paspaudziama ant movables layer turincio pastato
    public void SelectBuilding(int index)
    {
        if (index != selectedBuildingIndex)
        {
            if (selectedBuildingIndex != -1)
            {
                if (EmptySpot(selectedBuildingIndex))
                {
                    ClearSquares(selectedBuildingIndex, buildingsLocations[selectedBuildingIndex]);
                    buildingsLocations[selectedBuildingIndex] = new BuildingLocation(buildings[selectedBuildingIndex].transform.position.x, buildings[selectedBuildingIndex].transform.position.y, buildings[selectedBuildingIndex].transform.position.z);
                    FillSquares(selectedBuildingIndex, buildingsLocations[selectedBuildingIndex]);
                }
                else
                {
                    buildings[selectedBuildingIndex].transform.position        = new Vector3(buildingsLocations[selectedBuildingIndex].x, buildingsLocations[selectedBuildingIndex].y, buildingsLocations[selectedBuildingIndex].z);
                    buildingBasisMeshRenderers[selectedBuildingIndex].material = green;
                }

                if (selectedBuildingIndex != index)
                {
                    PutBuildingBack(selectedBuildingIndex);
                    BringBuildingNearer(index);
                }
            }
            else
            {
                BringBuildingNearer(index);
            }

            if (selectedBuildingIndex != -1 && buildings[selectedBuildingIndex].transform.position == new Vector3(0, -100, 0))
            {
                CanonManager    canonManager    = buildings[selectedBuildingIndex].GetComponent(typeof(CanonManager)) as CanonManager;
                CrossbowManager crossbowManager = buildings[selectedBuildingIndex].GetComponent(typeof(CrossbowManager)) as CrossbowManager;
                if (canonManager != null)
                {
                    AddAndRemove.instance.SellCanon();
                }
                else if (crossbowManager != null)
                {
                    AddAndRemove.instance.SellCrossbowTower();
                }
            }

            BuildingPlacement.instance.SetItem(buildings[index], buildingsDimensions[index]);

            SetArrowsLocalPosition(index);
            selectedBuildingArrows.transform.position = new Vector3(buildings[index].transform.position.x, 0, buildings[index].transform.position.z);
            BringArrowsNearer();

            selectedBuildingIndex = index;
        }
        removeBuildingButton.gameObject.SetActive(true);
    }
 void Start()
 {
     BountError    = BountyError.NoError;
     bountySize    = GameObject.Find("BountySpotlight");
     heroSpawn     = GameObject.Find("HeroController").GetComponent <HeroSpawner>();
     mymainmoney   = GameObject.Find("GUIIncometab").GetComponent <MainMoney> ();
     spawnPointpos = gameObject.transform.position;
     spawnPointRot = gameObject.transform.rotation;
     buildingloc   = GameObject.Find("BuildingManager").GetComponent <BuildingLocation> ();
     maxxz         = heroSpawn.HowFarCanIGo(1);
     MaxX          = maxxz [0];
     MaxZ          = maxxz [1];
 }
Exemple #18
0
 public void ClearSquares(int buildingIndex, BuildingLocation location)
 {
     Vector2[,] squaresToClear = FindBuildingSquares(buildingIndex, location);
     for (int i = 0; i < buildingsDimensions[buildingIndex].zWidth; i++)
     {
         for (int j = 0; j < buildingsDimensions[buildingIndex].xLength; j++)
         {
             if (base_squares[(int)squaresToClear[i, j].y, (int)squaresToClear[i, j].x] == buildingIndex)
             {
                 base_squares[(int)squaresToClear[i, j].y, (int)squaresToClear[i, j].x] = -1;
             }
         }
     }
 }
        private static void TryToTrainCreepsFromBuilding(PlayerData _player, int id)
        {
            BuildingLocation location = m_locationList[id];

            if (location.m_remainingBuildTime > 0)
            {
                return;
            }
            int price = GetPriceFromBuildingType(location.m_buildingType);

            if (_player.m_gold >= price)
            {
                location.m_remainingBuildTime = GetBuildTimeFromType(location);
                _player.m_gold -= price;
            }
        }
Exemple #20
0
 async Task ExecuteLocationDetailCommand(BuildingLocation parm)
 {
     if (parm != null)
     {
         // await Shell.Current.Navigation.PushAsync(new BuildingLo() { BindingContext = new ProjectDetailViewModel() { Project = Project } });
         if (Shell.Current.Navigation.NavigationStack[Shell.Current.Navigation.NavigationStack.Count - 1].GetType() != typeof(BuildingLocationDetail))
         {
             await Shell.Current.Navigation.PushAsync(new BuildingLocationDetail()
             {
                 BindingContext = new BuildingLocationDetailViewModel()
                 {
                     BuildingLocation = parm
                 }
             });
         }
     }
 }
        static private void SpawnTwinLocationsWithOffset(int _x, int _y)
        {
            Random random = RefereeData.m_random;

            _x = random.Next(_x - 10, _x + 10);
            _y = random.Next(_y - 10, _y + 10);
            Vector2 centerOfMap      = new Vector2(RefereeData.m_fieldWidth / 2, RefereeData.m_fieldHeight / 2);
            float   distanceToCenter = Vector2.GetDistance(centerOfMap, new Vector2(_x, _y)).GetLength();

            int distanceBonus = 0;

            if (distanceToCenter <= 500 * 500)
            {
                ++distanceBonus;
            }
            if (distanceToCenter <= 200 * 200)
            {
                ++distanceBonus;
            }



            int randomRadius      = random.Next(m_locationMinRadius, m_locationMaxRadius);
            int randomGoldValue   = random.Next(200, 250) + (50 * distanceBonus);
            int maximumMiningRate = random.Next(1, 3) + distanceBonus;

            BuildingLocation newBuildingLocation = new BuildingLocation(m_siteIdCount, _x, _y, randomRadius);

            newBuildingLocation.m_buildingType  = BuildingType.NONE;
            newBuildingLocation.m_allianceType  = AllianceType.NEUTRAL;
            newBuildingLocation.m_goldRemaining = randomGoldValue;
            newBuildingLocation.m_maxYield      = maximumMiningRate;
            m_locationList.Add(newBuildingLocation);

            ++m_siteIdCount;


            BuildingLocation twinBuildingLocation = new BuildingLocation(m_finalLocationCount - m_siteIdCount,
                                                                         RefereeData.m_fieldWidth - _x, RefereeData.m_fieldHeight - _y, randomRadius);

            twinBuildingLocation.m_buildingType  = BuildingType.NONE;
            twinBuildingLocation.m_allianceType  = AllianceType.NEUTRAL;
            twinBuildingLocation.m_goldRemaining = randomGoldValue;
            twinBuildingLocation.m_maxYield      = maximumMiningRate;
            m_locationList.Add(twinBuildingLocation);
        }
        private static int GetBuildTimeFromType(BuildingLocation location)
        {
            switch (location.m_buildingType)
            {
            case BuildingType.BARRACKS_KNIGHT:
                return(5);

            case BuildingType.BARRACKS_ARCHER:
                return(8);

            case BuildingType.BARRACKS_GIANT:
                return(10);

            default:
                return(0);
            }
        }
        static private void CreateQueens()
        {
            BuildingLocation queenSpawnLocation = m_locationList[0];
            Vector2          firstQueenPos      = queenSpawnLocation.m_position;

            firstQueenPos.y         = queenSpawnLocation.m_position.y + (queenSpawnLocation.m_radius);
            m_player1Queen          = new Unit((int)firstQueenPos.x, (int)firstQueenPos.y, AllianceType.FRIENDLY, UnitType.QUEEN);
            m_player1Queen.m_radius = 30;
            m_unitList.Add(m_player1Queen);

            BuildingLocation enemySpawnLocation = m_locationList.Last();
            Vector2          secondQueenPos     = enemySpawnLocation.m_position;

            secondQueenPos.y        = enemySpawnLocation.m_position.y - (enemySpawnLocation.m_radius);
            m_player2Queen          = new Unit((int)secondQueenPos.x, (int)secondQueenPos.y, AllianceType.HOSTILE, UnitType.QUEEN);
            m_player2Queen.m_radius = 30;
            m_unitList.Add(m_player2Queen);
        }
Exemple #24
0
    public bool EmptySpot(int buildingIndex)
    {
        BuildingLocation location = new BuildingLocation(buildings[buildingIndex].transform.position.x, buildings[buildingIndex].transform.position.y, buildings[buildingIndex].transform.position.z);

        Vector2[,] buildingSquares = FindBuildingSquares(buildingIndex, location);
        for (int i = 0; i < buildingsDimensions[buildingIndex].zWidth; i++)
        {
            for (int j = 0; j < buildingsDimensions[buildingIndex].xLength; j++)
            {
                if (base_squares[(int)buildingSquares[i, j].y, (int)buildingSquares[i, j].x] != -1 &&
                    base_squares[(int)buildingSquares[i, j].y, (int)buildingSquares[i, j].x] != buildingIndex)
                {
                    buildingBasisMeshRenderers[buildingIndex].material = red;
                    return(false);
                }
            }
        }
        buildingBasisMeshRenderers[buildingIndex].material = green;
        return(true);
    }
        internal static void Build(AllianceType _allianceType, int siteId, BuildingType _type)
        {
            BuildingLocation location = m_locationList[siteId];

            if (_allianceType != location.m_allianceType && location.m_buildingType == BuildingType.TOWER)
            {
                return;
            }


            if (_allianceType == location.m_allianceType && _type == location.m_buildingType)
            {
                if (location.m_buildingType == BuildingType.MINE)
                {
                    ++location.m_level;
                    if (location.m_level > location.m_maxYield)
                    {
                        location.m_level = location.m_maxYield;
                    }
                }
                else if (location.m_buildingType == BuildingType.TOWER)
                {
                    location.m_level += 100;
                    if (location.m_level > 800)
                    {
                        location.m_level = 800;
                    }
                }
            }
            else
            {
                location.Reset();
                location.m_allianceType = _allianceType;
                location.m_buildingType = _type;

                if (location.m_buildingType == BuildingType.TOWER)
                {
                    location.m_level = 100;
                }
            }
        }
Exemple #26
0
        public async Task <BuildingLocation> GetItemAsync(string id)
        {
            using (HttpClient client = new HttpClient())
            {
                client.BaseAddress = new Uri(App.AzureBackendUrl);
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(
                    new MediaTypeWithQualityHeaderValue("application/json"));
                using (HttpResponseMessage response = await client.GetAsync($"api/BuildingLocation/GetBuildingLocationByID?Id=" + id))
                {
                    var responseBody = await response.Content.ReadAsStringAsync();

                    Response result = JsonConvert.DeserializeObject <Response>(responseBody);


                    BuildingLocation location = JsonConvert.DeserializeObject <BuildingLocation>(result.Data.ToString());


                    response.EnsureSuccessStatusCode();
                    return(await Task.FromResult(location));
                }
            }
        }
Exemple #27
0
    //-----------------------------------------------------------------------------------------

    //private void Renew()
    //{
    //    buildingsLocations[0] = new BuildingLocation(10.5f, 0, 10.5f);
    //    buildingsLocations[1] = new BuildingLocation(-10.5f, 0, 10.5f);
    //    buildingsLocations[2] = new BuildingLocation(-10.5f, 0, -10.5f);
    //    buildingsLocations[3] = new BuildingLocation(10.5f, 0, -10.5f);

    //    for (int i = 0; i < baseGridDimensionZ_p + baseGridDimensionZ_n; i++)
    //    {
    //        for (int j = 0; j < baseGridDimensionX_p + baseGridDimensionX_n; j++)
    //        {
    //            if (i >= 14 && i <= 25)
    //            {
    //                base_squares[i, j] = -2; // kelias ir sienos
    //            }
    //            else
    //            {
    //                base_squares[i, j] = -1;
    //            }
    //        }
    //    }

    //    FillSquares(0, buildingsLocations[0]);
    //    FillSquares(1, buildingsLocations[1]);
    //    FillSquares(2, buildingsLocations[2]);
    //    FillSquares(3, buildingsLocations[3]);
    //}

    private void Renew()
    {
        for (int i = 0; i < numberOfBuildings; i++)
        {
            buildingsLocations[i] = new BuildingLocation(0, -100, 0);
        }

        for (int i = 0; i < baseGridDimensionZ_p + baseGridDimensionZ_n; i++)
        {
            for (int j = 0; j < baseGridDimensionX_p + baseGridDimensionX_n; j++)
            {
                if (i >= 14 && i <= 25)
                {
                    base_squares[i, j] = -2; // kelias ir sienos
                }
                else
                {
                    base_squares[i, j] = -1;
                }
            }
        }

        AddAndRemove.instance.ChangeMoneyValue(100000);
    }
        public static void Postfix(Turret __instance, BuildingLocation location, float damage, WeaponHitInfo hitInfo)
        {
            Mod.Log.Trace("T:ASSD - entered.");

            if (ModState.BreachCheck == 0f)
            {
                return;
            }                                           // nothing to do
            if (hitInfo.attackSequenceId != ModState.BreachAttackId)
            {
                Mod.Log.Error("INCOHERENT ATTACK SEQUENCE- SKIPPING!");
                return;
            }

            Mod.Log.Debug($" --- Location: {location} needs breach check.");
            if (ModState.BreachHitsTurret.ContainsKey(location))
            {
                ModState.BreachHitsTurret[location]++;
            }
            else
            {
                ModState.BreachHitsTurret.Add(location, 1);
            }
        }
        public static void Postfix(Turret __instance, BuildingLocation location, float damage, WeaponHitInfo hitInfo)
        {
            Mod.Log.Trace?.Write("T:ASSD - entered.");

            if (ModState.BreachCheck == 0f || ModState.BreachAttackId == ModState.NO_ATTACK_SEQUENCE_ID)
            {
                return;
            }                                                                                                        // nothing to do
            if (hitInfo.attackSequenceId != ModState.BreachAttackId)
            {
                Mod.Log.Warn?.Write($"AttackSequenceId: {hitInfo.attackSequenceId} does not match hull breach attack sequence id: {ModState.BreachAttackId}... wasn't expecting this, skipping!");
                return;
            }

            Mod.Log.Debug?.Write($" --- Location: {location} needs breach check.");
            if (ModState.BreachHitsTurret.ContainsKey(location))
            {
                ModState.BreachHitsTurret[location]++;
            }
            else
            {
                ModState.BreachHitsTurret.Add(location, 1);
            }
        }
 internal static bool DamageLocation(this Turret turret, WeaponHitInfo hitInfo, BuildingLocation bLoc, Weapon weapon, float totalDamage)
 {
     return(Traverse.Create(turret).Method(nameof(DamageLocation), hitInfo, bLoc, weapon, totalDamage).GetValue <bool>());
 }