2#include "../component.h"
3#include "model_class.h"
7#include <WICTextureLoader.h>
14extern std::map<std::string, std::shared_ptr<model_class>> g_model_cache;
38 void Update(
float deltaTime)
override {}
47 if (!model)
return false;
64 std::string filename(modelFilename);
65 auto it = g_model_cache.find(filename);
66 if (it != g_model_cache.end()) {
70 auto new_model = std::make_shared<model_class>();
71 if (!new_model->Initialize(device, deviceContext,
const_cast<char*
>(modelFilename), textureContainer)) {
74 g_model_cache[filename] = new_model;
78 m_modelFilePath = modelFilename;
92 ID3D11Device* device, ID3D11DeviceContext* deviceContext) {
96 for (
const auto& texturePath : texturePaths) {
97 ID3D11ShaderResourceView* texture =
nullptr;
98 result = DirectX::CreateWICTextureFromFile(device, deviceContext, texturePath.c_str(),
nullptr, &texture);
102 texturesContainer.AssignTexture(texturesContainer, texture, texturePath, i);
113 std::shared_ptr<model_class>
GetModel()
const {
return m_model; }
119 void SetModel(std::shared_ptr<model_class> model) { m_model = model; }
153 if (!m_model)
return nullptr;
156 case TextureType::Diffuse:
157 return m_model->GetTexture(::TextureType::Diffuse, index);
158 case TextureType::Normal:
159 return m_model->GetTexture(::TextureType::Normal, index);
160 case TextureType::Specular:
161 return m_model->GetTexture(::TextureType::Specular, index);
162 case TextureType::Alpha:
163 return m_model->GetTexture(::TextureType::Alpha, index);
175 return m_model ? m_model->GetIndexCount() : 0;
183 void Render(ID3D11DeviceContext* deviceContext) {
184 if (m_model && m_isVisible) {
185 m_model->Render(deviceContext);
190 std::shared_ptr<model_class> m_model;
191 std::string m_modelFilePath;
bool InitializeFromFile(ID3D11Device *device, ID3D11DeviceContext *deviceContext, const char *modelFilename, TextureContainer &textureContainer)
std::shared_ptr< model_class > GetModel() const
bool InitializeWithModel(std::shared_ptr< model_class > model)
void Render(ID3D11DeviceContext *deviceContext)
bool LoadTexturesFromPath(std::vector< std::wstring > &texturePaths, TextureContainer &texturesContainer, ID3D11Device *device, ID3D11DeviceContext *deviceContext)
void Update(float deltaTime) override
ID3D11ShaderResourceView * GetTexture(TextureType type, int index=0)
void Initialize() override
const std::string & GetModelFilePath() const
void SetModel(std::shared_ptr< model_class > model)
void SetModelFilePath(const std::string &path)
int GetIndexCount() const
void SetVisible(bool visible)