Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

orxonox/trunk: new ReadFileArray function for shader

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 * 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  this->element2DList[(int)log2(E2D_DEFAULT_LAYER)]->add(element2D);
69}
70
71/**
72 * unregisters a 2D-element from the 2D-Renderer
73 * @param element2D The element to unregister
74 *
75 * do not use this function by yourself, because this is used by Element2D's destructor
76 */
77void Render2D::unregisterElement2D(Element2D* element2D)
78{
79  this->element2DList[(int)log2(element2D->getLayer())]->remove(element2D);
80}
81
82
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  if (element2D->getLayer() != to)
91  {
92    this->element2DList[(int)log2(element2D->getLayer())]->remove(element2D);
93    this->element2DList[(int)log2(to)]->add(element2D);
94  }
95}
96
97
98/**
99 * ticks all the 2d-elements
100 * @param dt the timestep since last dt
101 */
102void Render2D::tick(float dt)
103{
104  for (int i = 0; i < E2D_LAYER_COUNT; i++)
105  {
106    tIterator<Element2D>* iterator = this->element2DList[i]->getIterator();
107    Element2D* elem = iterator->firstElement();
108    while (elem != NULL)
109    {
110      if (elem->isActive())
111        elem->tick(dt);
112      elem = iterator->nextElement();
113    }
114    delete iterator;
115  }
116}
117
118/**
119 * renders all the Elements of the Render2D-engine
120 * @param layer the Layer to draw
121 */
122void Render2D::draw(unsigned int layer) const
123{
124  GraphicsEngine::enter2DMode();
125
126  int drawLayer = 1;
127
128  for (int i = 0; i < E2D_LAYER_COUNT; i++)
129  {
130    if (layer & drawLayer && this->element2DList[i]->getSize() > 0)
131    {
132      tIterator<Element2D>* iterator = this->element2DList[i]->getIterator();
133      Element2D* elem = iterator->firstElement();
134      while (elem != NULL)
135      {
136        if (elem->isVisible())
137          elem->draw();
138        elem = iterator->nextElement();
139      }
140      delete iterator;
141    }
142    drawLayer << 1;
143  }
144  GraphicsEngine::leave2DMode();
145}
Note: See TracBrowser for help on using the repository browser.