Changeset 10698 in orxonox.OLD for trunk/src/world_entities/space_ships
- Timestamp:
- Jun 14, 2007, 5:33:43 PM (18 years ago)
- Location:
- trunk/src/world_entities/space_ships
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/world_entities/space_ships/space_ship.cc
r10618 r10698 22 22 #include "util/loading/resource_manager.h" 23 23 24 #include "world_entities/weapons/weapon_manager.h" 25 24 26 #include "weapons/test_gun.h" 25 27 #include "weapons/light_blaster.h" 26 28 #include "weapons/medium_blaster.h" 27 29 #include "weapons/heavy_blaster.h" 30 #include "weapons/rf_cannon.h" 31 #include "weapons/nadion_laser.h" 32 #include "weapons/disruptor.h" 28 33 #include "weapons/swarm_launcher.h" 29 34 #include "weapons/spike_thrower.h" … … 61 66 #include "tools/cameraman.h" 62 67 68 #include "tools/mount_point.h" 69 #include "weapons/weapon_slot.h" 63 70 64 71 #include "util/loading/load_param.h" … … 66 73 67 74 #include "track/track.h" 68 69 70 // #include "lib/gui/gl_gui/glgui_bar.h" 71 // #include "lib/gui/gl_gui/glgui_pushbutton.h" 72 75 #include "track/action_box.h" 73 76 74 77 … … 156 159 //weapons: 157 160 158 Weapon* wpRight1 = new LightBlaster (); 159 wpRight1->setName( "LightBlaster"); 160 Weapon* wpLeft1 = new LightBlaster (); 161 wpLeft1->setName( "LightBlaster"); 162 163 Weapon* wpRight2 = new MediumBlaster (); 164 wpRight2->setName( "MediumBlaster"); 165 Weapon* wpLeft2 = new MediumBlaster (); 166 wpLeft2->setName( "MediumBlaster"); 167 168 Weapon* wpRight3 = new HeavyBlaster (1); 169 wpRight3->setName( "HeavyBlaster"); 170 Weapon* wpLeft3 = new HeavyBlaster (0); 171 wpLeft3->setName( "HeavyBlaster"); 172 173 Weapon* cannon = new SwarmLauncher(); 174 cannon->setName( "SwarmLauncher"); 175 /* 176 Weapon* spike = new SpikeThrower(); 177 spike->setName( "SpikeThrower" ); 178 179 180 Weapon* acid0 = new AcidLauncher(); 181 acid0->setName( "AcidSplasher" ); 182 183 Weapon* acid1 = new AcidLauncher(); 184 acid1->setName( "AcidSplasher" );*/ 185 186 187 this->weaponMan.addWeapon( wpLeft1, 0, 0); 188 this->weaponMan.addWeapon( wpRight1, 0, 1); 189 190 this->weaponMan.addWeapon( wpLeft2, 1, 2); 191 this->weaponMan.addWeapon( wpRight2, 1, 3); 192 193 this->weaponMan.addWeapon( wpLeft3, 2, 4); 194 this->weaponMan.addWeapon( wpRight3, 2, 5); 195 196 this->weaponMan.addWeapon( wpLeft1, 3, 0); 197 this->weaponMan.addWeapon( wpRight1, 3, 1); 198 199 this->weaponMan.addWeapon( wpLeft2, 3, 2); 200 this->weaponMan.addWeapon( wpRight2, 3, 3); 201 202 this->weaponMan.addWeapon( wpLeft3, 3, 4); 203 this->weaponMan.addWeapon( wpRight3, 3, 5); 204 205 206 // this->weaponMan.addWeapon( acid0, 3, 0); 207 // this->weaponMan.addWeapon( acid1, 3, 1); 208 209 210 this->secWeaponMan.addWeapon( cannon, 0, 2); 211 // this->secWeaponMan.addWeapon( spike, 1, 3); 212 // this->secWeaponMan.addWeapon( acid0, 2, 2); 213 // this->secWeaponMan.addWeapon( acid1, 2, 3); 214 215 216 this->weaponMan.changeWeaponConfig(3); 161 this->weaponMan.setParentEntity( this); 162 this->secWeaponMan.setParentEntity( this); 163 164 this->weaponMan.setSlotCount(8); 165 this->secWeaponMan.setSlotCount(6); 166 167 this->weaponMan.createWeaponSlot(0, 3.270, 1.028, .155, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 168 this->weaponMan.createWeaponSlot(1, 3.270, 1.028, -.155, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 169 this->weaponMan.createWeaponSlot(2, 4.385, .063, .876, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 170 this->weaponMan.createWeaponSlot(3, 4.385, -.063, -.876, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 171 this->weaponMan.createWeaponSlot(4, 1.635, -.612, 2.691, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 172 this->weaponMan.createWeaponSlot(5, 1.536, -.612, -2.691, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 173 this->weaponMan.createWeaponSlot(6, 1.536, -.612, 3.254, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 174 this->weaponMan.createWeaponSlot(7, 1.536, -.612, -3.254, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 175 176 177 this->weaponMan.addWeaponToSlot(0, 0, "RFCannon"); 178 this->weaponMan.addWeaponToSlot(0, 1, "RFCannon"); 179 this->weaponMan.addWeaponToSlot(0, 2, "RFCannon"); 180 this->weaponMan.addWeaponToSlot(0, 3, "RFCannon"); 181 this->weaponMan.addWeaponToSlot(1, 0, "RFCannon"); 182 this->weaponMan.addWeaponToSlot(1, 1, "RFCannon"); 183 this->weaponMan.addWeaponToSlot(1, 2, "RFCannon"); 184 this->weaponMan.addWeaponToSlot(1, 3, "RFCannon"); 185 186 this->weaponMan.addWeaponToSlot(0, 4, "NadionLaser"); 187 this->weaponMan.addWeaponToSlot(0, 5, "NadionLaser"); 188 this->weaponMan.addWeaponToSlot(2, 4, "NadionLaser"); 189 this->weaponMan.addWeaponToSlot(2, 5, "NadionLaser"); 190 191 this->weaponMan.addWeaponToSlot(0, 6, "Disruptor"); 192 this->weaponMan.addWeaponToSlot(0, 7, "Disruptor"); 193 this->weaponMan.addWeaponToSlot(3, 6, "Disruptor"); 194 this->weaponMan.addWeaponToSlot(3, 7, "Disruptor"); 195 196 197 this->secWeaponMan.createWeaponSlot(0, 1.5, 3, 0, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 198 this->secWeaponMan.createWeaponSlot(1, 2.6, 0, 3.0, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 199 this->secWeaponMan.createWeaponSlot(2, 1.5, 0, -.5, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 200 this->secWeaponMan.createWeaponSlot(3, 1.5, 0, .5, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 201 this->secWeaponMan.createWeaponSlot(4, 1.5, 0, .5, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 202 this->secWeaponMan.createWeaponSlot(5, 1.5, 0, -.5, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 203 204 this->secWeaponMan.addWeaponToSlot(0, 2, "SwarmLauncher"); 205 206 207 this->weaponMan.changeWeaponConfig(0); 217 208 this->secWeaponMan.changeWeaponConfig(0); 218 209 219 210 220 // curWeaponPrimary = 3;221 // curWeaponSecondary = 0;222 223 211 Playable::weaponConfigChanged(); 224 212 225 reactorOutput = 10; 226 227 weaponEnergyRegen = 10; // 10 einheiten pro Sekunde 228 engineSpeedBase = 15; 229 shieldRegen = 2; 230 231 shieldEnergyShare = 0.3; 232 weaponEnergyShare = 0.3; 233 engineEnergyShare = 0.4; 234 235 shieldCur = 100; 236 shieldMax = 100; 237 shieldTH = .2 * shieldMax; // shield power must be 20% before shield kicks in again 238 239 this->setHealth( 100); 240 this->setHealthMax( 100); 241 242 electronicCur = 50; 243 electronicMax = 50; 244 electronicRegen = 3; 245 electronicTH = .7 * electronicMax; // 30% of eDamage can be handled by the ship 246 247 248 this->loadModel("models/spaceships/human_spaceship_fighter.obj", .25); 213 this->bInit = false; 214 215 loadEnergyShare(.3,.3,.4); 216 loadShield(80, 100, .2, 2); 217 loadHealth(100, 100); 218 loadElectronic(40, 50, .7, 3.0); 219 loadReactor(10); 220 loadWeapon(10); 221 loadEngine(15); 222 223 // this->loadModel("models/spaceships/fighter_redesign9.obj"); 249 224 //this->setVisibiliy(false); 250 225 251 226 bForward = bBackward = bLeft = bRight = bAscend = bDescend = bRollL = bRollR = bFire = bSecFire = false; 252 227 253 this->setHealthMax(shieldMax);254 this->setHealth(shieldCur);228 // this->setHealthMax(shieldMax); 229 // this->setHealth(shieldCur); 255 230 256 231 this->travelNode = new PNode(); … … 260 235 this->cameraNode.addNodeFlags(PNODE_PROHIBIT_CHILD_DELETE); 261 236 262 // widget handling 263 /* 264 this->electronicWidget = new OrxGui::GLGuiEnergyWidgetVertical(); 265 this->electronicWidget->setDisplayedName(std::string(this->getClassName()) + " Electronics:"); 266 this->electronicWidget->setSize2D(30,400); 267 this->electronicWidget->setAbsCoor2D(150,200); 268 this->electronicWidget->shiftDir2D(270); 269 this->updateElectronicWidget(); 270 this->shieldWidget = new OrxGui::GLGuiEnergyWidgetVertical(); 271 this->shieldWidget->setDisplayedName(std::string(this->getClassName()) + " Shield:"); 272 this->shieldWidget->setSize2D(30,400); 273 this->shieldWidget->setAbsCoor2D(200,200); 274 this->shieldWidget->shiftDir2D(270); 275 this->updateShieldWidget(); 276 if (this->hasPlayer()) 277 { 278 State::getPlayer()->hud().setShiledWidget(this->shieldWidget); 279 State::getPlayer()->hud().setEnergyWidget(this->electronicWidget); 280 } 281 */ 282 this->electronicWidget = NULL; 283 this->shieldWidget = NULL; 237 238 // this->electronicWidget = NULL; 239 // this->shieldWidget = NULL; 284 240 285 241 //add events to the eventlist … … 298 254 registerEvent(EV_MOUSE_MOTION); 299 255 300 this->weaponMan.setParentEntity( this);301 this->secWeaponMan.setParentEntity( this);302 303 this->weaponMan.setSlotCount(8);304 305 this->weaponMan.setSlotPosition(0, Vector(0.0, 0, -3.0));306 this->weaponMan.setSlotCapability(0, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);307 308 this->weaponMan.setSlotPosition(1, Vector(0.0, 0, 3.0));309 this->weaponMan.setSlotCapability(1, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);310 311 this->weaponMan.setSlotPosition(2, Vector(1.0, 0, -1.5));312 this->weaponMan.setSlotDirection(2, Quaternion(-M_PI_4*.5, Vector(1,0,0)));313 314 this->weaponMan.setSlotPosition(3, Vector(1.0, 0, 1.5));315 this->weaponMan.setSlotDirection(3, Quaternion(M_PI_4*.5, Vector(1,0,0)));316 317 this->weaponMan.setSlotPosition(4, Vector(1.5, 0, .5));318 this->weaponMan.setSlotDirection(4, Quaternion(-M_PI_4*.5+M_PI, Vector(1,0,0)));319 320 this->weaponMan.setSlotPosition(5, Vector(1.5, 0, -.5));321 this->weaponMan.setSlotDirection(5, Quaternion(+M_PI_4*.5-M_PI, Vector(1,0,0)));322 323 this->weaponMan.setSlotPosition(6, Vector(0.5, 0, 2.5));324 this->weaponMan.setSlotDirection(6, Quaternion(-M_PI_4*.5+M_PI, Vector(1,0,0)));325 326 this->weaponMan.setSlotPosition(7, Vector(0.5, 0, -2.5));327 this->weaponMan.setSlotDirection(7, Quaternion(+M_PI_4*.5-M_PI, Vector(1,0,0)));328 329 this->secWeaponMan.setSlotPosition(0, Vector(1.5, 0, 0));330 this->secWeaponMan.setSlotCapability(0, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);331 332 this->secWeaponMan.setSlotPosition(1, Vector(2.6, 0, 3.0));333 this->secWeaponMan.setSlotCapability(1, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);334 335 this->secWeaponMan.setSlotPosition(2, Vector(1.5, 0, -.5));336 this->secWeaponMan.setSlotDirection(2, Quaternion(-M_PI_4*.5, Vector(1,0,0)));337 338 this->secWeaponMan.setSlotPosition(3, Vector(1.5, 0, .5));339 this->secWeaponMan.setSlotDirection(3, Quaternion(M_PI_4*.5, Vector(1,0,0)));340 341 this->secWeaponMan.setSlotPosition(4, Vector(1.5, 0, .5));342 this->secWeaponMan.setSlotDirection(4, Quaternion(-M_PI_4*.5+M_PI, Vector(1,0,0)));343 344 this->secWeaponMan.setSlotPosition(5, Vector(1.5, 0, -.5));345 this->secWeaponMan.setSlotDirection(5, Quaternion(+M_PI_4*.5-M_PI, Vector(1,0,0)));346 347 256 348 257 this->weaponMan.getFixedTarget()->setParent(this); … … 384 293 this->setSupportedPlaymodes(Playable::Horizontal | Playable::Vertical); 385 294 386 /// FIXME387 // this->trail = new Trail( 5, 10, .2, this);388 // this->trail->setTexture( "textures/engine.png");389 //390 // this->trailL = new Trail( 5, 10, .2, this);391 // this->trailL->setTexture( "textures/engine.png");392 //393 // this->trailR = new Trail( 5, 10, .2, this);394 // this->trailR->setTexture( "textures/engine.png");395 396 295 397 296 this->toList(OM_GROUP_00); 398 297 399 //FIXME Just testaddition to show the wobblegrid 400 /* 401 this->test = new Wobblegrid(5);402 test->setTexture("textures/blub.png");403 404 test->setAbsCoor( this->getAbsCoor() + Vector(0, 2, 0));405 test->setParent( this);406 */ 407 298 299 dynamic_cast<WorldEntity*>(this)->createHealthWidget(); 300 dynamic_cast<WorldEntity*>(this)->createShieldWidget(); 301 dynamic_cast<WorldEntity*>(this)->createElectronicWidget(); 302 303 if ( this->hasPlayer() ){ 304 State::getPlayer()->hud().setShieldWidget(this->getShieldWidget()); 305 State::getPlayer()->hud().setEnergyWidget(this->getElectronicWidget()); 306 } 408 307 } 409 308 … … 415 314 void SpaceShip::loadParams(const TiXmlElement* root) 416 315 { 316 if(!root) 317 return; 318 417 319 Playable::loadParams(root); 418 320 … … 422 324 LoadParam(root, "actionWidthPercentage", this, SpaceShip, setActionWidthPercentage); 423 325 424 State::getCamera()->setViewMode(Camera::ViewTop); 326 State::getCamera()->setViewMode(Camera::ViewNormal); 327 State::getCameraTargetNode()->setParent(this); 328 State::getCamera()->setParent(this); 329 330 LoadParam(root, "loadReactor", this, SpaceShip, loadReactor) 331 .describe("set reactor output"); 332 LoadParam(root, "loadShield", this, WorldEntity, loadShield) 333 .describe("set shield parameters: current strenght , max strenght, threshhold value (0..1), regeneration rate"); 334 LoadParam(root, "loadHealth", this, WorldEntity, loadHealth) 335 .describe("set armor/health parameters: current strenght , max strenght"); 336 LoadParam(root, "loadElectronic", this, WorldEntity, loadElectronic) 337 .describe("set electronics parameters: current strenght , max strenght, threshhold value (0..1), regeneration rate"); 338 LoadParam(root, "loadEngine", this, SpaceShip, loadEngine) 339 .describe("set base speed"); 340 LoadParam(root, "loadEnergyShare", this, SpaceShip, loadEnergyShare) 341 .describe("set energy partitioning: shield, weapons, engine (sum should be 1)"); 342 LoadParam(root, "loadWeapon", this, SpaceShip, loadWeapon) 343 .describe("set weapon regeneration"); 344 345 /* 346 LOAD_PARAM_START_CYCLE(root, element); 347 { 348 LoadParamXML_CYCLE(element, "weaponMan", this->weaponMan, WeaponManager, loadWeapons) 349 .describe("loads Weapons"); 350 } 351 LOAD_PARAM_END_CYCLE(element); 352 353 LOAD_PARAM_START_CYCLE(root, element); 354 { 355 LoadParamXML_CYCLE(element, "secWeaponMan", this->secWeaponMan, WeaponManager, loadWeapons) 356 .describe("loads Weapons"); 357 } 358 LOAD_PARAM_END_CYCLE(element);*/ 425 359 } 426 360 … … 435 369 bForward = bBackward = bLeft = bRight = bAscend = bDescend = bRollL = bRollR = bFire = bSecFire = false; 436 370 437 //xMouse = yMouse = 0;438 439 this-> setHealth(80);371 this->resetHealth(); 372 this->resetShield(); 373 this->resetElectronic(); 440 374 this->velocity = Vector(0.0, 0.0, 0.0); 441 375 } … … 448 382 State::getPlayer()->hud().setRadarCenterNode(this->travelNode); 449 383 State::getPlayer()->hud().setOverlayActive(true); 450 //dynamic_cast <OrxGui::GLGuiEnergyWidgetVertical*> (State::getPlayer()->hud().getArmorWidget())->setDisplayedName("Armor");451 //dynamic_cast<Element2D*>(this->secWeaponMan.getFixedTarget())->setVisibility( true);452 //this->attachCamera();453 // this->setPlaymode(Playable::Horizontal);454 384 } 455 385 … … 461 391 State::getCamera()->setEventHandling(true); 462 392 State::getPlayer()->hud().setRadarCenterNode(NULL); 463 //dynamic_cast<Element2D*>(this->secWeaponMan.getFixedTarget())->setVisibility( false);464 //this->detachCamera();465 393 } 466 394 … … 473 401 if(this->hasPlayer()) 474 402 Playable::postSpawn(); 475 476 //setCollision(new CollisionCluster(1.0, Vector(0,0,0)));477 403 } 478 404 … … 525 451 void SpaceShip::tick (float time) 526 452 { 453 454 // if( !this->bInit) 455 // { 456 // // now get slots from the mount points 457 // std::map<int, MountPoint*>::iterator it = this->mountPointMap.begin(); 458 // for( ;it != this->mountPointMap.end(); it++) 459 // { 460 // WeaponSlot* ws = dynamic_cast<WeaponSlot*>((*it).second->getMount()); 461 // if( ws != NULL && ws->isA(WeaponSlot::staticClassID())) 462 // { 463 // int slot = ws->getWeaponSlot(); 464 // // int side = ws->getWeaponSide(); //FIXME / REMOVE: is not used// HACK needed for some weapons (left/right) 465 // this->getWeaponManager().setSlotPosition(slot, (*it).second->getCenter()); 466 // this->getWeaponManager().setSlotDirection(slot, ws->getRelDir()); 467 // // PRINTF(0)("setting slot %i\n", slot); 468 // // (*it).second->getCenter().debug(); 469 // } 470 // } 471 // this->bInit = true; 472 // } 473 527 474 // Playable::tick(time); 528 475 … … 636 583 if (!(State::getCamera()->getEventHandling())) 637 584 { 585 //PRINTF(0)("\n\n\n\n\n\n\n\nSETCAMERA %x\n\n\n\n\n\n\n", State::getCamera()); 638 586 if( event.type == KeyMapper::PEV_VIEW0) 639 587 { … … 750 698 PRINTF(5)("ship hit for (%f,%f) \n",pDamage,eDamage); 751 699 752 if( this->shieldActive) { 753 if( this->shieldCur > pDamage) { 754 this->shieldCur = this->shieldCur - pDamage; 755 } 756 else { // shield <= pDamage 757 this->shieldCur -=pDamage; 758 this->shieldActive = false; //shield collapses 759 pDamage += this->shieldCur; 760 if( !this->shieldActive) { 761 this->armorCur -= pDamage / 2; // remaining damages hits armor at half rate 762 this->electronicCur -= eDamage; 763 } 764 } 765 } 766 else { 767 this->armorCur = this->armorCur - pDamage; 768 this->electronicCur = this->electronicCur - eDamage; 769 } 770 if( this->armorCur <= 0) { /* FIXME implement shipcrash*/ } 700 static float tmp = this->decreaseShield(pDamage); 701 if( tmp > 0) 702 if ( this->decreaseHealth(tmp / 2) > 0) 771 703 this->destroy(this); 772 704 773 updateElectronicWidget(); 774 updateShieldWidget(); 775 776 this->setHealth( this->armorCur); 777 } 778 779 780 void SpaceShip::regen(float time){ 781 float tmp; 782 if (this->armorCur != this->armorMax || this->armorRegen != 0){ 783 tmp = this->armorCur + this->armorRegen * time; 784 if ( tmp > electronicMax) 785 this->armorCur = this->armorMax; 786 else 787 this->armorCur = tmp; 788 } 789 if (this->shieldCur != this->shieldMax || this->shieldRegen != 0){ 790 tmp = this->shieldCur + (this->shieldRegen + this->reactorOutput * this->shieldEnergyShare) * time; 791 if( tmp > shieldMax) 792 this->shieldCur = this->shieldMax; 793 else 794 this->shieldCur = tmp; 795 this->shieldActive = ( this->shieldActive || this->shieldCur > shieldTH); 796 797 updateShieldWidget(); 798 } 799 800 this->setHealth( this->shieldCur); // FIXME currently just to test share system 801 802 if (this->electronicCur != this->electronicMax || this->electronicRegen != 0){ 803 tmp = this->electronicCur + this->electronicRegen * time; 804 if ( tmp > electronicMax) 805 this->electronicCur = this->electronicMax; 806 else 807 this->electronicCur = tmp; 808 809 updateElectronicWidget(); 810 } 811 812 } 705 } 706 813 707 814 708 … … 819 713 void SpaceShip::weaponRegen(float time) 820 714 { 821 float energy = ( this->reactorOutput * this->weaponEnergyShare + this->weaponEnergyRegen) * time;715 float energy = ( this->reactorOutput * this->weaponEnergyShare + this->weaponEnergyRegen) * time ; 822 716 Weapon* weapon; 823 for( unsigned int i=0; i < this->weaponMan.getSlotCount(); i++)824 {717 int weaponCount = 0; 718 for( unsigned int i=0; i < this->weaponMan.getSlotCount(); i++) { 825 719 weapon = this->weaponMan.getWeapon(i); 826 if( weapon != NULL && weapon->isActive()) 827 { 720 if( weapon != NULL && weapon->isActive()) { 721 weaponCount++; 722 } 723 } 724 725 if (weaponCount == 0) 726 return; 727 energy *= ( this->weaponMan.getSlotCount() / (float)weaponCount ); 728 729 for( unsigned int i=0; i < this->weaponMan.getSlotCount(); i++) { 730 weapon = this->weaponMan.getWeapon(i); 731 if( weapon != NULL && weapon->isActive()) { 828 732 weapon->increaseEnergy( energy); 829 733 } 830 831 734 } 832 735 // weaponMan.increaseAmmunition( weapon, energy); … … 834 737 835 738 836 void SpaceShip::enterPlaymode(Playable::Playmode playmode) 837 { 739 void SpaceShip::enterPlaymode(Playable::Playmode playmode){ 838 740 switch(playmode) 839 741 { … … 895 797 } 896 798 break; 799 800 801 case Playable::Vertical: 802 { 803 this->travelNode->setAbsCoor(this->getAbsCoor()); 804 this->travelNode->updateNode(0.01f); 805 806 this->isTravelDistanceInit = false; 807 808 if(this->entityTrack) 809 this->travelNode->setParent(this->entityTrack->getTrackNode()); 810 811 this->setParent(this->travelNode); 812 this->setRelCoor(0,0,0); 813 814 State::getCameraNode()->setParentSoft(this->travelNode); 815 //State::getCameraNode()->setParentSoft(this); 816 //State::getCameraNode()->setRelCoorSoft(-0.01, 40, 0); 817 State::getCameraTargetNode()->setParentSoft(this->travelNode); 818 //State::getCameraTargetNode()->setParentSoft(this); 819 //State::getCameraTargetNode()->setRelCoorSoft(0,0,0); 820 //this->setCameraMode(Camera::ViewNormal); 821 State::getCamera()->setEventHandling(false); 822 823 PRINTF(0)("\n\n\n\n\n\n\n\nSETCAMERA %x\n\n\n\n\n\n\n", State::getCamera()); 824 State::getCamera()->setViewMode(Camera::ViewNormal); 825 State::getCameraTargetNode()->setParent(this); 826 State::getCamera()->setParent(this); 827 828 829 registerEvent(KeyMapper::PEV_VIEW0); 830 registerEvent(KeyMapper::PEV_VIEW1); 831 registerEvent(KeyMapper::PEV_VIEW2); 832 registerEvent(KeyMapper::PEV_VIEW3); 833 registerEvent(KeyMapper::PEV_VIEW4); 834 registerEvent(KeyMapper::PEV_VIEW5); 835 836 State::getCamera()->setParentMode(PNODE_ALL); 837 838 break; 839 } 897 840 898 841 default: … … 1058 1001 } 1059 1002 case Playable::Vertical: 1003 { 1004 if ( !entityTrack || !entityTrack->getActionBox() ) 1005 { 1006 break; 1007 } 1008 ActionBox * box = entityTrack->getActionBox(); 1009 1010 this->travelVelocity = Vector(0, 0, 0); 1011 float ssss = 50; 1012 if ( this->bForward ) 1013 { 1014 this->travelVelocity += Vector( 0, ssss, 0 ); 1015 } 1016 if ( this->bBackward ) 1017 { 1018 this->travelVelocity += Vector( 0, -ssss, 0 ); 1019 } 1020 if ( this->bLeft ) 1021 { 1022 this->travelVelocity += Vector( 0, 0, -ssss ); 1023 } 1024 if ( this->bRight ) 1025 { 1026 this->travelVelocity += Vector( 0, 0, ssss ); 1027 } 1028 1029 Vector ds = this->travelVelocity*dt; 1030 Vector newPos = this->getRelCoor() + ds; 1031 if ( newPos.y < -(box->getHeight_2()) || newPos.y > box->getHeight_2() ) 1032 { 1033 this->travelVelocity.y = 0; 1034 } 1035 if ( newPos.z > box->getWidth_2() || newPos.z < -(box->getWidth_2()) ) 1036 { 1037 this->travelVelocity.z = 0; 1038 } 1039 } 1060 1040 break; 1061 1041 default: … … 1099 1079 } 1100 1080 1101 void SpaceShip::updateElectronicWidget() 1102 { 1103 if (this->electronicWidget != NULL) 1104 { //if it exists already: update it 1105 this->electronicWidget->setMaximum(this->electronicMax); 1106 this->electronicWidget->setValue(this->electronicCur); 1107 } 1108 else 1109 { //create the widget 1110 this->electronicWidget = new OrxGui::GLGuiEnergyWidgetVertical(); 1111 this->electronicWidget->getBarWidget()->setChangedValueColor(Color(1,0,0,1)); 1112 //this->electronicWidget->setDisplayedName("Electronics:"); 1113 //this->electronicWidget->setSize2D(100,20); 1114 //this->electronicWidget->setAbsCoor2D(150,200); 1115 this->updateElectronicWidget(); 1116 if (this->hasPlayer()) 1117 State::getPlayer()->hud().setEnergyWidget(this->electronicWidget); 1118 } 1119 } 1120 1121 void SpaceShip::updateShieldWidget() 1122 { 1123 if (this->shieldWidget != NULL) 1124 { 1125 this->shieldWidget->setMaximum(this->shieldMax); 1126 this->shieldWidget->setValue(this->shieldCur);; 1127 } 1128 else 1129 { 1130 this->shieldWidget = new OrxGui::GLGuiEnergyWidgetVertical(); 1131 this->shieldWidget->getBarWidget()->setChangedValueColor(Color(1,0,0,1)); 1132 //this->shieldWidget->setDisplayedName("Shield:"); 1133 //his->shieldWidget->setSize2D(100,20); 1134 //this->shieldWidget->setAbsCoor2D(200,200); 1135 this->updateShieldWidget(); 1136 if (this->hasPlayer()) 1137 State::getPlayer()->hud().setShiledWidget(this->shieldWidget); 1138 } 1139 } 1081 // void SpaceShip::updateElectronicWidget() 1082 // { 1083 // if (this->electronicWidget != NULL) 1084 // { //if it exists already: update it 1085 // this->electronicWidget->setMaximum(this->electronicMax); 1086 // this->electronicWidget->setValue(this->electronicCur); 1087 // } 1088 // else 1089 // { //create the widget 1090 // this->electronicWidget = new OrxGui::GLGuiEnergyWidgetVertical(); 1091 // this->electronicWidget->getBarWidget()->setChangedValueColor(Color(1,0,0,1)); 1092 // //this->electronicWidget->setDisplayedName("Electronics:"); 1093 // //this->electronicWidget->setSize2D(100,20); 1094 // //this->electronicWidget->setAbsCoor2D(150,200); 1095 // this->updateElectronicWidget(); 1096 // if (this->hasPlayer()) 1097 // State::getPlayer()->hud().setEnergyWidget(this->electronicWidget); 1098 // } 1099 // } 1100 // 1101 // void SpaceShip::updateShieldWidget() 1102 // { 1103 // if (this->shieldWidget != NULL) 1104 // { 1105 // this->shieldWidget->setMaximum(this->shieldMax); 1106 // this->shieldWidget->setValue(this->shieldCur);; 1107 // } 1108 // else 1109 // { 1110 // this->shieldWidget = new OrxGui::GLGuiEnergyWidgetVertical(); 1111 // this->shieldWidget->getBarWidget()->setChangedValueColor(Color(1,0,0,1)); 1112 // //this->shieldWidget->setDisplayedName("Shield:"); 1113 // //his->shieldWidget->setSize2D(100,20); 1114 // //this->shieldWidget->setAbsCoor2D(200,200); 1115 // this->updateShieldWidget(); 1116 // if (this->hasPlayer()) 1117 // State::getPlayer()->hud().setShiledWidget(this->shieldWidget); 1118 // } 1119 // } 1120 1140 1121 1141 1122 void SpaceShip::setCameraDistance(float dist) … … 1176 1157 1177 1158 State::getPlayer()->hud().setOverlayPercentage(100-int(100*this->actionWidthPercentage)); 1178 PRINTF(0)("TravelDistance has been updated\n");1159 // PRINTF(0)("TravelDistance has been updated\n"); 1179 1160 this->isTravelDistanceInit = true; 1180 1161 } … … 1189 1170 this->isTravelDistanceInit = false; 1190 1171 }; 1172 1173 -
trunk/src/world_entities/space_ships/space_ship.h
r10531 r10698 12 12 #include "playable.h" 13 13 #include "extendable.h" 14 #include "world_entity.h" 14 15 15 16 // Forward Declaration … … 63 64 inline WeaponManager& getWeaponManagerSecondary() { return this->secWeaponMan; }; 64 65 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 66 //!< functions for XML loading 67 void loadReactor(float output) {this->reactorOutput = output; }; 68 void loadEngine( float speedBase) {this->engineSpeedBase = speedBase; }; 69 void loadEnergyShare(float shield, float weapon, float engine) 70 { float tmp = shield + weapon + engine; if (unlikely (tmp > 1)) { tmp = 1/tmp; } 71 // HACK dirty safety hack, prevents total share being bigger than 1!! 72 this->shieldEnergyShare = shield * tmp; 73 this->weaponEnergyShare = weapon * tmp; 74 this->engineEnergyShare = engine * tmp; }; 75 inline void loadWeapon(float regen) { this->weaponEnergyRegen = regen; }; 76 77 void addWeaponToSlot(int wm, int config, int slot, const std::string& weaponName); 74 78 75 79 inline PNode* getTravelNode() { return this->travelNode; }; … … 86 90 virtual void movement (float dt); 87 91 88 // 92 89 93 90 94 void nextWeaponConfig(); … … 92 96 93 97 virtual void hit(float damage, WorldEntity* killer); 94 98 95 99 void setCameraDistance(float dist); 96 100 … … 100 104 //void calculateVelocity(float time); 101 105 102 void regen(float time); //!< handler for shield and electronic regeneration106 // void regen(float time); //!< handler for shield and electronic regeneration 103 107 104 108 void weaponRegen(float time); //!< weapon energy regeneration 105 109 106 inline bool systemFailure() { return (this->electronicCur < float(rand())/float(RAND_MAX) * this->electronicTH); };107 108 void updateElectronicWidget();109 void updateShieldWidget();110 // inline bool systemFailure() { return (this->getElectronic() < float(rand())/float(RAND_MAX) * this->getElectronicTH()); }; 111 112 // void updateElectronicWidget(); 113 // void updateShieldWidget(); 110 114 111 115 //WeaponManager weaponMan; //!< the primary weapon manager: managing a list of energy weapons to wepaon-slot mapping … … 115 119 116 120 //ship atributes 117 float shieldCur; //!< current shield 118 float shieldMax; //!< maximum shield 119 float shieldEnergyShare; //!< percentage of reactor output 120 float shieldRegen; //!< shield regeneration rate per second 121 float shieldTH; //!< shield threshhold for reactivation 122 bool shieldActive; //!< wheather the shield is working 123 OrxGui::GLGuiEnergyWidgetVertical* shieldWidget; //!< holds the widget that shows the shield bar 124 125 float armorCur; //!< current armor 126 float armorMax; //!< maximum armor 127 float armorRegen; //!< armor regeneration per tick (usable on bioships?) 121 // float shieldCur; //!< current shield 122 // float shieldMax; //!< maximum shield 123 // float shieldRegen; //!< shield regeneration rate per second 124 // float shieldTH; //!< shield threshhold for reactivation 125 // bool shieldActive; //!< wheather the shield is working 126 // OrxGui::GLGuiEnergyWidgetVertical* shieldWidget; //!< holds the widget that shows the shield bar 127 128 // float armorCur; //!< current armor 129 // float armorMax; //!< maximum armor 130 // float armorRegen; //!< armor regeneration per tick (usable on bioships?) 128 131 //note that the armor widget is set on the health- widget in world- entity (see in player.cc) 129 132 130 float electronicCur; //!< current electronic131 float electronicMax; //!< maximum electronic132 float electronicRegen; //!< electronic regenration rate per tick133 float electronicTH; //!< Threshhold for electronic failure134 OrxGui::GLGuiEnergyWidgetVertical* electronicWidget; //!< holds the widget that shows the electronic bar133 // float electronicCur; //!< current electronic 134 // float electronicMax; //!< maximum electronic 135 // float electronicRegen; //!< electronic regenration rate per tick 136 // float electronicTH; //!< Threshhold for electronic failure 137 // OrxGui::GLGuiEnergyWidgetVertical* electronicWidget; //!< holds the widget that shows the electronic bar 135 138 136 139 float engineSpeedCur; //!< speed output for movement = speed base + energy share part … … 138 141 int enginePowerConsume; //!< energy needed 139 142 float engineEnergyShare; //!< percentage of reactor output 143 float shieldEnergyShare; //!< percentage of reactor output 140 144 141 145 int weaponEnergySlot; //!< number of energy weapon slots … … 147 151 148 152 float reactorOutput; //!< reactor output 149 float reactorCapacity; //!< reactor capacity153 // float reactorCapacity; //!< reactor capacity 150 154 151 155 int curWeaponPrimary; //!< current primary weapon config 152 156 int curWeaponSecondary; //!< current secondary weapon config 153 157 154 bool bForward; 155 bool bBackward; 158 bool bForward; //!< up button pressed. 159 bool bBackward; //!< down button pressed. 156 160 bool bLeft; //!< left button pressed. 157 161 bool bRight; //!< right button pressed. … … 161 165 bool bRollR; //!< rolling button pressed (right) 162 166 bool bSecFire; //!< second fire button pressed 167 168 bool bInit; //!< set true, if MP have been loaded 163 169 164 170 /* … … 208 214 209 215 byte oldMask; //!< used for synchronisation 210 216 /* 211 217 Trail* trail; //!< Burst trail 212 218 Trail* trailL; //!< Burst trail 213 219 Trail* trailR; //!< Burst trail 214 220 */ 215 221 216 222 };
Note: See TracChangeset
for help on using the changeset viewer.