Example #1
0
        private void DrawFullThingCorners(Thing b)
        {
            if (b.def.graphicData == null)
            {
                return;
            }
            if (b.def.graphicData.damageData == null)
            {
                return;
            }
            Rect     damageRect             = ThingsToxicDamageSectionLayerUtility.GetDamageRect(b);
            float    damageTexturesAltitude = this.GetDamageTexturesAltitude(b);
            float    num = Mathf.Min(Mathf.Min(damageRect.width, damageRect.height), 1.5f);
            Material mat;
            Material mat2;
            Material mat3;
            Material mat4;

            ThingsToxicDamageSectionLayerUtility.GetCornerMats(out mat, out mat2, out mat3, out mat4, b);
            float num2 = num * Rand.Range(0.9f, 1f);
            float num3 = num * Rand.Range(0.9f, 1f);
            float num4 = num * Rand.Range(0.9f, 1f);
            float num5 = num * Rand.Range(0.9f, 1f);
            List <DamageOverlay> overlays = ThingsToxicDamageSectionLayerUtility.GetOverlays(b);

            for (int i = 0; i < overlays.Count; i++)
            {
                switch (overlays[i])
                {
                case DamageOverlay.TopLeftCorner:
                {
                    Rect rect = new Rect(damageRect.xMin, damageRect.yMax - num2, num2, num2);
                    Printer_Plane.PrintPlane(this, new Vector3(rect.center.x, damageTexturesAltitude, rect.center.y), rect.size, mat, 0f, false, null, null, 0f, 0f);
                    break;
                }

                case DamageOverlay.TopRightCorner:
                {
                    Rect rect2 = new Rect(damageRect.xMax - num3, damageRect.yMax - num3, num3, num3);
                    Printer_Plane.PrintPlane(this, new Vector3(rect2.center.x, damageTexturesAltitude, rect2.center.y), rect2.size, mat2, 90f, false, null, null, 0f, 0f);
                    break;
                }

                case DamageOverlay.BotLeftCorner:
                {
                    Rect rect3 = new Rect(damageRect.xMin, damageRect.yMin, num5, num5);
                    Printer_Plane.PrintPlane(this, new Vector3(rect3.center.x, damageTexturesAltitude, rect3.center.y), rect3.size, mat4, 270f, false, null, null, 0f, 0f);
                    break;
                }

                case DamageOverlay.BotRightCorner:
                {
                    Rect rect4 = new Rect(damageRect.xMax - num4, damageRect.yMin, num4, num4);
                    Printer_Plane.PrintPlane(this, new Vector3(rect4.center.x, damageTexturesAltitude, rect4.center.y), rect4.size, mat3, 180f, false, null, null, 0f, 0f);
                    break;
                }
                }
            }
        }
Example #2
0
 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);
 }