diff --git a/AdventureMap.cpp b/AdventureMap.cpp index 87dda7e..2d3d9a0 100644 --- a/AdventureMap.cpp +++ b/AdventureMap.cpp @@ -99,22 +99,40 @@ TArray AAdventureMap::Neighbors(AHexTile* OfHex) int32 Index; 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 ); - 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 ); - 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 ); - 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 ); - 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 ); - 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; } diff --git a/AdventureMap.h b/AdventureMap.h index 0bc220b..9945156 100644 --- a/AdventureMap.h +++ b/AdventureMap.h @@ -34,12 +34,12 @@ public: UPROPERTY(VisibleInstanceOnly, BlueprintReadWrite, Category = "Generation") TArray Grid; - UFUNCTION(BlueprintCallable) + UFUNCTION(BlueprintCallable, Category = "Runtime") int32 GridIndex(int32 q, int32 r); - UFUNCTION(BlueprintCallable) + UFUNCTION(BlueprintCallable, Category = "Runtime") AHexTile* RandomHex(); - UFUNCTION(BlueprintCallable) - TArray Neighbors(AHexTile* OfHexTile); + UFUNCTION(BlueprintCallable, Category = "Runtime") + TArray Neighbors(AHexTile* OfHex); // Player spawn section UPROPERTY(VisibleAnywhere, BlueprintReadWrite) diff --git a/HexTile.cpp b/HexTile.cpp index 749e95e..a9b6f62 100644 --- a/HexTile.cpp +++ b/HexTile.cpp @@ -39,3 +39,11 @@ void AHexTile::FillCornersArray() 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; +} \ No newline at end of file diff --git a/HexTile.h b/HexTile.h index 948c7cd..2a9ddff 100644 --- a/HexTile.h +++ b/HexTile.h @@ -23,10 +23,11 @@ public: UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Config") float TileSize; + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components") USceneComponent* SceneComponent; - UFUNCTION(BlueprintCallable) + UFUNCTION(BlueprintCallable, Category = "debug") FVector Corner(int32 i); UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "debug") TArray Corners; @@ -39,9 +40,11 @@ public: int32 R; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Runtime") int32 Index; - UPROPERTY(BlueprintReadWrite, Category = "Runtime") AAdventureMap* MapRef; + UFUNCTION(BlueprintCallable, Category = "Runtime") + int32 Distance(AHexTile* ToHex); + protected: // Called when the game starts or when spawned virtual void BeginPlay() override;