public static List <MissionSpot> GetMissionSpotsFromUnitsOnZone(IZone zone, bool collectFindRadius = false)
        {
            var spots = new List <MissionSpot>();

            var fieldTerminals = zone.Units.Where(u => u is FieldTerminal).ToList();

            foreach (var fieldTerminal in fieldTerminals)
            {
                var ms = new MissionSpot(MissionSpotType.fieldterminal, fieldTerminal.CurrentPosition, zone.Id);
                spots.Add(ms);
            }

            var missionStructures = zone.Units.Where(u => u is MissionStructure).Cast <MissionStructure>().ToList();

            foreach (var missionStructure in missionStructures)
            {
                MissionSpotType spotType;

                switch (missionStructure.TargetType)
                {
                case MissionTargetType.use_itemsupply:
                    spotType = MissionSpotType.itemsupply;
                    break;

                case MissionTargetType.submit_item:
                    spotType = MissionSpotType.kiosk;
                    break;

                default:
                    spotType = MissionSpotType.mswitch;
                    break;
                }

                var ms = new MissionSpot(spotType, missionStructure.CurrentPosition, zone.Id);

                if (collectFindRadius)
                {
                    var missionTarget = _missionDataCache.GetTargetByStructureUnit(missionStructure);
                    ms.SetFindRadius(missionTarget.FindRadius);
                }

                spots.Add(ms);
            }

            return(spots);
        }
        public static List <MissionSpot> GetRandomPointSpotsFromTargets(ZoneConfiguration zoneConfig, bool collectFindRadius = false)
        {
            var pointTargets = _missionDataCache.GetAllMissionTargets.Where(t => t.Type == MissionTargetType.rnd_point && t.ZoneId == zoneConfig.Id).ToList();

            var result = new List <MissionSpot>(pointTargets.Count);

            foreach (var missionTarget in pointTargets)
            {
                var ms = new MissionSpot(MissionSpotType.randompoint, missionTarget.targetPosition, zoneConfig.Id);

                if (collectFindRadius)
                {
                    ms.SetFindRadius(missionTarget.FindRadius);
                }

                result.Add(ms);
            }

            return(result);
        }