- Timestamp:
- Jan 25, 2007, 2:18:07 PM (18 years ago)
- Location:
- trunk
- Files:
-
- 46 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/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.