Overte C++ Documentation
ApplicationMeshProvider.h
1 //
2 // ApplicationMeshProvider.h
3 // interface/src
4 //
5 // Split from Application.cpp by HifiExperiments on 3/30/24
6 // Created by Andrzej Kapolka on 5/10/13.
7 // Copyright 2013 High Fidelity, Inc.
8 // Copyright 2020 Vircadia contributors.
9 // Copyright 2022-2023 Overte e.V.
10 //
11 // Distributed under the Apache License, Version 2.0.
12 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
13 // SPDX-License-Identifier: Apache-2.0
14 //
15 
16 #ifndef hifi_ApplicationMeshProvider_h
17 #define hifi_ApplicationMeshProvider_h
18 
19 #include <graphics/Forward.h>
20 
21 class ApplicationMeshProvider : public scriptable::ModelProviderFactory {
22 public:
23  virtual scriptable::ModelProviderPointer lookupModelProvider(const QUuid& uuid) override {
24  bool success;
25  if (auto nestable = DependencyManager::get<SpatialParentFinder>()->find(uuid, success).lock()) {
26  auto type = nestable->getNestableType();
27 #ifdef SCRIPTABLE_MESH_DEBUG
28  qCDebug(interfaceapp) << "ApplicationMeshProvider::lookupModelProvider" << uuid << SpatiallyNestable::nestableTypeToString(type);
29 #endif
30  switch (type) {
31  case NestableType::Entity:
32  return getEntityModelProvider(static_cast<EntityItemID>(uuid));
33  case NestableType::Avatar:
34  return getAvatarModelProvider(uuid);
35  }
36  }
37  return nullptr;
38  }
39 
40 private:
41  scriptable::ModelProviderPointer getEntityModelProvider(EntityItemID entityID) {
42  scriptable::ModelProviderPointer provider;
43  auto entityTreeRenderer = qApp->getEntities();
44  auto entityTree = entityTreeRenderer->getTree();
45  if (auto entity = entityTree->findEntityByID(entityID)) {
46  if (auto renderer = entityTreeRenderer->renderableForEntityId(entityID)) {
47  provider = std::dynamic_pointer_cast<scriptable::ModelProvider>(renderer);
48  provider->modelProviderType = NestableType::Entity;
49  } else {
50  qCWarning(interfaceapp) << "no renderer for entity ID" << entityID.toString();
51  }
52  }
53  return provider;
54  }
55 
56  scriptable::ModelProviderPointer getAvatarModelProvider(QUuid sessionUUID) {
57  scriptable::ModelProviderPointer provider;
58  auto avatarManager = DependencyManager::get<AvatarManager>();
59  if (auto avatar = avatarManager->getAvatarBySessionID(sessionUUID)) {
60  provider = std::dynamic_pointer_cast<scriptable::ModelProvider>(avatar);
61  provider->modelProviderType = NestableType::Avatar;
62  }
63  return provider;
64  }
65 };
66 
67 #endif // hifi_ApplicationMeshProvider_h
Abstract ID for editing model items. Used in EntityItem JS API.
Definition: EntityItemID.h:28