Mod Interface: Enable setting territory visibility

based on a patch by: aeonios

`off` means that the territory visibility cannot be changed
`hidden` means that it's hidden by default but can be enabled
`visible` means it's visible by default
This commit is contained in:
Stan
2024-11-03 00:05:26 +01:00
parent dc60a095dc
commit fd78034885
8 changed files with 41 additions and 7 deletions
@@ -19,5 +19,12 @@
<element name="BorderSeparation">
<data type="decimal"/>
</element>
<element name="VisibilityStatus">
<choice>
<value>off</value>
<value>hidden</value>
<value>visible</value>
</choice>
</element>
</interleave>
</element>
@@ -3,4 +3,5 @@
<ImpassableCost>4</ImpassableCost>
<BorderThickness>0.75</BorderThickness>
<BorderSeparation>0.85</BorderSeparation>
<VisibilityStatus>visible</VisibilityStatus>
</TerritoryManager>
@@ -13,5 +13,12 @@
<element name="BorderSeparation">
<data type="decimal"/>
</element>
<element name="VisibilityStatus">
<choice>
<value>off</value>
<value>hidden</value>
<value>visible</value>
</choice>
</element>
</interleave>
</element>
@@ -3,4 +3,5 @@
<ImpassableCost>4</ImpassableCost>
<BorderThickness>0.75</BorderThickness>
<BorderSeparation>0.85</BorderSeparation>
<VisibilityStatus>visible</VisibilityStatus>
</TerritoryManager>
+2 -2
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 2022 Wildfire Games.
/* Copyright (C) 2024 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@@ -147,7 +147,7 @@ void CTerritoryTexture::RecomputeTexture(Renderer::Backend::IDeviceCommandContex
PROFILE("recompute territory texture");
CmpPtr<ICmpTerritoryManager> cmpTerritoryManager(m_Simulation, SYSTEM_ENTITY);
if (!cmpTerritoryManager)
if (!cmpTerritoryManager || !cmpTerritoryManager->IsVisible())
return;
std::unique_ptr<u8[]> bitmap = std::make_unique<u8[]>(m_MapSize * m_MapSize * 4);
@@ -128,7 +128,6 @@ public:
m_EnableLineDebugOverlays = false;
m_DirtyID = 1;
m_DirtyBlinkingID = 1;
m_Visible = true;
m_ColorChanged = false;
m_AnimTime = 0.0;
@@ -144,6 +143,11 @@ public:
int impassableCost = externalParamNode.GetChild("TerritoryManager").GetChild("ImpassableCost").ToInt();
ENSURE(0 <= impassableCost && impassableCost <= 255);
m_ImpassableCost = (u8)impassableCost;
const std::string& visibilityStatus = externalParamNode.GetChild("TerritoryManager").GetChild("VisibilityStatus").ToString();
m_Enabled = visibilityStatus != "off";
m_Visible = m_Enabled && visibilityStatus == "visible";
m_BorderThickness = externalParamNode.GetChild("TerritoryManager").GetChild("BorderThickness").ToFixed().ToFloat();
m_BorderSeparation = externalParamNode.GetChild("TerritoryManager").GetChild("BorderSeparation").ToFixed().ToFloat();
}
@@ -305,14 +309,22 @@ public:
void SetVisibility(bool visible) override
{
if (!m_Enabled)
return;
m_Visible = visible;
}
bool IsVisible() const override
{
return m_Enabled && m_Visible;
}
void UpdateColors() override;
private:
bool m_Visible;
bool m_Enabled;
};
REGISTER_COMPONENT_TYPE(TerritoryManager)
@@ -716,7 +728,7 @@ void CCmpTerritoryManager::Interpolate(float frameTime, float UNUSED(frameOffset
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)
@@ -1,4 +1,4 @@
/* Copyright (C) 2021 Wildfire Games.
/* Copyright (C) 2024 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@@ -29,4 +29,5 @@ DEFINE_INTERFACE_METHOD("SetTerritoryBlinking", ICmpTerritoryManager, SetTerrito
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)
@@ -1,4 +1,4 @@
/* Copyright (C) 2020 Wildfire Games.
/* Copyright (C) 2024 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@@ -105,6 +105,11 @@ public:
*/
virtual void UpdateColors() = 0;
/**
* Whether the territory lines are visible.
*/
virtual bool IsVisible() const = 0;
DECLARE_INTERFACE_TYPE(TerritoryManager)
};