Lua向C#逻辑迁移 一期 #13

瓦片地图实现修改
This commit is contained in:
2025-10-26 19:01:10 +08:00
parent 8c0623b397
commit 56994b3927
5 changed files with 36 additions and 20 deletions

View File

@ -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);

View File

@ -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)
{ {

View File

@ -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
{ {

View File

@ -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);
} }
} }

View File

@ -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;