added everything
This commit is contained in:
163
engine/gui/core/guiTSControl.cc
Executable file
163
engine/gui/core/guiTSControl.cc
Executable file
@@ -0,0 +1,163 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// Torque Game Engine
|
||||
// Copyright (C) GarageGames.com, Inc.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#include "gui/core/guiTSControl.h"
|
||||
#include "console/consoleTypes.h"
|
||||
#include "sceneGraph/sceneLighting.h"
|
||||
#include "sceneGraph/sceneGraph.h"
|
||||
|
||||
IMPLEMENT_CONOBJECT(GuiTSCtrl);
|
||||
|
||||
U32 GuiTSCtrl::smFrameCount = 0;
|
||||
|
||||
GuiTSCtrl::GuiTSCtrl()
|
||||
{
|
||||
mApplyFilterToChildren = true;
|
||||
|
||||
mCameraZRot = 0;
|
||||
mForceFOV = 0;
|
||||
|
||||
for(U32 i = 0; i < 16; i++)
|
||||
{
|
||||
mSaveModelview[i] = 0;
|
||||
mSaveProjection[i] = 0;
|
||||
}
|
||||
mSaveModelview[0] = 1;
|
||||
mSaveModelview[5] = 1;
|
||||
mSaveModelview[10] = 1;
|
||||
mSaveModelview[15] = 1;
|
||||
mSaveProjection[0] = 1;
|
||||
mSaveProjection[5] = 1;
|
||||
mSaveProjection[10] = 1;
|
||||
mSaveProjection[15] = 1;
|
||||
|
||||
mSaveViewport[0] = 0;
|
||||
mSaveViewport[1] = 0;
|
||||
mSaveViewport[2] = 2;
|
||||
mSaveViewport[3] = 2;
|
||||
|
||||
mLastCameraQuery.cameraMatrix.identity();
|
||||
}
|
||||
|
||||
void GuiTSCtrl::initPersistFields()
|
||||
{
|
||||
Parent::initPersistFields();
|
||||
|
||||
addField("applyFilterToChildren", TypeBool, Offset(mApplyFilterToChildren, GuiTSCtrl));
|
||||
addField("cameraZRot", TypeF32, Offset(mCameraZRot, GuiTSCtrl));
|
||||
addField("forceFOV", TypeF32, Offset(mForceFOV, GuiTSCtrl));
|
||||
}
|
||||
|
||||
void GuiTSCtrl::consoleInit()
|
||||
{
|
||||
Con::addVariable("$TSControl::frameCount", TypeS32, &smFrameCount);
|
||||
}
|
||||
|
||||
void GuiTSCtrl::onPreRender()
|
||||
{
|
||||
setUpdate();
|
||||
}
|
||||
|
||||
bool GuiTSCtrl::processCameraQuery(CameraQuery *)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void GuiTSCtrl::renderWorld(const RectI& /*updateRect*/)
|
||||
{
|
||||
}
|
||||
|
||||
bool GuiTSCtrl::project(const Point3F &pt, Point3F *dest)
|
||||
{
|
||||
GLdouble winx, winy, winz;
|
||||
GLint result = gluProject(pt.x, pt.y, pt.z,
|
||||
mSaveModelview, mSaveProjection, mSaveViewport,
|
||||
&winx, &winy, &winz);
|
||||
if(result == GL_FALSE || winz < 0 || winz > 1)
|
||||
return false;
|
||||
dest->set(winx, winy, winz);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool GuiTSCtrl::unproject(const Point3F &pt, Point3F *dest)
|
||||
{
|
||||
GLdouble objx, objy, objz;
|
||||
GLint result = gluUnProject(pt.x, pt.y, pt.z,
|
||||
mSaveModelview, mSaveProjection, mSaveViewport,
|
||||
&objx, &objy, &objz);
|
||||
if(result == GL_FALSE)
|
||||
return false;
|
||||
dest->set(objx, objy, objz);
|
||||
return true;
|
||||
}
|
||||
|
||||
void GuiTSCtrl::onRender(Point2I offset, const RectI &updateRect)
|
||||
{
|
||||
if(SceneLighting::isLighting())
|
||||
return;
|
||||
|
||||
CameraQuery newCam = mLastCameraQuery;
|
||||
|
||||
if(processCameraQuery(&newCam))
|
||||
mLastCameraQuery = newCam;
|
||||
|
||||
if(mForceFOV != 0)
|
||||
newCam.fov = mDegToRad(mForceFOV);
|
||||
|
||||
if(mCameraZRot)
|
||||
{
|
||||
MatrixF rotMat(EulerF(0, 0, mDegToRad(mCameraZRot)));
|
||||
newCam.cameraMatrix.mul(rotMat);
|
||||
}
|
||||
|
||||
// set up the camera and viewport stuff:
|
||||
F32 left, right, top, bottom;
|
||||
if (newCam.ortho)
|
||||
{
|
||||
left = -newCam.leftRight;
|
||||
right = newCam.leftRight;
|
||||
top = newCam.topBottom;
|
||||
bottom = -newCam.topBottom;
|
||||
}
|
||||
else
|
||||
{
|
||||
F32 wwidth = newCam.nearPlane * mTan(newCam.fov / 2);
|
||||
F32 wheight = F32(mBounds.extent.y) / F32(mBounds.extent.x) * wwidth;
|
||||
|
||||
F32 hscale = wwidth * 2 / F32(mBounds.extent.x);
|
||||
F32 vscale = wheight * 2 / F32(mBounds.extent.y);
|
||||
|
||||
left = (updateRect.point.x - offset.x) * hscale - wwidth;
|
||||
right = (updateRect.point.x + updateRect.extent.x - offset.x) * hscale - wwidth;
|
||||
top = wheight - vscale * (updateRect.point.y - offset.y);
|
||||
bottom = wheight - vscale * (updateRect.point.y + updateRect.extent.y - offset.y);
|
||||
}
|
||||
|
||||
dglSetViewport(updateRect);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
dglSetFrustum(left, right, bottom, top, newCam.nearPlane, (gClientSceneGraph ? (F64)gClientSceneGraph->getVisibleDistanceMod() : newCam.farPlane), newCam.ortho);
|
||||
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();
|
||||
|
||||
newCam.cameraMatrix.inverse();
|
||||
dglMultMatrix(&newCam.cameraMatrix);
|
||||
|
||||
glGetDoublev(GL_PROJECTION_MATRIX, mSaveProjection);
|
||||
glGetDoublev(GL_MODELVIEW_MATRIX, mSaveModelview);
|
||||
|
||||
mSaveViewport[0] = updateRect.point.x;
|
||||
mSaveViewport[1] = updateRect.point.y + updateRect.extent.y;
|
||||
mSaveViewport[2] = updateRect.extent.x;
|
||||
mSaveViewport[3] = -updateRect.extent.y;
|
||||
|
||||
renderWorld(updateRect);
|
||||
|
||||
if(mApplyFilterToChildren)
|
||||
renderChildControls(offset, updateRect);
|
||||
|
||||
smFrameCount++;
|
||||
}
|
||||
Reference in New Issue
Block a user