added Distance function, quick fix for Neighbors function
This commit is contained in:
parent
219b99c8d7
commit
33de4f2fa6
@ -99,22 +99,40 @@ TArray<AHexTile*> AAdventureMap::Neighbors(AHexTile* OfHex)
|
|||||||
int32 Index;
|
int32 Index;
|
||||||
|
|
||||||
Index = GridIndex(OfHex->Q + 1 , OfHex->R + 0 );
|
Index = GridIndex(OfHex->Q + 1 , OfHex->R + 0 );
|
||||||
if (Index < Grid.Num() && Index >= 0) { Neighbors.Add(Grid[Index]); }
|
if ( Index >= 0&& Index < Grid.Num() )
|
||||||
|
{
|
||||||
|
if (OfHex->Distance(Grid[Index]) == 1) { Neighbors.Add(Grid[Index]); }
|
||||||
|
}
|
||||||
|
|
||||||
Index = GridIndex(OfHex->Q + 1 , OfHex->R - 1 );
|
Index = GridIndex(OfHex->Q + 1 , OfHex->R - 1 );
|
||||||
if (Index < Grid.Num() && Index >= 0) { Neighbors.Add(Grid[Index]); }
|
if (Index >= 0 && Index < Grid.Num())
|
||||||
|
{
|
||||||
|
if (OfHex->Distance(Grid[Index]) == 1) { Neighbors.Add(Grid[Index]); }
|
||||||
|
}
|
||||||
|
|
||||||
Index = GridIndex(OfHex->Q + 0 , OfHex->R - 1 );
|
Index = GridIndex(OfHex->Q + 0 , OfHex->R - 1 );
|
||||||
if (Index < Grid.Num() && Index >= 0) { Neighbors.Add(Grid[Index]); }
|
if (Index >= 0 && Index < Grid.Num())
|
||||||
|
{
|
||||||
|
if (OfHex->Distance(Grid[Index]) == 1) { Neighbors.Add(Grid[Index]); }
|
||||||
|
}
|
||||||
|
|
||||||
Index = GridIndex(OfHex->Q - 1 , OfHex->R + 0 );
|
Index = GridIndex(OfHex->Q - 1 , OfHex->R + 0 );
|
||||||
if (Index < Grid.Num() && Index >= 0) { Neighbors.Add(Grid[Index]); }
|
if (Index >= 0 && Index < Grid.Num())
|
||||||
|
{
|
||||||
|
if (OfHex->Distance(Grid[Index]) == 1) { Neighbors.Add(Grid[Index]); }
|
||||||
|
}
|
||||||
|
|
||||||
Index = GridIndex(OfHex->Q - 1 , OfHex->R + 1 );
|
Index = GridIndex(OfHex->Q - 1 , OfHex->R + 1 );
|
||||||
if (Index < Grid.Num() && Index >= 0) { Neighbors.Add(Grid[Index]); }
|
if (Index >= 0 && Index < Grid.Num())
|
||||||
|
{
|
||||||
|
if (OfHex->Distance(Grid[Index]) == 1) { Neighbors.Add(Grid[Index]); }
|
||||||
|
}
|
||||||
|
|
||||||
Index = GridIndex(OfHex->Q + 0 , OfHex->R + 1 );
|
Index = GridIndex(OfHex->Q + 0 , OfHex->R + 1 );
|
||||||
if (Index < Grid.Num() && Index >= 0) { Neighbors.Add(Grid[Index]); }
|
if (Index >= 0 && Index < Grid.Num())
|
||||||
|
{
|
||||||
|
if (OfHex->Distance(Grid[Index]) == 1) { Neighbors.Add(Grid[Index]); }
|
||||||
|
}
|
||||||
|
|
||||||
return Neighbors; // currently wrapping from corner to corner --> rectify this with a manhattan distance check
|
return Neighbors;
|
||||||
}
|
}
|
||||||
|
@ -34,12 +34,12 @@ public:
|
|||||||
UPROPERTY(VisibleInstanceOnly, BlueprintReadWrite, Category = "Generation")
|
UPROPERTY(VisibleInstanceOnly, BlueprintReadWrite, Category = "Generation")
|
||||||
TArray<AHexTile*> Grid;
|
TArray<AHexTile*> Grid;
|
||||||
|
|
||||||
UFUNCTION(BlueprintCallable)
|
UFUNCTION(BlueprintCallable, Category = "Runtime")
|
||||||
int32 GridIndex(int32 q, int32 r);
|
int32 GridIndex(int32 q, int32 r);
|
||||||
UFUNCTION(BlueprintCallable)
|
UFUNCTION(BlueprintCallable, Category = "Runtime")
|
||||||
AHexTile* RandomHex();
|
AHexTile* RandomHex();
|
||||||
UFUNCTION(BlueprintCallable)
|
UFUNCTION(BlueprintCallable, Category = "Runtime")
|
||||||
TArray<AHexTile*> Neighbors(AHexTile* OfHexTile);
|
TArray<AHexTile*> Neighbors(AHexTile* OfHex);
|
||||||
|
|
||||||
// Player spawn section
|
// Player spawn section
|
||||||
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
|
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
|
||||||
|
@ -39,3 +39,11 @@ void AHexTile::FillCornersArray()
|
|||||||
Corners.Emplace(Corner(i + 1));
|
Corners.Emplace(Corner(i + 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32 AHexTile::Distance(AHexTile* ToHex)
|
||||||
|
{
|
||||||
|
int32 CubeS1 = -this->Q - this->R;
|
||||||
|
int32 CubeS2 = -ToHex->Q - ToHex->R;
|
||||||
|
|
||||||
|
return (abs(this->Q - ToHex->Q) + abs(this->R - ToHex->R) + abs(CubeS1 - CubeS2)) / 2;
|
||||||
|
}
|
@ -23,10 +23,11 @@ public:
|
|||||||
|
|
||||||
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Config")
|
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Config")
|
||||||
float TileSize;
|
float TileSize;
|
||||||
|
|
||||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components")
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components")
|
||||||
USceneComponent* SceneComponent;
|
USceneComponent* SceneComponent;
|
||||||
|
|
||||||
UFUNCTION(BlueprintCallable)
|
UFUNCTION(BlueprintCallable, Category = "debug")
|
||||||
FVector Corner(int32 i);
|
FVector Corner(int32 i);
|
||||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "debug")
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "debug")
|
||||||
TArray<FVector> Corners;
|
TArray<FVector> Corners;
|
||||||
@ -39,9 +40,11 @@ public:
|
|||||||
int32 R;
|
int32 R;
|
||||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Runtime")
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Runtime")
|
||||||
int32 Index;
|
int32 Index;
|
||||||
|
|
||||||
UPROPERTY(BlueprintReadWrite, Category = "Runtime")
|
UPROPERTY(BlueprintReadWrite, Category = "Runtime")
|
||||||
AAdventureMap* MapRef;
|
AAdventureMap* MapRef;
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "Runtime")
|
||||||
|
int32 Distance(AHexTile* ToHex);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Called when the game starts or when spawned
|
// Called when the game starts or when spawned
|
||||||
virtual void BeginPlay() override;
|
virtual void BeginPlay() override;
|
||||||
|
Loading…
Reference in New Issue
Block a user