@ -1,10 +1,15 @@
 
		
	
		
			
				 # include  " Level/Map/Components/TerrainLayerComponent.h "  
		
	
		
			
				 
		
	
		
			
				# include  "PaperTerrainActor.h"  
		
	
		
			
				# include  "PaperTerrainComponent.h"  
		
	
		
			
				# include  "Level/Generator/VoronoiTerrainGenerator.h"  
		
	
		
			
				# include  "Paper2D/Classes/PaperTileLayer.h"  
		
	
		
			
				# include  "Paper2D/Classes/PaperTileMapComponent.h"  
		
	
		
			
				# include  "Paper2D/Classes/PaperTileSet.h"  
		
	
		
			
				# include  "PaperTileMap.h"  
		
	
		
			
				# include  "PaperTileMapActor.h"  
		
	
		
			
				# include  "Level/Map/GameMapActor.h"  
		
	
		
			
				# include  "UniversalObjectLocators/UniversalObjectLocatorUtils.h"  
		
	
		
			
				 
		
	
		
			
				 
		
	
		
			
				/* 相邻四格地形信息映射到TileSet的索引   
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -115,15 +120,16 @@ static bool GenerateTerrain(const TArray<FGameplayTag>& InTerrains, const TArray
 
		
	
		
			
				 
		
	
		
			
				static  UPaperTileLayer *  GetTileMapLayer (  
		
	
		
			
					const  FGameplayTag &  InTerrainType , 
 
		
	
		
			
					const  TMap < FGameplayTag ,  TObjectPtr < U PaperTileMapComponent > > &  TileMapMeshe s 
 
		
	
		
			
					const  TMap < FGameplayTag ,  TObjectPtr < A PaperTileMapActor > > &  TileMapActor s 
 
		
	
		
			
				) {  
		
	
		
			
					// 将给定的数据绘制到TileMapLayer上 
 
		
	
		
			
				const  TObjectPtr < U PaperTileMapComponent >  * TileMapMesh   =  TileMapMeshe s . Find ( InTerrainType ) ;  
		
	
		
			
					if  ( ! TileMapMesh  ) 
 
		
	
		
			
				const  TObjectPtr < A PaperTileMapActor >  * TileMapActor   =  TileMapActor s . Find ( InTerrainType ) ;  
		
	
		
			
					if  ( ! TileMapActor  ) 
 
		
	
		
			
					{ 
 
		
	
		
			
						return  nullptr ; 
 
		
	
		
			
					} 
 
		
	
		
			
					const  TObjectPtr < UPaperTileMap >  TileMap =  TileMapMesh  - > Get ( ) - > TileMap ; 
 
		
	
		
			
					UPaperTileMapComponent  * Component =  TileMapActor  - > Get ( ) - > GetRenderComponent ( ) ; 
 
		
	
		
			
					const  TObjectPtr < UPaperTileMap >  TileMap  =  Component - > TileMap ; 
 
		
	
		
			
					if  ( ! TileMap ) 
 
		
	
		
			
					{ 
 
		
	
		
			
						return  nullptr ; 
 
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -165,7 +171,7 @@ UTerrainLayerComponent::UTerrainLayerComponent()
 
		
	
		
			
				void  UTerrainLayerComponent : : BeginPlay ( )  
		
	
		
			
				{  
		
	
		
			
					Super : : BeginPlay ( ) ; 
 
		
	
		
			
					SetupTerrainMeshe s ( ) ; 
 
		
	
		
			
					SetupTerrainActor s ( ) ; 
 
		
	
		
			
				 
		
	
		
			
					TArray < int32 >  Priority ; 
 
		
	
		
			
					TArray < FGameplayTag >  TerrainData ; 
 
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -185,7 +191,7 @@ void UTerrainLayerComponent::SetTerrainDataWithType(const FGameplayTag& InTerrai
 
		
	
		
			
				{  
		
	
		
			
					// 将给定的数据绘制到TileMapLayer上 
 
		
	
		
			
				UPaperTileSet *  TileSet  =  GetMapTileSet ( InTerrainType ,  TileSetConfigs ) ;  
		
	
		
			
					UPaperTileLayer  * TileMapLayer  =  GetTileMapLayer ( InTerrainType ,  TerrainMeshe s ) ; 
 
		
	
		
			
					UPaperTileLayer  * TileMapLayer  =  GetTileMapLayer ( InTerrainType ,  TerrainActor s ) ; 
 
		
	
		
			
					if  ( ! TileSet  | |  ! TileMapLayer ) 
 
		
	
		
			
					{ 
 
		
	
		
			
						UE_LOG ( LogTemp ,  Warning ,  TEXT ( " UTerrainLayerComponent::SetTerrainData " ) ) ; 
 
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -244,17 +250,17 @@ FGameplayTag UTerrainLayerComponent::GetTerrainAt(const int32 X, const int32 Y)
 
		
	
		
			
				}  
		
	
		
			
				 
		
	
		
			
				 
		
	
		
			
				void  UTerrainLayerComponent : : SetupTerrainMeshe s ( )  
		
	
		
			
				void  UTerrainLayerComponent : : SetupTerrainActor s ( )  
		
	
		
			
				{  
		
	
		
			
					if  ( TileSetConfigs . Num ( )  = =  0 ) 
 
		
	
		
			
					{ 
 
		
	
		
			
						return ; 
 
		
	
		
			
					} 
 
		
	
		
			
				 
		
	
		
			
					TerrainMeshe s . Empty ( ) ; 
 
		
	
		
			
					USceneComponent  * RootScene  =  GetOwner ( ) - > GetRootComponent ( ) ; 
 
		
	
		
			
					TerrainActor s . Empty ( ) ; 
 
		
	
		
			
				 
		
	
		
			
					int32  Z  =  0 ; 
 
		
	
		
			
					float  ZOrder  =  0.f ; 
 
		
	
		
			
					for  ( const  FGameplayTag  & TerrainType  :  GetSortedTerrainsWithPriority ( ) ) 
 
		
	
		
			
					{ 
 
		
	
		
			
						if  ( TileSetConfigs . Find ( TerrainType )  = =  nullptr ) 
 
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -262,10 +268,11 @@ void UTerrainLayerComponent::SetupTerrainMeshes()
 
		
	
		
			
							continue ; 
 
		
	
		
			
						} 
 
		
	
		
			
				 
		
	
		
			
						// 创建一个新的TileMap组件, ,  
 
		
	
		
			
				auto *  NewTileMapMesh  =  NewObject < UPaperTileMapComponent > ( this ) ;  
		
	
		
			
						NewTileMapMesh - > RegisterComponent ( ) ; 
 
		
	
		
			
						UWorld *  World  =  GetWorld ( ) ; 
 
		
	
		
			
				 
		
	
		
			
						APaperTileMapActor *  TileMapActor  =  World - > SpawnActor < APaperTileMapActor > ( ) ; 
 
		
	
		
			
						UPaperTileMapComponent *  NewTileMapMesh  =  TileMapActor - > GetRenderComponent ( ) ; 
 
		
	
		
			
						
 
		
	
		
			
						
 
		
	
		
			
						UPaperTileMap *  NewTileMap  =  NewObject < UPaperTileMap > ( NewTileMapMesh ) ; 
 
		
	
		
			
				 
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -280,9 +287,11 @@ void UTerrainLayerComponent::SetupTerrainMeshes()
 
		
	
		
			
						NewTileMap - > TileLayers . Add ( NewLayer ) ; 
 
		
	
		
			
						
 
		
	
		
			
						NewTileMapMesh - > SetTileMap ( NewTileMap ) ; 
 
		
	
		
			
						NewTileMapMesh - > SetRelativeLocation ( FVector ( - ( NewTileMap - > TileWidth  /  2 ) ,  - ( NewTileMap - > TileHeight  /  2 ) ,  Z + + ) ) ; 
 
		
	
		
			
						NewTileMapMesh - > SetRelativeLocation ( FVector ( - ( NewTileMap - > TileWidth  /  2 ) ,  - ( NewTileMap - > TileHeight  /  2 ) ,  0 ) ) ; 
 
		
	
		
			
						NewTileMapMesh - > SetRelativeRotation ( FRotator ( 0 ,  0 ,  - 90 ) ) ; 
 
		
	
		
			
						NewTileMapMesh - > AttachToComponent ( RootScene ,  FAttachmentTransformRules : : KeepWorldTransform ) ; 
 
		
	
		
			
						TerrainMeshes  . Add ( TerrainType ,  NewTileMapMesh ) ; 
 
		
	
		
			
				 
		
	
		
			
						TileMapActor - > SetActorLocation  ( FVector ( 0 ,  0 ,  ZOrder ) ) ; 
 
		
	
		
			
						ZOrder  =  ZOrder  +  0.01 ; 
 
		
	
		
			
						TerrainActors . Add ( TerrainType ,  TileMapActor ) ; 
 
		
	
		
			
					} 
 
		
	
		
			
				}