Index: binaries/data/mods/public/simulation/data/territorymanager.rng
===================================================================
--- binaries/data/mods/public/simulation/data/territorymanager.rng
+++ binaries/data/mods/public/simulation/data/territorymanager.rng
@@ -13,5 +13,8 @@
+
+
+
Index: binaries/data/mods/public/simulation/data/territorymanager.xml
===================================================================
--- binaries/data/mods/public/simulation/data/territorymanager.xml
+++ binaries/data/mods/public/simulation/data/territorymanager.xml
@@ -3,4 +3,5 @@
4
0.75
0.85
+ 2
Index: source/graphics/TerritoryTexture.cpp
===================================================================
--- source/graphics/TerritoryTexture.cpp
+++ source/graphics/TerritoryTexture.cpp
@@ -145,7 +145,7 @@
PROFILE("recompute territory texture");
CmpPtr cmpTerritoryManager(m_Simulation, SYSTEM_ENTITY);
- if (!cmpTerritoryManager)
+ if (!cmpTerritoryManager || !cmpTerritoryManager->IsVisible())
return;
std::unique_ptr bitmap = std::make_unique(m_MapSize * m_MapSize * 4);
Index: source/simulation2/components/CCmpTerritoryManager.cpp
===================================================================
--- source/simulation2/components/CCmpTerritoryManager.cpp
+++ source/simulation2/components/CCmpTerritoryManager.cpp
@@ -128,7 +128,7 @@
m_EnableLineDebugOverlays = false;
m_DirtyID = 1;
m_DirtyBlinkingID = 1;
- m_Visible = true;
+
m_ColorChanged = false;
m_AnimTime = 0.0;
@@ -140,6 +140,7 @@
CParamNode externalParamNode;
CParamNode::LoadXML(externalParamNode, L"simulation/data/territorymanager.xml", "territorymanager");
+ m_VisibilityStatus = static_cast(externalParamNode.GetChild("TerritoryManager").GetChild("VisibilityStatus").ToInt());
int impassableCost = externalParamNode.GetChild("TerritoryManager").GetChild("ImpassableCost").ToInt();
ENSURE(0 <= impassableCost && impassableCost <= 255);
@@ -305,14 +306,22 @@
void SetVisibility(bool visible) override
{
- m_Visible = visible;
+ if (visible && m_VisibilityStatus == EVisibilityStatus::OFF)
+ return;
+
+ m_VisibilityStatus = visible ? EVisibilityStatus::VISIBLE : EVisibilityStatus::HIDDEN;
+ }
+
+ bool IsVisible() const override
+ {
+ return m_VisibilityStatus == EVisibilityStatus::VISIBLE;
}
void UpdateColors() override;
private:
- bool m_Visible;
+ EVisibilityStatus m_VisibilityStatus;
};
REGISTER_COMPONENT_TYPE(TerritoryManager)
@@ -696,7 +705,7 @@
void CCmpTerritoryManager::RenderSubmit(SceneCollector& collector, const CFrustum& frustum, bool culling)
{
- if (!m_Visible)
+ if (!IsVisible())
return;
for (size_t i = 0; i < m_BoundaryLines.size(); ++i)
Index: source/simulation2/components/ICmpTerritoryManager.h
===================================================================
--- source/simulation2/components/ICmpTerritoryManager.h
+++ source/simulation2/components/ICmpTerritoryManager.h
@@ -31,6 +31,13 @@
class ICmpTerritoryManager : public IComponent
{
public:
+ enum class EVisibilityStatus
+ {
+ OFF = 0,
+ HIDDEN = 1,
+ VISIBLE = 2
+ };
+
/**
* Returns whether the territory texture needs to be updated.
*/
@@ -105,6 +112,11 @@
*/
virtual void UpdateColors() = 0;
+ /**
+ * Whether the territory lines are visible.
+ */
+ virtual bool IsVisible() const = 0;
+
DECLARE_INTERFACE_TYPE(TerritoryManager)
};
Index: source/simulation2/components/ICmpTerritoryManager.cpp
===================================================================
--- source/simulation2/components/ICmpTerritoryManager.cpp
+++ source/simulation2/components/ICmpTerritoryManager.cpp
@@ -29,4 +29,5 @@
DEFINE_INTERFACE_METHOD("IsTerritoryBlinking", ICmpTerritoryManager, IsTerritoryBlinking)
DEFINE_INTERFACE_METHOD("GetTerritoryPercentage", ICmpTerritoryManager, GetTerritoryPercentage)
DEFINE_INTERFACE_METHOD("UpdateColors", ICmpTerritoryManager, UpdateColors)
+DEFINE_INTERFACE_METHOD("IsVisible", ICmpTerritoryManager, IsVisible)
END_INTERFACE_WRAPPER(TerritoryManager)