Allow empty actor files.
This allows empty actor files -> they map to a dummy object that renders nothing. The use case is automatically hiding objects at lower quality levels & LOD settings. Differential Revision: https://code.wildfiregames.com/D3819 This was SVN commit r25224.
This commit is contained in:
parent
d73a3f59ad
commit
3759fc8a98
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2019 Wildfire Games.
|
||||
/* Copyright (C) 2021 Wildfire Games.
|
||||
* This file is part of 0 A.D.
|
||||
*
|
||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||
@ -23,6 +23,7 @@
|
||||
#include "maths/BoundingBoxOriented.h"
|
||||
#include "simulation2/helpers/Player.h"
|
||||
|
||||
class CModelDummy;
|
||||
class CModel;
|
||||
class CModelDecal;
|
||||
class CModelParticleEmitter;
|
||||
@ -73,13 +74,16 @@ public:
|
||||
virtual CModelAbstract* Clone() const = 0;
|
||||
|
||||
/// Dynamic cast
|
||||
virtual CModel* ToCModel() { return NULL; }
|
||||
virtual CModelDummy* ToCModelDummy() { return nullptr; }
|
||||
|
||||
/// Dynamic cast
|
||||
virtual CModelDecal* ToCModelDecal() { return NULL; }
|
||||
virtual CModel* ToCModel() { return nullptr; }
|
||||
|
||||
/// Dynamic cast
|
||||
virtual CModelParticleEmitter* ToCModelParticleEmitter() { return NULL; }
|
||||
virtual CModelDecal* ToCModelDecal() { return nullptr; }
|
||||
|
||||
/// Dynamic cast
|
||||
virtual CModelParticleEmitter* ToCModelParticleEmitter() { return nullptr; }
|
||||
|
||||
// (This dynamic casting is a bit ugly, but we won't have many subclasses
|
||||
// and this seems the easiest way to integrate with other code that wants
|
||||
|
45
source/graphics/ModelDummy.h
Normal file
45
source/graphics/ModelDummy.h
Normal file
@ -0,0 +1,45 @@
|
||||
/* Copyright (C) 2021 Wildfire Games.
|
||||
* This file is part of 0 A.D.
|
||||
*
|
||||
* 0 A.D. 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 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* 0 A.D. 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 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef INCLUDED_MODELDUMMY
|
||||
#define INCLUDED_MODELDUMMY
|
||||
|
||||
#include "graphics/ModelAbstract.h"
|
||||
|
||||
/**
|
||||
* Empty placeholder ModelAbstract implementation, to render nothing.
|
||||
*/
|
||||
class CModelDummy final : public CModelAbstract
|
||||
{
|
||||
NONCOPYABLE(CModelDummy);
|
||||
|
||||
public:
|
||||
|
||||
CModelDummy() = default;
|
||||
virtual ~CModelDummy() = default;
|
||||
|
||||
virtual CModelAbstract* Clone() const { return new CModelDummy(); }
|
||||
virtual CModelDummy* ToCModelDummy() { return this; }
|
||||
|
||||
virtual void CalcBounds() {};
|
||||
virtual void SetDirtyRec(int) {};
|
||||
virtual void SetTerrainDirty(ssize_t, ssize_t, ssize_t, ssize_t) {}
|
||||
virtual void ValidatePosition() {};
|
||||
virtual void InvalidatePosition() {};
|
||||
};
|
||||
|
||||
#endif // INCLUDED_MODELDUMMY
|
@ -25,6 +25,7 @@
|
||||
#include "graphics/MeshManager.h"
|
||||
#include "graphics/Model.h"
|
||||
#include "graphics/ModelDef.h"
|
||||
#include "graphics/ModelDummy.h"
|
||||
#include "graphics/ObjectBase.h"
|
||||
#include "graphics/ObjectManager.h"
|
||||
#include "graphics/ParticleManager.h"
|
||||
@ -77,6 +78,12 @@ bool CObjectEntry::BuildVariation(const std::vector<const std::set<CStr>*>& comp
|
||||
m_Color = CColor(r/255.0f, g/255.0f, b/255.0f, 1.0f);
|
||||
}
|
||||
|
||||
if (variation.model.empty())
|
||||
{
|
||||
m_Model = new CModelDummy();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (variation.decal.m_SizeX && variation.decal.m_SizeZ)
|
||||
{
|
||||
CMaterial material = g_Renderer.GetMaterialManager().LoadMaterial(m_Base->m_Material);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2011 Wildfire Games.
|
||||
/* Copyright (C) 2021 Wildfire Games.
|
||||
* This file is part of 0 A.D.
|
||||
*
|
||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||
@ -55,6 +55,9 @@ void SceneCollector::SubmitRecursive(CModelAbstract* model)
|
||||
{
|
||||
Submit(model->ToCModelParticleEmitter()->m_Emitter.get());
|
||||
}
|
||||
else if (model->ToCModelDummy())
|
||||
{
|
||||
}
|
||||
else
|
||||
debug_warn(L"unknown model type");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user