diff options
author | Stijn Buys <ingar@osirion.org> | 2013-01-06 21:48:03 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2013-01-06 21:48:03 +0000 |
commit | c59fc7a85bf78ef249159b960e2ca29c8f0271ff (patch) | |
tree | 2e1d6cae4a7464819c15b7105d3035f75cdb11f9 /src | |
parent | d5b69e209b462577e048e3fb93c2e9fe3266f5f9 (diff) |
Set aiming distance to the entity currently hovering with the mouse.
Diffstat (limited to 'src')
-rw-r--r-- | src/client/targets.cc | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/client/targets.cc b/src/client/targets.cc index 5ec1abe..fcd7dc6 100644 --- a/src/client/targets.cc +++ b/src/client/targets.cc @@ -475,6 +475,8 @@ void frame() cursor_aim.assign(render::Camera::eye() + render::Camera::axis().forward() * (render::FRUSTUMFRONT + 0.001)); cursor_aim -= render::Camera::axis().left() * x; cursor_aim -= render::Camera::axis().up() * y; + + float aim_distance = core::range::fxdistance; //math::Vector3f center = render::Camera::eye() + (render::Camera::axis().forward() * (render::FRUSTUMFRONT + 0.001f)); for (core::Zone::Content::iterator it = zone->content().begin(); it != zone->content().end(); it++) { @@ -501,7 +503,7 @@ void frame() // calculate the distance from entity location to the line [eye - cursor] float d = math::Vector3f::length(math::crossproduct((cursor_aim - render::Camera::eye()) , (render::Camera::eye() - entity->location()))) / math::Vector3f::length(cursor_aim - render::Camera::eye()); - float r = entity->radius() * 0.5f; + float r = entity->radius(); if (ext_render(entity)->distance() > 512.0f) math::clamp(r, 8.0f, r); @@ -511,10 +513,11 @@ void frame() math::clamp(r, 2.0f, r); // if the cursor-beam hits the entity sphere - if (d < r) { + if ((d < r) && ((current_target == entity) || (d < r * 0.75f))) { float myz = math::distance(cursor_aim, entity->location()); if (z < 0 || myz < z) { current_hover = entity->id(); + aim_distance = math::distance(render::Camera::eye(), entity->location()); z = myz; } } @@ -524,7 +527,7 @@ void frame() } } - cursor_aim = render::Camera::eye() + (cursor_aim - render::Camera::eye()) * core::range::fxdistance / math::distance(render::Camera::eye(), cursor_aim); + cursor_aim = render::Camera::eye() + (cursor_aim - render::Camera::eye()) * aim_distance / math::distance(render::Camera::eye(), cursor_aim); if (!current_target) { current_target_id = 0; |