OpenBarnyard
 
Loading...
Searching...
No Matches
AGUI2MouseCursor Class Reference

#include <AGUI2MouseCursor.h>

Inheritance diagram for AGUI2MouseCursor:
AGUI2Rectangle AGUI2Element AGUI2ElementNode

Public Types

enum  Acceleration : TUINT32 { Acceleration_Off , Acceleration_Slow , Acceleration_Fast , Acceleration_NUMOF }
 
- Public Types inherited from AGUI2Element
using t_PostRender = void ( * )()
 

Public Member Functions

 AGUI2MouseCursor ()
 
TBOOL Create (const TCHAR *a_szPointerUpTexture, const TCHAR *a_szPointerDownTexture, TFLOAT a_fScalar)
 
void Update ()
 
void MoveCursor (TFLOAT a_fDeltaX, TFLOAT a_fDeltaY)
 
const Toshi::TVector2 & GetCursorCenter () const
 
const Toshi::TVector2 & GetCursorPos () const
 
- Public Member Functions inherited from AGUI2Rectangle
 AGUI2Rectangle ()
 
virtual void Render () override
 
void SetTextureSection (AGUI2TextureSection *a_pTexSection)
 Sets material and UVs from AGUI2TextureSection.
 
void Create (TFLOAT a_fWidth, TFLOAT a_fHeight)
 Initialises rectangle with it's width and height.
 
- Public Member Functions inherited from AGUI2Element
 AGUI2Element ()
 
virtual ~AGUI2Element ()=default
 
virtual void Tick (TFLOAT a_fDeltaTime)
 
virtual void PreRender ()
 
virtual void PostRender ()
 
virtual void GetDimensions (TFLOAT &a_rWidth, TFLOAT &a_rHeight)
 
virtual TFLOAT GetWidth ()
 
virtual TFLOAT GetHeight ()
 
virtual void SetWidth (TFLOAT a_fWidth)
 
virtual void SetHeight (TFLOAT a_fHeight)
 
virtual void SetDimensions (TFLOAT a_fWidth, TFLOAT a_fHeight)
 
virtual void GetMins (TFLOAT &a_fX, TFLOAT &a_fY)
 
virtual void GetMaxs (TFLOAT &a_fX, TFLOAT &a_fY)
 
virtual void SetColour (TUINT32 a_uiColour)
 
virtual void SetAlpha (TFLOAT a_fAlpha)
 
virtual void SetShadowAlpha (TFLOAT a_fAlpha)
 
virtual void SetFocus (TBOOL a_bFocused)
 
virtual TBOOL IsPointInside (TFLOAT a_fX, TFLOAT a_fY)
 
void AnchorPos (TFLOAT &a_rX, TFLOAT &a_rY, TFLOAT a_fWidth, TFLOAT a_fHeight)
 
void PivotPos (TFLOAT &a_rX, TFLOAT &a_rY, TFLOAT a_fWidth, TFLOAT a_fHeight)
 
void GetScreenTransform (AGUI2Transform &a_rOutTransform)
 
void GetInvScreenTransform (AGUI2Transform &a_rOutTransform)
 
void Show ()
 
void Hide ()
 
void SetInFront ()
 
void SetRenderBeforeChildren ()
 
TBOOL HasFlags (TUINT32 a_uiFlags) const
 
TBOOL IsVisible () const
 
TBOOL IsFocused () const
 
TBOOL ShouldRenderBeforeChildren ()
 
TBOOL IsInFront () const
 
TFLOAT GetAlpha () const
 
void AddChildTail (AGUI2Element &a_rElement)
 
void AddChildHead (AGUI2Element &a_rElement)
 
void SetTranslation (TFLOAT a_fX, TFLOAT a_fY)
 
void SetTranslation (const Toshi::TVector2 &a_rTranslation)
 
void SetTransform (TFLOAT a_fX, TFLOAT a_fY, float a_fRotAngle=0.0f)
 
void SetAnchor (AGUI2ATTACHMENT a_eAnchor)
 
void SetPivot (AGUI2ATTACHMENT a_ePivot)
 
void SetAttachment (AGUI2ATTACHMENT a_eAnchor, AGUI2ATTACHMENT a_ePivot)
 
t_PostRender SetPostRenderCallback (t_PostRender a_cbNewCallback)
 
AGUI2TransformGetTransform ()
 
AGUI2ElementChildBegin () const
 
AGUI2ElementChildRBegin () const
 
AGUI2ElementGetNextChild (AGUI2Element *a_pCurrentChild)
 
AGUI2ElementGetPrevChild (AGUI2Element *a_pCurrentChild)
 
void RemoveSelf ()
 
void LinkChildBefore (AGUI2Element &a_rNewChildren, AGUI2Element &a_rInsertAfter)
 
- Public Member Functions inherited from AGUI2ElementNode
 AGUI2ElementNode ()
 
virtual ~AGUI2ElementNode ()
 
void Unlink ()
 
void LinkAfter (AGUI2ElementNode &a_rNode)
 
void LinkBefore (AGUI2ElementNode &a_rNode)
 
TBOOL IsLinked () const
 
AGUI2ElementNodeGetNext () const
 
AGUI2ElementNodeGetPrev () const
 

Additional Inherited Members

- Public Attributes inherited from AGUI2ElementNode
friend AGUI2Element
 
- Static Public Attributes inherited from AGUI2Element
static TUINT32 s_uiVisibilityMask = 0xFFFFFFFF
 
- Protected Attributes inherited from AGUI2Rectangle
AGUI2Materialm_pMaterial
 
Toshi::TVector4 m_UV1
 
Toshi::TVector4 m_UV2
 
- Protected Attributes inherited from AGUI2Element
AGUI2Elementm_pParent
 
AGUI2Transform m_oTransform
 
AGUI2ElementNode m_Children
 
AGUI2ATTACHMENT m_eAnchor
 
AGUI2ATTACHMENT m_ePivot
 
TFLOAT m_fWidth
 
TFLOAT m_fHeight
 
TUINT32 m_uiColour
 
TUINT32 m_eFlags
 
t_PostRender m_cbPostRender
 
TUINT32 m_uiVisibilityMask
 
- Protected Attributes inherited from AGUI2ElementNode
AGUI2ElementNodem_pNext
 
AGUI2ElementNodem_pPrev
 

Detailed Description

Definition at line 7 of file AGUI2MouseCursor.h.

Member Enumeration Documentation

◆ Acceleration

Enumerator
Acceleration_Off 
Acceleration_Slow 
Acceleration_Fast 
Acceleration_NUMOF 

Definition at line 10 of file AGUI2MouseCursor.h.

Constructor & Destructor Documentation

◆ AGUI2MouseCursor()

AGUI2MouseCursor::AGUI2MouseCursor ( )

Definition at line 14 of file AGUI2MouseCursor.cpp.

15{
16 m_MousePos.x = 0.0f;
17 m_MousePos.y = 0.0f;
18 m_CursorCenter = { 0.0f, 0.0f };
19 m_pMouseDevice = TNULL;
20 m_pPointerUpSection = TNULL;
21 m_pPointerDownSection = TNULL;
22 m_fCursorAccelerations[ Acceleration_Off ] = 1.0f;
23 m_fCursorAccelerations[ Acceleration_Slow ] = 10.0f;
24 m_fCursorAccelerations[ Acceleration_Fast ] = 20.0f;
25 m_eAccelerationType = Acceleration_Fast;
26 m_RadialFieldPos = TVector2::VEC_ZERO;
27 m_fRadialRadius = -1.0f;
28}
#define TNULL
Definition Typedefs.h:23
constinit static const TVector2 VEC_ZERO
Definition TVector2.h:132

Member Function Documentation

◆ Create()

TBOOL AGUI2MouseCursor::Create ( const TCHAR * a_szPointerUpTexture,
const TCHAR * a_szPointerDownTexture,
TFLOAT a_fScalar )

Definition at line 30 of file AGUI2MouseCursor.cpp.

31{
32 m_pMouseDevice = TInputInterface::GetSingleton()->GetDeviceByIndex<TInputDeviceMouse>( 0 );
33
34 if ( m_pMouseDevice == TNULL )
35 {
36 return TFALSE;
37 }
38
39 m_pPointerUpSection = AGUI2TextureSectionManager::GetTextureSection( a_szPointerUpTexture );
40 TFLOAT fCursorWidth = m_pPointerUpSection->GetWidth();
41 TFLOAT fCursorHeight = m_pPointerUpSection->GetHeight();
42
43 AGUI2Rectangle::SetDimensions( fCursorWidth, fCursorHeight );
44 AGUI2Element::GetTransform().Scale( a_fScalar, a_fScalar );
45 AGUI2Rectangle::SetTextureSection( m_pPointerUpSection );
47 m_CursorCenter = { -fCursorWidth / 2, -fCursorHeight / 2 };
48
49 if ( a_szPointerDownTexture )
50 {
51 m_pPointerDownSection = AGUI2TextureSectionManager::GetTextureSection( a_szPointerDownTexture );
52 }
53
56
57 return TTRUE;
58}
float TFLOAT
Definition Typedefs.h:4
#define TFALSE
Definition Typedefs.h:24
#define TTRUE
Definition Typedefs.h:25
@ AGUI2ATTACHMENT_TOPLEFT
@ AGUI2ATTACHMENT_MIDDLECENTER
TInputDevice * GetDeviceByIndex(TClass *a_pClass, TUINT a_uiIndex)
static TFORCEINLINE TInputInterface * GetSingleton()
Definition TSingleton.h:49
static AGUI2Element * GetRootElement()
Definition AGUI2.h:31
AGUI2Transform & GetTransform()
void AddChildTail(AGUI2Element &a_rElement)
void SetAttachment(AGUI2ATTACHMENT a_eAnchor, AGUI2ATTACHMENT a_ePivot)
virtual void SetDimensions(TFLOAT a_fWidth, TFLOAT a_fHeight)
void SetTextureSection(AGUI2TextureSection *a_pTexSection)
Sets material and UVs from AGUI2TextureSection.
static AGUI2TextureSection * GetTextureSection(const TCHAR *a_szSectionName)
void Scale(TFLOAT a_fScaleX, TFLOAT a_fScaleY)

◆ GetCursorCenter()

const Toshi::TVector2 & AGUI2MouseCursor::GetCursorCenter ( ) const
inline

Definition at line 26 of file AGUI2MouseCursor.h.

26{ return m_CursorCenter; }

◆ GetCursorPos()

const Toshi::TVector2 & AGUI2MouseCursor::GetCursorPos ( ) const
inline

Definition at line 27 of file AGUI2MouseCursor.h.

27{ return m_CursorPos; }

◆ MoveCursor()

void AGUI2MouseCursor::MoveCursor ( TFLOAT a_fDeltaX,
TFLOAT a_fDeltaY )

Definition at line 92 of file AGUI2MouseCursor.cpp.

93{
94 TFLOAT fCursorAccelerationX;
95 TFLOAT fCursorAccelerationY;
96
97 // X
98 fCursorAccelerationX = 1.0f;
99
100 if ( m_eAccelerationType != Acceleration_Fast || TMath::Abs( a_fDeltaX ) <= m_fCursorAccelerations[ Acceleration_Fast ] )
101 {
102 if ( m_eAccelerationType != Acceleration_Off && m_fCursorAccelerations[ Acceleration_Slow ] < TMath::Abs( a_fDeltaX ) )
103 {
104 fCursorAccelerationX = 2.0f;
105 }
106 }
107 else
108 {
109 fCursorAccelerationX = 4.0f;
110 }
111
112 // Y
113 fCursorAccelerationY = 1.0f;
114
115 if ( m_eAccelerationType != Acceleration_Off && m_fCursorAccelerations[ Acceleration_Slow ] < TMath::Abs( a_fDeltaY ) )
116 {
117 fCursorAccelerationY = 4.0f;
118 }
119
120 if ( m_eAccelerationType == Acceleration_Fast && m_fCursorAccelerations[ Acceleration_Fast ] < TMath::Abs( a_fDeltaY ) )
121 {
122 fCursorAccelerationY = 4.0f;
123 }
124
125 m_MousePos.x += fCursorAccelerationX * a_fDeltaX * m_fCursorAccelerations[ Acceleration_Off ];
126 m_MousePos.y += fCursorAccelerationY * a_fDeltaY * m_fCursorAccelerations[ Acceleration_Off ];
127
128 TFLOAT fMinsX, fMinsY;
129 TFLOAT fMaxsX, fMaxsY;
130 AGUI2::GetRootElement()->GetMins( fMinsX, fMinsY );
131 AGUI2::GetRootElement()->GetMaxs( fMaxsX, fMaxsY );
132
133 if ( m_MousePos.x < fMinsX ) m_MousePos.x = fMinsX;
134 if ( m_MousePos.x > fMaxsX ) m_MousePos.x = fMaxsX;
135 if ( m_MousePos.y < fMinsY ) m_MousePos.y = fMinsY;
136 if ( m_MousePos.y > fMaxsY ) m_MousePos.y = fMaxsY;
137
138 if ( m_fRadialRadius != -1.0f )
139 {
140 Toshi::TVector2 vec = m_MousePos - m_RadialFieldPos;
141
142 if ( m_fRadialRadius < vec.Magnitude() )
143 {
144 vec.Normalize();
145 m_MousePos.x = vec.x * m_fRadialRadius + m_RadialFieldPos.x;
146 m_MousePos.y = vec.y * m_fRadialRadius + m_RadialFieldPos.y;
147 }
148 }
149}
TFORCEINLINE TFLOAT Abs(TFLOAT fVal)
Definition TMathInline.h:63
virtual void GetMaxs(TFLOAT &a_fX, TFLOAT &a_fY)
virtual void GetMins(TFLOAT &a_fX, TFLOAT &a_fY)

◆ Update()

void AGUI2MouseCursor::Update ( )

Definition at line 60 of file AGUI2MouseCursor.cpp.

61{
62 if ( m_pMouseDevice )
63 {
65 m_pMouseDevice->GetAxisFloat( TInputDeviceMouse::AXIS_CURSOR, 0 ),
66 m_pMouseDevice->GetAxisFloat( TInputDeviceMouse::AXIS_CURSOR, 1 )
67 );
68
69 if ( !m_pPointerDownSection || !m_pMouseDevice->IsDown( TInputDeviceMouse::BUTTON_1 ) )
70 {
71 AGUI2Rectangle::SetTextureSection( m_pPointerUpSection );
72 SetDimensions( m_pPointerUpSection->GetWidth(), m_pPointerUpSection->GetHeight() );
73 m_bIsMouseDown = TFALSE;
74 }
75 else
76 {
77 AGUI2Rectangle::SetTextureSection( m_pPointerDownSection );
78 SetDimensions( m_pPointerDownSection->GetWidth(), m_pPointerDownSection->GetHeight() );
79 m_bIsMouseDown = TTRUE;
80 }
81
82 AGUI2Element::GetTransform().SetTranslation( m_MousePos.x, m_MousePos.y );
83
84 AGUI2Transform oScreenTransform;
85 GetScreenTransform( oScreenTransform );
86 oScreenTransform.Transform( m_CursorPos, m_CursorCenter );
87 }
88
89 return;
90}
void GetScreenTransform(AGUI2Transform &a_rOutTransform)
void MoveCursor(TFLOAT a_fDeltaX, TFLOAT a_fDeltaY)
void Transform(Toshi::TVector2 &a_rOutVec, const Toshi::TVector2 &a_rTransformVec) const
constexpr void SetTranslation(TFLOAT a_fX, TFLOAT a_fY)

The documentation for this class was generated from the following files: