public override IEnumerable <StatDrawEntry> SpecialDisplayStats(StatRequest req) { foreach (StatDrawEntry item in base.SpecialDisplayStats(req)) { yield return(item); } if (!BuildableByPlayer) { yield break; } IEnumerable <TerrainAffordanceDef> enumerable = Enumerable.Empty <TerrainAffordanceDef>(); if (PlaceWorkers != null) { enumerable = enumerable.Concat(PlaceWorkers.SelectMany((PlaceWorker pw) => pw.DisplayAffordances())); } TerrainAffordanceDef terrainAffordanceNeed = this.GetTerrainAffordanceNeed(req.StuffDef); if (terrainAffordanceNeed != null) { enumerable = enumerable.Concat(terrainAffordanceNeed); } string[] array = (from ta in enumerable.Distinct() orderby ta.order select ta.label).ToArray(); if (array.Length != 0) { yield return(new StatDrawEntry(StatCategoryDefOf.Basics, "TerrainRequirement".Translate(), array.ToCommaList().CapitalizeFirst(), "Stat_Thing_TerrainRequirement_Desc".Translate(), 1101)); } }
private bool TryGetAffordanceDefToDraw(TerrainDef terrainDef, out TerrainAffordanceDef affordance) { if (terrainDef == null || terrainDef.affordances.NullOrEmpty()) { affordance = null; return(true); } TerrainAffordanceDef terrainAffordanceDef = null; int num = int.MinValue; foreach (TerrainAffordanceDef affordance2 in terrainDef.affordances) { if (affordance2.visualizeOnAffordanceOverlay) { if (num < affordance2.order) { num = affordance2.order; terrainAffordanceDef = affordance2; } } else if (affordance2.blockAffordanceOverlay) { affordance = null; return(false); } } affordance = terrainAffordanceDef; return(true); }
public static TerrainAffordanceDef GetTerrainAffordanceNeed(this BuildableDef def, ThingDef stuffDef = null) { TerrainAffordanceDef terrainAffordanceNeeded = def.terrainAffordanceNeeded; if (stuffDef != null && def.useStuffTerrainAffordance && stuffDef.terrainAffordanceNeeded != null) { terrainAffordanceNeeded = stuffDef.terrainAffordanceNeeded; } return(terrainAffordanceNeeded); }
public static bool SupportsStructureType(this IntVec3 c, Map map, TerrainAffordanceDef surfaceType) { return(c.GetTerrain(map).affordances.Contains(surfaceType)); }