Add find function to actor list
This commit is contained in:
parent
91b79687ef
commit
4661c24899
|
@ -78,6 +78,7 @@
|
||||||
|
|
||||||
## `carla.ActorList`
|
## `carla.ActorList`
|
||||||
|
|
||||||
|
- `find(id)`
|
||||||
- `filter(wildcard_pattern)`
|
- `filter(wildcard_pattern)`
|
||||||
- `__getitem__(pos)`
|
- `__getitem__(pos)`
|
||||||
- `__len__()`
|
- `__len__()`
|
||||||
|
|
|
@ -20,12 +20,9 @@ namespace client {
|
||||||
: _episode(std::move(episode)),
|
: _episode(std::move(episode)),
|
||||||
_actors(std::make_move_iterator(actors.begin()), std::make_move_iterator(actors.end())) {}
|
_actors(std::make_move_iterator(actors.begin()), std::make_move_iterator(actors.end())) {}
|
||||||
|
|
||||||
SharedPtr<Actor> ActorList::GetActor(actor_id_type const actor_id) const
|
SharedPtr<Actor> ActorList::Find(actor_id_type const actor_id) const {
|
||||||
{
|
for (auto &actor : _actors) {
|
||||||
for (auto &actor: _actors)
|
if (actor_id == actor.GetId()) {
|
||||||
{
|
|
||||||
if (actor_id == actor.GetId())
|
|
||||||
{
|
|
||||||
return actor.Get(_episode, shared_from_this());
|
return actor.Get(_episode, shared_from_this());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,9 @@ namespace client {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
/// Find an actor by id.
|
||||||
|
SharedPtr<Actor> Find(actor_id_type actor_id) const;
|
||||||
|
|
||||||
/// Filters a list of Actor with type id matching @a wildcard_pattern.
|
/// Filters a list of Actor with type id matching @a wildcard_pattern.
|
||||||
ActorList Filter(const std::string &wildcard_pattern) const;
|
ActorList Filter(const std::string &wildcard_pattern) const;
|
||||||
|
|
||||||
|
@ -54,8 +57,6 @@ namespace client {
|
||||||
return _actors.size();
|
return _actors.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
SharedPtr<Actor> GetActor(actor_id_type const actor_id) const;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
friend class World;
|
friend class World;
|
||||||
|
|
|
@ -16,10 +16,10 @@ namespace detail {
|
||||||
void ActorVariant::MakeActor(EpisodeProxy episode, SharedPtr<const client::ActorList> actor_list) const {
|
void ActorVariant::MakeActor(EpisodeProxy episode, SharedPtr<const client::ActorList> actor_list) const {
|
||||||
auto const parent_id = GetParentId();
|
auto const parent_id = GetParentId();
|
||||||
SharedPtr<client::Actor> parent = nullptr;
|
SharedPtr<client::Actor> parent = nullptr;
|
||||||
if ( (actor_list != nullptr) && (parent_id != 0) )
|
if ((actor_list != nullptr) && (parent_id != 0)) {
|
||||||
{
|
// In case we have an actor list as context, we are able to actually
|
||||||
// in case we have an actor list as context, we are able to actually create the parent actor
|
// create the parent actor.
|
||||||
parent = actor_list->GetActor(parent_id);
|
parent = actor_list->Find(parent_id);
|
||||||
}
|
}
|
||||||
_value = detail::ActorFactory::MakeActor(
|
_value = detail::ActorFactory::MakeActor(
|
||||||
episode,
|
episode,
|
||||||
|
|
|
@ -148,8 +148,8 @@ void export_blueprint() {
|
||||||
class_<cc::BlueprintLibrary, boost::noncopyable, boost::shared_ptr<cc::BlueprintLibrary>>("BlueprintLibrary", no_init)
|
class_<cc::BlueprintLibrary, boost::noncopyable, boost::shared_ptr<cc::BlueprintLibrary>>("BlueprintLibrary", no_init)
|
||||||
.def("find", +[](const cc::BlueprintLibrary &self, const std::string &key) -> cc::ActorBlueprint {
|
.def("find", +[](const cc::BlueprintLibrary &self, const std::string &key) -> cc::ActorBlueprint {
|
||||||
return self.at(key);
|
return self.at(key);
|
||||||
})
|
}, (arg("id")))
|
||||||
.def("filter", &cc::BlueprintLibrary::Filter)
|
.def("filter", &cc::BlueprintLibrary::Filter, (arg("wildcard_pattern")))
|
||||||
.def("__getitem__", +[](const cc::BlueprintLibrary &self, size_t pos) -> cc::ActorBlueprint {
|
.def("__getitem__", +[](const cc::BlueprintLibrary &self, size_t pos) -> cc::ActorBlueprint {
|
||||||
return self.at(pos);
|
return self.at(pos);
|
||||||
})
|
})
|
||||||
|
|
|
@ -64,7 +64,8 @@ void export_world() {
|
||||||
;
|
;
|
||||||
|
|
||||||
class_<cc::ActorList, boost::shared_ptr<cc::ActorList>>("ActorList", no_init)
|
class_<cc::ActorList, boost::shared_ptr<cc::ActorList>>("ActorList", no_init)
|
||||||
.def("filter", &cc::ActorList::Filter)
|
.def("find", &cc::ActorList::Find, (arg("id")))
|
||||||
|
.def("filter", &cc::ActorList::Filter, (arg("wildcard_pattern")))
|
||||||
.def("__getitem__", &cc::ActorList::at)
|
.def("__getitem__", &cc::ActorList::at)
|
||||||
.def("__len__", &cc::ActorList::size)
|
.def("__len__", &cc::ActorList::size)
|
||||||
.def("__iter__", range(&cc::ActorList::begin, &cc::ActorList::end))
|
.def("__iter__", range(&cc::ActorList::begin, &cc::ActorList::end))
|
||||||
|
|
Loading…
Reference in New Issue