From 398508edc825d06e7fda970c734fb7a7c4238421 Mon Sep 17 00:00:00 2001 From: tad Date: Tue, 26 Sep 2023 21:44:26 +0900 Subject: [PATCH 1/2] RRROS2ActorsRvizMarkerPublisher rem actor from Actors upon destroyed --- .../Tools/RRROS2ActorsRvizMarkerPublisher.cpp | 23 ++++++++++++++++++- .../Public/Core/RRROS2GameMode.h | 20 ++++++++-------- .../Tools/RRROS2ActorsRvizMarkerPublisher.h | 11 +++++++++ 3 files changed, 43 insertions(+), 11 deletions(-) diff --git a/Source/RapyutaSimulationPlugins/Private/Tools/RRROS2ActorsRvizMarkerPublisher.cpp b/Source/RapyutaSimulationPlugins/Private/Tools/RRROS2ActorsRvizMarkerPublisher.cpp index d21163f1..b5990f80 100644 --- a/Source/RapyutaSimulationPlugins/Private/Tools/RRROS2ActorsRvizMarkerPublisher.cpp +++ b/Source/RapyutaSimulationPlugins/Private/Tools/RRROS2ActorsRvizMarkerPublisher.cpp @@ -15,6 +15,20 @@ URRROS2ActorsRvizMarkerPublisher::URRROS2ActorsRvizMarkerPublisher() SetDefaultDelegates(); //use UpdateMessage as update delegate } +void URRROS2ActorsRvizMarkerPublisher::AddTargetActor(AActor* InActor) +{ + if (false == Actors.Contains(InActor)) + { + InActor->OnDestroyed.AddDynamic(this, &URRROS2ActorsRvizMarkerPublisher::OnTargetActorDestroyed); + Actors.Add(InActor); + } +} + +void URRROS2ActorsRvizMarkerPublisher::OnTargetActorDestroyed(AActor* InActor) +{ + Actors.RemoveSwap(InActor); +} + void URRROS2ActorsRvizMarkerPublisher::UpdateMessage(UROS2GenericMsg* InMessage) { if (bUpdateActorsList) @@ -26,6 +40,10 @@ void URRROS2ActorsRvizMarkerPublisher::UpdateMessage(UROS2GenericMsg* InMessage) BaseMarker.Header.Stamp = URRConversionUtils::FloatToROSStamp(UGameplayStatics::GetTimeSeconds(GetWorld())); for (AActor* actor : Actors) { + if (!IsValid(actor)) + { + continue; + } FROSMarker marker = BaseMarker; FTransform tf = URRConversionUtils::TransformUEToROS(URRGeneralUtils::GetRelativeTransform(ReferenceActor, actor->GetTransform())); @@ -35,5 +53,8 @@ void URRROS2ActorsRvizMarkerPublisher::UpdateMessage(UROS2GenericMsg* InMessage) msg.Markers.Add(marker); } - CastChecked(InMessage)->SetMsg(msg); + if (msg.Markers.Num() > 0) + { + CastChecked(InMessage)->SetMsg(msg); + } } diff --git a/Source/RapyutaSimulationPlugins/Public/Core/RRROS2GameMode.h b/Source/RapyutaSimulationPlugins/Public/Core/RRROS2GameMode.h index 5be31530..4ae0acf0 100755 --- a/Source/RapyutaSimulationPlugins/Public/Core/RRROS2GameMode.h +++ b/Source/RapyutaSimulationPlugins/Public/Core/RRROS2GameMode.h @@ -108,6 +108,16 @@ class RAPYUTASIMULATIONPLUGINS_API ARRROS2GameMode : public AGameMode return NativeSpawnableClassPaths.FindRef(InEntityModelName); } + //! Blueprint class names (also used as their entity model names) to be registered as spawnable entity types + //! Eg: {"BP_TurtlebotBurger", "BP_TurtlebotBurgerVehicle"} + UPROPERTY(config) + TArray BPSpawnableClassNames; + + //! Asset paths of classes to be registered as spawnable entity types + //! Eg: {{"TurtlebotBurger", "/Script/RapyutaSimulationPlugins.TurtlebotBurger"]} + UPROPERTY(config) + TMap NativeSpawnableClassPaths; + protected: /** * @brief Initialize Game. @@ -131,16 +141,6 @@ class RAPYUTASIMULATIONPLUGINS_API ARRROS2GameMode : public AGameMode */ virtual void StartPlay() override; - //! Blueprint class names (also used as their entity model names) to be registered as spawnable entity types - //! Eg: {"BP_TurtlebotBurger", "BP_TurtlebotBurgerVehicle"} - UPROPERTY(config) - TArray BPSpawnableClassNames; - - //! Asset paths of classes to be registered as spawnable entity types - //! Eg: {{"TurtlebotBurger", "/Script/RapyutaSimulationPlugins.TurtlebotBurger"]} - UPROPERTY(config) - TMap NativeSpawnableClassPaths; - private: /** * @brief Create and initialize #MainROS2Node, #ClockPublisher and #MainSimState. diff --git a/Source/RapyutaSimulationPlugins/Public/Tools/RRROS2ActorsRvizMarkerPublisher.h b/Source/RapyutaSimulationPlugins/Public/Tools/RRROS2ActorsRvizMarkerPublisher.h index 9d129e14..37ae324d 100644 --- a/Source/RapyutaSimulationPlugins/Public/Tools/RRROS2ActorsRvizMarkerPublisher.h +++ b/Source/RapyutaSimulationPlugins/Public/Tools/RRROS2ActorsRvizMarkerPublisher.h @@ -56,5 +56,16 @@ class RAPYUTASIMULATIONPLUGINS_API URRROS2ActorsRvizMarkerPublisher : public URO UPROPERTY(EditAnywhere, BlueprintReadWrite) FROSMarker BaseMarker; + /** + * @brief Add a target actor to #Actors + */ + void AddTargetActor(AActor* InActor); + + /** + * @brief Callback upon a target actor in #Actors gets destroyed + */ + UFUNCTION() + void OnTargetActorDestroyed(AActor* InActor); + void UpdateMessage(UROS2GenericMsg* InMessage) override; }; From 5811a0c6e3a8af38f57a6af36ad285c454217377 Mon Sep 17 00:00:00 2001 From: tad Date: Tue, 26 Sep 2023 21:44:26 +0900 Subject: [PATCH 2/2] RRROS2ActorsRvizMarkerPublisher rem actor from Actors upon destroyed --- .../Tools/RRROS2ActorsRvizMarkerPublisher.cpp | 23 ++++++++++++++++++- .../Public/Core/RRROS2GameMode.h | 20 ++++++++-------- .../Tools/RRROS2ActorsRvizMarkerPublisher.h | 11 +++++++++ 3 files changed, 43 insertions(+), 11 deletions(-) diff --git a/Source/RapyutaSimulationPlugins/Private/Tools/RRROS2ActorsRvizMarkerPublisher.cpp b/Source/RapyutaSimulationPlugins/Private/Tools/RRROS2ActorsRvizMarkerPublisher.cpp index d21163f1..b5990f80 100644 --- a/Source/RapyutaSimulationPlugins/Private/Tools/RRROS2ActorsRvizMarkerPublisher.cpp +++ b/Source/RapyutaSimulationPlugins/Private/Tools/RRROS2ActorsRvizMarkerPublisher.cpp @@ -15,6 +15,20 @@ URRROS2ActorsRvizMarkerPublisher::URRROS2ActorsRvizMarkerPublisher() SetDefaultDelegates(); //use UpdateMessage as update delegate } +void URRROS2ActorsRvizMarkerPublisher::AddTargetActor(AActor* InActor) +{ + if (false == Actors.Contains(InActor)) + { + InActor->OnDestroyed.AddDynamic(this, &URRROS2ActorsRvizMarkerPublisher::OnTargetActorDestroyed); + Actors.Add(InActor); + } +} + +void URRROS2ActorsRvizMarkerPublisher::OnTargetActorDestroyed(AActor* InActor) +{ + Actors.RemoveSwap(InActor); +} + void URRROS2ActorsRvizMarkerPublisher::UpdateMessage(UROS2GenericMsg* InMessage) { if (bUpdateActorsList) @@ -26,6 +40,10 @@ void URRROS2ActorsRvizMarkerPublisher::UpdateMessage(UROS2GenericMsg* InMessage) BaseMarker.Header.Stamp = URRConversionUtils::FloatToROSStamp(UGameplayStatics::GetTimeSeconds(GetWorld())); for (AActor* actor : Actors) { + if (!IsValid(actor)) + { + continue; + } FROSMarker marker = BaseMarker; FTransform tf = URRConversionUtils::TransformUEToROS(URRGeneralUtils::GetRelativeTransform(ReferenceActor, actor->GetTransform())); @@ -35,5 +53,8 @@ void URRROS2ActorsRvizMarkerPublisher::UpdateMessage(UROS2GenericMsg* InMessage) msg.Markers.Add(marker); } - CastChecked(InMessage)->SetMsg(msg); + if (msg.Markers.Num() > 0) + { + CastChecked(InMessage)->SetMsg(msg); + } } diff --git a/Source/RapyutaSimulationPlugins/Public/Core/RRROS2GameMode.h b/Source/RapyutaSimulationPlugins/Public/Core/RRROS2GameMode.h index 5be31530..4ae0acf0 100755 --- a/Source/RapyutaSimulationPlugins/Public/Core/RRROS2GameMode.h +++ b/Source/RapyutaSimulationPlugins/Public/Core/RRROS2GameMode.h @@ -108,6 +108,16 @@ class RAPYUTASIMULATIONPLUGINS_API ARRROS2GameMode : public AGameMode return NativeSpawnableClassPaths.FindRef(InEntityModelName); } + //! Blueprint class names (also used as their entity model names) to be registered as spawnable entity types + //! Eg: {"BP_TurtlebotBurger", "BP_TurtlebotBurgerVehicle"} + UPROPERTY(config) + TArray BPSpawnableClassNames; + + //! Asset paths of classes to be registered as spawnable entity types + //! Eg: {{"TurtlebotBurger", "/Script/RapyutaSimulationPlugins.TurtlebotBurger"]} + UPROPERTY(config) + TMap NativeSpawnableClassPaths; + protected: /** * @brief Initialize Game. @@ -131,16 +141,6 @@ class RAPYUTASIMULATIONPLUGINS_API ARRROS2GameMode : public AGameMode */ virtual void StartPlay() override; - //! Blueprint class names (also used as their entity model names) to be registered as spawnable entity types - //! Eg: {"BP_TurtlebotBurger", "BP_TurtlebotBurgerVehicle"} - UPROPERTY(config) - TArray BPSpawnableClassNames; - - //! Asset paths of classes to be registered as spawnable entity types - //! Eg: {{"TurtlebotBurger", "/Script/RapyutaSimulationPlugins.TurtlebotBurger"]} - UPROPERTY(config) - TMap NativeSpawnableClassPaths; - private: /** * @brief Create and initialize #MainROS2Node, #ClockPublisher and #MainSimState. diff --git a/Source/RapyutaSimulationPlugins/Public/Tools/RRROS2ActorsRvizMarkerPublisher.h b/Source/RapyutaSimulationPlugins/Public/Tools/RRROS2ActorsRvizMarkerPublisher.h index 9d129e14..37ae324d 100644 --- a/Source/RapyutaSimulationPlugins/Public/Tools/RRROS2ActorsRvizMarkerPublisher.h +++ b/Source/RapyutaSimulationPlugins/Public/Tools/RRROS2ActorsRvizMarkerPublisher.h @@ -56,5 +56,16 @@ class RAPYUTASIMULATIONPLUGINS_API URRROS2ActorsRvizMarkerPublisher : public URO UPROPERTY(EditAnywhere, BlueprintReadWrite) FROSMarker BaseMarker; + /** + * @brief Add a target actor to #Actors + */ + void AddTargetActor(AActor* InActor); + + /** + * @brief Callback upon a target actor in #Actors gets destroyed + */ + UFUNCTION() + void OnTargetActorDestroyed(AActor* InActor); + void UpdateMessage(UROS2GenericMsg* InMessage) override; };