Пример #1
0
    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;
        }
    }
Пример #2
0
    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);
    }
Пример #3
0
    // 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);
            }
        }
    }
Пример #4
0
 void Awake()
 {
     instance = this;
 }