Move template items GetRetainInFog and AlwaysVisible from Vision to Visibility.

Refs #2913

This was SVN commit r16022.
This commit is contained in:
Nicolas Auvray 2014-12-05 18:33:59 +00:00
parent 0df90c5c2b
commit b05879e151
41 changed files with 147 additions and 92 deletions

View File

@ -5,7 +5,12 @@ const VIS_VISIBLE = 2;
function Visibility() {} function Visibility() {}
Visibility.prototype.Schema = Visibility.prototype.Schema =
"<empty/>"; "<element name='RetainInFog'>" +
"<data type='boolean'/>" +
"</element>" +
"<element name='AlwaysVisible'>" +
"<data type='boolean'/>" +
"</element>";
Visibility.prototype.Init = function() Visibility.prototype.Init = function()
{ {
@ -29,8 +34,7 @@ Visibility.prototype.GetLosVisibility = function(player, isOutsideFog, forceReta
} }
// Fogged if the 'retain in fog' flag is set, and in a non-visible explored region // Fogged if the 'retain in fog' flag is set, and in a non-visible explored region
var cmpVision = Engine.QueryInterface(this.entity, IID_Vision); if (!forceRetainInFog && !this.GetRetainInFog())
if (!forceRetainInFog && !(cmpVision && cmpVision.GetRetainInFog()))
return VIS_HIDDEN; return VIS_HIDDEN;
var cmpMirage = Engine.QueryInterface(this.entity, IID_Mirage); var cmpMirage = Engine.QueryInterface(this.entity, IID_Mirage);
@ -62,4 +66,14 @@ Visibility.prototype.GetLosVisibility = function(player, isOutsideFog, forceReta
return VIS_HIDDEN; return VIS_HIDDEN;
}; };
Visibility.prototype.GetRetainInFog = function()
{
return this.template.RetainInFog == "true";
};
Visibility.prototype.GetAlwaysVisible = function()
{
return this.template.AlwaysVisible == "true";
};
Engine.RegisterComponentType(IID_Visibility, "Visibility", Visibility); Engine.RegisterComponentType(IID_Visibility, "Visibility", Visibility);

View File

@ -33,8 +33,10 @@
</Texture> </Texture>
</Overlay> </Overlay>
</Selectable> </Selectable>
<Vision> <Visibility>
<RetainInFog>false</RetainInFog> <RetainInFog>false</RetainInFog>
</Visibility>
<Vision>
<Range>100</Range> <Range>100</Range>
</Vision> </Vision>
<VisualActor> <VisualActor>

View File

@ -38,9 +38,11 @@
<StatusBars> <StatusBars>
<HeightOffset>6.0</HeightOffset> <HeightOffset>6.0</HeightOffset>
</StatusBars> </StatusBars>
<Visibility>
<RetainInFog>true</RetainInFog>
</Visibility>
<Vision> <Vision>
<Range>4</Range> <Range>4</Range>
<RetainInFog>true</RetainInFog>
</Vision> </Vision>
<VisualActor> <VisualActor>
<Actor>props/special/eyecandy/bench_1.xml</Actor> <Actor>props/special/eyecandy/bench_1.xml</Actor>

View File

@ -25,9 +25,11 @@
<Selectable> <Selectable>
<EditorOnly/> <EditorOnly/>
</Selectable> </Selectable>
<Visibility>
<RetainInFog>true</RetainInFog>
</Visibility>
<Vision> <Vision>
<Range>72</Range> <Range>72</Range>
<RetainInFog>true</RetainInFog>
</Vision> </Vision>
<VisualActor> <VisualActor>
<Actor>props/special/eyecandy/bridge_edge_hele.xml</Actor> <Actor>props/special/eyecandy/bridge_edge_hele.xml</Actor>

View File

@ -25,9 +25,11 @@
<Selectable> <Selectable>
<EditorOnly/> <EditorOnly/>
</Selectable> </Selectable>
<Visibility>
<RetainInFog>true</RetainInFog>
</Visibility>
<Vision> <Vision>
<Range>72</Range> <Range>72</Range>
<RetainInFog>true</RetainInFog>
</Vision> </Vision>
<VisualActor> <VisualActor>
<Actor>props/special/eyecandy/bridge_edge_wooden.xml</Actor> <Actor>props/special/eyecandy/bridge_edge_wooden.xml</Actor>

View File

@ -35,9 +35,11 @@
<StatusBars> <StatusBars>
<HeightOffset>8.0</HeightOffset> <HeightOffset>8.0</HeightOffset>
</StatusBars> </StatusBars>
<Visibility>
<RetainInFog>true</RetainInFog>
</Visibility>
<Vision> <Vision>
<Range>4</Range> <Range>4</Range>
<RetainInFog>true</RetainInFog>
</Vision> </Vision>
<VisualActor> <VisualActor>
<Actor>props/special/eyecandy/column_doric.xml</Actor> <Actor>props/special/eyecandy/column_doric.xml</Actor>

View File

@ -35,9 +35,11 @@
<StatusBars> <StatusBars>
<HeightOffset>6.0</HeightOffset> <HeightOffset>6.0</HeightOffset>
</StatusBars> </StatusBars>
<Visibility>
<RetainInFog>true</RetainInFog>
</Visibility>
<Vision> <Vision>
<Range>4</Range> <Range>4</Range>
<RetainInFog>true</RetainInFog>
</Vision> </Vision>
<VisualActor> <VisualActor>
<Actor>props/special/eyecandy/column_doric_fallen.xml</Actor> <Actor>props/special/eyecandy/column_doric_fallen.xml</Actor>

View File

@ -35,9 +35,11 @@
<StatusBars> <StatusBars>
<HeightOffset>6.0</HeightOffset> <HeightOffset>6.0</HeightOffset>
</StatusBars> </StatusBars>
<Visibility>
<RetainInFog>true</RetainInFog>
</Visibility>
<Vision> <Vision>
<Range>4</Range> <Range>4</Range>
<RetainInFog>true</RetainInFog>
</Vision> </Vision>
<VisualActor> <VisualActor>
<Actor>props/special/eyecandy/column_doric_fallen_b.xml</Actor> <Actor>props/special/eyecandy/column_doric_fallen_b.xml</Actor>

View File

@ -39,9 +39,11 @@
<HeightOffset>6.0</HeightOffset> <HeightOffset>6.0</HeightOffset>
</StatusBars> </StatusBars>
<TerritoryDecay disable=""/> <TerritoryDecay disable=""/>
<Visibility>
<RetainInFog>true</RetainInFog>
</Visibility>
<Vision> <Vision>
<Range>4</Range> <Range>4</Range>
<RetainInFog>true</RetainInFog>
</Vision> </Vision>
<VisualActor> <VisualActor>
<Actor>temp/fence_wood_long_a.xml</Actor> <Actor>temp/fence_wood_long_a.xml</Actor>

View File

@ -39,9 +39,11 @@
<HeightOffset>6.0</HeightOffset> <HeightOffset>6.0</HeightOffset>
</StatusBars> </StatusBars>
<TerritoryDecay disable=""/> <TerritoryDecay disable=""/>
<Visibility>
<RetainInFog>true</RetainInFog>
</Visibility>
<Vision> <Vision>
<Range>4</Range> <Range>4</Range>
<RetainInFog>true</RetainInFog>
</Vision> </Vision>
<VisualActor> <VisualActor>
<Actor>temp/fence_wood_short_a.xml</Actor> <Actor>temp/fence_wood_short_a.xml</Actor>

View File

@ -36,9 +36,11 @@
<HeightOffset>6.0</HeightOffset> <HeightOffset>6.0</HeightOffset>
</StatusBars> </StatusBars>
<TerritoryDecay disable=""/> <TerritoryDecay disable=""/>
<Visibility>
<RetainInFog>true</RetainInFog>
</Visibility>
<Vision> <Vision>
<Range>4</Range> <Range>4</Range>
<RetainInFog>true</RetainInFog>
</Vision> </Vision>
<VisualActor> <VisualActor>
<Actor>props/special/eyecandy/fence_stone_medit.xml</Actor> <Actor>props/special/eyecandy/fence_stone_medit.xml</Actor>

View File

@ -43,9 +43,11 @@
<Radius>40</Radius> <Radius>40</Radius>
<Weight>65536</Weight> <Weight>65536</Weight>
</TerritoryInfluence> </TerritoryInfluence>
<Visibility>
<RetainInFog>true</RetainInFog>
</Visibility>
<Vision> <Vision>
<Range>20</Range> <Range>20</Range>
<RetainInFog>true</RetainInFog>
</Vision> </Vision>
<VisualActor> <VisualActor>
<Actor>structures/hellenes/propylaea.xml</Actor> <Actor>structures/hellenes/propylaea.xml</Actor>

View File

@ -56,9 +56,11 @@
units/thrace_black_cloak units/thrace_black_cloak
</Entities> </Entities>
</ProductionQueue> </ProductionQueue>
<Visibility>
<RetainInFog>true</RetainInFog>
</Visibility>
<Vision> <Vision>
<Range>40</Range> <Range>40</Range>
<RetainInFog>true</RetainInFog>
</Vision> </Vision>
<VisualActor> <VisualActor>
<Actor>special/greek_stoa_great.xml</Actor> <Actor>special/greek_stoa_great.xml</Actor>

View File

@ -44,9 +44,11 @@
<Radius>36</Radius> <Radius>36</Radius>
<Weight>65536</Weight> <Weight>65536</Weight>
</TerritoryInfluence> </TerritoryInfluence>
<Visibility>
<RetainInFog>true</RetainInFog>
</Visibility>
<Vision> <Vision>
<Range>40</Range> <Range>40</Range>
<RetainInFog>true</RetainInFog>
</Vision> </Vision>
<VisualActor> <VisualActor>
<Actor>special/greek_stoa.xml</Actor> <Actor>special/greek_stoa.xml</Actor>

View File

@ -34,9 +34,11 @@
<Static width="4.0" depth="4.0"/> <Static width="4.0" depth="4.0"/>
</Obstruction> </Obstruction>
<TerritoryDecay disable=""/> <TerritoryDecay disable=""/>
<Visibility>
<RetainInFog>true</RetainInFog>
</Visibility>
<Vision> <Vision>
<Range>12</Range> <Range>12</Range>
<RetainInFog>true</RetainInFog>
</Vision> </Vision>
<VisualActor> <VisualActor>
<Actor>props/special/eyecandy/obelisk.xml</Actor> <Actor>props/special/eyecandy/obelisk.xml</Actor>

View File

@ -36,9 +36,11 @@
<BarHeight>0.6</BarHeight> <BarHeight>0.6</BarHeight>
<HeightOffset>12.0</HeightOffset> <HeightOffset>12.0</HeightOffset>
</StatusBars> </StatusBars>
<Visibility>
<RetainInFog>true</RetainInFog>
</Visibility>
<Vision> <Vision>
<Range>72</Range> <Range>72</Range>
<RetainInFog>true</RetainInFog>
</Vision> </Vision>
<VisualActor> <VisualActor>
<Actor>special/pyramid.xml</Actor> <Actor>special/pyramid.xml</Actor>

View File

@ -30,9 +30,11 @@
<BarHeight>0.6</BarHeight> <BarHeight>0.6</BarHeight>
<HeightOffset>12.0</HeightOffset> <HeightOffset>12.0</HeightOffset>
</StatusBars> </StatusBars>
<Visibility>
<RetainInFog>true</RetainInFog>
</Visibility>
<Vision> <Vision>
<Range>40</Range> <Range>40</Range>
<RetainInFog>true</RetainInFog>
</Vision> </Vision>
<VisualActor> <VisualActor>
<Actor>special/pyramid_minor.xml</Actor> <Actor>special/pyramid_minor.xml</Actor>

View File

@ -39,9 +39,11 @@
<HeightOffset>6.0</HeightOffset> <HeightOffset>6.0</HeightOffset>
</StatusBars> </StatusBars>
<TerritoryDecay disable=""/> <TerritoryDecay disable=""/>
<Visibility>
<RetainInFog>true</RetainInFog>
</Visibility>
<Vision> <Vision>
<Range>4</Range> <Range>4</Range>
<RetainInFog>true</RetainInFog>
</Vision> </Vision>
<VisualActor> <VisualActor>
<Actor>props/special/eyecandy/table_rectangle.xml</Actor> <Actor>props/special/eyecandy/table_rectangle.xml</Actor>

View File

@ -39,9 +39,11 @@
<HeightOffset>6.0</HeightOffset> <HeightOffset>6.0</HeightOffset>
</StatusBars> </StatusBars>
<TerritoryDecay disable=""/> <TerritoryDecay disable=""/>
<Visibility>
<RetainInFog>true</RetainInFog>
</Visibility>
<Vision> <Vision>
<Range>4</Range> <Range>4</Range>
<RetainInFog>true</RetainInFog>
</Vision> </Vision>
<VisualActor> <VisualActor>
<Actor>props/special/eyecandy/table_square.xml</Actor> <Actor>props/special/eyecandy/table_square.xml</Actor>

View File

@ -27,9 +27,11 @@
<BarHeight>0.6</BarHeight> <BarHeight>0.6</BarHeight>
<HeightOffset>12.0</HeightOffset> <HeightOffset>12.0</HeightOffset>
</StatusBars> </StatusBars>
<Visibility>
<RetainInFog>true</RetainInFog>
</Visibility>
<Vision> <Vision>
<Range>40</Range> <Range>40</Range>
<RetainInFog>true</RetainInFog>
</Vision> </Vision>
<VisualActor> <VisualActor>
<Actor>props/special/eyecandy/greek_temple_unfinished.xml</Actor> <Actor>props/special/eyecandy/greek_temple_unfinished.xml</Actor>

View File

@ -6,11 +6,12 @@
<Floating>false</Floating> <Floating>false</Floating>
<TurnRate>6.0</TurnRate> <TurnRate>6.0</TurnRate>
</Position> </Position>
<Visibility/> <Visibility>
<Vision>
<Range>0</Range>
<RetainInFog>true</RetainInFog> <RetainInFog>true</RetainInFog>
<AlwaysVisible>false</AlwaysVisible> <AlwaysVisible>false</AlwaysVisible>
</Visibility>
<Vision>
<Range>0</Range>
</Vision> </Vision>
<VisualActor> <VisualActor>
<Actor>(should be overridden)</Actor> <Actor>(should be overridden)</Actor>

View File

@ -24,9 +24,9 @@
<Selectable> <Selectable>
<EditorOnly/> <EditorOnly/>
</Selectable> </Selectable>
<Vision> <Visibility>
<AlwaysVisible>true</AlwaysVisible> <AlwaysVisible>true</AlwaysVisible>
</Vision> </Visibility>
<VisualActor> <VisualActor>
<Actor>props/special/common/marker_object_sound.xml</Actor> <Actor>props/special/common/marker_object_sound.xml</Actor>
</VisualActor> </VisualActor>

View File

@ -3,7 +3,7 @@
<VisualActor> <VisualActor>
<Actor>props/special/common/waypoint_flag.xml</Actor> <Actor>props/special/common/waypoint_flag.xml</Actor>
</VisualActor> </VisualActor>
<Vision> <Visibility>
<AlwaysVisible>true</AlwaysVisible> <AlwaysVisible>true</AlwaysVisible>
</Vision> </Visibility>
</Entity> </Entity>

View File

@ -26,9 +26,11 @@
<TerritoryInfluence> <TerritoryInfluence>
<Radius>100</Radius> <Radius>100</Radius>
</TerritoryInfluence> </TerritoryInfluence>
<Visibility>
<RetainInFog>true</RetainInFog>
</Visibility>
<Vision> <Vision>
<Range>72</Range> <Range>72</Range>
<RetainInFog>true</RetainInFog>
</Vision> </Vision>
<VisualActor> <VisualActor>
<FoundationActor>structures/fndn_8x8.xml</FoundationActor> <FoundationActor>structures/fndn_8x8.xml</FoundationActor>

View File

@ -20,11 +20,12 @@
<BarHeight>0.333</BarHeight> <BarHeight>0.333</BarHeight>
<HeightOffset>5.0</HeightOffset> <HeightOffset>5.0</HeightOffset>
</StatusBars> </StatusBars>
<Visibility/> <Visibility>
<Vision>
<Range>0</Range>
<RetainInFog>true</RetainInFog> <RetainInFog>true</RetainInFog>
<AlwaysVisible>false</AlwaysVisible> <AlwaysVisible>false</AlwaysVisible>
</Visibility>
<Vision>
<Range>0</Range>
</Vision> </Vision>
<VisualActor> <VisualActor>
<SilhouetteDisplay>false</SilhouetteDisplay> <SilhouetteDisplay>false</SilhouetteDisplay>

View File

@ -12,10 +12,12 @@
<Floating>false</Floating> <Floating>false</Floating>
<TurnRate>6.0</TurnRate> <TurnRate>6.0</TurnRate>
</Position> </Position>
<Vision> <Visibility>
<Range>0</Range>
<RetainInFog>true</RetainInFog> <RetainInFog>true</RetainInFog>
<AlwaysVisible>false</AlwaysVisible> <AlwaysVisible>false</AlwaysVisible>
</Visibility>
<Vision>
<Range>0</Range>
</Vision> </Vision>
<VisualActor> <VisualActor>
<Actor>structures/rubble_stone_3x3.xml</Actor> <Actor>structures/rubble_stone_3x3.xml</Actor>

View File

@ -101,11 +101,12 @@
<TerritoryDecay> <TerritoryDecay>
<HealthDecayRate>5</HealthDecayRate> <HealthDecayRate>5</HealthDecayRate>
</TerritoryDecay> </TerritoryDecay>
<Visibility/> <Visibility>
<Vision>
<Range>40</Range>
<RetainInFog>true</RetainInFog> <RetainInFog>true</RetainInFog>
<AlwaysVisible>false</AlwaysVisible> <AlwaysVisible>false</AlwaysVisible>
</Visibility>
<Vision>
<Range>40</Range>
</Vision> </Vision>
<VisualActor> <VisualActor>
<ConstructionPreview/> <ConstructionPreview/>

View File

@ -26,9 +26,11 @@
</Obstruction> </Obstruction>
<OverlayRenderer/> <OverlayRenderer/>
<Settlement/> <Settlement/>
<Vision> <Visibility>
<Range>0</Range>
<RetainInFog>true</RetainInFog> <RetainInFog>true</RetainInFog>
<AlwaysVisible>false</AlwaysVisible> <AlwaysVisible>false</AlwaysVisible>
</Visibility>
<Vision>
<Range>0</Range>
</Vision> </Vision>
</Entity> </Entity>

View File

@ -75,9 +75,11 @@
<Radius>100</Radius> <Radius>100</Radius>
<Weight>65536</Weight> <Weight>65536</Weight>
</TerritoryInfluence> </TerritoryInfluence>
<Visibility>
<RetainInFog>true</RetainInFog>
</Visibility>
<Vision> <Vision>
<Range>72</Range> <Range>72</Range>
<RetainInFog>true</RetainInFog>
</Vision> </Vision>
<VisualActor> <VisualActor>
<FoundationActor>structures/fndn_6x6.xml</FoundationActor> <FoundationActor>structures/fndn_6x6.xml</FoundationActor>

View File

@ -104,11 +104,12 @@
<PassabilityClass>default</PassabilityClass> <PassabilityClass>default</PassabilityClass>
<CostClass>default</CostClass> <CostClass>default</CostClass>
</UnitMotion> </UnitMotion>
<Visibility/> <Visibility>
<Vision>
<Range>10</Range>
<RetainInFog>false</RetainInFog> <RetainInFog>false</RetainInFog>
<AlwaysVisible>false</AlwaysVisible> <AlwaysVisible>false</AlwaysVisible>
</Visibility>
<Vision>
<Range>10</Range>
</Vision> </Vision>
<VisualActor> <VisualActor>
<SilhouetteDisplay>true</SilhouetteDisplay> <SilhouetteDisplay>true</SilhouetteDisplay>

View File

@ -38,8 +38,10 @@
<Speed>15.0</Speed> <Speed>15.0</Speed>
</Run> </Run>
</UnitMotion> </UnitMotion>
<Vision> <Visibility>
<RetainInFog>true</RetainInFog> <RetainInFog>true</RetainInFog>
</Visibility>
<Vision>
<Range>0</Range> <Range>0</Range>
</Vision> </Vision>
<VisualActor> <VisualActor>

View File

@ -38,10 +38,12 @@
<PassabilityClass>unrestricted</PassabilityClass> <PassabilityClass>unrestricted</PassabilityClass>
<CostClass>default</CostClass> <CostClass>default</CostClass>
</UnitMotion> </UnitMotion>
<Vision> <Visibility>
<RetainInFog>true</RetainInFog> <RetainInFog>true</RetainInFog>
<Range>0</Range>
<AlwaysVisible>false</AlwaysVisible> <AlwaysVisible>false</AlwaysVisible>
</Visibility>
<Vision>
<Range>0</Range>
</Vision> </Vision>
<VisualActor> <VisualActor>
<SilhouetteDisplay>false</SilhouetteDisplay> <SilhouetteDisplay>false</SilhouetteDisplay>

View File

@ -381,7 +381,7 @@ void CTemplateLoader::CopyPreviewSubset(CParamNode& out, const CParamNode& in, b
CParamNode::LoadXMLString(out, "<Entity><VisualActor><DisableShadows/></VisualActor></Entity>"); CParamNode::LoadXMLString(out, "<Entity><VisualActor><DisableShadows/></VisualActor></Entity>");
// Previews should always be visible in fog-of-war/etc // Previews should always be visible in fog-of-war/etc
CParamNode::LoadXMLString(out, "<Entity><Vision><Range>0</Range><RetainInFog>false</RetainInFog><AlwaysVisible>true</AlwaysVisible></Vision></Entity>"); CParamNode::LoadXMLString(out, "<Entity><Visibility><RetainInFog>false</RetainInFog><AlwaysVisible>true</AlwaysVisible></Visibility></Entity>");
} }
if (corpse) if (corpse)
@ -395,7 +395,7 @@ void CTemplateLoader::CopyPreviewSubset(CParamNode& out, const CParamNode& in, b
CParamNode::LoadXMLString(out, "<Entity><VisualActor><SilhouetteDisplay>false</SilhouetteDisplay></VisualActor></Entity>"); CParamNode::LoadXMLString(out, "<Entity><VisualActor><SilhouetteDisplay>false</SilhouetteDisplay></VisualActor></Entity>");
// Corpses should remain visible in fog-of-war // Corpses should remain visible in fog-of-war
CParamNode::LoadXMLString(out, "<Entity><Vision><Range>0</Range><RetainInFog>true</RetainInFog><AlwaysVisible>false</AlwaysVisible></Vision></Entity>"); CParamNode::LoadXMLString(out, "<Entity><Visibility><RetainInFog>true</RetainInFog><AlwaysVisible>false</AlwaysVisible></Visibility></Entity>");
} }
} }
@ -409,7 +409,6 @@ void CTemplateLoader::CopyMirageSubset(CParamNode& out, const CParamNode& in)
permittedComponentTypes.insert("Ownership"); permittedComponentTypes.insert("Ownership");
permittedComponentTypes.insert("Position"); permittedComponentTypes.insert("Position");
permittedComponentTypes.insert("Selectable"); permittedComponentTypes.insert("Selectable");
permittedComponentTypes.insert("Visibility");
permittedComponentTypes.insert("VisualActor"); permittedComponentTypes.insert("VisualActor");
CParamNode::LoadXMLString(out, "<Entity/>"); CParamNode::LoadXMLString(out, "<Entity/>");
@ -431,7 +430,7 @@ void CTemplateLoader::CopyMirageSubset(CParamNode& out, const CParamNode& in)
// Set the entity as mirage entity // Set the entity as mirage entity
CParamNode::LoadXMLString(out, "<Entity><Mirage/></Entity>"); CParamNode::LoadXMLString(out, "<Entity><Mirage/></Entity>");
CParamNode::LoadXMLString(out, "<Entity><Vision><Range>0</Range><RetainInFog>true</RetainInFog><AlwaysVisible>false</AlwaysVisible></Vision></Entity>"); CParamNode::LoadXMLString(out, "<Entity><Visibility><RetainInFog>true</RetainInFog><AlwaysVisible>false</AlwaysVisible></Visibility></Entity>");
} }
void CTemplateLoader::CopyFoundationSubset(CParamNode& out, const CParamNode& in) void CTemplateLoader::CopyFoundationSubset(CParamNode& out, const CParamNode& in)

View File

@ -417,10 +417,10 @@ public:
// Store the LOS data, if any // Store the LOS data, if any
CmpPtr<ICmpVision> cmpVision(GetSimContext(), ent); CmpPtr<ICmpVision> cmpVision(GetSimContext(), ent);
if (cmpVision) if (cmpVision)
{
entdata.visionRange = cmpVision->GetRange(); entdata.visionRange = cmpVision->GetRange();
entdata.retainInFog = (cmpVision->GetRetainInFog() ? 1 : 0); CmpPtr<ICmpVisibility> cmpVisibility(GetSimContext(), ent);
} if (cmpVisibility)
entdata.retainInFog = (cmpVisibility->GetRetainInFog() ? 1 : 0);
// Remember this entity // Remember this entity
m_EntityData.insert(ent, entdata); m_EntityData.insert(ent, entdata);

View File

@ -25,7 +25,7 @@
#include "ICmpPosition.h" #include "ICmpPosition.h"
#include "ICmpRangeManager.h" #include "ICmpRangeManager.h"
#include "ICmpSelectable.h" #include "ICmpSelectable.h"
#include "ICmpVision.h" #include "ICmpVisibility.h"
#include "graphics/Frustum.h" #include "graphics/Frustum.h"
#include "graphics/ModelAbstract.h" #include "graphics/ModelAbstract.h"
@ -388,8 +388,8 @@ void CCmpUnitRenderer::UpdateVisibility(SUnit& unit)
{ {
// The 'always visible' flag means we should always render the unit // The 'always visible' flag means we should always render the unit
// (regardless of whether the LOS system thinks it's visible) // (regardless of whether the LOS system thinks it's visible)
CmpPtr<ICmpVision> cmpVision(unit.entity); CmpPtr<ICmpVisibility> cmpVisibility(unit.entity);
if (cmpVision && cmpVision->GetAlwaysVisible()) if (cmpVisibility && cmpVisibility->GetAlwaysVisible())
unit.visibility = ICmpRangeManager::VIS_VISIBLE; unit.visibility = ICmpRangeManager::VIS_VISIBLE;
else else
{ {

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2012 Wildfire Games. /* Copyright (C) 2014 Wildfire Games.
* This file is part of 0 A.D. * This file is part of 0 A.D.
* *
* 0 A.D. is free software: you can redistribute it and/or modify * 0 A.D. is free software: you can redistribute it and/or modify
@ -38,28 +38,18 @@ public:
// Template state: // Template state:
entity_pos_t m_Range, m_BaseRange; entity_pos_t m_Range, m_BaseRange;
bool m_RetainInFog;
bool m_AlwaysVisible;
static std::string GetSchema() static std::string GetSchema()
{ {
return return
"<element name='Range'>" "<element name='Range'>"
"<data type='nonNegativeInteger'/>" "<data type='nonNegativeInteger'/>"
"</element>"
"<element name='RetainInFog'>"
"<data type='boolean'/>"
"</element>"
"<element name='AlwaysVisible'>"
"<data type='boolean'/>"
"</element>"; "</element>";
} }
virtual void Init(const CParamNode& paramNode) virtual void Init(const CParamNode& paramNode)
{ {
m_BaseRange = m_Range = paramNode.GetChild("Range").ToFixed(); m_BaseRange = m_Range = paramNode.GetChild("Range").ToFixed();
m_RetainInFog = paramNode.GetChild("RetainInFog").ToBool();
m_AlwaysVisible = paramNode.GetChild("AlwaysVisible").ToBool();
} }
virtual void Deinit() virtual void Deinit()
@ -105,16 +95,6 @@ public:
{ {
return m_Range; return m_Range;
} }
virtual bool GetRetainInFog()
{
return m_RetainInFog;
}
virtual bool GetAlwaysVisible()
{
return m_AlwaysVisible;
}
}; };
REGISTER_COMPONENT_TYPE(Vision) REGISTER_COMPONENT_TYPE(Vision)

View File

@ -30,7 +30,7 @@
#include "ICmpTerrain.h" #include "ICmpTerrain.h"
#include "ICmpUnitMotion.h" #include "ICmpUnitMotion.h"
#include "ICmpValueModificationManager.h" #include "ICmpValueModificationManager.h"
#include "ICmpVision.h" #include "ICmpVisibility.h"
#include "graphics/Decal.h" #include "graphics/Decal.h"
#include "graphics/Frustum.h" #include "graphics/Frustum.h"
@ -562,8 +562,8 @@ void CCmpVisualActor::InitModel(const CParamNode& paramNode)
if (paramNode.GetChild("SilhouetteOccluder").ToBool()) if (paramNode.GetChild("SilhouetteOccluder").ToBool())
modelFlags |= MODELFLAG_SILHOUETTE_OCCLUDER; modelFlags |= MODELFLAG_SILHOUETTE_OCCLUDER;
CmpPtr<ICmpVision> cmpVision(GetEntityHandle()); CmpPtr<ICmpVisibility> cmpVisibility(GetEntityHandle());
if (cmpVision && cmpVision->GetAlwaysVisible()) if (cmpVisibility && cmpVisibility->GetAlwaysVisible())
modelFlags |= MODELFLAG_IGNORE_LOS; modelFlags |= MODELFLAG_IGNORE_LOS;
model.ToCModel()->AddFlagsRec(modelFlags); model.ToCModel()->AddFlagsRec(modelFlags);

View File

@ -47,6 +47,16 @@ public:
return ICmpRangeManager::VIS_HIDDEN; return ICmpRangeManager::VIS_HIDDEN;
} }
} }
virtual bool GetRetainInFog()
{
return m_Script.Call<bool>("GetRetainInFog");
}
virtual bool GetAlwaysVisible()
{
return m_Script.Call<bool>("GetAlwaysVisible");
}
}; };
REGISTER_COMPONENT_SCRIPT_WRAPPER(VisibilityScripted) REGISTER_COMPONENT_SCRIPT_WRAPPER(VisibilityScripted)

View File

@ -27,6 +27,10 @@ class ICmpVisibility : public IComponent
public: public:
virtual ICmpRangeManager::ELosVisibility GetLosVisibility(player_id_t player, bool isOutsideFog, bool forceRetainInFog) = 0; virtual ICmpRangeManager::ELosVisibility GetLosVisibility(player_id_t player, bool isOutsideFog, bool forceRetainInFog) = 0;
virtual bool GetRetainInFog() = 0;
virtual bool GetAlwaysVisible() = 0;
DECLARE_INTERFACE_TYPE(Visibility) DECLARE_INTERFACE_TYPE(Visibility)
}; };

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2010 Wildfire Games. /* Copyright (C) 2014 Wildfire Games.
* This file is part of 0 A.D. * This file is part of 0 A.D.
* *
* 0 A.D. is free software: you can redistribute it and/or modify * 0 A.D. is free software: you can redistribute it and/or modify
@ -23,6 +23,4 @@
BEGIN_INTERFACE_WRAPPER(Vision) BEGIN_INTERFACE_WRAPPER(Vision)
DEFINE_INTERFACE_METHOD_0("GetRange", entity_pos_t, ICmpVision, GetRange) DEFINE_INTERFACE_METHOD_0("GetRange", entity_pos_t, ICmpVision, GetRange)
DEFINE_INTERFACE_METHOD_0("GetRetainInFog", bool, ICmpVision, GetRetainInFog)
DEFINE_INTERFACE_METHOD_0("GetAlwaysVisible", bool, ICmpVision, GetAlwaysVisible)
END_INTERFACE_WRAPPER(Vision) END_INTERFACE_WRAPPER(Vision)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2010 Wildfire Games. /* Copyright (C) 2014 Wildfire Games.
* This file is part of 0 A.D. * This file is part of 0 A.D.
* *
* 0 A.D. is free software: you can redistribute it and/or modify * 0 A.D. is free software: you can redistribute it and/or modify
@ -23,17 +23,13 @@
#include "simulation2/helpers/Position.h" #include "simulation2/helpers/Position.h"
/** /**
* Vision (LOS etc) interface (typically implemented by a scripted component). * Vision range interface
*/ */
class ICmpVision : public IComponent class ICmpVision : public IComponent
{ {
public: public:
virtual entity_pos_t GetRange() = 0; virtual entity_pos_t GetRange() = 0;
virtual bool GetRetainInFog() = 0;
virtual bool GetAlwaysVisible() = 0;
DECLARE_INTERFACE_TYPE(Vision) DECLARE_INTERFACE_TYPE(Vision)
}; };