summaryrefslogtreecommitdiff
path: root/indra/newview/lltracker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/lltracker.cpp')
-rwxr-xr-xindra/newview/lltracker.cpp116
1 files changed, 69 insertions, 47 deletions
diff --git a/indra/newview/lltracker.cpp b/indra/newview/lltracker.cpp
index 91a5777a74..f611d0503f 100755
--- a/indra/newview/lltracker.cpp
+++ b/indra/newview/lltracker.cpp
@@ -166,6 +166,7 @@ void LLTracker::render3D()
}
static LLUIColor map_track_color = LLUIColorTable::instance().getColor("MapTrackColor", LLColor4::white);
+ static LLUIColor map_track_color_under = LLUIColorTable::instance().getColor("MapTrackColorUnder", LLColor4::white);
// Arbitary location beacon
if( instance()->mIsTrackingLocation )
@@ -186,7 +187,7 @@ void LLTracker::render3D()
}
else
{
- renderBeacon( instance()->mTrackedPositionGlobal, map_track_color,
+ renderBeacon( instance()->mTrackedPositionGlobal, map_track_color, map_track_color_under,
instance()->mBeaconText, instance()->mTrackedLocationName );
}
}
@@ -228,7 +229,7 @@ void LLTracker::render3D()
// and back again
instance()->mHasReachedLandmark = FALSE;
}
- renderBeacon( instance()->mTrackedPositionGlobal, map_track_color,
+ renderBeacon( instance()->mTrackedPositionGlobal, map_track_color, map_track_color_under,
instance()->mBeaconText, instance()->mTrackedLandmarkName );
}
}
@@ -257,7 +258,7 @@ void LLTracker::render3D()
}
else
{
- renderBeacon( av_tracker.getGlobalPos(), map_track_color,
+ renderBeacon( av_tracker.getGlobalPos(), map_track_color, map_track_color_under,
instance()->mBeaconText, av_tracker.getName() );
}
}
@@ -411,7 +412,7 @@ const std::string& LLTracker::getTrackedLocationName()
return instance()->mTrackedLocationName;
}
-F32 pulse_func(F32 t, F32 z)
+F32 pulse_func(F32 t, F32 z, bool tracking_avatar, std::string direction)
{
if (!LLTracker::sCheesyBeacon)
{
@@ -419,7 +420,14 @@ F32 pulse_func(F32 t, F32 z)
}
t *= F_PI;
+ if ("DOWN" == direction)
+ {
+ z += t*64.f - 256.f;
+ }
+ else
+ {
z -= t*64.f - 256.f;
+ }
F32 a = cosf(z*F_PI/512.f)*10.0f;
a = llmax(a, 9.9f);
@@ -473,55 +481,30 @@ void draw_shockwave(F32 center_z, F32 t, S32 steps, LLColor4 color)
gGL.end();
}
-
-// static
-void LLTracker::renderBeacon(LLVector3d pos_global,
- const LLColor4& color,
- LLHUDText* hud_textp,
- const std::string& label )
+void LLTracker::drawBeacon(LLVector3 pos_agent, std::string direction, LLColor4 fogged_color, F32 dist)
{
- sCheesyBeacon = gSavedSettings.getBOOL("CheesyBeacon");
- LLVector3d to_vec = pos_global - gAgentCamera.getCameraPositionGlobal();
+ const U32 BEACON_VERTS = 256;
+ F32 step;
- F32 dist = (F32)to_vec.magVec();
- F32 color_frac = 1.f;
- if (dist > 0.99f * LLViewerCamera::getInstance()->getFar())
- {
- color_frac = 0.4f;
- // pos_global = gAgentCamera.getCameraPositionGlobal() + 0.99f*(LLViewerCamera::getInstance()->getFar()/dist)*to_vec;
- }
- else
- {
- color_frac = 1.f - 0.6f*(dist/LLViewerCamera::getInstance()->getFar());
- }
-
- LLColor4 fogged_color = color_frac * color + (1 - color_frac)*gSky.getFogColor();
-
- F32 FADE_DIST = 3.f;
- fogged_color.mV[3] = llmax(0.2f, llmin(0.5f,(dist-FADE_DIST)/FADE_DIST));
-
- LLVector3 pos_agent = gAgent.getPosAgentFromGlobal(pos_global);
-
- LLGLSTracker gls_tracker; // default+ CULL_FACE + LIGHTING + GL_BLEND + GL_ALPHA_TEST
- gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
- LLGLDisable cull_face(GL_CULL_FACE);
- LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
-
-
gGL.matrixMode(LLRender::MM_MODELVIEW);
gGL.pushMatrix();
+
+ if ("DOWN" == direction)
{
gGL.translatef(pos_agent.mV[0], pos_agent.mV[1], pos_agent.mV[2]);
-
draw_shockwave(1024.f, gRenderStartTime.getElapsedTimeF32(), 32, fogged_color);
+ step = (5020.0f - pos_agent.mV[2]) / BEACON_VERTS;
+ }
+ else
+ {
+ gGL.translatef(pos_agent.mV[0], pos_agent.mV[1], 0);
+ step = pos_agent.mV[2] / BEACON_VERTS;
+ }
gGL.color4fv(fogged_color.mV);
- const U32 BEACON_VERTS = 256;
- const F32 step = 1024.0f/BEACON_VERTS;
LLVector3 x_axis = LLViewerCamera::getInstance()->getLeftAxis();
F32 t = gRenderStartTime.getElapsedTimeF32();
- F32 dr = dist/LLViewerCamera::getInstance()->getFar();
for (U32 i = 0; i < BEACON_VERTS; i++)
{
@@ -531,8 +514,9 @@ void LLTracker::renderBeacon(LLVector3d pos_global,
F32 z = i * step;
F32 z_next = (i+1)*step;
- F32 a = pulse_func(t, z);
- F32 an = pulse_func(t, z_next);
+ bool tracking_avatar = getTrackingStatus() == TRACKING_AVATAR;
+ F32 a = pulse_func(t, z, tracking_avatar, direction);
+ F32 an = pulse_func(t, z_next, tracking_avatar, direction);
LLColor4 c_col = fogged_color + LLColor4(a,a,a,a);
LLColor4 col_next = fogged_color + LLColor4(an,an,an,an);
@@ -540,10 +524,10 @@ void LLTracker::renderBeacon(LLVector3d pos_global,
LLColor4 col_edge_next = fogged_color * LLColor4(an,an,an,0.0f);
a *= 2.f;
- a += 1.0f+dr;
+ a += 1.0f;
an *= 2.f;
- an += 1.0f+dr;
+ an += 1.0f;
gGL.begin(LLRender::TRIANGLE_STRIP);
gGL.color4fv(col_edge.mV);
@@ -560,11 +544,49 @@ void LLTracker::renderBeacon(LLVector3d pos_global,
gGL.vertex3f(x*a,y*a,z);
gGL.color4fv(col_edge_next.mV);
gGL.vertex3f(x*an,y*an,z_next);
+ gGL.end();
+ }
+ gGL.popMatrix();
+}
- gGL.end();
+// static
+void LLTracker::renderBeacon(LLVector3d pos_global,
+ const LLColor4& color,
+ const LLColor4& color_under,
+ LLHUDText* hud_textp,
+ const std::string& label )
+{
+ sCheesyBeacon = gSavedSettings.getBOOL("CheesyBeacon");
+ LLVector3d to_vec = pos_global - gAgentCamera.getCameraPositionGlobal();
+
+ F32 dist = (F32)to_vec.magVec();
+ F32 color_frac = 1.f;
+ if (dist > 0.99f * LLViewerCamera::getInstance()->getFar())
+ {
+ color_frac = 0.4f;
+ // pos_global = gAgentCamera.getCameraPositionGlobal() + 0.99f*(LLViewerCamera::getInstance()->getFar()/dist)*to_vec;
}
+ else
+ {
+ color_frac = 1.f - 0.6f*(dist/LLViewerCamera::getInstance()->getFar());
}
- gGL.popMatrix();
+
+ LLColor4 fogged_color = color_frac * color + (1 - color_frac)*gSky.getFogColor();
+ LLColor4 fogged_color_under = color_frac * color_under + (1 - color_frac) * gSky.getFogColor();
+
+ F32 FADE_DIST = 3.f;
+ fogged_color.mV[3] = llmax(0.2f, llmin(0.5f,(dist-FADE_DIST)/FADE_DIST));
+ fogged_color_under.mV[3] = llmax(0.2f, llmin(0.5f,(dist-FADE_DIST)/FADE_DIST));
+
+ LLVector3 pos_agent = gAgent.getPosAgentFromGlobal(pos_global);
+
+ LLGLSTracker gls_tracker; // default+ CULL_FACE + LIGHTING + GL_BLEND + GL_ALPHA_TEST
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+ LLGLDisable cull_face(GL_CULL_FACE);
+ LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
+
+ LLTracker::drawBeacon(pos_agent, "DOWN", fogged_color, dist);
+ LLTracker::drawBeacon(pos_agent, "UP", fogged_color_under, dist);
std::string text;
text = llformat( "%.0f m", to_vec.magVec());