Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/lib/graphics/render2D/render_2d.cc @ 5399

Last change on this file since 5399 was 5399, checked in by bensch, 19 years ago

orxonox/trunk: GL-GUI not rendered by Element2D anymore, lets see, if this proves usefull… i am not sure

File size: 4.4 KB
Line 
1/*
2   orxonox - the future of 3D-vertical-scrollers
3
4   Copyright (C) 2004 orx
5
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 2, or (at your option)
9   any later version.
10
11   ### File Specific:
12   main-programmer: Benjamin Grauer
13   co-programmer: ...
14*/
15
16#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_GRAPHICS
17
18#include "render_2d.h"
19
20#include "graphics_engine.h"
21#include "class_list.h"
22#include "list.h"
23#include "element_2d.h"
24
25#include <math.h>
26
27using namespace std;
28
29/**
30 * standard constructor
31 */
32Render2D::Render2D ()
33{
34   this->setClassID(CL_RENDER_2D, "Render2D");
35   this->setName("Render2D");
36
37   for (int i = 0; i < E2D_LAYER_COUNT; i++)
38     this->element2DList[i] = new tList<Element2D>;
39}
40
41/**
42 *  the singleton reference to this class
43 */
44Render2D* Render2D::singletonRef = NULL;
45
46/**
47 * standard deconstructor
48 */
49Render2D::~Render2D ()
50{
51  delete NullElement2D::getInstance();
52
53  for (int i = 0; i < E2D_LAYER_COUNT; i++)
54    delete this->element2DList[i];
55
56  Render2D::singletonRef = NULL;
57}
58
59
60/**
61 * registers a 2D-element to the 2D-Renderer
62 * @param element2D the element to registers
63 *
64 * do not use this function by yourself, because this is used by Element2D's constructor
65 */
66void Render2D::registerElement2D(Element2D* element2D)
67{
68  if (likely(element2D != NULL) && element2D->getLayer() < E2D_LAYER_COUNT && element2D->getLayer() != E2D_LAYER_EXTERN)
69    this->element2DList[element2D->getLayer()]->add(element2D);
70  // DEBUG printf("::::%p, %d %d \n", element2D, element2D->getLayer(), this->element2DList[element2D->getLayer()]->getSize());
71}
72
73
74/**
75 * unregisters a 2D-element from the 2D-Renderer
76 * @param element2D The element to unregister
77 *
78 * do not use this function by yourself, because this is used by Element2D's destructor
79 */
80void Render2D::unregisterElement2D(Element2D* element2D)
81{
82  if (likely(element2D != NULL) && element2D->getLayer() < E2D_LAYER_COUNT && element2D->getLayer() != E2D_LAYER_EXTERN)
83    this->element2DList[element2D->getLayer()]->remove(element2D);
84    // DEBUG  printf(":::%s layer: %d, %d\n", element2D->getClassName(), element2D->getLayer(), this->element2DList[element2D->getLayer()]->getSize());
85}
86
87
88/**
89 * moves an 2D-Element to another Layer
90 * @param element2D the Element to move
91 * @param to which layer to move it to.
92 */
93void Render2D::moveToLayer(Element2D* element2D, E2D_LAYER to)
94{
95  if (element2D == NULL)
96    return;
97
98  if (E2D_LAYER_COUNT  < to)
99    to = E2D_DEFAULT_LAYER;
100  if (likely(element2D->getLayer() != to))
101  {
102    if (element2D->getLayer() != E2D_LAYER_EXTERN)
103      this->element2DList[element2D->getLayer()]->remove(element2D);
104    if (to != E2D_LAYER_EXTERN)
105      this->element2DList[to]->add(element2D);
106  }
107}
108
109
110/**
111 * ticks all the 2d-elements
112 * @param dt the timestep since last dt
113 */
114void Render2D::tick(float dt)
115{
116  for (int i = 0; i < E2D_LAYER_COUNT; i++)
117  {
118    tIterator<Element2D>* iterator = this->element2DList[i]->getIterator();
119    Element2D* elem = iterator->firstElement();
120    while (elem != NULL)
121    {
122      if (elem->isActive())
123        elem->tick(dt);
124      elem = iterator->nextElement();
125    }
126    delete iterator;
127  }
128}
129
130/**
131 * renders all the Elements of the Render2D-engine's layer
132 * @param layer the Layer to draw (if E2D_LAYER_ALL then all layers will be drawn)
133 */
134void Render2D::draw(E2D_LAYER layer) const
135{
136  GraphicsEngine::enter2DMode();
137
138  if (layer != E2D_LAYER_ALL)
139  {
140    if (likely(layer != E2D_LAYER_EXTERN && this->element2DList[layer]->getSize() > 0))
141    {
142      tIterator<Element2D>* iterator = this->element2DList[layer]->getIterator();
143      Element2D* elem = iterator->firstElement();
144      while (elem != NULL)
145      {
146        if (elem->isVisible())
147          elem->draw();
148        elem = iterator->nextElement();
149      }
150      delete iterator;
151    }
152  }
153  else  // if (layer != E2D_LAYER_ALL)
154  {
155    for (int i = 0; i < E2D_LAYER_COUNT; i++)
156    {
157      if (this->element2DList[i]->getSize() > 0)
158      {
159        tIterator<Element2D>* iterator = this->element2DList[i]->getIterator();
160        Element2D* elem = iterator->firstElement();
161        while (elem != NULL)
162        {
163          if (elem->isVisible())
164            elem->draw();
165          elem = iterator->nextElement();
166        }
167        delete iterator;
168      }
169    }
170  }
171  GraphicsEngine::leave2DMode();
172}
173
174
Note: See TracBrowser for help on using the repository browser.