Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/subprojects/collision_detection/collision_detection.cc @ 5262

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

orxonox/trunk: reimplemented the list functions, as i did before in revision 5110.
This time, i looked out for the bugs, and i think i found one

@patrick: i know, that you do not want to code at the moment… :/ → see mail

File size: 9.9 KB
RevLine 
[4615]1/*
[4333]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   this file extends the framework file, so it renders what i want.
16*/
17
18#include "framework.h"
19
[4378]20#include "fields.h"
[4381]21#include "stdlibincl.h"
[4552]22#include "light.h"
[4333]23
[4546]24#include "cd_engine.h"
[4635]25#include "bv_tree.h"
[4333]26
[4615]27#include "md2Model.h"
[4675]28#include "model.h"
29#include "test_entity.h"
[4679]30#include "environment.h"
[4903]31#include "terrain.h"
[4615]32
[4710]33
[4646]34#include "graphics_engine.h"
[4675]35#include "list.h"
[4636]36
37
[4675]38Model* mod;
[4615]39MD2Model* model;
[4636]40int drawMode;
41int depth;
[4704]42float iterata;
[4675]43tList<WorldEntity>* entityList;
[4615]44
[4679]45int lastFrame, currentFrame, dt;
[4719]46bool drawModel = false;
[4679]47
[4710]48WorldEntity* a;
49WorldEntity* b;
50//Terrain* c;
[4719]51bool animateModel = false;
[4701]52
[4343]53void Framework::moduleInit(int argc, char** argv)
[4333]54{
[4646]55  GraphicsEngine::getInstance()->setWindowName("Collision Cluster", "collision");
56
[4546]57  CDEngine::getInstance();
[4679]58
[4710]59  /* Primitive Data Test */
60//   sVec3D* data = new sVec3D[6];
61//   float tmp[6][3] = {{0.0, 4.2, 2.4}, {3.0, 3.0, 2.0}, {5.0, 1.0, 6.0}, {6.5, 1.0, 3.0}, {7.0, 3.0, 5.0}, {8.0, 6.0, 6.0}};
62//   for(int i = 0; i < 6; ++i)
63//   {
64//     data[i][0] = tmp[i][0];
65//     data[i][1] = tmp[i][1];
66//     data[i][2] = tmp[i][2];
67//   }
68//   CDEngine::getInstance()->debugSpawnTree(5, data, 6);
[4552]69
[4679]70  /* MD2 Model Test */
[4675]71//   model = new MD2Model("models/tris.md2", "models/tris.pcx");
72//   model->tick(0.1f);
73//   CDEngine::getInstance()->debugSpawnTree(9, model->data->pVertices, model->data->numVertices);
[4552]74
[4679]75  /* OBJ - Model Test */
76//   mod = (Model*)ResourceManager::getInstance()->load("models/reaplow.obj", OBJ, RP_CAMPAIGN);
77//   CDEngine::getInstance()->debugSpawnTree(9, (sVec3D*)mod->getVertexArray(), mod->getVertexArrayCount());
78
79
80
[4675]81  entityList = new tList<WorldEntity>();
[4626]82
[4903]83//   a = new TestEntity(); a->setName("Clown1");
[5029]84   b = new Environment(); b->setName("Jaeger");
85//   a = new Terrain();
[4708]86
[4903]87//   b->setRelCoor(0.0, 0.0, -20.0);
88//   b->setRelDir(Quaternion(-M_PI/2.0f, Vector(0.0, 1.0, 0.0)));
[4630]89
[5029]90  entityList->add(b);
[4903]91//   entityList->add(b);
[4630]92
[4688]93  CDEngine::getInstance()->setEntityList(entityList);
[4675]94
[4552]95  LightManager* lightMan = LightManager::getInstance();
[4717]96  lightMan->setAmbientColor(.1,.1,.1);
[4741]97  (new Light())->setAbsCoor(-5.0, 50.0, -40.0);
98  (new Light())->setAbsCoor(100, 80, 60);
[4636]99
[4710]100
[4675]101  /* properties */
[4636]102  drawMode = DRAW_MODEL;
[4673]103  depth = 0;
[4679]104  dt = lastFrame = currentFrame = 0;
[4704]105  iterata = 0.05f;
[4636]106
[4647]107  moduleHelp();
[4333]108}
109
[4546]110
[4334]111void Framework::moduleEventHandler(SDL_Event* event)
112{
113  switch (event->type)
[4622]114  {
[4334]115    case SDL_KEYDOWN:
116      switch (event->key.keysym.sym)
[4622]117      {
[4636]118        case SDLK_a:
119          drawMode |= DRAW_ALL;
[4615]120          break;
[4638]121        case SDLK_0:
122        {
123          printf("Setting tree depth = 0\n");
124          depth = 0;
125          int temp = drawMode & DRAW_ALL;
126          drawMode ^= temp;
127          drawMode |= DRAW_SINGLE;
128          break;
129        }
[4622]130        case SDLK_1:
[4636]131        {
132          printf("Setting tree depth = 1\n");
133          depth = 1;
134          int temp = drawMode & DRAW_ALL;
135          drawMode ^= temp;
136          drawMode |= DRAW_SINGLE;
[4622]137          break;
[4636]138        }
139        case SDLK_2:
140        {
141          printf("Setting tree depth = 2\n");
142          depth = 2;
143          int temp = drawMode & DRAW_ALL;
144          drawMode ^= temp;
145          drawMode |= DRAW_SINGLE;
146          break;
147        }
148        case SDLK_3:
149        {
150          printf("Setting tree depth = 3\n");
151          depth = 3;
152          int temp = drawMode & DRAW_ALL;
153          drawMode ^= temp;
154          drawMode |= DRAW_SINGLE;
155          break;
156        }
157        case SDLK_4:
158        {
159          printf("Setting tree depth = 4\n");
160          depth = 4;
161          int temp = drawMode & DRAW_ALL;
162          drawMode ^= temp;
163          drawMode |= DRAW_SINGLE;
164          break;
165        }
166        case SDLK_5:
167        {
168          printf("Setting tree depth = 5\n");
169          depth = 5;
170          int temp = drawMode & DRAW_ALL;
171          drawMode ^= temp;
172          drawMode |= DRAW_SINGLE;
173          break;
174        }
175        case SDLK_6:
176        {
177          printf("Setting tree depth = 6\n");
178          depth = 6;
179          int temp = drawMode & DRAW_ALL;
180          drawMode ^= temp;
181          drawMode |= DRAW_SINGLE;
182          break;
183        }
184        case SDLK_s:
185          if(drawMode & DRAW_SEPARATING_PLANE)
186          {
187            int temp = drawMode & DRAW_SEPARATING_PLANE;
188            drawMode ^= temp;
189            printf("Removing Separation Plane\n");
190          }
191          else
192          {
193            drawMode |= DRAW_SEPARATING_PLANE;
194            printf("Drawing Separation Plane\n");
195          }
196
197          break;
198        case SDLK_p:
199          if(drawMode & DRAW_BV_POLYGON)
200          {
201            int temp = drawMode & DRAW_BV_POLYGON;
202            drawMode ^= temp;
203            printf("Removing OBB Polygons\n");
204          }
205          else
206          {
207            drawMode |= DRAW_BV_POLYGON;
208            printf("Drawing OBB Polygons\n");
209          }
210          break;
[4704]211        case SDLK_o:
212          if(iterata == 0.0f)
213          {
214            iterata = 0.05f;
215          }
216          else
217          {
218            iterata = 0.0f;
219          }
220          break;
[4636]221
[4622]222      }
223  }
[4333]224}
225
[4546]226
[4333]227void Framework::moduleTick(float dt)
228{
[4679]229
[4696]230  CDEngine::getInstance()->checkCollisions();
[4688]231
[4679]232
[5033]233 // b->shiftCoor(Vector(0.0, 0.0, iterata * dt * 12.0f));
[4679]234
[4701]235
[4708]236  tIterator<WorldEntity>* iterator = entityList->getIterator();
[5115]237  WorldEntity* entity = iterator->firstElement();
[4708]238  while( entity != NULL)
[4675]239  {
[4721]240    if( unlikely(animateModel))
[4719]241      entity->tick(dt);
[4708]242    entity = iterator->nextElement();
[4675]243  }
244  delete iterator;
[4333]245}
246
[4546]247
[4349]248void Framework::moduleDraw() const
[4334]249{
[4718]250  //CDEngine::getInstance()->debugDraw(depth, drawMode);
[4710]251
[4708]252  tIterator<WorldEntity>* iterator = entityList->getIterator();
[5115]253  WorldEntity* entity = iterator->firstElement();
[4708]254  while( entity != NULL)
[4679]255  {
[4707]256    if( likely(drawModel))
[4679]257    entity->draw();
[4707]258    entity->drawBVTree(depth, drawMode);
[5034]259    printf("%i, %i\n", depth, drawMode);
[4708]260    entity = iterator->nextElement();
[4679]261  }
262  delete iterator;
[4707]263
264  LightManager::getInstance()->draw();
[4334]265}
[4333]266
[4334]267
[4333]268void Framework::moduleHelp(void) const
269{
[4647]270  printf("\n\n===========================");
271  printf("Collision Detection Modler:\n");
272  printf("Key Bindings:\n");
273  printf(" -| Displaying Polygons\t\t p\n");
274  printf(" -| Displaying Separation Plane\t s\n");
275  printf("\n");
276  printf(" -| Tree Depth 0\t\t 0\n");
277  printf(" -| Tree Depth 1\t\t 1\n");
278  printf(" -| Tree Depth 2\t\t 2\n");
279  printf(" -| Tree Depth 3\t\t 3\n");
280  printf(" -| Tree Depth 4\t\t 4\n");
281  printf(" -| Tree Depth 5\t\t 5\n");
282  printf("===========================\n\n");
283
[4333]284}
285
[4646]286int boxPolygons(GtkWidget* nonInterest, void* widget)
287{
288  if(drawMode & DRAW_BV_POLYGON)
289  {
290    int temp = drawMode & DRAW_BV_POLYGON;
291    drawMode ^= temp;
292    printf("Removing OBB Polygons\n");
293  }
294  else
295  {
296    drawMode |= DRAW_BV_POLYGON;
297    printf("Drawing OBB Polygons\n");
298  }
299}
300
301int seperatingPlanes(GtkWidget* nonInterest, void* widget)
302{
303  if(drawMode & DRAW_SEPARATING_PLANE)
304  {
305    int temp = drawMode & DRAW_SEPARATING_PLANE;
306    drawMode ^= temp;
307    printf("Removing Separation Plane\n");
308  }
309  else
310  {
311    drawMode |= DRAW_SEPARATING_PLANE;
312    printf("Drawing Separation Plane\n");
313  }
314}
315
[4671]316
317int blendedBox(GtkWidget* nonInterest, void* widget)
318{
319  if(drawMode & DRAW_BV_BLENDED)
320  {
321    int temp = drawMode & DRAW_BV_BLENDED;
322    drawMode ^= temp;
323    printf("Removing OBB Polygons\n");
324  }
325  else
326  {
327    drawMode |= DRAW_BV_BLENDED;
328    printf("Drawing OBB Polygons\n");
329  }
330}
331
332
[4686]333int drawModels(GtkWidget* nonInterest, void* widget)
334{
335  drawModel = !drawModel;
336}
337
338
[4719]339int animateModels(GtkWidget* nonInterest, void* widget)
340{
341  animateModel = !animateModel;
342}
343
344
[4712]345int drawPoints(GtkWidget* nonInterest, void* widget)
346{
347  if(drawMode & DRAW_POINTS)
348  {
349    int temp = drawMode & DRAW_POINTS;
350    drawMode ^= temp;
351
352  }
353  else
354  {
355    drawMode |= DRAW_POINTS;
356    printf("Drawing OBB Polygons\n");
357  }
358}
359
360
[4646]361int treeDepth(GtkWidget* nonInterest, void* widget)
362{
363  Option* option = (Option*) widget;
364  const char* name = option->getTitle();
365  char* value = option->save();
366
367  depth = atoi(value);
368  printf("Setting tree depth = %i\n", depth);
369  int temp = drawMode & DRAW_ALL;
370  drawMode ^= temp;
371  drawMode |= DRAW_SINGLE;
372
373  delete value;
374}
375
376
[4343]377void Framework::moduleInitGui(int argc, char** argv)
[4333]378{
[4626]379  Window* guiMainWindow = NULL;
380
381  initGUI(0, NULL);
382
383  guiMainWindow = new Window("Collision_detection");
384  {
[4646]385    Box* windowBox = new Box('v');
386    {
[4671]387      CheckButton* BoxPolygons = new CheckButton("Draw OBB Polygons");
[4646]388      BoxPolygons->connectSignal("clicked", (void*)BoxPolygons, boxPolygons);
389      windowBox->fill(BoxPolygons);
390
391
[4671]392      CheckButton* BlendedBox = new CheckButton("Draw OBB Blended");
393      BlendedBox->connectSignal("clicked", (void*)BlendedBox, blendedBox);
394      windowBox->fill(BlendedBox);
395
396
[4686]397      CheckButton* DrawModels = new CheckButton("Draw Models");
398      DrawModels->connectSignal("clicked", (void*)DrawModels, drawModels);
399      windowBox->fill(DrawModels);
400
401
[4719]402
403      CheckButton* AnimateModels = new CheckButton("Animate Models");
404      AnimateModels->connectSignal("clicked", (void*)AnimateModels, animateModels);
405      windowBox->fill(AnimateModels);
406
407
[4712]408      CheckButton* DrawPoints = new CheckButton("Draw Points");
409      DrawPoints->connectSignal("clicked", (void*)DrawPoints, drawPoints);
410      windowBox->fill(DrawPoints);
411
412
[4646]413      CheckButton* SeperatingPlanes = new CheckButton("SeperatingPlanes");
414      SeperatingPlanes->connectSignal("clicked", (void*)SeperatingPlanes, seperatingPlanes);
415      windowBox->fill(SeperatingPlanes);
416
[4671]417
[4712]418      Slider* TreeDepth = new Slider("TreeDepth", 0, 17);
[4646]419      TreeDepth->connectSignal("value_changed", (void*)TreeDepth, treeDepth);
420      windowBox->fill(TreeDepth);
421    }
422    guiMainWindow->fill(windowBox);
[4626]423  }
424  Window::mainWindow->showall();
425  Window::mainWindow->setSize(300, 500);
[4333]426}
Note: See TracBrowser for help on using the repository browser.