Пример #1
0
        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;
            }
        }