63 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			63 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								using Godot;
							 | 
						||
| 
								 | 
							
								using System.Reflection;
							 | 
						||
| 
								 | 
							
								using System.Collections.Generic;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Rokojori
							 | 
						||
| 
								 | 
							
								{ 
							 | 
						||
| 
								 | 
							
								  [Tool]
							 | 
						||
| 
								 | 
							
								  [GlobalClass]
							 | 
						||
| 
								 | 
							
								  public partial class GeometryTerrainOffset:GeometryModifier
							 | 
						||
| 
								 | 
							
								  {   
							 | 
						||
| 
								 | 
							
								    public override List<ShaderCode> GetGeometryCode( ShaderGenerationContext context, int offsetIndex )
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      if ( offsetIndex != 0 )
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        throw new System.Exception( "Unique component, can't be used multiple times");
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      if ( ShaderPhase.Includes == context.phase )
							 | 
						||
| 
								 | 
							
								      { 
							 | 
						||
| 
								 | 
							
								        return IncludeFromLibrary( "Terrain" );
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      if ( ShaderPhase.Variables == context.phase )
							 | 
						||
| 
								 | 
							
								      {        
							 | 
						||
| 
								 | 
							
								        return AsUniformGroup( "Terrain",
							 | 
						||
| 
								 | 
							
								          
							 | 
						||
| 
								 | 
							
								        @"
							 | 
						||
| 
								 | 
							
								        uniform sampler2D terrainHeightMap;
							 | 
						||
| 
								 | 
							
								        uniform vec2 terrainCenterXZ = vec2( 0.0, 0.0 );
							 | 
						||
| 
								 | 
							
								        uniform vec2 terrainSizeXZ = vec2( 100.0, 100.0 );
							 | 
						||
| 
								 | 
							
								        uniform float terrainMinHeight = 0.0;
							 | 
						||
| 
								 | 
							
								        uniform float terrainMaxHeight = 100.0;
							 | 
						||
| 
								 | 
							
								        "
							 | 
						||
| 
								 | 
							
								          
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								           
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      if ( ShaderPhase.Vertex == context.phase )
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return ToInnerBlock( "Terrain",
							 | 
						||
| 
								 | 
							
								          
							 | 
						||
| 
								 | 
							
								        @" 
							 | 
						||
| 
								 | 
							
								        addTerrainOffset( 
							 | 
						||
| 
								 | 
							
								          MODEL_MATRIX, 
							 | 
						||
| 
								 | 
							
								          VERTEX, 
							 | 
						||
| 
								 | 
							
								          terrainHeightMap,
							 | 
						||
| 
								 | 
							
								          terrainCenterXZ,
							 | 
						||
| 
								 | 
							
								          terrainSizeXZ,
							 | 
						||
| 
								 | 
							
								          terrainMinHeight,
							 | 
						||
| 
								 | 
							
								          terrainMaxHeight
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        "
							 | 
						||
| 
								 | 
							
								                  
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      return null;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |