// Copyright Pacificao. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "AgrarianFoliagePatch.generated.h" class UHierarchicalInstancedStaticMeshComponent; class USceneComponent; UCLASS(Blueprintable) class AGRARIANGAME_API AAgrarianFoliagePatch : public AActor { GENERATED_BODY() public: AAgrarianFoliagePatch(); UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Agrarian|Foliage") TObjectPtr SceneRoot; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Agrarian|Foliage") TObjectPtr TreeInstances; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Agrarian|Foliage") TObjectPtr ShrubInstances; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Agrarian|Foliage") TObjectPtr GrassInstances; UFUNCTION(BlueprintCallable, Category = "Agrarian|Foliage") void ClearFoliage(); UFUNCTION(BlueprintCallable, Category = "Agrarian|Foliage") int32 AddTreeInstance(const FTransform& InstanceTransform); UFUNCTION(BlueprintCallable, Category = "Agrarian|Foliage") int32 AddShrubInstance(const FTransform& InstanceTransform); UFUNCTION(BlueprintCallable, Category = "Agrarian|Foliage") int32 AddGrassInstance(const FTransform& InstanceTransform); UFUNCTION(BlueprintPure, Category = "Agrarian|Foliage") int32 GetTreeInstanceCount() const; UFUNCTION(BlueprintPure, Category = "Agrarian|Foliage") int32 GetShrubInstanceCount() const; UFUNCTION(BlueprintPure, Category = "Agrarian|Foliage") int32 GetGrassInstanceCount() const; UFUNCTION(BlueprintCallable, Category = "Agrarian|Foliage|Fire") void GetFuelCountsNearLocation( const FVector& WorldLocation, float Radius, int32& OutGrassCount, int32& OutShrubCount, int32& OutTreeCount) const; UFUNCTION(BlueprintPure, Category = "Agrarian|Foliage|Fire") float GetDryVegetationFuelScoreNearLocation(const FVector& WorldLocation, float Radius) const; protected: int32 CountInstancesNearLocation( const UHierarchicalInstancedStaticMeshComponent* Component, const FVector& WorldLocation, float Radius) const; };