private void EndRegeneration()
    {
        for (var i = groups.Count - 1; i >= 0; i--)
        {
            var group = groups[i];

            if (group.Stars.Count > 0)
            {
                group.Stars.Clear();                 // No longer needed, and they've already been pooled in RegenerateMeshes()

                for (var j = group.Models.Count - 1; j >= 0; j--)
                {
                    var model = group.Models[j];

                    if (model.Mesh == null)
                    {
                        SgtStarfieldModel.Pool(model);

                        group.Models.RemoveAt(j);
                    }
                }
            }
            else
            {
                SgtStarfieldGroup.Pool(group);

                groups.RemoveAt(i);
            }
        }
    }
    public static void MarkForDestruction(SgtStarfieldGroup group)
    {
        if (group != null)
        {
            group.Starfield = null;

            group.gameObject.SetActive(true);
        }
    }
    protected override void UpdateGroupMaterial(SgtStarfieldGroup group)
    {
        if (group.Material == null)
        {
            group.Material = SgtHelper.CreateTempMaterial(SgtHelper.ShaderNamePrefix + "StaticStarfield");
        }

        base.UpdateGroupMaterial(group);
    }
    protected virtual void OnDestroy()
    {
        for (var i = groups.Count - 1; i >= 0; i--)
        {
            SgtStarfieldGroup.MarkForDestruction(groups[i]);
        }

        groups.Clear();
    }
    public static void MarkForDestruction(SgtStarfieldGroup group)
    {
        if (group != null)
        {
            group.Starfield = null;

            group.gameObject.SetActive(true);
        }
    }
    public static SgtStarfieldModel Create(SgtStarfieldGroup group)
    {
        var model = SgtComponentPool <SgtStarfieldModel> .Pop("Model", group.gameObject.layer, group.transform);

        model.Group = group;

        group.Models.Add(model);

        return(model);
    }
    public static SgtStarfieldModel Create(SgtStarfieldGroup group)
    {
        var model = SgtComponentPool<SgtStarfieldModel>.Pop("Model", group.transform);

        model.Group = group;

        group.Models.Add(model);

        return model;
    }
    protected abstract void CalculateStars(out List <SgtStarfieldStar> stars, out bool pool);    // pool == true when they are temporary

    protected virtual void UpdateGroupMaterial(SgtStarfieldGroup group)
    {
        var color       = SgtHelper.Brighten(Color, Color.a * Brightness);
        var scale       = transform.lossyScale.x;
        var renderQueue = (int)RenderQueue + RenderQueueOffset;

        if (group.Material == null)
        {
            group.Material = SgtHelper.CreateTempMaterial(SgtHelper.ShaderNamePrefix + "Starfield");
        }

        group.Material.renderQueue = renderQueue;
        group.Material.SetTexture("_Texture", group.Texture);
        group.Material.SetColor("_Color", color);
        group.Material.SetFloat("_Scale", scale);

        if (AllowPulse == true)
        {
            keywords.Add("LIGHT_1");

            group.Material.SetFloat("_Age", Age);
        }

        if (Softness > 0.0f)
        {
            keywords.Add("LIGHT_2");

            group.Material.SetFloat("_InvFade", SgtHelper.Reciprocal(Softness));
        }

        if (StretchToObservers == true)
        {
            keywords.Add("SGT_C");
        }

        if (FadeNear == true)
        {
            keywords.Add("SGT_D");

            group.Material.SetFloat("_FadeNearRadius", FadeNearRadius);
            group.Material.SetFloat("_FadeNearScale", SgtHelper.Reciprocal(FadeNearThickness));
        }

        if (FadeFar == true)
        {
            keywords.Add("SGT_E");

            group.Material.SetFloat("_FadeFarRadius", FadeFarRadius);
            group.Material.SetFloat("_FadeFarScale", SgtHelper.Reciprocal(FadeFarThickness));
        }
    }
    protected override void UpdateGroupMaterial(SgtStarfieldGroup group)
    {
        base.UpdateGroupMaterial(group);

        if (Wrap3D == true)
        {
            keywords.Add("SGT_B");
        }
        else
        {
            keywords.Add("SGT_A");
        }

        group.Material.SetVector("_WrapSize", Size);
    }
    public static void Pool(SgtStarfieldGroup group)
    {
        if (group != null)
        {
            group.Starfield = null;
            group.Texture   = null;
            group.Material  = null;

            for (var i = group.Models.Count - 1; i >= 0; i--)
            {
                SgtStarfieldModel.Pool(group.Models[i]);
            }

            group.Models.Clear();

            SgtComponentPool<SgtStarfieldGroup>.Add(group);
        }
    }
    public static void Pool(SgtStarfieldGroup group)
    {
        if (group != null)
        {
            group.Starfield = null;
            group.Texture   = null;
            group.Material  = null;

            for (var i = group.Models.Count - 1; i >= 0; i--)
            {
                SgtStarfieldModel.Pool(group.Models[i]);
            }

            group.Models.Clear();

            SgtComponentPool <SgtStarfieldGroup> .Add(group);
        }
    }
    protected SgtStarfieldGroup GetGroup(Sprite sprite)
    {
        var texture = sprite != null ? sprite.texture : null;

        for (var i = groups.Count - 1; i >= 0; i--)
        {
            var group = groups[i];

            if (group.Texture == texture)
            {
                return(group);
            }
        }

        var newGroup = SgtStarfieldGroup.Create(this); groups.Add(newGroup);

        newGroup.Texture = texture;

        return(newGroup);
    }
Esempio n. 13
0
    protected virtual void UpdateGroupMaterial(SgtStarfieldGroup group)
    {
        var color       = SgtHelper.Brighten(Color, Color.a * Brightness);
        var scale       = transform.lossyScale.x;
        var renderQueue = (int)RenderQueue + RenderQueueOffset;

        if (group.Material == null) group.Material = SgtHelper.CreateTempMaterial(SgtHelper.ShaderNamePrefix + "Starfield");

        group.Material.renderQueue = renderQueue;
        group.Material.SetTexture("_Texture", group.Texture);
        group.Material.SetColor("_Color", color);
        group.Material.SetFloat("_Scale", scale);

        if (AllowPulse == true)
        {
            keywords.Add("LIGHT_1");

            group.Material.SetFloat("_Age", Age);
        }

        if (Softness > 0.0f)
        {
            keywords.Add("LIGHT_2");

            group.Material.SetFloat("_InvFade", SgtHelper.Reciprocal(Softness));
        }

        if (StretchToObservers == true)
        {
            keywords.Add("SGT_C");
        }

        if (FadeNear == true)
        {
            keywords.Add("SGT_D");

            group.Material.SetFloat("_FadeNearRadius", FadeNearRadius);
            group.Material.SetFloat("_FadeNearScale", SgtHelper.Reciprocal(FadeNearThickness));
        }

        if (FadeFar == true)
        {
            keywords.Add("SGT_E");

            group.Material.SetFloat("_FadeFarRadius", FadeFarRadius);
            group.Material.SetFloat("_FadeFarScale", SgtHelper.Reciprocal(FadeFarThickness));
        }
    }
    protected override void UpdateGroupMaterial(SgtStarfieldGroup group)
    {
        if (group.Material == null) group.Material = SgtHelper.CreateTempMaterial(SgtHelper.ShaderNamePrefix + "StaticStarfield");

        base.UpdateGroupMaterial(group);
    }
    protected override void UpdateGroupMaterial(SgtStarfieldGroup group)
    {
        base.UpdateGroupMaterial(group);

        if (Wrap3D == true)
        {
            keywords.Add("SGT_B");
        }
        else
        {
            keywords.Add("SGT_A");
        }

        group.Material.SetVector("_WrapSize", Size);
    }