/* * From http://www.redblobgames.com/maps/mapgen2/ * Original work copyright 2017 Red Blob Games * Unreal Engine 4 implementation copyright 2018 Jay Stevens * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include "CoreMinimal.h" #include "Engine/DataAsset.h" #include "Engine/DataTable.h" #include "GameplayTagContainer.h" #include "DualMesh/Public/TriangleDualMesh.h" #include "IslandMapUtils.h" #include "IslandBiome.generated.h" /** * A class which assigns biomes to parts of the island based on their attributes. */ UCLASS(Blueprintable) class POLYGONALMAPGENERATOR_API UIslandBiome : public UDataAsset { GENERATED_BODY() public: UPROPERTY(EditAnywhere, BlueprintReadWrite) UDataTable* BiomeData; protected: virtual void AssignCoast_Implementation(TArray& r_coast, UTriangleDualMesh* Mesh, const TArray& r_ocean) const; virtual void AssignTemperature_Implementation(TArray& r_temperature, UTriangleDualMesh* Mesh, const TArray& r_ocean, const TArray& r_water, const TArray& r_elevation, const TArray& r_moisture, float NorthernTemperature, float SouthernTemperature) const; virtual void AssignBiome_Implementation(TArray& r_biome, UTriangleDualMesh* Mesh, const TArray& r_ocean, const TArray& r_water, const TArray& r_coast, const TArray& r_temperature, const TArray& r_moisture) const; public: UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Procedural Generation|Island Generation|Biome") void AssignCoast(UPARAM(ref) TArray& CoastalRegions, UTriangleDualMesh* Mesh, const TArray& OceanRegions) const; UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Procedural Generation|Island Generation|Biome") void AssignTemperature(UPARAM(ref) TArray& RegionTemperatures, UTriangleDualMesh* Mesh, const TArray& OceanRegions, const TArray& WaterRegions, const TArray& RegionElevations, const TArray& RegionMoisture, float NorthernTemperature, float SouthernTemperature) const; UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Procedural Generation|Island Generation|Biome") void AssignBiome(UPARAM(ref) TArray& RegionBiomes, UTriangleDualMesh* Mesh, const TArray& OceanRegions, const TArray& WaterRegions, const TArray& CoastalRegions, const TArray& RegionTemperature, const TArray& RegionMoisture) const; void assign_r_coast(TArray& r_coast, UTriangleDualMesh* Mesh, const TArray& r_ocean) const; void assign_r_temperature(TArray& r_temperature, UTriangleDualMesh* Mesh, const TArray& r_ocean, const TArray& r_water, const TArray& r_elevation, const TArray& r_moisture, float NorthernTemperature, float SouthernTemperature) const; void assign_r_biome(TArray& r_biome, UTriangleDualMesh* Mesh, const TArray& r_ocean, const TArray& r_water, const TArray& r_coast, const TArray& r_temperature, const TArray& r_moisture) const; };