From 31c6d4c5bb5ff17fa926d7d65f8b9a93918fbd3f Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Wed, 14 Nov 2012 16:04:30 +0000 Subject: Added initial weapon projectiles. --- src/game/base/projectile.cc | 71 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/game/base/projectile.cc (limited to 'src/game/base/projectile.cc') diff --git a/src/game/base/projectile.cc b/src/game/base/projectile.cc new file mode 100644 index 0000000..992c55b --- /dev/null +++ b/src/game/base/projectile.cc @@ -0,0 +1,71 @@ +/* + base/projectile.cc + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 +*/ + +#include "base/projectile.h" +#include "base/game.h" +#include "core/gameserver.h" +#include "math/functions.h" +#include "sys/sys.h" + +namespace game +{ + +Projectile::Projectile(unsigned long lifespan) : EntityDynamic() +{ + entity_moduletypeid = projectile_enttype; + //set_name(""); + //set_label(""); + + //set_serverside(true); + set_flag(core::Entity::KeepAlive); + set_shape(core::Entity::Sphere); + set_radius(0.02f); + set_mass(radius()); + + //reset(); + + //const float damp = Game::g_damping->value(); + //body()->setDamping(0.0f, 0.0f); + + projectile_lifespan = lifespan; + projectile_timestamp = core::server()->timestamp(); +} + +Projectile::~Projectile() +{ + +} + +void Projectile::upkeep(const unsigned long timestamp) +{ + die(); +} + +void Projectile::collision(core::Entity *other) +{ + if (state() == core::Entity::Destroyed) { + return; + } + + set_state(core::Entity::Destroyed); + // this method is a bullet callback, we can not reset() here +} + +void Projectile::frame(const unsigned long elapsed) +{ + EntityDynamic::frame(elapsed); + + if (projectile_timestamp + projectile_lifespan < core::server()->timestamp()) { + set_state(core::Entity::Destroyed); + } + + if (state() == core::Entity::Destroyed) { + die(); + } +} + +} // namespace game + -- cgit v1.2.3