public override void Regenerate() { if (MatBases.SunShadow.shader.isSupported) { LayerSubMesh subMesh = GetSubMesh(MatBases.IndoorMask); subMesh.Clear(MeshParts.All); Building[] innerArray = base.Map.edificeGrid.InnerArray; CellRect cellRect = new CellRect(section.botLeft.x, section.botLeft.z, 17, 17); cellRect.ClipInsideMap(base.Map); subMesh.verts.Capacity = cellRect.Area * 2; subMesh.tris.Capacity = cellRect.Area * 4; float y = AltitudeLayer.MetaOverlays.AltitudeFor(); CellIndices cellIndices = base.Map.cellIndices; for (int i = cellRect.minX; i <= cellRect.maxX; i++) { for (int j = cellRect.minZ; j <= cellRect.maxZ; j++) { IntVec3 intVec = new IntVec3(i, 0, j); if (!HideRainPrimary(intVec)) { bool flag = intVec.Roofed(base.Map); bool flag2 = false; if (flag) { for (int k = 0; k < 8; k++) { IntVec3 c = intVec + GenAdj.AdjacentCells[k]; if (c.InBounds(base.Map) && HideRainPrimary(c)) { flag2 = true; break; } } } if (!flag || !flag2) { continue; } } Thing thing = innerArray[cellIndices.CellToIndex(i, j)]; float num = (thing == null || (thing.def.passability != Traversability.Impassable && !thing.def.IsDoor)) ? 0.16f : 0f; subMesh.verts.Add(new Vector3((float)i - num, y, (float)j - num)); subMesh.verts.Add(new Vector3((float)i - num, y, (float)(j + 1) + num)); subMesh.verts.Add(new Vector3((float)(i + 1) + num, y, (float)(j + 1) + num)); subMesh.verts.Add(new Vector3((float)(i + 1) + num, y, (float)j - num)); int count = subMesh.verts.Count; subMesh.tris.Add(count - 4); subMesh.tris.Add(count - 3); subMesh.tris.Add(count - 2); subMesh.tris.Add(count - 4); subMesh.tris.Add(count - 2); subMesh.tris.Add(count - 1); } } if (subMesh.verts.Count > 0) { subMesh.FinalizeMesh(MeshParts.Verts | MeshParts.Tris); } } }
public static void MakeBaseGeometry(Section section, LayerSubMesh sm, AltitudeLayer altitudeLayer) { sm.Clear(MeshParts.Verts | MeshParts.Tris); CellRect cellRect = new CellRect(section.botLeft.x, section.botLeft.z, 17, 17); cellRect.ClipInsideMap(section.map); float y = altitudeLayer.AltitudeFor(); sm.verts.Capacity = cellRect.Area * 9; for (int i = cellRect.minX; i <= cellRect.maxX; i++) { for (int j = cellRect.minZ; j <= cellRect.maxZ; j++) { sm.verts.Add(new Vector3((float)i, y, (float)j)); sm.verts.Add(new Vector3((float)i, y, (float)j + 0.5f)); sm.verts.Add(new Vector3((float)i, y, (float)(j + 1))); sm.verts.Add(new Vector3((float)i + 0.5f, y, (float)(j + 1))); sm.verts.Add(new Vector3((float)(i + 1), y, (float)(j + 1))); sm.verts.Add(new Vector3((float)(i + 1), y, (float)j + 0.5f)); sm.verts.Add(new Vector3((float)(i + 1), y, (float)j)); sm.verts.Add(new Vector3((float)i + 0.5f, y, (float)j)); sm.verts.Add(new Vector3((float)i + 0.5f, y, (float)j + 0.5f)); } } int num = cellRect.Area * 8 * 3; sm.tris.Capacity = num; int num2 = 0; while (sm.tris.Count < num) { sm.tris.Add(num2 + 7); sm.tris.Add(num2); sm.tris.Add(num2 + 1); sm.tris.Add(num2 + 1); sm.tris.Add(num2 + 2); sm.tris.Add(num2 + 3); sm.tris.Add(num2 + 3); sm.tris.Add(num2 + 4); sm.tris.Add(num2 + 5); sm.tris.Add(num2 + 5); sm.tris.Add(num2 + 6); sm.tris.Add(num2 + 7); sm.tris.Add(num2 + 7); sm.tris.Add(num2 + 1); sm.tris.Add(num2 + 8); sm.tris.Add(num2 + 1); sm.tris.Add(num2 + 3); sm.tris.Add(num2 + 8); sm.tris.Add(num2 + 3); sm.tris.Add(num2 + 5); sm.tris.Add(num2 + 8); sm.tris.Add(num2 + 5); sm.tris.Add(num2 + 7); sm.tris.Add(num2 + 8); num2 += 9; } sm.FinalizeMesh(MeshParts.Verts | MeshParts.Tris); }
public override void Regenerate() { LayerSubMesh subMesh = GetSubMesh(MatBases.Snow); if (subMesh.mesh.vertexCount == 0) { SectionLayerGeometryMaker_Solid.MakeBaseGeometry(section, subMesh, AltitudeLayer.Terrain); } subMesh.Clear(MeshParts.Colors); float[] depthGridDirect_Unsafe = base.Map.snowGrid.DepthGridDirect_Unsafe; CellRect cellRect = section.CellRect; int num = base.Map.Size.z - 1; int num2 = base.Map.Size.x - 1; bool flag = false; CellIndices cellIndices = base.Map.cellIndices; for (int i = cellRect.minX; i <= cellRect.maxX; i++) { for (int j = cellRect.minZ; j <= cellRect.maxZ; j++) { float num3 = depthGridDirect_Unsafe[cellIndices.CellToIndex(i, j)]; int num4 = cellIndices.CellToIndex(i, j - 1); float num5 = ((j > 0) ? depthGridDirect_Unsafe[num4] : num3); num4 = cellIndices.CellToIndex(i - 1, j - 1); float num6 = ((j > 0 && i > 0) ? depthGridDirect_Unsafe[num4] : num3); num4 = cellIndices.CellToIndex(i - 1, j); float num7 = ((i > 0) ? depthGridDirect_Unsafe[num4] : num3); num4 = cellIndices.CellToIndex(i - 1, j + 1); float num8 = ((j < num && i > 0) ? depthGridDirect_Unsafe[num4] : num3); num4 = cellIndices.CellToIndex(i, j + 1); float num9 = ((j < num) ? depthGridDirect_Unsafe[num4] : num3); num4 = cellIndices.CellToIndex(i + 1, j + 1); float num10 = ((j < num && i < num2) ? depthGridDirect_Unsafe[num4] : num3); num4 = cellIndices.CellToIndex(i + 1, j); float num11 = ((i < num2) ? depthGridDirect_Unsafe[num4] : num3); num4 = cellIndices.CellToIndex(i + 1, j - 1); float num12 = ((j > 0 && i < num2) ? depthGridDirect_Unsafe[num4] : num3); vertDepth[0] = (num5 + num6 + num7 + num3) / 4f; vertDepth[1] = (num7 + num3) / 2f; vertDepth[2] = (num7 + num8 + num9 + num3) / 4f; vertDepth[3] = (num9 + num3) / 2f; vertDepth[4] = (num9 + num10 + num11 + num3) / 4f; vertDepth[5] = (num11 + num3) / 2f; vertDepth[6] = (num11 + num12 + num5 + num3) / 4f; vertDepth[7] = (num5 + num3) / 2f; vertDepth[8] = num3; for (int k = 0; k < 9; k++) { if (vertDepth[k] > 0.01f) { flag = true; } subMesh.colors.Add(SnowDepthColor(vertDepth[k])); } } } if (flag) { subMesh.disabled = false; subMesh.FinalizeMesh(MeshParts.Colors); } else { subMesh.disabled = true; } }
public override void Regenerate() { if (!MatBases.SunShadow.shader.isSupported) { return; } SectionLayer_SunShadows.edificeGrid = base.Map.edificeGrid.InnerArray; float y = Altitudes.AltitudeFor(AltitudeLayer.Shadows); CellRect cellRect = new CellRect(this.section.botLeft.x, this.section.botLeft.z, 17, 17); cellRect.ClipInsideMap(base.Map); LayerSubMesh subMesh = base.GetSubMesh(MatBases.SunShadow); subMesh.Clear(MeshParts.All); subMesh.verts.Capacity = cellRect.Area * 2; subMesh.tris.Capacity = cellRect.Area * 4; subMesh.colors.Capacity = cellRect.Area * 2; CellIndices cellIndices = base.Map.cellIndices; for (int i = cellRect.minX; i <= cellRect.maxX; i++) { for (int j = cellRect.minZ; j <= cellRect.maxZ; j++) { Thing thing = SectionLayer_SunShadows.edificeGrid[cellIndices.CellToIndex(i, j)]; if (thing != null && thing.def.staticSunShadowHeight > 0f) { float staticSunShadowHeight = thing.def.staticSunShadowHeight; Color32 item = new Color32(0, 0, 0, (byte)(255f * staticSunShadowHeight)); int count = subMesh.verts.Count; subMesh.verts.Add(new Vector3((float)i, y, (float)j)); subMesh.verts.Add(new Vector3((float)i, y, (float)(j + 1))); subMesh.verts.Add(new Vector3((float)(i + 1), y, (float)(j + 1))); subMesh.verts.Add(new Vector3((float)(i + 1), y, (float)j)); subMesh.colors.Add(SectionLayer_SunShadows.LowVertexColor); subMesh.colors.Add(SectionLayer_SunShadows.LowVertexColor); subMesh.colors.Add(SectionLayer_SunShadows.LowVertexColor); subMesh.colors.Add(SectionLayer_SunShadows.LowVertexColor); int count2 = subMesh.verts.Count; subMesh.tris.Add(count2 - 4); subMesh.tris.Add(count2 - 3); subMesh.tris.Add(count2 - 2); subMesh.tris.Add(count2 - 4); subMesh.tris.Add(count2 - 2); subMesh.tris.Add(count2 - 1); if (i > 0) { thing = SectionLayer_SunShadows.edificeGrid[cellIndices.CellToIndex(i - 1, j)]; if (thing == null || thing.def.staticSunShadowHeight < staticSunShadowHeight) { int count3 = subMesh.verts.Count; subMesh.verts.Add(new Vector3((float)i, y, (float)j)); subMesh.verts.Add(new Vector3((float)i, y, (float)(j + 1))); subMesh.colors.Add(item); subMesh.colors.Add(item); subMesh.tris.Add(count + 1); subMesh.tris.Add(count); subMesh.tris.Add(count3); subMesh.tris.Add(count3); subMesh.tris.Add(count3 + 1); subMesh.tris.Add(count + 1); } } if (i < base.Map.Size.x - 1) { thing = SectionLayer_SunShadows.edificeGrid[cellIndices.CellToIndex(i + 1, j)]; if (thing == null || thing.def.staticSunShadowHeight < staticSunShadowHeight) { int count4 = subMesh.verts.Count; subMesh.verts.Add(new Vector3((float)(i + 1), y, (float)(j + 1))); subMesh.verts.Add(new Vector3((float)(i + 1), y, (float)j)); subMesh.colors.Add(item); subMesh.colors.Add(item); subMesh.tris.Add(count + 2); subMesh.tris.Add(count4); subMesh.tris.Add(count4 + 1); subMesh.tris.Add(count4 + 1); subMesh.tris.Add(count + 3); subMesh.tris.Add(count + 2); } } if (j > 0) { thing = SectionLayer_SunShadows.edificeGrid[cellIndices.CellToIndex(i, j - 1)]; if (thing == null || thing.def.staticSunShadowHeight < staticSunShadowHeight) { int count5 = subMesh.verts.Count; subMesh.verts.Add(new Vector3((float)i, y, (float)j)); subMesh.verts.Add(new Vector3((float)(i + 1), y, (float)j)); subMesh.colors.Add(item); subMesh.colors.Add(item); subMesh.tris.Add(count); subMesh.tris.Add(count + 3); subMesh.tris.Add(count5); subMesh.tris.Add(count + 3); subMesh.tris.Add(count5 + 1); subMesh.tris.Add(count5); } } } } } if (subMesh.verts.Count > 0) { subMesh.FinalizeMesh(MeshParts.Verts | MeshParts.Tris | MeshParts.Colors); float num = Mathf.Max(15f, 15f); Vector3 size = subMesh.mesh.bounds.size; size.x += 2f * num + 2f; size.z += 2f * num + 2f; subMesh.mesh.bounds = new Bounds(subMesh.mesh.bounds.center, size); } }
public override void Regenerate() { Building[] innerArray = base.Map.edificeGrid.InnerArray; float y = Altitudes.AltitudeFor(AltitudeLayer.Shadows); CellRect cellRect = new CellRect(base.section.botLeft.x, base.section.botLeft.z, 17, 17); cellRect.ClipInsideMap(base.Map); LayerSubMesh sm = base.GetSubMesh(MatBases.EdgeShadow); sm.Clear(MeshParts.All); sm.verts.Capacity = cellRect.Area * 4; sm.colors.Capacity = cellRect.Area * 4; sm.tris.Capacity = cellRect.Area * 8; bool[] array = new bool[4]; bool[] array2 = new bool[4]; bool[] array3 = new bool[4]; float num = 0f; float num2 = 0f; CellIndices cellIndices = base.Map.cellIndices; for (int i = cellRect.minX; i <= cellRect.maxX; i++) { for (int j = cellRect.minZ; j <= cellRect.maxZ; j++) { Thing thing = innerArray[cellIndices.CellToIndex(i, j)]; if (thing != null && thing.def.castEdgeShadows) { sm.verts.Add(new Vector3((float)i, y, (float)j)); sm.verts.Add(new Vector3((float)i, y, (float)(j + 1))); sm.verts.Add(new Vector3((float)(i + 1), y, (float)(j + 1))); sm.verts.Add(new Vector3((float)(i + 1), y, (float)j)); sm.colors.Add(SectionLayer_EdgeShadows.Shadowed); sm.colors.Add(SectionLayer_EdgeShadows.Shadowed); sm.colors.Add(SectionLayer_EdgeShadows.Shadowed); sm.colors.Add(SectionLayer_EdgeShadows.Shadowed); int count = sm.verts.Count; sm.tris.Add(count - 4); sm.tris.Add(count - 3); sm.tris.Add(count - 2); sm.tris.Add(count - 4); sm.tris.Add(count - 2); sm.tris.Add(count - 1); } else { array[0] = false; array[1] = false; array[2] = false; array[3] = false; array2[0] = false; array2[1] = false; array2[2] = false; array2[3] = false; array3[0] = false; array3[1] = false; array3[2] = false; array3[3] = false; IntVec3 a = new IntVec3(i, 0, j); IntVec3[] cardinalDirectionsAround = GenAdj.CardinalDirectionsAround; for (int k = 0; k < 4; k++) { IntVec3 c = a + cardinalDirectionsAround[k]; if (c.InBounds(base.Map)) { thing = innerArray[cellIndices.CellToIndex(c)]; if (thing != null && thing.def.castEdgeShadows) { array2[k] = true; array[(k + 3) % 4] = true; array[k] = true; } } } IntVec3[] diagonalDirectionsAround = GenAdj.DiagonalDirectionsAround; for (int l = 0; l < 4; l++) { if (!array[l]) { IntVec3 c = a + diagonalDirectionsAround[l]; if (c.InBounds(base.Map)) { thing = innerArray[cellIndices.CellToIndex(c)]; if (thing != null && thing.def.castEdgeShadows) { array[l] = true; array3[l] = true; } } } } Action <int> action = delegate(int idx) { sm.tris.Add(sm.verts.Count - 2); sm.tris.Add(idx); sm.tris.Add(sm.verts.Count - 1); sm.tris.Add(sm.verts.Count - 1); sm.tris.Add(idx); sm.tris.Add(idx + 1); }; Action action2 = delegate { sm.colors.Add(SectionLayer_EdgeShadows.Shadowed); sm.colors.Add(SectionLayer_EdgeShadows.Lit); sm.colors.Add(SectionLayer_EdgeShadows.Lit); sm.tris.Add(sm.verts.Count - 3); sm.tris.Add(sm.verts.Count - 2); sm.tris.Add(sm.verts.Count - 1); }; int count2 = sm.verts.Count; if (array[0]) { if (array2[0] || array2[1]) { num = (num2 = 0f); if (array2[0]) { num2 = 0.45f; } if (array2[1]) { num = 0.45f; } sm.verts.Add(new Vector3((float)i, y, (float)j)); sm.colors.Add(SectionLayer_EdgeShadows.Shadowed); sm.verts.Add(new Vector3((float)i + num, y, (float)j + num2)); sm.colors.Add(SectionLayer_EdgeShadows.Lit); if (array[1] && !array3[1]) { action(sm.verts.Count); } } else { sm.verts.Add(new Vector3((float)i, y, (float)j)); sm.verts.Add(new Vector3((float)i, y, (float)((float)j + 0.44999998807907104))); sm.verts.Add(new Vector3((float)((float)i + 0.44999998807907104), y, (float)j)); action2(); } } if (array[1]) { if (array2[1] || array2[2]) { num = (num2 = 0f); if (array2[1]) { num = 0.45f; } if (array2[2]) { num2 = -0.45f; } sm.verts.Add(new Vector3((float)i, y, (float)(j + 1))); sm.colors.Add(SectionLayer_EdgeShadows.Shadowed); sm.verts.Add(new Vector3((float)i + num, y, (float)(j + 1) + num2)); sm.colors.Add(SectionLayer_EdgeShadows.Lit); if (array[2] && !array3[2]) { action(sm.verts.Count); } } else { sm.verts.Add(new Vector3((float)i, y, (float)(j + 1))); sm.verts.Add(new Vector3((float)((float)i + 0.44999998807907104), y, (float)(j + 1))); sm.verts.Add(new Vector3((float)i, y, (float)((float)(j + 1) - 0.44999998807907104))); action2(); } } if (array[2]) { if (array2[2] || array2[3]) { num = (num2 = 0f); if (array2[2]) { num2 = -0.45f; } if (array2[3]) { num = -0.45f; } sm.verts.Add(new Vector3((float)(i + 1), y, (float)(j + 1))); sm.colors.Add(SectionLayer_EdgeShadows.Shadowed); sm.verts.Add(new Vector3((float)(i + 1) + num, y, (float)(j + 1) + num2)); sm.colors.Add(SectionLayer_EdgeShadows.Lit); if (array[3] && !array3[3]) { action(sm.verts.Count); } } else { sm.verts.Add(new Vector3((float)(i + 1), y, (float)(j + 1))); sm.verts.Add(new Vector3((float)(i + 1), y, (float)((float)(j + 1) - 0.44999998807907104))); sm.verts.Add(new Vector3((float)((float)(i + 1) - 0.44999998807907104), y, (float)(j + 1))); action2(); } } if (array[3]) { if (array2[3] || array2[0]) { num = (num2 = 0f); if (array2[3]) { num = -0.45f; } if (array2[0]) { num2 = 0.45f; } sm.verts.Add(new Vector3((float)(i + 1), y, (float)j)); sm.colors.Add(SectionLayer_EdgeShadows.Shadowed); sm.verts.Add(new Vector3((float)(i + 1) + num, y, (float)j + num2)); sm.colors.Add(SectionLayer_EdgeShadows.Lit); if (array[0] && !array3[0]) { action(count2); } } else { sm.verts.Add(new Vector3((float)(i + 1), y, (float)j)); sm.verts.Add(new Vector3((float)((float)(i + 1) - 0.44999998807907104), y, (float)j)); sm.verts.Add(new Vector3((float)(i + 1), y, (float)((float)j + 0.44999998807907104))); action2(); } } } } } if (sm.verts.Count > 0) { sm.FinalizeMesh(MeshParts.Verts | MeshParts.Tris | MeshParts.Colors); } }
public override void Regenerate() { LayerSubMesh subMesh = GetSubMesh(MatBases.FogOfWar); if (subMesh.mesh.vertexCount == 0) { SectionLayerGeometryMaker_Solid.MakeBaseGeometry(section, subMesh, AltitudeLayer.FogOfWar); } subMesh.Clear(MeshParts.Colors); bool[] fogGrid = base.Map.fogGrid.fogGrid; CellRect cellRect = section.CellRect; int num = base.Map.Size.z - 1; int num2 = base.Map.Size.x - 1; bool flag = false; CellIndices cellIndices = base.Map.cellIndices; for (int i = cellRect.minX; i <= cellRect.maxX; i++) { for (int j = cellRect.minZ; j <= cellRect.maxZ; j++) { if (fogGrid[cellIndices.CellToIndex(i, j)]) { for (int k = 0; k < 9; k++) { vertsCovered[k] = true; } } else { for (int l = 0; l < 9; l++) { vertsCovered[l] = false; } if (j < num && fogGrid[cellIndices.CellToIndex(i, j + 1)]) { vertsCovered[2] = true; vertsCovered[3] = true; vertsCovered[4] = true; } if (j > 0 && fogGrid[cellIndices.CellToIndex(i, j - 1)]) { vertsCovered[6] = true; vertsCovered[7] = true; vertsCovered[0] = true; } if (i < num2 && fogGrid[cellIndices.CellToIndex(i + 1, j)]) { vertsCovered[4] = true; vertsCovered[5] = true; vertsCovered[6] = true; } if (i > 0 && fogGrid[cellIndices.CellToIndex(i - 1, j)]) { vertsCovered[0] = true; vertsCovered[1] = true; vertsCovered[2] = true; } if (j > 0 && i > 0 && fogGrid[cellIndices.CellToIndex(i - 1, j - 1)]) { vertsCovered[0] = true; } if (j < num && i > 0 && fogGrid[cellIndices.CellToIndex(i - 1, j + 1)]) { vertsCovered[2] = true; } if (j < num && i < num2 && fogGrid[cellIndices.CellToIndex(i + 1, j + 1)]) { vertsCovered[4] = true; } if (j > 0 && i < num2 && fogGrid[cellIndices.CellToIndex(i + 1, j - 1)]) { vertsCovered[6] = true; } } for (int m = 0; m < 9; m++) { byte a; if (vertsCovered[m]) { a = byte.MaxValue; flag = true; } else { a = 0; } subMesh.colors.Add(new Color32(byte.MaxValue, byte.MaxValue, byte.MaxValue, a)); } } } if (flag) { subMesh.disabled = false; subMesh.FinalizeMesh(MeshParts.Colors); } else { subMesh.disabled = true; } }
public override void Regenerate() { LayerSubMesh subMesh = base.GetSubMesh(MatBases.Snow); if (subMesh.mesh.vertexCount == 0) { SectionLayerGeometryMaker_Solid.MakeBaseGeometry(base.section, subMesh, AltitudeLayer.Terrain); } subMesh.Clear(MeshParts.Colors); float[] depthGridDirect_Unsafe = base.Map.snowGrid.DepthGridDirect_Unsafe; CellRect cellRect = base.section.CellRect; IntVec3 size = base.Map.Size; int num = size.z - 1; IntVec3 size2 = base.Map.Size; int num2 = size2.x - 1; bool flag = false; CellIndices cellIndices = base.Map.cellIndices; for (int i = cellRect.minX; i <= cellRect.maxX; i++) { for (int j = cellRect.minZ; j <= cellRect.maxZ; j++) { float num3 = depthGridDirect_Unsafe[cellIndices.CellToIndex(i, j)]; int num4 = cellIndices.CellToIndex(i, j - 1); float num5 = (j <= 0) ? num3 : depthGridDirect_Unsafe[num4]; num4 = cellIndices.CellToIndex(i - 1, j - 1); float num6 = (j <= 0 || i <= 0) ? num3 : depthGridDirect_Unsafe[num4]; num4 = cellIndices.CellToIndex(i - 1, j); float num7 = (i <= 0) ? num3 : depthGridDirect_Unsafe[num4]; num4 = cellIndices.CellToIndex(i - 1, j + 1); float num8 = (j >= num || i <= 0) ? num3 : depthGridDirect_Unsafe[num4]; num4 = cellIndices.CellToIndex(i, j + 1); float num9 = (j >= num) ? num3 : depthGridDirect_Unsafe[num4]; num4 = cellIndices.CellToIndex(i + 1, j + 1); float num10 = (j >= num || i >= num2) ? num3 : depthGridDirect_Unsafe[num4]; num4 = cellIndices.CellToIndex(i + 1, j); float num11 = (i >= num2) ? num3 : depthGridDirect_Unsafe[num4]; num4 = cellIndices.CellToIndex(i + 1, j - 1); float num12 = (j <= 0 || i >= num2) ? num3 : depthGridDirect_Unsafe[num4]; this.vertDepth[0] = (float)((num5 + num6 + num7 + num3) / 4.0); this.vertDepth[1] = (float)((num7 + num3) / 2.0); this.vertDepth[2] = (float)((num7 + num8 + num9 + num3) / 4.0); this.vertDepth[3] = (float)((num9 + num3) / 2.0); this.vertDepth[4] = (float)((num9 + num10 + num11 + num3) / 4.0); this.vertDepth[5] = (float)((num11 + num3) / 2.0); this.vertDepth[6] = (float)((num11 + num12 + num5 + num3) / 4.0); this.vertDepth[7] = (float)((num5 + num3) / 2.0); this.vertDepth[8] = num3; for (int k = 0; k < 9; k++) { if (this.vertDepth[k] > 0.0099999997764825821) { flag = true; } subMesh.colors.Add(SectionLayer_Snow.SnowDepthColor(this.vertDepth[k])); } } } if (flag) { subMesh.disabled = false; subMesh.FinalizeMesh(MeshParts.Colors); } else { subMesh.disabled = true; } }
public override void Regenerate() { if (!MatBases.SunShadow.shader.isSupported) { return; } LayerSubMesh subMesh = base.GetSubMesh(MatBases.IndoorMask); subMesh.Clear(MeshParts.All); Building[] innerArray = base.Map.edificeGrid.InnerArray; CellRect cellRect = new CellRect(this.section.botLeft.x, this.section.botLeft.z, 17, 17); cellRect.ClipInsideMap(base.Map); subMesh.verts.Capacity = cellRect.Area * 2; subMesh.tris.Capacity = cellRect.Area * 4; float y = Altitudes.AltitudeFor(AltitudeLayer.MetaOverlays); CellIndices cellIndices = base.Map.cellIndices; for (int i = cellRect.minX; i <= cellRect.maxX; i++) { int j = cellRect.minZ; while (j <= cellRect.maxZ) { IntVec3 intVec = new IntVec3(i, 0, j); if (this.HideRainPrimary(intVec)) { goto IL_16E; } bool flag = intVec.Roofed(base.Map); bool flag2 = false; if (flag) { for (int k = 0; k < 8; k++) { IntVec3 c = intVec + GenAdj.AdjacentCells[k]; if (c.InBounds(base.Map)) { if (this.HideRainPrimary(c)) { flag2 = true; break; } } } } if (flag && flag2) { goto IL_16E; } IL_29D: j++; continue; IL_16E: Thing thing = innerArray[cellIndices.CellToIndex(i, j)]; float num; if (thing != null && (thing.def.passability == Traversability.Impassable || thing.def.IsDoor)) { num = 0f; } else { num = 0.16f; } subMesh.verts.Add(new Vector3((float)i - num, y, (float)j - num)); subMesh.verts.Add(new Vector3((float)i - num, y, (float)(j + 1) + num)); subMesh.verts.Add(new Vector3((float)(i + 1) + num, y, (float)(j + 1) + num)); subMesh.verts.Add(new Vector3((float)(i + 1) + num, y, (float)j - num)); int count = subMesh.verts.Count; subMesh.tris.Add(count - 4); subMesh.tris.Add(count - 3); subMesh.tris.Add(count - 2); subMesh.tris.Add(count - 4); subMesh.tris.Add(count - 2); subMesh.tris.Add(count - 1); goto IL_29D; } } if (subMesh.verts.Count > 0) { subMesh.FinalizeMesh(MeshParts.Verts | MeshParts.Tris); } }