Пример #1
0
    private SgtQuadsModel GetOrNewModel(int index)
    {
        var model = default(SgtQuadsModel);

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

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

        if (model == null || model.Quads != this)
        {
            model = Models[index] = SgtQuadsModel.Create(this);

            model.SetMaterial(Material);
        }

        return(model);
    }
Пример #2
0
    public static void MarkForDestruction(SgtQuadsModel model)
    {
        if (model != null)
        {
            model.Quads = null;

            model.PoolMeshNow();

            model.gameObject.SetActive(true);
        }
    }
Пример #3
0
    public static void Pool(SgtQuadsModel model)
    {
        if (model != null)
        {
            model.Quads = null;

            model.PoolMeshNow();

            SgtComponentPool <SgtQuadsModel> .Add(model);
        }
    }
Пример #4
0
    protected virtual void OnDestroy()
    {
        if (Models != null)
        {
            for (var i = Models.Count - 1; i >= 0; i--)
            {
                SgtQuadsModel.MarkForDestruction(Models[i]);
            }
        }

        SgtHelper.Destroy(Material);
    }
Пример #5
0
    private Mesh GetOrNewMesh(SgtQuadsModel model)
    {
        var mesh = model.Mesh;

        if (mesh == null)
        {
            mesh = SgtHelper.CreateTempMesh("Quads Mesh (Generated)");

            model.SetMesh(mesh);
        }
        else
        {
            mesh.Clear(false);
        }

        return(mesh);
    }
Пример #6
0
    public void UpdateMeshesAndModels()
    {
        updateMeshesAndModelsCalled = true;

        var starCount  = BeginQuads();
        var modelCount = 0;

        // Build meshes and models until starCount reaches 0
        if (starCount > 0)
        {
            BuildRects();
            ConvertRectsToCoords();

            while (starCount > 0)
            {
                var quadCount = Mathf.Min(starCount, SgtHelper.QuadsPerMesh);
                var model     = GetOrNewModel(modelCount);
                var mesh      = GetOrNewMesh(model);

                model.SetMaterial(Material);

                BuildMesh(mesh, modelCount * SgtHelper.QuadsPerMesh, quadCount);

                modelCount += 1;
                starCount  -= quadCount;
            }
        }

        // Remove any excess
        if (Models != null)
        {
            for (var i = Models.Count - 1; i >= modelCount; i--)
            {
                SgtQuadsModel.Pool(Models[i]);

                Models.RemoveAt(i);
            }
        }

        EndQuads();
    }