[Orxonox-commit 7691] r12284 - in code/branches/Boxhead_FS19: data/levels src/modules/weapons/projectiles src/modules/weapons/weaponmodes
cwaupoti at orxonox.net
cwaupoti at orxonox.net
Thu Apr 4 17:13:43 CEST 2019
Author: cwaupoti
Date: 2019-04-04 17:13:42 +0200 (Thu, 04 Apr 2019)
New Revision: 12284
Modified:
code/branches/Boxhead_FS19/data/levels/Hover.oxw
code/branches/Boxhead_FS19/src/modules/weapons/projectiles/HoverGunProjectile.cc
code/branches/Boxhead_FS19/src/modules/weapons/projectiles/HoverGunProjectile.h
code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/HoverGun.cc
code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/HoverGun.h
code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/IceGun.cc
code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/LightningGun.cc
Log:
added working HoverGun
Modified: code/branches/Boxhead_FS19/data/levels/Hover.oxw
===================================================================
--- code/branches/Boxhead_FS19/data/levels/Hover.oxw 2019-04-04 14:39:42 UTC (rev 12283)
+++ code/branches/Boxhead_FS19/data/levels/Hover.oxw 2019-04-04 15:13:42 UTC (rev 12284)
@@ -12,18 +12,10 @@
?>
<?lua
- include("templates/spaceshipGhost.oxt")
include("templates/spaceshipHover.oxt")
include("overlays/HoverHUD.oxo")
?>
-
-
-
-
-
-
-
<?lua
include("stats.oxo")
include("HUDTemplates3.oxo")
@@ -32,23 +24,6 @@
?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
<?lua
MAZE_NUM_CELLS = 10
MAZE_CELL_SIZE = 100
@@ -132,4 +107,3 @@
</Scene>
</Level>
-
Modified: code/branches/Boxhead_FS19/src/modules/weapons/projectiles/HoverGunProjectile.cc
===================================================================
--- code/branches/Boxhead_FS19/src/modules/weapons/projectiles/HoverGunProjectile.cc 2019-04-04 14:39:42 UTC (rev 12283)
+++ code/branches/Boxhead_FS19/src/modules/weapons/projectiles/HoverGunProjectile.cc 2019-04-04 15:13:42 UTC (rev 12284)
@@ -20,9 +20,9 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Author:
- * Joel Smely
+ * Fabian 'x3n' Landau
* Co-authors:
- * ...
+ * simonmie
*
*/
@@ -33,55 +33,60 @@
#include "HoverGunProjectile.h"
+#include "core/config/ConfigValueIncludes.h"
#include "core/CoreIncludes.h"
+#include "core/GameMode.h"
#include "core/command/Executor.h"
-#include "util/Convert.h"
+#include "worldentities/pawns/Pawn.h"
+
namespace orxonox
{
RegisterClass(HoverGunProjectile);
- HoverGunProjectile::HoverGunProjectile(Context* context) : BillboardProjectile(context)
+ HoverGunProjectile::HoverGunProjectile(Context* context) : MovableEntity(context), BasicProjectile()
{
RegisterObject(HoverGunProjectile);
- this->textureIndex_ = 1;
- this->setMass(0.1f);
- this->setCollisionType(CollisionType::Dynamic);
- this->maxTextureIndex_ = 8;
- this->textureTimer_.setTimer(0.01f, true, createExecutor(createFunctor(&HoverGunProjectile::changeTexture, this)));
+ this->setConfigValues();
- registerVariables();
+ // Get notification about collisions
+ if (GameMode::isMaster())
+ {
+ this->setMass(0.0000000001f);
+ this->enableCollisionCallback();
+ this->setCollisionResponse(false);
+ this->setCollisionType(CollisionType::Dynamic);
+
+ // Create a sphere collision shape and attach it to the projectile.
+ collisionShape_ = new SphereCollisionShape(this->getContext());
+ setCollisionShapeRadius(2.0f);
+ this->attachCollisionShape(collisionShape_);
+
+ this->destroyTimer_.setTimer(this->lifetime_, false, createExecutor(createFunctor(&BasicProjectile::destroyObject, this)));
+ }
}
- void HoverGunProjectile::registerVariables()
+ HoverGunProjectile::~HoverGunProjectile()
{
- registerVariable(this->materialBase_);
}
- /**
- @brief
- Set the material.
- @param material
- The name of the material. Material names with 1 to 8 appended must exist.
- */
- void HoverGunProjectile::setMaterial(const std::string& material)
+ void HoverGunProjectile::setConfigValues()
{
- this->materialBase_ = material;
+ SetConfigValue(lifetime_, 4.0f).description("The time in seconds a projectile stays alive");
+ }
- BillboardProjectile::setMaterial(material + multi_cast<std::string>(this->textureIndex_));
+
+ bool HoverGunProjectile::collidesAgainst(WorldEntity* otherObject, const btCollisionShape* cs, btManifoldPoint& contactPoint)
+ {
+ return this->processCollision(otherObject, contactPoint, cs);
}
- /**
- @brief
- Change the texture.
- */
- void HoverGunProjectile::changeTexture()
+ void HoverGunProjectile::setCollisionShapeRadius(float radius)
{
- this->textureIndex_++;
- if (this->textureIndex_ > this->maxTextureIndex_)
- this->textureIndex_ = 1;
-
- this->setMaterial(this->materialBase_);
+ if (collisionShape_ != nullptr && radius > 0)
+ {
+ collisionShape_->setRadius(radius);
+ }
}
}
Modified: code/branches/Boxhead_FS19/src/modules/weapons/projectiles/HoverGunProjectile.h
===================================================================
--- code/branches/Boxhead_FS19/src/modules/weapons/projectiles/HoverGunProjectile.h 2019-04-04 14:39:42 UTC (rev 12283)
+++ code/branches/Boxhead_FS19/src/modules/weapons/projectiles/HoverGunProjectile.h 2019-04-04 15:13:42 UTC (rev 12284)
@@ -20,9 +20,9 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Author:
- * Joel Smely
+ * Fabian 'x3n' Landau
* Co-authors:
- * ...
+ * simonmie
*
*/
@@ -36,71 +36,44 @@
#include "weapons/WeaponsPrereqs.h"
-#include <string>
#include "tools/Timer.h"
-#include "BillboardProjectile.h"
+#include "worldentities/MovableEntity.h"
+#include "objects/collisionshapes/SphereCollisionShape.h"
+#include "BasicProjectile.h"
+
namespace orxonox
{
/**
@brief
- The HoverGunProjectile is a projectile that is represented by a looped series of billboards.
-
+ Represents all 'standard' projectiles.
+
@author
- Joel Smely
+ Fabian 'x3n' Landau
+ @author
+ Simon Miescher
@ingroup WeaponsProjectiles
*/
- class _WeaponsExport HoverGunProjectile : public BillboardProjectile
+ class _WeaponsExport HoverGunProjectile : public MovableEntity, public BasicProjectile
{
public:
HoverGunProjectile(Context* context);
- virtual ~HoverGunProjectile() {}
+ virtual ~HoverGunProjectile();
- virtual void setMaterial(const std::string& material) override;
+ void setConfigValues();
-/**
- @file LightningGunProjectile.h
- @brief Definition of the LightningGunProjectile class.
-*/
+
+ virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* cs, btManifoldPoint& contactPoint) override;
-#ifndef _HoverGunProjectile_H__
-#define _HoverGunProjectile_H__
+ protected:
+ virtual void setCollisionShapeRadius(float radius);
+ float lifetime_; //!< The time the projectile exists.
-#include "weapons/WeaponsPrereqs.h"
-
-#include <string>
-#include "tools/Timer.h"
-#include "BillboardProjectile.h"
-
-namespace orxonox
-{
-
- /**
- @brief
- The LightningGunProjectile is a projectile that is represented by a looped series of billboards.
-
- @author
- Joel Smely
- @ingroup WeaponsProjectiles
- */
- class _WeaponsExport HoverGunProjectile : public BillboardProjectile
- {
- public:
- HoverGunProjectile(Context* context);
- virtual ~HoverGunProjectile() {}
-
- virtual void setMaterial(const std::string& material) override;
-
private:
- void registerVariables();
- void changeTexture();
-
- unsigned int textureIndex_; //!< The current index of the texture. (i.e. the index of the currently displayed texture)
- unsigned int maxTextureIndex_; //!< The maximal index.
- Timer textureTimer_; //!< A timer that loops and changes textures each time it expires.
- std::string materialBase_; //!< The base name of the material.
+ Timer destroyTimer_; //!< Timer to destroy the projectile after its lifetime has run out.
+ WeakPtr<SphereCollisionShape> collisionShape_; // The collision shape of the projectile.
};
}
-#endif /* _HoverGunProjectile_H__ */
+#endif /* _Projectile_H__ */
Modified: code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/HoverGun.cc
===================================================================
--- code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/HoverGun.cc 2019-04-04 14:39:42 UTC (rev 12283)
+++ code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/HoverGun.cc 2019-04-04 15:13:42 UTC (rev 12284)
@@ -20,7 +20,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Author:
- * Joel Smely
+ * Hagen Seifert
* Co-authors:
* simonmie
*
@@ -34,12 +34,18 @@
#include "HoverGun.h"
#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "core/command/Executor.h"
+
+#include "graphics/Model.h"
#include "weaponsystem/Weapon.h"
#include "weaponsystem/WeaponPack.h"
#include "weaponsystem/WeaponSystem.h"
+#include "worldentities/WorldEntity.h"
#include "worldentities/pawns/Pawn.h"
#include "weapons/projectiles/HoverGunProjectile.h"
+#include "weapons/MuzzleFlash.h"
namespace orxonox
{
@@ -49,14 +55,21 @@
{
RegisterObject(HoverGun);
- this->reloadTime_ = 1.0f;
- this->damage_ = 0.0f;
+ this->reloadTime_ = 0.25f;
+ this->damage_ = 0.0f; //default 15
this->speed_ = 750.0f;
+ this->delay_ = 0.0f;
+ this->setMunitionName("LaserMunition");
+ this->mesh_ = "laserbeam.mesh";
- this->setMunitionName("HoverMunition");
- this->setFireSound("sounds/Weapon_HoverGun.ogg");
- hudImageString_ = "Orxonox/WSHUD_WM_HoverGun";
+ this->delayTimer_.setTimer(this->delay_, false, createExecutor(createFunctor(&HoverGun::shot, this)));
+ this->delayTimer_.stopTimer();
+
+ this->setFireSound("sounds/Weapon_HsW01.ogg");
+ this->setReloadSound("sounds/Reload_HsW01.ogg", 0.5);
+
+ hudImageString_ = "Orxonox/WSHUD_WM_HsW01";
}
HoverGun::~HoverGun()
@@ -63,14 +76,48 @@
{
}
+ void HoverGun::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+ {
+ SUPER(HoverGun, XMLPort, xmlelement, mode);
+
+ XMLPortParam(HoverGun, "delay", setDelay, getDelay, xmlelement, mode);
+ XMLPortParam(HoverGun, "material", setMaterial, getMaterial, xmlelement, mode);
+ XMLPortParam(HoverGun, "projectileMesh", setMesh, getMesh, xmlelement, mode);
+ XMLPortParam(HoverGun, "sound", setSound, getSound, xmlelement, mode);
+ }
+
/**
@brief
- Fires the weapon. Creates a projectile and fires it.
+ Set the firing delay.
+ @param delay
+ The firing delay in seconds.
*/
+ void HoverGun::setDelay(float delay)
+ {
+ this->delay_ = delay;
+ this->delayTimer_.setInterval(this->delay_);
+ }
+
void HoverGun::fire()
{
+ this->delayTimer_.startTimer();
+ }
+
+ /**
+ @brief
+ Fires the weapon. Creates a projectile and fires it.
+ */
+ void HoverGun::shot()
+ {
+ assert( this->getWeapon() && this->getWeapon()->getWeaponPack() && this->getWeapon()->getWeaponPack()->getWeaponSystem() && this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn() );
+
+ // Create the projectile.
HoverGunProjectile* projectile = new HoverGunProjectile(this->getContext());
- projectile->setMaterial("Flares/HoverBall_");
+ Model* model = new Model(projectile->getContext());
+ model->setMeshSource(mesh_);
+ model->setCastShadows(false);
+ projectile->attach(model);
+ model->setScale(5);
this->computeMuzzleParameters(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn()->getAimPosition());
projectile->setOrientation(this->getMuzzleOrientation());
@@ -81,5 +128,20 @@
projectile->setDamage(this->getDamage());
projectile->setShieldDamage(this->getShieldDamage());
projectile->setHealthDamage(this->getHealthDamage());
+
+ // Display the muzzle flash.
+ this->HoverGun::muzzleflash();
}
+
+ /**
+ @brief
+ Displays the muzzle flash.
+ */
+ void HoverGun::muzzleflash()
+ {
+ MuzzleFlash *muzzleFlash = new MuzzleFlash(this->getContext());
+ this->getWeapon()->attach(muzzleFlash);
+ muzzleFlash->setPosition(this->getMuzzleOffset());
+ muzzleFlash->setMaterial(this->material_);
+ }
}
Modified: code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/HoverGun.h
===================================================================
--- code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/HoverGun.h 2019-04-04 14:39:42 UTC (rev 12283)
+++ code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/HoverGun.h 2019-04-04 15:13:42 UTC (rev 12284)
@@ -20,7 +20,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Author:
- * Joel Smely
+ * Hagen Seifert
* Co-authors:
* ...
*
@@ -35,6 +35,8 @@
#define _HoverGun_H__
#include "weapons/WeaponsPrereqs.h"
+
+#include "tools/Timer.h"
#include "weaponsystem/WeaponMode.h"
namespace orxonox
@@ -42,9 +44,9 @@
/**
@brief
- A slow ball of lightning.
+ Shoots laser beams.
@author
- Joel Smely
+ Hagen Seifert
@ingroup WeaponsWeaponModes
*/
class _WeaponsExport HoverGun : public WeaponMode
@@ -54,9 +56,70 @@
virtual ~HoverGun();
virtual void fire() override;
+ virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
- private:
+ protected:
+ /**
+ @brief Set the mesh.
+ @param mesh The mesh name.
+ */
+ void setMesh(const std::string& mesh)
+ { this->mesh_ = mesh; }
+
+ /**
+ @brief Get the mesh.
+ @return Returns the mesh name.
+ */
+ const std::string& getMesh() const
+ { return this->mesh_; }
+
+ /**
+ @brief Set the sound.
+ @param sound The Sound name.
+ */
+ void setSound(const std::string& sound)
+ { this->sound_ = sound; }
+
+ /**
+ @brief Get the sound.
+ @return Returns the sound name.
+ */
+ const std::string& getSound() const
+ { return this->sound_; }
+
+ /**
+ @brief Set the material.
+ @param material The material name.
+ */
+ void setMaterial(const std::string& material)
+ { this->material_ = material; }
+ /**
+ @brief Get the material.
+ @return Returns the material name.
+ */
+ const std::string& getMaterial() const
+ { return this->material_; }
+
+ void setDelay(float delay);
+ /**
+ @brief Get the firing delay.
+ @return Returns the firing delay in seconds.
+ */
+ float getDelay() const
+ { return this->delay_; }
+
+ virtual void shot();
+ void muzzleflash();
+
+ std::string material_; //!< The material.
+ std::string mesh_; //!< The mesh.
+ std::string sound_; //!< The sound.
+
+
+
float speed_; //!< The speed of the fired projectile.
+ float delay_; //!< The firing delay.
+ Timer delayTimer_; //!< A timer to delay the firing.
};
}
Modified: code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/IceGun.cc
===================================================================
--- code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/IceGun.cc 2019-04-04 14:39:42 UTC (rev 12283)
+++ code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/IceGun.cc 2019-04-04 15:13:42 UTC (rev 12284)
@@ -48,6 +48,7 @@
IceGun::IceGun(Context* context) : WeaponMode(context)
{
+ orxout() << "DEBUG Fire HoverGun";
RegisterObject(IceGun);
// Default values
Modified: code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/LightningGun.cc
===================================================================
--- code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/LightningGun.cc 2019-04-04 14:39:42 UTC (rev 12283)
+++ code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/LightningGun.cc 2019-04-04 15:13:42 UTC (rev 12284)
@@ -47,6 +47,7 @@
LightningGun::LightningGun(Context* context) : WeaponMode(context)
{
+ orxout() << "DEBUG Fire HoverGun";
RegisterObject(LightningGun);
this->reloadTime_ = 1.0f;
@@ -69,6 +70,7 @@
*/
void LightningGun::fire()
{
+
LightningGunProjectile* projectile = new LightningGunProjectile(this->getContext());
projectile->setMaterial("Flares/LightningBall_");
More information about the Orxonox-commit
mailing list