Changeset 10670 in orxonox.OLD for branches/vs-enhencements/src/world_entities/space_ships/space_ship.cc
- Timestamp:
- Jun 5, 2007, 2:48:15 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/vs-enhencements/src/world_entities/space_ships/space_ship.cc
r10669 r10670 161 161 this->secWeaponMan.setSlotCount(6); 162 162 163 this->weaponMan.createWeaponSlot(0, 3. 006, 1.028, .155, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);164 this->weaponMan.createWeaponSlot(1, 3. 006, 1.028, -.155, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);165 this->weaponMan.createWeaponSlot(2, 4. 03, .063, .876, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);166 this->weaponMan.createWeaponSlot(3, 4. 03, -.063, -.876, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);167 this->weaponMan.createWeaponSlot(4, 1. 431, -.612, 2.691, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);168 this->weaponMan.createWeaponSlot(5, 1. 431, -.612, -2.691, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);169 this->weaponMan.createWeaponSlot(6, 1. 431, -.612, 3.254, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);170 this->weaponMan.createWeaponSlot(7, 1. 431, -.612, -3.254, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);163 this->weaponMan.createWeaponSlot(0, 3.270, 1.028, .155, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 164 this->weaponMan.createWeaponSlot(1, 3.270, 1.028, -.155, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 165 this->weaponMan.createWeaponSlot(2, 4.385, .063, .876, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 166 this->weaponMan.createWeaponSlot(3, 4.385, -.063, -.876, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 167 this->weaponMan.createWeaponSlot(4, 1.635, -.612, 2.691, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 168 this->weaponMan.createWeaponSlot(5, 1.536, -.612, -2.691, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 169 this->weaponMan.createWeaponSlot(6, 1.536, -.612, 3.254, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 170 this->weaponMan.createWeaponSlot(7, 1.536, -.612, -3.254, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 171 171 172 172 … … 212 212 213 213 214 setEnergyShare(.3,.3,.4);215 setShield(100, 100, .2, 2);216 setArmor(100, 100);217 setElectronic(50, 50, .7, 3.0);214 // loadEnergyShare(.3,.3,.4); 215 // loadShield(80, 100, .2, 2); 216 // loadHealth(100, 100, 0); 217 // loadElectronic(40, 50, .7, 3.0); 218 218 219 219 // this->loadModel("models/spaceships/fighter_redesign9.obj"); … … 232 232 233 233 234 this->electronicWidget = NULL;235 this->shieldWidget = NULL;234 // this->electronicWidget = NULL; 235 // this->shieldWidget = NULL; 236 236 237 237 //add events to the eventlist … … 290 290 291 291 292 this->toList(OM_GROUP_00); 292 // this->toList(OM_GROUP_00); 293 294 if ( this->hasPlayer() ){ 295 State::getPlayer()->hud().setShieldWidget(this->getShieldWidget()); 296 State::getPlayer()->hud().setEnergyWidget(this->getElectronicWidget()); 297 } 293 298 } 294 299 … … 313 318 LoadParam(root, "setReactor", this, SpaceShip, setReactor) 314 319 .describe("set reactor output"); 315 LoadParam(root, " setShield", this, SpaceShip, setShield)320 LoadParam(root, "loadShield", this, WorldEntity, loadShield) 316 321 .describe("set shield parameters: current strenght , max strenght, threshhold value (0..1), regeneration rate"); 317 LoadParam(root, " setArmor", this, SpaceShip, setArmor)322 LoadParam(root, "loadHealth", this, WorldEntity, loadHealth) 318 323 .describe("set armor/health parameters: current strenght , max strenght"); 319 LoadParam(root, " setElectronic", this, SpaceShip, setElectronic)324 LoadParam(root, "loadElectronic", this, WorldEntity, loadElectronic) 320 325 .describe("set electronics parameters: current strenght , max strenght, threshhold value (0..1), regeneration rate"); 321 326 LoadParam(root, "setEngine", this, SpaceShip, setEngine) 322 327 .describe("set base speed"); 323 LoadParam(root, " setEnergyShare", this, SpaceShip, setEnergyShare)328 LoadParam(root, "loadEnergyShare", this, SpaceShip, loadEnergyShare) 324 329 .describe("set energy partitioning: shield, weapons, engine (sum should be 1)"); 325 330 LoadParam(root, "setWeapon", this, SpaceShip, setWeapon) … … 352 357 bForward = bBackward = bLeft = bRight = bAscend = bDescend = bRollL = bRollR = bFire = bSecFire = false; 353 358 354 355 // this->armorCur = this->armorMax; 356 this->setHealth(this->getHealthMax()); 357 this->shieldCur = this->shieldMax; 358 this->shieldActive = true; 359 this->electronicCur = this->electronicMax; 360 // this->updateHealth(); 359 this->resetHealth(); 360 this->resetShield(); 361 this->resetElectronic(); 361 362 this->velocity = Vector(0.0, 0.0, 0.0); 362 363 } … … 664 665 PRINTF(5)("ship hit for (%f,%f) \n",pDamage,eDamage); 665 666 666 if( this->shieldActive) { 667 if( this->shieldCur > pDamage) { 668 this->shieldCur = this->shieldCur - pDamage; 669 } 670 else { // shield <= pDamage 671 this->shieldCur -=pDamage; 672 this->shieldActive = false; //shield collapses 673 pDamage += this->shieldCur; 674 if( !this->shieldActive) { 675 this->decreaseHealth( pDamage / 2); // remaining damages hits armor at half rate 676 this->electronicCur -= eDamage; 677 } 678 } 679 } 680 else { 681 this->decreaseHealth(pDamage); 682 this->electronicCur = this->electronicCur - eDamage; 683 } 684 if( this->getHealth() <= 0) { /* FIXME implement shipcrash*/ } 667 static float tmp = this->decreaseShield(pDamage); 668 if( tmp > 0) 669 if ( this->decreaseHealth(tmp / 2) ) 685 670 this->destroy(this); 686 671 687 updateElectronicWidget(); 688 updateShieldWidget(); 689 690 // this->setHealth( this->armorCur); 691 } 692 693 694 void SpaceShip::regen(float time){ 695 static float tmp, armorCur, armorMax; 696 if (armorCur != armorMax || this->armorRegen != 0){ 697 tmp = armorCur + armorRegen * time; 698 if ( tmp > armorMax) 699 armorCur = armorMax; 700 else 701 armorCur = tmp; 702 } 703 if (this->shieldCur != this->shieldMax || this->shieldRegen != 0){ 704 tmp = this->shieldCur + (this->shieldRegen + this->reactorOutput * this->shieldEnergyShare) * time; 705 if( tmp > shieldMax) 706 this->shieldCur = this->shieldMax; 707 else 708 this->shieldCur = tmp; 709 this->shieldActive = ( this->shieldActive || this->shieldCur > shieldTH); 710 711 updateShieldWidget(); 712 } 713 714 this->setHealth( this->shieldCur); // FIXME currently just to test share system 715 716 if (this->electronicCur != this->electronicMax || this->electronicRegen != 0){ 717 tmp = this->electronicCur + this->electronicRegen * time; 718 if ( tmp > electronicMax) 719 this->electronicCur = this->electronicMax; 720 else 721 this->electronicCur = tmp; 722 723 updateElectronicWidget(); 724 } 725 726 } 672 } 673 727 674 728 675 … … 733 680 void SpaceShip::weaponRegen(float time) 734 681 { 735 float energy = ( this->reactorOutput * this->weaponEnergyShare + this->weaponEnergyRegen) * time;682 float energy = ( this->reactorOutput * this->weaponEnergyShare + this->weaponEnergyRegen) * time ; 736 683 Weapon* weapon; 737 for( unsigned int i=0; i < this->weaponMan.getSlotCount(); i++)738 {684 int weaponCount = 0; 685 for( unsigned int i=0; i < this->weaponMan.getSlotCount(); i++) { 739 686 weapon = this->weaponMan.getWeapon(i); 740 if( weapon != NULL && weapon->isActive()) 741 { 687 if( weapon != NULL && weapon->isActive()) { 688 weaponCount++; 689 } 690 } 691 692 if (weaponCount == 0) 693 return; 694 energy *= ( this->weaponMan.getSlotCount() / (float)weaponCount ); 695 696 for( unsigned int i=0; i < this->weaponMan.getSlotCount(); i++) { 697 weapon = this->weaponMan.getWeapon(i); 698 if( weapon != NULL && weapon->isActive()) { 742 699 weapon->increaseEnergy( energy); 743 700 } 744 745 701 } 746 702 // weaponMan.increaseAmmunition( weapon, energy); … … 748 704 749 705 750 void SpaceShip::enterPlaymode(Playable::Playmode playmode) 751 { 706 void SpaceShip::enterPlaymode(Playable::Playmode playmode){ 752 707 switch(playmode) 753 708 { … … 810 765 break; 811 766 812 767 813 768 case Playable::Vertical: 814 769 { … … 832 787 //this->setCameraMode(Camera::ViewNormal); 833 788 State::getCamera()->setEventHandling(false); 834 789 835 790 PRINTF(0)("\n\n\n\n\n\n\n\nSETCAMERA %x\n\n\n\n\n\n\n", State::getCamera()); 836 791 State::getCamera()->setViewMode(Camera::ViewNormal); … … 838 793 State::getCamera()->setParent(this); 839 794 840 841 795 842 796 registerEvent(KeyMapper::PEV_VIEW0); 843 797 registerEvent(KeyMapper::PEV_VIEW1); … … 848 802 849 803 State::getCamera()->setParentMode(PNODE_ALL); 850 804 851 805 break; 852 806 } 853 807 854 808 default: 855 809 PRINTF(2)("Playmode %s Not Implemented in %s\n", Playable::playmodeToString(this->getPlaymode()).c_str(), this->getClassCName()); … … 1020 974 } 1021 975 ActionBox * box = entityTrack->getActionBox(); 1022 976 1023 977 this->travelVelocity = Vector(0, 0, 0); 1024 978 float ssss = 50; … … 1039 993 this->travelVelocity += Vector( 0, 0, ssss ); 1040 994 } 1041 995 1042 996 Vector ds = this->travelVelocity*dt; 1043 997 Vector newPos = this->getRelCoor() + ds; … … 1092 1046 } 1093 1047 1094 void SpaceShip::updateElectronicWidget()1095 {1096 if (this->electronicWidget != NULL)1097 { //if it exists already: update it1098 this->electronicWidget->setMaximum(this->electronicMax);1099 this->electronicWidget->setValue(this->electronicCur);1100 }1101 else1102 { //create the widget1103 this->electronicWidget = new OrxGui::GLGuiEnergyWidgetVertical();1104 this->electronicWidget->getBarWidget()->setChangedValueColor(Color(1,0,0,1));1105 //this->electronicWidget->setDisplayedName("Electronics:");1106 //this->electronicWidget->setSize2D(100,20);1107 //this->electronicWidget->setAbsCoor2D(150,200);1108 this->updateElectronicWidget();1109 if (this->hasPlayer())1110 State::getPlayer()->hud().setEnergyWidget(this->electronicWidget);1111 }1112 }1113 1114 void SpaceShip::updateShieldWidget()1115 {1116 if (this->shieldWidget != NULL)1117 {1118 this->shieldWidget->setMaximum(this->shieldMax);1119 this->shieldWidget->setValue(this->shieldCur);;1120 }1121 else1122 {1123 this->shieldWidget = new OrxGui::GLGuiEnergyWidgetVertical();1124 this->shieldWidget->getBarWidget()->setChangedValueColor(Color(1,0,0,1));1125 //this->shieldWidget->setDisplayedName("Shield:");1126 //his->shieldWidget->setSize2D(100,20);1127 //this->shieldWidget->setAbsCoor2D(200,200);1128 this->updateShieldWidget();1129 if (this->hasPlayer())1130 State::getPlayer()->hud().setShiledWidget(this->shieldWidget);1131 }1132 }1048 // void SpaceShip::updateElectronicWidget() 1049 // { 1050 // if (this->electronicWidget != NULL) 1051 // { //if it exists already: update it 1052 // this->electronicWidget->setMaximum(this->electronicMax); 1053 // this->electronicWidget->setValue(this->electronicCur); 1054 // } 1055 // else 1056 // { //create the widget 1057 // this->electronicWidget = new OrxGui::GLGuiEnergyWidgetVertical(); 1058 // this->electronicWidget->getBarWidget()->setChangedValueColor(Color(1,0,0,1)); 1059 // //this->electronicWidget->setDisplayedName("Electronics:"); 1060 // //this->electronicWidget->setSize2D(100,20); 1061 // //this->electronicWidget->setAbsCoor2D(150,200); 1062 // this->updateElectronicWidget(); 1063 // if (this->hasPlayer()) 1064 // State::getPlayer()->hud().setEnergyWidget(this->electronicWidget); 1065 // } 1066 // } 1067 // 1068 // void SpaceShip::updateShieldWidget() 1069 // { 1070 // if (this->shieldWidget != NULL) 1071 // { 1072 // this->shieldWidget->setMaximum(this->shieldMax); 1073 // this->shieldWidget->setValue(this->shieldCur);; 1074 // } 1075 // else 1076 // { 1077 // this->shieldWidget = new OrxGui::GLGuiEnergyWidgetVertical(); 1078 // this->shieldWidget->getBarWidget()->setChangedValueColor(Color(1,0,0,1)); 1079 // //this->shieldWidget->setDisplayedName("Shield:"); 1080 // //his->shieldWidget->setSize2D(100,20); 1081 // //this->shieldWidget->setAbsCoor2D(200,200); 1082 // this->updateShieldWidget(); 1083 // if (this->hasPlayer()) 1084 // State::getPlayer()->hud().setShiledWidget(this->shieldWidget); 1085 // } 1086 // } 1133 1087 1134 1088 void SpaceShip::setCameraDistance(float dist) … … 1183 1137 }; 1184 1138 1185 // void SpaceShip::addWeaponToSlot(int wm, int config, int slot, const std::string& weaponName){ 1186 // if (wm == 1) { this->weaponMan.addWeapon( Weapon::createWeapon( weaponName ), config, slot); } 1187 // if (wm == 1) { this->weaponMan.addWeapon( Weapon::createWeapon( weaponName ), config, slot); } 1188 // else return; 1189 // } 1190 1139
Note: See TracChangeset
for help on using the changeset viewer.