コード例 #1
0
    bool ShouldRebuildStarLayer(string layerName, List <MaterialProperty> props)
    {
        StarRendererData data = GetDataForLayer(layerName);

        if (data == null)
        {
            Debug.LogError("Can't check if we should rebuild layer since there's no tracking data?!?");
            return(false);
        }

        if (data.layerEnabled == false)
        {
            return(false);
        }

        // Check if density setting changed.
        MaterialProperty densityProp = GetPropertyWithName(props, "_StarLayer" + data.layerId + "Density");

        if (densityProp.floatValue != data.density)
        {
            return(true);
        }

        MaterialProperty dataProp = GetPropertyWithName(props, "_StarLayer" + data.layerId + "DataTex");

        if (dataProp != null && dataProp.textureValue == null)
        {
            return(true);
        }

        return(false);
    }
コード例 #2
0
    private void OnStarRenderingProgress(BaseStarDataRenderer renderer, float progress)
    {
        // Update the tracking data.
        StarRendererData data = starData[renderer];

        data.progress = progress;

        // Update progress bar.
        EditorUtility.DisplayProgressBar(progressTitle,
                                         progressMessage, CalculateOverallRenderProgress());
    }
コード例 #3
0
    void RenderStarSystem(List <MaterialProperty> props)
    {
        int renderCount = 0;

        // First flag everything that needs rendering (used for overall progress calculation).
        foreach (KeyValuePair <string, BaseStarDataRenderer> entry in renderers)
        {
            if (ShouldRebuildStarLayer(entry.Key, props))
            {
                renderCount += 1;
            }
        }

        // If render count is 0, just rebuild everything. Else only build what needs it.
        foreach (KeyValuePair <string, BaseStarDataRenderer> entry in renderers)
        {
            StarRendererData starData = GetDataForLayer(entry.Key);
            if (renderCount == 0)
            {
                starData.isRendering = true;
            }
            else
            {
                starData.isRendering = ShouldRebuildStarLayer(entry.Key, props);
            }
        }

        UpdateAllTrackingData(props);


        // Render out the dirty items
        busyRenderingCount = 0;
        foreach (KeyValuePair <string, BaseStarDataRenderer> entry in renderers)
        {
            StarRendererData starData = GetDataForLayer(entry.Key);

            // Only render dirty frames if any.. if none.. let the user force rebuild the star system if they like.
            if (starData.isRendering)
            {
                entry.Value.imageSize  = imageSize;
                entry.Value.density    = starData.density;
                entry.Value.starRadius = starData.starRadius;
                busyRenderingCount    += 1;
                EditorCoroutine.start(entry.Value.ComputeStarData());
            }
        }
    }
コード例 #4
0
    // Refresh the tracking data for a star rendering layer.
    void UpdateStarRendererTrackingData(BaseStarDataRenderer renderer,
                                        string layerId, List <MaterialProperty> props)
    {
        StarRendererData data = null;

        if (starData.ContainsKey(renderer) == false)
        {
            data = new StarRendererData();
            starData[renderer] = data;
        }
        else
        {
            data = starData[renderer];
        }

        MaterialProperty densityProp = GetPropertyWithName(props, "_StarLayer" + layerId + "Density");

        data.density  = densityProp.floatValue;
        data.name     = "Star layer " + layerId;
        data.layerId  = layerId;
        data.progress = 0;
    }
コード例 #5
0
    private void OnStarRenderingComplete(BaseStarDataRenderer renderer, Texture2D texture, bool success)
    {
        StarRendererData data = starData[renderer];

        texture.name       = data.layerId;
        texture.filterMode = FilterMode.Point;
        texture.wrapMode   = TextureWrapMode.Clamp;

        RemoveAllObjectsWithName(data.layerId, material);

        AddObjectToMaterial(texture, material);

        // Update the material with the new texture file.
        material.SetTexture("_StarLayer" + data.layerId + "DataTex", texture);

        busyRenderingCount -= 1;

        if (busyRenderingCount <= 0)
        {
            // Hide our progress bar.
            EditorUtility.ClearProgressBar();
        }
    }
コード例 #6
0
    // Appends an identifiier for the star data file names.
    private string FileNameForRendererData(BaseStarDataRenderer renderer, string prefix, string ext)
    {
        StarRendererData data = starData[renderer];

        return(prefix + data.layerId + "." + ext);
    }