using Godot; using System.Reflection; using System.Collections.Generic; namespace Rokojori { [Tool] [GlobalClass] public partial class VertexWind:VertexModifier { [Export] public bool enabled = true; [Export] public bool sampleAngleFromNoise = true; [Export] public bool heightCompensation = true; public override List GetCode( ShaderGenerationContext context ) { if ( ShaderPhase.Includes == context.phase ) { return ToCode( "#include \"res://addons/rokojori_action_library/Runtime/Shading/Library/Wind.gdshaderinc\"" ); } if ( ShaderPhase.Variables == context.phase ) { return AsUniformGroup( "Wind", @" uniform float windStrength = 0; uniform vec2 windSpeed = vec2(1,1); uniform float windScale = 1; uniform sampler2D windNoise; uniform vec2 windNoiseAngleOffset; uniform vec2 windNoiseStrengthOffset = vec2( 0.1234, 0.56789 ); uniform float windStart = 0; uniform float windEnd = 1; uniform float windWeightCurve:hint_range(0,1) = 0.5f; uniform float windHeightCompensation :hint_range(0,1) = 0.5f; " ); } if ( ShaderPhase.Vertex == context.phase ) { return ToInnerBlock( "Wind", @" applyWind( TIME, MODEL_MATRIX, VERTEX, windStrength, windSpeed, windScale, windNoise, windNoiseAngleOffset, windNoiseStrengthOffset, windStart, windEnd, windWeightCurve, windHeightCompensation ); " ); } return null; } } }