Add GridManager to spawn grid cells
This commit is contained in:
1 parent
c51138b0f1
commit
ed2b879889
2 files changed
+109
No files matched your search
@@ -0,0 +1,66 @@
|
||||
#include "GridManager.h"
|
||||
#include "GridCell.h"
|
||||
#include "Engine/World.h"
|
||||
|
||||
// このファイル専用のログカテゴリ
|
||||
DEFINE_LOG_CATEGORY_STATIC(LogTacticaGrid, Log, All);
|
||||
|
||||
AGridManager::AGridManager()
|
||||
{
|
||||
PrimaryActorTick.bCanEverTick = false;
|
||||
}
|
||||
|
||||
void AGridManager::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
|
||||
UE_LOG(LogTacticaGrid, Log, TEXT("GridManager BeginPlay: %d x %d, CellSize=%.1f"),
|
||||
GridSizeX, GridSizeY, CellSize);
|
||||
|
||||
GenerateGrid();
|
||||
}
|
||||
|
||||
void AGridManager::GenerateGrid()
|
||||
{
|
||||
UWorld* World = GetWorld();
|
||||
if (!World)
|
||||
{
|
||||
UE_LOG(LogTacticaGrid, Error, TEXT("GetWorld() が null です"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!CellClass)
|
||||
{
|
||||
CellClass = AGridCell::StaticClass();
|
||||
}
|
||||
|
||||
Cells.Reset();
|
||||
const FVector Origin = GetActorLocation();
|
||||
|
||||
for (int32 Y = 0; Y < GridSizeY; ++Y)
|
||||
{
|
||||
for (int32 X = 0; X < GridSizeX; ++X)
|
||||
{
|
||||
const FVector Location = Origin + FVector(X * CellSize, Y * CellSize, 0.0f);
|
||||
|
||||
FActorSpawnParameters Params;
|
||||
Params.SpawnCollisionHandlingOverride =
|
||||
ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
|
||||
|
||||
AGridCell* Cell = World->SpawnActor<AGridCell>(
|
||||
CellClass, Location, FRotator::ZeroRotator, Params);
|
||||
|
||||
if (Cell)
|
||||
{
|
||||
Cell->GridCoord = FIntPoint(X, Y);
|
||||
Cells.Add(Cell);
|
||||
}
|
||||
else
|
||||
{
|
||||
UE_LOG(LogTacticaGrid, Warning, TEXT("マス (%d, %d) の生成に失敗"), X, Y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
UE_LOG(LogTacticaGrid, Log, TEXT("%d 個のマスを生成しました"), Cells.Num());
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "GameFramework/Actor.h"
|
||||
#include "GridManager.generated.h"
|
||||
|
||||
class AGridCell;
|
||||
|
||||
UCLASS()
|
||||
class TACTICA_API AGridManager : public AActor
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
AGridManager();
|
||||
|
||||
protected:
|
||||
virtual void BeginPlay() override;
|
||||
|
||||
public:
|
||||
// グリッドの横のマス数
|
||||
UPROPERTY(EditAnywhere, Category = "Grid")
|
||||
int32 GridSizeX = 3;
|
||||
|
||||
// グリッドの縦のマス数
|
||||
UPROPERTY(EditAnywhere, Category = "Grid")
|
||||
int32 GridSizeY = 3;
|
||||
|
||||
// 1マスの大きさ(cm)
|
||||
UPROPERTY(EditAnywhere, Category = "Grid")
|
||||
float CellSize = 100.0f;
|
||||
|
||||
// スポーンするマスのクラス(未設定ならAGridCell)
|
||||
UPROPERTY(EditAnywhere, Category = "Grid")
|
||||
TSubclassOf<AGridCell> CellClass;
|
||||
|
||||
// 生成したマスの一覧
|
||||
UPROPERTY(VisibleAnywhere, Category = "Grid")
|
||||
TArray<TObjectPtr<AGridCell>> Cells;
|
||||
|
||||
private:
|
||||
void GenerateGrid();
|
||||
};
|
||||
Reference in new issue
Block a user