public static void DevestateBuildings() { if (!Mod.Config.Devastation.Enabled) { return; } Mod.Log.Debug?.Write("Processing buildings for pre-battle devestation."); List <BattleTech.Building> shuffledBuildings = new List <BattleTech.Building>(); shuffledBuildings.AddRange(ModState.CandidateBuildings); // Randomize the buildings by shuffling them shuffledBuildings.Shuffle(); int minNum = (int)(Mod.Config.Devastation.DefaultRange.MinDevastation * 100f); int maxNum = (int)(Mod.Config.Devastation.DefaultRange.MaxDevastation * 100f); int destroyPercentile = Mod.Random.Next(minNum, maxNum); float destroyPercent = (float)destroyPercentile / 100f; int destroyedBuildings = (int)Math.Floor(shuffledBuildings.Count * destroyPercent); Mod.Log.Debug?.Write($"Destruction percentile: {destroyPercent} applied to {shuffledBuildings.Count} buildings = {destroyedBuildings} destroyed buildings."); for (int i = 0; i < destroyedBuildings; i++) { BattleTech.Building building = shuffledBuildings.ElementAt(i); Mod.Log.Debug?.Write($"Destroying building: {CombatantUtils.Label(building)}"); building.FlagForDeath("CG_PREMAP_DESTROY", DeathMethod.DespawnedNoMessage, DamageType.NOT_SET, 1, -1, "0", true); building.HandleDeath("0"); ModState.CandidateBuildings.Remove(building); } }
private void CollapseNextBuilding() { this.timeSinceLastCollapse += Time.deltaTime; if (this.timeSinceLastCollapse > this.timeBetweenBuildingCollapses) { if (this.BuildingsToCollapse.Count > 0) { BattleTech.Building buildingToCollapse = this.BuildingsToCollapse[0]; this.BuildingsToCollapse.RemoveAt(0); Mod.Log.Debug?.Write($"Collapsing ambush building: {CombatantUtils.Label(buildingToCollapse)}"); buildingToCollapse.FlagForDeath("Ambush Collapse", DeathMethod.Unknown, DamageType.Artillery, 0, -1, "0", false); buildingToCollapse.HandleDeath("0"); } this.timeSinceLastCollapse = 0f; } }