Changeset 10670 in orxonox.OLD for branches/vs-enhencements/src/world_entities/space_ships
- Timestamp:
- Jun 5, 2007, 2:48:15 PM (18 years ago)
- Location:
- branches/vs-enhencements/src/world_entities/space_ships
- Files:
-
- 2 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 -
branches/vs-enhencements/src/world_entities/space_ships/space_ship.h
r10669 r10670 12 12 #include "playable.h" 13 13 #include "extendable.h" 14 #include "world_entity.h" 14 15 15 16 // Forward Declaration … … 64 65 65 66 //!< functions for XML loading 66 inline void setReactor(float output) {this->reactorOutput = output; }; 67 inline void setShield(float cur, float max, float th, float regen) 68 { this->shieldCur = cur; this->shieldMax = max; this->shieldTH = th; this->shieldRegen = regen;}; 69 inline void setArmor(float cur, float max) { this->setHealth(cur); this->setHealthMax(max); }; 70 inline void setElectronic(float cur, float max, float th, float regen) 71 { this->electronicCur = cur; this->electronicMax = max; this->electronicTH = th; this->electronicRegen = regen; }; 72 inline void setEngine( float speedBase) {this->engineSpeedBase = speedBase; }; 73 inline void setEnergyShare(float shield, float weapon, float engine) 67 void setReactor(float output) {this->reactorOutput = output; }; 68 void setEngine( float speedBase) {this->engineSpeedBase = speedBase; }; 69 void loadEnergyShare(float shield, float weapon, float engine) 74 70 { float tmp = shield + weapon + engine; if (unlikely (tmp > 1)) { tmp = 1/tmp; } 75 // dirty safety hack, prevents total share being bigger than 1!!71 // HACK dirty safety hack, prevents total share being bigger than 1!! 76 72 this->shieldEnergyShare = shield * tmp; 77 73 this->weaponEnergyShare = weapon * tmp; … … 79 75 inline void setWeapon(float regen) { this->weaponEnergyRegen = regen; }; 80 76 81 //!< Resynchonizes armor with health in WE!!82 // inline void updateHealth() { this->setHealth(this->armorCur); this->setHealthMax(this->armorMax); };83 84 77 void addWeaponToSlot(int wm, int config, int slot, const std::string& weaponName); 85 86 //Functions for GUI87 inline float getShieldCur() { return this->shieldCur; }; //!< returns current shield value88 inline float getShieldMax() { return this->shieldMax; }; //!< returns maximum shield value89 90 inline float getArmorCur() { return this->getHealth(); }; //!< returns current armor value91 inline float getArmorMax() { return this->getHealthMax(); }; //!< returns current armor value92 93 inline float getElectronicCur() { return this->electronicCur; }; //!< returns current electronic value94 inline float getElectronicMax() { return this->electronicMax; }; //!< returns current electronic value95 78 96 79 inline PNode* getTravelNode() { return this->travelNode; }; … … 121 104 //void calculateVelocity(float time); 122 105 123 void regen(float time); //!< handler for shield and electronic regeneration106 // void regen(float time); //!< handler for shield and electronic regeneration 124 107 125 108 void weaponRegen(float time); //!< weapon energy regeneration 126 109 127 inline bool systemFailure() { return (this->electronicCur < float(rand())/float(RAND_MAX) * this->electronicTH); };128 129 void updateElectronicWidget();130 void updateShieldWidget();110 // inline bool systemFailure() { return (this->getElectronic() < float(rand())/float(RAND_MAX) * this->getElectronicTH()); }; 111 112 // void updateElectronicWidget(); 113 // void updateShieldWidget(); 131 114 132 115 //WeaponManager weaponMan; //!< the primary weapon manager: managing a list of energy weapons to wepaon-slot mapping … … 136 119 137 120 //ship atributes 138 float shieldCur; //!< current shield 139 float shieldMax; //!< maximum shield 140 float shieldEnergyShare; //!< percentage of reactor output 141 float shieldRegen; //!< shield regeneration rate per second 142 float shieldTH; //!< shield threshhold for reactivation 143 bool shieldActive; //!< wheather the shield is working 144 OrxGui::GLGuiEnergyWidgetVertical* shieldWidget; //!< holds the widget that shows the shield bar 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 145 127 146 128 // float armorCur; //!< current armor 147 129 // float armorMax; //!< maximum armor 148 float armorRegen; //!< armor regeneration per tick (usable on bioships?)130 // float armorRegen; //!< armor regeneration per tick (usable on bioships?) 149 131 //note that the armor widget is set on the health- widget in world- entity (see in player.cc) 150 132 151 float electronicCur; //!< current electronic152 float electronicMax; //!< maximum electronic153 float electronicRegen; //!< electronic regenration rate per tick154 float electronicTH; //!< Threshhold for electronic failure155 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 156 138 157 139 float engineSpeedCur; //!< speed output for movement = speed base + energy share part … … 159 141 int enginePowerConsume; //!< energy needed 160 142 float engineEnergyShare; //!< percentage of reactor output 143 float shieldEnergyShare; //!< percentage of reactor output 161 144 162 145 int weaponEnergySlot; //!< number of energy weapon slots
Note: See TracChangeset
for help on using the changeset viewer.