mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-19 20:24:49 +00:00
Dev forest wind emitter improvement
So the problem is that when your inside the sphere it won't render so it might make someone think that it's not working right. So what I did was determine if the camera is inside the sphere. If the camera is inside the sphere, then I find the distance from the center of the sphere to the camera Round down and use that as the radius to draw the sphere. That way if someone zooms in or out, their screen is still showing the sphere.
This commit is contained in:
parent
79df1a1b3a
commit
c1203c1cea
|
|
@ -39,6 +39,8 @@
|
|||
#include "T3D/gameBase/processList.h"
|
||||
#include "console/engineAPI.h"
|
||||
|
||||
#include "T3D/gameBase/gameConnection.h"
|
||||
|
||||
ConsoleDocClass( ForestWindEmitter,
|
||||
"@brief Object responsible for simulating wind in a level.\n\n"
|
||||
|
||||
|
|
@ -513,9 +515,27 @@ void ForestWindEmitter::_renderEmitterInfo( ObjectRenderInst *ri, SceneRenderSta
|
|||
drawer->drawArrow( desc, pos, pos + (windVec * mWindStrength), ColorI( 0, 0, 255, 255 ) );//Point3F( -235.214, 219.589, 34.0991 ), Point3F( -218.814, 244.731, 37.5587 ), ColorI( 255, 255, 0, 255 ) );//
|
||||
drawer->drawArrow( desc, pos, pos + (mWind->getTarget() * mWindStrength ), ColorI( 255, 0, 0, 85 ) );
|
||||
|
||||
|
||||
S32 useRadius = mWindRadius;
|
||||
// Draw a 2D circle for the wind radius.
|
||||
if ( isRadialEmitter() )
|
||||
drawer->drawSphere( desc, mWindRadius, pos, ColorI( 255, 0, 0, 80 ) );
|
||||
{
|
||||
|
||||
//So the problem is that when your inside the sphere it won't render so it might make someone
|
||||
//think that it's not working right. So what I did was determine if the camera is inside the sphere.
|
||||
//If the camera is inside the sphere, then I find the distance from the center of the sphere to the camera
|
||||
//Round down and use that as the radius to draw the sphere.
|
||||
//That way if someone zooms in or out, their screen is still showing the sphere.
|
||||
GameConnection * gc = GameConnection::getConnectionToServer();
|
||||
GameBase* gb = gc->getCameraObject();
|
||||
if (gb)
|
||||
{
|
||||
Point3F camPos = gb->getPosition();
|
||||
if ( getPosition().isInsideSphere( camPos, mWindRadius ) )
|
||||
useRadius = getPosition().distanceTo(camPos);
|
||||
}
|
||||
drawer->drawSphere( desc, useRadius, pos, ColorI( 255, 0, 0, 80 ) );
|
||||
}
|
||||
}
|
||||
|
||||
F32 ForestWindEmitter::getStrength() const
|
||||
|
|
|
|||
|
|
@ -123,6 +123,22 @@ class Point3F
|
|||
void interpolate(const Point3F&, const Point3F&, F32);
|
||||
void zero();
|
||||
|
||||
F32 distanceTo(Point3F loc)
|
||||
{
|
||||
F32 xSqr = (this->x - loc.x) * (this->x - loc.x);
|
||||
F32 ySqr = (this->y - loc.y) * (this->y - loc.y);
|
||||
F32 zSqr = (this->z - loc.z) * (this->z - loc.z);
|
||||
|
||||
F32 mySqr = xSqr + ySqr + zSqr;
|
||||
|
||||
return sqrt(mySqr);
|
||||
}
|
||||
|
||||
bool isInsideSphere(Point3F pt, F32 Radius)
|
||||
{
|
||||
return ( (( this->x - pt.x) * ( this->x - pt.x) ) + (( this->y - pt.y) * ( this->y - pt.y) ) + (( this->z - pt.z) * ( this->z - pt.z) ) <= (Radius * Radius));
|
||||
}
|
||||
|
||||
/// Returns the smallest absolute value.
|
||||
F32 least() const;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue