gameTSCtrl.cpp
Engine/source/T3D/gameTSCtrl.cpp
Public Variables
Public Functions
ConsoleDocClass(GameTSCtrl , "@brief The <a href="/coding/file/x86unixmain_8cpp/#x86unixmain_8cpp_1a217dbf8b442f20279ea00b898af96f52">main</a> 3D viewport <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1a2732ab74fa0237854c2ba0f75f88a624">for</a> <a href="/coding/file/pointer_8h/#pointer_8h_1aeeddce917cf130d62c370b8f216026dd">a</a> Torque 3D <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">game.\n\n</a>" "@ingroup <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">Gui3D\n</a>" )
DefineEngineFunction(snapToggle , void , () , "@brief Prevents mouse movement from being <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">processed\n\n</a>" "In the source, whenever <a href="/coding/file/pointer_8h/#pointer_8h_1aeeddce917cf130d62c370b8f216026dd">a</a> mouse move event occurs " "<a href="/coding/class/classgametsctrl/#classgametsctrl_1a8de86aa4f1c36220e2dc1cf474caecdb">GameTSCtrl::onMouseMove</a>() is called. Whenever snapToggle() " "is called, it will flag <a href="/coding/file/pointer_8h/#pointer_8h_1aeeddce917cf130d62c370b8f216026dd">a</a> variable that can prevent this " "from happening:gSnapLine. This variable is not exposed <a href="/coding/file/cmdgram_8cpp/#cmdgram_8cpp_1a5bafda9519252aa2d0fd038153f77dca">to</a> " " script, so you need <a href="/coding/file/cmdgram_8cpp/#cmdgram_8cpp_1a5bafda9519252aa2d0fd038153f77dca">to</a> call this function <a href="/coding/file/cmdgram_8cpp/#cmdgram_8cpp_1a5bafda9519252aa2d0fd038153f77dca">to</a> trigger <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">it.\n\n</a>" " @<a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">tsexample\n</a>" "//Snapping is off by default, so we will <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">toggle\n</a>" "//it on <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">first:\n</a>" "PlayGui.snapToggle();\<a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">n\n</a>" "//Mouse movement should be <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">disabled\n</a>" "//Let 's turn it back <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">on\n</a>" "PlayGui.snapToggle();\<a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">n</a>" " @<a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">endtsexample\n\n</a>" " @ingroup GuiGame" )
Detailed Description
Public Variables
bool gSnapLine
Point3F lineTestEnd
Point3F lineTestIntersect
Point3F lineTestStart
Public Functions
ConsoleDocClass(GameTSCtrl , "@brief The <a href="/coding/file/x86unixmain_8cpp/#x86unixmain_8cpp_1a217dbf8b442f20279ea00b898af96f52">main</a> 3D viewport <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1a2732ab74fa0237854c2ba0f75f88a624">for</a> <a href="/coding/file/pointer_8h/#pointer_8h_1aeeddce917cf130d62c370b8f216026dd">a</a> Torque 3D <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">game.\n\n</a>" "@ingroup <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">Gui3D\n</a>" )
DefineEngineFunction(snapToggle , void , () , "@brief Prevents mouse movement from being <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">processed\n\n</a>" "In the source, whenever <a href="/coding/file/pointer_8h/#pointer_8h_1aeeddce917cf130d62c370b8f216026dd">a</a> mouse move event occurs " "<a href="/coding/class/classgametsctrl/#classgametsctrl_1a8de86aa4f1c36220e2dc1cf474caecdb">GameTSCtrl::onMouseMove</a>() is called. Whenever snapToggle() " "is called, it will flag <a href="/coding/file/pointer_8h/#pointer_8h_1aeeddce917cf130d62c370b8f216026dd">a</a> variable that can prevent this " "from happening:gSnapLine. This variable is not exposed <a href="/coding/file/cmdgram_8cpp/#cmdgram_8cpp_1a5bafda9519252aa2d0fd038153f77dca">to</a> " " script, so you need <a href="/coding/file/cmdgram_8cpp/#cmdgram_8cpp_1a5bafda9519252aa2d0fd038153f77dca">to</a> call this function <a href="/coding/file/cmdgram_8cpp/#cmdgram_8cpp_1a5bafda9519252aa2d0fd038153f77dca">to</a> trigger <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">it.\n\n</a>" " @<a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">tsexample\n</a>" "//Snapping is off by default, so we will <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">toggle\n</a>" "//it on <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">first:\n</a>" "PlayGui.snapToggle();\<a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">n\n</a>" "//Mouse movement should be <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">disabled\n</a>" "//Let 's turn it back <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">on\n</a>" "PlayGui.snapToggle();\<a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">n</a>" " @<a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">endtsexample\n\n</a>" " @ingroup GuiGame" )
IMPLEMENT_CONOBJECT(GameTSCtrl )
1 2//----------------------------------------------------------------------------- 3// Copyright (c) 2012 GarageGames, LLC 4// 5// Permission is hereby granted, free of charge, to any person obtaining a copy 6// of this software and associated documentation files (the "Software"), to 7// deal in the Software without restriction, including without limitation the 8// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 9// sell copies of the Software, and to permit persons to whom the Software is 10// furnished to do so, subject to the following conditions: 11// 12// The above copyright notice and this permission notice shall be included in 13// all copies or substantial portions of the Software. 14// 15// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21// IN THE SOFTWARE. 22//----------------------------------------------------------------------------- 23 24#include "T3D/gameTSCtrl.h" 25#include "console/consoleTypes.h" 26#include "T3D/gameBase/gameBase.h" 27#include "T3D/gameBase/gameConnection.h" 28#include "T3D/shapeBase.h" 29#include "T3D/gameFunctions.h" 30#include "console/engineAPI.h" 31 32//--------------------------------------------------------------------------- 33// Debug stuff: 34Point3F lineTestStart = Point3F(0, 0, 0); 35Point3F lineTestEnd = Point3F(0, 1000, 0); 36Point3F lineTestIntersect = Point3F(0, 0, 0); 37bool gSnapLine = false; 38 39//---------------------------------------------------------------------------- 40// Class: GameTSCtrl 41//---------------------------------------------------------------------------- 42IMPLEMENT_CONOBJECT(GameTSCtrl); 43 44// See Torque manual (.CHM) for more information 45ConsoleDocClass( GameTSCtrl, 46 "@brief The main 3D viewport for a Torque 3D game.\n\n" 47 "@ingroup Gui3D\n"); 48 49GameTSCtrl::GameTSCtrl() 50{ 51} 52 53//--------------------------------------------------------------------------- 54bool GameTSCtrl::onAdd() 55{ 56 if ( !Parent::onAdd() ) 57 return false; 58 59 return true; 60} 61 62//--------------------------------------------------------------------------- 63bool GameTSCtrl::processCameraQuery(CameraQuery *camq) 64{ 65 GameUpdateCameraFov(); 66 return GameProcessCameraQuery(camq); 67} 68 69//--------------------------------------------------------------------------- 70void GameTSCtrl::renderWorld(const RectI &updateRect) 71{ 72 GameRenderWorld(); 73} 74 75//--------------------------------------------------------------------------- 76void GameTSCtrl::makeScriptCall(const char *func, const GuiEvent &evt) const 77{ 78 // write screen position 79 char *sp = Con::getArgBuffer(32); 80 dSprintf(sp, 32, "%d %d", evt.mousePoint.x, evt.mousePoint.y); 81 82 // write world position 83 char *wp = Con::getArgBuffer(32); 84 Point3F camPos; 85 mLastCameraQuery.cameraMatrix.getColumn(3, &camPos); 86 dSprintf(wp, 32, "%g %g %g", camPos.x, camPos.y, camPos.z); 87 88 // write click vector 89 char *vec = Con::getArgBuffer(32); 90 Point3F fp(evt.mousePoint.x, evt.mousePoint.y, 1.0); 91 Point3F ray; 92 unproject(fp, &ray); 93 ray -= camPos; 94 ray.normalizeSafe(); 95 dSprintf(vec, 32, "%g %g %g", ray.x, ray.y, ray.z); 96 97 Con::executef( (SimObject*)this, func, sp, wp, vec ); 98} 99 100void GameTSCtrl::onMouseDown(const GuiEvent &evt) 101{ 102 Parent::onMouseDown(evt); 103 if( isMethod( "onMouseDown" ) ) 104 makeScriptCall( "onMouseDown", evt ); 105} 106 107void GameTSCtrl::onRightMouseDown(const GuiEvent &evt) 108{ 109 Parent::onRightMouseDown(evt); 110 if( isMethod( "onRightMouseDown" ) ) 111 makeScriptCall( "onRightMouseDown", evt ); 112} 113 114void GameTSCtrl::onMiddleMouseDown(const GuiEvent &evt) 115{ 116 Parent::onMiddleMouseDown(evt); 117 if( isMethod( "onMiddleMouseDown" ) ) 118 makeScriptCall( "onMiddleMouseDown", evt ); 119} 120 121void GameTSCtrl::onMouseUp(const GuiEvent &evt) 122{ 123 Parent::onMouseUp(evt); 124 if( isMethod( "onMouseUp" ) ) 125 makeScriptCall( "onMouseUp", evt ); 126} 127 128void GameTSCtrl::onRightMouseUp(const GuiEvent &evt) 129{ 130 Parent::onRightMouseUp(evt); 131 if( isMethod( "onRightMouseUp" ) ) 132 makeScriptCall( "onRightMouseUp", evt ); 133} 134 135void GameTSCtrl::onMiddleMouseUp(const GuiEvent &evt) 136{ 137 Parent::onMiddleMouseUp(evt); 138 if( isMethod( "onMiddleMouseUp" ) ) 139 makeScriptCall( "onMiddleMouseUp", evt ); 140} 141 142void GameTSCtrl::onMouseMove(const GuiEvent &evt) 143{ 144 if(gSnapLine) 145 return; 146 147 MatrixF mat; 148 Point3F vel; 149 if ( GameGetCameraTransform(&mat, &vel) ) 150 { 151 Point3F pos; 152 mat.getColumn(3,&pos); 153 Point3F screenPoint((F32)evt.mousePoint.x, (F32)evt.mousePoint.y, -1.0f); 154 Point3F worldPoint; 155 if (unproject(screenPoint, &worldPoint)) { 156 Point3F vec = worldPoint - pos; 157 lineTestStart = pos; 158 vec.normalizeSafe(); 159 lineTestEnd = pos + vec * 1000; 160 } 161 } 162} 163 164void GameTSCtrl::onRender(Point2I offset, const RectI &updateRect) 165{ 166 // check if should bother with a render 167 GameConnection * con = GameConnection::getConnectionToServer(); 168 bool skipRender = !con || (con->getWhiteOut() >= 1.f) || (con->getDamageFlash() >= 1.f) || (con->getBlackOut() >= 1.f); 169 170 if(!skipRender || true) 171 Parent::onRender(offset, updateRect); 172} 173 174//-------------------------------------------------------------------------- 175 176DefineEngineFunction(snapToggle, void, (),, 177 "@brief Prevents mouse movement from being processed\n\n" 178 179 "In the source, whenever a mouse move event occurs " 180 "GameTSCtrl::onMouseMove() is called. Whenever snapToggle() " 181 "is called, it will flag a variable that can prevent this " 182 "from happening: gSnapLine. This variable is not exposed to " 183 "script, so you need to call this function to trigger it.\n\n" 184 185 "@tsexample\n" 186 "// Snapping is off by default, so we will toggle\n" 187 "// it on first:\n" 188 "PlayGui.snapToggle();\n\n" 189 "// Mouse movement should be disabled\n" 190 "// Let's turn it back on\n" 191 "PlayGui.snapToggle();\n" 192 "@endtsexample\n\n" 193 194 "@ingroup GuiGame") 195{ 196 gSnapLine = !gSnapLine; 197} 198// 199//ConsoleFunction( snapToggle, void, 1, 1, "()" ) 200//{ 201// gSnapLine = !gSnapLine; 202//} 203