Exemplo n.º 1
0
    private SgtAuroraModel GetOrAddModel(int index)
    {
        var model = default(SgtAuroraModel);

        if (Models == null)
        {
            Models = new List <SgtAuroraModel>();
        }

        if (index < Models.Count)
        {
            model = Models[index];
        }
        else
        {
            Models.Add(model);
        }

        if (model == null)
        {
            model = Models[index] = SgtAuroraModel.Create(this);

            model.SetMaterial(Material);
        }

        return(model);
    }
Exemplo n.º 2
0
    protected virtual void OnDestroy()
    {
        if (Meshes != null)
        {
            for (var i = Meshes.Count - 1; i >= 0; i--)
            {
                var mesh = Meshes[i];

                if (mesh != null)
                {
                    mesh.Clear(false);

                    SgtObjectPool <Mesh> .Add(Meshes[i]);
                }
            }
        }

        if (Models != null)
        {
            for (var i = Models.Count - 1; i >= 0; i--)
            {
                SgtAuroraModel.MarkForDestruction(Models[i]);
            }
        }

        SgtHelper.Destroy(Material);
    }
Exemplo n.º 3
0
    public static void MarkForDestruction(SgtAuroraModel model)
    {
        if (model != null)
        {
            model.Aurora = null;

            model.gameObject.SetActive(true);
        }
    }
Exemplo n.º 4
0
    public static void Pool(SgtAuroraModel model)
    {
        if (model != null)
        {
            model.Aurora = null;

            SgtComponentPool <SgtAuroraModel> .Add(model);
        }
    }
Exemplo n.º 5
0
    public void UpdateMeshesAndModels()
    {
        updateMeshesAndModelsCalled = true;

        if (Meshes == null)
        {
            Meshes = new List <Mesh>();
        }

        if (Models == null)
        {
            Models = new List <SgtAuroraModel>();
        }

        if (PathDetail > 0 && PathLengthMin > 0.0f && PathLengthMax > 0.0f)
        {
            var meshCount   = 1;
            var mesh        = GetMesh(0);
            var vertexCount = 0;

            SgtHelper.BeginRandomSeed(Seed);
            {
                for (var i = 0; i < PathCount; i++)
                {
                    AddPath(ref mesh, ref meshCount, ref vertexCount);
                }
            }
            SgtHelper.EndRandomSeed();

            BakeMesh(mesh);

            for (var i = Meshes.Count - 1; i >= meshCount; i--)
            {
                var extraMesh = Meshes[i];

                if (extraMesh != null)
                {
                    extraMesh.Clear(false);

                    SgtObjectPool <Mesh> .Add(extraMesh);
                }

                Meshes.RemoveAt(i);
            }
        }

        for (var i = 0; i < Meshes.Count; i++)
        {
            var model = GetOrAddModel(i);

            model.SetMesh(Meshes[i]);
        }

        // Remove any excess
        if (Models != null)
        {
            var min = Mathf.Max(0, Meshes.Count);

            for (var i = Models.Count - 1; i >= min; i--)
            {
                SgtAuroraModel.Pool(Models[i]);

                Models.RemoveAt(i);
            }
        }
    }