See following pseudo code:
Code: Select all
Overlay
{
assignZOrder()
{
loop
{
zorder = i->_notifyZOrder(zorder);
}
}
void setZOrder()
{
assignZOrder();
}
void add2D(c)
{
push_back(c);
assignZOrder();
}
void remove2D(c)
{
remove(c);
assignZOrder();
}
}
OverlayContainer
{
ushort _notifyZOrder(ushort newZOrder)
{
mZOrder = newZOrder++;
loop
{
newZOrder = getNextChild()->_notifyZOrder(newZOrder);
}
return newZOrder;
}
addChild(e)
{
insert(e);
e->_notifyZOrder(mZOrder + 1);
}
}
Code: Select all
Overlay* Root = OverlayManager::getSingleton().create("Root");
Root->setZOrder(100);
Code: Select all
OverlayContainer* A = OverlayManager::getSingleton().createOverlayElement("Panel", "A");
Root->add2D(A);// A zorder is 100.
Now, attach more Elements to use only addChild method.
Code: Select all
Root(100)
A(100)
B(101)
C(102)
D(101)
Code: Select all
Root(100)
A(100)
B(101)
C(102)
D(103)
E(104) // <----- now we added this