Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/world_entities/power_ups/power_up.cc @ 6260

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

orxonox/trunk: merged the power-ups to the tunk again

File size: 2.0 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: Manuel Leuenberger
13   co-programmer: ...
14*/
15
16#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WORLD_ENTITY
17
18
19#include "power_up.h"
20#include "extendable.h"
21#include "primitive_model.h"
22
23using namespace std;
24
25Model* PowerUp::sphereModel = NULL;
26
27PowerUp::PowerUp(float r, float g, float b)
28{
29  this->respawnType = RESPAWN_NONE;
30  if(!PowerUp::sphereModel) {
31    PowerUp::sphereModel = new PrimitiveModel(PRIM_SPHERE, 7, 5);
32  }
33  this->sphereMaterial = new Material;
34  this->sphereMaterial->setTransparency(.1);
35  this->sphereMaterial->setDiffuse(r, g, b);
36  this->toList(OM_COMMON);
37}
38
39PowerUp::~PowerUp ()
40{
41  delete this->sphereMaterial;
42}
43
44
45void PowerUp::loadParams(const TiXmlElement* root)
46{
47  static_cast<WorldEntity*>(this)->loadParams(root);
48}
49
50
51void PowerUp::collidesWith (WorldEntity* entity, const Vector& location)
52{
53 if(entity->isA(CL_EXTENDABLE))
54  {
55    if(dynamic_cast<Extendable*>(entity)->pickup(this))
56    {
57      this->setVisibiliy(false);
58    }
59  }
60}
61
62void PowerUp::draw() const
63{
64  WorldEntity::draw();
65
66  glMatrixMode(GL_MODELVIEW);
67  glPushMatrix();
68  float matrix[4][4];
69
70  /* translate */
71  glTranslatef (this->getAbsCoor ().x,
72                this->getAbsCoor ().y,
73                this->getAbsCoor ().z);
74  /* rotate */ // FIXME: devise a new Way to rotate this
75  this->getAbsDir ().matrix (matrix);
76  glMultMatrixf((float*)matrix);
77
78  this->sphereMaterial->select();
79  sphereModel->draw();
80
81  glPopMatrix();
82}
83
84const char* PowerUp::respawnTypes[] = {
85  "none",
86  "time"
87};
88
89void PowerUp::setRespawnType(const char* type)
90{
91  for(int i = 0; i < RESPAWN_size; ++i) {
92    if(!strcmp(type, respawnTypes[i])) {
93      this->respawnType = (PowerUpRespawn)i;
94      break;
95    }
96  }
97}
98
Note: See TracBrowser for help on using the repository browser.