Add flag to VisualActor for entities that should only be visible in Atlas. Patch by KareemErgawy. Fixes #1411.
This was SVN commit r13465.
This commit is contained in:
parent
5246e9a576
commit
29549561e1
@ -3,5 +3,6 @@
|
||||
<VisualActor>
|
||||
<SilhouetteDisplay>false</SilhouetteDisplay>
|
||||
<SilhouetteOccluder>false</SilhouetteOccluder>
|
||||
<VisibleInAtlasOnly>false</VisibleInAtlasOnly>
|
||||
</VisualActor>
|
||||
</Entity>
|
||||
|
@ -4,6 +4,7 @@
|
||||
<Actor>example</Actor>
|
||||
<SilhouetteDisplay>false</SilhouetteDisplay>
|
||||
<SilhouetteOccluder>false</SilhouetteOccluder>
|
||||
<VisibleInAtlasOnly>false</VisibleInAtlasOnly>
|
||||
</VisualActor>
|
||||
<Selectable/>
|
||||
<Position>
|
||||
|
@ -4,6 +4,7 @@
|
||||
<Actor>example</Actor>
|
||||
<SilhouetteDisplay>false</SilhouetteDisplay>
|
||||
<SilhouetteOccluder>false</SilhouetteOccluder>
|
||||
<VisibleInAtlasOnly>false</VisibleInAtlasOnly>
|
||||
</VisualActor>
|
||||
<Selectable/>
|
||||
<Position>
|
||||
|
@ -15,5 +15,6 @@
|
||||
<Actor>(should be overridden)</Actor>
|
||||
<SilhouetteDisplay>false</SilhouetteDisplay>
|
||||
<SilhouetteOccluder>false</SilhouetteOccluder>
|
||||
<VisibleInAtlasOnly>false</VisibleInAtlasOnly>
|
||||
</VisualActor>
|
||||
</Entity>
|
||||
|
@ -40,5 +40,6 @@
|
||||
<SilhouetteDisplay>false</SilhouetteDisplay>
|
||||
<SilhouetteOccluder>true</SilhouetteOccluder>
|
||||
<Actor>structures/hellenes/wall_medium.xml</Actor>
|
||||
<VisibleInAtlasOnly>true</VisibleInAtlasOnly>
|
||||
</VisualActor>
|
||||
</Entity>
|
||||
|
@ -40,5 +40,6 @@
|
||||
<SilhouetteDisplay>false</SilhouetteDisplay>
|
||||
<SilhouetteOccluder>true</SilhouetteOccluder>
|
||||
<Actor>structures/hellenes/wall_medium.xml</Actor>
|
||||
<VisibleInAtlasOnly>true</VisibleInAtlasOnly>
|
||||
</VisualActor>
|
||||
</Entity>
|
||||
|
@ -27,5 +27,6 @@
|
||||
<VisualActor>
|
||||
<SilhouetteDisplay>false</SilhouetteDisplay>
|
||||
<SilhouetteOccluder>true</SilhouetteOccluder>
|
||||
<VisibleInAtlasOnly>false</VisibleInAtlasOnly>
|
||||
</VisualActor>
|
||||
</Entity>
|
||||
|
@ -21,5 +21,6 @@
|
||||
<Actor>structures/rubble_stone_3x3.xml</Actor>
|
||||
<SilhouetteDisplay>false</SilhouetteDisplay>
|
||||
<SilhouetteOccluder>false</SilhouetteOccluder>
|
||||
<VisibleInAtlasOnly>false</VisibleInAtlasOnly>
|
||||
</VisualActor>
|
||||
</Entity>
|
||||
|
@ -104,5 +104,6 @@
|
||||
<ConstructionPreview/>
|
||||
<SilhouetteDisplay>false</SilhouetteDisplay>
|
||||
<SilhouetteOccluder>true</SilhouetteOccluder>
|
||||
<VisibleInAtlasOnly>false</VisibleInAtlasOnly>
|
||||
</VisualActor>
|
||||
</Entity>
|
||||
|
@ -119,5 +119,6 @@
|
||||
<VisualActor>
|
||||
<SilhouetteDisplay>true</SilhouetteDisplay>
|
||||
<SilhouetteOccluder>false</SilhouetteOccluder>
|
||||
<VisibleInAtlasOnly>false</VisibleInAtlasOnly>
|
||||
</VisualActor>
|
||||
</Entity>
|
||||
|
@ -62,6 +62,7 @@ public:
|
||||
|
||||
DEFAULT_COMPONENT_ALLOCATOR(VisualActor)
|
||||
|
||||
private:
|
||||
std::wstring m_ActorName;
|
||||
CUnit* m_Unit;
|
||||
|
||||
@ -85,9 +86,17 @@ public:
|
||||
bool m_ConstructionPreview;
|
||||
fixed m_ConstructionProgress;
|
||||
|
||||
bool m_VisibleInAtlasOnly;
|
||||
|
||||
bool m_NeedsInterpolation;
|
||||
bool m_PositionChanged;
|
||||
|
||||
/// Whether the visual actor has been rendered at least once.
|
||||
/// Necessary because the visibility update runs on simulation update,
|
||||
/// which may not occur immediately if the game starts paused.
|
||||
bool m_PreviouslyRendered;
|
||||
|
||||
public:
|
||||
static std::string GetSchema()
|
||||
{
|
||||
return
|
||||
@ -153,7 +162,10 @@ public:
|
||||
"</element>"
|
||||
"</choice>"
|
||||
"</element>"
|
||||
"</optional>";
|
||||
"</optional>"
|
||||
"<element name='VisibleInAtlasOnly'>"
|
||||
"<data type='boolean'/>"
|
||||
"</element>";
|
||||
}
|
||||
|
||||
virtual void Init(const CParamNode& paramNode)
|
||||
@ -173,6 +185,8 @@ public:
|
||||
else
|
||||
m_ActorName = paramNode.GetChild("Actor").ToString();
|
||||
|
||||
m_VisibleInAtlasOnly = paramNode.GetChild("VisibleInAtlasOnly").ToBool();
|
||||
|
||||
InitModel(paramNode);
|
||||
|
||||
// We need to select animation even if graphics are disabled, as this modifies serialized state
|
||||
@ -497,11 +511,6 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
/// Whether the visual actor has been rendered at least once.
|
||||
/// Necessary because the visibility update runs on simulation update,
|
||||
/// which may not occur immediately if the game starts paused.
|
||||
bool m_PreviouslyRendered;
|
||||
|
||||
/// Helper function shared by component init and actor reloading
|
||||
void InitModel(const CParamNode& paramNode);
|
||||
|
||||
@ -831,5 +840,8 @@ void CCmpVisualActor::RenderSubmit(SceneCollector& collector, const CFrustum& fr
|
||||
if (culling && !frustum.IsBoxVisible(CVector3D(0, 0, 0), model.GetWorldBoundsRec()))
|
||||
return;
|
||||
|
||||
if (!g_AtlasGameLoop->running && m_VisibleInAtlasOnly)
|
||||
return;
|
||||
|
||||
collector.SubmitRecursive(&model);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2012 Wildfire Games.
|
||||
/* Copyright (C) 2013 Wildfire Games.
|
||||
* This file is part of 0 A.D.
|
||||
*
|
||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||
@ -79,14 +79,14 @@ public:
|
||||
TS_ASSERT(actor != NULL);
|
||||
TS_ASSERT_WSTR_EQUALS(actor->ToXML(),
|
||||
L"<Footprint><Circle radius=\"2.0\"></Circle><Height>1.0</Height></Footprint><Selectable><EditorOnly></EditorOnly><Overlay><Texture><MainTexture>actor.png</MainTexture><MainTextureMask>actor_mask.png</MainTextureMask></Texture></Overlay></Selectable>"
|
||||
L"<VisualActor><Actor>example1</Actor><SilhouetteDisplay>false</SilhouetteDisplay><SilhouetteOccluder>false</SilhouetteOccluder></VisualActor>");
|
||||
L"<VisualActor><Actor>example1</Actor><SilhouetteDisplay>false</SilhouetteDisplay><SilhouetteOccluder>false</SilhouetteOccluder><VisibleInAtlasOnly>false</VisibleInAtlasOnly></VisualActor>");
|
||||
|
||||
const CParamNode* preview = tempMan->LoadTemplate(ent2, "preview|unit", -1);
|
||||
TS_ASSERT(preview != NULL);
|
||||
TS_ASSERT_WSTR_EQUALS(preview->ToXML(),
|
||||
L"<Position><Altitude>0</Altitude><Anchor>upright</Anchor><Floating>false</Floating><TurnRate>6.0</TurnRate></Position>"
|
||||
L"<Vision><AlwaysVisible>true</AlwaysVisible><Range>0</Range><RetainInFog>false</RetainInFog></Vision>"
|
||||
L"<VisualActor><Actor>example</Actor><SilhouetteDisplay>false</SilhouetteDisplay><SilhouetteOccluder>false</SilhouetteOccluder></VisualActor>");
|
||||
L"<VisualActor><Actor>example</Actor><SilhouetteDisplay>false</SilhouetteDisplay><SilhouetteOccluder>false</SilhouetteOccluder><VisibleInAtlasOnly>false</VisibleInAtlasOnly></VisualActor>");
|
||||
|
||||
const CParamNode* previewobstruct = tempMan->LoadTemplate(ent2, "preview|unitobstruct", -1);
|
||||
TS_ASSERT(previewobstruct != NULL);
|
||||
@ -100,14 +100,14 @@ public:
|
||||
L"</Obstruction>"
|
||||
L"<Position><Altitude>0</Altitude><Anchor>upright</Anchor><Floating>false</Floating><TurnRate>6.0</TurnRate></Position>"
|
||||
L"<Vision><AlwaysVisible>true</AlwaysVisible><Range>0</Range><RetainInFog>false</RetainInFog></Vision>"
|
||||
L"<VisualActor><Actor>example</Actor><SilhouetteDisplay>false</SilhouetteDisplay><SilhouetteOccluder>false</SilhouetteOccluder></VisualActor>");
|
||||
L"<VisualActor><Actor>example</Actor><SilhouetteDisplay>false</SilhouetteDisplay><SilhouetteOccluder>false</SilhouetteOccluder><VisibleInAtlasOnly>false</VisibleInAtlasOnly></VisualActor>");
|
||||
|
||||
const CParamNode* previewactor = tempMan->LoadTemplate(ent2, "preview|actor|example2", -1);
|
||||
TS_ASSERT(previewactor != NULL);
|
||||
TS_ASSERT_WSTR_EQUALS(previewactor->ToXML(),
|
||||
// the actor's <Selectable> element is not part of the preview element subset, hence not included
|
||||
L"<Footprint><Circle radius=\"2.0\"></Circle><Height>1.0</Height></Footprint><Vision><AlwaysVisible>true</AlwaysVisible><Range>0</Range><RetainInFog>false</RetainInFog></Vision>"
|
||||
L"<VisualActor><Actor>example2</Actor><SilhouetteDisplay>false</SilhouetteDisplay><SilhouetteOccluder>false</SilhouetteOccluder></VisualActor>");
|
||||
L"<VisualActor><Actor>example2</Actor><SilhouetteDisplay>false</SilhouetteDisplay><SilhouetteOccluder>false</SilhouetteOccluder><VisibleInAtlasOnly>false</VisibleInAtlasOnly></VisualActor>");
|
||||
}
|
||||
|
||||
void test_LoadTemplate_scriptcache()
|
||||
@ -140,11 +140,11 @@ public:
|
||||
|
||||
const CParamNode* actor = tempMan->LoadTemplate(ent2, "actor|example1", -1);
|
||||
val = CScriptValRooted(cx, ScriptInterface::ToJSVal(cx, &actor->GetChild("VisualActor")));
|
||||
TS_ASSERT_WSTR_EQUALS(man.GetScriptInterface().ToString(val.get()), L"({Actor:\"example1\", SilhouetteDisplay:\"false\", SilhouetteOccluder:\"false\"})");
|
||||
TS_ASSERT_WSTR_EQUALS(man.GetScriptInterface().ToString(val.get()), L"({Actor:\"example1\", SilhouetteDisplay:\"false\", SilhouetteOccluder:\"false\", VisibleInAtlasOnly:\"false\"})");
|
||||
|
||||
const CParamNode* foundation = tempMan->LoadTemplate(ent2, "foundation|actor|example1", -1);
|
||||
val = CScriptValRooted(cx, ScriptInterface::ToJSVal(cx, &foundation->GetChild("VisualActor")));
|
||||
TS_ASSERT_WSTR_EQUALS(man.GetScriptInterface().ToString(val.get()), L"({Actor:\"example1\", Foundation:(void 0), SilhouetteDisplay:\"false\", SilhouetteOccluder:\"false\"})");
|
||||
TS_ASSERT_WSTR_EQUALS(man.GetScriptInterface().ToString(val.get()), L"({Actor:\"example1\", Foundation:(void 0), SilhouetteDisplay:\"false\", SilhouetteOccluder:\"false\", VisibleInAtlasOnly:\"false\"})");
|
||||
}
|
||||
|
||||
void test_LoadTemplate_errors()
|
||||
|
Loading…
Reference in New Issue
Block a user