From 41fcb9f3915db02c9255dc62f03d6b4a55e5b6d3 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sat, 9 Nov 2013 00:29:58 +0000 Subject: Nudge ships on launch and cargopods on creation to prevent them from spawning inside other objects. --- src/core/entity.cc | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src/core/entity.cc') diff --git a/src/core/entity.cc b/src/core/entity.cc index 89e494a..4c4c35b 100644 --- a/src/core/entity.cc +++ b/src/core/entity.cc @@ -757,6 +757,33 @@ void EntityDynamic::set_state(int state) } } +void EntityDynamic::nudge() +{ + if (!zone()) { + return; + } + + for (Zone::Content::const_iterator it = zone()->content().begin(); it != zone()->content().end(); it++) { + const Entity *other = (*it); + if ((other->type() != Projectile) && (other != this)) { + // check distance + const float d = math::distance(location(), other->location()); + const float r = radius() + other->radius(); + + if ( d < r ) { + // nudge into randomize direction + math::Axis nudge_axis(axis()); + nudge_axis.change_direction(math::randomf(60.0f) - 30.0f); + nudge_axis.change_pitch(math::randomf(60.0f) - 30.0f); + set_location(location() + nudge_axis.forward() * (r - d + 0.001f)); + + // restart search + it = zone()->content().begin(); + } + } + } +} + void EntityDynamic::reset() { // no bullet physics on NonSolid entities -- cgit v1.2.3