Changeset 11189 for code/branches/sagerjFS16/src
- Timestamp:
- May 19, 2016, 5:04:41 PM (9 years ago)
- Location:
- code/branches/sagerjFS16/src
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/sagerjFS16/src/modules/overlays/hud/HUDChargeBar.cc
r11185 r11189 31 31 #include "util/Convert.h" 32 32 #include "core/CoreIncludes.h" 33 #include "core/XMLPort.h"34 33 #include "worldentities/pawns/Pawn.h" 35 34 #include "overlays/OverlayGroup.h" … … 45 44 46 45 this->owner_ = nullptr; 47 this->bUseBarColour_ = false; 48 this->textOffset_ = Vector2(0.0f, 0.0f); 49 this->textScale_ = 1.0f; 50 this->correspondingMode_ = nullptr; 51 52 this->setIconPosition(Vector2(0.05f,0.5f)); 53 this->setIconDimensions(Vector2(0.1f,0.5f)); 54 55 this->textoverlay_ = new OverlayText(this->getContext()); 56 57 assert(this->textoverlay_.get()); 58 59 this->textoverlay_->setCaption(""); 60 this->textoverlay_->setAspectCorrection(false); 61 62 positionText(); 46 this->correspondingMode_ = nullptr; // usually no chargeable weapon equipped 63 47 } 64 48 65 HUDChargeBar::~HUDChargeBar() 66 { 67 if (this->isInitialized()) 68 { 69 this->textoverlay_->destroy(); 70 this->textoverlay_ = nullptr; 71 } 72 } 73 74 void HUDChargeBar::XMLPort(Element& xmlelement, XMLPort::Mode mode) 75 { 76 SUPER(HUDChargeBar, XMLPort, xmlelement, mode); 77 78 XMLPortParam(HUDChargeBar, "showtext", setTextVisible, getTextVisible, xmlelement, mode).defaultValues(true); 79 XMLPortParam(HUDChargeBar, "textfont", setTextFont, getTextFont, xmlelement, mode).defaultValues("Monofur"); 80 XMLPortParam(HUDChargeBar, "textusebarcolour", setTextUseBarColour, getTextUseBarColour, xmlelement, mode).defaultValues(false); 81 XMLPortParam(HUDChargeBar, "textcolour", setTextColour, getTextColour, xmlelement, mode).defaultValues(ColourValue(1.0, 1.0, 1.0, 1.0)); 82 XMLPortParam(HUDChargeBar, "textalign", setTextAlignmentString, getTextAlignmentString, xmlelement, mode).defaultValues("left"); 83 XMLPortParam(HUDChargeBar, "textoffset", setTextOffset, getTextOffset, xmlelement, mode).defaultValues(Vector2::ZERO); 84 XMLPortParam(HUDChargeBar, "textscale", setTextScale, getTextScale, xmlelement, mode).defaultValues(1.0f); 85 XMLPortParam(HUDChargeBar, "textpickpoint", setTextPickPoint, getTextPickPoint, xmlelement, mode).defaultValues(Vector2::ZERO); 86 XMLPortParam(HUDChargeBar, "textrotation", setTextRotation, getTextRotation, xmlelement, mode).defaultValues(0.0f); 87 XMLPortParam(HUDChargeBar, "textspacewidth", setTextSpaceWidth, getTextSpaceWidth, xmlelement, mode).defaultValues(true); 88 } 49 HUDChargeBar::~HUDChargeBar() { } 89 50 90 51 void HUDChargeBar::tick(float dt) … … 94 55 if (this->owner_) 95 56 { 96 if(correspondingMode_ != nullptr){ 97 this->setValue( correspondingMode_->getCharges() * 1.0f / correspondingMode_->getMaxCharges() ); 98 this->textoverlay_->setCaption(multi_cast<std::string>(static_cast<int>(this->owner_->getHealth()))); 57 if(correspondingMode_ != nullptr) // if there is a chargeable weapon equipped we want to show the charged amount with a HUDBar 58 { 59 this->setValue( correspondingMode_->getCharges() * 1.0f / correspondingMode_->getMaxCharges() ); // The Value of the HUDBar is the ratio of current Charges and the maximum Charges possible 60 61 if(this->correspondingMode_->getCharges() > 0) // The HUDBar should only be visible when we are charging up 62 this->setVisible(true); 63 } 64 else 65 { 66 this->setVisible(false); 67 } 99 68 } 100 101 102 69 } 103 70 else 104 71 { 105 72 this->setValue(0); 106 this->textoverlay_->setCaption("0");107 73 } 108 109 if (this->bUseBarColour_)110 this->textoverlay_->setColour(this->getCurrentBarColour());111 112 74 113 75 } … … 116 78 { 117 79 SUPER(HUDChargeBar, changedOwner); 80 81 this->setVisible(false); 82 this->correspondingMode_ = nullptr; 118 83 119 84 this->owner_ = orxonox_cast<Pawn*>(this->getOwner()); … … 141 106 } 142 107 } 143 144 void HUDChargeBar::changedOverlayGroup()145 {146 SUPER(HUDChargeBar, changedOverlayGroup);147 148 this->getOverlayGroup()->addElement(this->textoverlay_.get());149 }150 151 void HUDChargeBar::changedVisibility()152 {153 SUPER(HUDChargeBar, changedVisibility);154 155 this->textoverlay_->setVisible(this->isVisible());156 }157 158 void HUDChargeBar::changedName()159 {160 SUPER(HUDChargeBar, changedName);161 162 this->textoverlay_->setName(this->getName() + "text");163 }164 165 void HUDChargeBar::setTextColour(const ColourValue& colour)166 {167 this->textColour_ = colour;168 if (!this->bUseBarColour_)169 this->textoverlay_->setColour(colour);170 }171 172 void HUDChargeBar::setTextUseBarColour(bool bUseBarColour)173 {174 this->bUseBarColour_ = bUseBarColour;175 if (!bUseBarColour)176 this->textoverlay_->setColour(this->textColour_);177 }178 179 void HUDChargeBar::positionText()180 {181 this->textoverlay_->setPosition(this->getPosition() + this->textOffset_*this->getActualSize());182 this->textoverlay_->setTextSize(this->getActualSize().y*this->textScale_);183 }184 185 void HUDChargeBar::positionChanged()186 {187 HUDBar::positionChanged();188 positionText();189 }190 191 void HUDChargeBar::sizeChanged()192 {193 HUDBar::sizeChanged();194 positionText();195 }196 108 } -
code/branches/sagerjFS16/src/modules/overlays/hud/HUDChargeBar.h
r11185 r11189 22 22 * 23 23 * Author: 24 * Fabian 'x3n' Landau24 * Johannes Sager 25 25 * Co-authors: 26 26 * ... … … 28 28 */ 29 29 30 #ifndef _HUD HealthBar_H__31 #define _HUD HealthBar_H__30 #ifndef _HUDChargeBar_H__ 31 #define _HUDChargeBar_H__ 32 32 33 33 #include "overlays/OverlaysPrereqs.h" 34 35 34 #include "util/Math.h" 36 35 #include "tools/interfaces/Tickable.h" 37 36 #include "overlays/OverlayText.h" 38 37 #include "HUDBar.h" 38 39 39 #include "weaponsystem/WeaponSystem.h" 40 40 #include "weaponsystem/WeaponPack.h" … … 44 44 namespace orxonox 45 45 { 46 /** 47 @brief 48 The HUDChargeBar displays the amount of charges of its owner (a @ref Pawn). 49 The length of the bar is given by the ratio of the current charges and the maximal charges of the @ref Pawn. 50 */ 51 46 52 class _OverlaysExport HUDChargeBar : public HUDBar, public Tickable 47 53 { … … 50 56 virtual ~HUDChargeBar(); 51 57 52 virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;53 58 virtual void tick(float dt) override; 54 59 virtual void changedOwner() override; 55 virtual void changedOverlayGroup() override;56 virtual void changedVisibility() override;57 virtual void changedName() override;58 59 inline void setTextFont(const std::string& font)60 { if (!font.empty()) { this->textoverlay_->setFont(font); } }61 inline const std::string& getTextFont() const62 { return this->textoverlay_->getFont(); }63 64 void setTextColour(const ColourValue& colour);65 inline const ColourValue& getTextColour() const66 { return this->textoverlay_->getColour(); }67 68 void setTextUseBarColour(bool bUseBarColour);69 inline bool getTextUseBarColour() const70 { return this->bUseBarColour_; }71 72 inline void setTextAlignment(OverlayText::Alignment alignment)73 { this->textoverlay_->setAlignment(alignment); }74 inline OverlayText::Alignment getTextAlignment() const75 { return this->textoverlay_->getAlignment(); }76 77 void setTextAlignmentString(const std::string& alignment)78 { this->textoverlay_->setAlignmentString(alignment); }79 std::string getTextAlignmentString() const80 { return this->textoverlay_->getAlignmentString(); }81 82 inline void setTextVisible(bool bVisible)83 { this->textoverlay_->setVisible(bVisible); }84 inline bool getTextVisible() const85 { return this->textoverlay_->isVisible(); }86 87 inline void setTextScale(float scale)88 { this->textScale_ = scale;89 positionText();90 }91 inline float getTextScale() const92 { return this->textScale_; }93 94 inline void setTextPickPoint(const Vector2& pickpoint)95 { this->textoverlay_->setPickPoint(pickpoint); }96 inline Vector2 getTextPickPoint() const97 { return this->textoverlay_->getPickPoint(); }98 99 inline void setTextOffset(const Vector2& position)100 { this->textOffset_ = position;101 this->positionText();102 }103 inline Vector2 getTextOffset() const104 { return this->textOffset_; }105 106 inline void setTextRotation(const Degree& angle)107 { this->textoverlay_->setRotation(angle); }108 inline const Degree& getTextRotation() const109 { return this->textoverlay_->getRotation(); }110 111 inline void setTextSpaceWidth(float width)112 { this->textoverlay_->setSpaceWidth(width); }113 inline float getTextSpaceWidth() const114 { return this->textoverlay_->getSpaceWidth(); }115 60 116 61 inline void setHealthBarOwner(Pawn* owner) 117 62 { this->owner_ = owner; } 118 protected: 119 virtual void positionChanged() override; 120 virtual void sizeChanged() override; 63 121 64 private: 122 WeaponMode* correspondingMode_; 123 void positionText(); 65 WeaponMode* correspondingMode_; // pointer on the chargeable weaponmode (=nullptr if no chargeable weapons equipped) 124 66 WeakPtr<Pawn> owner_; 125 StrongPtr<OverlayText> textoverlay_;126 bool bUseBarColour_;127 ColourValue textColour_;128 Vector2 textOffset_;129 float textScale_;130 67 }; 131 68 } -
code/branches/sagerjFS16/src/modules/weapons/weaponmodes/Discharger.cc
r11185 r11189 21 21 * 22 22 * Author: 23 * God of everything23 * Johannes Sager 24 24 * Co-authors: 25 25 * … … 51 51 RegisterObject(Discharger); 52 52 53 this->reloadTime_ = 3.14159f; 54 this->damage_ = 0.0f; 55 this->speed_ = 100.0f; 56 this->chargeable_ = true; 53 this->reloadTime_ = 3.14159f; // how long you cannot charge after fire 54 this->damage_ = 0.0f; // if 0.0f then it uses weaponsettings.oxi 55 this->speed_ = 100.0f; // base projectile speed 56 this->chargeable_ = true; // true if weapon chargeable 57 57 58 58 this->setMunitionName("LaserMunition"); … … 70 70 projectile->setOrientation(this->getMuzzleOrientation()); 71 71 projectile->setPosition(this->getMuzzlePosition()); 72 projectile->setVelocity(this->getMuzzleDirection() * this->speed_ * this->charges_ / 5); 73 72 projectile->setVelocity(this->getMuzzleDirection() * this->speed_ * this->charges_ / 5);// we scale the projectile speed with the current charges / 5 74 73 projectile->setShooter(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn()); 75 74 projectile->setDamage(this->getDamage() * this->charges_); 76 projectile->setShieldDamage(this->getShieldDamage() * this->charges_); 77 projectile->setHealthDamage(this->getHealthDamage() * this->charges_); 78 this->charges_ = 0; 75 projectile->setShieldDamage(this->getShieldDamage() * this->charges_); // we scale both types of damage with the current charges as 76 projectile->setHealthDamage(this->getHealthDamage() * this->charges_); // well since this is the whole purpose of a chareable weapon 77 this->charges_ = 0; // firing "consumes" the current charges (reset after fire) 79 78 } 80 79 } -
code/branches/sagerjFS16/src/modules/weapons/weaponmodes/Discharger.h
r11185 r11189 21 21 * 22 22 * Author: 23 * God of everything23 * Johannes Sager 24 24 * Co-authors: 25 25 * -
code/branches/sagerjFS16/src/orxonox/weaponsystem/WeaponMode.cc
r11185 r11189 24 24 * Fabian 'x3n' Landau 25 25 * Co-authors: 26 * ...26 * Johannes Sager 27 27 * 28 28 */ … … 63 63 this->bAutoReload_ = true; 64 64 this->bParallelReload_ = true; 65 this->chargeable_ = false; 66 this->charges_ = 0; 67 this->maxCharges_ = 100; 65 this->chargeable_ = false; // most weapons are not chargeable 66 this->charges_ = 0; // always start with no charges 67 this->maxCharges_ = 100; // default maximum charges one can have are 100 68 68 69 69 this->reloadTimer_.setTimer(0.0f, false, createExecutor(createFunctor(&WeaponMode::reloaded, this))); … … 123 123 bool WeaponMode::fire(float* reloadTime) 124 124 { 125 orxout() << "--- " << endl;126 125 (*reloadTime) = this->reloadTime_; 127 126 // Fireing is only possible if this weapon mode is not reloading and there is enough munition … … 175 174 { 176 175 177 if( this->chargeable_) 178 { 179 if(this->charges_ < this->maxCharges_){ 180 this->charges_ += 1; 181 } 176 if( this->chargeable_) // chargeable weapons are supposed to charge on push 177 { 178 this->munition_ = this->weapon_->getWeaponPack()->getWeaponSystem()->getMunition(&this->munitiontype_); // updates the pointer to the munition(which we use in the next step) 179 if(this->charges_ < this->maxCharges_ && this->bReloading_ == false && this->munition_->canTakeMunition(1, this)) // charges up unless: 180 { // - we are fully charged 181 this->charges_ += 1; // - we are reloading 182 } // - we have no munition 182 183 return false; 183 } else { 184 } 185 else // normal (not chargeable) weapons are supposed to fire on push 186 { 184 187 return fire(reloadTime); 185 188 } 186 189 } 187 190 188 bool WeaponMode::release(float* reloadTime) 189 { 190 if( this->chargeable_) 191 bool WeaponMode::release(float* reloadTime) 192 { 193 if( this->chargeable_) // chargeable weapons are supposed to fire on release 191 194 { 192 195 return fire(reloadTime); 193 }else{ 196 } 197 else // normal (not chargeable) weapons should do nothing on release 198 { 194 199 return false; 195 200 } -
code/branches/sagerjFS16/src/orxonox/weaponsystem/WeaponMode.h
r11185 r11189 24 24 * Fabian 'x3n' Landau 25 25 * Co-authors: 26 * ...26 * Johannes Sager 27 27 * 28 28 */ … … 110 110 111 111 // Fire 112 inline unsigned int getMaxCharges() 112 inline unsigned int getMaxCharges() // get the maximum of charges one can have 113 113 { return this->maxCharges_;} 114 inline unsigned int getCharges() 114 inline unsigned int getCharges() // get the current amount of charges 115 115 { return this->charges_;} 116 inline bool isChargeable() 116 inline bool isChargeable() // returns if the weaponmode is chargeable 117 117 { return this->chargeable_;} 118 118 inline void setDamage(float damage) … … 176 176 unsigned int initialMagazines_; 177 177 unsigned int munitionPerShot_; 178 unsigned int charges_; 179 unsigned int maxCharges_; 178 unsigned int charges_; // current amount of charges only matters for chargeable weapons(chargeable == true) 179 unsigned int maxCharges_; // maximum amount of charges (is initialized with 100 in weaponmode.cc) only matters for chargeable weapons(chargeable == true) 180 180 181 181 float reloadTime_; 182 bool bAutoReload_; // If true, the weapon reloads the magazine automatically.183 bool bParallelReload_; // If true, the weapon reloads in parallel to the magazine reloading.184 bool chargeable_; // If true, the weapon fires at release instead at push(where he charges up)182 bool bAutoReload_; // If true, the weapon reloads the magazine automatically. 183 bool bParallelReload_; // If true, the weapon reloads in parallel to the magazine reloading. 184 bool chargeable_; // If true, the weapon charges up on push and fires on release 185 185 186 186 float damage_; … … 202 202 203 203 Timer reloadTimer_; 204 bool bReloading_; // If true, this weapon mode is marked as reloading.204 bool bReloading_; // If true, this weapon mode is marked as reloading. 205 205 206 206 Vector3 muzzlePosition_; 207 207 Quaternion muzzleOrientation_; 208 208 209 std::string fireSoundPath_; // The path of the sound played when fireing210 float fireSoundVolume_; // The volume of the sound played when fireing211 std::vector<WorldSound*> fireSounds_; // List of sounds used by the weapon mode. Because multiple sounds may overlap, we need mor than one WorldSound instance.212 std::string reloadSoundPath_; // The path of the sound played when reloading213 float reloadSoundVolume_; // The volume of the sound played when reloading209 std::string fireSoundPath_; // The path of the sound played when fireing 210 float fireSoundVolume_; // The volume of the sound played when fireing 211 std::vector<WorldSound*> fireSounds_; // List of sounds used by the weapon mode. Because multiple sounds may overlap, we need mor than one WorldSound instance. 212 std::string reloadSoundPath_; // The path of the sound played when reloading 213 float reloadSoundVolume_; // The volume of the sound played when reloading 214 214 WorldSound* reloadSound_; 215 215 };
Note: See TracChangeset
for help on using the changeset viewer.