From 5d274b6d395283f2804ff9ce53cd6df3d9418e25 Mon Sep 17 00:00:00 2001 From: Jay Stevens Date: Fri, 28 Dec 2018 22:19:26 -0800 Subject: [PATCH] Added delegates to IslandMap. --- .../Private/IslandMap.cpp | 54 ++++++++++++++++--- .../PolygonalMapGenerator/Public/IslandMap.h | 37 ++++++++++++- 2 files changed, 83 insertions(+), 8 deletions(-) diff --git a/Source/PolygonalMapGenerator/Private/IslandMap.cpp b/Source/PolygonalMapGenerator/Private/IslandMap.cpp index eaa9c11..adafcd0 100644 --- a/Source/PolygonalMapGenerator/Private/IslandMap.cpp +++ b/Source/PolygonalMapGenerator/Private/IslandMap.cpp @@ -27,6 +27,12 @@ AIslandMap::AIslandMap() Seed = 0; NumRivers = 30; + OnIslandPointGenerationComplete.AddDynamic(this, &AIslandMap::OnPointGenerationComplete); + OnIslandWaterGenerationComplete.AddDynamic(this, &AIslandMap::OnWaterGenerationComplete); + OnIslandElevationGenerationComplete.AddDynamic(this, &AIslandMap::OnElevationGenerationComplete); + OnIslandRiverGenerationComplete.AddDynamic(this, &AIslandMap::OnRiverGenerationComplete); + OnIslandMoistureGenerationComplete.AddDynamic(this, &AIslandMap::OnMoistureGenerationComplete); + OnIslandBiomeGenerationComplete.AddDynamic(this, &AIslandMap::OnBiomeGenerationComplete); OnIslandGenerationComplete.AddDynamic(this, &AIslandMap::OnIslandGenComplete); } @@ -38,6 +44,41 @@ void AIslandMap::BeginPlay() GenerateIsland(); } +void AIslandMap::OnPointGenerationComplete_Implementation() +{ + // Do nothing by default +} + +void AIslandMap::OnWaterGenerationComplete_Implementation() +{ + // Do nothing by default +} + +void AIslandMap::OnElevationGenerationComplete_Implementation() +{ + // Do nothing by default +} + +void AIslandMap::OnRiverGenerationComplete_Implementation() +{ + // Do nothing by default +} + +void AIslandMap::OnMoistureGenerationComplete_Implementation() +{ + // Do nothing by default +} + +void AIslandMap::OnBiomeGenerationComplete_Implementation() +{ + // Do nothing by default +} + +void AIslandMap::OnIslandGenComplete_Implementation() +{ + // Do nothing by default +} + void AIslandMap::GenerateIsland_Implementation() { if (PointGenerator == NULL || Water == NULL || Elevation == NULL || Rivers == NULL || Moisture == NULL || Biomes == NULL) @@ -74,7 +115,8 @@ void AIslandMap::GenerateIsland_Implementation() // Generate map points Mesh = PointGenerator->GenerateDualMesh(Rng); - + OnIslandPointGenerationComplete.Broadcast(); + #if !UE_BUILD_SHIPPING finishedTime = FDateTime::UtcNow(); difference = finishedTime - startTime; @@ -123,6 +165,7 @@ void AIslandMap::GenerateIsland_Implementation() // Water Water->assign_r_water(r_water, Rng, Mesh, Shape); Water->assign_r_ocean(r_ocean, Mesh, r_water); + OnIslandWaterGenerationComplete.Broadcast(); #if !UE_BUILD_SHIPPING finishedTime = FDateTime::UtcNow(); @@ -135,6 +178,7 @@ void AIslandMap::GenerateIsland_Implementation() Elevation->assign_t_elevation(t_elevation, t_coastdistance, t_downslope_s, Mesh, r_ocean, r_water, DrainageRng); Elevation->redistribute_t_elevation(t_elevation, Mesh, r_ocean); Elevation->assign_r_elevation(r_elevation, Mesh, t_elevation, r_ocean); + OnIslandElevationGenerationComplete.Broadcast(); #if !UE_BUILD_SHIPPING finishedTime = FDateTime::UtcNow(); @@ -152,6 +196,7 @@ void AIslandMap::GenerateIsland_Implementation() river_t[i] = spring_t[i]; } Rivers->assign_s_flow(s_flow, CreatedRivers, Mesh, t_downslope_s, river_t, RiverRng); + OnIslandRiverGenerationComplete.Broadcast(); #if !UE_BUILD_SHIPPING finishedTime = FDateTime::UtcNow(); @@ -163,6 +208,7 @@ void AIslandMap::GenerateIsland_Implementation() // Moisture Moisture->assign_r_moisture(r_moisture, r_waterdistance, Mesh, r_water, Moisture->find_moisture_seeds_r(Mesh, s_flow, r_ocean, r_water)); Moisture->redistribute_r_moisture(r_moisture, Mesh, r_water, BiomeBias.Rainfall, 1.0f + BiomeBias.Rainfall); + OnIslandMoistureGenerationComplete.Broadcast(); #if !UE_BUILD_SHIPPING finishedTime = FDateTime::UtcNow(); @@ -175,6 +221,7 @@ void AIslandMap::GenerateIsland_Implementation() Biomes->assign_r_coast(r_coast, Mesh, r_ocean); Biomes->assign_r_temperature(r_temperature, Mesh, r_ocean, r_water, r_elevation, r_moisture, BiomeBias.NorthernTemperature, BiomeBias.SouthernTemperature); Biomes->assign_r_biome(r_biome, Mesh, r_ocean, r_water, r_coast, r_temperature, r_moisture); + OnIslandBiomeGenerationComplete.Broadcast(); #if !UE_BUILD_SHIPPING finishedTime = FDateTime::UtcNow(); @@ -189,11 +236,6 @@ void AIslandMap::GenerateIsland_Implementation() OnIslandGenerationComplete.Broadcast(); } -void AIslandMap::OnIslandGenComplete_Implementation() -{ - // Do nothing by default -} - TArray& AIslandMap::GetVoronoiPolygons() { if (VoronoiPolygons.Num() == 0) diff --git a/Source/PolygonalMapGenerator/Public/IslandMap.h b/Source/PolygonalMapGenerator/Public/IslandMap.h index 9a35e11..99cfc44 100644 --- a/Source/PolygonalMapGenerator/Public/IslandMap.h +++ b/Source/PolygonalMapGenerator/Public/IslandMap.h @@ -129,6 +129,19 @@ public: UPROPERTY(VisibleInstanceOnly, BlueprintReadWrite, Category = "Map") TArray CreatedRivers; + + UPROPERTY(BlueprintAssignable) + FOnIslandGenerationComplete OnIslandPointGenerationComplete; + UPROPERTY(BlueprintAssignable) + FOnIslandGenerationComplete OnIslandWaterGenerationComplete; + UPROPERTY(BlueprintAssignable) + FOnIslandGenerationComplete OnIslandElevationGenerationComplete; + UPROPERTY(BlueprintAssignable) + FOnIslandGenerationComplete OnIslandRiverGenerationComplete; + UPROPERTY(BlueprintAssignable) + FOnIslandGenerationComplete OnIslandMoistureGenerationComplete; + UPROPERTY(BlueprintAssignable) + FOnIslandGenerationComplete OnIslandBiomeGenerationComplete; UPROPERTY(BlueprintAssignable) FOnIslandGenerationComplete OnIslandGenerationComplete; @@ -141,14 +154,34 @@ protected: virtual void BeginPlay() override; UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Procedural Generation|Island Generation") - void GenerateIsland(); - virtual void GenerateIsland_Implementation(); + void OnPointGenerationComplete(); + virtual void OnPointGenerationComplete_Implementation(); + UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Procedural Generation|Island Generation") + void OnWaterGenerationComplete(); + virtual void OnWaterGenerationComplete_Implementation(); + UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Procedural Generation|Island Generation") + void OnElevationGenerationComplete(); + virtual void OnElevationGenerationComplete_Implementation(); + UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Procedural Generation|Island Generation") + void OnRiverGenerationComplete(); + virtual void OnRiverGenerationComplete_Implementation(); + UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Procedural Generation|Island Generation") + void OnMoistureGenerationComplete(); + virtual void OnMoistureGenerationComplete_Implementation(); + UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Procedural Generation|Island Generation") + void OnBiomeGenerationComplete(); + virtual void OnBiomeGenerationComplete_Implementation(); UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Procedural Generation|Island Generation") void OnIslandGenComplete(); virtual void OnIslandGenComplete_Implementation(); public: + // Creates the island using all the current parameters. + UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Procedural Generation|Island Generation") + void GenerateIsland(); + virtual void GenerateIsland_Implementation(); + // WARNING: This will take a long time to compile and will use a lot of memory. // Use with caution! UFUNCTION() -- 2.51.2