@ -2,7 +2,6 @@
|
|||||||
#include "AbilitySystemBlueprintLibrary.h"
|
#include "AbilitySystemBlueprintLibrary.h"
|
||||||
#include "AbilitySystemComponent.h"
|
#include "AbilitySystemComponent.h"
|
||||||
|
|
||||||
#pragma optimize("", off)
|
|
||||||
void UBusyGameAbility::OnGiveAbility(const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilitySpec& Spec)
|
void UBusyGameAbility::OnGiveAbility(const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilitySpec& Spec)
|
||||||
{
|
{
|
||||||
Super::OnGiveAbility(ActorInfo, Spec);
|
Super::OnGiveAbility(ActorInfo, Spec);
|
||||||
|
|||||||
@ -84,7 +84,6 @@ void UBusyPawnMovement::TickComponent(float DeltaTime, ELevelTick TickType,
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
#pragma optimize("", off)
|
|
||||||
|
|
||||||
void UBusyPawnMovement::MoveTick(const float DeltaTime)
|
void UBusyPawnMovement::MoveTick(const float DeltaTime)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -142,7 +142,6 @@ void UStaticResourceLayerComponent::GetAlwaysPresentResourceList(TMap<FName, int
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma optimize("",off)
|
|
||||||
bool UStaticResourceLayerComponent::GetCanGenerateResourcesWeight(const FVector2D& Position,
|
bool UStaticResourceLayerComponent::GetCanGenerateResourcesWeight(const FVector2D& Position,
|
||||||
TArray<TTuple<FName, int>>& OutResourcesWeight) const
|
TArray<TTuple<FName, int>>& OutResourcesWeight) const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,10 +1,15 @@
|
|||||||
#include "Level/Map/Components/TerrainLayerComponent.h"
|
#include "Level/Map/Components/TerrainLayerComponent.h"
|
||||||
|
|
||||||
|
#include "PaperTerrainActor.h"
|
||||||
|
#include "PaperTerrainComponent.h"
|
||||||
#include "Level/Generator/VoronoiTerrainGenerator.h"
|
#include "Level/Generator/VoronoiTerrainGenerator.h"
|
||||||
#include "Paper2D/Classes/PaperTileLayer.h"
|
#include "Paper2D/Classes/PaperTileLayer.h"
|
||||||
#include "Paper2D/Classes/PaperTileMapComponent.h"
|
#include "Paper2D/Classes/PaperTileMapComponent.h"
|
||||||
#include "Paper2D/Classes/PaperTileSet.h"
|
#include "Paper2D/Classes/PaperTileSet.h"
|
||||||
#include "PaperTileMap.h"
|
#include "PaperTileMap.h"
|
||||||
|
#include "PaperTileMapActor.h"
|
||||||
#include "Level/Map/GameMapActor.h"
|
#include "Level/Map/GameMapActor.h"
|
||||||
|
#include "UniversalObjectLocators/UniversalObjectLocatorUtils.h"
|
||||||
|
|
||||||
|
|
||||||
/* 相邻四格地形信息映射到TileSet的索引
|
/* 相邻四格地形信息映射到TileSet的索引
|
||||||
@ -115,15 +120,16 @@ static bool GenerateTerrain(const TArray<FGameplayTag>& InTerrains, const TArray
|
|||||||
|
|
||||||
static UPaperTileLayer* GetTileMapLayer(
|
static UPaperTileLayer* GetTileMapLayer(
|
||||||
const FGameplayTag& InTerrainType,
|
const FGameplayTag& InTerrainType,
|
||||||
const TMap<FGameplayTag, TObjectPtr<UPaperTileMapComponent>>& TileMapMeshes
|
const TMap<FGameplayTag, TObjectPtr<APaperTileMapActor>>& TileMapActors
|
||||||
){
|
){
|
||||||
// 将给定的数据绘制到TileMapLayer上
|
// 将给定的数据绘制到TileMapLayer上
|
||||||
const TObjectPtr<UPaperTileMapComponent> *TileMapMesh = TileMapMeshes.Find(InTerrainType);
|
const TObjectPtr<APaperTileMapActor> *TileMapActor = TileMapActors.Find(InTerrainType);
|
||||||
if (!TileMapMesh)
|
if (!TileMapActor)
|
||||||
{
|
{
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
const TObjectPtr<UPaperTileMap> TileMap = TileMapMesh->Get()->TileMap;
|
UPaperTileMapComponent *Component = TileMapActor->Get()->GetRenderComponent();
|
||||||
|
const TObjectPtr<UPaperTileMap> TileMap = Component->TileMap;
|
||||||
if (!TileMap)
|
if (!TileMap)
|
||||||
{
|
{
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@ -165,7 +171,7 @@ UTerrainLayerComponent::UTerrainLayerComponent()
|
|||||||
void UTerrainLayerComponent::BeginPlay()
|
void UTerrainLayerComponent::BeginPlay()
|
||||||
{
|
{
|
||||||
Super::BeginPlay();
|
Super::BeginPlay();
|
||||||
SetupTerrainMeshes();
|
SetupTerrainActors();
|
||||||
|
|
||||||
TArray<int32> Priority;
|
TArray<int32> Priority;
|
||||||
TArray<FGameplayTag> TerrainData;
|
TArray<FGameplayTag> TerrainData;
|
||||||
@ -185,7 +191,7 @@ void UTerrainLayerComponent::SetTerrainDataWithType(const FGameplayTag& InTerrai
|
|||||||
{
|
{
|
||||||
// 将给定的数据绘制到TileMapLayer上
|
// 将给定的数据绘制到TileMapLayer上
|
||||||
UPaperTileSet* TileSet = GetMapTileSet(InTerrainType, TileSetConfigs);
|
UPaperTileSet* TileSet = GetMapTileSet(InTerrainType, TileSetConfigs);
|
||||||
UPaperTileLayer *TileMapLayer = GetTileMapLayer(InTerrainType, TerrainMeshes);
|
UPaperTileLayer *TileMapLayer = GetTileMapLayer(InTerrainType, TerrainActors);
|
||||||
if (!TileSet || !TileMapLayer)
|
if (!TileSet || !TileMapLayer)
|
||||||
{
|
{
|
||||||
UE_LOG(LogTemp, Warning, TEXT("UTerrainLayerComponent::SetTerrainData"));
|
UE_LOG(LogTemp, Warning, TEXT("UTerrainLayerComponent::SetTerrainData"));
|
||||||
@ -244,17 +250,17 @@ FGameplayTag UTerrainLayerComponent::GetTerrainAt(const int32 X, const int32 Y)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void UTerrainLayerComponent::SetupTerrainMeshes()
|
void UTerrainLayerComponent::SetupTerrainActors()
|
||||||
{
|
{
|
||||||
if (TileSetConfigs.Num() == 0)
|
if (TileSetConfigs.Num() == 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
TerrainMeshes.Empty();
|
TerrainActors.Empty();
|
||||||
USceneComponent *RootScene = GetOwner()->GetRootComponent();
|
|
||||||
|
|
||||||
int32 Z = 0;
|
int32 Z = 0;
|
||||||
|
float ZOrder = 0.f;
|
||||||
for (const FGameplayTag &TerrainType : GetSortedTerrainsWithPriority())
|
for (const FGameplayTag &TerrainType : GetSortedTerrainsWithPriority())
|
||||||
{
|
{
|
||||||
if (TileSetConfigs.Find(TerrainType) == nullptr)
|
if (TileSetConfigs.Find(TerrainType) == nullptr)
|
||||||
@ -262,10 +268,11 @@ void UTerrainLayerComponent::SetupTerrainMeshes()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 创建一个新的TileMap组件,新的TileMap,新的TileLayer
|
UWorld* World = GetWorld();
|
||||||
auto* NewTileMapMesh = NewObject<UPaperTileMapComponent>(this);
|
|
||||||
NewTileMapMesh->RegisterComponent();
|
|
||||||
|
|
||||||
|
APaperTileMapActor* TileMapActor = World->SpawnActor<APaperTileMapActor>();
|
||||||
|
UPaperTileMapComponent* NewTileMapMesh = TileMapActor->GetRenderComponent();
|
||||||
|
|
||||||
|
|
||||||
UPaperTileMap* NewTileMap = NewObject<UPaperTileMap>(NewTileMapMesh);
|
UPaperTileMap* NewTileMap = NewObject<UPaperTileMap>(NewTileMapMesh);
|
||||||
|
|
||||||
@ -280,9 +287,11 @@ void UTerrainLayerComponent::SetupTerrainMeshes()
|
|||||||
NewTileMap->TileLayers.Add(NewLayer);
|
NewTileMap->TileLayers.Add(NewLayer);
|
||||||
|
|
||||||
NewTileMapMesh->SetTileMap(NewTileMap);
|
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->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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,6 +6,9 @@
|
|||||||
#include "TerrainLayerComponent.generated.h"
|
#include "TerrainLayerComponent.generated.h"
|
||||||
|
|
||||||
|
|
||||||
|
class APaperTileMapActor;
|
||||||
|
|
||||||
|
|
||||||
USTRUCT(BlueprintType)
|
USTRUCT(BlueprintType)
|
||||||
struct FTerrainTileSetConfig{
|
struct FTerrainTileSetConfig{
|
||||||
GENERATED_BODY()
|
GENERATED_BODY()
|
||||||
@ -51,7 +54,9 @@ public:
|
|||||||
FGameplayTag GetTerrainAt(const int32 X, const int32 Y);
|
FGameplayTag GetTerrainAt(const int32 X, const int32 Y);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void SetupTerrainMeshes();
|
// void SetupTerrainMeshes();
|
||||||
|
|
||||||
|
void SetupTerrainActors();
|
||||||
|
|
||||||
void SetTerrainDataWithType(const FGameplayTag& InTerrainType, const TArray<bool> &InTerrainData);
|
void SetTerrainDataWithType(const FGameplayTag& InTerrainType, const TArray<bool> &InTerrainData);
|
||||||
|
|
||||||
@ -69,8 +74,13 @@ protected:
|
|||||||
UPROPERTY(EditAnywhere, BlueprintReadOnly)
|
UPROPERTY(EditAnywhere, BlueprintReadOnly)
|
||||||
TMap<FGameplayTag, TObjectPtr<UPaperTileSet>> TileSetConfigs;
|
TMap<FGameplayTag, TObjectPtr<UPaperTileSet>> TileSetConfigs;
|
||||||
|
|
||||||
|
// UPROPERTY(EditAnywhere, BlueprintReadOnly)
|
||||||
|
// TMap<FGameplayTag, TObjectPtr<UPaperTileMapComponent>> TerrainMeshes;
|
||||||
|
|
||||||
|
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadOnly)
|
UPROPERTY(EditAnywhere, BlueprintReadOnly)
|
||||||
TMap<FGameplayTag, TObjectPtr<UPaperTileMapComponent>> TerrainMeshes;
|
TMap<FGameplayTag, TObjectPtr<APaperTileMapActor>> TerrainActors;
|
||||||
|
|
||||||
|
|
||||||
UPROPERTY(BlueprintReadOnly)
|
UPROPERTY(BlueprintReadOnly)
|
||||||
TArray<FGameplayTag> TerrainLayerData;
|
TArray<FGameplayTag> TerrainLayerData;
|
||||||
|
|||||||
Reference in New Issue
Block a user