/* * This file is part of the Colobot: Gold Edition source code * Copyright (C) 2001-2023, Daniel Roux, EPSITEC SA & TerranovaTeam * http://epsitec.ch; http://colobot.info; http://github.com/colobot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see http://gnu.org/licenses */ #include "graphics/model/model.h" #include "common/logger.h" namespace Gfx { int CModel::GetMeshCount() const { return m_meshes.size(); } CModelMesh* CModel::GetMesh() { if (m_meshes.size() == 1) { return m_meshes.begin()->second.get(); } else { return GetMesh("main"); } } CModelMesh* CModel::GetMesh(const std::string& name) { auto it = m_meshes.find(name); if (it == m_meshes.end()) { GetLogger()->Error("Mesh named '%s' not found in model!\n", name.c_str()); return nullptr; } return it->second.get(); } const CModelMesh* CModel::GetMesh(const std::string& name) const { auto it = m_meshes.find(name); if (it == m_meshes.end()) { GetLogger()->Error("Mesh named '%s' not found in model!\n", name.c_str()); return nullptr; } return it->second.get(); } void CModel::AddMesh(const std::string& name, std::unique_ptr mesh) { m_meshes[name] = std::move(mesh); } std::vector CModel::GetMeshNames() const { std::vector meshNames; for (const auto& v : m_meshes) meshNames.push_back(v.first); return meshNames; } const ModelShadowSpot& CModel::GetShadowSpot() const { return *m_shadowSpot; } void CModel::SetShadowSpot(const ModelShadowSpot& shadowSpot) { m_shadowSpot = shadowSpot; } bool CModel::HasShadowSpot() const { return m_shadowSpot.has_value(); } const std::vector& CModel::GetCrashSpheres() const { return m_crashSpheres; } void CModel::AddCrashSphere(const ModelCrashSphere& crashSphere) { m_crashSpheres.push_back(crashSphere); } int CModel::GetCrashSphereCount() const { return m_crashSpheres.size(); } const Math::Sphere& CModel::GetCameraCollisionSphere() const { return *m_cameraCollisionSphere; } void CModel::SetCameraCollisionSphere(const Math::Sphere& sphere) { m_cameraCollisionSphere = sphere; } bool CModel::HasCameraCollisionSphere() const { return m_cameraCollisionSphere.has_value(); } } // namespace Gfx