- Timestamp:
- Jan 25, 2007, 2:18:07 PM (18 years ago)
- Location:
- trunk
- Files:
-
- 47 edited
- 44 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:ignore
-
old new 10 10 autom4te.cache 11 11 aclocal.m4 12 tags 13 test.bmp 14 config.sub 15 config.guess 16 OrxonoxPlayability.kdevses 17 OrxonoxPlayability.kdevelop.pcs
-
- Property svn:ignore
-
trunk/ChangeLog
r9872 r10368 1 2006-12-17 Nicolas Schlumberger <nicolasc@ee.ethz.ch> 2 Added guiding sysmte for swarm missile 3 updated drawing function, to draw in the correct direction 4 5 2006-12-16 Marc Schärer <marcscha@ee.ethz.ch> 6 Addition trail system 7 Experiment with explosion class on SpaceShip. 8 Sadly, collision problems still persist. need to be solved until wednesday 2006-12-20 9 10 2006-12-03 Nicolas Schlumberger <nicolasc@ee.ethz.ch> 11 Added Rotation to hbolt 12 Did some experimenting with test_entity2 (rotation, texturing) 13 Added textured versions of bolt, and hbolt 14 15 2006-12-03 Marc Schärer <marcscha@ee.ethz.ch> 16 Added functionality to show / hide a crosshair to the weapon manager. No default crosshair anymore 17 Multiple weapons per ship added 18 Several small tweaks needed to make the above working added 19 Addition of SwarmMissile and SwarmProjectile 20 21 2006-11-29 Nicolas Schlumbgerger <nicolasc@ee.ethz.ch> 22 Added bolt projectile for light blaster, copied of laser 23 Added hbolt projectile for heavy blaster, copied of laser 24 Added bolt model, currently untextured 25 Added hbolt model, currently untextured 26 27 2006-11-28 Marc Schärer <marcscha@ee.ethz.ch> 28 Mapped primary weapon manager back to playable default weapon manager. 29 Addition of secondary weapon manager for special weapon. Currently uses Cannon to show and test this functionality. 30 Implementation of weapon energy regeneration. This needed some little modifications to the HUD class as well but now works :) 31 Addition of the second weapon manager to the HUD manager in util/hud .h .cc for our master of HUD ;-) 32 1 33 2006-09-22 Benjamin Grauer <bensch@orxonox.net> 2 34 Complete reimplementation of the ResourceManager. -
trunk/src/lib/coord/p_node.h
r9869 r10368 98 98 inline const Vector& getRelCoor () const { return this->prevRelCoordinate; }; 99 99 /** @returns the Relative Coordinate Destination */ 100 inline const Vector& getRelCoorSoft2D() const { return (this->toCoordinate)? *this->toCoordinate : this->relCoordinate; };100 inline const Vector& getRelCoorSoft2D() const { return (this->toCoordinate)? *this->toCoordinate : this->relCoordinate; }; 101 101 void setAbsCoor (const Vector& absCoord); 102 102 void setAbsCoor (float x, float y, float z); … … 133 133 inline const Quaternion& getRelDir () const { return this->prevRelDirection; }; 134 134 /** @returns the Relative Directional Destination */ 135 inline const Quaternion& getRelDirSoft2D() const { return (this->toDirection)? *this->toDirection : this->relDirection; };135 inline const Quaternion& getRelDirSoft2D() const { return (this->toDirection)? *this->toDirection : this->relDirection; }; 136 136 /** @returns a Vector pointing into the relative Direction */ 137 137 inline Vector getRelDirV() const { return this->prevRelDirection.apply(Vector(0,1,0)); }; -
trunk/src/lib/graphics/importer/vertex_array_model.cc
r9869 r10368 260 260 ((float)j - (float)resolutionY/2.0)/(float)resolutionY * sizeY); 261 261 this->addNormal(0.0, 1, 0.0); 262 this->addTexCoor((float)i/(float) resolutionX, (float)j/(float)resolutionY);262 this->addTexCoor((float)i/(float)(resolutionY-1), (float)j/(float)(resolutionX-1)); 263 263 this->addColor(1.0, 1.0, 1.0); 264 264 } -
trunk/src/lib/gui/gl/glgui_bar.cc
r9869 r10368 71 71 72 72 this->_value = value; 73 this->_frontRect.setSize((this->getSizeX2D() - borderLeft() - borderRight()) * (_value - _minimum)/ (_minimum + _maximum)73 this->_frontRect.setSize((this->getSizeX2D() - borderLeft() - borderRight()) * (_value - _minimum) / (_maximum -_minimum) 74 74 ,this->getSizeY2D() - borderTop() - borderBottom()); 75 75 } … … 99 99 100 100 this->_frontRect.setTopLeft(borderLeft(), borderTop()); 101 this->_frontRect.setSize((this->getSizeX2D() - borderLeft() - borderRight()) * (_value - _minimum)/ (_minimum + _maximum)102 101 this->_frontRect.setSize((this->getSizeX2D() - borderLeft() - borderRight()) * (_value - _minimum) / (_maximum -_minimum) 102 ,this->getSizeY2D() - borderTop() - borderBottom()); 103 103 104 104 } -
trunk/src/lib/gui/gl/glgui_box.cc
r9869 r10368 18 18 #include "glgui_box.h" 19 19 #include <cassert> 20 #include <iostream> 20 21 #include "debug.h" 22 #include "network_log.h" 23 21 24 22 25 namespace OrxGui … … 177 180 void GLGuiBox::resize() 178 181 { 179 if ( orientation() == OrxGui::Vertical)182 if (this->orientation() == OrxGui::Vertical) 180 183 { 181 184 float height = borderTop(); … … 186 189 for (widget = this->_children.begin(); widget != this->_children.end(); ++widget) 187 190 { 188 (*widget)->setRelCoor2D(borderLeft(), height); 189 height += (*widget)->getSizeY2D(); 190 width = fmax(width, (*widget)->getSizeX2D()); 191 //float radDir = (*widget)->getAbsDir2D() * 2 * M_PI / 360; 192 //float realSizeX = fabsf((*widget)->getSizeX2D() * cosf(radDir)) + fabsf((*widget)->getSizeY2D() * sinf(radDir)); 193 //float realSizeY = fabsf((*widget)->getSizeX2D() * sinf(radDir)) + fabsf((*widget)->getSizeY2D() * cosf(radDir)); 194 float realSizeX, realSizeY; 195 int angleAbs = (int)(*widget)->getAbsDir2D(); 196 int angleRel = (int)(*widget)->getRelDir2D(); 197 //std::cout << "absangle: " << angleAbs << ", relangle: " << angleRel << '\n'; 198 if ((*widget)->getAbsDir2D() == 0 || (*widget)->getAbsDir2D() == 180) 199 { 200 realSizeX = (*widget)->getSizeX2D(); 201 realSizeY = (*widget)->getSizeY2D(); 202 //std::cout<<"box vertical, widget 0or180"; 203 } 204 else if ((*widget)->getAbsDir2D() == 90 || (*widget)->getAbsDir2D() == 270) 205 { 206 realSizeX = (*widget)->getSizeY2D(); 207 realSizeY = (*widget)->getSizeX2D(); 208 //std::cout<<"box vertical, widget 90or270"; 209 } 210 211 (*widget)->setRelCoor2D(borderLeft(), height + borderTop()); 212 height += realSizeY; 213 width = fmax(width, realSizeX); 191 214 } 192 215 … … 205 228 for (widget = this->_children.begin(); widget != this->_children.end(); ++widget) 206 229 { 230 //float radDir = (*widget)->getAbsDir2D() * 2 * M_PI / 360; 231 //std::cout << "size X: " << (*widget)->getSizeX2D() << "size Y: " << (*widget)->getSizeY2D() << '\n'; 232 //float realSizeX = fabsf((*widget)->getSizeX2D() * cosf(radDir)) + fabsf((*widget)->getSizeY2D() * sinf(radDir)); 233 //float realSizeY = fabsf((*widget)->getSizeX2D() * sinf(radDir)) + fabsf((*widget)->getSizeY2D() * cosf(radDir)); 234 float realSizeX, realSizeY; 235 int angleAbs = (int)(*widget)->getAbsDir2D(); 236 int angleRel = (int)(*widget)->getRelDir2D(); 237 //std::cout << "absangle: " << angleAbs << ", relangle: " << angleRel << '\n'; 238 if ((*widget)->getAbsDir2D() == 0 || (*widget)->getAbsDir2D() == 180) 239 { 240 realSizeX = (*widget)->getSizeX2D(); 241 realSizeY = (*widget)->getSizeY2D(); 242 //std::cout<<"box horicontal, widget 0or180"; 243 } 244 else if ((*widget)->getAbsDir2D() == 90 || (*widget)->getAbsDir2D() == 270) 245 { 246 realSizeX = (*widget)->getSizeY2D(); 247 realSizeY = (*widget)->getSizeX2D(); 248 //std::cout<<"box horicontal, widget 90or270"; 249 } 250 207 251 (*widget)->setRelCoor2D(width, borderTop()); 208 height = fmax(height, (*widget)->getSizeY2D());209 width += (*widget)->getSizeX2D();252 height = fmax(height, realSizeY); 253 width += realSizeX; 210 254 } 211 255 -
trunk/src/lib/gui/gl/glgui_widget.cc
r10317 r10368 915 915 } 916 916 917 void GLGuiWidget::beginDraw() const 918 { 919 glPushMatrix(); 920 glTranslatef(this->getAbsCoor2D().x, this->getAbsCoor2D().y, 0); 921 glRotatef(this->getAbsDir2D(), 0, 0, 1); 922 } 923 917 924 918 925 } -
trunk/src/lib/gui/gl/glgui_widget.h
r9869 r10368 244 244 245 245 /// RENDERING 246 inline void beginDraw() const { glPushMatrix(); glTranslatef(this->getAbsCoor2D().x, this->getAbsCoor2D().y, 0); };246 void beginDraw() const; 247 247 inline void endDraw() const { glPopMatrix(); }; 248 248 -
trunk/src/lib/math/curve.cc
r9110 r10368 142 142 tmpNode = tmpNode->next; 143 143 return tmpNode->position; 144 } 145 146 /** 147 * This function returns an approximation of the length of the curve 148 * 149 */ 150 float Curve::getLength() 151 { 152 float length = 0; 153 PathNode* tmpNode = this->firstNode; 154 for(int i = 1; i < this->nodeCount; i++) 155 { 156 length += Vector(tmpNode->next->position - tmpNode->position).len(); 157 } 158 return length; 144 159 } 145 160 … … 273 288 Vector BezierCurve::calcDir (float t) 274 289 { 275 return this->dirCurve->calcPos(t); 290 return this->calcPos(t + 0.01) - this->calcPos(t); 291 //return this->dirCurve->calcPos(t); 276 292 } 277 293 -
trunk/src/lib/math/curve.h
r6616 r10368 47 47 /** @returns the directional Curve */ 48 48 Curve* getDirCurve() const { return this->dirCurve; }; 49 float getLength(); 49 50 50 51 /** @param t the value on the curve [0-1] @returns Vector to the position */ -
trunk/src/lib/util/loading/fast_factory.cc
r9869 r10368 157 157 void FastFactory::flush(bool hardFLUSH) 158 158 { 159 hardFLUSH = false; // HACK 159 160 FastObjectMember* tmpMember = this->deadList, *delMember = NULL; 160 161 while (tmpMember != NULL) -
trunk/src/story_entities/game_world.cc
r10340 r10368 359 359 this->dataTank->localPlayer->getPlayable()->setPlaymode(playmode)) 360 360 { 361 PRINTF( 4)("Set Playmode to %d:%s\n", playmode, Playable::playmodeToString(playmode).c_str());361 PRINTF(0)("Set Playmode to %d:%s\n", playmode, Playable::playmodeToString(playmode).c_str()); 362 362 } 363 363 else 364 364 { 365 PRINTF( 2)("Unable to set Playmode %d:'%s'\n", playmode, Playable::playmodeToString(playmode).c_str());365 PRINTF(0)("Unable to set Playmode %d:'%s'\n", playmode, Playable::playmodeToString(playmode).c_str()); 366 366 } 367 367 } -
trunk/src/story_entities/menu/game_menu.cc
r10114 r10368 111 111 112 112 this->dataTank->localCamera->setRelCoor(this->cameraVector); 113 //this->dataTank->localCamera->setFovy(60); 113 114 114 115 GraphicsEngine::getInstance()->displayFPS(false); -
trunk/src/util/Makefile.am
r9869 r10368 26 26 animation/animation_player.cc \ 27 27 \ 28 track/pilot_node.cc 29 30 #track/track_manager.cc \28 track/pilot_node.cc \ 29 track/track.cc \ 30 track/track_manager.cc \ 31 31 track/track_node.cc 32 32 … … 52 52 animation/t_animation.h \ 53 53 \ 54 track/pilot_node.h 54 track/pilot_node.h \ 55 track/track.h \ 56 track/track_manager.h \ 57 track/track_node.h 55 58 56 # track/track_manager.h \57 track/track_node.h -
trunk/src/util/hud.cc
r9869 r10368 23 23 #include "world_entities/weapons/weapon_manager.h" 24 24 #include "glgui_widget.h" 25 #include "glgui_box.h" 26 #include "glgui_bar.h" 27 #include "elements/glgui_energywidgetvertical.h" 25 28 26 29 #include "glgui_inputline.h" 27 30 #include "specials/glgui_notifier.h" 28 31 #include "elements/glgui_radar.h" 32 #include "world_entities/space_ships/space_ship.h" 29 33 30 34 … … 45 49 //this->setSize2D( 46 50 this->weaponManager = NULL; 51 this->weaponManagerSecondary = NULL; 47 52 this->energyWidget = NULL; 48 53 this->shieldWidget = NULL; 49 54 this->armorWidget = NULL; 55 //this->leftRect = NULL; 56 //this->rightRect = NULL; 50 57 this->resX = 1; 51 58 this->resY = 1; 59 60 this->overlayPercentage = 40; 61 this->overlayActive = false; 62 this->rightRect = new OrxGui::GLGuiImage(); 63 this->leftRect = new OrxGui::GLGuiImage(); 52 64 53 65 this->inputLine = new OrxGui::GLGuiInputLine(); … … 58 70 59 71 this->_radar = new OrxGui::GLGuiRadar(); 72 this->radarCenterNode = NULL; 60 73 61 74 this->subscribeEvent(ES_ALL, EV_VIDEO_RESIZE); 62 75 this->subscribeEvent(ES_ALL, SDLK_TAB); 63 76 64 77 //this->shipValuesBox = NULL; 65 78 } 66 79 … … 75 88 76 89 delete this->_radar; 90 delete this->rightRect; 91 delete this->leftRect; 92 //if (this->shipValuesBox != NULL) 93 //delete this->shipValuesBox; 94 77 95 // delete what has to be deleted here 78 96 } … … 94 112 void Hud::setEnergyWidget(OrxGui::GLGuiWidget* widget) 95 113 { 114 //if (this->shipValuesBox == NULL) 115 //this->createShipValuesBox(); 116 96 117 // decopple old widget 97 118 if (this->energyWidget != NULL) … … 103 124 if (this->energyWidget != NULL) 104 125 { 126 //this->energyWidget->shiftDir2D(270); 127 //dynamic_cast<OrxGui::GLGuiEnergyWidgetVertical*> (this->energyWidget)->setDisplayedName("Electronics"); 128 //this->shipValuesBox->pack(this->energyWidget); 129 //dynamic_cast<OrxGui::GLGuiEnergyWidgetVertical*> (this->energyWidget)->setStandardSettings(); 130 this->energyWidget->setParent2D(this->leftRect); 105 131 this->energyWidget->show(); 106 this->energyWidget->setBackgroundTexture( "hud_energy_background.png");107 132 /* this->energyWidget->frontMaterial().setDiffuseMap("hud_energy_bar.png"); 108 133 this->energyWidget->frontMaterial().setBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);*/ … … 113 138 114 139 void Hud::setShiledWidget(OrxGui::GLGuiWidget* widget) 115 {} 140 { 141 /* 142 if (this->shipValuesBox == NULL) 143 this->createShipValuesBox(); 144 */ 145 146 // decopple old widget 147 if (this->shieldWidget != NULL) 148 { 149 this->shieldWidget->hide(); 150 } 151 152 this->shieldWidget = widget; 153 if (this->shieldWidget != NULL) 154 { 155 //this->shieldWidget->shiftDir2D(270); 156 //this->shipValuesBox->pack(this->shieldWidget); 157 //dynamic_cast<OrxGui::GLGuiEnergyWidgetVertical*> (this->shieldWidget)->setStandardSettings(); 158 this->shieldWidget->setParent2D(this->leftRect); 159 this->shieldWidget->show(); 160 /* this->shieldWidget->frontMaterial().setDiffuseMap("hud_energy_bar.png"); 161 this->shieldWidget->frontMaterial().setBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);*/ 162 } 163 else 164 printf("schild im hud nicht uebergeben!!!!!!!!!!!!!!!!!!!!!!!!!"); 165 166 this->updateResolution(); 167 } 116 168 117 169 void Hud::setArmorWidget(OrxGui::GLGuiWidget* widget) 118 {} 119 120 void Hud::setWeaponManager(WeaponManager* weaponMan) 121 { 170 { 171 /* 172 if (this->shipValuesBox == NULL) 173 this->createShipValuesBox(); 174 */ 175 176 // decopple old widget 177 if (this->armorWidget != NULL) 178 { 179 this->armorWidget->hide(); 180 } 181 182 this->armorWidget = widget; 183 if (this->armorWidget != NULL) 184 { 185 //this->armorWidget->shiftDir2D(270); 186 //this->shipValuesBox->pack(this->armorWidget); 187 //dynamic_cast<OrxGui::GLGuiEnergyWidgetVertical*> (this->armorWidget)->setStandardSettings(); 188 this->armorWidget->setParent2D(this->leftRect); 189 this->armorWidget->show(); 190 /* this->armorWidget->frontMaterial().setDiffuseMap("hud_energy_bar.png"); 191 this->armorWidget->frontMaterial().setBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);*/ 192 } 193 194 this->updateResolution(); 195 } 196 197 void Hud::setWeaponManager(WeaponManager* weaponMan, WeaponManager* weaponManSec) 198 { 199 //clearWeaponManager(); 200 201 //Hide all widgets 122 202 if (this->weaponManager != NULL) 123 203 { … … 128 208 { 129 209 weapon->getEnergyWidget()->hide(); 130 this->weaponsWidgets.remove(weapon->getEnergyWidget());210 //this->weaponsWidgetsPrim.remove(dynamic_cast<OrxGui::GLGuiEnergyWidgetVertical*> (weapon->getEnergyWidget())); 131 211 } 132 212 } 133 213 } 134 214 215 if (this->weaponManagerSecondary != NULL) 216 { 217 for (unsigned int i = 0; i < this->weaponManagerSecondary->getSlotCount(); i++) 218 { 219 Weapon* weapon = this->weaponManagerSecondary->getWeapon(i); 220 if (weapon != NULL) 221 { 222 weapon->getEnergyWidget()->hide(); 223 //this->weaponsWidgetsSec.remove(dynamic_cast<OrxGui::GLGuiEnergyWidgetVertical*> (weapon->getEnergyWidget())); 224 } 225 } 226 } 227 135 228 this->weaponManager = weaponMan; 229 this->weaponManagerSecondary = weaponManSec; 136 230 137 231 this->updateWeaponManager(); … … 139 233 } 140 234 235 /* 236 void Hud::clearWeaponManager() 237 { 238 //Hide all widgets 239 if (this->weaponManager != NULL) 240 { 241 for (unsigned int i = 0; i < this->weaponManager->getSlotCount(); i++) 242 { 243 Weapon* weapon = this->weaponManager->getWeapon(i); 244 if (weapon != NULL) 245 { 246 weapon->getEnergyWidget()->hide(); 247 //this->weaponsWidgetsPrim.remove(dynamic_cast<OrxGui::GLGuiEnergyWidgetVertical*> (weapon->getEnergyWidget())); 248 } 249 } 250 } 251 252 if (this->weaponManagerSecondary != NULL) 253 { 254 for (unsigned int i = 0; i < this->weaponManagerSecondary->getSlotCount(); i++) 255 { 256 Weapon* weapon = this->weaponManagerSecondary->getWeapon(i); 257 if (weapon != NULL) 258 { 259 weapon->getEnergyWidget()->hide(); 260 //this->weaponsWidgetsSec.remove(dynamic_cast<OrxGui::GLGuiEnergyWidgetVertical*> (weapon->getEnergyWidget())); 261 } 262 } 263 } 264 265 //this->weaponsWidgetsPrim.clear(); 266 //this->weaponsWidgetsSec.clear(); 267 } 268 */ 269 141 270 void Hud::updateWeaponManager() 142 271 { 143 272 // hide all the Widgets 144 std::list<OrxGui::GLGuiWidget*>::iterator weaponWidget; 145 for (weaponWidget = this->weaponsWidgets.begin(); weaponWidget != this->weaponsWidgets.end(); weaponWidget++) 273 274 std::list<OrxGui::GLGuiEnergyWidgetVertical*>::iterator weaponWidget; 275 for (weaponWidget = this->weaponsWidgetsPrim.begin(); weaponWidget != this->weaponsWidgetsPrim.end(); weaponWidget++) 146 276 { 147 277 (*weaponWidget)->hide(); 148 278 } 149 this->weaponsWidgets.clear(); 279 this->weaponsWidgetsPrim.clear(); 280 281 for (weaponWidget = this->weaponsWidgetsSec.begin(); weaponWidget != this->weaponsWidgetsSec.end(); weaponWidget++) 282 { 283 (*weaponWidget)->hide(); 284 } 285 this->weaponsWidgetsSec.clear(); 286 150 287 151 288 // add all that we need again. 289 152 290 if (this->weaponManager != NULL) 153 291 for (unsigned int i = 0; i < this->weaponManager->getSlotCount(); i++) … … 157 295 { 158 296 //PRINTF(0)("WEAPON %s::%s in Slots\n", weapon->getClassCName(), weapon->getName()); 297 weapon->getEnergyWidget()->setParent2D(this->rightRect); 159 298 weapon->getEnergyWidget()->show(); 160 299 weapon->getEnergyWidget()->setBackgroundColor(Color(.8,.2,.11, 0.1)); 161 300 weapon->getEnergyWidget()->setFrontColor(Color( .2,.5,.7,.6)); 162 // weapon->getEnergyWidget()->frontMaterial().setTransparency(.6); 163 this->weaponsWidgets.push_back(weapon->getEnergyWidget()); 301 weapon->getEnergyWidget()->setWidgetSize(120,30); 302 //weapon->getEnergyWidget()->frontMaterial().setTransparency(.6); 303 this->weaponsWidgetsPrim.push_back(dynamic_cast<OrxGui::GLGuiEnergyWidgetVertical*> (weapon->getEnergyWidget())); 164 304 } 165 305 } 306 307 if (this->weaponManagerSecondary != NULL) 308 for (unsigned int i = 0; i < this->weaponManagerSecondary->getSlotCount(); i++) 309 { 310 Weapon* weapon = this->weaponManagerSecondary->getWeapon(i); 311 if (weapon != NULL) 312 { 313 //PRINTF(0)("WEAPON %s::%s in Slots\n", weapon->getClassCName(), weapon->getName()); 314 weapon->getEnergyWidget()->setParent2D(this->rightRect); 315 weapon->getEnergyWidget()->show(); 316 weapon->getEnergyWidget()->setBackgroundColor(Color(.8,.2,.11, 0.1)); 317 weapon->getEnergyWidget()->setFrontColor(Color( .2,.5,.7,.6)); 318 weapon->getEnergyWidget()->setWidgetSize(150,50); 319 //weapon->getEnergyWidget()->frontMaterial().setTransparency(.6); 320 this->weaponsWidgetsSec.push_back(dynamic_cast<OrxGui::GLGuiEnergyWidgetVertical*> (weapon->getEnergyWidget())); 321 } 322 } 323 166 324 this->updateResolution(); 325 167 326 } 168 327 … … 182 341 this->notifier->setWidgetSize(0.25 * this->resX, 0.6 * this->resY); 183 342 343 int overlayWidth = 0; 344 if (overlayPercentage >= 20) 345 overlayWidth = this->resX * (overlayPercentage)/(200); 346 else 347 overlayWidth = this->resX * 0.1; 348 //if (overlayWidth < 100) 349 //overlayWidth = 100; 350 351 this->rightRect->hide(); 352 this->leftRect->hide(); 353 354 this->leftRect->setParent2D(this); 355 this->leftRect->setWidgetSize(float(overlayWidth), float(this->resY)); 356 this->leftRect->setAbsCoor2D(0,0); 357 this->leftRect->setBackgroundTexture(Texture()); 358 this->leftRect->setBackgroundColor(Color(0,0,0.7,0.2)); 359 this->leftRect->setForegroundTexture(Texture()); 360 this->leftRect->setForegroundColor(Color(0,0,0,0)); 361 362 this->rightRect->setParent2D(this); 363 this->rightRect->setWidgetSize(float(overlayWidth), float(this->resY)); 364 this->rightRect->setAbsCoor2D(this->resX - overlayWidth,0); 365 this->rightRect->setBackgroundTexture(Texture()); 366 this->rightRect->setBackgroundColor(Color(0,0,0.7,0.2)); 367 this->rightRect->setForegroundTexture(Texture()); 368 this->rightRect->setForegroundColor(Color(0,0,0,0)); 369 370 371 if (this->overlayActive == true) 372 { 373 this->rightRect->show(); 374 this->leftRect->show(); 375 } 376 184 377 185 378 if (State::getPlayer() && State::getPlayer()->getPlayable() && State::getObjectManager()) 186 379 { 187 380 PRINTF(4)("UPDATING RADAR\n"); 188 this->_radar->setCenterNode(State::getPlayer()->getPlayable()); 189 this->_radar->addEntityList(&State::getObjectManager()->getEntityList((OM_LIST)(State::getPlayer()->getPlayable()->getOMListNumber()+1)), Color(.4, .4, 1.0)); 190 this->_radar->addEntityList(&State::getObjectManager()->getEntityList(OM_GROUP_02), Color(1.0, .2, .2)); 191 this->_radar->setAbsCoor2D(0.8 * this->resX, 0.01 * this->resY); 192 this->_radar->setWidgetSize(0.2 * this->resX, 0.2 * this->resY); 381 this->_radar->setParent2D(this->leftRect); 382 if (radarCenterNode == NULL) 383 this->_radar->setCenterNode(State::getPlayer()->getPlayable()); 384 else 385 this->_radar->setCenterNode(this->radarCenterNode); 386 387 //this->_radar->addEntityList(&State::getObjectManager()->getEntityList((OM_LIST)(State::getPlayer()->getPlayable()->getOMListNumber()+1)), Color(.4, .4, 1.0)); 388 this->_radar->addEntityList(&State::getObjectManager()->getEntityList(OM_GROUP_00), Color(1, 0, 0)); 389 this->_radar->addEntityList(&State::getObjectManager()->getEntityList(OM_GROUP_01), Color(0, 0, 1)); 390 this->_radar->setAbsCoor2D(0, 0.01 * this->resY); 391 this->_radar->setWidgetSize(overlayWidth, overlayWidth); 193 392 this->_radar->setRange(300); 194 393 this->_radar->show(); 195 } 196 197 198 if (this->energyWidget != NULL) 199 { 200 this->energyWidget->setAbsCoor2D(0.0 * this->resX, 0.85 * this->resY); 201 this->energyWidget->setWidgetSize(.25 * this->resX, 0.1 * this->resY); 202 } 203 204 205 std::list<OrxGui::GLGuiWidget*>::iterator weaponWidget; 206 Vector2D pos(0.3, .9); 207 for (weaponWidget = this->weaponsWidgets.begin(); weaponWidget != this->weaponsWidgets.end(); weaponWidget++, pos.x+=.2) 208 { 209 if (pos.x > .8) 210 { 211 pos.x = 0.3; 212 pos.y -= .1; 213 214 } 215 (*weaponWidget)->setAbsCoor2D(pos.x*this->resX, pos.y*this->resY); 216 (*weaponWidget)->setWidgetSize(.02*this->resX, .1 *this->resY); 394 395 int statWidgetsNumber = 0; 396 float expectedArmorSizeX = 0; 397 float expectedArmorSizeY = 0; 398 float newSizeY = 0; float newSizeX = 0; 399 float moduloWidth = 0; 400 401 if (this->armorWidget != NULL) 402 { 403 expectedArmorSizeX = 150; 404 expectedArmorSizeY = 50; 405 statWidgetsNumber++; 406 } 407 408 if (this->shieldWidget != NULL) 409 statWidgetsNumber++; 410 411 if (this->energyWidget != NULL) 412 statWidgetsNumber++; 413 414 if (expectedArmorSizeY * statWidgetsNumber > overlayWidth) 415 { 416 newSizeY = overlayWidth / float(statWidgetsNumber); 417 newSizeX = expectedArmorSizeX; 418 PRINTF(0)("Statwidgets resized\n"); 419 } 420 else 421 { 422 newSizeY = expectedArmorSizeY; 423 newSizeX = expectedArmorSizeX; 424 moduloWidth = int(overlayWidth) % int(expectedArmorSizeY * statWidgetsNumber); 425 } 426 427 float posY = overlayWidth + newSizeX; 428 429 if (this->armorWidget != NULL) 430 { 431 this->armorWidget->setSize2D(newSizeX, newSizeY); 432 this->armorWidget->setRelCoor2D((statWidgetsNumber - 1) * newSizeY + 3 * moduloWidth / (statWidgetsNumber + 1),posY); 433 } 434 if (this->shieldWidget != NULL) 435 { 436 this->shieldWidget->setSize2D(newSizeX, newSizeY); 437 this->shieldWidget->setRelCoor2D((statWidgetsNumber - 2) * newSizeY + 2 *moduloWidth / (statWidgetsNumber + 1),posY); 438 } 439 if (this->energyWidget != NULL) 440 { 441 this->energyWidget->setSize2D(newSizeX, newSizeY); 442 this->energyWidget->setRelCoor2D(moduloWidth / (statWidgetsNumber + 1),posY); 443 } 444 445 /* 446 if (this->armorWidget != NULL) 447 this->armorWidget->setRelCoor2D(100,0.2*this->resY + this->armorWidget->getSizeX2D()); 448 if (this->shieldWidget != NULL) 449 this->shieldWidget->setRelCoor2D(60,0.2*this->resY + this->armorWidget->getSizeX2D()); 450 if (this->energyWidget != NULL) 451 this->energyWidget->setRelCoor2D(20,0.2*this->resY + this->armorWidget->getSizeX2D()); 452 */ 453 //this->shieldWidget->setRelCoor2D(0.1*this->resX + this->armorWidget->getSizeX2D(),0); 454 //this->energyWidget->setRelCoor2D(0.1*this->resX + this->armorWidget->getSizeX2D() + this->shieldWidget->getSizeX2D(),0); 455 } 456 457 /* 458 if (this->shipValuesBox != NULL) 459 { 460 this->shipValuesBox->setAbsCoor2D(0.2 * this->resX, 0.4 * this->resY); 461 this->shipValuesBox->setWidgetSize(.4 * this->resX, 0.1 * this->resY); 462 } 463 else 464 createShipValuesBox(); 465 */ 466 467 std::list<OrxGui::GLGuiEnergyWidgetVertical*>::iterator weaponWidget; 468 Vector2D pos = Vector2D(overlayWidth, 0.4*this->resY); 469 float largestWidgetSizeX = 0; 470 //PRINTF(0)("Cur Pos: %f,%f\n",pos.x,pos.y); 471 // out of reasons i can't get behind, this version is segfaulting when calling getSizeX2D or getSizeY2D. the other 472 // element2D- related function works tough.. :s 473 474 for (weaponWidget = this->weaponsWidgetsPrim.begin(); weaponWidget != this->weaponsWidgetsPrim.end(); weaponWidget++) 475 { 476 float ySize = (*weaponWidget)->getSizeY2D(); 477 float xSize = (*weaponWidget)->getSizeX2D(); 478 if (xSize > largestWidgetSizeX) 479 largestWidgetSizeX = xSize; 480 if (pos.x < ySize) 481 { 482 pos.x = overlayWidth; 483 pos.y += largestWidgetSizeX; 484 } 485 pos.x -= ySize; 486 (*weaponWidget)->setAbsCoor2D(pos.x + this->rightRect->getAbsCoor2D().x, pos.y); 487 //(*weaponWidget)->setAbsCoor2D(0,100); 217 488 (*weaponWidget)->show(); 218 489 //printf("update thing %s::%s\n", (*weaponWidget)->getClassCName(), (*weaponWidget)->getName()); 219 490 } 491 492 weaponWidget = this->weaponsWidgetsSec.begin(); 493 float expectedWidgetSizeY = 0; 494 if (weaponWidget != this->weaponsWidgetsSec.end()) 495 { 496 expectedWidgetSizeY = (*weaponWidget)->getSizeY2D(); 497 } 498 pos.y = resY - expectedWidgetSizeY * 0.6; 499 pos.x = overlayWidth + this->rightRect->getAbsCoor2D().x; 500 501 for (weaponWidget = this->weaponsWidgetsSec.begin(); weaponWidget != this->weaponsWidgetsSec.end(); weaponWidget++) 502 { 503 float ySize = (*weaponWidget)->getSizeY2D(); 504 float xSize = (*weaponWidget)->getSizeX2D(); 505 if (xSize > largestWidgetSizeX) 506 largestWidgetSizeX = xSize; 507 if (pos.x < ySize) 508 { 509 pos.x = overlayWidth; 510 pos.y -= largestWidgetSizeX + expectedWidgetSizeY * 0.6; 511 } 512 pos.x -= ySize; 513 //PRINTF(0)("secweaponwidget y-size: %f/n", (*weaponWidget)->getSizeY2D()); 514 (*weaponWidget)->setAbsCoor2D(pos.x + this->rightRect->getAbsCoor2D().x, pos.y); 515 (*weaponWidget)->show(); 516 //printf("update thing %s::%s\n", (*weaponWidget)->getClassCName(), (*weaponWidget)->getName()); 517 } 518 220 519 } 221 520 … … 235 534 // this->inputLine->select(); 236 535 } 237 238 239 } 240 241 536 } 537 538 /* 539 void Hud::createShipValuesBox() 540 { 541 this->shipValuesBox = new OrxGui::GLGuiBox(OrxGui::Vertical); 542 //this->shipValuesBox->setWidgetSize(1000,500); 543 //this->shipValuesBox->setBackgroundTexture("maps/gui_container_background.png"); 544 this->shipValuesBox->setBackgroundTexture(Texture()); 545 this->shipValuesBox->setBackgroundColor(Color(0,0,1,0.5)); 546 this->shipValuesBox->setVisibility(true); 547 } 548 */ 549 550 -
trunk/src/util/hud.h
r9869 r10368 9 9 #include "element_2d.h" 10 10 #include "event_listener.h" 11 #include "glgui_box.h" 12 #include "elements/glgui_energywidgetvertical.h" 11 13 12 14 … … 39 41 void setShiledWidget(OrxGui::GLGuiWidget* widget); 40 42 void setArmorWidget(OrxGui::GLGuiWidget* widget); 41 void setWeaponManager(WeaponManager* weaponMan); 43 inline OrxGui::GLGuiWidget* getEnergyWidget() {return this->energyWidget;}; 44 inline OrxGui::GLGuiWidget* getShieldWidget() {return this->shieldWidget;}; 45 inline OrxGui::GLGuiWidget* getArmorWidget() {return this->armorWidget;}; 46 47 void setWeaponManager(WeaponManager* weaponMan, WeaponManager* weaponManSec = NULL); 48 inline void setRadarCenterNode(PNode* node) {this->radarCenterNode = node;}; 42 49 43 50 void addWeaponWidget(OrxGui::GLGuiWidget* widget); … … 47 54 48 55 void updateWeaponManager(); 56 //void clearWeaponManager(); 57 58 inline void setOverlayPercentage(int perc) 59 { 60 if (perc > 100) perc = 100; 61 else if (perc < 0) perc = 0; 62 63 this->overlayPercentage = perc; 64 updateResolution(); 65 }; 66 67 inline void setOverlayActive(bool b) 68 { 69 overlayActive = b; 70 updateResolution(); 71 }; 49 72 50 73 void draw() const; … … 54 77 private: 55 78 void updateResolution(); 79 //void createShipValuesBox(); 56 80 57 81 private: 58 82 unsigned int resX; 59 83 unsigned int resY; 84 85 float travelZoneWidth; //the percentage of the screen, the player has got for his movements. should always be a value between 0 and 1; 60 86 61 87 OrxGui::GLGuiWidget* energyWidget; … … 66 92 OrxGui::GLGuiInputLine* inputLine; 67 93 OrxGui::GLGuiRadar* _radar; 94 PNode* radarCenterNode; 95 96 OrxGui::GLGuiWidget* rightRect; 97 OrxGui::GLGuiWidget* leftRect; 98 bool overlayActive; 99 int overlayPercentage; //the percentage of the screen, the player has got for his movements. should always be a value between 0 and 1; 68 100 69 101 WeaponManager* weaponManager; 102 WeaponManager* weaponManagerSecondary; 70 103 71 std::list<OrxGui::GLGuiWidget*> weaponsWidgets; //!< WeaponWidgets will be displayed one after another 104 std::list<OrxGui::GLGuiEnergyWidgetVertical*> weaponsWidgetsPrim; //!< WeaponWidgets will be displayed one after another 105 std::list<OrxGui::GLGuiEnergyWidgetVertical*> weaponsWidgetsSec; 72 106 }; 73 107 -
trunk/src/util/state.h
r8408 r10368 109 109 static inline int getMenuID() { return State::menuID;} 110 110 111 //////////////////////// 112 /// Scroller-Control /// 113 //////////////////////// 114 /** sets the scroller-travelnode (center of the screen) */ 115 static void setTravelNode(PNode* travelNode) {State::travelNode = travelNode;} 116 /** @returns the scroller-travelnode (center of the screen) */ 117 static PNode* getTravelNode() { return State::travelNode; } 111 118 112 119 … … 123 130 static GameRules* gameRules; //!< A reference to the GameRules 124 131 static Player* player; //!< A reference to the Player 132 static PNode* travelNode; //!< A reference to the scroller-travelnode 125 133 126 134 static SkyBox* skyBox; //!< The SkyBox used in the current world. -
trunk/src/util/track/track_manager.cc
r10320 r10368 26 26 #include "t_animation.h" 27 27 28 #include <string.h> 29 28 30 29 31 #include "parser/tinyxml/tinyxml.h" … … 32 34 #include <stdarg.h> 33 35 36 ObjectListDefinition(TrackElement); 34 37 35 38 … … 39 42 TrackElement::TrackElement() 40 43 { 41 this->setClassID(CL_TRACK_ELEMENT, "TrackElement"); 44 this->registerObject(this, TrackElement::_objectList); 45 42 46 43 47 this->isFresh = true; … … 126 130 { 127 131 // return if Found. 128 if (this->getName() && !strcmp(this->getName(), trackName))129 return this;132 // if (this->getName() && !strcmp(this->getName(), trackName)) 133 // return this; 130 134 // search all children 131 135 if (this->childCount > 0) … … 217 221 void TrackElement::debug() const 218 222 { 219 PRINT(0)("--== TrackElement:%i ==--", this->ID);220 if(this->getName())221 PRINT(0)("--++Name: %s++--", this->getName());222 if(this->isFresh)223 PRINT(0)(" -- has not jet eddited in any way --\n");224 PRINT(0)("\n TimeTable: startingTime=%f; endTime=%f; duration=%f; jumpTime=%f\n", this->startingTime, this->endTime, this->duration, this->jumpTime);225 PRINT(0)(" consists of %d Points\n", this->nodeCount);226 if (this->childCount == 0)227 PRINT(0)(" has no child\n");228 else if (this->childCount == 1)229 PRINT(0)(" has 1 child: =%d=\n", this->getChild(0)->ID);230 else if (this->childCount > 1)231 {232 PRINT(0)(" has %d children: ", this->childCount);233 //TrackElement* enumElem = this->children->enumerate();234 tIterator<TrackElement>* iterator = this->children->getIterator();235 TrackElement* enumElem = iterator->firstElement();236 while (enumElem)237 {238 PRINT(0)("=%d= ", enumElem->ID);239 enumElem = iterator->nextElement();240 }241 delete iterator;242 PRINT(0)("\n");243 }244 245 if(this->isHotPoint)246 PRINT(0)(" is a special Point:\n");247 if(this->isSavePoint)248 PRINT(0)(" is a SavePoint\n");249 if(this->isFork)250 {251 PRINT(0)(" is A Fork with with %d children.\n", this->childCount);252 }253 if(this->isJoined)254 PRINT(0)(" is Joined at the End\n");255 256 if(!this->backLoopCheck()) /* this should not happen */257 PRINT(2)(" THERE IS A BACKLOOP TO THIS ELEMENT\n");223 // PRINT(0)("--== TrackElement:%i ==--", this->ID); 224 // if(this->getName()) 225 // PRINT(0)("--++Name: %s++--", this->getName()); 226 // if(this->isFresh) 227 // PRINT(0)(" -- has not jet eddited in any way --\n"); 228 // PRINT(0)("\n TimeTable: startingTime=%f; endTime=%f; duration=%f; jumpTime=%f\n", this->startingTime, this->endTime, this->duration, this->jumpTime); 229 // PRINT(0)(" consists of %d Points\n", this->nodeCount); 230 // if (this->childCount == 0) 231 // PRINT(0)(" has no child\n"); 232 // else if (this->childCount == 1) 233 // PRINT(0)(" has 1 child: =%d=\n", this->getChild(0)->ID); 234 // else if (this->childCount > 1) 235 // { 236 // PRINT(0)(" has %d children: ", this->childCount); 237 // //TrackElement* enumElem = this->children->enumerate(); 238 // tIterator<TrackElement>* iterator = this->children->getIterator(); 239 // TrackElement* enumElem = iterator->firstElement(); 240 // while (enumElem) 241 // { 242 // PRINT(0)("=%d= ", enumElem->ID); 243 // enumElem = iterator->nextElement(); 244 // } 245 // delete iterator; 246 // PRINT(0)("\n"); 247 // } 248 // 249 // if(this->isHotPoint) 250 // PRINT(0)(" is a special Point:\n"); 251 // if(this->isSavePoint) 252 // PRINT(0)(" is a SavePoint\n"); 253 // if(this->isFork) 254 // { 255 // PRINT(0)(" is A Fork with with %d children.\n", this->childCount); 256 // } 257 // if(this->isJoined) 258 // PRINT(0)(" is Joined at the End\n"); 259 // 260 // if(!this->backLoopCheck()) /* this should not happen */ 261 // PRINT(2)(" THERE IS A BACKLOOP TO THIS ELEMENT\n"); 258 262 } 259 263 … … 358 362 TrackManager::TrackManager() 359 363 { 360 this->setClassID(CL_TRACK_MANAGER, "TrackManager");361 this->setName("TrackManager");362 363 364 TrackManager::singletonRef = this; // do this because otherwise the TrackNode cannot get The instance of the TrackManager 364 365 … … 395 396 void TrackManager::loadParams(const TiXmlElement* root) 396 397 { 397 double x, y, z, d;398 399 LOAD_PARAM_START_CYCLE(root, element);400 {401 402 LoadParam_CYCLE(element, "WorkOn", this, TrackManager, workOnS)403 .describe("Selects a TrackElement (by name) to work on");404 405 LoadParam_CYCLE(element, "Point", this, TrackManager, addPoint)406 .describe("Adds a new Point to the currently selected TrackElement");407 408 LoadParam_CYCLE(element, "Duration", this, TrackManager, setDuration)409 .describe("Sets the Duration of the currently selected TrackElement");410 411 LoadParam_CYCLE(element, "HotPoint", this, TrackManager, addHotPoint)412 .describe("Sets a new Point that acts as a hot point. meaning, the curve will flow through this Point");413 414 LoadParam_CYCLE(element, "SavePoint", this, TrackManager, setSavePointS)415 .describe("Sets the current selected Point to a Savepoint, meaning that the curve will be ended and a new one starts, and that one starts again from this point on");416 417 LoadParam_CYCLE(element, "Fork", this, TrackManager, forkS)418 .describe("Forks the Path into multiple forked Path names seperated by ','");419 420 LoadParam_CYCLE(element, "Join", this, TrackManager, joinS)421 .describe("Joins multiple joining Path names seperated by ','");398 // double x, y, z, d; 399 // 400 // LOAD_PARAM_START_CYCLE(root, element); 401 // { 402 // 403 // LoadParam_CYCLE(element, "WorkOn", this, TrackManager, workOnS) 404 // .describe("Selects a TrackElement (by name) to work on"); 405 // 406 // LoadParam_CYCLE(element, "Point", this, TrackManager, addPoint) 407 // .describe("Adds a new Point to the currently selected TrackElement"); 408 // 409 // LoadParam_CYCLE(element, "Duration", this, TrackManager, setDuration) 410 // .describe("Sets the Duration of the currently selected TrackElement"); 411 // 412 // LoadParam_CYCLE(element, "HotPoint", this, TrackManager, addHotPoint) 413 // .describe("Sets a new Point that acts as a hot point. meaning, the curve will flow through this Point"); 414 // 415 // LoadParam_CYCLE(element, "SavePoint", this, TrackManager, setSavePointS) 416 // .describe("Sets the current selected Point to a Savepoint, meaning that the curve will be ended and a new one starts, and that one starts again from this point on"); 417 // 418 // LoadParam_CYCLE(element, "Fork", this, TrackManager, forkS) 419 // .describe("Forks the Path into multiple forked Path names seperated by ','"); 420 // 421 // LoadParam_CYCLE(element, "Join", this, TrackManager, joinS) 422 // .describe("Joins multiple joining Path names seperated by ','"); 422 423 423 424 /* … … 445 446 } 446 447 */ 447 } 448 LOAD_PARAM_END_CYCLE(element); 448 449 // } 450 // LOAD_PARAM_END_CYCLE(element); 449 451 } 450 452 … … 477 479 void TrackManager::initChildren(unsigned int childCount, TrackElement* trackElem) 478 480 { 479 if (!trackElem)480 trackElem = this->currentTrackElem;481 482 trackElem->childCount = childCount;483 trackElem->mainJoin = true; // this tells join, that this one is the Main Join, if it tries to join multiple Tracks484 trackElem->children = new tList<TrackElement>();485 for (int i = 0; i < childCount; i++)486 {487 // create a new Element488 TrackElement* newElem = new TrackElement();489 // setting up the new ID490 newElem->ID = ++trackElemCount;491 // setting up the Time492 newElem->startingTime = trackElem->endTime + trackElem->jumpTime;493 // adds the conection Point494 this->addPointV(trackElem->curve->getNode(trackElem->curve->getNodeCount()),495 newElem);496 // add the new child to the childList.497 trackElem->children->add(newElem);498 }499 500 // setting the Name of the new TrackElement to the name of the last one + _childI501 502 if (trackElem->getName())503 {504 for (int i = 0; i < trackElem->childCount; i++)505 {506 char* childName = new char[strlen(trackElem->getName())+10];507 sprintf(childName, "%s_child%d", trackElem->getName(), i);508 trackElem->getChild(i)->setName(childName);509 }510 }511 // select the first Child to work on.512 this->currentTrackElem = trackElem->getChild(0);481 // if (!trackElem) 482 // trackElem = this->currentTrackElem; 483 // 484 // trackElem->childCount = childCount; 485 // trackElem->mainJoin = true; // this tells join, that this one is the Main Join, if it tries to join multiple Tracks 486 // trackElem->children = new tList<TrackElement>(); 487 // for (int i = 0; i < childCount; i++) 488 // { 489 // // create a new Element 490 // TrackElement* newElem = new TrackElement(); 491 // // setting up the new ID 492 // newElem->ID = ++trackElemCount; 493 // // setting up the Time 494 // newElem->startingTime = trackElem->endTime + trackElem->jumpTime; 495 // // adds the conection Point 496 // this->addPointV(trackElem->curve->getNode(trackElem->curve->getNodeCount()), 497 // newElem); 498 // // add the new child to the childList. 499 // trackElem->children->add(newElem); 500 // } 501 // 502 // // setting the Name of the new TrackElement to the name of the last one + _childI 503 // 504 // if (trackElem->getName()) 505 // { 506 // for (int i = 0; i < trackElem->childCount; i++) 507 // { 508 // char* childName = new char[strlen(trackElem->getName())+10]; 509 // sprintf(childName, "%s_child%d", trackElem->getName(), i); 510 // trackElem->getChild(i)->setName(childName); 511 // } 512 // } 513 // // select the first Child to work on. 514 // this->currentTrackElem = trackElem->getChild(0); 513 515 } 514 516 … … 659 661 void TrackManager::setSavePointS(const std::string& nextElementName) 660 662 { 661 this->setSavePoint(NULL);662 if (strcmp(nextElementName, ""))663 this->firstTrackElem->findByID(this->trackElemCount)->setName(nextElementName);663 // this->setSavePoint(NULL); 664 // if (strcmp(nextElementName, "")) 665 // this->firstTrackElem->findByID(this->trackElemCount)->setName(nextElementName); 664 666 } 665 667 … … 736 738 void TrackManager::forkS(const std::string& forkString) 737 739 { 738 SubString strings(forkString, ',');739 740 int* trackIDs = new int[strings.getCount()];741 this->forkV(strings.getCount(), trackIDs, NULL);742 743 for(int i = 0; i < strings.getCount(); i++)744 {745 this->firstTrackElem->findByID(trackIDs[i])->setName(strings.getString(i));746 }747 delete []trackIDs;740 // SubString strings(forkString, ','); 741 // 742 // int* trackIDs = new int[strings.getCount()]; 743 // this->forkV(strings.getCount(), trackIDs, NULL); 744 // 745 // for(int i = 0; i < strings.getCount(); i++) 746 // { 747 // this->firstTrackElem->findByID(trackIDs[i])->setName(strings.getString(i)); 748 // } 749 // delete []trackIDs; 748 750 } 749 751 … … 877 879 void TrackManager::joinS(const std::string& joinString) 878 880 { 879 SubString strings(joinString, ',');880 881 int* trackIDs = new int[strings.getCount()];882 this->joinV(strings.getCount(), trackIDs);883 884 for(unsigned int i = 0; i < strings.getCount(); i++)885 {886 TrackElement* tmpElem = this->firstTrackElem->findByName(strings.getString(i).c_str());887 if (tmpElem != NULL)888 trackIDs[i] = tmpElem->ID;889 else890 {891 PRINTF(1)("Trying to join a Track, of which the name does not exist: %s\n", strings.getString(i).c_str());892 trackIDs[i] = -1;893 }894 }895 this->joinV(strings.getCount(), trackIDs);896 delete []trackIDs;881 // SubString strings(joinString, ','); 882 // 883 // int* trackIDs = new int[strings.getCount()]; 884 // this->joinV(strings.getCount(), trackIDs); 885 // 886 // for(unsigned int i = 0; i < strings.getCount(); i++) 887 // { 888 // TrackElement* tmpElem = this->firstTrackElem->findByName(strings.getString(i).c_str()); 889 // if (tmpElem != NULL) 890 // trackIDs[i] = tmpElem->ID; 891 // else 892 // { 893 // PRINTF(1)("Trying to join a Track, of which the name does not exist: %s\n", strings.getString(i).c_str()); 894 // trackIDs[i] = -1; 895 // } 896 // } 897 // this->joinV(strings.getCount(), trackIDs); 898 // delete []trackIDs; 897 899 } 898 900 … … 1073 1075 void TrackManager::tick(float dt) 1074 1076 { 1075 PRINTF(4)("CurrentTrackID: %d, LocalTime is: %f, timestep is: %f\n", this->currentTrackElem->ID, this->localTime, dt);1076 if (this->localTime <= this->firstTrackElem->duration)1077 this->jumpTo(this->localTime);1078 if (this->localTime <= this->maxTime)1079 this->localTime += dt;1080 if (this->localTime > this->currentTrackElem->endTime1081 && this->currentTrackElem->children)1082 {1083 if (this->currentTrackElem->jumpTime != 0.0)1084 this->jumpTo(this->localTime + this->currentTrackElem->jumpTime);1085 // jump to the next TrackElement and also set the history of the new Element to the old one.1086 TrackElement* tmpHistoryElem = this->currentTrackElem;1087 this->currentTrackElem = this->currentTrackElem->getChild(this->choosePath(this->currentTrackElem));1088 this->currentTrackElem->history = tmpHistoryElem;1089 if (this->currentTrackElem->getName())1090 {1091 this->trackText->setText(this->currentTrackElem->getName());1092 this->textAnimation->replay();1093 }1094 }1095 if (this->bindSlave)1096 {1097 Vector tmp = this->calcPos();1098 Quaternion quat = Quaternion(this->calcDir(), Vector(this->currentTrackElem->curve->calcAcc((localTime-this->currentTrackElem->startingTime)/this->currentTrackElem->duration).x,1,this->currentTrackElem->curve->calcAcc((localTime-this->currentTrackElem->startingTime)/this->currentTrackElem->duration).z));1099 1100 Vector v(0.0, 1.0, 0.0);1101 Quaternion q(-PI/2, v);1102 quat = quat * q;1103 1104 this->bindSlave->setAbsCoor(tmp);1105 this->bindSlave->setAbsDir(quat);1106 }1077 // PRINTF(4)("CurrentTrackID: %d, LocalTime is: %f, timestep is: %f\n", this->currentTrackElem->ID, this->localTime, dt); 1078 // if (this->localTime <= this->firstTrackElem->duration) 1079 // this->jumpTo(this->localTime); 1080 // if (this->localTime <= this->maxTime) 1081 // this->localTime += dt; 1082 // if (this->localTime > this->currentTrackElem->endTime 1083 // && this->currentTrackElem->children) 1084 // { 1085 // if (this->currentTrackElem->jumpTime != 0.0) 1086 // this->jumpTo(this->localTime + this->currentTrackElem->jumpTime); 1087 // // jump to the next TrackElement and also set the history of the new Element to the old one. 1088 // TrackElement* tmpHistoryElem = this->currentTrackElem; 1089 // this->currentTrackElem = this->currentTrackElem->getChild(this->choosePath(this->currentTrackElem)); 1090 // this->currentTrackElem->history = tmpHistoryElem; 1091 // if (this->currentTrackElem->getName()) 1092 // { 1093 // this->trackText->setText(this->currentTrackElem->getName()); 1094 // this->textAnimation->replay(); 1095 // } 1096 // } 1097 // if (this->bindSlave) 1098 // { 1099 // Vector tmp = this->calcPos(); 1100 // Quaternion quat = Quaternion(this->calcDir(), Vector(this->currentTrackElem->curve->calcAcc((localTime-this->currentTrackElem->startingTime)/this->currentTrackElem->duration).x,1,this->currentTrackElem->curve->calcAcc((localTime-this->currentTrackElem->startingTime)/this->currentTrackElem->duration).z)); 1101 // 1102 // Vector v(0.0, 1.0, 0.0); 1103 // Quaternion q(-PI/2, v); 1104 // quat = quat * q; 1105 // 1106 // this->bindSlave->setAbsCoor(tmp); 1107 // this->bindSlave->setAbsDir(quat); 1108 // } 1107 1109 } 1108 1110 … … 1116 1118 void TrackManager::jumpTo(float time) 1117 1119 { 1118 if (time == 0)1119 {1120 this->currentTrackElem = this->firstTrackElem;1121 if (this->currentTrackElem->getName())1122 {1123 this->trackText->setText(this->currentTrackElem->getName());1124 this->textAnimation->play();1125 }1126 }1127 this->localTime = time;1120 // if (time == 0) 1121 // { 1122 // this->currentTrackElem = this->firstTrackElem; 1123 // if (this->currentTrackElem->getName()) 1124 // { 1125 // this->trackText->setText(this->currentTrackElem->getName()); 1126 // this->textAnimation->play(); 1127 // } 1128 // } 1129 // this->localTime = time; 1128 1130 } 1129 1131 -
trunk/src/util/track/track_manager.h
r7221 r10368 41 41 class TrackElement : public BaseObject 42 42 { 43 ObjectListDeclaration(TrackElement); 44 43 45 public: 44 46 TrackElement(); … … 131 133 \li TrackElement: A Part of A whole Track 132 134 */ 133 class TrackManager : public BaseObject135 class TrackManager 134 136 { 135 137 public: -
trunk/src/util/track/track_node.cc
r9869 r10368 17 17 18 18 19 #include "track _node.h"19 #include "track/track_node.h" 20 20 21 #include "track _manager.h"21 #include "track/track_manager.h" 22 22 23 23 24 ObjectListDefinition(TracNode); 24 ObjectListDefinition(TrackNode); 25 25 26 /** 26 27 * standard constructor … … 28 29 TrackNode::TrackNode () 29 30 { 30 this->registerObject(this, TracNode::_objectList); 31 this->setName("TrackNode"); 31 this->registerObject(this, TrackNode::_objectList); 32 32 33 33 PNode::getNullParent()->addChild(this); -
trunk/src/util/track/track_node.h
r9869 r10368 14 14 #include "p_node.h" 15 15 16 16 17 /* FORWARD DECLARATION */ 17 18 class TrackManager; … … 20 21 class TrackNode : public PNode 21 22 { 22 ObjectListDeclarat rion(TracNode);23 ObjectListDeclaration(TrackNode); 23 24 public: 24 25 TrackNode (); -
trunk/src/world_entities/Makefile.am
r9869 r10368 6 6 7 7 ## THESE ARE THE BASE CLASSES OF ALL WORLD_ENTITIES 8 libORXwe_a_SOURCES = \ 9 world_entity.cc \ 10 \ 11 camera.cc \ 12 playable.cc \ 13 player.cc \ 14 \ 15 npcs/npc.cc \ 16 \ 17 weapons/weapon_manager.cc \ 18 weapons/crosshair.cc \ 19 weapons/weapon.cc \ 20 weapons/ammo_container.cc \ 21 projectiles/projectile.cc \ 22 \ 23 extendable.cc \ 24 power_ups/power_up.cc \ 25 power_ups/param_power_up.cc \ 26 power_ups/weapon_power_up.cc \ 27 \ 28 spawning_point.cc \ 29 \ 30 \ 31 effects/explosion.cc \ 32 effects/billboard.cc \ 33 \ 34 \ 35 elements/glgui_energywidget.cc 8 libORXwe_a_SOURCES = world_entity.cc camera.cc playable.cc player.cc \ 9 npcs/npc.cc weapons/weapon_manager.cc weapons/crosshair.cc \ 10 weapons/weapon.cc weapons/ammo_container.cc projectiles/projectile.cc \ 11 extendable.cc power_ups/power_up.cc power_ups/param_power_up.cc \ 12 power_ups/weapon_power_up.cc spawning_point.cc effects/explosion.cc effects/billboard.cc effects/wobblegrid.cc\ 13 effects/trail.cc elements/glgui_energywidget.cc elements/glgui_energywidgetvertical.cc 36 14 37 15 38 noinst_HEADERS = \ 39 world_entity.h \ 40 \ 41 camera.h \ 42 extendable.h \ 43 playable.h \ 44 player.h \ 45 \ 46 npcs/npc.h \ 47 \ 48 weapons/weapon_manager.h \ 49 weapons/crosshair.h \ 50 weapons/weapon.h \ 51 weapons/ammo_container.h \ 52 projectiles/projectile.h \ 53 \ 54 power_ups/power_up.h \ 55 power_ups/param_power_up.h \ 56 power_ups/weapon_power_up.h \ 57 \ 58 spawning_point.h \ 59 \ 60 \ 61 effects/explosion.h \ 62 effects/billboard.h \ 63 \ 64 \ 65 \ 66 elements/glgui_energywidget.h \ 67 \ 68 \ 69 $(WorldEntities_HEADERS_) 16 noinst_HEADERS = world_entity.h camera.h extendable.h playable.h \ 17 player.h npcs/npc.h weapons/weapon_manager.h weapons/crosshair.h \ 18 weapons/weapon.h weapons/ammo_container.h projectiles/projectile.h \ 19 power_ups/power_up.h power_ups/param_power_up.h power_ups/weapon_power_up.h \ 20 spawning_point.h effects/explosion.h effects/billboard.h effects/trail.h effects/wobblegrid.h\ 21 elements/glgui_energywidget.h elements/glgui_energywidgetvertical.h 70 22 71 23 -
trunk/src/world_entities/WorldEntities.am
r10321 r10368 23 23 world_entities/character_attributes.cc \ 24 24 world_entities/test_entity.cc \ 25 world_entities/test_entity2.cc \ 25 26 world_entities/planet.cc \ 26 27 world_entities/bsp_entity.cc \ … … 39 40 world_entities/weapons/fps_sniper_rifle.cc \ 40 41 world_entities/weapons/boomerang_gun.cc \ 41 \ 42 world_entities/weapons/light_blaster.cc \ 43 world_entities/weapons/medium_blaster.cc \ 44 world_entities/weapons/heavy_blaster.cc \ 45 world_entities/weapons/swarm_launcher.cc \ 46 world_entities/weapons/spike_launcher.cc \ 47 world_entities/weapons/spike_thrower.cc \ 48 world_entities/weapons/acid_launcher.cc \ 49 \ 50 world_entities/projectiles/lbolt.cc \ 51 world_entities/projectiles/mbolt.cc \ 52 world_entities/projectiles/hbolt.cc \ 53 world_entities/projectiles/swarm_projectile.cc \ 42 54 world_entities/projectiles/bomb.cc \ 43 55 world_entities/projectiles/laser.cc \ … … 48 60 world_entities/projectiles/boomerang_projectile.cc \ 49 61 world_entities/projectiles/hyperblast.cc \ 62 world_entities/projectiles/spike.cc \ 63 world_entities/projectiles/acid_splash.cc \ 64 \ 65 world_entities/projectiles/projectile_weapon.cc \ 66 world_entities/projectiles/spike_ball.cc \ 50 67 \ 51 68 world_entities/power_ups/turret_power_up.cc \ … … 83 100 world_entities/particles/box_emitter.cc \ 84 101 world_entities/particles/plane_emitter.cc \ 102 world_entities/particles/emitter_node.cc \ 85 103 \ 86 104 world_entities/particles/particle_system.cc \ … … 129 147 character_attributes.h \ 130 148 test_entity.h \ 149 test_entity2.h \ 131 150 planet.h \ 132 151 bsp_entity.h \ … … 145 164 weapons/aiming_system.h \ 146 165 weapons/fps_sniper_rifle.h \ 147 \ 166 weapons/light_blaster.h \ 167 weapons/medium_blaster.h \ 168 weapons/heavy_blaster.h \ 169 weapons/swarm_launcher.h \ 170 weapons/spike_launcher.h \ 171 weapons/spike_thrower.h \ 172 weapons/acid_launcher.h \ 173 \ 174 projectiles/lbolt.h \ 175 projectiles/mbolt.h \ 176 projectiles/hbolt.h \ 177 projectiles/swarm_projectile.h \ 148 178 projectiles/bomb.h \ 149 179 projectiles/laser.h \ … … 154 184 projectiles/boomerang_projectile.h \ 155 185 projectiles/hyperblast.h \ 186 projectiles/spike.h \ 187 projectiles/spike_ball.h \ 188 projectiles/acid_splash.h \ 189 \ 190 projectiles/projectile_weapon.h \ 191 projectiles/spike_ball.h \ 156 192 \ 157 193 power_ups/turret_power_up.h \ … … 172 208 environments/model_entity.h \ 173 209 environments/building.h \ 174 environments/rotor.h \175 210 environments/mapped_water.h \ 211 environments/rotor.h \ 176 212 \ 177 213 elements/image_entity.h \ … … 188 224 particles/box_emitter.h \ 189 225 particles/plane_emitter.h \ 226 particles/emitter_node.h \ 190 227 \ 191 228 particles/particle_system.h \ -
trunk/src/world_entities/camera.cc
r9869 r10368 18 18 #include "key_mapper.h" 19 19 #include "glincl.h" 20 //#include "util/loading/load_param.h" 21 #include "world_entity.h" 20 22 21 23 ObjectListDefinition(Camera); … … 27 29 { 28 30 this->registerObject(this, Camera::_objectList); 31 this->init(); 32 } 33 34 /* 35 Camera::Camera(const TiXmlElement* root) 36 { 37 this->registerObject(this, Camera::_objectList); 38 this->init(); 39 this->loadParams(root); 40 } 41 */ 42 43 /** 44 * default destructor 45 */ 46 Camera::~Camera() 47 {} 48 49 void Camera::init() 50 { 29 51 this->setName("camera"); 30 52 this->target = new CameraTarget(); … … 37 59 this->subscribeEvent(ES_GAME, KeyMapper::PEV_VIEW5); 38 60 39 this->setFovy(90);40 this->setAspectRatio(1. 2f);61 //this->setFovy(90); 62 this->setAspectRatio(1.33f); 41 63 this->setClipRegion(.1, 10000); 64 65 this->viewTopFovy = 60; 66 this->viewNormalFovy = 90; 67 this->viewFrontFovy = 120; 68 this->viewRightFovy = 90; 69 this->viewLeftFovy = 90; 70 71 this->viewTopDistance = 70; 72 this->viewNormalDistance = 10; 73 this->viewFrontDistance = 4; 74 this->viewRightDistance = 10; 75 this->viewLeftDistance = 10; 76 77 //this->loadParams(doc.RootElement()); 42 78 43 79 this->setViewMode(Camera::ViewNormal); 44 80 45 81 this->setParentMode(PNODE_ALL); 46 } 47 48 /** 49 * default destructor 50 */ 51 Camera::~Camera() 52 {} 82 this->eventHandling = true; 83 } 53 84 54 85 /** … … 100 131 default: 101 132 case Camera::ViewNormal: 102 this->toFovy = 60.0; 103 this->setRelCoorSoft(-10, 5, 0); 133 { 134 this->fovy = viewNormalFovy; 135 this->toFovy = viewNormalFovy; 136 //this->fovy = 60; 137 //this->toFovy = 60; 138 this->setRelCoorSoft(-2.0/3.0 * this->viewNormalDistance, 1.0/3.0 * this->viewNormalDistance, 0); 104 139 this->target->setRelCoorSoft(0,0,0); 105 140 break; 141 } 106 142 case Camera::ViewBehind: 107 143 break; 108 144 case Camera::ViewFront: 109 this->toFovy = 120.0; 110 this->setRelCoorSoft(4, 0, 0, 5); 145 { 146 this->fovy = viewFrontFovy; 147 this->toFovy = viewFrontFovy; 148 this->setRelCoorSoft(this->viewFrontDistance, 0, 0, 5); 111 149 this->target->setRelCoorSoft(Vector(10,0,0), 5); 112 150 break; 151 } 113 152 case Camera::ViewLeft: 114 this->toFovy = 90; 115 this->setRelCoorSoft(0, 1, -10, .5); 153 { 154 this->fovy = viewLeftFovy; 155 this->toFovy = viewLeftFovy; 156 this->setRelCoorSoft(0, 1, -viewLeftDistance, .5); 116 157 this->target->setRelCoorSoft(0,0,0); 117 158 break; 159 } 118 160 case Camera::ViewRight: 119 this->toFovy = 90; 120 this->setRelCoorSoft(Vector(0, 1, 10)); 161 { 162 this->fovy = viewRightFovy; 163 this->toFovy = viewRightFovy; 164 this->setRelCoorSoft(Vector(0, 1, viewRightDistance), 0.5); 121 165 this->target->setRelCoorSoft(0,0,0); 122 166 break; 167 } 123 168 case Camera::ViewTop: 124 this->toFovy= 120; 125 this->setRelCoorSoft(Vector(30, 50, 0)); 126 this->target->setRelCoorSoft(35,0,0); 169 { 170 this->fovy= viewTopFovy; 171 this->toFovy = viewTopFovy; 172 this->setRelCoor(Vector(-0.05, this->viewTopDistance , 0)); 173 this->target->setRelCoor(0,0,0); 174 } 127 175 } 128 176 } … … 143 191 144 192 float tmpFovy = (this->toFovy - this->fovy); 145 if ( tmpFovy> 0.01)193 if (fabsf(tmpFovy) > 0.01) 146 194 this->fovy += tmpFovy * fabsf(dt); 147 195 } … … 192 240 void Camera::process(const Event &event) 193 241 { 194 if ( event.type == KeyMapper::PEV_VIEW0)242 if (eventHandling == true) 195 243 { 196 this->setViewMode(Camera::ViewNormal); 244 if( event.type == KeyMapper::PEV_VIEW0) 245 { 246 this->setViewMode(Camera::ViewNormal); 247 } 248 else if( event.type == KeyMapper::PEV_VIEW1) 249 { 250 this->setViewMode(Camera::ViewBehind); 251 } 252 else if( event.type == KeyMapper::PEV_VIEW2) 253 { 254 this->setViewMode(Camera::ViewFront); 255 } 256 else if( event.type == KeyMapper::PEV_VIEW3) 257 { 258 this->setViewMode(Camera::ViewLeft); 259 } 260 else if( event.type == KeyMapper::PEV_VIEW4) 261 { 262 this->setViewMode(Camera::ViewRight); 263 } 264 else if( event.type == KeyMapper::PEV_VIEW5) 265 { 266 this->setViewMode(Camera::ViewTop); 267 } 197 268 } 198 else if( event.type == KeyMapper::PEV_VIEW1) 199 { 200 this->setViewMode(Camera::ViewBehind); 201 } 202 else if( event.type == KeyMapper::PEV_VIEW2) 203 { 204 this->setViewMode(Camera::ViewFront); 205 } 206 else if( event.type == KeyMapper::PEV_VIEW3) 207 { 208 this->setViewMode(Camera::ViewLeft); 209 } 210 else if( event.type == KeyMapper::PEV_VIEW4) 211 { 212 this->setViewMode(Camera::ViewRight); 213 } 214 else if( event.type == KeyMapper::PEV_VIEW5) 215 { 216 this->setViewMode(Camera::ViewTop); 217 } 269 } 270 271 /* 272 void Camera::loadParams(const TiXmlElement* root) 273 { 274 // Do the PNode loading stuff 275 PNode::loadParams(root); 276 277 LoadParam(root, "viewTopFovy", this, Camera, setViewTopFovy); 278 LoadParam(root, "viewFrontFovy", this, Camera, setViewFrontFovy); 279 LoadParam(root, "viewLeftFovy", this, Camera, setViewLeftFovy); 280 LoadParam(root, "viewRightFovy", this, Camera, setViewRightFovy); 281 LoadParam(root, "viewBehindFovy", this, Camera, setViewBehindFovy); 282 LoadParam(root, "viewNormalFovy", this, Camera, setViewNormalFovy); 283 284 LoadParam(root, "viewTopDistance", this, Camera, setViewTopDistance); 285 LoadParam(root, "viewFrontDistance", this, Camera, setViewFrontDistance); 286 LoadParam(root, "viewLeftDistance", this, Camera, setViewLeftDistance); 287 LoadParam(root, "viewRightDistance", this, Camera, setViewRightDistance); 288 LoadParam(root, "viewBehindDistance", this, Camera, setViewBehindDistance); 289 LoadParam(root, "viewNormalDistance", this, Camera, setViewNormalDistance); 290 } 291 */ 292 293 void Camera::setViewTopFovy(float fovy) 294 { 295 this->viewTopFovy = fovy; 296 } 297 298 void Camera::setViewFrontFovy(float fovy) 299 { 300 this->viewFrontFovy = fovy; 301 } 302 303 void Camera::setViewLeftFovy(float fovy) 304 { 305 this->viewLeftFovy = fovy; 306 } 307 308 void Camera::setViewRightFovy(float fovy) 309 { 310 this->viewRightFovy = fovy; 311 } 312 313 void Camera::setViewBehindFovy(float fovy) 314 { 315 this->viewBehindFovy = fovy; 316 } 317 318 void Camera::setViewNormalFovy(float fovy) 319 { 320 this->viewNormalFovy = fovy; 321 } 322 323 void Camera::setViewTopDistance(float Distance) 324 { 325 this->viewTopDistance = Distance; 326 } 327 328 void Camera::setViewFrontDistance(float Distance) 329 { 330 this->viewFrontDistance = Distance; 331 } 332 333 void Camera::setViewLeftDistance(float Distance) 334 { 335 this->viewLeftDistance = Distance; 336 } 337 338 void Camera::setViewRightDistance(float Distance) 339 { 340 this->viewRightDistance = Distance; 341 } 342 343 void Camera::setViewBehindDistance(float Distance) 344 { 345 this->viewBehindDistance = Distance; 346 } 347 348 void Camera::setViewNormalDistance(float Distance) 349 { 350 this->viewNormalDistance = Distance; 218 351 } 219 352 -
trunk/src/world_entities/camera.h
r9869 r10368 36 36 37 37 Camera(); 38 Camera(const TiXmlElement* root); 38 39 virtual ~Camera(); 39 40 … … 43 44 44 45 void setAspectRatio(float aspectRatio); 46 inline float getAspectRatio() {return this->aspectRatio;}; 47 45 48 void setClipRegion(float nearClip, float farClip); 46 49 47 50 /** @param fovy new field of view factor (in degrees) */ 48 void setFovy(float fovy) { this->fovy = fovy; }; 51 inline void setFovy(float fovy) 52 { 53 this->fovy = fovy; 54 this->toFovy = fovy; 55 }; 56 57 inline float getFovy() {return this->fovy;}; 49 58 /** @param fovy new field of view factor (in degrees) to iterate to */ 50 59 void setToFovy(float toFovy) { this->toFovy = toFovy; }; … … 58 67 inline float distance(const PNode* node) const { return distance(node->getAbsCoor()); } 59 68 69 inline void setEventHandling(bool b) {this->eventHandling = b;} 70 inline bool getEventHandling() {return this->eventHandling;} 71 60 72 void tick(float dt); 61 73 void apply (); … … 64 76 void process(const Event &event); 65 77 78 //virtual void loadParams(const TiXmlElement* root); 79 80 void setViewTopFovy(float fovy); 81 void setViewLeftFovy(float fovy); 82 void setViewRightFovy(float fovy); 83 void setViewBehindFovy(float fovy); 84 void setViewFrontFovy(float fovy); 85 void setViewNormalFovy(float fovy); 86 87 void setViewTopDistance(float Distance); 88 void setViewLeftDistance(float Distance); 89 void setViewRightDistance(float Distance); 90 void setViewBehindDistance(float Distance); 91 void setViewFrontDistance(float Distance); 92 void setViewNormalDistance(float Distance); 93 66 94 private: 95 96 void init(); 97 67 98 CameraTarget* target; //!< The Target of the Camera (where this Camera Looks at) 99 100 bool eventHandling; //!< True, if the Camera handles the processing of events itself. Set false to overwrite the standard handling. 68 101 69 102 float fovy; //!< The field of view Angle (in degrees). … … 79 112 Vector viewVector; //!< the direction of the camera view 80 113 Vector upVector; //!< direction of the up vector 114 115 float viewTopFovy; 116 float viewLeftFovy; 117 float viewRightFovy; 118 float viewBehindFovy; 119 float viewFrontFovy; 120 float viewNormalFovy; 121 122 float viewTopDistance; 123 float viewLeftDistance; 124 float viewRightDistance; 125 float viewBehindDistance; 126 float viewFrontDistance; 127 float viewNormalDistance; 128 81 129 }; 82 130 -
trunk/src/world_entities/elements/glgui_energywidget.h
r8988 r10368 26 26 void setValue(float value); 27 27 28 inline GLGuiWidget* getNameWidget() {return &this->_name;}; 29 inline GLGuiWidget* getValueWidget() {return &this->_valueText;}; 30 inline GLGuiWidget* getBarWidget() {return &this->_bar;}; 31 28 32 protected: 29 33 virtual void resize(); -
trunk/src/world_entities/elements/glgui_radar.cc
r10317 r10368 122 122 this->_dotLists[i].positions.push_back(Vector2D(((*it)->getAbsCoor().x - _centerNode->getAbsCoor().x) * this->getSizeX2D() , 123 123 ((*it)->getAbsCoor().z - _centerNode->getAbsCoor().z) * this->getSizeY2D() ) 124 / ( 2.0f * _range));124 / (3.0f * _range)); 125 125 } 126 126 -
trunk/src/world_entities/particles/particle_emitter.h
r9869 r10368 36 36 void start(); 37 37 void stop(); 38 v oid tick(float dt);38 virtual void tick(float dt); 39 39 40 40 void setSystem(ParticleSystem* system); … … 74 74 float momentumRandom; //!< The random variation of the Momentum. 75 75 76 private:76 //private: 77 77 ParticleSystem* system; //!< The ParticleSystem this Emitter Emits into. 78 78 float saveTime; //!< The time that was missing by the last Tick (otherwise there would be no emission when framefate is too big). -
trunk/src/world_entities/playable.cc
r9869 r10368 44 44 45 45 Playable::Playable() 46 : weaponMan(this) ,47 supportedPlaymodes(Playable::Full3D),46 : weaponMan(this) 47 ,supportedPlaymodes(Playable::Full3D), 48 48 playmode(Playable::Full3D) 49 49 { -
trunk/src/world_entities/playable.h
r9869 r10368 71 71 void setCameraMode(unsigned int cameraMode = 0); 72 72 bool playmodeSupported(Playable::Playmode playmode) const { return this->supportedPlaymodes & playmode; }; 73 bool setPlaymode(Playable::Playmode playmode);73 virtual bool setPlaymode(Playable::Playmode playmode); 74 74 Playable::Playmode getPlaymode() const { return this->playmode; }; 75 75 virtual void setPlayDirection(const Quaternion& rot, float speed = 0.0f) = 0; … … 117 117 void unregisterEvent(int eventType); 118 118 119 protected: 120 WeaponManager weaponMan; //!< the weapon manager: managing a list of weapon to wepaon-slot mapping 121 bool bFire; //!< If the Ship is firing. 122 short supportedPlaymodes; //!< What Playmodes are Supported in this Playable. 123 Playable::Playmode playmode; //!< The current playmode. 124 119 125 private: 120 WeaponManager weaponMan; //!< the weapon manager: managing a list of weapon to wepaon-slot mapping121 126 std::vector<int> events; //!< A list of Events, that are captured for this playable 122 127 123 128 Player* currentPlayer; //!< The Player currently connected to this Playable (the one that has controll) otherwise NULL 124 129 125 bool bFire; //!< If the Ship is firing.126 130 int oldFlags; //!< Used for synchronisation 127 131 … … 131 135 132 136 bool bDead; 133 short supportedPlaymodes; //!< What Playmodes are Supported in this Playable.134 Playable::Playmode playmode; //!< The current playmode.135 137 136 138 float enterRadius; //!< How far one can be away from the Playable to enter it. -
trunk/src/world_entities/player.cc
r9869 r10368 16 16 #include "player.h" 17 17 #include "playable.h" 18 #include "space_ships/space_ship.h" 18 19 19 20 #include "event_handler.h" … … 73 74 PRINTF(4)("Enter new Playable\n"); 74 75 this->playable = playable; 75 this->_hud.setEnergyWidget(this->playable->getHealthWidget()); 76 this->_hud.setWeaponManager(&this->playable->getWeaponManager()); 76 this->_hud.setArmorWidget(this->playable->getHealthWidget()); 77 if (dynamic_cast<SpaceShip*>(this->playable) != 0) 78 this->_hud.setWeaponManager(&this->playable->getWeaponManager(), &dynamic_cast<SpaceShip*>(this->playable)->getWeaponManagerSecondary()); 79 else 80 this->_hud.setWeaponManager(&this->playable->getWeaponManager()); 77 81 78 82 this->playable->setPlayer(this); … … 94 98 void Player::weaponConfigChanged() 95 99 { 96 this->_hud.updateWeaponManager(); 100 //this->_hud.updateWeaponManager(); 101 102 if (dynamic_cast<SpaceShip*>(this->playable) != 0) 103 this->_hud.setWeaponManager(&this->playable->getWeaponManager(), &dynamic_cast<SpaceShip*>(this->playable)->getWeaponManagerSecondary()); 104 else 105 this->_hud.setWeaponManager(&this->playable->getWeaponManager()); 97 106 } 98 107 … … 128 137 } 129 138 139 -
trunk/src/world_entities/player.h
r9869 r10368 1 /*!1 /*! 2 2 * @file player.h 3 3 * Implements a basic playable WorldEntity … … 46 46 private: 47 47 Playable* playable; //!< The one we controll or NULL if none 48 Hud _hud; 48 Hud _hud; //!< The HUD to be displayed for this Player. 49 49 }; 50 50 -
trunk/src/world_entities/projectiles/projectile.cc
r10013 r10368 25 25 #include "playable.h" 26 26 27 #include <cmath> 28 27 29 #include "debug.h" 28 30 … … 46 48 this->subscribeReaction( CoRe::CREngine::CR_PHYSICS_FULL_WALK, Playable::staticClassID()); 47 49 50 this->physDamage = 0.0f; 51 this->elecDamage = 0.0f; 48 52 //this->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT); 49 53 } … … 60 64 */ 61 65 //delete this->projectileModel; 66 } 67 68 Projectile::Projectile (float pDamage, float eDamage, PNode* target) : WorldEntity() 69 { 70 this->registerObject(this, Projectile::_objectList); 71 72 this->lifeCycle = 0.0; 73 this->lifeSpan = 1.0f; /* sec */ 74 this->removeNode(); 75 76 /* character attributes */ 77 this->setHealth(1.0f); 78 this->setDamage(1.0f); // default damage of a projectile set to 100.0 damage points 79 80 this->physDamage = pDamage; 81 this->elecDamage = eDamage; 82 this->target = target; 83 84 //this->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT); 85 } 86 87 void Projectile::initialize(float pDamage, float eDamage, PNode* target) 88 { 89 /* character attributes*/ 90 this->physDamage = pDamage; 91 this->elecDamage = eDamage; 92 this->target = target; 62 93 } 63 94 … … 124 155 125 156 157 void Projectile::collidesWith (WorldEntity* target, const Vector& location) 158 { 159 dynamic_cast<SpaceShip*>(target)->damage(this->getPhysDamage(),this->getElecDamage()); 160 // this->destroy(NULL); 161 this->destroy(target); 162 } 163 164 165 126 166 /** 127 167 * signal tick, time dependent things will be handled here … … 130 170 void Projectile::tick (float dt) 131 171 { 132 Vector v = this->velocity * (dt);133 this->shiftCoor(v);134 135 172 if (this->tickLifeCycle(dt)) 136 173 this->destroy( NULL ); -
trunk/src/world_entities/projectiles/projectile.h
r9869 r10368 12 12 #include "world_entity.h" 13 13 #include "loading/fast_factory.h" 14 #include "space_ships/space_ship.h" 14 15 15 16 #include "sound_source.h" … … 22 23 Projectile (); 23 24 virtual ~Projectile (); 25 26 /** @brief Constructor with variable passing*/ 27 Projectile (float pDamage, float eDamage, PNode* target); 28 /** @brief for void construction; setting values later - needed for FastFactory*/ 29 virtual void initialize(float pDamage, float eDamage, PNode* target); 24 30 25 31 void setFlightDirection(const Quaternion& flightDirection); … … 44 50 virtual void destroy (WorldEntity* killer); 45 51 52 virtual void collidesWith (WorldEntity* target, const Vector& location); //!< collision handler; used against SpaceShip as most target will be 53 54 46 55 virtual void tick (float dt); 47 56 /** @brief convenience function … … 50 59 inline bool tickLifeCycle(float dt ) { this->lifeCycle += dt/this->lifeSpan; return(unlikely(this->lifeCycle >= 1)); } 51 60 61 inline float getPhysDamage() { return this->physDamage; }; 62 inline float getElecDamage() { return this->elecDamage; }; 63 64 inline void setPhysDamage( float dmg) {this->physDamage = dmg; }; 65 inline void setElecDamage( float dmg) {this->elecDamage = dmg; }; 52 66 53 67 protected: 54 68 // energy 55 float energyMin; //!< The minimal Energy a Projectile needs to be emitted. 56 bool bChargeable; //!< if the Projectile is Charegeable 69 int origList; //!< FIXME currently a fix around the collision seg fault 70 float energyMin; //!< The minimal Energy a Projectile needs to be emitted. 71 bool bChargeable; //!< if the Projectile is Charegeable 57 72 58 float lifeCycle;//!< The percentage of the Lifetime done [0-1]59 float lifeSpan;//!< The entire lifespan of the Shoot. in seconds73 float lifeCycle; //!< The percentage of the Lifetime done [0-1] 74 float lifeSpan; //!< The entire lifespan of the Shoot. in seconds 60 75 61 Vector flightDirection; //!< DOF direction in which the shoot flighs 76 float physDamage; //!< damage to shield and armor 77 float elecDamage; //!< damage to elctronic 78 float turningSpeed; //!< degrees per tick 62 79 63 Vector velocity; //!< velocity of the projectile.80 Vector flightDirection; //!< DOF direction in which the shoot flighs 64 81 65 PNode* target; //!< A target for guided Weapons. 82 Vector velocity; //!< velocity of the projectile. 83 84 PNode* target; //!< A target for guided Weapons. 66 85 67 86 OrxSound::SoundSource soundSource; -
trunk/src/world_entities/sound_entity.cc
r10351 r10368 17 17 #include "sound_entity.h" 18 18 19 #include "util/loading/load_param.h" 19 20 #include "util/loading/factory.h" 20 21 #include "material.h" … … 43 44 this->loadParams(root); 44 45 45 this->thunderBuffer = OrxSound::ResourceSoundBuffer("sounds/atmosphere/thunder.wav");46 46 } 47 47 … … 53 53 { 54 54 } 55 56 55 57 56 /** … … 73 72 * @param fileName name of the sound source 74 73 */ 75 void SoundEntity::setSoundFile(const std::string fileName)74 void SoundEntity::setSoundFile(const std::string& fileName) 76 75 { 77 76 this->soundBuffer = OrxSound::ResourceSoundBuffer(fileName); -
trunk/src/world_entities/sound_entity.h
r10351 r10368 28 28 virtual void loadParams(const TiXmlElement* root); 29 29 30 void setSoundFile(const std::string fileName);30 void setSoundFile(const std::string& fileName); 31 31 32 32 virtual void activate(); -
trunk/src/world_entities/space_ships/space_ship.cc
r10317 r10368 23 23 24 24 #include "weapons/test_gun.h" 25 #include "weapons/light_blaster.h" 26 #include "weapons/medium_blaster.h" 27 #include "weapons/heavy_blaster.h" 28 #include "weapons/swarm_launcher.h" 29 #include "weapons/spike_launcher.h" 30 #include "weapons/spike_thrower.h" 31 #include "weapons/acid_launcher.h" 32 #include "weapons/boomerang_gun.h" 25 33 #include "weapons/turret.h" 26 34 #include "weapons/cannon.h" 27 35 36 #include "elements/glgui_energywidgetvertical.h" 37 #include "glgui_bar.h" 38 28 39 #include "particles/dot_emitter.h" 40 #include "particles/emitter_node.h" 29 41 #include "particles/sprite_particles.h" 42 #include "effects/trail.h" 43 44 #include "effects/wobblegrid.h" 30 45 31 46 #include "util/loading/factory.h" … … 44 59 #include "state.h" 45 60 #include "player.h" 61 #include "camera.h" 62 46 63 47 64 #include "util/loading/load_param.h" 65 #include "time.h" 66 67 #include "track/track.h" 68 #include "math.h" 48 69 49 70 50 71 // #include "lib/gui/gl_gui/glgui_bar.h" 51 72 // #include "lib/gui/gl_gui/glgui_pushbutton.h" 52 53 73 54 74 … … 70 90 ->addMethod("getAbsCoorY", Executor0ret<PNode, lua_State*, float>(&PNode::getAbsCoorY)) 71 91 ->addMethod("getAbsCoorZ", Executor0ret<PNode, lua_State*, float>(&PNode::getAbsCoorZ)) 92 //->addMethod("setCameraSpeed", Executor1<SpaceShip, lua_State*, float>(&SpaceShip::setCameraSpeed)) 72 93 ); 73 94 … … 85 106 */ 86 107 SpaceShip::SpaceShip(const std::string& fileName) 108 : secWeaponMan(this) //, 109 //supportedPlaymodes(Playable::Vertical) , 110 //playmode(Playable::Vertical) 87 111 { 88 112 this->init(); … … 105 129 */ 106 130 SpaceShip::SpaceShip(const TiXmlElement* root) 131 : secWeaponMan(this) //, 132 //supportedPlaymodes(Playable::Vertical) , 133 //playmode(Playable::Vertical) 107 134 { 108 135 this->init(); 136 //this->setParentMode(PNODE_REPARENT_DELETE_CHILDREN); 109 137 if (root != NULL) 110 138 this->loadParams(root); … … 118 146 void SpaceShip::init() 119 147 { 148 149 srand(time(0)); //initialize Random Nomber Generator 150 120 151 // this->setRelDir(Quaternion(M_PI, Vector(1,0,0))); 121 152 this->registerObject(this, SpaceShip::_objectList); 122 123 153 PRINTF(4)("SPACESHIP INIT\n"); 124 154 this->weaponMan.setParentEntity( this); 125 155 //weapons: 126 Weapon* wpRight = new TestGun(0); 127 wpRight->setName("testGun Right"); 128 Weapon* wpLeft = new TestGun(1); 129 wpLeft->setName("testGun Left"); 130 //Weapon* cannon = dynamic_cast<Weapon*>(Factory::fabricate(CL_CANNON)); 131 132 //cannon->setName("BFG"); 133 134 this->addWeapon(wpLeft, 1, 0); 135 this->addWeapon(wpRight,1 ,1); 136 //this->addWeapon(cannon, 0, 6); 137 138 this->getWeaponManager().changeWeaponConfig(1); 139 140 bUp = bDown = bLeft = bRight = bAscend = bDescend = bRollL = bRollR = false; 141 142 xMouse = yMouse = 0; 143 yInvert = 1; 144 mouseSensitivity = 0.001; 145 airViscosity = 0.9; 146 controlVelocityX = 25; 147 controlVelocityY = 150; 148 shipInertia = 1.5; 149 // cycle = 0.0; 150 151 this->setHealthMax(100); 152 this->setHealth(80); 153 154 travelSpeed = 0.0; 155 acceleration = 3; 156 this->velocity = this->getAbsDirX()*travelSpeed; 157 this->mouseDir = this->getAbsDir(); 158 this->pitchDir = this->getAbsDir(); 159 160 // GLGuiButton* button = new GLGuiPushButton(); 161 // button->show(); 162 // button->setLabel("orxonox"); 163 // button->setBindNode(this); 164 // GLGuiBar* bar = new GLGuiBar(); 165 // bar->show(); 166 // bar->setValue(7.0); 167 // bar->setMaximum(10); 168 // bar->setSize2D( 20, 100); 169 // bar->setAbsCoor2D( 10, 200); 156 157 Weapon* wpRight1 = new LightBlaster (); 158 wpRight1->setName( "LightBlaster"); 159 Weapon* wpLeft1 = new LightBlaster (); 160 wpLeft1->setName( "LightBlaster"); 161 162 Weapon* wpRight2 = new MediumBlaster (); 163 wpRight2->setName( "MediumBlaster"); 164 Weapon* wpLeft2 = new MediumBlaster (); 165 wpLeft2->setName( "MediumBlaster"); 166 167 Weapon* wpRight3 = new HeavyBlaster (1); 168 wpRight3->setName( "HeavyBlaster"); 169 Weapon* wpLeft3 = new HeavyBlaster (0); 170 wpLeft3->setName( "HeavyBlaster"); 171 172 Weapon* cannon = new SwarmLauncher(); 173 cannon->setName( "SwarmLauncher"); 174 175 Weapon* spike = new SpikeThrower(); 176 spike->setName( "SpikeThrower" ); 177 178 179 Weapon* acid0 = new AcidLauncher(); 180 acid0->setName( "AcidSplasher" ); 181 182 Weapon* acid1 = new AcidLauncher(); 183 acid1->setName( "AcidSplasher" ); 184 185 186 this->weaponMan.addWeapon( wpLeft1, 0, 0); 187 this->weaponMan.addWeapon( wpRight1, 0, 1); 188 189 this->weaponMan.addWeapon( wpLeft2, 1, 2); 190 this->weaponMan.addWeapon( wpRight2, 1, 3); 191 192 this->weaponMan.addWeapon( wpLeft3, 2, 4); 193 this->weaponMan.addWeapon( wpRight3, 2, 5); 194 /* 195 this->weaponMan.addWeapon( wpLeft1, 3, 0); 196 this->weaponMan.addWeapon( wpRight1, 3, 1); 197 198 this->weaponMan.addWeapon( wpLeft2, 3, 2); 199 this->weaponMan.addWeapon( wpRight2, 3, 3); 200 201 this->weaponMan.addWeapon( wpLeft3, 3, 4); 202 this->weaponMan.addWeapon( wpRight3, 3, 5); 203 */ 204 205 this->weaponMan.addWeapon( acid0, 3, 0); 206 this->weaponMan.addWeapon( acid1, 3, 1); 207 208 209 this->secWeaponMan.addWeapon( cannon, 0, 2); 210 this->secWeaponMan.addWeapon( spike, 1, 3); 211 // this->secWeaponMan.addWeapon( acid0, 2, 2); 212 // this->secWeaponMan.addWeapon( acid1, 2, 3); 213 214 215 this->weaponMan.changeWeaponConfig(3); 216 this->secWeaponMan.changeWeaponConfig(1); 217 218 curWeaponPrimary = 0; 219 curWeaponSecondary = 1; 220 221 Playable::weaponConfigChanged(); 222 223 reactorOutput = 10; 224 225 weaponEnergyRegen = 10; // 10 einheiten pro Sekunde 226 engineSpeedBase = 5; 227 shieldRegen = 2; 228 229 shieldEnergyShare = 0.3; 230 weaponEnergyShare = 0.3; 231 engineEnergyShare = 0.4; 232 233 shieldCur = 20; 234 shieldMax = 100; 235 shieldTH = .2 * shieldMax; // shield power must be 20% before shield kicks in again 236 237 this->setHealth( 20); 238 this->setHealthMax( 100); 239 240 electronicCur = 50; 241 electronicMax = 50; 242 electronicRegen = 3; 243 electronicTH = .7 * electronicMax; // 30% of eDamage can be handled by the ship 244 245 246 this->loadModel("models/ships/mantawing.obj"); 247 //this->setVisibiliy(false); 248 249 bForward = bBackward = bLeft = bRight = bAscend = bDescend = bRollL = bRollR = bFire = bSecFire = false; 250 251 this->setHealthMax(shieldMax); 252 this->setHealth(shieldCur); 253 254 this->travelNode = new PNode(); 255 256 // camera - issue 257 this->cameraNode.addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT); 258 this->cameraNode.addNodeFlags(PNODE_PROHIBIT_CHILD_DELETE); 259 260 // widget handling 261 /* 262 this->electronicWidget = new OrxGui::GLGuiEnergyWidgetVertical(); 263 this->electronicWidget->setDisplayedName(std::string(this->getClassName()) + " Electronics:"); 264 this->electronicWidget->setSize2D(30,400); 265 this->electronicWidget->setAbsCoor2D(150,200); 266 this->electronicWidget->shiftDir2D(270); 267 this->updateElectronicWidget(); 268 this->shieldWidget = new OrxGui::GLGuiEnergyWidgetVertical(); 269 this->shieldWidget->setDisplayedName(std::string(this->getClassName()) + " Shield:"); 270 this->shieldWidget->setSize2D(30,400); 271 this->shieldWidget->setAbsCoor2D(200,200); 272 this->shieldWidget->shiftDir2D(270); 273 this->updateShieldWidget(); 274 if (this->hasPlayer()) 275 { 276 State::getPlayer()->hud().setShiledWidget(this->shieldWidget); 277 State::getPlayer()->hud().setEnergyWidget(this->electronicWidget); 278 } 279 */ 280 this->electronicWidget = NULL; 281 this->shieldWidget = NULL; 170 282 171 283 //add events to the eventlist … … 177 289 //registerEvent(SDLK_e); 178 290 registerEvent(KeyMapper::PEV_FIRE1); 291 registerEvent(KeyMapper::PEV_FIRE2); // Added for secondary weapon support 179 292 registerEvent(KeyMapper::PEV_NEXT_WEAPON); 180 293 registerEvent(KeyMapper::PEV_PREVIOUS_WEAPON); … … 183 296 registerEvent(EV_MOUSE_MOTION); 184 297 185 this->getWeaponManager().setSlotCount(7); 186 187 this->getWeaponManager().setSlotPosition(0, Vector(-2.6, .1, -3.0)); 188 this->getWeaponManager().setSlotCapability(0, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 189 190 this->getWeaponManager().setSlotPosition(1, Vector(-2.6, .1, 3.0)); 191 this->getWeaponManager().setSlotCapability(1, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 192 193 this->getWeaponManager().setSlotPosition(2, Vector(-1.5, .5, -.5)); 194 this->getWeaponManager().setSlotDirection(2, Quaternion(-M_PI_4*.5, Vector(1,0,0))); 195 196 this->getWeaponManager().setSlotPosition(3, Vector(-1.5, .5, .5)); 197 this->getWeaponManager().setSlotDirection(3, Quaternion(M_PI_4*.5, Vector(1,0,0))); 198 199 this->getWeaponManager().setSlotPosition(4, Vector(-1.5, -.5, .5)); 200 this->getWeaponManager().setSlotDirection(4, Quaternion(-M_PI_4*.5+M_PI, Vector(1,0,0))); 201 202 this->getWeaponManager().setSlotPosition(5, Vector(-1.5, -.5, -.5)); 203 this->getWeaponManager().setSlotDirection(5, Quaternion(+M_PI_4*.5-M_PI, Vector(1,0,0))); 204 // 205 this->getWeaponManager().setSlotPosition(6, Vector(-1, 0.0, 0)); 206 this->getWeaponManager().setSlotCapability(6, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 207 // 208 // this->getWeaponManager().setSlotPosition(8, Vector(-2.5, -0.3, -2.0)); 209 // this->getWeaponManager().setSlotDirection(8, Quaternion(-M_PI, Vector(1,0,0))); 210 // 211 // this->getWeaponManager().setSlotPosition(9, Vector(-2.5, -0.3, 2.0)); 212 // this->getWeaponManager().setSlotDirection(9, Quaternion(+M_PI, Vector(1,0,0)));: 213 214 this->getWeaponManager().getFixedTarget()->setParent(this); 215 this->getWeaponManager().getFixedTarget()->setRelCoor(100000,0,0); 216 217 dynamic_cast<Element2D*>(this->getWeaponManager().getFixedTarget())->setVisibility( false); 218 219 this->burstEmitter = new DotEmitter(200, 0.0, .01); 220 this->burstEmitter->setParent(this); 221 this->burstEmitter->setRelCoor(-1, .5, 0); 222 this->burstEmitter->setName("SpaceShip_Burst_emitter"); 223 224 this->burstSystem = new SpriteParticles(1000); 225 this->burstSystem->addEmitter(this->burstEmitter); 226 this->burstSystem->setName("SpaceShip_Burst_System"); 227 ((SpriteParticles*)this->burstSystem)->setMaterialTexture("textures/radial-trans-noise.png"); 228 this->burstSystem->setLifeSpan(1.0, .3); 229 this->burstSystem->setRadius(0.0, 1.0); 230 this->burstSystem->setRadius(0.05, 1.0); 231 this->burstSystem->setRadius(.5, .8); 232 this->burstSystem->setRadius(1.0, 0); 233 this->burstSystem->setColor(0.0, .7,.7,1,.7); 234 this->burstSystem->setColor(0.2, 0,0,0.8,.5); 235 this->burstSystem->setColor(0.5, .5,.5,.8,.8); 236 this->burstSystem->setColor(1.0, .8,.8,.8,.0); 237 238 registerVar( new SynchronizeableVector( &velocity, &velocity, "velocity", PERMISSION_MASTER_SERVER ) ); 239 registerVar( new SynchronizeableQuaternion( &mouseDir, &mouseDir, "mousedir", PERMISSION_OWNER ) ); 240 241 registerVar( new SynchronizeableBool( &bUp, &bUp, "bUp", PERMISSION_OWNER ) ); 242 registerVar( new SynchronizeableBool( &bDown, &bDown, "bDown", PERMISSION_OWNER ) ); 298 this->weaponMan.setParentEntity( this); 299 this->secWeaponMan.setParentEntity( this); 300 301 this->weaponMan.setSlotCount(8); 302 303 this->weaponMan.setSlotPosition(0, Vector(0.0, 0, -3.0)); 304 this->weaponMan.setSlotCapability(0, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 305 306 this->weaponMan.setSlotPosition(1, Vector(0.0, 0, 3.0)); 307 this->weaponMan.setSlotCapability(1, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 308 309 this->weaponMan.setSlotPosition(2, Vector(1.0, 0, -1.5)); 310 this->weaponMan.setSlotDirection(2, Quaternion(-M_PI_4*.5, Vector(1,0,0))); 311 312 this->weaponMan.setSlotPosition(3, Vector(1.0, 0, 1.5)); 313 this->weaponMan.setSlotDirection(3, Quaternion(M_PI_4*.5, Vector(1,0,0))); 314 315 this->weaponMan.setSlotPosition(4, Vector(1.5, 0, .5)); 316 this->weaponMan.setSlotDirection(4, Quaternion(-M_PI_4*.5+M_PI, Vector(1,0,0))); 317 318 this->weaponMan.setSlotPosition(5, Vector(1.5, 0, -.5)); 319 this->weaponMan.setSlotDirection(5, Quaternion(+M_PI_4*.5-M_PI, Vector(1,0,0))); 320 321 this->weaponMan.setSlotPosition(6, Vector(0.5, 0, 2.5)); 322 this->weaponMan.setSlotDirection(6, Quaternion(-M_PI_4*.5+M_PI, Vector(1,0,0))); 323 324 this->weaponMan.setSlotPosition(7, Vector(0.5, 0, -2.5)); 325 this->weaponMan.setSlotDirection(7, Quaternion(+M_PI_4*.5-M_PI, Vector(1,0,0))); 326 327 this->secWeaponMan.setSlotPosition(0, Vector(1.5, 0, 0)); 328 this->secWeaponMan.setSlotCapability(0, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 329 330 this->secWeaponMan.setSlotPosition(1, Vector(2.6, 0, 3.0)); 331 this->secWeaponMan.setSlotCapability(1, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 332 333 this->secWeaponMan.setSlotPosition(2, Vector(1.5, 0, -.5)); 334 this->secWeaponMan.setSlotDirection(2, Quaternion(-M_PI_4*.5, Vector(1,0,0))); 335 336 this->secWeaponMan.setSlotPosition(3, Vector(1.5, 0, .5)); 337 this->secWeaponMan.setSlotDirection(3, Quaternion(M_PI_4*.5, Vector(1,0,0))); 338 339 this->secWeaponMan.setSlotPosition(4, Vector(1.5, 0, .5)); 340 this->secWeaponMan.setSlotDirection(4, Quaternion(-M_PI_4*.5+M_PI, Vector(1,0,0))); 341 342 this->secWeaponMan.setSlotPosition(5, Vector(1.5, 0, -.5)); 343 this->secWeaponMan.setSlotDirection(5, Quaternion(+M_PI_4*.5-M_PI, Vector(1,0,0))); 344 345 346 this->weaponMan.getFixedTarget()->setParent(this); 347 this->weaponMan.getFixedTarget()->setRelCoor(100000,0,0); 348 349 350 this->secWeaponMan.getFixedTarget()->setParent(this); 351 this->secWeaponMan.getFixedTarget()->setRelCoor(100000,0,0); 352 this->secWeaponMan.setRotationSpeed(0); 353 354 dynamic_cast<Element2D*>(this->weaponMan.getFixedTarget())->setVisibility( false); 355 356 357 registerVar( new SynchronizeableBool( &bForward, &bForward, "bForward", PERMISSION_OWNER ) ); 358 registerVar( new SynchronizeableBool( &bBackward, &bBackward, "bBackward", PERMISSION_OWNER ) ); 243 359 registerVar( new SynchronizeableBool( &bLeft, &bLeft, "bLeft", PERMISSION_OWNER ) ); 244 360 registerVar( new SynchronizeableBool( &bRight, &bRight, "bRight", PERMISSION_OWNER ) ); 245 registerVar( new SynchronizeableBool( &bAscend, &bAscend, "bAscend", PERMISSION_OWNER ) ); 246 registerVar( new SynchronizeableBool( &bDescend, &bDescend, "bDescend", PERMISSION_OWNER ) ); 247 registerVar( new SynchronizeableBool( &bRollL, &bRollL, "bRollL", PERMISSION_OWNER ) ); 248 registerVar( new SynchronizeableBool( &bRollR, &bRollR, "bRollR", PERMISSION_OWNER ) ); 361 registerVar( new SynchronizeableFloat( &cameraLook, &cameraLook, "cameraLook", PERMISSION_OWNER ) ); 362 registerVar( new SynchronizeableFloat( &rotation, &rotation, "rotation", PERMISSION_OWNER ) ); 363 registerVar( new SynchronizeableBool( &bFire, &bFire, "bSecFire", PERMISSION_OWNER)); 364 registerVar( new SynchronizeableVector( &velocity, &velocity, "velocity", PERMISSION_MASTER_SERVER ) ); 365 366 //this->airFriction = 0.5f; 367 //this->travelDistancePlus = Vector2D(38.0, 43.0); 368 //this->travelDistanceMinus = Vector2D(-38.0, -43.0); 369 this->travelDistancePlus = Vector2D(50,50); 370 this->travelDistanceMinus = Vector2D(-50,-50); 371 this->isTravelDistanceInit = true; 372 this->actionWidthPercentage = 1; 373 374 this->cameraSpeed = 40; 375 this->cameraLook = 0.0f; 376 //this->airFriction = 0.0f; 377 378 srand(time(0)); //initaialize RNG 379 380 this->travelNode->debugDraw(); 381 382 this->setSupportedPlaymodes(Playable::Horizontal | Playable::Vertical); 383 384 /// FIXME 385 this->trail = new Trail( 5, 10, .2, this); 386 this->trail->setTexture( "maps/engine.png"); 387 388 this->trailL = new Trail( 5, 10, .2, this); 389 this->trailL->setTexture( "maps/engine.png"); 390 391 this->trailR = new Trail( 5, 10, .2, this); 392 this->trailR->setTexture( "maps/engine.png"); 393 394 395 this->toList(OM_GROUP_00); 396 397 //FIXME Just testaddition to show the wobblegrid 398 /* 399 this->test = new Wobblegrid(5); 400 test->setTexture("maps/blub.png"); 401 402 test->setAbsCoor( this->getAbsCoor() + Vector(0, 2, 0)); 403 test->setParent( this); 404 */ 405 249 406 } 250 407 … … 257 414 { 258 415 Playable::loadParams(root); 259 } 260 261 void SpaceShip::setPlayDirection(const Quaternion& quat, float speed) 262 { 263 this->mouseDir = quat; 264 } 265 416 417 LoadParam(root, "playmode", this, SpaceShip, setPlaymodeXML); 418 LoadParam(root, "cameraDistance", this, SpaceShip, setCameraDistance); 419 LoadParam(root, "cameraFovy", this, SpaceShip, setCameraFovy); 420 LoadParam(root, "actionWidthPercentage", this, SpaceShip, setActionWidthPercentage); 421 422 State::getCamera()->setViewMode(Camera::ViewTop); 423 } 424 425 426 void SpaceShip::setPlayDirection(const Quaternion& rot, float speed) 427 { 428 //this->direction = Quaternion (rot.getHeading(), Vector(0,1,0)); 429 } 266 430 267 431 void SpaceShip::reset() 268 432 { 269 b Up = bDown = bLeft = bRight = bAscend = bDescend = bRollL = bRollR= false;270 271 xMouse = yMouse = 0;433 bForward = bBackward = bLeft = bRight = bAscend = bDescend = bRollL = bRollR = bFire = bSecFire = false; 434 435 //xMouse = yMouse = 0; 272 436 273 437 this->setHealth(80); … … 278 442 void SpaceShip::enter() 279 443 { 280 dynamic_cast<Element2D*>(this->getWeaponManager().getFixedTarget())->setVisibility( true); 281 this->attachCamera(); 444 this->secWeaponMan.showCrosshair(); 445 this->toList( OM_GROUP_01 ); 446 State::getPlayer()->hud().setRadarCenterNode(this->travelNode); 447 State::getPlayer()->hud().setOverlayActive(true); 448 //dynamic_cast <OrxGui::GLGuiEnergyWidgetVertical*> (State::getPlayer()->hud().getArmorWidget())->setDisplayedName("Armor"); 449 //dynamic_cast<Element2D*>(this->secWeaponMan.getFixedTarget())->setVisibility( true); 450 //this->attachCamera(); 451 // this->setPlaymode(Playable::Horizontal); 282 452 } 283 453 284 454 void SpaceShip::leave() 285 455 { 286 dynamic_cast<Element2D*>(this->getWeaponManager().getFixedTarget())->setVisibility( false); 287 this->detachCamera(); 456 this->secWeaponMan.hideCrosshair(); 457 this->toList( OM_GROUP_00); 458 State::getPlayer()->hud().setOverlayActive(false); 459 State::getCamera()->setEventHandling(true); 460 State::getPlayer()->hud().setRadarCenterNode(NULL); 461 //dynamic_cast<Element2D*>(this->secWeaponMan.getFixedTarget())->setVisibility( false); 462 //this->detachCamera(); 288 463 } 289 464 … … 294 469 void SpaceShip::postSpawn () 295 470 { 471 if(this->hasPlayer()) 472 Playable::postSpawn(); 473 296 474 //setCollision(new CollisionCluster(1.0, Vector(0,0,0))); 297 475 } … … 301 479 */ 302 480 void SpaceShip::leftWorld () 303 {} 481 { 482 483 } 304 484 305 485 WorldEntity* ref = NULL; 306 /**307 * this function is called, when two entities collide308 * @param entity: the world entity with whom it collides309 *310 * Implement behaviour like damage application or other miscellaneous collision stuff in this function311 */312 void SpaceShip::collidesWith(WorldEntity* entity, const Vector& location)313 {314 }315 486 316 487 /** … … 321 492 WorldEntity::draw(); 322 493 494 glMatrixMode(GL_MODELVIEW); 495 glPushMatrix(); 496 497 float matrix[4][4]; 498 glTranslatef (this->getAbsCoor ().x-1, this->getAbsCoor ().y-.2, this->getAbsCoor ().z); 499 this->getAbsDir().matrix (matrix); 500 glMultMatrixf((float*)matrix); 501 //glScalef(2.0, 2.0, 2.0); // no double rescale 502 // FIXME 503 this->trail->draw(); 504 505 glTranslatef(0,0,-.5); 506 this->trailL->draw(); 507 508 glTranslatef(0,0,1); 509 this->trailR->draw(); 510 511 glPopMatrix(); 323 512 //this->debug(0); 324 513 } … … 330 519 void SpaceShip::tick (float time) 331 520 { 332 Playable::tick(time); 333 334 if( ( xMouse != 0 || yMouse != 0 ) && this->getOwner() == SharedNetworkData::getInstance()->getHostID() ) 335 { 336 if (xMouse > controlVelocityX) xMouse = controlVelocityX; 337 else if (xMouse < -controlVelocityX) xMouse = -controlVelocityX; 338 if (yMouse > controlVelocityY) yMouse = controlVelocityY; 339 else if (yMouse < -controlVelocityY) yMouse = -controlVelocityY; 340 341 pitchDir = (Quaternion(xMouse*mouseSensitivity*0.5, Vector(1,0,0))); 342 343 mouseDir *= (Quaternion(-M_PI/4*xMouse*mouseSensitivity, Vector(0,1,0))*Quaternion(-M_PI/4*yMouse*mouseSensitivity*yInvert, Vector(0,0,1))*pitchDir); 344 xMouse = yMouse = 0; 345 } 346 347 348 // if( this != State::getPlayer()->getControllable()) 349 // return; 350 351 // spaceship controlled movement fire(bool bF){ this->bFire = bF;} 352 //if (this->getOwner() == this->getHostID()) 353 this->calculateVelocity(time); 354 355 356 Vector move = velocity*time; 357 358 //orient the velocity in the direction of the spaceship. 359 travelSpeed = velocity.len(); 360 velocity += ((this->getAbsDirX())*travelSpeed-velocity)*airViscosity; 361 velocity = (velocity.getNormalized())*travelSpeed; 362 this->burstEmitter->setEmissionRate(travelSpeed); 363 this->burstEmitter->setEmissionVelocity(travelSpeed*.5, travelSpeed *.1); 521 // Playable::tick(time); 522 523 // this->test->tick(time); 524 525 // Own Tick Setup, as a different fire routine is used on the weapon manager 526 this->weaponMan.tick(time); 527 this->secWeaponMan.tick(time); 528 529 if( this->systemFailure() ) 530 bFire = bSecFire = false; 531 532 // fire reqeust/release for primary weapons 533 if( this->bFire) 534 this->weaponMan.fire(); 535 else 536 this->weaponMan.releaseFire(); 537 538 // fire reqeust/release for secondary weapons 539 if( this->bSecFire) 540 this->secWeaponMan.fire(); 541 else 542 this->secWeaponMan.releaseFire(); 543 544 // Tracktick 545 if(this->entityTrack) 546 this->entityTrack->tick(time); 547 548 549 // Shield Regeneration and other regular calculations on the ship 550 this->regen(time); 551 552 // Weapon Regeneration and other regular calculations on the ship 553 this->weaponRegen(time); 554 555 // current engine speed output 556 this->engineSpeedCur = this->engineSpeedBase + this->reactorOutput * this->engineEnergyShare; 557 558 // calculation of maxSpeed and acceleration: 559 this->travelSpeed = this->engineSpeedCur * 5; 560 this->acceleration = this->travelSpeed * 2; 561 562 this->movement(time); 563 564 // TRYING TO FIX PNode. 565 this->cameraNode.setAbsCoorSoft(this->getAbsCoor() + Vector(0.0f, 5.0f, 0.0f), 30.0f); 566 this->cameraNode.setRelDirSoft(this->getAbsDir(), 30.0f); 567 568 569 this->velocity = (this->getAbsCoor() - this->oldPos) / time; 570 this->oldPos = this->getAbsCoor(); 571 572 //FIXME 573 this->trail->tick(time); 574 this->trailL->tick(time); 575 this->trailR->tick(time); 576 577 if (!this->isTravelDistanceInit) 578 { 579 this->updateTravelDistance(); 580 //this->isTravelDistanceInit = true; 581 } 364 582 365 583 //orient the spaceship in direction of the mouse 584 /* 366 585 rotQuat = Quaternion::quatSlerp( this->getAbsDir(), mouseDir, 0.5);//fabsf(time)*shipInertia); 367 586 if (this->getAbsDir().distance(rotQuat) > 0.00000000000001) 368 587 this->setAbsDir( rotQuat); 369 588 //this->setAbsDirSoft(mouseDir,5); 370 371 // this is the air friction (necessary for a smooth control) 372 if(travelSpeed >= 120) velocity -= velocity.getNormalized()*travelSpeed*travelSpeed*0.0001; 373 else if (travelSpeed <= 80) velocity -= velocity.getNormalized()*travelSpeed*0.001; 374 375 //other physics (gravity) 376 //if(travelSpeed < 120) 377 //move += Vector(0,-1,0)*60*time + Vector(0,1,0)*travelSpeed/2*time; 378 379 //hoover effect 380 //cycle += time; 381 //this->shiftCoor(Vector(0,1,0)*cos(this->cycle*2.0)*0.02); 382 383 //readjust 384 //if (this->getAbsDirZ().y > 0.1) this->shiftDir(Quaternion(time*0.3, Vector(1,0,0))); 385 //else if (this->getAbsDirZ().y < -0.1) this->shiftDir(Quaternion(-time*0.3, Vector(1,0,0))); 386 387 //SDL_WarpMouse(GraphicsEngine::getInstance()->getResolutionX()/2, GraphicsEngine::getInstance()->getResolutionY()/2); 388 589 */ 590 /* 389 591 this->shiftCoor(move); 592 */ 390 593 391 594 // PRINTF(0)("id of %s is: %i\n", this->getName(), this->getOMListNumber()); 392 595 393 }394 395 /**396 * calculate the velocity397 * @param time the timeslice since the last frame398 */399 void SpaceShip::calculateVelocity (float time)400 {401 Vector accel(0.0, 0.0, 0.0);402 /*403 Vector rot(0.0, 0.0, 0.0); // wird ben�igt fr Helicopter404 */405 //float rotVal = 0.0;406 /* FIXME: calculating the direction and orthDirection every timeSlice is redundant! save it somewhere */407 /* calculate the direction in which the craft is heading */408 409 //Plane plane(Vector(0,1,0), Vector(0,0,0));410 411 if( this->bUp )412 {413 //this->shiftCoor(this->getAbsDirX());414 //accel += (this->getAbsDirX())*2;415 accel += (this->getAbsDirX())*acceleration;416 417 }418 419 if( this->bDown )420 {421 //this->shiftCoor((this->getAbsDirX())*-1);422 //accel -= (this->getAbsDirX())*2;423 //if(velocity.len() > 50)424 accel -= (this->getAbsDirX())*0.5*acceleration;425 426 427 428 }429 430 if( this->bLeft/* > -this->getRelCoor().z*2*/)431 {432 this->shiftDir(Quaternion(time, Vector(0,1,0)));433 // accel -= rightDirection;434 //velocityDir.normalize();435 //rot +=Vector(1,0,0);436 //rotVal -= .4;437 }438 if( this->bRight /* > this->getRelCoor().z*2*/)439 {440 this->shiftDir(Quaternion(-time, Vector(0,1,0)));441 442 // accel += rightDirection;443 //velocityDir.normalize();444 //rot += Vector(1,0,0);445 //rotVal += .4;446 }447 448 449 if( this->bRollL /* > -this->getRelCoor().z*2*/)450 {451 mouseDir *= Quaternion(-time*2, Vector(1,0,0));452 // accel -= rightDirection;453 //velocityDir.normalize();454 //rot +=Vector(1,0,0);455 //rotVal -= .4;456 }457 if( this->bRollR /* > this->getRelCoor().z*2*/)458 {459 mouseDir *= Quaternion(time*2, Vector(1,0,0));460 461 // accel += rightDirection;462 //velocityDir.normalize();463 //rot += Vector(1,0,0);464 //rotVal += .4;465 }466 if (this->bAscend )467 {468 this->shiftDir(Quaternion(time, Vector(0,0,1)));469 470 // accel += upDirection;471 //velocityDir.normalize();472 //rot += Vector(0,0,1);473 //rotVal += .4;474 }475 if (this->bDescend )476 {477 this->shiftDir(Quaternion(-time, Vector(0,0,1)));478 479 // accel -= upDirection;480 //velocityDir.normalize();481 //rot += Vector(0,0,1);482 //rotVal -= .4;483 }484 485 velocity += accel*time*10;486 //rot.normalize();487 //this->setRelDirSoft(Quaternion(rotVal, rot), 5);488 596 } 489 597 … … 493 601 void SpaceShip::process(const Event &event) 494 602 { 495 Playable::process(event);603 //Playable::process(event); 496 604 497 605 if( event.type == KeyMapper::PEV_LEFT) 498 this->b RollL= event.bPressed;606 this->bLeft = event.bPressed; 499 607 else if( event.type == KeyMapper::PEV_RIGHT) 500 this->bRollR = event.bPressed; 608 { 609 this->bRight = event.bPressed; 610 printf("ShipCoorX: %f \n", this->getRelCoor().x); 611 } 501 612 else if( event.type == KeyMapper::PEV_FORWARD) 502 this->bUp = event.bPressed; //this->shiftCoor(0,.1,0); 613 { 614 this->bForward = event.bPressed; //this->shiftCoor(0,.1,0); 615 616 } 503 617 else if( event.type == KeyMapper::PEV_BACKWARD) 504 this->bDown = event.bPressed; //this->shiftCoor(0,-.1,0); 618 this->bBackward = event.bPressed; //this->shiftCoor(0,-.1,0); 619 else if( event.type == KeyMapper::PEV_FIRE2) 620 this->bSecFire = event.bPressed; 621 else if( event.type == KeyMapper::PEV_FIRE1) 622 this->bFire = event.bPressed; 623 else if( event.type == KeyMapper::PEV_NEXT_WEAPON && event.bPressed) 624 { 625 this->nextWeaponConfig(); 626 } 627 else if ( event.type == KeyMapper::PEV_PREVIOUS_WEAPON && event.bPressed) 628 this->previousWeaponConfig(); 629 630 if (!(State::getCamera()->getEventHandling())) 631 { 632 if( event.type == KeyMapper::PEV_VIEW0) 633 { 634 State::getCamera()->setViewMode(Camera::ViewNormal); 635 State::getCameraTargetNode()->setParent(this); 636 State::getCamera()->setParent(this); 637 } 638 else if( event.type == KeyMapper::PEV_VIEW1) 639 { 640 State::getCamera()->setViewMode(Camera::ViewBehind); 641 State::getCameraTargetNode()->setParent(this); 642 State::getCamera()->setParent(this); 643 } 644 else if( event.type == KeyMapper::PEV_VIEW2) 645 { 646 State::getCamera()->setViewMode(Camera::ViewFront); 647 State::getCameraTargetNode()->setParent(this); 648 State::getCamera()->setParent(this); 649 } 650 else if( event.type == KeyMapper::PEV_VIEW3) 651 { 652 State::getCamera()->setViewMode(Camera::ViewLeft); 653 State::getCameraTargetNode()->setParent(this); 654 State::getCamera()->setParent(this); 655 } 656 else if( event.type == KeyMapper::PEV_VIEW4) 657 { 658 State::getCamera()->setViewMode(Camera::ViewRight); 659 State::getCameraTargetNode()->setParent(this); 660 State::getCamera()->setParent(this); 661 } 662 else if( event.type == KeyMapper::PEV_VIEW5) 663 { 664 State::getCamera()->setViewMode(Camera::ViewTop); 665 State::getCameraTargetNode()->setParent(this->travelNode); 666 State::getCamera()->setParent(this->travelNode); 667 } 668 } 669 670 671 /* 505 672 else if( event.type == EV_MOUSE_MOTION) 506 673 { 674 507 675 this->xMouse += event.xRel; 508 676 this->yMouse += event.yRel; 509 677 } 678 */ 510 679 } 511 680 512 681 void SpaceShip::destroy( WorldEntity* killer ) 513 682 { 514 PRINTF(0)("spaceship destroy\n"); 683 if(this->hasPlayer()) 684 Playable::destroy( killer); 685 686 PRINTF(5)("spaceship destroy\n"); 687 688 EmitterNode* node = NULL; 689 DotEmitter* emitter = NULL; 690 SpriteParticles* explosionParticles = NULL; 691 692 explosionParticles = new SpriteParticles(200); 693 explosionParticles->setName("SpaceShipExplosionParticles"); 694 explosionParticles->setLifeSpan(.2, .3); 695 explosionParticles->setRadius(0.0, 10.0); 696 explosionParticles->setRadius(.5, 6.0); 697 explosionParticles->setRadius(1.0, 3.0); 698 explosionParticles->setColor(0.0, 1,1,1,.9); 699 explosionParticles->setColor(0.1, 1,1,0,.9); 700 explosionParticles->setColor(0.5, .8,.4,0,.5); 701 explosionParticles->setColor(1.0, .2,.2,.2,.5); 702 703 704 emitter = new DotEmitter( 2000, 70, 360); 705 //emitter->setSpread( 0, M_2_PI); 706 emitter->setEmissionRate( 200.0); 707 //emitter->setEmissionVelocity( 200.0); 708 //emitter->setSystem( explosionParticles); 709 //emitter->setAbsCoor( this->getAbsCoor()); 710 711 node = new EmitterNode( .1f); 712 node->setupParticle( emitter, explosionParticles); 713 node->setAbsDir( this->getAbsDir()); 714 node->setVelocity( this->getVelocity() * .9f); 715 node->setAbsCoor( this->getAbsCoor()); 716 if( !node->start()) 717 PRINTF(0)("Explosion node not correctly started!"); 718 /* 719 PNode* node = new PNode(); 720 node->setAbsCoor(this->getAbsCoor()); 721 Explosion* explosion = new Explosion(); 722 explosion->explode( node, Vector(5,5,5)); 723 */ 724 /* 725 if( this->hasPlayer()) 726 { 727 this->setAbsCoor(Vector(-10000,10000,10000)); 728 this->hide(); 729 } 730 else 731 {*/ 732 this->setAbsCoor( this->getAbsCoor() + Vector(100,0,0) + Vector(1,0,0) * VECTOR_RAND(150).dot(Vector(1,0,0))); 733 //} 734 515 735 } 516 736 517 737 void SpaceShip::respawn( ) 518 738 { 519 toList( OM_PLAYERS ); 520 } 521 522 523 524 739 Playable::respawn(); 740 } 741 742 743 void SpaceShip::damage(float pDamage, float eDamage){ 744 PRINTF(5)("ship hit for (%f,%f) \n",pDamage,eDamage); 745 746 if( this->shieldActive) { 747 if( this->shieldCur > pDamage) { 748 this->shieldCur = this->shieldCur - pDamage; 749 } 750 else { // shield <= pDamage 751 this->shieldCur -=pDamage; 752 this->shieldActive = false; //shield collapses 753 pDamage += this->shieldCur; 754 if( !this->shieldActive) { 755 this->armorCur -= pDamage / 2; // remaining damages hits armor at half rate 756 this->electronicCur -= eDamage; 757 } 758 } 759 } 760 else { 761 this->armorCur = this->armorCur - pDamage; 762 this->electronicCur = this->electronicCur - eDamage; 763 } 764 if( this->armorCur <= 0) { /* FIXME implement shipcrash*/ } 765 this->destroy(this); 766 767 updateElectronicWidget(); 768 updateShieldWidget(); 769 770 this->setHealth( this->armorCur); 771 } 772 773 774 void SpaceShip::regen(float time){ 775 float tmp; 776 if (this->armorCur != this->armorMax || this->armorRegen != 0){ 777 tmp = this->armorCur + this->armorRegen * time; 778 if ( tmp > electronicMax) 779 this->armorCur = this->armorMax; 780 else 781 this->armorCur = tmp; 782 } 783 if (this->shieldCur != this->shieldMax || this->shieldRegen != 0){ 784 tmp = this->shieldCur + (this->shieldRegen + this->reactorOutput * this->shieldEnergyShare) * time; 785 if( tmp > shieldMax) 786 this->shieldCur = this->shieldMax; 787 else 788 this->shieldCur = tmp; 789 this->shieldActive = ( this->shieldActive || this->shieldCur > shieldTH); 790 791 updateShieldWidget(); 792 } 793 794 this->setHealth( this->shieldCur); // FIXME currently just to test share system 795 796 if (this->electronicCur != this->electronicMax || this->electronicRegen != 0){ 797 tmp = this->electronicCur + this->electronicRegen * time; 798 if ( tmp > electronicMax) 799 this->electronicCur = this->electronicMax; 800 else 801 this->electronicCur = tmp; 802 803 updateElectronicWidget(); 804 } 805 806 } 807 808 809 /** 810 * Weapon regeneration 811 * does not use any reactor capacity, as it wouldn't work in a consistent way. 812 */ 813 void SpaceShip::weaponRegen(float time) 814 { 815 float energy = ( this->reactorOutput * this->weaponEnergyShare + this->weaponEnergyRegen) * time; 816 Weapon* weapon; 817 for( unsigned int i=0; i < this->weaponMan.getSlotCount(); i++) 818 { 819 weapon = this->weaponMan.getWeapon(i); 820 if( weapon != NULL && weapon->isActive()) 821 { 822 weapon->increaseEnergy( energy); 823 } 824 825 } 826 // weaponMan.increaseAmmunition( weapon, energy); 827 } 828 829 830 void SpaceShip::enterPlaymode(Playable::Playmode playmode) 831 { 832 switch(playmode) 833 { 834 case Playable::Full3D: 835 /* 836 if (State::getCameraNode != NULL) 837 { 838 Vector absCoor = this->getAbsCoor(); 839 this->setParent(PNode::getNullParent()); 840 this->setAbsCoor(absCoor); 841 State::getCameraNode()->setParentSoft(&this->cameraNode); 842 State::getCameraNode()->setRelCoorSoft(-10, 0,0); 843 State::getCameraTargetNode()->setParentSoft(&this->cameraNode); 844 State::getCameraTargetNode()->setRelCoorSoft(100, 0,0); 845 846 } 847 */ 848 //break; 849 850 break; 851 case Playable::Horizontal: 852 if (State::getCameraNode != NULL) 853 { 854 this->debugNode(1); 855 this->travelNode->debugNode(1); 856 857 this->travelNode->setAbsCoor(this->getAbsCoor()); 858 this->travelNode->updateNode(0.01f); 859 860 this->isTravelDistanceInit = false; 861 862 if(this->entityTrack) 863 this->travelNode->setParent(this->entityTrack->getTrackNode()); 864 865 this->setParent(this->travelNode); 866 this->setRelCoor(0,0,0); 867 868 State::getCameraNode()->setParentSoft(this->travelNode); 869 //State::getCameraNode()->setParentSoft(this); 870 //State::getCameraNode()->setRelCoorSoft(-0.01, 40, 0); 871 State::getCameraTargetNode()->setParentSoft(this->travelNode); 872 //State::getCameraTargetNode()->setParentSoft(this); 873 //State::getCameraTargetNode()->setRelCoorSoft(0,0,0); 874 this->setCameraMode(Camera::ViewTop); 875 State::getCamera()->setEventHandling(false); 876 registerEvent(KeyMapper::PEV_VIEW0); 877 registerEvent(KeyMapper::PEV_VIEW1); 878 registerEvent(KeyMapper::PEV_VIEW2); 879 registerEvent(KeyMapper::PEV_VIEW3); 880 registerEvent(KeyMapper::PEV_VIEW4); 881 registerEvent(KeyMapper::PEV_VIEW5); 882 883 State::getCamera()->setParentMode(PNODE_ALL); 884 885 //this->updateTravelDistance(); 886 887 this->debugNode(1); 888 this->travelNode->debugNode(1); 889 } 890 break; 891 892 default: 893 PRINTF(2)("Playmode %s Not Implemented in %s\n", Playable::playmodeToString(this->getPlaymode()).c_str(), this->getClassCName()); 894 } 895 } 896 897 /** 898 * @brief calculate the velocity 899 * @param time the timeslice since the last frame 900 */ 901 902 void SpaceShip::movement (float dt) 903 { 904 //by releasing the buttons, the velocity decreases with airCoeff*Acceleration. Should be strong enough so 905 //the ship doesn't slide too much. 906 float airCoeff = 2.5; 907 float pi = 3.14; 908 909 switch(this->getPlaymode()) 910 { 911 case Playable::Horizontal: 912 { 913 // these routines will change the travel movement into zero in a short amout of time, if the player 914 // doesn't press any buttons. 915 if (this->travelVelocity.x >= 0) 916 { 917 if (this->travelVelocity.x > airCoeff*this->acceleration * dt) 918 this->travelVelocity.x -= airCoeff* this->acceleration * dt; 919 else 920 this->travelVelocity.x = 0; 921 } 922 else 923 { 924 if (this->travelVelocity.x < -airCoeff*this->acceleration * dt) 925 this->travelVelocity.x += airCoeff* this->acceleration * dt; 926 else 927 this->travelVelocity.x = 0; 928 } 929 if (this->travelVelocity.z >= 0) 930 { 931 if (this->travelVelocity.z > airCoeff*this->acceleration * dt) 932 this->travelVelocity.z -= airCoeff* this->acceleration * dt; 933 else 934 this->travelVelocity.z = 0; 935 } 936 else 937 { 938 if (this->travelVelocity.z < -airCoeff*this->acceleration * dt) 939 this->travelVelocity.z += airCoeff* this->acceleration * dt; 940 else 941 this->travelVelocity.z = 0; 942 } 943 944 // this will evite, that the ship moves outside the travelDistance- borders,when the player releases all buttons 945 // and its continuing to slide a bit. 946 Vector oldCoor = this->getRelCoor(); 947 if (this->getRelCoor().x > this->travelDistancePlus.x) this->setRelCoor(this->travelDistancePlus.x, oldCoor.y, oldCoor.z); 948 if (this->getRelCoor().x < this->travelDistanceMinus.x) this->setRelCoor(this->travelDistanceMinus.x, oldCoor.y, oldCoor.z); 949 if (this->getRelCoor().z > this->travelDistancePlus.y) this->setRelCoor(oldCoor.x, oldCoor.y, this->travelDistancePlus.y); 950 if (this->getRelCoor().z < this->travelDistanceMinus.y) this->setRelCoor(oldCoor.x, oldCoor.y, this->travelDistanceMinus.y); 951 952 if( this->systemFailure() ) 953 bForward = bBackward = bLeft = bRight = false; 954 955 if( this->bForward ) 956 { 957 //printf("ShipCoorX: %f \n", this->getRelCoor().x); 958 if(this->getRelCoor().x < this->travelDistancePlus.x) 959 { 960 if (this->travelVelocity.x < this->travelSpeed) 961 { 962 this->travelVelocity.x += (airCoeff + 1.0)*this->acceleration*dt; 963 } 964 else 965 { 966 this->travelVelocity.x = this->travelSpeed; 967 } 968 } 969 else 970 { 971 this->travelVelocity.x = 0.0f; 972 } 973 } 974 975 if( this->bBackward ) 976 { 977 if(this->getRelCoor().x > this->travelDistanceMinus.x) 978 { 979 if (this->travelVelocity.x > -this->travelSpeed) 980 { 981 this->travelVelocity.x -= (airCoeff + 1.0)*this->acceleration*dt; 982 } 983 else 984 { 985 this->travelVelocity.x = -this->travelSpeed; 986 } 987 } 988 else 989 { 990 this->travelVelocity.x = 0.0f; 991 } 992 } 993 994 if( this->bLeft) 995 { 996 if(this->getRelCoor().z > this->travelDistanceMinus.y) 997 { 998 if (this->travelVelocity.z > -this->travelSpeed) 999 { 1000 this->travelVelocity.z -= (airCoeff + 1.0)*this->acceleration*dt; 1001 } 1002 else 1003 { 1004 this->travelVelocity.z = -this->travelSpeed; 1005 } 1006 } 1007 else 1008 { 1009 this->travelVelocity.z = 0.0f; 1010 } 1011 this->setRelDirSoft(Quaternion(-pi/6, Vector(1,0,0)), 6); 1012 } 1013 1014 if( this->bRight) 1015 { 1016 //printf("ShipCoorZ: %f \n", this->getRelCoor().z); 1017 if(this->getRelCoor().z < this->travelDistancePlus.y) 1018 { 1019 if (this->travelVelocity.z < this->travelSpeed) 1020 { 1021 this->travelVelocity.z += (airCoeff + 1.0)*this->acceleration*dt; 1022 } 1023 else 1024 { 1025 this->travelVelocity.z = this->travelSpeed; 1026 } 1027 } 1028 else 1029 { 1030 this->travelVelocity.z = 0.0f; 1031 } 1032 this->setRelDirSoft(Quaternion(pi/6, Vector(1,0,0)), 6); 1033 } 1034 if (!this->bRight && !this->bLeft) 1035 { 1036 this->setRelDirSoft(Quaternion(0, Vector(1,0,0)), 6); 1037 } 1038 1039 //normalisation of the vectors (vector sum must be <= travelspeed) 1040 float xzNorm = sqrt(pow(this->travelVelocity.x, 2) + pow(this->travelVelocity.z, 2)); 1041 if (xzNorm > this->travelSpeed) 1042 { 1043 this->travelVelocity.x = this->travelVelocity.x/xzNorm * this->travelSpeed; 1044 this->travelVelocity.z = this->travelVelocity.z/xzNorm * this->travelSpeed; 1045 } 1046 1047 //this moves camera and ship along the travel path. 1048 if(!this->entityTrack) 1049 this->travelNode->shiftCoor(Vector(this->cameraSpeed * dt, 0, 0)); 1050 1051 break; 1052 } 1053 case Playable::Vertical: 1054 break; 1055 default: 1056 PRINTF(4)("Playmode %s Not Implemented in %s\n", Playable::playmodeToString(this->getPlaymode()).c_str(), this->getClassCName()); 1057 } 1058 //set new coordinates calculated through key- events. 1059 this->shiftCoor (this->travelVelocity * dt); 1060 } 1061 1062 void SpaceShip::setPlaymodeXML(const std::string& playmode) 1063 { 1064 this->setPlaymode(Playable::stringToPlaymode(playmode)); 1065 } 1066 1067 /** 1068 * @brief jumps to the next WeaponConfiguration 1069 */ 1070 void SpaceShip::nextWeaponConfig() 1071 { 1072 PRINTF(0)("Requested next weapon config!\n"); 1073 this->weaponMan.nextWeaponConfig(); 1074 Playable::weaponConfigChanged(); 1075 } 1076 1077 /** 1078 * @brief moves to the last WeaponConfiguration 1079 */ 1080 void SpaceShip::previousWeaponConfig() 1081 { 1082 this->curWeaponPrimary = (this->curWeaponPrimary + 1) % 3; 1083 this->weaponMan.changeWeaponConfig(this->curWeaponPrimary); 1084 Playable::weaponConfigChanged(); 1085 } 1086 1087 void SpaceShip::hit( float damage, WorldEntity* killer) 1088 { 1089 this->damage(killer->getDamage(),0); 1090 } 1091 1092 void SpaceShip::updateElectronicWidget() 1093 { 1094 if (this->electronicWidget != NULL) 1095 { //if it exists already: update it 1096 this->electronicWidget->setMaximum(this->electronicMax); 1097 this->electronicWidget->setValue(this->electronicCur); 1098 } 1099 else 1100 { //create the widget 1101 this->electronicWidget = new OrxGui::GLGuiEnergyWidgetVertical(); 1102 this->electronicWidget->getBarWidget()->setChangedValueColor(Color(1,0,0,1)); 1103 //this->electronicWidget->setDisplayedName("Electronics:"); 1104 //this->electronicWidget->setSize2D(100,20); 1105 //this->electronicWidget->setAbsCoor2D(150,200); 1106 this->updateElectronicWidget(); 1107 if (this->hasPlayer()) 1108 State::getPlayer()->hud().setEnergyWidget(this->electronicWidget); 1109 } 1110 } 1111 1112 void SpaceShip::updateShieldWidget() 1113 { 1114 if (this->shieldWidget != NULL) 1115 { 1116 this->shieldWidget->setMaximum(this->shieldMax); 1117 this->shieldWidget->setValue(this->shieldCur);; 1118 } 1119 else 1120 { 1121 this->shieldWidget = new OrxGui::GLGuiEnergyWidgetVertical(); 1122 this->shieldWidget->getBarWidget()->setChangedValueColor(Color(1,0,0,1)); 1123 //this->shieldWidget->setDisplayedName("Shield:"); 1124 //his->shieldWidget->setSize2D(100,20); 1125 //this->shieldWidget->setAbsCoor2D(200,200); 1126 this->updateShieldWidget(); 1127 if (this->hasPlayer()) 1128 State::getPlayer()->hud().setShiledWidget(this->shieldWidget); 1129 } 1130 } 1131 1132 void SpaceShip::setCameraDistance(float dist) 1133 { 1134 State::getCamera()->setViewTopDistance(dist); 1135 } 1136 1137 void SpaceShip::setCameraFovy(float fovy) 1138 { 1139 State::getCamera()->setViewTopFovy(fovy); 1140 } 1141 1142 void SpaceShip::updateTravelDistance() 1143 { 1144 float x = 1.25 * this->actionWidthPercentage * fabsf(State::getCamera()->getAbsCoor().y) * tan(State::getCamera()->getFovy()*M_PI /360.0); 1145 float y = x / State::getCamera()->getAspectRatio() / this->actionWidthPercentage; 1146 //State::getCamera()->setAbsCoor(-5, 1000, 0); 1147 1148 1149 //State::getCamera()->getAbsCoor().print(); 1150 //printf("CameraRelCoorY: %f \n", State::getCamera()->getRelCoor().y); 1151 1152 //printf("x: %f, y: %f \n", x, y); 1153 this->travelDistancePlus = Vector2D(y, x); 1154 this->travelDistanceMinus = Vector2D(-y, -x); 1155 1156 State::getPlayer()->hud().setOverlayPercentage(100-int(100*this->actionWidthPercentage)); 1157 PRINTF(0)("TravelDistance has been updated\n"); 1158 this->isTravelDistanceInit = true; 1159 } 1160 1161 void SpaceShip::setActionWidthPercentage(int i) 1162 { 1163 if (i>100) i=100; 1164 if (i<0) i=0; 1165 this->actionWidthPercentage = i/100.0; 1166 1167 if (this->hasPlayer()) 1168 this->isTravelDistanceInit = false; 1169 }; -
trunk/src/world_entities/space_ships/space_ship.h
r9869 r10368 2 2 * @file space_ship.h 3 3 * Implements the Control of a Spaceship 4 * Space Ships are the core class for all types of ships in Orxonox 5 * By default is on OM_GROUP_00 6 * If player boards the ship, it is moved to OM_GROUP_01 4 7 */ 5 8 … … 16 19 class ParticleEmitter; 17 20 class ParticleSystem; 21 class Trail; 22 class Wobblegrid; 18 23 19 24 class SpaceShip : public Playable … … 29 34 30 35 virtual void setPlayDirection(const Quaternion& rot, float speed = 0.0f); 36 /* 37 void setTravelHeight(float travelHeight); 38 void setTravelDistance(const Vector2D& distance); 39 void setTravelDistance(float x, float y); 40 */ 41 42 //void setAirFriction(float friction) { this->airFriction = friction; }; 31 43 32 44 virtual void enter(); … … 41 53 virtual void respawn(); 42 54 43 virtual void collidesWith(WorldEntity* entity, const Vector& location); 55 inline Vector getVelocity() { return this->velocity; }; 56 44 57 virtual void tick(float time); 45 58 virtual void draw() const; 46 59 47 60 virtual void process(const Event &event); 61 // virtual void hit (WorldEntity* entity, float damage); 62 63 inline WeaponManager& getWeaponManagerSecondary() { return this->secWeaponMan; }; 64 65 //Functions for GUI 66 inline float getShieldCur() { return this->shieldCur; }; //!< returns current shield value 67 inline float getShieldMax() { return this->shieldMax; }; //!< returns maximum shield value 68 69 inline float getArmorCur() { return this->armorCur; }; //!< returns current armor value 70 inline float getArmorMax() { return this->armorMax; }; //!< returns current armor value 71 72 inline float getElectronicCur() { return this->electronicCur; }; //!< returns current electronic value 73 inline float getElectronicMax() { return this->electronicMax; }; //!< returns current electronic value 74 75 inline PNode* getTravelNode() { return this->travelNode; }; 76 77 //damage handler 78 virtual void damage(float pDamage, float eDamage); //!< pDamage physical damage, eDamage electronic damage 79 80 //included by Michel: 81 virtual void enterPlaymode(Playable::Playmode playmode); 82 void setPlaymodeXML(const std::string& playmode); //recieves the playmode from a string (useful for script implementation) 83 void setActionWidthPercentage(int i); 84 void updateTravelDistance(); 85 virtual void movement (float dt); 86 87 // 88 89 void nextWeaponConfig(); 90 void previousWeaponConfig(); 91 92 virtual void hit(float damage, WorldEntity* killer); 48 93 49 94 private: 50 95 void init(); 51 96 52 void calculateVelocity(float time); 53 54 bool bUp; //!< up button pressed. 55 bool bDown; //!< down button pressed. 97 //void calculateVelocity(float time); 98 99 void regen(float time); //!< handler for shield and electronic regeneration 100 101 void weaponRegen(float time); //!< weapon energy regeneration 102 103 inline bool systemFailure() { return (this->electronicCur < float(rand())/float(RAND_MAX) * this->electronicTH); }; 104 105 void updateElectronicWidget(); 106 void updateShieldWidget(); 107 108 //WeaponManager weaponMan; //!< the primary weapon manager: managing a list of energy weapons to wepaon-slot mapping 109 WeaponManager secWeaponMan; //!< the secondary weapon manager: managing a list of special weapons to weapon-slot mapping 110 short supportedPlaymodes; //!< What Playmodes are Supported in this Playable. 111 Playable::Playmode playmode; //!< The current playmode. 112 113 //ship atributes 114 float shieldCur; //!< current shield 115 float shieldMax; //!< maximum shield 116 float shieldEnergyShare; //!< percentage of reactor output 117 float shieldRegen; //!< shield regeneration rate per second 118 float shieldTH; //!< shield threshhold for reactivation 119 bool shieldActive; //!< wheather the shield is working 120 OrxGui::GLGuiEnergyWidgetVertical* shieldWidget; //!< holds the widget that shows the shield bar 121 122 float armorCur; //!< current armor 123 float armorMax; //!< maximum armor 124 float armorRegen; //!< armor regeneration per tick (usable on bioships?) 125 //note that the armor widget is set on the health- widget in world- entity (see in player.cc) 126 127 float electronicCur; //!< current electronic 128 float electronicMax; //!< maximum electronic 129 float electronicRegen; //!< electronic regenration rate per tick 130 float electronicTH; //!< Threshhold for electronic failure 131 OrxGui::GLGuiEnergyWidgetVertical* electronicWidget; //!< holds the widget that shows the electronic bar 132 133 float engineSpeedCur; //!< speed output for movement = speed base + energy share part 134 float engineSpeedBase; //!< speed base 135 int enginePowerConsume; //!< energy needed 136 float engineEnergyShare; //!< percentage of reactor output 137 138 int weaponEnergySlot; //!< number of energy weapon slots 139 int weaponEnergyUsed; 140 float weaponEnergyShare; 141 float weaponEnergyRegen; 142 int weaponSpecialSlot; //!< number of special weapon slots 143 int weaponSpecialUsed; 144 145 float reactorOutput; //!< reactor output 146 float reactorCapacity; //!< reactor capacity 147 148 int curWeaponPrimary; //!< current primary weapon config 149 int curWeaponSecondary; //!< current secondary weapon config 150 151 bool bForward; //!< up button pressed. 152 bool bBackward; //!< down button pressed. 56 153 bool bLeft; //!< left button pressed. 57 154 bool bRight; //!< right button pressed. 58 155 bool bAscend; //!< ascend button pressed. 59 156 bool bDescend; //!< descend button presses. 60 // bool bFire; //!< fire button pressed.(moved to playable)61 157 bool bRollL; //!< rolling button pressed (left) 62 158 bool bRollR; //!< rolling button pressed (right) 63 159 bool bSecFire; //!< second fire button pressed 160 161 /* 64 162 float xMouse; //!< mouse moved in x-Direction 65 163 float yMouse; //!< mouse moved in y-Direction … … 68 166 int controlVelocityX; 69 167 int controlVelocityY; 70 // float cycle; //!< hovercycle 168 */ 71 169 72 170 Vector velocity; //!< the velocity of the player. 73 Vector oldVelocity; //!< the velocity the player had last synced 171 Vector oldPos; 172 173 // 2D-traveling 174 PNode* travelNode; 175 float travelSpeed; //!< the current speed of the Ship (to make soft movement) 176 Vector travelVelocity; //!< object internal velocity vector for relative movement to the track node 177 Vector2D travelDistancePlus; //!< Travel-Distance away from the TravelNode 178 Vector2D travelDistanceMinus; 179 bool isTravelDistanceInit; 180 181 float actionWidthPercentage; 182 183 // Camera 184 PNode cameraNode; 185 float cameraLook; 186 float rotation; 187 float cameraSpeed; 188 189 void setCameraDistance(float dist); 190 void setCameraFovy(float fovy); 191 192 /* 74 193 Quaternion mouseDir; //!< the direction where the player wants to fly 75 194 Quaternion oldMouseDir; //!< the direction where the player wanted to fly … … 77 196 Quaternion rotQuat; 78 197 Quaternion pitchDir; 79 float travelSpeed; //!< the current speed of the player (to make soft movement) 80 float acceleration; //!< the acceleration of the player. 81 82 float airViscosity; 198 float dogdeSpeed; //!< the dogde Speed of the ship. 199 */ 200 201 //Quaternion direction; //!< the direction of the ship. 202 float acceleration; //!< the acceleration of the ship. 203 //float airFriction; //!< AirFriction. 204 //float airViscosity; 83 205 84 206 byte oldMask; //!< used for synchronisation 85 207 86 ParticleEmitter* burstEmitter; 87 ParticleSystem* burstSystem; 208 Trail* trail; //!< Burst trail 209 Trail* trailL; //!< Burst trail 210 Trail* trailR; //!< Burst trail 211 212 88 213 }; 89 214 -
trunk/src/world_entities/space_ships/spacecraft_2d.cc
r10317 r10368 273 273 { 274 274 dynamic_cast<Element2D*>(this->getWeaponManager().getFixedTarget())->setVisibility( true); 275 this->setPlaymode(this->getPlaymode()); 275 // this->setPlaymode(this->getPlaymode()); 276 this->setPlaymode(Playable::Horizontal); 277 this->setTravelSpeed(10.0f); 276 278 } 277 279 -
trunk/src/world_entities/space_ships/spacecraft_2d.h
r9869 r10368 66 66 float acceleration; //!< the acceleration of the Spacecraft2D. 67 67 float airFriction; //!< AirFriction. 68 69 68 float airViscosity; 70 69 -
trunk/src/world_entities/test_entity.cc
r10114 r10368 86 86 } 87 87 88 void TestEntity::draw() const 89 { 90 // if(!mediaLoaded) 91 // false; 88 92 93 glPushAttrib(GL_ENABLE_BIT); 94 glDisable(GL_LIGHTING); 95 // glDisable(GL_BLEND); 96 // 97 // glEnable(GL_TEXTURE_2D); 98 // glBindTexture(GL_TEXTURE_2D, media_container->getFrameTexture(counter)); 99 100 glPushMatrix(); 101 /* glTranslatef (this->getAbsCoor ().x, 102 this->getAbsCoor ().y, 103 this->getAbsCoor ().z); 104 glRotatef(axis, 0.0f, 1.0f, 0.0f);*/ 105 //PRINTF(0)("axis: %f\n", axis); 106 107 glColor3f(1.0, 0, 0); 108 109 glBegin(GL_QUADS); 110 glVertex3f( 0.0f, -100.0f, 0.0f); 111 // glTexCoord2f(1.0f, 1.0f); 112 glVertex3f( 0.0f, -100.0f , 2000.0f); 113 // glTexCoord2f(0.0f, 1.0f); 114 glVertex3f( 10000.0f, -100.0f , 2000.0f ); 115 // glTexCoord2f(0.0f, 0.0f); 116 glVertex3f( 10000.0f, -100.0f, 0.0f ); 117 // glTexCoord2f(1.0f, 0.0f); 118 119 glEnd(); 120 121 glPopMatrix(); 122 glPopAttrib(); 123 } 89 124 90 125 /** … … 98 133 99 134 100 /**101 *102 */103 void TestEntity::draw() const104 {105 106 }107 135 108 136 -
trunk/src/world_entities/weapons/weapon.cc
r9869 r10368 33 33 #include "resource_sound_buffer.h" 34 34 35 #include "elements/glgui_energywidget .h"35 #include "elements/glgui_energywidgetvertical.h" 36 36 37 37 ObjectListDefinition(Weapon); … … 119 119 } 120 120 121 this->soundSource = new OrxSound::SoundSource(this); //< Every Weapon has exacty one SoundSource. 122 this->emissionPoint.setParent(this); //< One EmissionPoint, that is a PNode connected to the weapon. You can set this to the exitting point of the Projectiles 123 this->emissionPoint.setName("EmissionPoint"); 124 this->emissionPoint.addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT); 121 this->soundSource = new OrxSound::SoundSource(this); //< Every Weapon has exacty one SoundSource 122 123 this->barrels = 1; 124 this->segs = 1; 125 126 this->shootAnim = new Animation3D**[this->getBarrels()]; 127 for (int i = 0; i < this->getBarrels(); i++) 128 this->shootAnim[i] = new Animation3D* [this->getSegs()]; 129 130 this->emissionPoint = new PNode*[this->barrels]; 131 for(int i = 0; i < this->barrels; i++){ 132 this->emissionPoint[i] = new PNode; 133 this->emissionPoint[i]->setParent(this); //< One EmissionPoint, that is a PNode connected to the weapon. You can set this to the exitting point of the Projectiles 134 this->emissionPoint[i]->setName("EmissionPoint"); 135 this->emissionPoint[i]->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT); 136 } 125 137 126 138 this->defaultTarget = NULL; //< Nothing is Targeted by default. … … 145 157 146 158 /** 159 * needed, if there are more than one barrel or segments 160 */ 161 void Weapon::init2() 162 { 163 if (this->barrels == 1 && this->segs == 1) 164 return; 165 166 delete this->emissionPoint[0]; 167 delete this->emissionPoint; 168 delete this->shootAnim[0]; 169 delete this->shootAnim; 170 171 this->shootAnim = new Animation3D**[this->barrels]; 172 this->emissionPoint = new PNode*[this->barrels]; 173 for(int i = 0; i < this->barrels; i++){ 174 this->emissionPoint[i] = new PNode; 175 this->emissionPoint[i]->setParent(this); //< One EmissionPoint, that is a PNode connected to the weapon. You can set this to the exitting point of the Projectiles 176 this->emissionPoint[i]->setName("EmissionPoint"); 177 this->emissionPoint[i]->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT); 178 this->shootAnim[i] = new Animation3D* [this->segs]; 179 } 180 } 181 182 /** 183 * deconstructor for init2 184 */ 185 void Weapon::deconstr() 186 { 187 for(int i = 0; i < this->barrels; i++) { 188 delete this->emissionPoint[i]; 189 for (int j = 0; j < this->segs; j++) 190 delete this->shootAnim[i][j]; 191 delete this->shootAnim[i]; 192 } 193 194 delete this->emissionPoint; 195 delete this->shootAnim; 196 } 197 198 /** 147 199 * loads the Parameters of a Weapon 148 200 * @param root the XML-Element to load the Weapons settings from … … 154 206 LoadParam(root, "projectile", this, Weapon, setProjectileTypeC) 155 207 .describe("Sets the name of the Projectile to load onto the Entity"); 156 208 /* 157 209 LoadParam(root, "emission-point", this, Weapon, setEmissionPoint) 158 .describe("Sets the Point of emission of this weapon ");210 .describe("Sets the Point of emission of this weapon (1: EmmsionVector; 2: EmissionPoint)");*/ 159 211 160 212 LoadParam(root, "state-duration", this, Weapon, setStateDuration) … … 253 305 * @param point the Point relative to the mass-point of the Weapon 254 306 */ 307 void Weapon::setEmissionPoint(const Vector& point, int barrel) 308 { 309 this->emissionPoint[barrel]->setRelCoor(point); 310 } 311 255 312 void Weapon::setEmissionPoint(const Vector& point) 256 313 { 257 this->emissionPoint.setRelCoor(point); 258 } 259 314 this->emissionPoint[0]->setRelCoor(point); 315 } 260 316 261 317 /** … … 315 371 } 316 372 373 Animation3D* Weapon::getAnimation(int barrel, int seg, PNode* node) 374 { 375 if (barrel >= this->getBarrels() || seg >= this->getSegs()) // if the state is not known 376 return NULL; 377 378 if (unlikely(this->shootAnim[barrel][seg] == NULL)) // if the animation does not exist yet create it. 379 { 380 if (likely(node != NULL)) 381 return this->shootAnim[barrel][seg] = new Animation3D(node); 382 else 383 { 384 // PRINTF(2)("Node not defined for the Creation of the 3D-animation of state %s\n", stateToChar(state)); 385 return NULL; 386 } 387 } 388 else 389 return this->shootAnim[barrel][seg]; 390 } 391 317 392 OrxGui::GLGuiWidget* Weapon::getEnergyWidget() 318 393 { 319 if ( this->energyWidget == NULL)320 { 321 this->energyWidget = new OrxGui::GLGuiEnergyWidget ();322 this->energyWidget->setDisplayedName(this->getClassCName());394 if ( this->energyWidget == NULL) 395 { 396 this->energyWidget = new OrxGui::GLGuiEnergyWidgetVertical(); 397 //this->energyWidget->setDisplayedName(this->getClassCName()); 323 398 this->energyWidget->setSize2D( 20, 100); 324 399 this->energyWidget->setMaximum(this->getEnergyMax()); … … 352 427 if (likely(this->isActive())) 353 428 { 429 /** Disabled for releaseFire() from WM*/ 354 430 if (this->requestedAction != WA_NONE) 355 431 return; … … 378 454 { 379 455 this->energy += energyToAdd; 456 this->updateWidgets(); 380 457 return 0.0; 381 458 } … … 383 460 { 384 461 this->energy += maxAddEnergy; 462 this->updateWidgets(); 385 463 return energyToAdd - maxAddEnergy; 386 464 } 465 387 466 } 388 467 … … 431 510 break; 432 511 default: 433 PRINTF( 2)("Action %s Not Implemented yet \n", Weapon::actionToChar(action));512 PRINTF(5)("Action %s Not Implemented yet \n", Weapon::actionToChar(action)); 434 513 return false; 435 514 } … … 507 586 bool Weapon::fireW() 508 587 { 588 // printf("fireW Weapon\n"); 509 589 //if (likely(this->currentState != WS_INACTIVE)) 510 590 if (this->minCharge <= this->energy) … … 513 593 if (this->soundBuffers[WA_SHOOT].loaded()) 514 594 this->soundSource->play(this->soundBuffers[WA_SHOOT]); 515 this->updateWidgets();516 595 // fire 517 596 this->energy -= this->minCharge; … … 519 598 // setting up for the next state 520 599 this->enterState(WS_SHOOTING); 600 this->updateWidgets(); 521 601 } 522 602 else // reload if we still have the charge … … 538 618 unlikely(this->energy + this->ammoContainer->getStoredEnergy() < this->minCharge)) 539 619 { 540 this->requestAction(WA_DEACTIVATE);620 //this->requestAction(WA_DEACTIVATE); 541 621 this->execute(); 542 622 return false; -
trunk/src/world_entities/weapons/weapon.h
r9869 r10368 126 126 127 127 // EMISSION 128 /** keeping old functions*/ 129 void setEmissionPoint(const Vector& point, int barrel); 128 130 void setEmissionPoint(const Vector& point); 129 131 /** @see void setEmissionPoint(const Vector& point); */ 132 inline void setEmissionPoint(float x, float y, float z, int barrel) { this->setEmissionPoint(Vector(x, y, z), barrel); }; 130 133 inline void setEmissionPoint(float x, float y, float z) { this->setEmissionPoint(Vector(x, y, z)); }; 131 134 /** @returns the absolute Position of the EmissionPoint */ 132 inline const Vector& getEmissionPoint() const { return this->emissionPoint.getAbsCoor(); }; 135 inline const Vector& getEmissionPoint(int barrel) const { return this->emissionPoint[barrel]->getAbsCoor(); }; 136 inline const Vector& getEmissionPoint() const { return this->emissionPoint[0]->getAbsCoor(); }; 137 133 138 134 139 inline void setDefaultTarget(PNode* defaultTarget) { this->defaultTarget = defaultTarget; }; … … 158 163 159 164 Animation3D* getAnimation(WeaponState state, PNode* node = NULL); 165 Animation3D* getAnimation(int barrel, int seg, PNode* node); 160 166 Animation3D* copyAnimation(WeaponState from, WeaponState to); 161 167 … … 169 175 bool check() const; 170 176 void debug() const; 177 178 inline int getBarrels() {return this->barrels; }; 179 inline int getSegs() { return this->segs; }; 180 inline void setBarrels(int barrels) { this->barrels = barrels; }; 181 inline void setSegs(int segs) { this->segs = segs; }; 182 183 inline Animation3D* getShootAnim(int barrel, int seg) { return this->shootAnim[barrel][seg]; }; 184 inline void setShootAnim(int barrel, int seg, PNode* component) { this->shootAnim[barrel][seg] = this->getAnimation(barrel, seg, component); }; 185 186 void init2(); 187 void deconstr(); 171 188 172 189 protected: … … 184 201 static WeaponState charToState(const std::string& state); 185 202 static const char* stateToChar(WeaponState state); 203 204 186 205 187 206 private: … … 214 233 float maxCharge; //!< The maximal energy to be loaded onto one projectile (this is only availible if chargeable is enabled) 215 234 216 OrxGui::GLGuiEnergyWidget * energyWidget;235 OrxGui::GLGuiEnergyWidgetVertical* energyWidget; 217 236 218 237 PNode* defaultTarget; //!< A target for targeting Weapons. … … 230 249 OrxSound::SoundBuffer soundBuffers[WA_ACTION_COUNT]; //!< SoundBuffers for all actions @see WeaponAction. 231 250 232 PNode 251 PNode** emissionPoint; //!< The point, where the projectiles are emitted. (this is coppled with the Weapon by default) 233 252 234 253 bool hideInactive; //!< Hides the Weapon if it is inactive … … 237 256 ClassID projectile; //!< the projectile used for this weapon (since they should be generated via macro and the FastFactory, only the ClassID must be known.) 238 257 FastFactory* projectileFactory; //!< A factory, that produces and handles the projectiles. 258 259 int barrels; //!< # of barrels 260 int segs; //!< # of segments, one barrel has 261 Animation3D*** shootAnim; 262 239 263 }; 240 264 -
trunk/src/world_entities/weapons/weapon_manager.cc
r9869 r10368 103 103 104 104 this->currentConfigID = 0; 105 this->slotCount = 2;105 this->slotCount = WM_MAX_SLOTS; 106 106 //this->weaponChange; 107 107 … … 114 114 this->crossHairSizeAnim->addKeyFrame(100, .05, ANIM_LINEAR); 115 115 this->crossHairSizeAnim->addKeyFrame(50, .01, ANIM_LINEAR); 116 117 this->hideCrosshair(); 118 119 this->bFire = false; 120 } 121 122 void WeaponManager::showCrosshair() 123 { 124 this->crosshair->setVisibility( true); 125 } 126 127 void WeaponManager::hideCrosshair() 128 { 129 this->crosshair->setVisibility( false); 130 } 131 132 void WeaponManager::setRotationSpeed(float speed) 133 { 134 this->crosshair->setRotationSpeed(speed); 116 135 } 117 136 … … 300 319 if (this->parentEntity->isA(Playable::staticClassID())) 301 320 dynamic_cast<Playable*>(this->parentEntity)->weaponConfigChanged(); 321 302 322 weapon->setDefaultTarget(this->crosshair); 303 323 } … … 317 337 318 338 /** 319 * @brief does the same as the funtion inc lreaseAmmunition, added four your convenience339 * @brief does the same as the funtion increaseAmmunition, added four your convenience 320 340 * @param weapon, the Weapon to read the ammo-info about. 321 341 * @param ammo how much ammo to add. 322 342 */ 323 float WeaponManager::inc lreaseAmmunition(const Weapon* weapon, float ammo)343 float WeaponManager::increaseAmmunition(const Weapon* weapon, float ammo) 324 344 { 325 345 assert (weapon != NULL); … … 400 420 this->currentConfigID = weaponConfig; 401 421 PRINTF(4)("Changing weapon configuration: to %i\n", this->currentConfigID); 422 402 423 for (int i = 0; i < WM_MAX_SLOTS; i++) 403 424 this->currentSlotConfig[i].nextWeapon = this->configs[currentConfigID][i]; … … 410 431 void WeaponManager::fire() 411 432 { 433 // printf("firing WM: "); 412 434 Weapon* firingWeapon; 413 435 for(int i = 0; i < this->slotCount; i++) 414 436 { 437 // printf("%i ", i); 438 firingWeapon = this->currentSlotConfig[i].currentWeapon; 439 if( firingWeapon != NULL && firingWeapon->getCurrentState() == WS_SHOOTING) continue; 440 if( firingWeapon != NULL) firingWeapon->requestAction(WA_SHOOT); 441 } 442 // printf("\n"); 443 /* 444 this->crosshair->setRotationSpeed(500); 445 this->crossHairSizeAnim->replay(); 446 */ 447 } 448 449 /** 450 * triggers fire of all weapons in the current weaponconfig 451 */ 452 void WeaponManager::releaseFire() 453 { 454 Weapon* firingWeapon; 455 for(int i = 0; i < this->slotCount; i++) 456 { 415 457 firingWeapon = this->currentSlotConfig[i].currentWeapon; 416 if( firingWeapon != NULL) firingWeapon->requestAction(WA_SHOOT); 417 } 458 if( firingWeapon != NULL) firingWeapon->requestAction(WA_NONE); 459 } 460 461 /* 418 462 this->crosshair->setRotationSpeed(500); 419 463 this->crossHairSizeAnim->replay(); 420 } 421 464 */ 465 } 422 466 423 467 /** … … 429 473 Weapon* tickWeapon; 430 474 475 431 476 for(int i = 0; i < this->slotCount; i++) 432 477 { 433 /* 434 NICE LITTLE DEBUG FUNCTION435 if (this->currentSlotConfig[i].currentWeapon != NULL || this->currentSlotConfig[i].nextWeapon != NULL)478 479 //NICE LITTLE DEBUG FUNCTION 480 /* if (this->currentSlotConfig[i].currentWeapon != NULL || this->currentSlotConfig[i].nextWeapon != NULL) 436 481 printf("%p %p\n", this->currentSlotConfig[i].currentWeapon, this->currentSlotConfig[i].nextWeapon);*/ 437 482 … … 455 500 } 456 501 } 457 458 502 // switching to next Weapon 459 503 tickWeapon = this->currentSlotConfig[i].currentWeapon = this->currentSlotConfig[i].nextWeapon; 504 460 505 if (tickWeapon != NULL) 461 506 { 462 //if (this->parent != NULL)463 507 //if (this->parent != NULL) 508 tickWeapon->toList(this->parentEntity->getOMListNumber()); 464 509 tickWeapon->requestAction(WA_ACTIVATE); 465 510 this->currentSlotConfig[i].position.activateNode(); -
trunk/src/world_entities/weapons/weapon_manager.h
r9869 r10368 60 60 void loadWeapons(const TiXmlElement* root); 61 61 62 void showCrosshair(); 63 void hideCrosshair(); 64 void setRotationSpeed(float speed); 65 62 66 void setSlotCount(unsigned int slotCount); 63 67 unsigned int getSlotCount() const { return this->slotCount; }; … … 91 95 92 96 float increaseAmmunition(const ClassID& projectileType, float ammo); 93 float inc lreaseAmmunition(const Weapon* weapon, float ammo);97 float increaseAmmunition(const Weapon* weapon, float ammo); 94 98 95 99 /** @returns a fixed target namely the Crosshair's 3D position */ … … 99 103 //! @TODO: implement this function (maybe also in Weapon itself) 100 104 void releaseFire(); 105 //inline void setFire() { this->bFire = true; }; 101 106 102 107 void tick(float dt); … … 127 132 128 133 std::vector<CountPointer<AmmoContainer> > ammo; //!< Containers 134 135 bool bFire; 129 136 }; 130 137 -
trunk/src/world_entities/world_entity.cc
r10314 r10368 32 32 33 33 #include "util/loading/load_param.h" 34 #include "loading/load_param_xml.h" 35 #include "util/loading/factory.h" 36 34 37 #include "obb_tree.h" 35 38 36 39 #include "elements/glgui_energywidget.h" 40 #include "elements/glgui_energywidgetvertical.h" 37 41 38 42 #include "state.h" … … 44 48 #include "kill.h" 45 49 #include "debug.h" 50 51 #include "track/track.h" 46 52 47 53 #include "projectiles/projectile.h" … … 86 92 this->_bOnGround = false; 87 93 94 // Track of this entity 95 this->entityTrack = NULL; 96 88 97 // registering default reactions: 89 98 this->subscribeReaction(CoRe::CREngine::CR_OBJECT_DAMAGE, Projectile::staticClassID()); … … 148 157 .describe("the fileName of the object information file (optional)"); 149 158 159 // Entity Attributes 150 160 LoadParam(root, "maxHealth", this, WorldEntity, setHealthMax) 151 161 .describe("The Maximum health that can be loaded onto this entity") … … 157 167 158 168 LoadParam(root, "list", this, WorldEntity, toListS); 169 170 171 // Track 172 LoadParamXML(root, "Track", this, WorldEntity, addTrack) 173 .describe("creates and adds a track to this WorldEntity"); 174 } 175 176 177 /** 178 * this functions adds a track to this workd entity. This can be usefull, if you like this WE to follow a some waypoints. 179 * here the track is created and further initializing left for the Track itself 180 */ 181 void WorldEntity::addTrack(const TiXmlElement* root) 182 { 183 // The problem we have is most likely here. The track should be constructed WITH the XML-Code 184 this->entityTrack = new Track(root); 185 this->setParent(this->entityTrack->getTrackNode()); 186 this->entityTrack->getTrackNode()->setParentMode(PNODE_ALL); 187 /*LOAD_PARAM_START_CYCLE(root, element); 188 { 189 PRINTF(4)("element is: %s\n", element->Value()); 190 Factory::fabricate(element); 191 } 192 LOAD_PARAM_END_CYCLE(element);*/ 193 194 159 195 } 160 196 … … 613 649 */ 614 650 void WorldEntity::tick(float time) 615 {} 651 { 652 } 616 653 617 654 … … 652 689 this->models[0]->draw(); 653 690 } 691 692 //if (this->entityTrack) 693 //this->entityTrack->drawGraph(0.02); 654 694 655 695 // if( this->aabbNode != NULL) … … 721 761 if (this->healthWidget == NULL) 722 762 { 723 this->healthWidget = new OrxGui::GLGuiEnergyWidget ();724 this->healthWidget->setDisplayedName(std::string(this->getClassName()) + " Energy:");725 this->healthWidget->setSize2D(30,400);726 this->healthWidget->setAbsCoor2D(10,100);763 this->healthWidget = new OrxGui::GLGuiEnergyWidgetVertical(); 764 //this->healthWidget->setDisplayedName("Health"); 765 //this->healthWidget->setSize2D(100,20); 766 //this->healthWidget->setAbsCoor2D(100,200); 727 767 728 768 this->updateHealthWidget(); … … 773 813 void WorldEntity::hit(float damage, WorldEntity* killer) 774 814 { 815 775 816 this->decreaseHealth(damage); 776 817 -
trunk/src/world_entities/world_entity.h
r10314 r10368 25 25 // FORWARD DECLARATION 26 26 namespace OrxSound { class SoundBuffer; class SoundSource; } 27 namespace OrxGui { class GLGuiWidget; class GLGuiBar; class GLGuiEnergyWidget; };27 namespace OrxGui { class GLGuiWidget; class GLGuiBar; class GLGuiEnergyWidget; class GLGuiEnergyWidgetVertical; }; 28 28 namespace CoRe { class Collision; } 29 29 … … 32 32 class AABBTreeNode; 33 33 class Model; 34 class Track; 35 class TiXmlElement; 34 36 35 37 class ObjectInformationFile; … … 156 158 void increaseHealthMax(float increaseHealth); 157 159 OrxGui::GLGuiWidget* getHealthWidget(); 158 bool hasHealthWidget() const { return this->healthWidget ; };160 bool hasHealthWidget() const { return this->healthWidget != NULL; }; 159 161 160 162 virtual void varChangeHandler( std::list<int> & id ); … … 185 187 private: 186 188 void updateHealthWidget(); 189 void addTrack(const TiXmlElement* root); 187 190 188 191 … … 192 195 float health; //!< The Energy of this Entity, if the Entity has any energy at all. 193 196 float healthMax; //!< The Maximal energy this entity can take. 194 OrxGui::GLGuiEnergyWidget * healthWidget; //!< The Slider (if wanted).197 OrxGui::GLGuiEnergyWidgetVertical* healthWidget; //!< The Slider (if wanted). 195 198 196 199 std::vector<Model*> models; //!< The model that should be loaded for this entity. … … 235 238 protected: 236 239 Vector velocity; //!< speed of the entity 240 Track* entityTrack; //!< this is the track this entity follows (or NULL if none) 237 241 238 242 };
Note: See TracChangeset
for help on using the changeset viewer.