Changeset 5968 in orxonox.OLD for branches/network/src/world_entities/weapons/bomb.cc
- Timestamp:
- Dec 7, 2005, 4:16:51 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/network/src/world_entities/weapons/bomb.cc
r5769 r5968 17 17 #include "glincl.h" 18 18 #include "state.h" 19 #include "model.h" 20 #include "primitive_model.h" 21 22 #include "fast_factory.h" 19 23 #include "list.h" 20 #include "model.h"21 #include "vector.h"22 #include "fast_factory.h"23 24 25 #include "object_manager.h" 24 26 25 27 #include "particle_engine.h" … … 59 61 Bomb::~Bomb () 60 62 { 63 delete this->detonationSphere; 64 delete this->detonationMaterial; 61 65 62 66 } … … 71 75 this->setClassID(CL_BOMB, "Bomb"); 72 76 77 78 this->detonationSphere = new PrimitiveModel(PRIM_SPHERE); 79 this->detonationMaterial = new Material(); 80 this->detonationMaterial->setDiffuse(1, 0, 0); 81 // this->detonationMaterial->setTransparency(.1); 73 82 /** 74 83 * @todo: Write CL_PROTO_WORLD_ENTITY INTO THE src/defs/class_id.h (your own definition) … … 101 110 void Bomb::tick(float time) 102 111 { 103 //Vector v = *this->flightDirection * ( this->speed * time * 1000 + 0.1);104 Vector v = this->velocity * (time);105 this->shiftCoor(v);106 107 112 this->lifeCycle += time/this->lifeSpan; 108 113 if( this->lifeCycle >= 1.0) … … 114 119 this->deactivate(); 115 120 } 121 else if (this->lifeCycle > 0.9f) 122 this->detonate ((this->lifeCycle-.89) *1000.0); 123 else 124 { 125 Vector v = this->velocity * (time); 126 this->shiftCoor(v); 127 } 116 128 } 117 129 … … 133 145 glMultMatrixf((float*)matrix); 134 146 135 if (model) 136 model->draw(); 147 if (this->lifeCycle < .9) 148 { 149 if (model) 150 model->draw(); 151 } 152 else 153 { 154 glScalef((this->lifeCycle-.89) *1000.0, 155 (this->lifeCycle-.89) *1000.0, 156 (this->lifeCycle-.89) *1000.0); 157 this->detonationMaterial->select(); 158 this->detonationSphere->draw(); 159 } 137 160 glPopMatrix(); 138 161 } … … 145 168 void Bomb::collidesWith (WorldEntity* entity, const Vector& location) 146 169 { 147 this->detonate(); 170 if (this->lifeCycle < .9f && entity->isA(CL_NPC)) 171 this->lifeCycle = 0.9f; 148 172 } 149 173 … … 157 181 { 158 182 State::getWorldEntityList()->remove(this); 183 this->lifeCycle = 0.0f; 159 184 Bomb::fastFactory->kill(this); 160 185 } 161 186 162 void Bomb::detonate( )187 void Bomb::detonate(float size) 163 188 { 164 tIterator<WorldEntity>* it = State::getWorldEntityList()->getIterator(); 165 WorldEntity* lm = it->firstElement(); 166 167 while(lm != NULL) 189 std::list<WorldEntity*>* detonationList = ObjectManager::distanceFromObject(*this, size, CL_NPC); 190 if (detonationList != NULL) 168 191 { 169 170 lm = it->nextElement(); 192 while( !detonationList->empty() ) 193 { 194 detonationList->front()->collidesWith(this, Vector(0,0,0)); 195 detonationList->pop_front(); 196 } 197 delete detonationList; 171 198 } 172 199 }
Note: See TracChangeset
for help on using the changeset viewer.