Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

orxonox/trunk: fixed a bug in the deletion Process of NullElement2D. deleted list before entities that were stored in the lists… stupid me…

File size: 3.2 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: ...
13   co-programmer: ...
14*/
15
16//#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WORLD_ENTITY
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
31/**
32 * standard constructor
33 */
34Render2D::Render2D ()
35{
36   this->setClassID(CL_RENDER_2D, "Render2D");
37   this->setName("Render2D");
38
39   for (int i = 0; i < E2D_LAYER_COUNT; i++)
40     this->element2DList[i] = new tList<Element2D>;
41}
42
43/**
44 *  the singleton reference to this class
45 */
46Render2D* Render2D::singletonRef = NULL;
47
48/**
49 * standard deconstructor
50 */
51Render2D::~Render2D ()
52{
53  delete NullElement2D::getInstance();
54
55  for (int i = 0; i < E2D_LAYER_COUNT; i++)
56    delete this->element2DList[i];
57
58  Render2D::singletonRef = NULL;
59}
60
61
62/**
63 * registers a 2D-element to the 2D-Renderer
64 * @param element2D the element to registers
65 *
66 * do not use this function by yourself, because this is used by Element2D's constructor
67 */
68void Render2D::registerElement2D(Element2D* element2D)
69{
70  this->element2DList[(int)log2(E2D_DEFAULT_LAYER)]->add(element2D);
71}
72
73/**
74 * unregisters a 2D-element from the 2D-Renderer
75 * @param element2D The element to unregister
76 *
77 * do not use this function by yourself, because this is used by Element2D's destructor
78 */
79void Render2D::unregisterElement2D(Element2D* element2D)
80{
81  this->element2DList[(int)log2(element2D->getLayer())]->remove(element2D);
82}
83
84
85/**
86 * moves an 2D-Element to another Layer
87 * @param element2D the Element to move
88 * @param to which layer to move it to.
89 */
90void Render2D::moveToLayer(Element2D* element2D, E2D_LAYER to)
91{
92  if (element2D->getLayer() != to)
93  {
94    this->element2DList[(int)log2(element2D->getLayer())]->remove(element2D);
95    this->element2DList[(int)log2(to)]->add(element2D);
96  }
97}
98
99
100/**
101 * ticks all the 2d-elements
102 * @param dt the timestep since last dt
103 */
104void Render2D::tick(float dt)
105{
106  for (int i = 0; i < E2D_LAYER_COUNT; i++)
107  {
108    tIterator<Element2D>* iterator = this->element2DList[i]->getIterator();
109    Element2D* elem = iterator->firstElement();
110    while (elem != NULL)
111    {
112      if (elem->isActive())
113        elem->tick(dt);
114      elem = iterator->nextElement();
115    }
116    delete iterator;
117  }
118}
119
120/**
121 * renders all the Elements of the Render2D-engine
122 * @param layer the Layer to draw
123 */
124void Render2D::draw(unsigned int layer) const
125{
126  GraphicsEngine::enter2DMode();
127
128  int drawLayer = 1;
129
130  for (int i = 0; i < E2D_LAYER_COUNT; i++)
131  {
132    if (layer & drawLayer && this->element2DList[i]->getSize() > 0)
133    {
134      tIterator<Element2D>* iterator = this->element2DList[i]->getIterator();
135      Element2D* elem = iterator->firstElement();
136      while (elem != NULL)
137      {
138        if (elem->isVisible())
139          elem->draw();
140        elem = iterator->nextElement();
141      }
142      delete iterator;
143    }
144    drawLayer << 1;
145  }
146  GraphicsEngine::leave2DMode();
147
148}
Note: See TracBrowser for help on using the repository browser.