using System.Collections.Generic; namespace XNALara { class ShaderDict { private bool isLight1On; private bool isLight2On; private bool isLight3On; private bool supportsShadersV3; private bool forceShadersV3; private bool hasChanged; private Dictionary<string, string> dict = new Dictionary<string, string>(); public ShaderDict() { hasChanged = true; } public bool IsLight1On { set { if (isLight1On != value) { isLight1On = value; hasChanged = true; } } } public bool IsLight2On { set { if (isLight2On != value) { isLight2On = value; hasChanged = true; } } } public bool IsLight3On { set { if (isLight3On != value) { isLight3On = value; hasChanged = true; } } } public bool SupportsShadersV3 { set { if (supportsShadersV3 != value) { supportsShadersV3 = value; hasChanged = true; } } } public bool ForceShadersV3 { set { if (forceShadersV3 != value) { forceShadersV3 = value; hasChanged = true; } } } public string this[string key] { get { if (hasChanged) { RebuildDict(); hasChanged = false; } return dict[key]; } } private void RebuildDict() { dict.Clear(); if (isLight3On || forceShadersV3) { if (supportsShadersV3) { dict["Diffuse"] = "Diffuse_3"; dict["DiffuseLightmap"] = "DiffuseLightmap_3"; dict["DiffuseBump"] = "DiffuseBump_3"; dict["DiffuseLightmapBump"] = "DiffuseLightmapBump_3"; dict["DiffuseLightmapBump3"] = "DiffuseLightmapBump3_3"; dict["DiffuseLightmapBumpSpecular"] = "DiffuseLightmapBumpSpecular_3"; dict["DiffuseLightmapBump3Specular"] = "DiffuseLightmapBump3Specular_3"; dict["Metallic"] = forceShadersV3 ? "Metallic_3_V3" : "Metallic_3"; dict["MetallicBump3"] = "MetallicBump3_3"; dict["NextGen"] = "NextGen_3"; } else { dict["Diffuse"] = "Diffuse_2"; dict["DiffuseLightmap"] = "DiffuseLightmap_2"; dict["DiffuseBump"] = "DiffuseBump_2"; dict["DiffuseLightmapBump"] = "DiffuseLightmapBump_2"; dict["DiffuseLightmapBump3"] = "DiffuseLightmapBump3_2_LQ"; dict["DiffuseLightmapBumpSpecular"] = "DiffuseLightmapBumpSpecular_2"; dict["DiffuseLightmapBump3Specular"] = "DiffuseLightmapBump3_2_LQ"; dict["Metallic"] = "Metallic_3"; dict["MetallicBump3"] = "MetallicBump3_1_LQ"; dict["NextGen"] = "NextGen_2"; } } else { if (isLight2On) { dict["Diffuse"] = "Diffuse_2"; dict["DiffuseLightmap"] = "DiffuseLightmap_2"; dict["DiffuseBump"] = "DiffuseBump_2"; dict["DiffuseLightmapBump"] = "DiffuseLightmapBump_2"; dict["DiffuseLightmapBump3"] = (supportsShadersV3 ? "DiffuseLightmapBump3_2_HQ" : "DiffuseLightmapBump3_2_LQ"); dict["DiffuseLightmapBumpSpecular"] = "DiffuseLightmapBumpSpecular_2"; dict["DiffuseLightmapBump3Specular"] = (supportsShadersV3 ? "DiffuseLightmapBump3Specular_3" : "DiffuseLightmapBump3_2_LQ"); dict["Metallic"] = "Metallic_2"; dict["MetallicBump3"] = supportsShadersV3 ? "MetallicBump3_2" : "MetallicBump3_1_LQ"; dict["NextGen"] = "NextGen_2"; } else { dict["Diffuse"] = "Diffuse_1"; dict["DiffuseLightmap"] = "DiffuseLightmap_1"; dict["DiffuseBump"] = "DiffuseBump_1"; dict["DiffuseLightmapBump"] = "DiffuseLightmapBump_1"; dict["DiffuseLightmapBump3"] = "DiffuseLightmapBump3_1"; dict["DiffuseLightmapBumpSpecular"] = "DiffuseLightmapBumpSpecular_1"; dict["DiffuseLightmapBump3Specular"] = "DiffuseLightmapBump3Specular_1"; dict["Metallic"] = "Metallic_1"; dict["MetallicBump3"] = supportsShadersV3 ? "MetallicBump3_1_HQ" : "MetallicBump3_1_LQ"; dict["NextGen"] = "NextGen_1"; } } } } }