diff options
author | Stijn Buys <ingar@osirion.org> | 2014-12-24 21:11:43 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2014-12-24 21:11:43 +0000 |
commit | 0c6499e6789db9686bcea3bb3b7f782c2f659eb7 (patch) | |
tree | 3ffe09ff82fa1f8ffd27c9b6c522993d854cd649 /src/game/base | |
parent | f330ae5ed3bd73c7b5b582cccde6cdd91d3c6e5b (diff) |
Prevent projectiles from hitting the enity that fired it, prevent projectiles from hitting each other.
Diffstat (limited to 'src/game/base')
-rw-r--r-- | src/game/base/npc.cc | 2 | ||||
-rw-r--r-- | src/game/base/platform.cc | 8 | ||||
-rw-r--r-- | src/game/base/ship.cc | 4 |
3 files changed, 4 insertions, 10 deletions
diff --git a/src/game/base/npc.cc b/src/game/base/npc.cc index f9a600e..d52c612 100644 --- a/src/game/base/npc.cc +++ b/src/game/base/npc.cc @@ -307,7 +307,7 @@ void NPC::frame(const unsigned long elapsed) if (zone() != carrier->zone()) { set_zone(carrier->zone()); - } + } if (carrier->state() == core::Entity::Destroyed) { explode(); diff --git a/src/game/base/platform.cc b/src/game/base/platform.cc index 1f81591..de7f987 100644 --- a/src/game/base/platform.cc +++ b/src/game/base/platform.cc @@ -109,18 +109,14 @@ void Platform::frame(const unsigned long elapsed) continue; } - // location of the slot in world coordinates - const math::Vector3f slot_location(location() + (axis() * slot->location())); - // find a target for this slot Ship *current_enemy = 0; float current_distance = 0.0f; - const float projectile_radius = core::PROJECTILE_RADIUS; + math::Vector3f projectile_location(location() + (axis() * slot->location())); + math::Vector3f projectile_direction; math::Axis projectile_axis(axis() * slot->axis()); - const math::Vector3f projectile_location(slot_location + projectile_axis.forward() * projectile_radius); - math::Vector3f projectile_direction; math::Vector3f aim_location; // we only need half the cone angle for the cosine calculation diff --git a/src/game/base/ship.cc b/src/game/base/ship.cc index dbf8b19..9b78dfa 100644 --- a/src/game/base/ship.cc +++ b/src/game/base/ship.cc @@ -1205,10 +1205,8 @@ void Ship::frame(const unsigned long elapsed) } else if ((weapon->projectile_interval() > 0) && (slot->last_fired() + weapon->projectile_interval() <= core::server()->timestamp())) { // aim - const float projectile_radius = core::PROJECTILE_RADIUS; // FIXME this should be defined somewhere - math::Axis projectile_axis(axis() * slot->axis()); - math::Vector3f projectile_location(location() + axis() * slot->location() + projectile_axis.forward() * projectile_radius); + math::Vector3f projectile_location(location() + axis() * slot->location()); math::Vector3f projectile_direction(target_aim - projectile_location); projectile_direction.normalize(); float cosa = math::dotproduct(projectile_direction, projectile_axis.forward()); |