Skip to content

Commit

Permalink
#5885: IMatrixTransform's method is now setLocalToParent()
Browse files Browse the repository at this point in the history
Assigning to a non-const reference return value is horrible for
debugging (no easy way to set a breakpoint on value change) and
similarly inconvenient for IDE navigation (const and non-const methods
are mixed up in search results). This is now a fully fledged setter
method to improve clarity.
  • Loading branch information
Matthew Mott committed Feb 2, 2022
1 parent 7e728cb commit 0ffea8f
Show file tree
Hide file tree
Showing 8 changed files with 18 additions and 25 deletions.
4 changes: 2 additions & 2 deletions include/itransformnode.h
Expand Up @@ -20,6 +20,6 @@ class IMatrixTransform: public ITransformNode
{
public:

/// Return a modifiable reference to a contained transformation matrix
virtual Matrix4& localToParent() = 0;
/// Set the value of the contained transformation matrix
virtual void setLocalToParent(const Matrix4& localToParent) = 0;
};
2 changes: 1 addition & 1 deletion radiantcore/entity/EntityNode.cpp
Expand Up @@ -145,7 +145,7 @@ void EntityNode::createAttachedEntities()

// Set the attached entity's transform matrix according to the
// required offset
attachedEnt->localToParent() = Matrix4::getTranslation(a.offset);
attachedEnt->setLocalToParent(Matrix4::getTranslation(a.offset));
}
);
}
Expand Down
5 changes: 4 additions & 1 deletion radiantcore/entity/EntityNode.h
Expand Up @@ -111,7 +111,10 @@ class EntityNode :

// IMatrixTransform implementation
Matrix4 localToParent() const override { return _localToParent; }
Matrix4& localToParent() override { return _localToParent; }
void setLocalToParent(const Matrix4& localToParent) override
{
_localToParent = localToParent;
}

// IComparableNode implementation
std::string getFingerprint() override;
Expand Down
15 changes: 6 additions & 9 deletions radiantcore/entity/doom3group/StaticGeometryNode.cpp
Expand Up @@ -674,16 +674,13 @@ void StaticGeometryNode::modelChanged(const std::string& value)

void StaticGeometryNode::updateTransform()
{
localToParent() = Matrix4::getIdentity();
if (isModel())
setLocalToParent(Matrix4::getTranslation(m_origin) * m_rotation.getMatrix4());
else
setLocalToParent(Matrix4::getIdentity());

if (isModel())
{
localToParent().translateBy(m_origin);
localToParent().multiplyBy(m_rotation.getMatrix4());
}

// Notify the Node about this transformation change to update the local2World matrix
transformChanged();
// Notify the Node about this transformation change to update the local2World matrix
transformChanged();
}

void StaticGeometryNode::translateChildren(const Vector3& childTranslation)
Expand Down
5 changes: 1 addition & 4 deletions radiantcore/entity/eclassmodel/EclassModelNode.cpp
Expand Up @@ -159,10 +159,7 @@ const Vector3& EclassModelNode::getUntransformedOrigin()

void EclassModelNode::updateTransform()
{
localToParent() = Matrix4::getIdentity();
localToParent().translateBy(_origin);

localToParent().multiplyBy(_rotation.getMatrix4());
setLocalToParent(Matrix4::getTranslation(_origin) * _rotation.getMatrix4());

EntityNode::transformChanged();
}
Expand Down
2 changes: 1 addition & 1 deletion radiantcore/entity/generic/GenericEntityNode.cpp
Expand Up @@ -190,7 +190,7 @@ void GenericEntityNode::_freezeTransform()

void GenericEntityNode::updateTransform()
{
localToParent() = Matrix4::getTranslation(m_origin);
setLocalToParent(Matrix4::getTranslation(m_origin));

if (_allow3Drotations)
{
Expand Down
8 changes: 2 additions & 6 deletions radiantcore/entity/light/LightNode.cpp
Expand Up @@ -663,9 +663,7 @@ void LightNode::updateOrigin() {
projectionChanged();

// Update the transformation matrix
localToParent() = Matrix4::getIdentity();
localToParent().translateBy(_originTransformed);
localToParent().multiplyBy(m_rotation.getMatrix4());
setLocalToParent(Matrix4::getTranslation(_originTransformed) * m_rotation.getMatrix4());

// Notify all child nodes
m_transformChanged();
Expand Down Expand Up @@ -794,9 +792,7 @@ void LightNode::rotationChanged()
m_rotation = m_useLightRotation ? m_lightRotation : m_rotationKey.m_rotation;

// Update the transformation matrix
localToParent() = Matrix4::getIdentity();
localToParent().translateBy(_originTransformed);
localToParent().multiplyBy(m_rotation.getMatrix4());
setLocalToParent(Matrix4::getTranslation(_originTransformed) * m_rotation.getMatrix4());

// Notify owner about this
m_transformChanged();
Expand Down
2 changes: 1 addition & 1 deletion radiantcore/entity/speaker/SpeakerNode.cpp
Expand Up @@ -265,7 +265,7 @@ void SpeakerNode::translate(const Vector3& translation)

void SpeakerNode::updateTransform()
{
localToParent() = Matrix4::getTranslation(m_origin);
setLocalToParent(Matrix4::getTranslation(m_origin));
transformChanged();
}

Expand Down

0 comments on commit 0ffea8f

Please sign in to comment.