From f9b7578d6c84dbc60e54211441f84375d698017c Mon Sep 17 00:00:00 2001 From: nsubiron Date: Sat, 28 Jul 2018 13:04:59 +0200 Subject: [PATCH] Allow destroying actors from Python --- LibCarla/source/carla/client/Actor.cpp | 18 ++++++++++++++++++ LibCarla/source/carla/client/Actor.h | 2 ++ LibCarla/source/carla/client/Client.cpp | 4 ++++ LibCarla/source/carla/client/Client.h | 2 ++ PythonAPI/source/libcarla/Actor.cpp | 1 + .../Source/Carla/Server/TheNewCarlaServer.cpp | 9 +++++++++ 6 files changed, 36 insertions(+) create mode 100644 LibCarla/source/carla/client/Actor.cpp diff --git a/LibCarla/source/carla/client/Actor.cpp b/LibCarla/source/carla/client/Actor.cpp new file mode 100644 index 000000000..7ad70ccca --- /dev/null +++ b/LibCarla/source/carla/client/Actor.cpp @@ -0,0 +1,18 @@ +// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma +// de Barcelona (UAB). +// +// This work is licensed under the terms of the MIT license. +// For a copy, see . + +#include "carla/client/Actor.h" +#include "carla/client/Client.h" + +namespace carla { +namespace client { + + void Actor::Destroy() { + GetWorld()->GetClient().DestroyActor(*this); + } + +} // namespace client +} // namespace carla diff --git a/LibCarla/source/carla/client/Actor.h b/LibCarla/source/carla/client/Actor.h index c7c641b1e..6216eae92 100644 --- a/LibCarla/source/carla/client/Actor.h +++ b/LibCarla/source/carla/client/Actor.h @@ -43,6 +43,8 @@ namespace client { return _actor; } + void Destroy(); + protected: Actor(carla::rpc::Actor actor, SharedPtr world) diff --git a/LibCarla/source/carla/client/Client.cpp b/LibCarla/source/carla/client/Client.cpp index 93c11d61b..43eb5c1c5 100644 --- a/LibCarla/source/carla/client/Client.cpp +++ b/LibCarla/source/carla/client/Client.cpp @@ -35,6 +35,10 @@ namespace client { return SharedPtr(new Vehicle{actor, GetWorld()}); } + void Client::DestroyActor(Actor &actor) { + _client.call("destroy_actor", actor.Serialize()); + } + void Client::ApplyControlToActor( const Actor &actor, const VehicleControl &control) { diff --git a/LibCarla/source/carla/client/Client.h b/LibCarla/source/carla/client/Client.h index 9ecca995a..c1446ddc7 100644 --- a/LibCarla/source/carla/client/Client.h +++ b/LibCarla/source/carla/client/Client.h @@ -76,6 +76,8 @@ namespace client { const Transform &transform, Actor *parent = nullptr); + void DestroyActor(Actor &actor); + void ApplyControlToActor( const Actor &actor, const VehicleControl &control); diff --git a/PythonAPI/source/libcarla/Actor.cpp b/PythonAPI/source/libcarla/Actor.cpp index 5821bb2e1..a3f75c776 100644 --- a/PythonAPI/source/libcarla/Actor.cpp +++ b/PythonAPI/source/libcarla/Actor.cpp @@ -79,6 +79,7 @@ void export_actor() { return self.GetTypeId(); }) .def("get_world", &cc::Actor::GetWorld) + .def("destroy", &cc::Actor::Destroy) .def(self_ns::str(self_ns::self)) ; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/TheNewCarlaServer.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/TheNewCarlaServer.cpp index 35d7b7bcf..d3c94f1e2 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/TheNewCarlaServer.cpp +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/TheNewCarlaServer.cpp @@ -185,6 +185,15 @@ void FTheNewCarlaServer::FPimpl::BindActions() return SerializeActor(ActorView); }); + Server.BindSync("destroy_actor", [this](cr::Actor Actor) { + RequireEpisode(); + auto ActorView = Episode->GetActorRegistry().Find(Actor.id); + if (!ActorView.IsValid() || ActorView.GetActor()->IsPendingKill()) { + RespondErrorStr("unable to destroy actor: actor not found"); + } + Episode->DestroyActor(ActorView.GetActor()); + }); + Server.BindSync("attach_actors", [this](cr::Actor Child, cr::Actor Parent) { RequireEpisode(); auto &Registry = Episode->GetActorRegistry();