Agrarsense
Public Member Functions | Public Attributes | Private Attributes | List of all members
AInstancedActor Class Reference

#include <InstancedActor.h>

Inheritance diagram for AInstancedActor:
Inheritance graph
[legend]
Collaboration diagram for AInstancedActor:
Collaboration graph
[legend]

Public Member Functions

 AInstancedActor (const FObjectInitializer &ObjectInitializer)
 
virtual void BeginPlay () override
 
virtual void EndPlay (const EEndPlayReason::Type EndPlayReason) override
 
bool AddToInstancedRendering ()
 
void InstanceAdded ()
 
void SetTypeAndModel (const FString &Type, const FString &Model)
 
bool IsTreeActor () const
 
void UpdatePreviousTransform (const FTransform &NewTransform)
 
bool IsAddedToInstancedRendering () const
 
UStaticMeshComponent * GetStaticMeshComponent () const
 
int32 GetInstanceStartCullDistance () const
 
int32 GetInstanceEndCullDistance () const
 
bool UpdateTransformAutomatically () const
 
FString GetTypeIDString () const
 
FString GetModelIDString () const
 
bool HasAlternativeMaterial () const
 
bool IsCustomDepthSetup () const
 
bool GetAllowWorldPositionOffsetDisable () const
 
FTransform GetPreviousTransform () const
 
virtual FText GetInteractableName_Implementation () const override
 
virtual FTransform GetInteractableWorldTransform_Implementation () const override
 
virtual FString GetActorID_Implementation () const override
 
virtual FString GetActorName_Implementation () const override
 
virtual void SetActorName_Implementation (const FString &NewActorName) override
 
virtual void SetActorIDAndName_Implementation (const FString &NewActorName, const FString &NewID) override
 
- Public Member Functions inherited from IInteractable
FText GetInteractableName () const
 
FTransform GetInteractableWorldTransform () const
 
- Public Member Functions inherited from IActorInformation
FString GetActorID () const
 
FString GetActorName () const
 
FString GetActorInformation () const
 
void SetActorName (const FString &NewActorName)
 
void SetActorIDAndName (const FString &NewActorName, const FString &NewID)
 

Public Attributes

UStaticMeshComponent * StaticMeshComponent = nullptr
 
bool AllowWorldPositionOffsetDisable = false
 
bool AddToInstancedRenderer = true
 
int InstanceStartCullDistanceInCm = 45000
 
int InstanceEndCullDistanceInCm = 46500
 
bool ShouldUpdateTransformAutomatically = false
 
bool AlternativeMaterial = false
 
FText InteractableName
 

Private Attributes

FString ActorName
 
FString ActorID
 
FTransform PreviousTransform
 
bool AddedToInstancedRenderer = false
 
FString TypeID = "none"
 
FString ModelID = "none"
 
bool CustomDepthSetup = false
 

Additional Inherited Members

- Static Public Member Functions inherited from IActorInformation
static void SetAndValidateActorIDAndName (FString &ActorName, FString &ActorID, TWeakObjectPtr< AActor > Actor)
 
static bool DestroyActorByID (const FString &ID)
 
static AActor * GetActorByID (const FString &ID)
 
template<typename T >
static TArray< T * > GetActorsWithInterface ()
 
static void PrintAllIds ()
 

Detailed Description

Instanced Actor class for efficient rendering of identical Actors using instancing.

The corresponding InstancedActorRenderer Actor handles rendering of all Actors of this type using a single UInstancedStaticMeshComponent.

Usage:

  1. Create a Blueprint based on this Actor class in the Unreal Editor.
  2. In the Blueprint, assign the desired Static Mesh to the StaticMeshComponent.
  3. Place multiple instances of the Blueprint in the world as needed.

For optimal loading times:

Definition at line 39 of file InstancedActor.h.

Constructor & Destructor Documentation

◆ AInstancedActor()

AInstancedActor::AInstancedActor ( const FObjectInitializer &  ObjectInitializer)

Definition at line 14 of file InstancedActor.cpp.

14 : Super(ObjectInitializer)
15{
16 StaticMeshComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMeshComponent"));
17 RootComponent = StaticMeshComponent;
18 PrimaryActorTick.bCanEverTick = false;
19 InteractableName = NSLOCTEXT("Agrarsense", "StaticInstancedActorInteractableName", "Prop");
20}
UStaticMeshComponent * StaticMeshComponent

References InteractableName, and StaticMeshComponent.

Member Function Documentation

◆ AddToInstancedRendering()

bool AInstancedActor::AddToInstancedRendering ( )

Add this InstancedActor to Instanced rendering if it wasn't already added.

Returns
True if the InstancedActor was successfully added to Instanced rendering.

Definition at line 52 of file InstancedActor.cpp.

53{
55 {
56 return false;
57 }
58
60 if (InstancedRenderer)
61 {
62 return InstancedRenderer->AddActorToInstancedRendering(this);
63 }
64
65 return false;
66}
bool AddedToInstancedRenderer
bool ShouldUpdateTransformAutomatically
bool AddActorToInstancedRendering(AInstancedActor *InstancedActor)
static AInstancedRendererManager * GetInstancedRenderer(const UObject *WorldContextObject)

References AInstancedRendererManager::AddActorToInstancedRendering(), AddedToInstancedRenderer, AddToInstancedRenderer, UAgrarsenseStatics::GetInstancedRenderer(), and ShouldUpdateTransformAutomatically.

Referenced by BeginPlay().

◆ BeginPlay()

void AInstancedActor::BeginPlay ( )
overridevirtual

Definition at line 22 of file InstancedActor.cpp.

23{
24 Super::BeginPlay();
25
27 {
28 // Check if Custom Depth has been setup in Editor, if not Tagger.cpp needs to do this runtime.
29 CustomDepthSetup = (StaticMeshComponent->bRenderCustomDepth && StaticMeshComponent->CustomDepthStencilValue == 0) ? true : false;
30 }
31
32 PreviousTransform = GetActorTransform();
33
35}
FTransform PreviousTransform
bool AddToInstancedRendering()

References AddToInstancedRendering(), CustomDepthSetup, PreviousTransform, and StaticMeshComponent.

◆ EndPlay()

void AInstancedActor::EndPlay ( const EEndPlayReason::Type  EndPlayReason)
overridevirtual

Definition at line 37 of file InstancedActor.cpp.

38{
39 Super::EndPlay(EndPlayReason);
40
41 if (EndPlayReason != EEndPlayReason::Type::EndPlayInEditor)
42 {
44 {
45 StaticMeshComponent->UnregisterComponent();
46 StaticMeshComponent->DestroyComponent();
47 StaticMeshComponent = nullptr;
48 }
49 }
50}

References StaticMeshComponent.

◆ GetActorID_Implementation()

virtual FString AInstancedActor::GetActorID_Implementation ( ) const
inlineoverridevirtual

Definition at line 189 of file InstancedActor.h.

190 {
191 return ActorID;
192 }

◆ GetActorName_Implementation()

virtual FString AInstancedActor::GetActorName_Implementation ( ) const
inlineoverridevirtual

Definition at line 194 of file InstancedActor.h.

195 {
196 return ActorName;
197 }

◆ GetAllowWorldPositionOffsetDisable()

bool AInstancedActor::GetAllowWorldPositionOffsetDisable ( ) const
inline

Definition at line 143 of file InstancedActor.h.

144 {
146 }
bool AllowWorldPositionOffsetDisable

Referenced by AInstancedActorRenderer::SetupFromInstancedActor().

◆ GetInstanceEndCullDistance()

int32 AInstancedActor::GetInstanceEndCullDistance ( ) const
inline

Definition at line 110 of file InstancedActor.h.

111 {
113 }
int InstanceEndCullDistanceInCm

Referenced by AInstancedActorRenderer::SetupFromInstancedActor().

◆ GetInstanceStartCullDistance()

int32 AInstancedActor::GetInstanceStartCullDistance ( ) const
inline

Definition at line 104 of file InstancedActor.h.

105 {
107 }
int InstanceStartCullDistanceInCm

Referenced by AInstancedActorRenderer::SetupFromInstancedActor().

◆ GetInteractableName_Implementation()

virtual FText AInstancedActor::GetInteractableName_Implementation ( ) const
inlineoverridevirtual

Definition at line 179 of file InstancedActor.h.

180 {
181 return InteractableName;
182 }

◆ GetInteractableWorldTransform_Implementation()

virtual FTransform AInstancedActor::GetInteractableWorldTransform_Implementation ( ) const
inlineoverridevirtual

Definition at line 184 of file InstancedActor.h.

185 {
186 return GetActorTransform();
187 }

◆ GetModelIDString()

FString AInstancedActor::GetModelIDString ( ) const
inline

Definition at line 128 of file InstancedActor.h.

129 {
130 return ModelID;
131 }

◆ GetPreviousTransform()

FTransform AInstancedActor::GetPreviousTransform ( ) const
inline

Definition at line 148 of file InstancedActor.h.

149 {
150 return PreviousTransform;
151 }

◆ GetStaticMeshComponent()

UStaticMeshComponent * AInstancedActor::GetStaticMeshComponent ( ) const
inline

◆ GetTypeIDString()

FString AInstancedActor::GetTypeIDString ( ) const
inline

Definition at line 122 of file InstancedActor.h.

123 {
124 return TypeID;
125 }

◆ HasAlternativeMaterial()

bool AInstancedActor::HasAlternativeMaterial ( ) const
inline

Definition at line 133 of file InstancedActor.h.

134 {
135 return AlternativeMaterial;
136 }

◆ InstanceAdded()

void AInstancedActor::InstanceAdded ( )

Definition at line 68 of file InstancedActor.cpp.

69{
71 {
72 StaticMeshComponent->SetVisibility(false);
73 StaticMeshComponent->SetComponentTickEnabled(false);
75 }
76}

References AddedToInstancedRenderer, and StaticMeshComponent.

Referenced by AInstancedRendererManager::AddActorToInstancedRendering(), and AInstancedActorRenderer::SetupFromInstancedActor().

◆ IsAddedToInstancedRendering()

bool AInstancedActor::IsAddedToInstancedRendering ( ) const
inline

Check if this InstancedActor is already added to Instanced rendering.

Returns
True if the InstancedActor is added to Instanced rendering. false otherwise.

Definition at line 92 of file InstancedActor.h.

93 {
95 }

◆ IsCustomDepthSetup()

bool AInstancedActor::IsCustomDepthSetup ( ) const
inline

Definition at line 138 of file InstancedActor.h.

139 {
140 return CustomDepthSetup;
141 }

Referenced by ATagger::TagActor().

◆ IsTreeActor()

bool AInstancedActor::IsTreeActor ( ) const

Definition at line 78 of file InstancedActor.cpp.

79{
81 {
82 UStaticMesh* Mesh = StaticMeshComponent->GetStaticMesh();
83 if (Mesh)
84 {
85 FString Path = Mesh->GetPathName();
86 if (Path.Contains("Tree"))
87 {
88 return true;
89 }
90 }
91 }
92
93 return false;
94}

References StaticMeshComponent.

Referenced by AInstancedActorRenderer::SetupFromInstancedActor().

◆ SetActorIDAndName_Implementation()

virtual void AInstancedActor::SetActorIDAndName_Implementation ( const FString &  NewActorName,
const FString &  NewID 
)
inlineoverridevirtual

Definition at line 204 of file InstancedActor.h.

205 {
206 ActorName = NewActorName;
207 ActorID = NewID;
208 SetAndValidateActorIDAndName(ActorName, ActorID, TWeakObjectPtr<AActor>(this));
209 }
static void SetAndValidateActorIDAndName(FString &ActorName, FString &ActorID, TWeakObjectPtr< AActor > Actor)

◆ SetActorName_Implementation()

virtual void AInstancedActor::SetActorName_Implementation ( const FString &  NewActorName)
inlineoverridevirtual

Definition at line 199 of file InstancedActor.h.

200 {
201 ActorName = NewActorName;
202 }

◆ SetTypeAndModel()

void AInstancedActor::SetTypeAndModel ( const FString &  Type,
const FString &  Model 
)
inline

Set Type and Model strings for this InstancedActor This is used when exporting InstancedActor(s) into JSON files

Definition at line 66 of file InstancedActor.h.

67 {
68 TypeID = Type;
69 ModelID = Model;
70 }

Referenced by UAssetLibrary::SpawnFoliage(), and UAssetLibrary::SpawnProp().

◆ UpdatePreviousTransform()

void AInstancedActor::UpdatePreviousTransform ( const FTransform &  NewTransform)
inline

Updates the 'PreviousTransform' member variable with a new transform.

Parameters
NewTransformThe new transform to be assigned to 'PreviousTransform'.

Definition at line 82 of file InstancedActor.h.

83 {
84 PreviousTransform = NewTransform;
85 }

◆ UpdateTransformAutomatically()

bool AInstancedActor::UpdateTransformAutomatically ( ) const
inline

Member Data Documentation

◆ ActorID

FString AInstancedActor::ActorID
private

Definition at line 217 of file InstancedActor.h.

◆ ActorName

FString AInstancedActor::ActorName
private

Definition at line 214 of file InstancedActor.h.

◆ AddedToInstancedRenderer

bool AInstancedActor::AddedToInstancedRenderer = false
private

Definition at line 221 of file InstancedActor.h.

Referenced by AddToInstancedRendering(), and InstanceAdded().

◆ AddToInstancedRenderer

bool AInstancedActor::AddToInstancedRenderer = true

◆ AllowWorldPositionOffsetDisable

bool AInstancedActor::AllowWorldPositionOffsetDisable = false

Definition at line 157 of file InstancedActor.h.

◆ AlternativeMaterial

bool AInstancedActor::AlternativeMaterial = false

◆ CustomDepthSetup

bool AInstancedActor::CustomDepthSetup = false
private

Definition at line 227 of file InstancedActor.h.

Referenced by BeginPlay().

◆ InstanceEndCullDistanceInCm

int AInstancedActor::InstanceEndCullDistanceInCm = 46500

Definition at line 166 of file InstancedActor.h.

◆ InstanceStartCullDistanceInCm

int AInstancedActor::InstanceStartCullDistanceInCm = 45000

Definition at line 163 of file InstancedActor.h.

◆ InteractableName

FText AInstancedActor::InteractableName

Definition at line 177 of file InstancedActor.h.

Referenced by AInstancedActor().

◆ ModelID

FString AInstancedActor::ModelID = "none"
private

Definition at line 225 of file InstancedActor.h.

◆ PreviousTransform

FTransform AInstancedActor::PreviousTransform
private

Definition at line 219 of file InstancedActor.h.

Referenced by BeginPlay().

◆ ShouldUpdateTransformAutomatically

bool AInstancedActor::ShouldUpdateTransformAutomatically = false

Definition at line 170 of file InstancedActor.h.

Referenced by AddToInstancedRendering().

◆ StaticMeshComponent

UStaticMeshComponent* AInstancedActor::StaticMeshComponent = nullptr

Definition at line 154 of file InstancedActor.h.

Referenced by AInstancedActor(), BeginPlay(), EndPlay(), InstanceAdded(), and IsTreeActor().

◆ TypeID

FString AInstancedActor::TypeID = "none"
private

Definition at line 223 of file InstancedActor.h.


The documentation for this class was generated from the following files: