Graphics/GraphicsSettings.TerrainSettings.cs

Part of a GraphicsSettings component that defines terrain rendering options and quality enums, with properties to hold the selected rendering mode and quality. It contains commented-out code showing an intended method to apply those settings to scene objects by setting attributes.

namespace AtmokineticAssets;

public sealed partial class GraphicsSettings : Component, Component.ExecuteInEditor
{
    //Terrain Settings
    public enum TerrainRenderingModeEnumeration
    {
        [Title("Parallax Occlusion Mapping")]
        ParallaxOcclusionMapping,
        
        [Title("Bump Offset")]
        BumpOffset,
       
        Standard
    }

    //[Property, Feature("Terrain"), Title("Rendering")]
    public TerrainRenderingModeEnumeration TerrainRenderingMode { get; set; } = TerrainRenderingModeEnumeration.Standard;

    public enum TerrainRenderingParallaxOcclusionMappingQualityEnumeration
    {
        Ultra,
        High,
        Medium,
        Low
    }

    //[Property, Feature("Terrain"), Title("Quality")] 
    [ShowIf(nameof(TerrainRenderingMode), TerrainRenderingModeEnumeration.ParallaxOcclusionMapping)]
    public TerrainRenderingParallaxOcclusionMappingQualityEnumeration TerrainRenderingParallaxOcclusionMapping { get; set; } = TerrainRenderingParallaxOcclusionMappingQualityEnumeration.Medium;

    public enum TerrainRenderingBumpOffsetQualityEnumeration
    {
        Ultra,
        High,
        Medium,
        Low
    }
   
    //[Property, Feature("Terrain"), Title("Quality")] 
    [ShowIf(nameof(TerrainRenderingMode), TerrainRenderingModeEnumeration.BumpOffset)]
    public TerrainRenderingParallaxOcclusionMappingQualityEnumeration TerrainRenderingBumpOffset { get; set; } = TerrainRenderingParallaxOcclusionMappingQualityEnumeration.Medium;


    // public void ChangeTerrainSettings()
    // {
    //             // Terrain rendering mode: 0 = POM, 1 = Bump Offset, 2 = Standard
    //     int terrainRenderingMode = TerrainRenderingMode switch
    //     {
    //         TerrainRenderingModeEnumeration.ParallaxOcclusionMapping => 0,
    //         TerrainRenderingModeEnumeration.BumpOffset => 1,
    //         TerrainRenderingModeEnumeration.Standard => 2,
    //         _ => 1
    //     };

    //     // Quality: Ultra = 1, High = 2, Medium = 4, Low = 8
    //     float quality;
    //     switch ( TerrainRenderingMode )
    //     {
    //         case TerrainRenderingModeEnumeration.ParallaxOcclusionMapping:
    //             quality = TerrainRenderingParallaxOcclusionMapping switch
    //             {
    //                 TerrainRenderingParallaxOcclusionMappingQualityEnumeration.Ultra => 1f,
    //                 TerrainRenderingParallaxOcclusionMappingQualityEnumeration.High => 2f,
    //                 TerrainRenderingParallaxOcclusionMappingQualityEnumeration.Medium => 4f,
    //                 TerrainRenderingParallaxOcclusionMappingQualityEnumeration.Low => 8f,
    //                 _ => 4f
    //             };
    //             break;

    //         case TerrainRenderingModeEnumeration.BumpOffset:
    //             quality = TerrainRenderingBumpOffset switch
    //             {
    //                 TerrainRenderingParallaxOcclusionMappingQualityEnumeration.Ultra => 1f,
    //                 TerrainRenderingParallaxOcclusionMappingQualityEnumeration.High => 2f,
    //                 TerrainRenderingParallaxOcclusionMappingQualityEnumeration.Medium => 4f,
    //                 TerrainRenderingParallaxOcclusionMappingQualityEnumeration.Low => 8f,
    //                 _ => 4f
    //             };
    //             break;

    //         default:
    //             quality = 4f;
    //             break;
    //     }

    //     // Enumerate live — objects spawned after startup (e.g. baked water tiles) must be included.
    //     foreach ( var sceneObject in Scene.SceneWorld.SceneObjects )
    //     {
    //         if ( sceneObject is null || !sceneObject.IsValid() ) continue;
    //         sceneObject.Attributes.Set( "D_Rendering", terrainRenderingMode );
    //         sceneObject.Attributes.Set( "Quality", quality );
    //     }
    // }
}