Exemplo n.º 1
0
        public void Break(Vector2 position)
        {
            var area = Area;

            Debug.Log(area);
            if (area > MinBreakArea)
            {
                var calc = new VoronoiCalculator();
                var clip = new VoronoiClipper();

                var sites = new Vector2[3];

                for (int i = 0; i < sites.Length; i++)
                {
                    var dist  = Mathf.Abs(NormalizedRandom(0.0f, 1.0f / 2.0f));
                    var angle = 2.0f * Mathf.PI * Random.value;

                    sites[i] = position + new Vector2(
                        dist * Mathf.Cos(angle),
                        dist * Mathf.Sin(angle));
                }

                var diagram = calc.CalculateDiagram(sites);

                var clipped = new List <Vector2>();

                for (int i = 0; i < sites.Length; i++)
                {
                    clip.ClipSite(diagram, Polygon, i, ref clipped);

                    if (clipped.Count > 0)
                    {
                        var newGo = Instantiate(gameObject, transform.parent);

                        newGo.transform.localPosition = transform.localPosition;
                        newGo.transform.localRotation = transform.localRotation;

                        var bs = newGo.GetComponent <BreakableSurface>();

                        bs.Thickness = Thickness;
                        bs.Polygon.Clear();
                        bs.Polygon.AddRange(clipped);

                        var childArea = bs.Area;

                        var rb = bs.GetComponent <Rigidbody>();

                        rb.mass = Rigidbody.mass * (childArea / area);
                    }
                }

                gameObject.SetActive(false);
                Destroy(gameObject);
            }
        }
Exemplo n.º 2
0
    // calcula o diagrama de voronoi                                                      link para a implementação utilizada: https://github.com/OskarSigvardsson/unity-delaunay
    // serve mais para ser usar a triangulação de delaunay do resultado do diagrama
    public void BuildVoronoi()
    {
        var points2d = Graham.GetPointVectorList();

        GK.VoronoiCalculator voronoiCalculator = new GK.VoronoiCalculator();
        Diagram = voronoiCalculator.CalculateDiagram(Graham.GetPointVectorList());

        //var extends = Map.GetComponent<MeshFilter>().mesh.bounds.size;
        //extends.Scale(Map.transform.localScale);

        VoronoiMesh = CreateVoronoiMesh(Diagram);


        BuildGraph();
    }