@ -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组件, 新的TileMap, 新的TileLayer
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 ) ;
}
}