Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Jul 14, 2005, 2:49:33 PM (19 years ago)
Author:
bensch
Message:

orxonox/trunk: introducing Layers

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orxonox/trunk/src/lib/graphics/render2D/render_2d.cc

    r4849 r4862  
    2323#include "element_2d.h"
    2424
     25#include <math.h>
     26
    2527using namespace std;
    2628
     
    3537   this->setName("Render2D");
    3638
    37    this->element2DList = new tList<Element2D>;
     39   for (int i = 0; i < E2D_LAYER_COUNT; i++)
     40     this->element2DList[i] = new tList<Element2D>;
    3841}
    3942
     
    4851Render2D::~Render2D ()
    4952{
    50   delete this->element2DList;
     53  for (int i = 0; i < E2D_LAYER_COUNT; i++)
     54    delete this->element2DList[i];
    5155
    5256  Render2D::singletonRef = NULL;
     
    6266void Render2D::registerElement2D(Element2D* element2D)
    6367{
    64   this->element2DList->add(element2D);
     68  this->element2DList[(int)log2(E2D_DEFAULT_LAYER)]->add(element2D);
    6569}
    6670
     
    7377void Render2D::unregisterElement2D(Element2D* element2D)
    7478{
    75   this->element2DList->remove(element2D);
     79  this->element2DList[(int)log2(element2D->getLayer())]->remove(element2D);
    7680}
    7781
    7882
     83/**
     84 * moves an 2D-Element to another Layer
     85 * @param element2D the Element to move
     86 * @param to which layer to move it to.
     87 */
     88void Render2D::moveToLayer(Element2D* element2D, E2D_LAYER to)
     89{
     90  this->element2DList[(int)log2(element2D->getLayer())]->remove(element2D);
     91  this->element2DList[(int)log2(to)]->add(element2D);
     92}
     93
     94
     95/**
     96 * ticks all the 2d-elements
     97 * @param dt the timestep since last dt
     98 */
    7999void Render2D::tick(float dt)
    80100{
    81   tIterator<Element2D>* iterator = this->element2DList->getIterator();
    82   Element2D* elem = iterator->nextElement();
    83   while (elem != NULL)
     101  for (int i = 0; i < E2D_LAYER_COUNT; i++)
    84102  {
    85     elem->tick(dt);
    86     elem = iterator->nextElement();
     103    tIterator<Element2D>* iterator = this->element2DList[i]->getIterator();
     104    Element2D* elem = iterator->nextElement();
     105    while (elem != NULL)
     106    {
     107      elem->tick(dt);
     108      elem = iterator->nextElement();
     109    }
     110    delete iterator;
    87111  }
    88   delete iterator;
    89 
    90112}
    91113
     
    93115 * renders all the Elements of the Render2D-engine
    94116 */
    95 void Render2D::draw() const
     117void Render2D::draw(unsigned int layer) const
    96118{
    97119  GraphicsEngine::enter2DMode();
    98120
    99   tIterator<Element2D>* iterator = this->element2DList->getIterator();
    100   Element2D* elem = iterator->nextElement();
    101   while (elem != NULL)
     121  int drawLayer = 1;
     122
     123  for (int i = 0; i < E2D_LAYER_COUNT; i++)
    102124  {
    103     if (elem->isVisible())
    104       elem->draw();
    105     elem = iterator->nextElement();
     125    if (layer & drawLayer && this->element2DList[i]->getSize() > 0)
     126    {
     127      tIterator<Element2D>* iterator = this->element2DList[i]->getIterator();
     128      Element2D* elem = iterator->nextElement();
     129      while (elem != NULL)
     130      {
     131        if (elem->isVisible())
     132          elem->draw();
     133        elem = iterator->nextElement();
     134      }
     135      delete iterator;
     136    }
     137    drawLayer << 1;
    106138  }
    107   delete iterator;
    108139
    109140  GraphicsEngine::leave2DMode();
     141
    110142}
Note: See TracChangeset for help on using the changeset viewer.