lltoolgrab.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:4k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file lltoolgrab.h
  3.  * @brief LLToolGrab class header file
  4.  *
  5.  * $LicenseInfo:firstyear=2001&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2001-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_TOOLGRAB_H
  33. #define LL_TOOLGRAB_H
  34. #include "lltool.h"
  35. #include "v3math.h"
  36. #include "llquaternion.h"
  37. #include "llsingleton.h"
  38. #include "lluuid.h"
  39. #include "llviewerwindow.h" // for LLPickInfo
  40. class LLView;
  41. class LLTextBox;
  42. class LLViewerObject;
  43. class LLPickInfo;
  44. class LLToolGrab : public LLTool, public LLSingleton<LLToolGrab>
  45. {
  46. public:
  47. LLToolGrab( LLToolComposite* composite = NULL );
  48. ~LLToolGrab();
  49. /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
  50. /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
  51. /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask);
  52. /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
  53. /*virtual*/ void render(); // 3D elements
  54. /*virtual*/ void draw(); // 2D elements
  55. virtual void handleSelect();
  56. virtual void handleDeselect();
  57. virtual LLViewerObject* getEditingObject();
  58. virtual LLVector3d getEditingPointGlobal();
  59. virtual BOOL isEditing();
  60. virtual void stopEditing();
  61. virtual void onMouseCaptureLost();
  62. BOOL hasGrabOffset()  { return TRUE; } // HACK
  63. LLVector3 getGrabOffset(S32 x, S32 y); // HACK
  64. // Capture the mouse and start grabbing.
  65. BOOL handleObjectHit(const LLPickInfo& info);
  66. // Certain grabs should not highlight the "Build" toolbar button
  67. BOOL getHideBuildHighlight() { return mHideBuildHighlight; }
  68. static void pickCallback(const LLPickInfo& pick_info);
  69. private:
  70. LLVector3d getGrabPointGlobal();
  71. void startGrab();
  72. void stopGrab();
  73. void startSpin();
  74. void stopSpin();
  75. void handleHoverSpin(S32 x, S32 y, MASK mask);
  76. void handleHoverActive(S32 x, S32 y, MASK mask);
  77. void handleHoverNonPhysical(S32 x, S32 y, MASK mask);
  78. void handleHoverInactive(S32 x, S32 y, MASK mask);
  79. void handleHoverFailed(S32 x, S32 y, MASK mask);
  80. private:
  81. enum EGrabMode { GRAB_INACTIVE, GRAB_ACTIVE_CENTER, GRAB_NONPHYSICAL, GRAB_LOCKED, GRAB_NOOBJECT };
  82. EGrabMode mMode;
  83. BOOL mVerticalDragging;
  84. BOOL mHitLand;
  85. LLTimer mGrabTimer; // send simulator time between hover movements
  86. LLVector3 mGrabOffsetFromCenterInitial; // meters from CG of object
  87. LLVector3d mGrabHiddenOffsetFromCamera; // in cursor hidden drag, how far is grab offset from camera
  88. LLVector3d mDragStartPointGlobal; // projected into world
  89. LLVector3d mDragStartFromCamera; // drag start relative to camera
  90. LLPickInfo mGrabPick;
  91. S32 mLastMouseX;
  92. S32 mLastMouseY;
  93. S32 mAccumDeltaX; // since cursor hidden, how far have you moved?
  94. S32 mAccumDeltaY;
  95. BOOL mHasMoved; // has mouse moved off center at all?
  96. BOOL mOutsideSlop; // has mouse moved outside center 5 pixels?
  97. BOOL mDeselectedThisClick;
  98. S32             mLastFace;
  99. LLVector2       mLastUVCoords;
  100. LLVector2       mLastSTCoords;
  101. LLVector3       mLastIntersection;
  102. LLVector3       mLastNormal;
  103. LLVector3       mLastBinormal;
  104. LLVector3       mLastGrabPos;
  105. BOOL mSpinGrabbing;
  106. LLQuaternion mSpinRotation;
  107. BOOL mHideBuildHighlight;
  108. };
  109. extern BOOL gGrabBtnVertical;
  110. extern BOOL gGrabBtnSpin;
  111. extern LLTool* gGrabTransientTool;
  112. #endif  // LL_TOOLGRAB_H