diff options
author | Stijn Buys <ingar@osirion.org> | 2012-11-14 16:04:30 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2012-11-14 16:04:30 +0000 |
commit | 31c6d4c5bb5ff17fa926d7d65f8b9a93918fbd3f (patch) | |
tree | 8c2a203b771ffc8c18dbbbc66f9fc9e4d5249dae /src/game/base/ship.cc | |
parent | 5a3ac6c9f437290e88fa2ac2f194f91d4cb8a2a8 (diff) |
Added initial weapon projectiles.
Diffstat (limited to 'src/game/base/ship.cc')
-rw-r--r-- | src/game/base/ship.cc | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/game/base/ship.cc b/src/game/base/ship.cc index 22725e0..8be6e6c 100644 --- a/src/game/base/ship.cc +++ b/src/game/base/ship.cc @@ -13,6 +13,7 @@ #include "core/entity.h" #include "base/game.h" #include "base/ship.h" +#include "base/projectile.h" #include "math/functions.h" using math::degrees360f; @@ -77,6 +78,13 @@ Ship::Ship(core::Player *owner, const ShipModel *shipmodel) : core::EntityContro if (model()) { add_slots(); slots()->load(model()); + + for (core::Slots::iterator it = slots()->begin(); it != slots()->end(); it++) { + // default fire rate: 1 projectile / second + (*it)->set_interval(1000); + (*it)->set_lifespan(5000); + (*it)->set_speed(5.0f); + } } // menus for docked players @@ -756,6 +764,26 @@ void Ship::frame(const unsigned long elapsed) */ EntityControlable::frame(elapsed); + + if (model() && slots() && has_controlflag(core::EntityControlable::ControlFlagFire)) { + + const float modelscale = radius() / model()->radius(); + + for (core::Slots::iterator it = slots()->begin(); it != slots()->end(); it++) { + // create projectiles + if ((*it)->last_fired() + (*it)->interval() <= core::server()->timestamp()) { + (*it)->set_last_fired(core::server()->timestamp()); + Projectile * projectile = new Projectile((*it)->lifespan()); + projectile->set_zone(zone()); + projectile->set_axis(axis() * (*it)->axis()); + projectile->set_location(location() + (axis() * (*it)->location() * modelscale) + projectile->axis().forward() * projectile->radius()); + + projectile->reset(); + projectile->body()->setDamping(0.0f, 0.0f); + projectile->body()->setLinearVelocity(math::to_btVector3(projectile->axis().forward() * (*it)->speed())); + } + } + } } |