void OnTriggerEnter2D(Collider2D col) { if (col.CompareTag("Player") && col.GetComponent <PlayerSkill>().isDigging&& tunnelManager.GetID() == tunnelPassageID && intersect) { PolygonTester test = PolygonTester.instance; Queue <GameObject> queue = tunnelManager.GetQueue(); var list = queue.ToList(); while (list.Count() > 0) { if (gameObject.GetComponent <Transform>().position == list[0].GetComponent <Transform>().position) { break; } list.RemoveAt(0); } // Create Vector2 vertices Vector2[] vertices2D = new Vector2[list.Count()]; for (int i = 0; i < list.Count(); ++i) { vertices2D[i] = list[i].GetComponent <Transform>().position; } test.GenerateMesh(vertices2D, tunnelPassageID); //Debug.Log("Generate Mesh: "); intersect = false; } }
public static GameObject RoofObjectFromConcavePolygon(List <Vector3> ringVertices, bool flip) { List <Vector3> tempVertices = new List <Vector3>(ringVertices); List <PolygonTester.Triangle> triangles = PolygonTester.TriangulateConcavePolygon(tempVertices); List <int> indices = new List <int>(); List <Vector3> vertices = new List <Vector3>(); //transform data from triangulation algorithm in to something unity likes for (int i = 0; i < triangles.Count; i++) { vertices.Add(triangles[i].v1.position); vertices.Add(triangles[i].v2.position); vertices.Add(triangles[i].v3.position); if (!flip) { indices.Add(vertices.Count - 3); indices.Add(vertices.Count - 2); indices.Add(vertices.Count - 1); } else { indices.Add(vertices.Count - 3); indices.Add(vertices.Count - 1); indices.Add(vertices.Count - 2); } } // Create the mesh Mesh msh = new Mesh(); msh.vertices = vertices.ToArray(); msh.triangles = indices.ToArray(); msh.RecalculateNormals(); msh.RecalculateBounds(); GameObject roof = new GameObject(); // Set up game object with mesh; roof.AddComponent(typeof(MeshRenderer)); MeshFilter filter = roof.AddComponent(typeof(MeshFilter)) as MeshFilter; filter.mesh = msh; return(roof); }
// Update is called once per frame void Update() { if (bActive) { fActiveTime -= Time.deltaTime; // Destroy Tunnel if (fActiveTime < 0) { PolygonTester test = PolygonTester.instance; if (test.iID == tunnelPassageID) { PolygonTester.instance.DestoryMesh(); } Destroy(gameObject); } } }
void Awake() { instance = this; }