Engine
Frameworkcreatedbymeusableforthecreationofsimplegames.CurrentlysupportsOpenGL(Verysimple)andVulkan.
ModelComponent.cpp
Go to the documentation of this file.
3 #include "Engine/engine.hpp"
4 
5 namespace Engine
6 {
7  ModelComponent::ModelComponent(eastl::shared_ptr<Model> newModel) noexcept : Component()
8  {
9  model = newModel;
10  isEnabled = true;
11  }
12 
13  ModelComponent::ModelComponent(eastl::string path) noexcept : Component()
14  {
15  this->path = path;
16  isEnabled = true;
17  }
18 
19  void ModelComponent::InitializeComponent()
20  {
21  SetModel(path);
22 
23  Engine::GetEngine().lock()->GetRenderer().lock()->OnRender += Sharp::EventHandler::Bind(&ModelComponent::Render, this);
24  }
25 
27  {
28  Engine::GetEngine().lock()->GetRenderer().lock()->OnRender -= Sharp::EventHandler::Bind(&ModelComponent::Render, this);
29  }
30 
31  void ModelComponent::SetModel(eastl::shared_ptr<Model> newModel)
32  {
33  model = newModel;
34  }
35 
36  void ModelComponent::SetModel(const eastl::string& path)
37  {
38  // Shortcut
39  eastl::weak_ptr<ResourceManager> resourceManager = Engine::GetEngine().lock()->GetResourceManager();
40 
41  // Get Model
42  eastl::weak_ptr<Model> model = resourceManager.lock()->CreateModel(path, path);
43 
44  if (model.expired() == false && model.lock().get() != nullptr)
45  {
46  this->path = path;
47  this->model = model;
48  }
49  }
50 
51  eastl::weak_ptr<Model> ModelComponent::GetModel() const
52  {
53  return model;
54  }
55 
56  void ModelComponent::Update()
57  {
58  if (model.expired() || isEnabled == false || GetOwner().lock()->GetIsActive() == false)
59  return;
60 
61  if (transformComponent.expired())
62  return;
63 
64  GetModel().lock()->Update(Engine::GetEngine().lock()->GetTime().lock()->GetDeltaTime());
65  }
66 
67  void ModelComponent::Render()
68  {
69  if (model.expired() || isEnabled == false || GetOwner().lock()->GetIsActive() == false)
70  return;
71 
72  if (transformComponent.expired())
73  return;
74 
75  Engine::GetEngine().lock()->GetRenderer().lock()->Render(transformComponent.lock()->GetModelMatrix(), Engine::GetEngine().lock()->GetResourceManager().lock()->GetModel(model.lock()->GetName()).lock());
76  }
77 
78  void ModelComponent::OnComponentAdded(eastl::weak_ptr<Component> addedComponent)
79  {
80  if (eastl::dynamic_pointer_cast<TransformComponent>(addedComponent.lock()) && transformComponent.expired())
81  {
82  transformComponent = eastl::static_pointer_cast<TransformComponent>(addedComponent.lock());
83  }
84  }
85 
86  void ModelComponent::OnComponentRemoved(eastl::weak_ptr<Component> removedComponent)
87  {
88  if (transformComponent.lock().get() == removedComponent.lock().get())
89  transformComponent.reset();
90 
91  //In case we have multiple transformcomponents on this entity for some reason.
92  transformComponent = GetComponent<TransformComponent>();
93  }
94 
95  template <typename archive>
97  {
98  ar(CEREAL_NVP(model), CEREAL_NVP(transformComponent), CEREAL_NVP(isEnabled));
99  }
100 
101  template <typename archive>
103  {
104  ar(model, transformComponent, isEnabled);
105  }
106 } //namespace Engine
static EventHandlerImpl< T > * Bind(void(*nonMemberFunctionToCall)(T &))
Definition: Event.hpp:350
eastl::weak_ptr< Model > GetModel() const
This method will return the current model of this model component.
void SetModel(eastl::shared_ptr< Model > newModel)
This method allows you to change the model to render of this model component.
IMGUI_API float GetTime()
Definition: imgui.cpp:2160
void LoadComponent(archive ar)
loads the data from the archive to this component
eastl::weak_ptr< Entity > GetOwner() const
This method allows you to get the entity holding this component.
Definition: Component.cpp:9
void SaveComponent(archive ar)
Saves the data of this component to a archive
static eastl::weak_ptr< Engine > GetEngine() noexcept
This method allows you to get the instance of the Engine. This method will automatically initialize t...
Definition: engine.cpp:130