so this is inside a function.
HC_EditorLogic_OPE.h
UFUNCTION(BlueprintPure)
double value_LocationX();
HC_EditorLogic_OPE.cpp
double AHC_EditorLogic_OPE::value_LocationX()
{
if (!inputLocationX_Override) {
return inputLocationX;
}
else {
if (inputLocationX_Override->IsA(AHC_EditorLogic_VectorData::StaticClass())) {
TArray<double> functionArray = inputLocationX_Override->value_VectorValue();
if (!functionArray[0]) {
return 0;
}
else {
return functionArray[0];
}
}
return inputLocationX_Override->value_FloatValue();
}
}
full header file
#pragma once
#include "CoreMinimal.h"
#include "EditorLogic/HC_EditorLogic_Event_Base.h"
#include "HC_EditorLogic_Data_Base.h"
#include "EditorObject/HC_LevelEditorObject_Base.h"
#include "HC_EditorLogic_OPE.generated.h"
/**
*
*/
UCLASS()
class HC_LEVELEDITOR_API AHC_EditorLogic_OPE : public AHC_EditorLogic_Event_Base
{
GENERATED_BODY()
public:
/*
* Modify Location
*/
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Position")
bool bModifyLocation = true;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Position")
class AHC_EditorLogic_Data_Base* modifyLocation_Override;
UFUNCTION(BlueprintPure)
bool value_ModifyLocation();
/*
* Local Location (Position)
*/
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Position")
bool bLocalLocation = true;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Position")
class AHC_EditorLogic_Data_Base* localLocation_Override;
UFUNCTION(BlueprintPure)
bool value_LocalLocation();
/*
* Location inputs, Override and Output function
*/
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Position")
double inputLocationX = 0;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Position")
double inputLocationY = 0;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Position")
double inputLocationZ = 0;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Position")
class AHC_EditorLogic_Data_Base* inputLocationX_Override;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Position")
class AHC_EditorLogic_Data_Base* inputLocationY_Override;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Position")
class AHC_EditorLogic_Data_Base* inputLocationZ_Override;
UFUNCTION(BlueprintPure)
double value_LocationX();
UFUNCTION(BlueprintPure)
double value_LocationY();
UFUNCTION(BlueprintPure)
double value_LocationZ();
/*
* Modify Rotation
*/
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Rotation")
bool bModifyRotation = true;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Rotation")
class AHC_EditorLogic_Data_Base* modifyRotation_Override;
UFUNCTION(BlueprintPure)
bool value_ModifyRotation();
/*
* Local Rotation
*/
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Rotation")
bool bLocalRotation = true;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Rotation")
class AHC_EditorLogic_Data_Base* localRotation_Override;
UFUNCTION(BlueprintPure)
bool value_LocalRotation();
/*
* Rotation inputs, Override and Output function
*/
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Rotation")
double inputRotationX = 0;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Rotation")
double inputRotationY = 0;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Rotation")
double inputRotationZ = 0;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Rotation")
class AHC_EditorLogic_Data_Base* inputRotationX_Override;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Rotation")
class AHC_EditorLogic_Data_Base* inputRotationY_Override;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Rotation")
class AHC_EditorLogic_Data_Base* inputRotationZ_Override;
UFUNCTION(BlueprintPure)
double value_RotationX();
UFUNCTION(BlueprintPure)
double value_RotationY();
UFUNCTION(BlueprintPure)
double value_RotationZ();
/*
* Array of target objects
*/
UPROPERTY(BlueprintReadWrite, EditAnywhere)
TArray<AHC_LevelEditorObject_Base*> targetObjects;
//Override triggered function
void logicEventTriggered() override;
};
full cpp file
#include "EditorLogic/HC_EditorLogic_OPE.h"
double AHC_EditorLogic_OPE::value_LocationX()
{
if (!inputLocationX_Override) {
return inputLocationX;
}
else {
if (inputLocationX_Override->IsA(AHC_EditorLogic_VectorData::StaticClass())) {
TArray<double> functionArray = inputLocationX_Override->value_VectorValue();
if (!functionArray[0]) {
return 0;
}
else {
return functionArray[0];
}
}
return inputLocationX_Override->value_FloatValue();
}
}
double AHC_EditorLogic_OPE::value_LocationY()
{
if (!inputLocationY_Override) {
return inputLocationY;
}
else {
if (inputLocationY_Override->IsA()) {
TArray<double> functionArray = inputLocationY_Override->value_VectorValue();
if (!functionArray[1]) {
return 0;
}
else {
return functionArray[1];
}
}
return inputLocationY_Override->value_FloatValue();
}
}
double AHC_EditorLogic_OPE::value_LocationZ()
{
if (!inputLocationZ_Override) {
return inputLocationZ;
}
else {
if (inputLocationZ_Override->IsA()) {
TArray<double> functionArray = inputLocationZ_Override->value_VectorValue();
if (!functionArray[2]) {
return 0;
}
else {
return functionArray[2];
}
}
return inputLocationZ_Override->value_FloatValue();
}
}
double AHC_EditorLogic_OPE::value_RotationX()
{
if (!inputRotationX_Override) {
return inputRotationX;
}
else {
if (inputRotationX_Override->IsA()) {
TArray<double> functionArray = inputRotationX_Override->value_VectorValue();
if (!functionArray[0]) {
return 0;
}
else {
return functionArray[0];
}
}
return inputRotationX_Override->value_FloatValue();
}
}
double AHC_EditorLogic_OPE::value_RotationY()
{
if (!inputRotationY_Override) {
return inputRotationY;
}
else {
if (inputRotationY_Override->IsA()) {
TArray<double> functionArray = inputRotationY_Override->value_VectorValue();
if (!functionArray[1]) {
return 0;
}
else {
return functionArray[1];
}
}
return inputRotationY_Override->value_FloatValue();
}
}
double AHC_EditorLogic_OPE::value_RotationZ()
{
if (!inputRotationZ_Override) {
return inputRotationZ;
}
else {
if (inputRotationZ_Override->IsA()) {
TArray<double> functionArray = inputRotationZ_Override->value_VectorValue();
if (!functionArray[2]) {
return 0;
}
else {
return functionArray[2];
}
}
return inputRotationZ_Override->value_FloatValue();
}
}
bool AHC_EditorLogic_OPE::value_ModifyLocation()
{
if (!modifyLocation_Override) {
return bModifyLocation;
}
else {
return bool(modifyLocation_Override->value_FloatValue());
}
}
bool AHC_EditorLogic_OPE::value_LocalLocation()
{
if (!localLocation_Override) {
return bLocalLocation;
}
else {
return bool(localLocation_Override->value_FloatValue());
}
}
bool AHC_EditorLogic_OPE::value_ModifyRotation()
{
if (!modifyRotation_Override) {
return bModifyRotation;
}
else {
return bool(modifyRotation_Override->value_FloatValue());
}
}
bool AHC_EditorLogic_OPE::value_LocalRotation()
{
if (!localRotation_Override) {
return bLocalRotation;
}
else {
return bool(localRotation_Override->value_FloatValue());
}
}
void AHC_EditorLogic_OPE::logicEventTriggered()
{
//Checks if target is valid or if logic state set to false
uint8 len = targetObjects.Num();
if (len == 0 || value_LogicState() == false) {
callPassthrough();
return;
}
//Sets location and rotation for all selected actors
for (int i = 0; i < len; i++) {
if (value_ModifyLocation()) {
if (value_LocalLocation()) {
targetObjects[i]->SetActorLocation(FVector(targetObjects[i]->transform_Default.GetTranslation().X + value_LocationX(),
targetObjects[i]->transform_Default.GetTranslation().Y + value_LocationY(),
targetObjects[i]->transform_Default.GetTranslation().Z + value_LocationZ()));
}
else {
targetObjects[i]->SetActorLocation(FVector(value_LocationX(), value_LocationY(), value_LocationZ()));
}
}
if (value_ModifyRotation()) {
if (value_LocalRotation()) {
targetObjects[i]->SetActorRelativeRotation(FRotator(value_RotationX(), value_RotationY(), value_RotationZ()));
}
else {
targetObjects[i]->SetActorRotation(FRotator(value_RotationX(), value_RotationY(), value_RotationZ()));
}
}
}
//Call passthrough function
callPassthrough();
}