#T#PoiVolumeColorProperties
//ifex _EnableVolumeColor==0
[HideInInspector] m_start_ALVolumeColor ("AL ♫ Volume Color--{  reference_property:_EnableVolumeColor}", Float) = 0
[HideInInspector][ThryToggle(POI_AL_VOLUMECOLOR)]_EnableVolumeColor ("Enable AL Volume Color", Float) = 0
[Enum(UV0, 0, UV1, 1, UV2, 2, UV3, 3)] _ALVolumeColorUV ("UV", Int) = 0
[Enum(X, 0, Y, 1)] _ALVolumeColorDirection ("UV Direction", Int) = 0
[ThryWideEnum(Replace, 0, Darken, 1, Multiply, 2, Color Burn, 3, Linear Burn, 4, Lighten, 5, Screen, 6, Color Dodge, 7, Linear Dodge(Add), 8, Overlay, 9, Soft Lighten, 10, Hard Light, 11, Vivid Light, 12, Linear Light, 13, Pin Light, 14, Hard Mix, 15, Difference, 16, Exclusion, 17, Subtract, 18, Divide, 19)]_ALVolumeColorBlendType ("Blend Type", Range(0, 1)) = 0

_ALVolumeColorBlendAlpha ("Alpha", Range(0,1)) = 1
_ALVolumeColorLow ("Volume Color Low--{reference_property:_ALVolumeColorLowThemeIndex}", Color) = (0, 0, 1)
[HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _ALVolumeColorLowThemeIndex ("", Int) = 0
_ALLowEmission ("Low Emission", Range(0, 20)) = 0
_ALVolumeColorMid ("Volume Color Mid--{reference_property:_ALVolumeColorMidThemeIndex}", Color) = (0, 1, 0)
[HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _ALVolumeColorMidThemeIndex ("", Int) = 0
_ALMidEmission ("Mid Emission", Range(0, 20)) = 0
_ALVolumeColorHigh ("Volume Color High--{reference_property:_ALVolumeColorHighThemeIndex}", Color) = (1, 0, 0)
[HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _ALVolumeColorHighThemeIndex ("", Int) = 0
_ALHighEmission ("High Emission", Range(0, 20)) = 0

[HideInInspector] m_end_ALVolumeColor ("AL ♫ Volume Color", Float) = 0
//endex

#T#PoiVolumeColorKeywords
//ifex _EnableVolumeColor==0
#pragma shader_feature_local POI_AL_VOLUMECOLOR
//endex
#T#PoiVolumeColorVariables
//ifex _EnableVolumeColor==0
#ifdef POI_AUDIOLINK
	#ifdef POI_AL_VOLUMECOLOR
		float _ALVolumeColorUV;
		float _ALVolumeColorDirection;
		float _ALVolumeColorBlendType;
        float _ALVolumeColorBlendAlpha;
		float3 _ALVolumeColorLow;
		float _ALVolumeColorLowThemeIndex;
		float3 _ALVolumeColorMid;
		float _ALVolumeColorMidThemeIndex;
		float3 _ALVolumeColorHigh;
		float _ALVolumeColorHighThemeIndex;
		float _ALLowEmission;
		float _ALMidEmission;
		float _ALHighEmission;
	#endif
#endif
//endex

#T#PoiVolumeColorFunctions
//ifex _EnableVolumeColor==0
#ifdef POI_AUDIOLINK
	#ifdef POI_AL_VOLUMECOLOR
		void ApplyAudioLinkVolumeColor(in PoiMesh poiMesh, inout PoiFragData poiFragData, in PoiMods poiMods)
		{
			float volume = AudioLinkLerpMultiline(ALPASS_DFT + float2(poiMesh.uv[_ALVolumeColorUV][_ALVolumeColorDirection] * AUDIOLINK_ETOTALBINS, 0.0)).b;

			float3 lowColor = _ALVolumeColorLow.rgb * poiThemeColor(poiMods, _ALVolumeColorLow.rgb, _ALVolumeColorLowThemeIndex);
			float3 midColor = _ALVolumeColorMid.rgb * poiThemeColor(poiMods, _ALVolumeColorMid.rgb, _ALVolumeColorMidThemeIndex);
			float3 highColor = _ALVolumeColorHigh.rgb * poiThemeColor(poiMods, _ALVolumeColorHigh.rgb, _ALVolumeColorHighThemeIndex);
			
			float3 volumeColor = lerp(lowColor, midColor, saturate(volume * 2));
			volumeColor = lerp(volumeColor, highColor, saturate(volume * 2 - 1));

			float3 emissionColor = lerp(lowColor * _ALLowEmission, midColor * _ALMidEmission, saturate(volume * 2));
			emissionColor = lerp(emissionColor, highColor * _ALHighEmission, saturate(volume * 2 - 1));

			#if defined(POI_PASS_BASE) || defined(POI_PASS_ADD)
				poiFragData.emission += emissionColor * poiMods.audioLinkAvailable;
				poiFragData.baseColor.rgb = lerp(poiFragData.baseColor, customBlend(poiFragData.baseColor, volumeColor, _ALVolumeColorBlendType), saturate(_ALVolumeColorBlendAlpha * poiMods.audioLinkAvailable));
			#endif
		}
	#endif
#endif
//endex
#T#PoiVolumeColorFunctionCalls
//ifex _EnableVolumeColor==0
#ifdef POI_AUDIOLINK
	#ifdef POI_AL_VOLUMECOLOR
		ApplyAudioLinkVolumeColor(poiMesh, poiFragData, poiMods);
	#endif
#endif
//endex