From ee3c8987bf777e68e386f3a147b4249fe4ecf86a Mon Sep 17 00:00:00 2001 From: Matthew Mott Date: Wed, 1 Dec 2021 20:46:08 +0000 Subject: [PATCH] Doom3GroupNode is now StaticGeometryNode --- radiantcore/CMakeLists.txt | 2 +- radiantcore/entity/EntityModule.cpp | 4 +- ...m3GroupNode.cpp => StaticGeometryNode.cpp} | 136 +++++++++--------- ...{Doom3GroupNode.h => StaticGeometryNode.h} | 30 ++-- radiantcore/model/StaticModelNode.h | 9 +- tools/msvc/DarkRadiantCore.vcxproj | 4 +- tools/msvc/DarkRadiantCore.vcxproj.filters | 4 +- .../DarkRadiant.xcodeproj/project.pbxproj | 12 +- 8 files changed, 104 insertions(+), 97 deletions(-) rename radiantcore/entity/doom3group/{Doom3GroupNode.cpp => StaticGeometryNode.cpp} (76%) rename radiantcore/entity/doom3group/{Doom3GroupNode.h => StaticGeometryNode.h} (88%) diff --git a/radiantcore/CMakeLists.txt b/radiantcore/CMakeLists.txt index 6dabff2aaf..7922197b00 100644 --- a/radiantcore/CMakeLists.txt +++ b/radiantcore/CMakeLists.txt @@ -33,7 +33,7 @@ add_library(radiantcore MODULE entity/curve/CurveEditInstance.cpp entity/curve/CurveNURBS.cpp entity/SpawnArgs.cpp - entity/doom3group/Doom3GroupNode.cpp + entity/doom3group/StaticGeometryNode.cpp entity/eclassmodel/EclassModelNode.cpp entity/EntityModule.cpp entity/EntityNode.cpp diff --git a/radiantcore/entity/EntityModule.cpp b/radiantcore/entity/EntityModule.cpp index d2067608fc..f21e877802 100644 --- a/radiantcore/entity/EntityModule.cpp +++ b/radiantcore/entity/EntityModule.cpp @@ -15,7 +15,7 @@ #include "SpawnArgs.h" #include "light/LightNode.h" -#include "doom3group/Doom3GroupNode.h" +#include "doom3group/StaticGeometryNode.h" #include "speaker/SpeakerNode.h" #include "generic/GenericEntityNode.h" #include "eclassmodel/EclassModelNode.h" @@ -76,7 +76,7 @@ IEntityNodePtr createNodeForEntity(const IEntityClassPtr& eclass) else if (!eclass->isFixedSize()) { // Variable size entity - node = Doom3GroupNode::Create(eclass); + node = StaticGeometryNode::Create(eclass); } else if (!eclass->getAttribute("model").getValue().empty()) { diff --git a/radiantcore/entity/doom3group/Doom3GroupNode.cpp b/radiantcore/entity/doom3group/StaticGeometryNode.cpp similarity index 76% rename from radiantcore/entity/doom3group/Doom3GroupNode.cpp rename to radiantcore/entity/doom3group/StaticGeometryNode.cpp index ceb4397ffc..c9fc98b3ad 100644 --- a/radiantcore/entity/doom3group/Doom3GroupNode.cpp +++ b/radiantcore/entity/doom3group/StaticGeometryNode.cpp @@ -1,4 +1,4 @@ -#include "Doom3GroupNode.h" +#include "StaticGeometryNode.h" #include #include "../curve/CurveControlPointFunctors.h" @@ -8,24 +8,24 @@ namespace entity { -Doom3GroupNode::Doom3GroupNode(const IEntityClassPtr& eclass) : +StaticGeometryNode::StaticGeometryNode(const IEntityClassPtr& eclass) : EntityNode(eclass), - m_originKey(std::bind(&Doom3GroupNode::originChanged, this)), + m_originKey(std::bind(&StaticGeometryNode::originChanged, this)), m_origin(ORIGINKEY_IDENTITY), m_nameOrigin(0,0,0), - m_rotationKey(std::bind(&Doom3GroupNode::rotationChanged, this)), + m_rotationKey(std::bind(&StaticGeometryNode::rotationChanged, this)), m_renderOrigin(m_nameOrigin), m_isModel(false), m_curveNURBS(std::bind(&scene::Node::boundsChanged, this)), m_curveCatmullRom(std::bind(&scene::Node::boundsChanged, this)), _nurbsEditInstance(m_curveNURBS, - std::bind(&Doom3GroupNode::selectionChangedComponent, this, std::placeholders::_1)), + std::bind(&StaticGeometryNode::selectionChangedComponent, this, std::placeholders::_1)), _catmullRomEditInstance(m_curveCatmullRom, - std::bind(&Doom3GroupNode::selectionChangedComponent, this, std::placeholders::_1)), - _originInstance(VertexInstance(getOrigin(), std::bind(&Doom3GroupNode::selectionChangedComponent, this, std::placeholders::_1))) + std::bind(&StaticGeometryNode::selectionChangedComponent, this, std::placeholders::_1)), + _originInstance(VertexInstance(getOrigin(), std::bind(&StaticGeometryNode::selectionChangedComponent, this, std::placeholders::_1))) {} -Doom3GroupNode::Doom3GroupNode(const Doom3GroupNode& other) : +StaticGeometryNode::StaticGeometryNode(const StaticGeometryNode& other) : EntityNode(other), scene::GroupNode(other), Snappable(other), @@ -33,38 +33,38 @@ Doom3GroupNode::Doom3GroupNode(const Doom3GroupNode& other) : ComponentEditable(other), ComponentSnappable(other), CurveNode(other), - m_originKey(std::bind(&Doom3GroupNode::originChanged, this)), + m_originKey(std::bind(&StaticGeometryNode::originChanged, this)), m_origin(other.m_origin), m_nameOrigin(other.m_nameOrigin), - m_rotationKey(std::bind(&Doom3GroupNode::rotationChanged, this)), + m_rotationKey(std::bind(&StaticGeometryNode::rotationChanged, this)), m_renderOrigin(m_nameOrigin), m_isModel(other.m_isModel), m_curveNURBS(std::bind(&scene::Node::boundsChanged, this)), m_curveCatmullRom(std::bind(&scene::Node::boundsChanged, this)), _nurbsEditInstance(m_curveNURBS, - std::bind(&Doom3GroupNode::selectionChangedComponent, this, std::placeholders::_1)), + std::bind(&StaticGeometryNode::selectionChangedComponent, this, std::placeholders::_1)), _catmullRomEditInstance(m_curveCatmullRom, - std::bind(&Doom3GroupNode::selectionChangedComponent, this, std::placeholders::_1)), - _originInstance(VertexInstance(getOrigin(), std::bind(&Doom3GroupNode::selectionChangedComponent, this, std::placeholders::_1))) + std::bind(&StaticGeometryNode::selectionChangedComponent, this, std::placeholders::_1)), + _originInstance(VertexInstance(getOrigin(), std::bind(&StaticGeometryNode::selectionChangedComponent, this, std::placeholders::_1))) { // greebo: Don't call construct() here, this should be invoked by the // clone() method } -Doom3GroupNodePtr Doom3GroupNode::Create(const IEntityClassPtr& eclass) +StaticGeometryNode::Ptr StaticGeometryNode::Create(const IEntityClassPtr& eclass) { - Doom3GroupNodePtr instance(new Doom3GroupNode(eclass)); + StaticGeometryNode::Ptr instance(new StaticGeometryNode(eclass)); instance->construct(); return instance; } -Doom3GroupNode::~Doom3GroupNode() +StaticGeometryNode::~StaticGeometryNode() { destroy(); } -void Doom3GroupNode::construct() +void StaticGeometryNode::construct() { EntityNode::construct(); @@ -88,12 +88,12 @@ void Doom3GroupNode::construct() ); } -bool Doom3GroupNode::hasEmptyCurve() { +bool StaticGeometryNode::hasEmptyCurve() { return m_curveNURBS.isEmpty() && m_curveCatmullRom.isEmpty(); } -void Doom3GroupNode::removeSelectedControlPoints() +void StaticGeometryNode::removeSelectedControlPoints() { if (_catmullRomEditInstance.isSelected()) { _catmullRomEditInstance.removeSelectedControlPoints(); @@ -105,7 +105,7 @@ void Doom3GroupNode::removeSelectedControlPoints() } } -void Doom3GroupNode::insertControlPointsAtSelected() { +void StaticGeometryNode::insertControlPointsAtSelected() { if (_catmullRomEditInstance.isSelected()) { _catmullRomEditInstance.insertControlPointsAtSelected(); _catmullRomEditInstance.write(curve_CatmullRomSpline, _spawnArgs); @@ -141,7 +141,7 @@ class BrushTranslator: public scene::NodeVisitor } -void Doom3GroupNode::addOriginToChildren() +void StaticGeometryNode::addOriginToChildren() { if (!isModel()) { @@ -150,7 +150,7 @@ void Doom3GroupNode::addOriginToChildren() } } -void Doom3GroupNode::removeOriginFromChildren() +void StaticGeometryNode::removeOriginFromChildren() { if (!isModel()) { @@ -159,15 +159,15 @@ void Doom3GroupNode::removeOriginFromChildren() } } -void Doom3GroupNode::selectionChangedComponent(const ISelectable& selectable) { +void StaticGeometryNode::selectionChangedComponent(const ISelectable& selectable) { GlobalSelectionSystem().onComponentSelection(Node::getSelf(), selectable); } -bool Doom3GroupNode::isSelectedComponents() const { +bool StaticGeometryNode::isSelectedComponents() const { return _nurbsEditInstance.isSelected() || _catmullRomEditInstance.isSelected() || (isModel() && _originInstance.isSelected()); } -void Doom3GroupNode::setSelectedComponents(bool selected, selection::ComponentSelectionMode mode) { +void StaticGeometryNode::setSelectedComponents(bool selected, selection::ComponentSelectionMode mode) { if (mode == selection::ComponentSelectionMode::Vertex) { _nurbsEditInstance.setSelected(selected); _catmullRomEditInstance.setSelected(selected); @@ -175,7 +175,7 @@ void Doom3GroupNode::setSelectedComponents(bool selected, selection::ComponentSe } } -void Doom3GroupNode::invertSelectedComponents(selection::ComponentSelectionMode mode) +void StaticGeometryNode::invertSelectedComponents(selection::ComponentSelectionMode mode) { if (mode == selection::ComponentSelectionMode::Vertex) { @@ -185,7 +185,7 @@ void Doom3GroupNode::invertSelectedComponents(selection::ComponentSelectionMode } } -void Doom3GroupNode::testSelectComponents(Selector& selector, SelectionTest& test, selection::ComponentSelectionMode mode) +void StaticGeometryNode::testSelectComponents(Selector& selector, SelectionTest& test, selection::ComponentSelectionMode mode) { if (mode == selection::ComponentSelectionMode::Vertex) { @@ -198,7 +198,7 @@ void Doom3GroupNode::testSelectComponents(Selector& selector, SelectionTest& tes } } -const AABB& Doom3GroupNode::getSelectedComponentsBounds() const { +const AABB& StaticGeometryNode::getSelectedComponentsBounds() const { m_aabb_component = AABB(); ControlPointBoundsAdder boundsAdder(m_aabb_component); @@ -211,7 +211,7 @@ const AABB& Doom3GroupNode::getSelectedComponentsBounds() const { return m_aabb_component; } -void Doom3GroupNode::snapComponents(float snap) { +void StaticGeometryNode::snapComponents(float snap) { if (_nurbsEditInstance.isSelected()) { _nurbsEditInstance.snapto(snap); _nurbsEditInstance.write(curve_Nurbs, _spawnArgs); @@ -225,16 +225,16 @@ void Doom3GroupNode::snapComponents(float snap) { } } -scene::INodePtr Doom3GroupNode::clone() const +scene::INodePtr StaticGeometryNode::clone() const { - Doom3GroupNodePtr clone(new Doom3GroupNode(*this)); + StaticGeometryNode::Ptr clone(new StaticGeometryNode(*this)); clone->construct(); clone->constructClone(*this); return clone; } -void Doom3GroupNode::onRemoveFromScene(scene::IMapRootNode& root) +void StaticGeometryNode::onRemoveFromScene(scene::IMapRootNode& root) { // Call the base class first EntityNode::onRemoveFromScene(root); @@ -243,14 +243,14 @@ void Doom3GroupNode::onRemoveFromScene(scene::IMapRootNode& root) setSelectedComponents(false, selection::ComponentSelectionMode::Vertex); } -void Doom3GroupNode::testSelect(Selector& selector, SelectionTest& test) +void StaticGeometryNode::testSelect(Selector& selector, SelectionTest& test) { EntityNode::testSelect(selector, test); test.BeginMesh(localToWorld()); SelectionIntersection best; - // Pass the selection test to the Doom3GroupNode class + // Pass the selection test to the StaticGeometryNode class m_curveNURBS.testSelect(selector, test, best); m_curveCatmullRom.testSelect(selector, test, best); @@ -260,7 +260,7 @@ void Doom3GroupNode::testSelect(Selector& selector, SelectionTest& test) } } -void Doom3GroupNode::renderCommon(RenderableCollector& collector, const VolumeTest& volume) const +void StaticGeometryNode::renderCommon(RenderableCollector& collector, const VolumeTest& volume) const { if (isSelected()) { m_renderOrigin.render(collector, volume, localToWorld()); @@ -277,7 +277,7 @@ void Doom3GroupNode::renderCommon(RenderableCollector& collector, const VolumeTe } } -void Doom3GroupNode::renderSolid(RenderableCollector& collector, const VolumeTest& volume) const +void StaticGeometryNode::renderSolid(RenderableCollector& collector, const VolumeTest& volume) const { EntityNode::renderSolid(collector, volume); renderCommon(collector, volume); @@ -287,7 +287,7 @@ void Doom3GroupNode::renderSolid(RenderableCollector& collector, const VolumeTes _catmullRomEditInstance.renderComponentsSelected(collector, volume, Matrix4::getIdentity()); } -void Doom3GroupNode::renderWireframe(RenderableCollector& collector, const VolumeTest& volume) const +void StaticGeometryNode::renderWireframe(RenderableCollector& collector, const VolumeTest& volume) const { EntityNode::renderWireframe(collector, volume); renderCommon(collector, volume); @@ -296,7 +296,7 @@ void Doom3GroupNode::renderWireframe(RenderableCollector& collector, const Volum _catmullRomEditInstance.renderComponentsSelected(collector, volume, Matrix4::getIdentity()); } -void Doom3GroupNode::setRenderSystem(const RenderSystemPtr& renderSystem) +void StaticGeometryNode::setRenderSystem(const RenderSystemPtr& renderSystem) { EntityNode::setRenderSystem(renderSystem); @@ -307,7 +307,7 @@ void Doom3GroupNode::setRenderSystem(const RenderSystemPtr& renderSystem) _originInstance.setRenderSystem(renderSystem); } -void Doom3GroupNode::renderComponents(RenderableCollector& collector, const VolumeTest& volume) const +void StaticGeometryNode::renderComponents(RenderableCollector& collector, const VolumeTest& volume) const { if (GlobalSelectionSystem().ComponentMode() == selection::ComponentSelectionMode::Vertex) { @@ -322,7 +322,7 @@ void Doom3GroupNode::renderComponents(RenderableCollector& collector, const Volu } } -void Doom3GroupNode::evaluateTransform() +void StaticGeometryNode::evaluateTransform() { if (getType() == TRANSFORM_PRIMITIVE) { @@ -347,7 +347,7 @@ void Doom3GroupNode::evaluateTransform() m_curveCatmullRom.curveChanged(); } -void Doom3GroupNode::transformComponents(const Matrix4& matrix) +void StaticGeometryNode::transformComponents(const Matrix4& matrix) { if (_nurbsEditInstance.isSelected()) { _nurbsEditInstance.transform(matrix); @@ -362,7 +362,7 @@ void Doom3GroupNode::transformComponents(const Matrix4& matrix) } } -void Doom3GroupNode::_onTransformationChanged() +void StaticGeometryNode::_onTransformationChanged() { // If this is a container, pass the call to the children and leave the entity unharmed if (!isModel()) @@ -391,7 +391,7 @@ void Doom3GroupNode::_onTransformationChanged() m_curveCatmullRom.curveChanged(); } -void Doom3GroupNode::_applyTransformation() +void StaticGeometryNode::_applyTransformation() { revertTransformInternal(); evaluateTransform(); @@ -404,7 +404,7 @@ void Doom3GroupNode::_applyTransformation() } } -void Doom3GroupNode::onModelKeyChanged(const std::string& value) +void StaticGeometryNode::onModelKeyChanged(const std::string& value) { // Override the default behaviour // Don't call EntityNode::onModelKeyChanged(value); @@ -423,16 +423,16 @@ inline void PointVertexArray_testSelect(VertexCb* first, std::size_t count, ); } -Vector3& Doom3GroupNode::getOrigin() { +Vector3& StaticGeometryNode::getOrigin() { return m_origin; } -const Vector3& Doom3GroupNode::getUntransformedOrigin() +const Vector3& StaticGeometryNode::getUntransformedOrigin() { return m_originKey.get(); } -const AABB& Doom3GroupNode::localAABB() const { +const AABB& StaticGeometryNode::localAABB() const { m_curveBounds = m_curveNURBS.getBounds(); m_curveBounds.includeAABB(m_curveCatmullRom.getBounds()); @@ -449,14 +449,14 @@ const AABB& Doom3GroupNode::localAABB() const { return m_curveBounds; } -void Doom3GroupNode::snapOrigin(float snap) +void StaticGeometryNode::snapOrigin(float snap) { m_originKey.snap(snap); m_originKey.write(_spawnArgs); m_renderOrigin.updatePivot(); } -void Doom3GroupNode::translateOrigin(const Vector3& translation) +void StaticGeometryNode::translateOrigin(const Vector3& translation) { m_origin = m_originKey.get() + translation; @@ -469,7 +469,7 @@ void Doom3GroupNode::translateOrigin(const Vector3& translation) m_renderOrigin.updatePivot(); } -void Doom3GroupNode::translate(const Vector3& translation) +void StaticGeometryNode::translate(const Vector3& translation) { m_origin += translation; @@ -483,7 +483,7 @@ void Doom3GroupNode::translate(const Vector3& translation) translateChildren(translation); } -void Doom3GroupNode::rotate(const Quaternion& rotation) +void StaticGeometryNode::rotate(const Quaternion& rotation) { if (!isModel()) { @@ -504,7 +504,7 @@ void Doom3GroupNode::rotate(const Quaternion& rotation) } } -void Doom3GroupNode::scale(const Vector3& scale) +void StaticGeometryNode::scale(const Vector3& scale) { if (!isModel()) { @@ -521,13 +521,13 @@ void Doom3GroupNode::scale(const Vector3& scale) } } -void Doom3GroupNode::snapto(float snap) +void StaticGeometryNode::snapto(float snap) { m_originKey.snap(snap); m_originKey.write(_spawnArgs); } -void Doom3GroupNode::revertTransformInternal() +void StaticGeometryNode::revertTransformInternal() { m_origin = m_originKey.get(); @@ -544,7 +544,7 @@ void Doom3GroupNode::revertTransformInternal() m_curveCatmullRom.revertTransform(); } -void Doom3GroupNode::freezeTransformInternal() +void StaticGeometryNode::freezeTransformInternal() { m_originKey.set(m_origin); m_originKey.write(_spawnArgs); @@ -569,7 +569,7 @@ void Doom3GroupNode::freezeTransformInternal() m_curveCatmullRom.saveToEntity(_spawnArgs); } -void Doom3GroupNode::appendControlPoints(unsigned int numPoints) { +void StaticGeometryNode::appendControlPoints(unsigned int numPoints) { if (!m_curveNURBS.isEmpty()) { m_curveNURBS.appendControlPoints(numPoints); m_curveNURBS.saveToEntity(_spawnArgs); @@ -580,7 +580,7 @@ void Doom3GroupNode::appendControlPoints(unsigned int numPoints) { } } -void Doom3GroupNode::convertCurveType() { +void StaticGeometryNode::convertCurveType() { if (!m_curveNURBS.isEmpty() && m_curveCatmullRom.isEmpty()) { std::string keyValue = _spawnArgs.getKeyValue(curve_Nurbs); _spawnArgs.setKeyValue(curve_Nurbs, ""); @@ -593,7 +593,7 @@ void Doom3GroupNode::convertCurveType() { } } -void Doom3GroupNode::destroy() +void StaticGeometryNode::destroy() { modelChanged(""); @@ -602,11 +602,11 @@ void Doom3GroupNode::destroy() removeKeyObserver(curve_CatmullRomSpline, m_curveCatmullRom); } -bool Doom3GroupNode::isModel() const { +bool StaticGeometryNode::isModel() const { return m_isModel; } -void Doom3GroupNode::setIsModel(bool newValue) { +void StaticGeometryNode::setIsModel(bool newValue) { if (newValue && !m_isModel) { // The model key is not recognised as "name" getModelKey().modelChanged(m_modelKey); @@ -620,13 +620,13 @@ void Doom3GroupNode::setIsModel(bool newValue) { updateTransform(); } -/** Determine if this Doom3GroupNode is a model (func_static) or a +/** Determine if this StaticGeometryNode is a model (func_static) or a * brush-containing entity. If the "model" key is equal to the * "name" key, then this is a brush-based entity, otherwise it is * a model entity. The exception to this is the "worldspawn" * entity class, which is always a brush-based entity. */ -void Doom3GroupNode::updateIsModel() +void StaticGeometryNode::updateIsModel() { if (m_modelKey != m_name && !_spawnArgs.isWorldspawn()) { @@ -644,13 +644,13 @@ void Doom3GroupNode::updateIsModel() } } -void Doom3GroupNode::nameChanged(const std::string& value) { +void StaticGeometryNode::nameChanged(const std::string& value) { m_name = value; updateIsModel(); m_renderOrigin.updatePivot(); } -void Doom3GroupNode::modelChanged(const std::string& value) +void StaticGeometryNode::modelChanged(const std::string& value) { m_modelKey = value; updateIsModel(); @@ -669,7 +669,7 @@ void Doom3GroupNode::modelChanged(const std::string& value) m_renderOrigin.updatePivot(); } -void Doom3GroupNode::updateTransform() +void StaticGeometryNode::updateTransform() { localToParent() = Matrix4::getIdentity(); @@ -683,7 +683,7 @@ void Doom3GroupNode::updateTransform() transformChanged(); } -void Doom3GroupNode::translateChildren(const Vector3& childTranslation) +void StaticGeometryNode::translateChildren(const Vector3& childTranslation) { if (inScene()) { @@ -696,7 +696,7 @@ void Doom3GroupNode::translateChildren(const Vector3& childTranslation) } } -void Doom3GroupNode::originChanged() +void StaticGeometryNode::originChanged() { m_origin = m_originKey.get(); updateTransform(); @@ -710,7 +710,7 @@ void Doom3GroupNode::originChanged() m_renderOrigin.updatePivot(); } -void Doom3GroupNode::rotationChanged() { +void StaticGeometryNode::rotationChanged() { m_rotation = m_rotationKey.m_rotation; updateTransform(); } diff --git a/radiantcore/entity/doom3group/Doom3GroupNode.h b/radiantcore/entity/doom3group/StaticGeometryNode.h similarity index 88% rename from radiantcore/entity/doom3group/Doom3GroupNode.h rename to radiantcore/entity/doom3group/StaticGeometryNode.h index 0f437ded9e..70de5ab4ca 100644 --- a/radiantcore/entity/doom3group/Doom3GroupNode.h +++ b/radiantcore/entity/doom3group/StaticGeometryNode.h @@ -18,10 +18,16 @@ namespace entity { -class Doom3GroupNode; -typedef std::shared_ptr Doom3GroupNodePtr; - -class Doom3GroupNode : +/** + * @brief Container node for static geometry, either in the form of brushes and + * patches, or a model loaded from a file. + * + * This node is used for "func_static" and similar entities which contain static + * geometry. It is always used as a parent node, either of the brushes and + * patches it contains, or a StaticModelNode containing a model file. It never + * stores or renders any geometry itself. + */ +class StaticGeometryNode : public EntityNode, public scene::GroupNode, public Snappable, @@ -30,9 +36,6 @@ class Doom3GroupNode : public ComponentSnappable, public CurveNode { - // ------------------------------------------------------------------------ - // Doom3Group members - OriginKey m_originKey; Vector3 m_origin; @@ -61,9 +64,6 @@ class Doom3GroupNode : CurveCatmullRom m_curveCatmullRom; std::size_t m_curveCatmullRomChanged; - // ------------------------------------------------------------------------ - // Doom3GroupNode members - CurveEditInstance _nurbsEditInstance; CurveEditInstance _catmullRomEditInstance; mutable AABB m_aabb_component; @@ -72,14 +72,16 @@ class Doom3GroupNode : private: // Constructor - Doom3GroupNode(const IEntityClassPtr& eclass); + StaticGeometryNode(const IEntityClassPtr& eclass); // Private copy constructor, is invoked by clone() - Doom3GroupNode(const Doom3GroupNode& other); + StaticGeometryNode(const StaticGeometryNode& other); public: - static Doom3GroupNodePtr Create(const IEntityClassPtr& eclass); + using Ptr = std::shared_ptr; + + static StaticGeometryNode::Ptr Create(const IEntityClassPtr& eclass); - virtual ~Doom3GroupNode(); + virtual ~StaticGeometryNode(); // CurveNode implementation virtual bool hasEmptyCurve() override; diff --git a/radiantcore/model/StaticModelNode.h b/radiantcore/model/StaticModelNode.h index 19e0a81fab..3bdd861d9a 100644 --- a/radiantcore/model/StaticModelNode.h +++ b/radiantcore/model/StaticModelNode.h @@ -14,8 +14,13 @@ namespace model { /** - * \brief - * Scenegraph node representing a static model + * \brief Scenegraph node representing a static model loaded from a file (e.g. + * LWO or ASE). + * + * This node does not represent a "func_static" (or similar object) directly, + * but is added as a child of the respective entity node (e.g. + * StaticGeometryNode). It is normally created by the ModelCache in response to + * a particular entity gaining a "model" spawnarg. */ class StaticModelNode : public scene::Node, diff --git a/tools/msvc/DarkRadiantCore.vcxproj b/tools/msvc/DarkRadiantCore.vcxproj index 5714a83872..07b363b523 100644 --- a/tools/msvc/DarkRadiantCore.vcxproj +++ b/tools/msvc/DarkRadiantCore.vcxproj @@ -47,7 +47,7 @@ - + @@ -759,7 +759,7 @@ - + diff --git a/tools/msvc/DarkRadiantCore.vcxproj.filters b/tools/msvc/DarkRadiantCore.vcxproj.filters index 036c4b020c..f357f8ea9c 100644 --- a/tools/msvc/DarkRadiantCore.vcxproj.filters +++ b/tools/msvc/DarkRadiantCore.vcxproj.filters @@ -457,7 +457,7 @@ src\entity\curve - + src\entity\doom3group @@ -1491,7 +1491,7 @@ src\entity\curve - + src\entity\doom3group diff --git a/tools/xcode/DarkRadiant.xcodeproj/project.pbxproj b/tools/xcode/DarkRadiant.xcodeproj/project.pbxproj index 964b527384..2b0683e6ff 100644 --- a/tools/xcode/DarkRadiant.xcodeproj/project.pbxproj +++ b/tools/xcode/DarkRadiant.xcodeproj/project.pbxproj @@ -1735,7 +1735,7 @@ 3AFF0571253AE272002B1472 /* CurveEditInstance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AE6F2B9239F4CA1008A1B2D /* CurveEditInstance.cpp */; }; 3AFF0572253AE272002B1472 /* CurveNURBS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AE6F2BB239F4CA1008A1B2D /* CurveNURBS.cpp */; }; 3AFF0573253AE283002B1472 /* Doom3Group.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AE6F2C1239F4CA1008A1B2D /* Doom3Group.cpp */; }; - 3AFF0574253AE283002B1472 /* Doom3GroupNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AE6F2C3239F4CA1008A1B2D /* Doom3GroupNode.cpp */; }; + 3AFF0574253AE283002B1472 /* StaticGeometryNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AE6F2C3239F4CA1008A1B2D /* StaticGeometryNode.cpp */; }; 3AFF0575253AE291002B1472 /* EclassModelNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AE6F2C6239F4CA1008A1B2D /* EclassModelNode.cpp */; }; 3AFF0577253AE2A7002B1472 /* GenericEntityNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AE6F2D1239F4CA1008A1B2D /* GenericEntityNode.cpp */; }; 3AFF0578253AE2BF002B1472 /* Light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AE6F2DC239F4CA1008A1B2D /* Light.cpp */; }; @@ -3674,8 +3674,8 @@ 3AE6F2BD239F4CA1008A1B2D /* RenderableCurve.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RenderableCurve.h; path = ../../radiantcore/entity/curve/RenderableCurve.h; sourceTree = SOURCE_ROOT; }; 3AE6F2C1239F4CA1008A1B2D /* Doom3Group.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Doom3Group.cpp; path = ../../radiantcore/entity/doom3group/Doom3Group.cpp; sourceTree = SOURCE_ROOT; }; 3AE6F2C2239F4CA1008A1B2D /* Doom3Group.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Doom3Group.h; path = ../../radiantcore/entity/doom3group/Doom3Group.h; sourceTree = SOURCE_ROOT; }; - 3AE6F2C3239F4CA1008A1B2D /* Doom3GroupNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Doom3GroupNode.cpp; path = ../../radiantcore/entity/doom3group/Doom3GroupNode.cpp; sourceTree = SOURCE_ROOT; }; - 3AE6F2C4239F4CA1008A1B2D /* Doom3GroupNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Doom3GroupNode.h; path = ../../radiantcore/entity/doom3group/Doom3GroupNode.h; sourceTree = SOURCE_ROOT; }; + 3AE6F2C3239F4CA1008A1B2D /* StaticGeometryNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StaticGeometryNode.cpp; path = ../../radiantcore/entity/doom3group/StaticGeometryNode.cpp; sourceTree = SOURCE_ROOT; }; + 3AE6F2C4239F4CA1008A1B2D /* StaticGeometryNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StaticGeometryNode.h; path = ../../radiantcore/entity/doom3group/StaticGeometryNode.h; sourceTree = SOURCE_ROOT; }; 3AE6F2C6239F4CA1008A1B2D /* EclassModelNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = EclassModelNode.cpp; path = ../../radiantcore/entity/eclassmodel/EclassModelNode.cpp; sourceTree = SOURCE_ROOT; }; 3AE6F2C7239F4CA1008A1B2D /* EclassModelNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EclassModelNode.h; path = ../../radiantcore/entity/eclassmodel/EclassModelNode.h; sourceTree = SOURCE_ROOT; }; 3AE6F2CA239F4CA1008A1B2D /* EntityNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = EntityNode.cpp; path = ../../radiantcore/entity/EntityNode.cpp; sourceTree = SOURCE_ROOT; }; @@ -6238,8 +6238,8 @@ children = ( 3AE6F2C1239F4CA1008A1B2D /* Doom3Group.cpp */, 3AE6F2C2239F4CA1008A1B2D /* Doom3Group.h */, - 3AE6F2C3239F4CA1008A1B2D /* Doom3GroupNode.cpp */, - 3AE6F2C4239F4CA1008A1B2D /* Doom3GroupNode.h */, + 3AE6F2C3239F4CA1008A1B2D /* StaticGeometryNode.cpp */, + 3AE6F2C4239F4CA1008A1B2D /* StaticGeometryNode.h */, ); name = doom3group; path = ../../../radiant/entity/doom3group; @@ -10474,7 +10474,7 @@ 3AFF06E0253C01D9002B1472 /* SelectionTestWalkers.cpp in Sources */, 3AFF0526253AE031002B1472 /* PortableMapReader.cpp in Sources */, 3AFF0545253AE0A6002B1472 /* PointFile.cpp in Sources */, - 3AFF0574253AE283002B1472 /* Doom3GroupNode.cpp in Sources */, + 3AFF0574253AE283002B1472 /* StaticGeometryNode.cpp in Sources */, 3AFF0470253AB96C002B1472 /* DirectoryArchive.cpp in Sources */, 3AFF054F253AE18F002B1472 /* LogFile.cpp in Sources */, 3AE5C346263930D900643850 /* MaterialSourceGenerator.cpp in Sources */,