From 0ecd655f78046ea7680c1bace8d88b35a2d1e44a Mon Sep 17 00:00:00 2001 From: Sebastian Pape <Sebastian.Pape@rwth-aachen.de> Date: Thu, 1 Aug 2019 17:40:50 +0200 Subject: [PATCH] Moved dynamic material init into post initialize method --- .../Private/CAVEOverlayController.cpp | 41 +++++++++++++------ .../Public/CAVEOverlayController.h | 3 +- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/Source/CAVEOverlay/Private/CAVEOverlayController.cpp b/Source/CAVEOverlay/Private/CAVEOverlayController.cpp index 79d45af..d10d2db 100644 --- a/Source/CAVEOverlay/Private/CAVEOverlayController.cpp +++ b/Source/CAVEOverlay/Private/CAVEOverlayController.cpp @@ -12,10 +12,9 @@ template<std::size_t SIZE> bool containsFString(const std::array<FString, SIZE> return false; } -UStaticMeshComponent* ACAVEOverlayController::createMeshComponent(const FName &name, UMaterialInterface* material, UStaticMesh* mesh, USceneComponent* parent) { +UStaticMeshComponent* ACAVEOverlayController::createMeshComponent(const FName &name, UStaticMesh* mesh, USceneComponent* parent) { UStaticMeshComponent* result = CreateDefaultSubobject<UStaticMeshComponent>(name); result->SetStaticMesh(mesh); - result->SetMaterial(0, material); result->SetupAttachment(parent); result->SetVisibility(false); return result; @@ -56,18 +55,15 @@ ACAVEOverlayController::ACAVEOverlayController() loadAsset("/CAVEOverlay/StopMaterial", sign_material_); loadAsset("/CAVEOverlay/Plane", plane_mesh_); - tape_material_dynamic_ = UMaterialInstanceDynamic::Create(tape_material_, NULL); - sign_material_dynamic_ = UMaterialInstanceDynamic::Create(sign_material_, NULL); + tape_negative_y = createMeshComponent("TapeNegY", plane_mesh_, tape_root); + tape_negative_x = createMeshComponent("TapeNegX", plane_mesh_, tape_root); + tape_positive_y = createMeshComponent("TapePosY", plane_mesh_, tape_root); + tape_positive_x = createMeshComponent("TapePosX", plane_mesh_, tape_root); - tape_negative_y = createMeshComponent("TapeNegY", tape_material_dynamic_, plane_mesh_, tape_root); - tape_negative_x = createMeshComponent("TapeNegX", tape_material_dynamic_, plane_mesh_, tape_root); - tape_positive_y = createMeshComponent("TapePosY", tape_material_dynamic_, plane_mesh_, tape_root); - tape_positive_x = createMeshComponent("TapePosX", tape_material_dynamic_, plane_mesh_, tape_root); - - sign_negative_y = createMeshComponent("SignNegY", sign_material_dynamic_, plane_mesh_, sign_root); - sign_negative_x = createMeshComponent("SignNegX", sign_material_dynamic_, plane_mesh_, sign_root); - sign_positive_y = createMeshComponent("SignPosY", sign_material_dynamic_, plane_mesh_, sign_root); - sign_positive_x = createMeshComponent("SignPosX", sign_material_dynamic_, plane_mesh_, sign_root); + sign_negative_y = createMeshComponent("SignNegY", plane_mesh_, sign_root); + sign_negative_x = createMeshComponent("SignNegX", plane_mesh_, sign_root); + sign_positive_y = createMeshComponent("SignPosY", plane_mesh_, sign_root); + sign_positive_x = createMeshComponent("SignPosX", plane_mesh_, sign_root); //Set initial Position, Rotation and Scale of Tape tape_negative_y->SetRelativeLocationAndRotation(FVector(0, -wall_distance_, 0), FRotator(0, 0, 90)); @@ -92,6 +88,25 @@ ACAVEOverlayController::ACAVEOverlayController() sign_positive_x->SetRelativeScale3D(FVector(0.5f)); } +void ACAVEOverlayController::PostInitializeComponents() +{ + Super::PostInitializeComponents(); + + //Create dynamic materials in runtime + tape_material_dynamic_ = UMaterialInstanceDynamic::Create(tape_material_, tape_root); + sign_material_dynamic_ = UMaterialInstanceDynamic::Create(sign_material_, sign_root); + + tape_negative_y->SetMaterial(0, tape_material_dynamic_); + tape_negative_x->SetMaterial(0, tape_material_dynamic_); + tape_positive_y->SetMaterial(0, tape_material_dynamic_); + tape_positive_x->SetMaterial(0, tape_material_dynamic_); + + sign_negative_y->SetMaterial(0, sign_material_dynamic_); + sign_negative_x->SetMaterial(0, sign_material_dynamic_); + sign_positive_y->SetMaterial(0, sign_material_dynamic_); + sign_positive_x->SetMaterial(0, sign_material_dynamic_); +} + void ACAVEOverlayController::CycleDoorType() { door_current_mode_ = static_cast<DOOR_MODE>((door_current_mode_ + 1) % DOOR_NUM_MODES); diff --git a/Source/CAVEOverlay/Public/CAVEOverlayController.h b/Source/CAVEOverlay/Public/CAVEOverlayController.h index dabd850..89679d1 100644 --- a/Source/CAVEOverlay/Public/CAVEOverlayController.h +++ b/Source/CAVEOverlay/Public/CAVEOverlayController.h @@ -34,6 +34,7 @@ public: protected: // Called when the game starts or when spawned virtual void BeginPlay() override; + virtual void PostInitializeComponents() override; private: //Execution Modes @@ -64,7 +65,7 @@ private: UDoorOverlayData* overlay_; //Geometry and Material - UStaticMeshComponent* createMeshComponent(const FName &name, UMaterialInterface* material, UStaticMesh* mesh, USceneComponent* parent); + UStaticMeshComponent* createMeshComponent(const FName &name, UStaticMesh* mesh, USceneComponent* parent); UMaterial* tape_material_ = nullptr; UMaterial* sign_material_ = nullptr; float calculateOpacityFromPosition(FVector position); -- GitLab