public void demolishBuilding(ushort index, bool IsManual)
        {
            SimulationManager simManager   = Singleton <SimulationManager> .instance;
            BuildingManager   buildManager = Singleton <BuildingManager> .instance;

            if (index >= buildManager.m_buildings.m_buffer.Length)
            {
                UnityEngine.Debug.LogWarning("Autodemolish: building " + index + " not exists.");
                return;
            }


            Building build = buildManager.m_buildings.m_buffer[index];


            bool needToDemolish = false;

            DemolishCounter.DemolishType DemolishType = DemolishCounter.DemolishType.Null;
            if (BulldozerPanelInterface.b_demolishAbandoned && ((build.m_flags & Building.Flags.Abandoned) != Building.Flags.None))
            {
                DemolishType   = DemolishCounter.DemolishType.Abandon;
                needToDemolish = true;
            }
            else if (BulldozerPanelInterface.b_demolishBurned && ((build.m_flags & Building.Flags.BurnedDown) != Building.Flags.None))
            {
                DemolishType   = DemolishCounter.DemolishType.Burned;
                needToDemolish = true;
            }

            if (needToDemolish)
            {
                DeleteBuildingImpl(index, true, DemolishType, IsManual);
                return;
            }
        }
        private void DeleteBuildingImpl(ushort building, bool showEffect, DemolishCounter.DemolishType DemolishType, bool IsManual)
        {
            BuildingManager buildManager = Singleton <BuildingManager> .instance;

            if (building <= buildManager.m_buildings.m_buffer.Length)
            {
                if (Singleton <BuildingManager> .instance.m_buildings.m_buffer[building].m_flags != Building.Flags.None)
                {
                    BuildingManager instance = Singleton <BuildingManager> .instance;
                    BuildingInfo    info     = instance.m_buildings.m_buffer[(int)building].Info;
                    if (info.m_buildingAI.CheckBulldozing(building, ref instance.m_buildings.m_buffer[(int)building]) == ToolBase.ToolErrors.None)
                    {
                        int buildingRefundAmount = this.GetBuildingRefundAmount(building);
                        if (buildingRefundAmount != 0)
                        {
                            Singleton <EconomyManager> .instance.AddResource(EconomyManager.Resource.RefundAmount, buildingRefundAmount, info.m_class);
                        }
                        Vector3 pos    = instance.m_buildings.m_buffer[(int)building].m_position;
                        float   angle  = instance.m_buildings.m_buffer[(int)building].m_angle;
                        int     length = instance.m_buildings.m_buffer[(int)building].Length;
                        instance.ReleaseBuilding(building);
                        DemolishCounter.AddToCount(DemolishType, IsManual ? 0 : 1);
                        if (info.m_class.m_service > ItemClass.Service.Office)
                        {
                            Singleton <CoverageManager> .instance.CoverageUpdated(info.m_class.m_service, info.m_class.m_subService, info.m_class.m_level);
                        }
                        if (showEffect)
                        {
                            DispatchAutobulldozeEffect(info, pos, angle, length);
                        }
                    }
                }
            }
        }