Overlay system zorder

Problems building or running the engine, queries about how to use features etc.
User avatar
aronze
Gnoblar
Posts: 15
Joined: Sun Nov 30, 2008 6:04 pm

Overlay system zorder

Post by aronze »

Hi, I've some questions about overlay.

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);
   }
}
I'll assume the following situation:

Code: Select all

Overlay* Root = OverlayManager::getSingleton().create("Root");
Root->setZOrder(100);
And then, I'll create and attach new OverlayContainers.

Code: Select all

OverlayContainer* A = OverlayManager::getSingleton().createOverlayElement("Panel", "A");
Root->add2D(A);// A zorder is 100.
( Actually, Overlay use multiply 100 to zorder but It's not important for me, so I'll just omit that. )

Now, attach more Elements to use only addChild method.

Code: Select all

Root(100)
    A(100)
        B(101)
            C(102)
        D(101)
While B~D elements was added, assignZOrder was not called. But if you add "E" OverlayContainer to "Root" Overlay, assignZOrder will be called by add2D and all zordering is re assigned like this:

Code: Select all

Root(100)
    A(100)
        B(101)
            C(102)
        D(103)
    E(104) // <----- now we added this
!!! What is that? Before added E, C element is over D element, but now, D is over C. !!! Could you something explain this?
bstone
OGRE Expert User
OGRE Expert User
Posts: 1920
Joined: Sun Feb 19, 2012 9:24 pm
Location: Russia
x 201

Re: Overlay system zorder

Post by bstone »

That's how the Overlay code seems to work. Not sure why but probably because precise z-ordering is seldom important there.