@@ -128,11 +128,11 @@ public async Task<string> GetInstanceStatus(Instance instance)
128128 public async Task AddInstance ( Instance instance )
129129 {
130130 IJobController instanceController = null ;
131- var geofence = GeofenceController . Instance . GetGeofence ( instance . Geofence ) ;
132- if ( geofence == null )
131+ var geofences = GeofenceController . Instance . GetGeofences ( instance . Geofences ) ;
132+ if ( geofences == null )
133133 {
134134 // Failed to get geofence, skip?
135- _logger . LogError ( $ "[{ instance . Name } ] Failed to get geofence for instance, make sure it is assign one") ;
135+ _logger . LogError ( $ "[{ instance . Name } ] Failed to get geofences for instance, make sure it is assign at least one") ;
136136 return ;
137137 }
138138 switch ( instance . Type )
@@ -142,22 +142,27 @@ public async Task AddInstance(Instance instance)
142142 case InstanceType . SmartCircleRaid :
143143 try
144144 {
145- var area = geofence ? . Data ? . Area ;
146- var coordsArray = ( List < Coordinate > )
147- (
148- area is List < Coordinate >
149- ? area
150- : JsonSerializer . Deserialize < List < Coordinate > > ( Convert . ToString ( area ) )
151- ) ;
145+ var coords = new List < Coordinate > ( ) ;
146+ foreach ( var geofence in geofences )
147+ {
148+ var area = geofence ? . Data ? . Area ;
149+ var coordsArray = ( List < Coordinate > )
150+ (
151+ area is List < Coordinate >
152+ ? area
153+ : JsonSerializer . Deserialize < List < Coordinate > > ( Convert . ToString ( area ) )
154+ ) ;
155+ coords . AddRange ( coordsArray ) ;
156+ }
152157 var minLevel = instance . MinimumLevel ;
153158 var maxLevel = instance . MaximumLevel ;
154159 switch ( instance . Type )
155160 {
156161 case InstanceType . CirclePokemon :
157- instanceController = new CircleInstanceController ( instance . Name , coordsArray , CircleType . Pokemon , instance . Data . CircleRouteType , minLevel , maxLevel , instance . Data . AccountGroup , instance . Data . IsEvent ) ;
162+ instanceController = new CircleInstanceController ( instance . Name , coords , CircleType . Pokemon , instance . Data . CircleRouteType , minLevel , maxLevel , instance . Data . AccountGroup , instance . Data . IsEvent ) ;
158163 break ;
159164 case InstanceType . CircleRaid :
160- instanceController = new CircleInstanceController ( instance . Name , coordsArray , CircleType . Raid , CircleRouteType . Default , minLevel , maxLevel , instance . Data . AccountGroup , instance . Data . IsEvent ) ;
165+ instanceController = new CircleInstanceController ( instance . Name , coords , CircleType . Raid , CircleRouteType . Default , minLevel , maxLevel , instance . Data . AccountGroup , instance . Data . IsEvent ) ;
161166 break ;
162167 case InstanceType . SmartCircleRaid :
163168 // TODO: SmartCircleRaidInstanceController
@@ -175,32 +180,40 @@ area is List<Coordinate>
175180 case InstanceType . FindTTH :
176181 try
177182 {
178- var area = geofence ? . Data ? . Area ;
179- var coordsArray = ( List < List < Coordinate > > )
180- (
181- area is List < List < Coordinate > >
182- ? area
183- : JsonSerializer . Deserialize < List < List < Coordinate > > > ( Convert . ToString ( area ) )
184- ) ;
185- var areaArrayEmptyInner = new List < MultiPolygon > ( ) ;
186- foreach ( var coords in coordsArray )
183+ var multiPolygons = new List < MultiPolygon > ( ) ;
184+ var coordinates = new List < List < Coordinate > > ( ) ;
185+ foreach ( var geofence in geofences )
187186 {
188- var multiPolygon = new MultiPolygon ( ) ;
189- Coordinate first = null ;
190- for ( var i = 0 ; i < coords . Count ; i ++ )
187+ var area = geofence ? . Data ? . Area ;
188+ var coordsArray = ( List < List < Coordinate > > )
189+ (
190+ area is List < List < Coordinate > >
191+ ? area
192+ : JsonSerializer . Deserialize < List < List < Coordinate > > > ( Convert . ToString ( area ) )
193+ ) ;
194+ coordinates . AddRange ( coordsArray ) ;
195+
196+ var areaArrayEmptyInner = new List < MultiPolygon > ( ) ;
197+ foreach ( var coords in coordsArray )
191198 {
192- var coord = coords [ i ] ;
193- if ( i == 0 )
199+ var multiPolygon = new MultiPolygon ( ) ;
200+ Coordinate first = null ;
201+ for ( var i = 0 ; i < coords . Count ; i ++ )
202+ {
203+ var coord = coords [ i ] ;
204+ if ( i == 0 )
205+ {
206+ first = coord ;
207+ }
208+ multiPolygon . Add ( new Polygon ( coord . Latitude , coord . Longitude ) ) ;
209+ }
210+ if ( first != null )
194211 {
195- first = coord ;
212+ multiPolygon . Add ( new Polygon ( first . Latitude , first . Longitude ) ) ;
196213 }
197- multiPolygon . Add ( new Polygon ( coord . Latitude , coord . Longitude ) ) ;
198- }
199- if ( first != null )
200- {
201- multiPolygon . Add ( new Polygon ( first . Latitude , first . Longitude ) ) ;
214+ areaArrayEmptyInner . Add ( multiPolygon ) ;
202215 }
203- areaArrayEmptyInner . Add ( multiPolygon ) ;
216+ multiPolygons . AddRange ( areaArrayEmptyInner ) ;
204217 }
205218 var minLevel = instance . MinimumLevel ;
206219 var maxLevel = instance . MaximumLevel ;
@@ -222,20 +235,20 @@ area is List<List<Coordinate>>
222235 }
223236 var spinLimit = instance . Data . SpinLimit ?? 3500 ;
224237 var retryLimit = instance . Data . QuestRetryLimit ?? 5 ;
225- instanceController = new AutoInstanceController ( instance . Name , areaArrayEmptyInner , AutoType . Quest , timezoneOffset , minLevel , maxLevel , spinLimit , retryLimit , instance . Data . AccountGroup , instance . Data . IsEvent ) ;
238+ instanceController = new AutoInstanceController ( instance . Name , multiPolygons , AutoType . Quest , timezoneOffset , minLevel , maxLevel , spinLimit , retryLimit , instance . Data . AccountGroup , instance . Data . IsEvent ) ;
226239 break ;
227240 case InstanceType . PokemonIV :
228241 var ivList = IVListController . Instance . GetIVList ( instance . Data . IVList ) ? . PokemonIDs ?? new List < uint > ( ) ;
229242 var ivQueueLimit = instance . Data . IVQueueLimit ?? 100 ;
230- instanceController = new IVInstanceController ( instance . Name , areaArrayEmptyInner , ivList , minLevel , maxLevel , ivQueueLimit , instance . Data . AccountGroup , instance . Data . IsEvent ) ;
243+ instanceController = new IVInstanceController ( instance . Name , multiPolygons , ivList , minLevel , maxLevel , ivQueueLimit , instance . Data . AccountGroup , instance . Data . IsEvent ) ;
231244 break ;
232245 case InstanceType . Bootstrap :
233246 var circleSize = instance . Data . CircleSize ?? 70 ;
234247 var fastBootstrapMode = instance . Data . FastBootstrapMode ;
235- instanceController = new BootstrapInstanceController ( instance . Name , coordsArray , minLevel , maxLevel , circleSize , fastBootstrapMode , instance . Data . AccountGroup , instance . Data . IsEvent ) ;
248+ instanceController = new BootstrapInstanceController ( instance . Name , coordinates , minLevel , maxLevel , circleSize , fastBootstrapMode , instance . Data . AccountGroup , instance . Data . IsEvent ) ;
236249 break ;
237250 case InstanceType . FindTTH :
238- instanceController = new SpawnpointFinderInstanceController ( instance . Name , coordsArray , minLevel , maxLevel , instance . Data . AccountGroup , instance . Data . IsEvent ) ;
251+ instanceController = new SpawnpointFinderInstanceController ( instance . Name , coordinates , minLevel , maxLevel , instance . Data . AccountGroup , instance . Data . IsEvent ) ;
239252 break ;
240253 }
241254 }
0 commit comments