From ea0b5d8c2835ee48e95c1a7095e0675b287b0e58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejtm=C3=A1nek?= Date: Sat, 20 Nov 2021 04:03:27 +0100 Subject: [PATCH] Adds landscape hack --- .../Private/LFLandscapeGrassHack.cpp | 30 ++++++++++++++++++ Source/lidarforest/Private/MyActor.cpp | 27 ++++++++++++++++ .../lidarforest/Public/LFLandscapeGrassHack.h | 31 +++++++++++++++++++ Source/lidarforest/Public/MyActor.h | 26 ++++++++++++++++ Source/lidarforest/lidarforest.Build.cs | 3 +- Source/lidarforest/lidarforest.cpp | 1 + 6 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 Source/lidarforest/Private/LFLandscapeGrassHack.cpp create mode 100644 Source/lidarforest/Private/MyActor.cpp create mode 100644 Source/lidarforest/Public/LFLandscapeGrassHack.h create mode 100644 Source/lidarforest/Public/MyActor.h diff --git a/Source/lidarforest/Private/LFLandscapeGrassHack.cpp b/Source/lidarforest/Private/LFLandscapeGrassHack.cpp new file mode 100644 index 0000000..c4be8cd --- /dev/null +++ b/Source/lidarforest/Private/LFLandscapeGrassHack.cpp @@ -0,0 +1,30 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#include "LFLandscapeGrassHack.h" + +// Sets default values +ALFLandscapeGrassHack::ALFLandscapeGrassHack() +{ + // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. + PrimaryActorTick.bCanEverTick = false; + Root = CreateDefaultSubobject("Root"); + RootComponent = Root; +} + +// Called when the game starts or when spawned +void ALFLandscapeGrassHack::BeginPlay() +{ + Super::BeginPlay(); + UpdateGrass(Landscape); +} + +void ALFLandscapeGrassHack::UpdateGrass(ALandscapeProxy* LandscapeToUpdate) +{ + if(!IsValid(LandscapeToUpdate)) + { + UE_LOG(LogTemp, Warning, TEXT("NO landscape has been assigned, cannot recreate grass")); + return; + } + FOccluderVertexArray arr; + LandscapeToUpdate->UpdateGrass(arr, true); +} diff --git a/Source/lidarforest/Private/MyActor.cpp b/Source/lidarforest/Private/MyActor.cpp new file mode 100644 index 0000000..30478b6 --- /dev/null +++ b/Source/lidarforest/Private/MyActor.cpp @@ -0,0 +1,27 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "MyActor.h" + +// Sets default values +AMyActor::AMyActor() +{ + // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. + PrimaryActorTick.bCanEverTick = true; + +} + +// Called when the game starts or when spawned +void AMyActor::BeginPlay() +{ + Super::BeginPlay(); + +} + +// Called every frame +void AMyActor::Tick(float DeltaTime) +{ + Super::Tick(DeltaTime); + +} + diff --git a/Source/lidarforest/Public/LFLandscapeGrassHack.h b/Source/lidarforest/Public/LFLandscapeGrassHack.h new file mode 100644 index 0000000..a9d6ddf --- /dev/null +++ b/Source/lidarforest/Public/LFLandscapeGrassHack.h @@ -0,0 +1,31 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "LandscapeProxy.h" +#include "GameFramework/Actor.h" +#include "LFLandscapeGrassHack.generated.h" + +UCLASS() +class LIDARFOREST_API ALFLandscapeGrassHack : public AActor +{ + GENERATED_BODY() + +public: + // Sets default values for this actor's properties + ALFLandscapeGrassHack(); + + UPROPERTY() + USceneComponent* Root; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + ALandscapeProxy* Landscape; + +protected: + // Called when the game starts or when spawned + virtual void BeginPlay() override; + + void UpdateGrass(ALandscapeProxy* LandscapeToUpdate); + +}; diff --git a/Source/lidarforest/Public/MyActor.h b/Source/lidarforest/Public/MyActor.h new file mode 100644 index 0000000..03dfcd7 --- /dev/null +++ b/Source/lidarforest/Public/MyActor.h @@ -0,0 +1,26 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/Actor.h" +#include "MyActor.generated.h" + +UCLASS() +class LIDARFOREST_API AMyActor : public AActor +{ + GENERATED_BODY() + +public: + // Sets default values for this actor's properties + AMyActor(); + +protected: + // Called when the game starts or when spawned + virtual void BeginPlay() override; + +public: + // Called every frame + virtual void Tick(float DeltaTime) override; + +}; diff --git a/Source/lidarforest/lidarforest.Build.cs b/Source/lidarforest/lidarforest.Build.cs index 4380768..a56bf80 100644 --- a/Source/lidarforest/lidarforest.Build.cs +++ b/Source/lidarforest/lidarforest.Build.cs @@ -8,7 +8,8 @@ public class lidarforest : ModuleRules { PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; - PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "ForestImporter"}); + PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", + "Landscape"}); PrivateDependencyModuleNames.AddRange(new string[] { }); diff --git a/Source/lidarforest/lidarforest.cpp b/Source/lidarforest/lidarforest.cpp index 7689cc8..b2cb29f 100644 --- a/Source/lidarforest/lidarforest.cpp +++ b/Source/lidarforest/lidarforest.cpp @@ -4,3 +4,4 @@ #include "Modules/ModuleManager.h" IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, lidarforest, "lidarforest" ); +