Skip to content

Commit 52dcb36

Browse files
committed
Update Time
1 parent e78276e commit 52dcb36

11 files changed

Lines changed: 75 additions & 22 deletions

File tree

Assemblies/O21Toolbox.dll

1 KB
Binary file not shown.
11.5 KB
Binary file not shown.
0 Bytes
Binary file not shown.
Binary file not shown.
Binary file not shown.

Source/O21Toolbox/O21Toolbox/Harmony/HarmonyPatches.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,7 +1020,7 @@ public static void AddHumanlikeOrdersPostfix(ref List<FloatMenuOption> opts, Paw
10201020
List<FloatMenuOption> list = (from fmo in opts
10211021
where !fmo.Disabled && fmo.Label.Contains("Equip".Translate(equipment.LabelShort))
10221022
select fmo).ToList<FloatMenuOption>();
1023-
if(!list.NullOrEmpty<FloatMenuOption>() || !WeaponRestrict.RestrictionCheck.CanEquip(equipment.def, pawn))
1023+
if(!list.NullOrEmpty<FloatMenuOption>() && !WeaponRestrict.RestrictionCheck.CanEquip(equipment.def, pawn))
10241024
{
10251025
foreach (FloatMenuOption item2 in list)
10261026
{
@@ -1037,7 +1037,7 @@ public static void AddHumanlikeOrdersPostfix(ref List<FloatMenuOption> opts, Paw
10371037
List<FloatMenuOption> list2 = (from fmo in opts
10381038
where !fmo.Disabled && fmo.Label.Contains("ForceWear".Translate(apparel.LabelShort, apparel)) && !fmo.Label.Contains("CannotWear".Translate(apparel.LabelShort, apparel))
10391039
select fmo).ToList<FloatMenuOption>();
1040-
if (!list2.NullOrEmpty<FloatMenuOption>() || !ApparelExt.RestrictionCheck.CanWear(apparel.def, pawn))
1040+
if (!list2.NullOrEmpty<FloatMenuOption>() && !ApparelExt.RestrictionCheck.CanWear(apparel.def, pawn))
10411041
{
10421042
foreach (FloatMenuOption item3 in list2)
10431043
{

Source/O21Toolbox/O21Toolbox/Terraformer/Comp_Terraformer.cs

Lines changed: 63 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

Source/O21Toolbox/O21Toolbox/Terraformer/MapComponent_Terraforming.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ public class MapComponent_Terraforming : MapComponent
1919
public override void ExposeData()
2020
{
2121
base.ExposeData();
22-
Scribe_Values.Look(ref terraformers, "terraformers");
23-
Scribe_Values.Look(ref removedTerraformers, "removedTerraformers");
24-
Scribe_Collections.Look(ref terraformedTiles, "terraformedTiles");
22+
Scribe_Collections.Look(ref terraformers, "terraformers", LookMode.Reference);
23+
Scribe_Collections.Look(ref removedTerraformers, "removedTerraformers", LookMode.Reference);
24+
Scribe_Collections.Look<IntVec3, TerraformedInfo>(ref terraformedTiles, "terraformedTiles", LookMode.Value, LookMode.Deep);
2525
}
2626

2727
public MapComponent_Terraforming(Map map) : base(map)
@@ -126,16 +126,16 @@ public class TerraformedInfo : IExposable
126126

127127
public TerrainDef currentTerrain;
128128

129-
public TerraformedInfo(Building building, TerrainDef original, TerrainDef current)
129+
public TerraformedInfo(Building terraformer, TerrainDef originalTerrain, TerrainDef currentTerrain)
130130
{
131-
this.terraformer = building;
132-
this.originalTerrain = original;
133-
this.currentTerrain = current;
131+
this.terraformer = terraformer;
132+
this.originalTerrain = originalTerrain;
133+
this.currentTerrain = currentTerrain;
134134
}
135135

136136
public void ExposeData()
137137
{
138-
Scribe_Values.Look(ref terraformer, "terraformer");
138+
Scribe_References.Look(ref terraformer, "terraformer");
139139
Scribe_Defs.Look(ref originalTerrain, "originalTerrain");
140140
Scribe_Defs.Look(ref currentTerrain, "currentTerrain");
141141
}

Source/O21Toolbox/O21Toolbox/WeaponRestrict/RestrictionCheck.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ public static bool CanEquip(ThingDef equipment, Pawn pawn)
2424
{
2525
return true;
2626
}
27+
return false;
2728
}
28-
return false;
29+
return true;
2930
}
3031

3132
public static bool IsWearing(ThingDef apparel, Pawn pawn)
Binary file not shown.

0 commit comments

Comments
 (0)