@@ -40,15 +40,22 @@ public override void PostSpawnSetup(bool respawningAfterLoad)
4040 }
4141 }
4242
43+ public override void PostExposeData ( )
44+ {
45+ base . PostExposeData ( ) ;
46+
47+ }
48+
4349 private void UpdateRadiusT ( )
4450 {
4551 if ( ( currentRadiusT - Props . terraformRangeGap ) != Props . terraformRange && ListTerraformableTiles ( Props . terraformRangeGap ) . Count <= 0 )
4652 {
47- currentRadiusT ++ ;
48- if ( currentRadiusT > Props . terraformRange )
49- {
50- currentRadiusT = Props . terraformRange ;
51- }
53+ //currentRadiusT++;
54+ //if(currentRadiusT > Props.terraformRange)
55+ //{
56+ // currentRadiusT = Props.terraformRange;
57+ //}
58+ currentRadiusT = Props . terraformRange ;
5259 }
5360 }
5461
@@ -216,7 +223,10 @@ private List<IntVec3> ListTerraformableTiles(float f)
216223 {
217224 if ( ( rule . terrainDefsWhitelist != null && rule . terrainDefsWhitelist . Contains ( tile . GetTerrain ( this . parent . Map ) ) ) || ( rule . terrainDefsBlacklist != null && rule . terrainDefsBlacklist . Contains ( tile . GetTerrain ( this . parent . Map ) ) ) )
218225 {
219- terraformTiles . Add ( tile ) ;
226+ if ( ( GenAdjFast . AdjacentCellsCardinal ( tile ) . Any ( loc => GetSpreaderTerrains ( this ) . Contains ( loc . GetTerrain ( this . parent . Map ) ) ) || ( ( GenAdjFast . AdjacentCellsCardinal ( tile ) . Any ( loc => GetSpreaderEdifices ( this ) . Contains ( loc . GetEdifice ( this . parent . Map ) ? . def ) ) ) || this . currentRadiusT == 0f ) ) && GenAdjFast . AdjacentCells8Way ( tile ) . Any ( loc => ! loc . Filled ( this . parent . Map ) ) )
227+ {
228+ terraformTiles . Add ( tile ) ;
229+ }
220230 }
221231 }
222232 }
@@ -237,7 +247,7 @@ private void TryTerraform_Edifice()
237247 {
238248 if ( rule . thingWhitelist . Exists ( x => x . IsEdifice ( ) ) || ( rule . thingWhitelist == null && rule . thingBlacklist != null && ! rule . thingBlacklist . Exists ( x => x . IsEdifice ( ) ) ) )
239249 {
240- IntVec3 tile = tileList . First ( ) ;
250+ IntVec3 tile = tileList . RandomElement ( ) ;
241251 tile . GetEdifice ( this . parent . Map ) . Destroy ( ) ;
242252 GenSpawn . Spawn ( rule . thingResult . RandomElement ( ) , tile , this . parent . Map ) ;
243253 break ;
@@ -257,7 +267,7 @@ private List<IntVec3> ListTerraformableEdifices()
257267 IntVec3 tile = this . parent . Position + GenRadial . RadialPattern [ i ] ;
258268 foreach ( TerraformerThingRule rule in this . Props . terraformerRules . edificeRules )
259269 {
260- if ( ( rule . thingWhitelist != null && tile . GetEdifice ( this . parent . Map ) != null && rule . thingWhitelist . Contains ( tile . GetEdifice ( this . parent . Map ) . def ) ) || ( rule . thingBlacklist != null && tile . GetEdifice ( this . parent . Map ) != null && rule . thingBlacklist . Contains ( tile . GetEdifice ( this . parent . Map ) . def ) ) )
270+ if ( ( ( rule . thingWhitelist != null && tile . GetEdifice ( this . parent . Map ) != null && rule . thingWhitelist . Contains ( tile . GetEdifice ( this . parent . Map ) . def ) ) || ( rule . thingBlacklist != null && tile . GetEdifice ( this . parent . Map ) != null && rule . thingBlacklist . Contains ( tile . GetEdifice ( this . parent . Map ) . def ) ) ) && GetSpreaderTerrains ( this ) . Contains ( tile . GetTerrain ( this . parent . Map ) ) )
261271 {
262272 terraformTiles . Add ( tile ) ;
263273 }
@@ -274,6 +284,10 @@ public void TryTerraform_Things()
274284
275285 private void TryTerraform_Plants ( )
276286 {
287+ if ( Props . terraformerRules . plantRules . NullOrEmpty ( ) )
288+ {
289+ return ;
290+ }
277291 foreach ( TerraformerPlantRule rule in Props . terraformerRules . plantRules )
278292 {
279293 List < IntVec3 > tileList = ListPlantableTiles ( rule . ignoreFertility , rule . fertilityAbove , rule . fertilityBelow ) ;
@@ -308,12 +322,14 @@ private List<IntVec3> ListPlantableTiles(bool useFertility, float min, float max
308322 {
309323 List < IntVec3 > plantableTiles = new List < IntVec3 > ( ) ;
310324
311- int num = GenRadial . NumCellsInRadius ( this . currentRadiusT ) ;
325+ int num = GenRadial . NumCellsInRadius ( this . Props . terraformRange ) ;
312326 for ( int i = 0 ; i < num ; i ++ )
313327 {
314328 IntVec3 tile = this . parent . Position + GenRadial . RadialPattern [ i ] ;
315- if ( useFertility || ( ! useFertility && tile . GetTerrain ( this . parent . Map ) . fertility >= min && tile . GetTerrain ( this . parent . Map ) . fertility <= max ) )
316- plantableTiles . Add ( tile ) ;
329+ if ( ( useFertility || ( ! useFertility && tile . GetTerrain ( this . parent . Map ) . fertility >= min && tile . GetTerrain ( this . parent . Map ) . fertility <= max ) ) && GetSpreaderTerrains ( this ) . Contains ( tile . GetTerrain ( this . parent . Map ) ) )
330+ {
331+ plantableTiles . Add ( tile ) ;
332+ }
317333 }
318334
319335 return plantableTiles ;
@@ -331,5 +347,41 @@ public override void PostDrawExtraSelectionOverlays()
331347 GenDraw . DrawRadiusRing ( this . parent . Position , this . currentRadiusT ) ;
332348 }
333349 }
350+
351+ public static List < TerrainDef > GetSpreaderTerrains ( Comp_Terraformer comp )
352+ {
353+ List < TerrainDef > result = new List < TerrainDef > ( ) ;
354+
355+ foreach ( TerraformerTerrainRule rule in comp . Props . terraformerRules . terrainRules )
356+ {
357+ foreach ( TerrainDef terrain in rule . terrainResult )
358+ {
359+ if ( ! result . Contains ( terrain ) )
360+ {
361+ result . Add ( terrain ) ;
362+ }
363+ }
364+ }
365+
366+ return result ;
367+ }
368+
369+ public static List < ThingDef > GetSpreaderEdifices ( Comp_Terraformer comp )
370+ {
371+ List < ThingDef > result = new List < ThingDef > ( ) ;
372+
373+ foreach ( TerraformerThingRule rule in comp . Props . terraformerRules . edificeRules )
374+ {
375+ foreach ( ThingDef edifice in rule . thingResult )
376+ {
377+ if ( ! result . Contains ( edifice ) )
378+ {
379+ result . Add ( edifice ) ;
380+ }
381+ }
382+ }
383+
384+ return result ;
385+ }
334386 }
335387}
0 commit comments