diff --git a/Source/CAVEOverlay/Private/CAVEOverlayController.cpp b/Source/CAVEOverlay/Private/CAVEOverlayController.cpp index 79d45af5453e98477424a3813aac7a6ad6b0dec6..d10d2db2daf8ad5968324dcded16a959d052ddfb 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 dabd850f425014e4fcb3951b3c2e12f7f9d500f2..89679d1aa456a928911b368e77c85fafd2596fd6 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);