Add the Obstruction component to entity previews, to support collision detection for building placement
This was SVN commit r7360.
This commit is contained in:
parent
0f0a3774d0
commit
18b5a7f17c
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Entity>
|
||||
<VisualActor>
|
||||
<Actor>example</Actor>
|
||||
</VisualActor>
|
||||
<Selectable/>
|
||||
<Position>
|
||||
<Altitude>0</Altitude>
|
||||
<Anchor>upright</Anchor>
|
||||
<Floating>false</Floating>
|
||||
</Position>
|
||||
<UnitMotion/>
|
||||
<Footprint>
|
||||
<Circle radius="4"/>
|
||||
</Footprint>
|
||||
<Obstruction/>
|
||||
</Entity>
|
@ -351,12 +351,16 @@ void CCmpTemplateManager::CopyPreviewSubset(CParamNode& out, const CParamNode& i
|
||||
permittedComponentTypes.insert("Ownership");
|
||||
permittedComponentTypes.insert("Position");
|
||||
permittedComponentTypes.insert("VisualActor");
|
||||
permittedComponentTypes.insert("Footprint");
|
||||
permittedComponentTypes.insert("Obstruction");
|
||||
// (This could be initialised once and reused, but it's not worth the effort)
|
||||
|
||||
CParamNode::LoadXMLString(out, "<Entity/>");
|
||||
out.CopyFilteredChildrenOfChild(in, "Entity", permittedComponentTypes);
|
||||
// In the future, we might want to add some extra flags to certain components, to indicate they're
|
||||
// running in 'preview' mode and should not e.g. register with global managers
|
||||
|
||||
// Disable the Obstruction component (if there is one) so it doesn't affect pathfinding
|
||||
if (out.GetChild("Entity").GetChild("Obstruction").IsOk())
|
||||
CParamNode::LoadXMLString(out, "<Entity><Obstruction><Inactive/></Obstruction></Entity>");
|
||||
}
|
||||
|
||||
void CCmpTemplateManager::CopyFoundationSubset(CParamNode& out, const CParamNode& in)
|
||||
|
@ -79,10 +79,14 @@ public:
|
||||
TS_ASSERT(preview != NULL);
|
||||
TS_ASSERT_WSTR_EQUALS(preview->ToXML(), L"<Position><Altitude>0</Altitude><Anchor>upright</Anchor><Floating>false</Floating></Position><VisualActor><Actor>example</Actor></VisualActor>");
|
||||
|
||||
const CParamNode* previewobstruct = tempMan->LoadTemplate(ent2, L"preview|unitobstruct", -1);
|
||||
TS_ASSERT(previewobstruct != NULL);
|
||||
TS_ASSERT_WSTR_EQUALS(previewobstruct->ToXML(), L"<Footprint><Circle radius=\"4\"></Circle></Footprint><Obstruction><Inactive></Inactive></Obstruction><Position><Altitude>0</Altitude><Anchor>upright</Anchor><Floating>false</Floating></Position><VisualActor><Actor>example</Actor></VisualActor>");
|
||||
|
||||
const CParamNode* previewactor = tempMan->LoadTemplate(ent2, L"preview|actor|example2", -1);
|
||||
TS_ASSERT(previewactor != NULL);
|
||||
TS_ASSERT_WSTR_EQUALS(previewactor->ToXML(), L"<Position><Altitude>0</Altitude><Anchor>upright</Anchor><Floating>false</Floating></Position><VisualActor><Actor>example2</Actor></VisualActor>");
|
||||
}
|
||||
}
|
||||
|
||||
void test_LoadTemplate_errors()
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user