private void PublishReport()
        {
            DamagedBuildingsReport report = new DamagedBuildingsReport();

            int length = damageMessages.Messages.Count;

            DamagedBuildingsReport.DamagedBuildings[] damagedBuildings = new DamagedBuildingsReport.DamagedBuildings[length];

            for (int i = 0; i < length; i++)
            {
                BuildingDamageResult resultMessage = damageMessages.Messages[i];

                damagedBuildings[i] = new DamagedBuildingsReport.DamagedBuildings()
                {
                    Location = resultMessage.Location,
                    State    = (DamagedBuildingsReport.DamageState)resultMessage.Result
                };
            }

            report.DamagedBuildingsLength = length;
            report.Buildings = damagedBuildings;

            EventReportsManager.Send(report);
        }
    private IEnumerator DamagedBuildingsReportHandler(DamagedBuildingsReport dbr)
    {
        if (initialized)
        {
            yield break;
        }

        while (CopiesParent == null || !terrainFullyLoaded)
        {
            yield return(null);
        }

        DamagedBuildingsReport.DamagedBuildings[] buildings = dbr.Buildings;

        for (int i = 0; i < buildings.Length; i++)
        {
            switch (buildings[i].State)
            {
            case DamagedBuildingsReport.DamageState.None:
                break;

            case DamagedBuildingsReport.DamageState.PartiallyDestroyed:
                break;

            case DamagedBuildingsReport.DamageState.Destroyed:
                Vector3 local = CoordConverter.GeocToLocal(buildings[i].Location);
                StartCoroutine(DestroyBuildingAtPosition(local));
                break;

            default:
                break;
            }
        }

        initialized = true;
    }