Skip to content

Commit

Permalink
#5231: Start separating entity settings data from its UI.
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed May 17, 2020
1 parent 842bede commit 8d7a914
Show file tree
Hide file tree
Showing 9 changed files with 103 additions and 17 deletions.
31 changes: 31 additions & 0 deletions include/ientity.h
Expand Up @@ -317,6 +317,34 @@ class ITargetManager
};
typedef std::shared_ptr<ITargetManager> ITargetManagerPtr;

/**
* Global entity settings affecting appearance, render options, etc.
*/
class IEntitySettings
{
public:
virtual bool getRenderEntityNames() const = 0;
virtual void setRenderEntityNames(bool value) = 0;

virtual bool getShowAllSpeakerRadii() const = 0;
virtual void setShowAllSpeakerRadii(bool value) = 0;

virtual bool getShowAllLightRadii() const = 0;
virtual void setShowAllLightRadii(bool value) = 0;

virtual bool getDragResizeEntitiesSymmetrically() const = 0;
virtual void setDragResizeEntitiesSymmetrically(bool value) = 0;

virtual bool getAlwaysShowLightVertices() const = 0;
virtual void setAlwaysShowLightVertices(bool value) = 0;

virtual bool getFreeObjectRotation() const = 0;
virtual void setFreeObjectRotation(bool value) = 0;

virtual bool getShowEntityAngles() const = 0;
virtual void setShowEntityAngles(bool value) = 0;
};

const char* const MODULE_ENTITY("EntityModule");

/**
Expand All @@ -334,6 +362,9 @@ class IEntityModule :

// Constructs a new targetmanager instance (used by root nodes)
virtual ITargetManagerPtr createTargetManager() = 0;

// Access to the settings manager
virtual IEntitySettings& getSettings() = 0;
};

inline IEntityModule& GlobalEntityModule()
Expand Down
8 changes: 7 additions & 1 deletion radiant/entity/EntityModule.cpp
Expand Up @@ -24,6 +24,7 @@
#include "eclassmodel/EclassModelNode.h"
#include "target/TargetManager.h"
#include "module/StaticModule.h"
#include "EntitySettings.h"

namespace entity
{
Expand Down Expand Up @@ -107,6 +108,11 @@ ITargetManagerPtr Doom3EntityModule::createTargetManager()
return std::make_shared<TargetManager>();
}

IEntitySettings& Doom3EntityModule::getSettings()
{
return *EntitySettings::InstancePtr();
}

// RegisterableModule implementation
const std::string& Doom3EntityModule::getName() const
{
Expand All @@ -118,7 +124,7 @@ const StringSet& Doom3EntityModule::getDependencies() const
{
static StringSet _dependencies;

if (_dependencies.empty())
if (_dependencies.empty())
{
_dependencies.insert(MODULE_XMLREGISTRY);
_dependencies.insert(MODULE_MAP);
Expand Down
1 change: 1 addition & 0 deletions radiant/entity/EntityModule.h
Expand Up @@ -14,6 +14,7 @@ class Doom3EntityModule :
// EntityCreator implementation
IEntityNodePtr createEntity(const IEntityClassPtr& eclass) override;
ITargetManagerPtr createTargetManager() override;
IEntitySettings& getSettings() override;

// RegisterableModule implementation
virtual const std::string& getName() const override;
Expand Down
2 changes: 1 addition & 1 deletion radiant/entity/EntityNode.cpp
Expand Up @@ -236,7 +236,7 @@ void EntityNode::renderWireframe(RenderableCollector& collector,
const VolumeTest& volume) const
{
// Submit renderable text name if required
if (EntitySettings::InstancePtr()->renderEntityNames())
if (EntitySettings::InstancePtr()->getRenderEntityNames())
{
collector.addRenderable(getWireShader(), _renderableName, localToWorld());
}
Expand Down
64 changes: 56 additions & 8 deletions radiant/entity/EntitySettings.h
Expand Up @@ -27,7 +27,8 @@ typedef std::shared_ptr<EntitySettings> EntitySettingsPtr;
* variables accordingly. This can be used as some sort of "cache"
* to avoid slow registry queries during rendering, for instance.
*/
class EntitySettings
class EntitySettings :
public IEntitySettings
{
public:
enum LightEditVertexType
Expand Down Expand Up @@ -81,36 +82,83 @@ class EntitySettings
return _lightVertexColours[type];
}

bool renderEntityNames() {
bool getRenderEntityNames() const override
{
return _renderEntityNames;
}

bool showAllSpeakerRadii() {
void setRenderEntityNames(bool value) override
{
_renderEntityNames = value;
onSettingsChanged();
}

bool getShowAllSpeakerRadii() const override
{
return _showAllSpeakerRadii;
}

bool showAllLightRadii() {
void setShowAllSpeakerRadii(bool value) override
{
_showAllSpeakerRadii = value;
onSettingsChanged();
}

bool getShowAllLightRadii() const override
{
return _showAllLightRadii;
}

bool dragResizeEntitiesSymmetrically() {
void setShowAllLightRadii(bool value) override
{
_showAllLightRadii = value;
onSettingsChanged();
}

bool getDragResizeEntitiesSymmetrically() const override
{
return _dragResizeEntitiesSymmetrically;
}

bool alwaysShowLightVertices() {
void setDragResizeEntitiesSymmetrically(bool value) override
{
_dragResizeEntitiesSymmetrically = value;
onSettingsChanged();
}

bool getAlwaysShowLightVertices() const override
{
return _alwaysShowLightVertices;
}

bool freeObjectRotation()
void setAlwaysShowLightVertices(bool value) override
{
_alwaysShowLightVertices = value;
onSettingsChanged();
}

bool getFreeObjectRotation() const override
{
return _freeObjectRotation;
}

bool showEntityAngles()
void setFreeObjectRotation(bool value) override
{
_freeObjectRotation = value;
onSettingsChanged();
}

bool getShowEntityAngles() const override
{
return _showEntityAngles;
}

void setShowEntityAngles(bool value) override
{
_showEntityAngles = value;
onSettingsChanged();
}

// Container for the singleton (ptr)
static EntitySettingsPtr& InstancePtr();

Expand Down
2 changes: 1 addition & 1 deletion radiant/entity/generic/GenericEntity.cpp
Expand Up @@ -51,7 +51,7 @@ const AABB& GenericEntity::localAABB() const {
void GenericEntity::renderArrow(const ShaderPtr& shader, RenderableCollector& collector,
const VolumeTest& volume, const Matrix4& localToWorld) const
{
if (EntitySettings::InstancePtr()->showEntityAngles())
if (EntitySettings::InstancePtr()->getShowEntityAngles())
{
collector.addRenderable(shader, m_arrow, localToWorld);
}
Expand Down
4 changes: 2 additions & 2 deletions radiant/entity/light/Light.cpp
Expand Up @@ -370,7 +370,7 @@ void Light::snapto(float snap)

void Light::setLightRadius(const AABB& aabb)
{
if (EntitySettings::InstancePtr()->dragResizeEntitiesSymmetrically())
if (EntitySettings::InstancePtr()->getDragResizeEntitiesSymmetrically())
{
// Leave origin unchanged, calculate the new symmetrical radius
Vector3 delta = aabb.getExtents() - m_doom3Radius.m_radiusTransformed;
Expand Down Expand Up @@ -571,7 +571,7 @@ void Light::renderWireframe(RenderableCollector& collector,
collector.addRenderable(_owner.getColourShader(), *this, localToWorld);

// Render bounding box if selected or the showAllLighRadii flag is set
if (selected || EntitySettings::InstancePtr()->showAllLightRadii())
if (selected || EntitySettings::InstancePtr()->getShowAllLightRadii())
{
if (isProjected())
{
Expand Down
2 changes: 1 addition & 1 deletion radiant/entity/light/LightNode.cpp
Expand Up @@ -360,7 +360,7 @@ void LightNode::renderInactiveComponents(RenderableCollector& collector, const V
// check if we should draw the center of the light anyway
if (selected
&& GlobalSelectionSystem().ComponentMode() != SelectionSystem::eVertex
&& EntitySettings::InstancePtr()->alwaysShowLightVertices())
&& EntitySettings::InstancePtr()->getAlwaysShowLightVertices())
{
if (_light.isProjected())
{
Expand Down
6 changes: 3 additions & 3 deletions radiant/entity/speaker/SpeakerNode.cpp
Expand Up @@ -247,7 +247,7 @@ void SpeakerNode::renderSolid(RenderableCollector& collector,

// Submit the speaker radius if we are selected or the "show all speaker
// radii" option is set
if (isSelected() || EntitySettings::InstancePtr()->showAllSpeakerRadii())
if (isSelected() || EntitySettings::InstancePtr()->getShowAllSpeakerRadii())
{
collector.addRenderable(getFillShader(), _renderableRadii, localToWorld());
}
Expand All @@ -261,7 +261,7 @@ void SpeakerNode::renderWireframe(RenderableCollector& collector,

// Submit the speaker radius if we are selected or the "show all speaker
// radii" option is set
if (isSelected() || EntitySettings::InstancePtr()->showAllSpeakerRadii())
if (isSelected() || EntitySettings::InstancePtr()->getShowAllSpeakerRadii())
{
collector.addRenderable(getWireShader(), _renderableRadii, localToWorld());
}
Expand Down Expand Up @@ -306,7 +306,7 @@ void SpeakerNode::setRadiusFromAABB(const AABB& aabb)
maxTrans = (fabs(delta.y()) > fabs(delta.z())) ? delta.y() : delta.z();
}

if (EntitySettings::InstancePtr()->dragResizeEntitiesSymmetrically())
if (EntitySettings::InstancePtr()->getDragResizeEntitiesSymmetrically())
{
// For a symmetric AABB change, take the extents delta times 2
maxTrans *= 2;
Expand Down

0 comments on commit 8d7a914

Please sign in to comment.