aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/newview/lltoolbrush.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'linden/indra/newview/lltoolbrush.cpp')
-rw-r--r--linden/indra/newview/lltoolbrush.cpp79
1 files changed, 69 insertions, 10 deletions
diff --git a/linden/indra/newview/lltoolbrush.cpp b/linden/indra/newview/lltoolbrush.cpp
index 89cb0b6..0869cf3 100644
--- a/linden/indra/newview/lltoolbrush.cpp
+++ b/linden/indra/newview/lltoolbrush.cpp
@@ -89,7 +89,7 @@ const LLColor4 OVERLAY_COLOR(1.0f, 1.0f, 1.0f, 1.0f);
89 89
90// constructor 90// constructor
91LLToolBrushLand::LLToolBrushLand() 91LLToolBrushLand::LLToolBrushLand()
92: LLTool("Land"), 92: LLTool(std::string("Land")),
93 mStartingZ( 0.0f ), 93 mStartingZ( 0.0f ),
94 mMouseX( 0 ), 94 mMouseX( 0 ),
95 mMouseY(0), 95 mMouseY(0),
@@ -154,7 +154,7 @@ void LLToolBrushLand::modifyLandAtPointGlobal(const LLVector3d &pos_global,
154 regionp->forceUpdate(); 154 regionp->forceUpdate();
155 155
156 // tell the simulator what we've done 156 // tell the simulator what we've done
157 F32 seconds = 1.0f / gFPSClamped; 157 F32 seconds = (1.0f / gFPSClamped) * gSavedSettings.getF32("LandBrushForce");
158 F32 x_pos = (F32)pos_region.mV[VX]; 158 F32 x_pos = (F32)pos_region.mV[VX];
159 F32 y_pos = (F32)pos_region.mV[VY]; 159 F32 y_pos = (F32)pos_region.mV[VY];
160 U8 brush_size = (U8)mBrushIndex; 160 U8 brush_size = (U8)mBrushIndex;
@@ -242,7 +242,7 @@ void LLToolBrushLand::modifyLandInSelectionGlobal()
242 242
243 min_region.clamp(0.f, regionp->getWidth()); 243 min_region.clamp(0.f, regionp->getWidth());
244 max_region.clamp(0.f, regionp->getWidth()); 244 max_region.clamp(0.f, regionp->getWidth());
245 F32 seconds = 1.0f; 245 F32 seconds = gSavedSettings.getF32("LandBrushForce");
246 246
247 LLSurface &land = regionp->getLand(); 247 LLSurface &land = regionp->getLand();
248 char action = E_LAND_LEVEL; 248 char action = E_LAND_LEVEL;
@@ -251,21 +251,23 @@ void LLToolBrushLand::modifyLandInSelectionGlobal()
251 case 0: 251 case 0:
252 // // average toward mStartingZ 252 // // average toward mStartingZ
253 action = E_LAND_LEVEL; 253 action = E_LAND_LEVEL;
254 seconds = 1.f; 254 seconds *= 0.25f;
255 break; 255 break;
256 case 1: 256 case 1:
257 action = E_LAND_RAISE; 257 action = E_LAND_RAISE;
258 seconds *= 0.25f;
258 break; 259 break;
259 case 2: 260 case 2:
260 action = E_LAND_LOWER; 261 action = E_LAND_LOWER;
262 seconds *= 0.25f;
261 break; 263 break;
262 case 3: 264 case 3:
263 action = E_LAND_SMOOTH; 265 action = E_LAND_SMOOTH;
264 seconds = 10.f; 266 seconds *= 5.0f;
265 break; 267 break;
266 case 4: 268 case 4:
267 action = E_LAND_NOISE; 269 action = E_LAND_NOISE;
268 seconds = 0.5f; 270 seconds *= 0.5f;
269 break; 271 break;
270 case 5: 272 case 5:
271 action = E_LAND_REVERT; 273 action = E_LAND_REVERT;
@@ -464,6 +466,27 @@ void LLToolBrushLand::render()
464 } 466 }
465} 467}
466 468
469/*
470 * Draw vertical lines from each vertex straight up in world space
471 * with lengths indicating the current "strength" slider.
472 * Decorate the tops and bottoms of the lines like this:
473 *
474 * Raise Revert
475 * /|\ ___
476 * | |
477 * | |
478 *
479 * Rough Smooth
480 * /|\ ___
481 * | |
482 * | |
483 * \|/..........._|_
484 *
485 * Lower Flatten
486 * | |
487 * | |
488 * \|/..........._|_
489 */
467void LLToolBrushLand::renderOverlay(LLSurface& land, const LLVector3& pos_region, 490void LLToolBrushLand::renderOverlay(LLSurface& land, const LLVector3& pos_region,
468 const LLVector3& pos_world) 491 const LLVector3& pos_world)
469{ 492{
@@ -477,19 +500,55 @@ void LLToolBrushLand::renderOverlay(LLSurface& land, const LLVector3& pos_region
477 S32 i = (S32) pos_region.mV[VX]; 500 S32 i = (S32) pos_region.mV[VX];
478 S32 j = (S32) pos_region.mV[VY]; 501 S32 j = (S32) pos_region.mV[VY];
479 S32 half_edge = llfloor(LAND_BRUSH_SIZE[mBrushIndex]); 502 S32 half_edge = llfloor(LAND_BRUSH_SIZE[mBrushIndex]);
503 S32 radioAction = gSavedSettings.getS32("RadioLandBrushAction");
504 F32 force = gSavedSettings.getF32("LandBrushForce"); // .1 to 100?
480 505
481 gGL.begin(LLVertexBuffer::POINTS); 506 gGL.begin(LLVertexBuffer::LINES);
482 for(S32 di = -half_edge; di <= half_edge; di++) 507 for(S32 di = -half_edge; di <= half_edge; di++)
483 { 508 {
484 if((i+di) < 0 || (i+di) >= (S32)land.mGridsPerEdge) continue; 509 if((i+di) < 0 || (i+di) >= (S32)land.mGridsPerEdge) continue;
485 for(S32 dj = -half_edge; dj <= half_edge; dj++) 510 for(S32 dj = -half_edge; dj <= half_edge; dj++)
486 { 511 {
487 if( (j+dj) < 0 || (j+dj) >= (S32)land.mGridsPerEdge ) continue; 512 if( (j+dj) < 0 || (j+dj) >= (S32)land.mGridsPerEdge ) continue;
488 gGL.vertex3f(pos_world.mV[VX] + di, pos_world.mV[VY] + dj, 513 const F32
489 land.getZ((i+di)+(j+dj)*land.mGridsPerEdge)); 514 wx = pos_world.mV[VX] + di,
515 wy = pos_world.mV[VY] + dj,
516 wz = land.getZ((i+di)+(j+dj)*land.mGridsPerEdge),
517 norm_dist = sqrt((float)di*di + dj*dj) / half_edge,
518 force_scale = sqrt(2.f) - norm_dist, // 1 at center, 0 at corner
519 wz2 = wz + .2 + (.2 + force/100) * force_scale, // top vertex
520 tic = .075f; // arrowhead size
521 // vertical line
522 gGL.vertex3f(wx, wy, wz);
523 gGL.vertex3f(wx, wy, wz2);
524 if(radioAction == E_LAND_RAISE || radioAction == E_LAND_NOISE) // up arrow
525 {
526 gGL.vertex3f(wx, wy, wz2);
527 gGL.vertex3f(wx+tic, wy, wz2-tic);
528 gGL.vertex3f(wx, wy, wz2);
529 gGL.vertex3f(wx-tic, wy, wz2-tic);
530 }
531 if(radioAction == E_LAND_LOWER || radioAction == E_LAND_NOISE) // down arrow
532 {
533 gGL.vertex3f(wx, wy, wz);
534 gGL.vertex3f(wx+tic, wy, wz+tic);
535 gGL.vertex3f(wx, wy, wz);
536 gGL.vertex3f(wx-tic, wy, wz+tic);
537 }
538 if(radioAction == E_LAND_REVERT || radioAction == E_LAND_SMOOTH) // flat top
539 {
540 gGL.vertex3f(wx-tic, wy, wz2);
541 gGL.vertex3f(wx+tic, wy, wz2);
542 }
543 if(radioAction == E_LAND_LEVEL || radioAction == E_LAND_SMOOTH) // flat bottom
544 {
545 gGL.vertex3f(wx-tic, wy, wz);
546 gGL.vertex3f(wx+tic, wy, wz);
547 }
490 } 548 }
491 } 549 }
492 gGL.end(); 550 gGL.end();
551
493 glPopMatrix(); 552 glPopMatrix();
494} 553}
495 554
@@ -589,7 +648,7 @@ void LLToolBrushLand::alertNoTerraform(LLViewerRegion* regionp)
589{ 648{
590 if (!regionp) return; 649 if (!regionp) return;
591 650
592 LLStringBase<char>::format_map_t args; 651 LLStringUtil::format_map_t args;
593 args["[REGION]"] = regionp->getName(); 652 args["[REGION]"] = regionp->getName();
594 gViewerWindow->alertXml("RegionNoTerraforming", args); 653 gViewerWindow->alertXml("RegionNoTerraforming", args);
595 654