private void PrintScratches(Thing b) { int num = 0; List <DamageOverlay> overlays = ThingsToxicDamageSectionLayerUtility.GetOverlays(b); for (int i = 0; i < overlays.Count; i++) { if (overlays[i] == DamageOverlay.Scratch) { num++; } } if (num == 0) { return; } Rect rect = ThingsToxicDamageSectionLayerUtility.GetDamageRect(b); float num2 = Mathf.Min(0.5f * Mathf.Min(rect.width, rect.height), 1f); rect = rect.ContractedBy(num2 / 2f); if (rect.width <= 0f || rect.height <= 0f) { return; } float num3 = Mathf.Max(rect.width, rect.height) * 0.7f; SectionLayer_ThingsToxicDamage.scratches.Clear(); Rand.PushState(); Rand.Seed = b.thingIDNumber * 3697; for (int j = 0; j < num; j++) { this.AddScratch(b, rect.width, rect.height, ref num3); } Rand.PopState(); float damageTexturesAltitude = this.GetDamageTexturesAltitude(b); IList <Material> scratchMats = ThingsToxicDamageSectionLayerUtility.GetScratchMats(b); Rand.PushState(); Rand.Seed = b.thingIDNumber * 7; for (int k = 0; k < SectionLayer_ThingsToxicDamage.scratches.Count; k++) { float x = SectionLayer_ThingsToxicDamage.scratches[k].x; float y = SectionLayer_ThingsToxicDamage.scratches[k].y; float rot = Rand.Range(0f, 360f); float num4 = num2; if (rect.width > 0.95f && rect.height > 0.95f) { num4 *= Rand.Range(0.85f, 1f); } Vector3 center = new Vector3(rect.xMin + x, damageTexturesAltitude, rect.yMin + y); Printer_Plane.PrintPlane(this, center, new Vector2(num4, num4), scratchMats.RandomElement <Material>(), rot, false, null, null, 0f, 0f); } Rand.PopState(); }
public static List <DamageOverlay> GetAvailableOverlays(Thing b) { ThingsToxicDamageSectionLayerUtility.availableOverlays.Clear(); if (ThingsToxicDamageSectionLayerUtility.GetScratchMats(b).Any <Material>()) { int num = 3; Rect damageRect = ThingsToxicDamageSectionLayerUtility.GetDamageRect(b); float num2 = damageRect.width * damageRect.height; if (num2 > 4f) { num += Mathf.RoundToInt((num2 - 4f) * 0.54f); } for (int i = 0; i < num; i++) { ThingsToxicDamageSectionLayerUtility.availableOverlays.Add(DamageOverlay.Scratch); } } if (ThingsToxicDamageSectionLayerUtility.UsesLinkableCornersAndEdges(b)) { if (b.def.graphicData != null && b.def.graphicData.damageData != null) { IntVec3 position = b.Position; DamageGraphicData damageData = b.def.graphicData.damageData; if (damageData.edgeTopMat != null && ThingsToxicDamageSectionLayerUtility.DifferentAt(b, position.x, position.z + 1) && ThingsToxicDamageSectionLayerUtility.SameAndDamagedAt(b, position.x + 1, position.z) && ThingsToxicDamageSectionLayerUtility.DifferentAt(b, position.x + 1, position.z + 1)) { ThingsToxicDamageSectionLayerUtility.availableOverlays.Add(DamageOverlay.TopEdge); } if (damageData.edgeRightMat != null && ThingsToxicDamageSectionLayerUtility.DifferentAt(b, position.x + 1, position.z) && ThingsToxicDamageSectionLayerUtility.SameAndDamagedAt(b, position.x, position.z + 1) && ThingsToxicDamageSectionLayerUtility.DifferentAt(b, position.x + 1, position.z + 1)) { ThingsToxicDamageSectionLayerUtility.availableOverlays.Add(DamageOverlay.RightEdge); } if (damageData.edgeBotMat != null && ThingsToxicDamageSectionLayerUtility.DifferentAt(b, position.x, position.z - 1) && ThingsToxicDamageSectionLayerUtility.SameAndDamagedAt(b, position.x + 1, position.z) && ThingsToxicDamageSectionLayerUtility.DifferentAt(b, position.x + 1, position.z - 1)) { ThingsToxicDamageSectionLayerUtility.availableOverlays.Add(DamageOverlay.BotEdge); } if (damageData.edgeLeftMat != null && ThingsToxicDamageSectionLayerUtility.DifferentAt(b, position.x - 1, position.z) && ThingsToxicDamageSectionLayerUtility.SameAndDamagedAt(b, position.x, position.z + 1) && ThingsToxicDamageSectionLayerUtility.DifferentAt(b, position.x - 1, position.z + 1)) { ThingsToxicDamageSectionLayerUtility.availableOverlays.Add(DamageOverlay.LeftEdge); } if (damageData.cornerTLMat != null && ThingsToxicDamageSectionLayerUtility.DifferentAt(b, position.x - 1, position.z) && ThingsToxicDamageSectionLayerUtility.DifferentAt(b, position.x, position.z + 1)) { ThingsToxicDamageSectionLayerUtility.availableOverlays.Add(DamageOverlay.TopLeftCorner); } if (damageData.cornerTRMat != null && ThingsToxicDamageSectionLayerUtility.DifferentAt(b, position.x + 1, position.z) && ThingsToxicDamageSectionLayerUtility.DifferentAt(b, position.x, position.z + 1)) { ThingsToxicDamageSectionLayerUtility.availableOverlays.Add(DamageOverlay.TopRightCorner); } if (damageData.cornerBRMat != null && ThingsToxicDamageSectionLayerUtility.DifferentAt(b, position.x + 1, position.z) && ThingsToxicDamageSectionLayerUtility.DifferentAt(b, position.x, position.z - 1)) { ThingsToxicDamageSectionLayerUtility.availableOverlays.Add(DamageOverlay.BotRightCorner); } if (damageData.cornerBLMat != null && ThingsToxicDamageSectionLayerUtility.DifferentAt(b, position.x - 1, position.z) && ThingsToxicDamageSectionLayerUtility.DifferentAt(b, position.x, position.z - 1)) { ThingsToxicDamageSectionLayerUtility.availableOverlays.Add(DamageOverlay.BotLeftCorner); } } } else { Material x; Material x2; Material x3; Material x4; ThingsToxicDamageSectionLayerUtility.GetCornerMats(out x, out x2, out x3, out x4, b); if (x != null) { ThingsToxicDamageSectionLayerUtility.availableOverlays.Add(DamageOverlay.TopLeftCorner); } if (x2 != null) { ThingsToxicDamageSectionLayerUtility.availableOverlays.Add(DamageOverlay.TopRightCorner); } if (x4 != null) { ThingsToxicDamageSectionLayerUtility.availableOverlays.Add(DamageOverlay.BotLeftCorner); } if (x3 != null) { ThingsToxicDamageSectionLayerUtility.availableOverlays.Add(DamageOverlay.BotRightCorner); } } return(ThingsToxicDamageSectionLayerUtility.availableOverlays); }