using Godot; using System.Collections.Generic; using System; namespace Rokojori { [Tool] [GlobalClass] public partial class FollowDepthOfFieldEffect:_XX_DepthOfFieldEffect { [Export] public NodePath node; protected float centerDistance = 0; [Export( PropertyHint.Range, "-10,10")] public float offsetDistanceDetails = 0; [Export( PropertyHint.Range, "-1,1")] public float offsetDistanceMicro = 0; [Export( PropertyHint.Range, "0,1000")] public float absoluteRange = 1; [Export( PropertyHint.Range, "0,0.5")] public float distanceRelativeRange = 0.1f; [Export( PropertyHint.Range, "0,100")] public float absoluteTransition = 1; [Export( PropertyHint.Range, "0,1")] public float distanceRelativeTransition = 0.1f; [Export( PropertyHint.Range, "0.1,10")] public float nearTransitionScale = 0.5f; [Export( PropertyHint.Range, "0.1,10")] public float farTransitionScale = 2.5f; [Export] public NormalizedValue amount; [Export] public Float8Value exposure; public void SetCenterDistance( float distance ) { centerDistance = distance; } public override BoxedFloatValue[] GetFloatValues() { var distance = MathX.Max( 0, centerDistance + offsetDistanceDetails + offsetDistanceMicro ); var range = absoluteRange + distance * distanceRelativeRange; var far = distance + range; var near = distance - range; var farTransition = ( absoluteTransition + ( distanceRelativeTransition * far ) ) * farTransitionScale; var nearTransition = ( absoluteTransition + ( distanceRelativeTransition * near ) )* nearTransitionScale; _values[ 0 ] = BoolFloatValue.Create( 1 ); _values[ 1 ] = FloatValue.Create( far ); _values[ 2 ] = FloatValue.Create( farTransition ); _values[ 3 ] = BoolFloatValue.Create( 1 ); _values[ 4 ] = FloatValue.Create( near ); _values[ 5 ] = FloatValue.Create( nearTransition ); _values[ 6 ] = amount; _values[ 7 ] = exposure; return _values; } } }