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 "AbilitySystemComponent.h"
#pragma optimize("", off)
void UBusyGameAbility::OnGiveAbility(const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilitySpec& 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)
{

View File

@ -142,7 +142,6 @@ void UStaticResourceLayerComponent::GetAlwaysPresentResourceList(TMap<FName, int
}
}
#pragma optimize("",off)
bool UStaticResourceLayerComponent::GetCanGenerateResourcesWeight(const FVector2D& Position,
TArray<TTuple<FName, int>>& OutResourcesWeight) const
{

View File

@ -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<UPaperTileMapComponent>>& TileMapMeshes
const TMap<FGameplayTag, TObjectPtr<APaperTileMapActor>>& TileMapActors
){
// 将给定的数据绘制到TileMapLayer上
const TObjectPtr<UPaperTileMapComponent> *TileMapMesh = TileMapMeshes.Find(InTerrainType);
if (!TileMapMesh)
const TObjectPtr<APaperTileMapActor> *TileMapActor = TileMapActors.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();
SetupTerrainMeshes();
SetupTerrainActors();
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, TerrainMeshes);
UPaperTileLayer *TileMapLayer = GetTileMapLayer(InTerrainType, TerrainActors);
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::SetupTerrainMeshes()
void UTerrainLayerComponent::SetupTerrainActors()
{
if (TileSetConfigs.Num() == 0)
{
return;
}
TerrainMeshes.Empty();
USceneComponent *RootScene = GetOwner()->GetRootComponent();
TerrainActors.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);
}
}

View File

@ -6,6 +6,9 @@
#include "TerrainLayerComponent.generated.h"
class APaperTileMapActor;
USTRUCT(BlueprintType)
struct FTerrainTileSetConfig{
GENERATED_BODY()
@ -51,7 +54,9 @@ public:
FGameplayTag GetTerrainAt(const int32 X, const int32 Y);
protected:
void SetupTerrainMeshes();
// void SetupTerrainMeshes();
void SetupTerrainActors();
void SetTerrainDataWithType(const FGameplayTag& InTerrainType, const TArray<bool> &InTerrainData);
@ -69,8 +74,13 @@ protected:
UPROPERTY(EditAnywhere, BlueprintReadOnly)
TMap<FGameplayTag, TObjectPtr<UPaperTileSet>> TileSetConfigs;
// UPROPERTY(EditAnywhere, BlueprintReadOnly)
// TMap<FGameplayTag, TObjectPtr<UPaperTileMapComponent>> TerrainMeshes;
UPROPERTY(EditAnywhere, BlueprintReadOnly)
TMap<FGameplayTag, TObjectPtr<UPaperTileMapComponent>> TerrainMeshes;
TMap<FGameplayTag, TObjectPtr<APaperTileMapActor>> TerrainActors;
UPROPERTY(BlueprintReadOnly)
TArray<FGameplayTag> TerrainLayerData;