CGizmo: Make use of in-class initializers where applicable

This commit is contained in:
Lioncash 2020-06-28 03:37:26 -04:00
parent 1dfca12ad6
commit 832889f029
2 changed files with 59 additions and 86 deletions

View File

@ -11,34 +11,12 @@
#include <QScreen>
CGizmo::CGizmo()
: mSelectedAxes(EAxis::None)
, mTransformSpace(ETransformSpace::World)
, mGizmoSize(1.f)
, mCameraDist(0.f)
, mIsTransforming(false)
, mHasTransformed(false)
, mWrapOffset(0.f)
, mEnableCursorWrap(true)
, mPosition(CVector3f::Zero())
, mRotation(CQuaternion::Identity())
, mLocalRotation(CQuaternion::Identity())
, mScale(CVector3f::One())
, mFlipScaleX(false)
, mFlipScaleY(false)
, mFlipScaleZ(false)
, mDeltaTranslation(CVector3f::Zero())
, mDeltaRotation(CQuaternion::Identity())
, mDeltaScale(CVector3f::One())
, mTotalScale(CVector3f::One())
, mSetOffset(false)
{
LoadModels();
SetMode(EGizmoMode::Translate);
}
CGizmo::~CGizmo()
{
}
CGizmo::~CGizmo() = default;
void CGizmo::AddToRenderer(CRenderer *pRenderer, const SViewInfo&)
{
@ -521,22 +499,22 @@ void CGizmo::SetMode(EGizmoMode Mode)
switch (Mode)
{
case EGizmoMode::Translate:
mpCurrentParts = smTranslateModels;
mNumCurrentParts = CGIZMO_TRANSLATE_NUM;
mpCurrentParts = smTranslateModels.data();
mNumCurrentParts = smTranslateModels.size();
mDeltaRotation = CQuaternion::Identity();
mDeltaScale = CVector3f::One();
break;
case EGizmoMode::Rotate:
mpCurrentParts = smRotateModels;
mNumCurrentParts = CGIZMO_ROTATE_NUM;
mpCurrentParts = smRotateModels.data();
mNumCurrentParts = smRotateModels.size();
mDeltaTranslation = CVector3f::Zero();
mDeltaScale = CVector3f::One();
break;
case EGizmoMode::Scale:
mpCurrentParts = smScaleModels;
mNumCurrentParts = CGIZMO_SCALE_NUM;
mpCurrentParts = smScaleModels.data();
mNumCurrentParts = smScaleModels.size();
mDeltaTranslation = CVector3f::Zero();
mDeltaRotation = CQuaternion::Identity();
break;
@ -671,9 +649,3 @@ void CGizmo::WrapCursor()
mWrapOffset.Y += 2.f;
}
}
// ************ STATIC MEMBER INITIALIZATION ************
bool CGizmo::smModelsLoaded = false;
CGizmo::SModelPart CGizmo::smTranslateModels[CGIZMO_TRANSLATE_NUM];
CGizmo::SModelPart CGizmo::smRotateModels[CGIZMO_ROTATE_NUM];
CGizmo::SModelPart CGizmo::smScaleModels[CGIZMO_SCALE_NUM];

View File

@ -11,6 +11,7 @@
#include <Core/Render/IRenderable.h>
#include <Core/Resource/Model/CModel.h>
#include <Core/Resource/TResPtr.h>
#include <array>
#define CGIZMO_TRANSLATE_X 0
#define CGIZMO_TRANSLATE_Y 1
@ -49,74 +50,74 @@ public:
};
private:
EGizmoMode mMode;
FAxes mSelectedAxes;
ETransformSpace mTransformSpace;
EGizmoMode mMode{EGizmoMode::Off};
FAxes mSelectedAxes{EAxis::None};
ETransformSpace mTransformSpace{ETransformSpace::World};
CQuaternion mBillboardRotation;
float mGizmoSize;
float mCameraDist;
bool mIsTransforming;
bool mHasTransformed;
CVector2f mWrapOffset;
bool mEnableCursorWrap;
float mGizmoSize = 1.0f;
float mCameraDist = 0.0f;
bool mIsTransforming = false;
bool mHasTransformed = false;
CVector2f mWrapOffset{0.0f};
bool mEnableCursorWrap = true;
// Transform
CTransform4f mTransform;
CTransform4f mBillboardTransform;
CTransform4f mScaledTransform;
CVector3f mPosition;
CQuaternion mRotation;
CQuaternion mLocalRotation;
CVector3f mScale;
bool mFlipScaleX;
bool mFlipScaleY;
bool mFlipScaleZ;
CVector3f mPosition{CVector3f::Zero()};
CQuaternion mRotation{CQuaternion::Identity()};
CQuaternion mLocalRotation{CQuaternion::Identity()};
CVector3f mScale{CVector3f::One()};
bool mFlipScaleX = false;
bool mFlipScaleY = false;
bool mFlipScaleZ = false;
// Delta transform
CVector3f mDeltaTranslation;
CVector3f mDeltaTranslation{CVector3f::Zero()};
CVector3f mTotalTranslation;
CQuaternion mDeltaRotation;
CQuaternion mDeltaRotation{CQuaternion::Identity()};
CQuaternion mCurrentRotation;
CVector3f mTotalRotation; // This is a CVector3f because this value displays on the UI and a quat would cause rollover
CVector3f mDeltaScale;
CVector3f mTotalScale;
CVector3f mDeltaScale{CVector3f::One()};
CVector3f mTotalScale{CVector3f::One()};
// Transform helpers
CPlane mTranslatePlane;
CVector3f mTranslateOffset;
float mRotateOffset;
float mScaleOffset;
bool mSetOffset;
float mRotateOffset = 0.0f;
float mScaleOffset = 0.0f;
bool mSetOffset = false;
CVector3f mHitPoint;
CVector3f mMoveDir;
// Model parts
struct SModelPart
{
FAxes ModelAxes;
bool EnableRayCast;
bool IsBillboard;
FAxes ModelAxes{EAxis::None};
bool EnableRayCast = false;
bool IsBillboard = false;
TResPtr<CModel> pModel;
SModelPart() {}
SModelPart() = default;
SModelPart(FAxes Axes, bool RayCastOn, bool Billboard, TResPtr<CModel> _pModel) :
ModelAxes(Axes), EnableRayCast(RayCastOn), IsBillboard(Billboard), pModel(_pModel) {}
};
SModelPart *mpCurrentParts;
uint32 mNumCurrentParts;
SModelPart *mpCurrentParts = nullptr;
uint32 mNumCurrentParts = 0;
// Static
static bool smModelsLoaded;
static SModelPart smTranslateModels[CGIZMO_TRANSLATE_NUM];
static SModelPart smRotateModels[CGIZMO_ROTATE_NUM];
static SModelPart smScaleModels[CGIZMO_SCALE_NUM];
static inline bool smModelsLoaded = false;
static inline std::array<SModelPart, CGIZMO_TRANSLATE_NUM> smTranslateModels;
static inline std::array<SModelPart, CGIZMO_ROTATE_NUM> smRotateModels;
static inline std::array<SModelPart, CGIZMO_SCALE_NUM> smScaleModels;
public:
CGizmo();
~CGizmo();
~CGizmo() override;
void AddToRenderer(CRenderer *pRenderer, const SViewInfo& rkViewInfo);
void Draw(FRenderOptions Options, int ComponentIndex, ERenderCommand Command, const SViewInfo& rkViewInfo);
void AddToRenderer(CRenderer *pRenderer, const SViewInfo& rkViewInfo) override;
void Draw(FRenderOptions Options, int ComponentIndex, ERenderCommand Command, const SViewInfo& rkViewInfo) override;
void IncrementSize();
void DecrementSize();
@ -129,22 +130,22 @@ public:
void EndTransform();
// Accessors
inline EGizmoMode Mode() const { return mMode; }
inline ETransformSpace TransformSpace() const { return mTransformSpace; }
inline CVector3f Position() const { return mPosition; }
inline CVector3f DeltaTranslation() const { return mDeltaTranslation; }
inline CVector3f TotalTranslation() const { return mTotalTranslation; }
inline CQuaternion Rotation() const { return mRotation; }
inline CQuaternion DeltaRotation() const { return mDeltaRotation; }
inline CVector3f TotalRotation() const { return mTotalRotation; }
inline CVector3f Scale() const { return mScale; }
inline CVector3f DeltaScale() const { return mDeltaScale; }
inline CVector3f TotalScale() const { return mTotalScale; }
inline bool IsTransforming() const { return mIsTransforming; }
inline bool HasTransformed() const { return mHasTransformed; }
EGizmoMode Mode() const { return mMode; }
ETransformSpace TransformSpace() const { return mTransformSpace; }
CVector3f Position() const { return mPosition; }
CVector3f DeltaTranslation() const { return mDeltaTranslation; }
CVector3f TotalTranslation() const { return mTotalTranslation; }
CQuaternion Rotation() const { return mRotation; }
CQuaternion DeltaRotation() const { return mDeltaRotation; }
CVector3f TotalRotation() const { return mTotalRotation; }
CVector3f Scale() const { return mScale; }
CVector3f DeltaScale() const { return mDeltaScale; }
CVector3f TotalScale() const { return mTotalScale; }
bool IsTransforming() const { return mIsTransforming; }
bool HasTransformed() const { return mHasTransformed; }
inline void SetPosition(const CVector3f& rkPosition) { mPosition = rkPosition; }
inline void EnableCursorWrap(bool Enable) { mEnableCursorWrap = Enable; }
void SetPosition(const CVector3f& rkPosition) { mPosition = rkPosition; }
void EnableCursorWrap(bool Enable) { mEnableCursorWrap = Enable; }
void SetMode(EGizmoMode mode);
void SetTransformSpace(ETransformSpace Space);
void SetLocalRotation(const CQuaternion& rkOrientation);