public void GeneratePaths(LayerSubMesh subMesh, int tileID, List <OutputDirection> nodes, Color32 color, bool allowSmoothTransition) { WorldGrid worldGrid = Find.WorldGrid; worldGrid.GetTileVertices(tileID, tmpVerts); worldGrid.GetTileNeighbors(tileID, tmpNeighbors); if (nodes.Count == 1 && pointyEnds) { int count = subMesh.verts.Count; AddPathEndpoint(subMesh, tmpVerts, tmpNeighbors.IndexOf(nodes[0].neighbor), color, tileID, nodes[0]); subMesh.verts.Add(FinalizePoint(worldGrid.GetTileCenter(tileID), nodes[0].distortionFrequency, nodes[0].distortionIntensity)); subMesh.colors.Add(color.MutateAlpha(0)); subMesh.tris.Add(count); subMesh.tris.Add(count + 3); subMesh.tris.Add(count + 1); subMesh.tris.Add(count + 1); subMesh.tris.Add(count + 3); subMesh.tris.Add(count + 2); return; } if (nodes.Count == 2) { int count2 = subMesh.verts.Count; int num = tmpNeighbors.IndexOf(nodes[0].neighbor); int num2 = tmpNeighbors.IndexOf(nodes[1].neighbor); if (allowSmoothTransition && Mathf.Abs(num - num2) > 1 && Mathf.Abs((num - num2 + tmpVerts.Count) % tmpVerts.Count) > 1) { AddPathEndpoint(subMesh, tmpVerts, num, color, tileID, nodes[0]); AddPathEndpoint(subMesh, tmpVerts, num2, color, tileID, nodes[1]); subMesh.tris.Add(count2); subMesh.tris.Add(count2 + 5); subMesh.tris.Add(count2 + 1); subMesh.tris.Add(count2 + 5); subMesh.tris.Add(count2 + 4); subMesh.tris.Add(count2 + 1); subMesh.tris.Add(count2 + 1); subMesh.tris.Add(count2 + 4); subMesh.tris.Add(count2 + 2); subMesh.tris.Add(count2 + 4); subMesh.tris.Add(count2 + 3); subMesh.tris.Add(count2 + 2); return; } } float num3 = 0f; for (int i = 0; i < nodes.Count; i++) { num3 = Mathf.Max(num3, nodes[i].width); } Vector3 tileCenter = worldGrid.GetTileCenter(tileID); tmpHexVerts.Clear(); for (int j = 0; j < tmpVerts.Count; j++) { tmpHexVerts.Add(FinalizePoint(Vector3.LerpUnclamped(tileCenter, tmpVerts[j], num3 * 0.5f * 2f), 0f, 0f)); } tileCenter = FinalizePoint(tileCenter, 0f, 0f); int count3 = subMesh.verts.Count; subMesh.verts.Add(tileCenter); subMesh.colors.Add(color); int count4 = subMesh.verts.Count; for (int k = 0; k < tmpHexVerts.Count; k++) { subMesh.verts.Add(tmpHexVerts[k]); subMesh.colors.Add(color.MutateAlpha(0)); subMesh.tris.Add(count3); subMesh.tris.Add(count4 + (k + 1) % tmpHexVerts.Count); subMesh.tris.Add(count4 + k); } for (int l = 0; l < nodes.Count; l++) { if (nodes[l].width != 0f) { int count5 = subMesh.verts.Count; int num4 = tmpNeighbors.IndexOf(nodes[l].neighbor); AddPathEndpoint(subMesh, tmpVerts, num4, color, tileID, nodes[l]); subMesh.tris.Add(count5); subMesh.tris.Add(count4 + (num4 + tmpHexVerts.Count - 1) % tmpHexVerts.Count); subMesh.tris.Add(count3); subMesh.tris.Add(count5); subMesh.tris.Add(count3); subMesh.tris.Add(count5 + 1); subMesh.tris.Add(count5 + 1); subMesh.tris.Add(count3); subMesh.tris.Add(count5 + 2); subMesh.tris.Add(count3); subMesh.tris.Add(count4 + (num4 + 2) % tmpHexVerts.Count); subMesh.tris.Add(count5 + 2); } } }
public void GeneratePaths(LayerSubMesh subMesh, int tileID, List <OutputDirection> nodes, Color32 color, bool allowSmoothTransition) { WorldGrid worldGrid = Find.WorldGrid; worldGrid.GetTileVertices(tileID, tmpVerts); worldGrid.GetTileNeighbors(tileID, tmpNeighbors); if (nodes.Count == 1 && pointyEnds) { int count = subMesh.verts.Count; List <Vector3> verts = tmpVerts; List <int> list = tmpNeighbors; OutputDirection outputDirection = nodes[0]; AddPathEndpoint(subMesh, verts, list.IndexOf(outputDirection.neighbor), color, tileID, nodes[0]); List <Vector3> verts2 = subMesh.verts; Vector3 tileCenter = worldGrid.GetTileCenter(tileID); OutputDirection outputDirection2 = nodes[0]; float distortionFrequency = outputDirection2.distortionFrequency; OutputDirection outputDirection3 = nodes[0]; verts2.Add(FinalizePoint(tileCenter, distortionFrequency, outputDirection3.distortionIntensity)); subMesh.colors.Add(color.MutateAlpha(0)); subMesh.tris.Add(count); subMesh.tris.Add(count + 3); subMesh.tris.Add(count + 1); subMesh.tris.Add(count + 1); subMesh.tris.Add(count + 3); subMesh.tris.Add(count + 2); } else { if (nodes.Count == 2) { int count2 = subMesh.verts.Count; List <int> list2 = tmpNeighbors; OutputDirection outputDirection4 = nodes[0]; int num = list2.IndexOf(outputDirection4.neighbor); List <int> list3 = tmpNeighbors; OutputDirection outputDirection5 = nodes[1]; int num2 = list3.IndexOf(outputDirection5.neighbor); if (allowSmoothTransition && Mathf.Abs(num - num2) > 1 && Mathf.Abs((num - num2 + tmpVerts.Count) % tmpVerts.Count) > 1) { AddPathEndpoint(subMesh, tmpVerts, num, color, tileID, nodes[0]); AddPathEndpoint(subMesh, tmpVerts, num2, color, tileID, nodes[1]); subMesh.tris.Add(count2); subMesh.tris.Add(count2 + 5); subMesh.tris.Add(count2 + 1); subMesh.tris.Add(count2 + 5); subMesh.tris.Add(count2 + 4); subMesh.tris.Add(count2 + 1); subMesh.tris.Add(count2 + 1); subMesh.tris.Add(count2 + 4); subMesh.tris.Add(count2 + 2); subMesh.tris.Add(count2 + 4); subMesh.tris.Add(count2 + 3); subMesh.tris.Add(count2 + 2); return; } } float num3 = 0f; for (int i = 0; i < nodes.Count; i++) { float a = num3; OutputDirection outputDirection6 = nodes[i]; num3 = Mathf.Max(a, outputDirection6.width); } Vector3 tileCenter2 = worldGrid.GetTileCenter(tileID); tmpHexVerts.Clear(); for (int j = 0; j < tmpVerts.Count; j++) { tmpHexVerts.Add(FinalizePoint(Vector3.LerpUnclamped(tileCenter2, tmpVerts[j], num3 * 0.5f * 2f), 0f, 0f)); } tileCenter2 = FinalizePoint(tileCenter2, 0f, 0f); int count3 = subMesh.verts.Count; subMesh.verts.Add(tileCenter2); subMesh.colors.Add(color); int count4 = subMesh.verts.Count; for (int k = 0; k < tmpHexVerts.Count; k++) { subMesh.verts.Add(tmpHexVerts[k]); subMesh.colors.Add(color.MutateAlpha(0)); subMesh.tris.Add(count3); subMesh.tris.Add(count4 + (k + 1) % tmpHexVerts.Count); subMesh.tris.Add(count4 + k); } for (int l = 0; l < nodes.Count; l++) { OutputDirection outputDirection7 = nodes[l]; if (outputDirection7.width != 0f) { int count5 = subMesh.verts.Count; List <int> list4 = tmpNeighbors; OutputDirection outputDirection8 = nodes[l]; int num4 = list4.IndexOf(outputDirection8.neighbor); AddPathEndpoint(subMesh, tmpVerts, num4, color, tileID, nodes[l]); subMesh.tris.Add(count5); subMesh.tris.Add(count4 + (num4 + tmpHexVerts.Count - 1) % tmpHexVerts.Count); subMesh.tris.Add(count3); subMesh.tris.Add(count5); subMesh.tris.Add(count3); subMesh.tris.Add(count5 + 1); subMesh.tris.Add(count5 + 1); subMesh.tris.Add(count3); subMesh.tris.Add(count5 + 2); subMesh.tris.Add(count3); subMesh.tris.Add(count4 + (num4 + 2) % tmpHexVerts.Count); subMesh.tris.Add(count5 + 2); } } } }