Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/playability/src/world_entities/effects/wobblegrid.cc @ 10262

Last change on this file since 10262 was 10168, checked in by marcscha, 18 years ago

Acid Launcher and Acid Splash (projectile) finished.
Temporally dist check instead of collision on swarm projectile (collision manager problem which needs to be tracked down first)

File size: 4.1 KB
Line 
1/*
2   orxonox - the future of 3D-vertical-scrollers
3
4   Copyright (C) 2006 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: David Hasenfratz
13*/
14
15#include "wobblegrid.h"
16
17#include "util/loading/load_param.h"
18#include "util/loading/factory.h"
19
20#include "graphics_engine.h"
21#include "material.h"
22#include "glincl.h"
23#include "state.h"
24#include "grid.h"
25
26#include <assert.h>
27#include "debug.h"
28
29
30#include "class_id_DEPRECATED.h"
31ObjectListDefinition(Wobblegrid);
32CREATE_FACTORY(Wobblegrid);
33
34/**
35 * Wobble Grids are grids which "wobble"
36 * Wobbling is realized through fixed center and sin wave outwards
37 * For the beginning the grid will be a 5x5
38 */
39
40/**
41 * standart constructor
42 */
43Wobblegrid::Wobblegrid (const TiXmlElement* root)
44{
45  this->size  = 5;
46
47  this->init();
48
49  if( root)
50    this->loadParams(root);
51}
52
53Wobblegrid::Wobblegrid (int size, const TiXmlElement* root)
54{
55  this->size  = size;
56
57  this->init();
58
59  if( root)
60    this->loadParams(root);
61}
62
63
64/**
65 * destroys a Wobblegrid
66 */
67Wobblegrid::~Wobblegrid ()
68{
69  if (this->material)
70    delete this->material;
71}
72
73
74/**
75 * initializes the Wobblegrid
76 */
77void Wobblegrid::init()
78{
79  this->registerObject(this, Wobblegrid::_objectList);
80  this->setName("Wobblegrid");
81
82  this->material = new Material();
83  this->setAbsCoor(0, 0, 0);
84  //this->setVisibiliy(true);
85 
86  this->subdivision = 5;
87
88  this->grid  = new Grid( this->size, this->size, this->subdivision, this->subdivision);
89  this->angularSpeed = M_PI; //180;
90  this->setModel(this->grid);
91
92  this->setUpdateFunction((*sinf));
93}
94
95
96/**
97 *  load params
98 * @param root TiXmlElement object
99 */
100void Wobblegrid::loadParams(const TiXmlElement* root)
101{
102  /*LoadParam(root, "texture", this->material, Material, setDiffuseMap)
103      .describe("the texture-file to load onto the Wobblegrid");
104
105  LoadParam(root, "size", this, Wobblegrid, setSize)
106  .describe("the size of the Wobblegrid in Pixels");*/
107}
108
109
110
111/**
112 * sets the material to load
113 * @param textureFile The texture-file to load
114 */
115void Wobblegrid::setTexture(const std::string& textureFile)
116{
117  this->material->setBlendFunc(GL_SRC_ALPHA,GL_ONE);
118  this->material->setDiffuseMap(textureFile);
119}
120
121
122/**
123 * ticks the Wobblegrid
124 * @param dt the time to ticks
125 */
126void Wobblegrid::tick(float dt)
127{
128  angle += dt * angularSpeed;
129  if (angle > 2 * M_PI)
130    angle -= 2 * M_PI;
131
132  //Vector vec;
133  float fac = 1.0 / (this->subdivision - 1);
134  for( int z=1; z < 4; z++)
135  {
136    for( int x=1; x < 4; x++)
137    {
138      //if(x==2 && z == 2)
139      //  continue;
140
141      Vector2D& vec = this->grid->texCoord(z*this->subdivision + x);
142      vec.= (x * fac + sgn(x-2)*updateWobble(angle)*fac/2.0);
143      vec.= (z * fac + sgn(z-2)*updateWobble(angle)*fac/2.0);
144    }
145  }
146  //this->grid->finalize();
147  this->orient();
148}
149
150
151/**
152 * draws the billboard
153 */
154void Wobblegrid::draw() const
155{
156
157//   this->material->select();
158//   WorldEntity::draw();
159//   return;
160
161
162  if( !this->isVisible())
163    return;
164
165  glPushAttrib(GL_ENABLE_BIT);
166  glDisable(GL_LIGHTING);
167  glDisable(GL_FOG);
168
169  glMatrixMode(GL_MODELVIEW);
170  glPushMatrix();
171
172  //glTranslatef(this->getAbsCoor().x, this->getAbsCoor().y, this->getAbsCoor().z);
173  //glTranslatef(0,0,0);
174  this->material->select();
175
176 
177  glTranslatef (this->getAbsCoor ().x,
178                  this->getAbsCoor ().y,
179                  this->getAbsCoor ().z);
180
181  Vector tmpRot = this->getAbsDir().getSpacialAxis();
182  glRotatef (this->getAbsDir().getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );
183
184  //Quaternion  dir = Quaternion(this->getAbsDir().getSpacialAxisAngle(),view);
185  //this->setAbsDir(dir);
186  //glRotatef(this->angle, 0.0, 0.0, 1.0);
187  this->grid->draw();
188
189  glPopMatrix();
190
191  glPopAttrib();
192}
193
194void Wobblegrid::orient()
195{
196
197  Vector view = this->getAbsCoor() - State::getCameraNode()->getAbsCoor();
198  view.normalize();
199
200  Vector up = Vector(0, 1, 0);
201  Vector h = up.cross(view);
202  up = h.cross(view);
203
204  Quaternion dir = Quaternion::lookAt( this->getAbsCoor(), this->getAbsCoor() + up, view);
205  this->setAbsDir(dir);
206}
Note: See TracBrowser for help on using the repository browser.