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

#include <AGUI2Transform.h>

Public Types

enum  TUninitialised { Uninitialised }
 

Public Member Functions

constexpr AGUI2Transform ()
 
constexpr AGUI2Transform (TUninitialised)
 
 ~AGUI2Transform ()=default
 
void Rotate (TFLOAT a_fAngle)
 
void PreMultiply (const AGUI2Transform &a_rTransform)
 
void Scale (TFLOAT a_fScaleX, TFLOAT a_fScaleY)
 
void Transform (Toshi::TVector2 &a_rOutVec, const Toshi::TVector2 &a_rTransformVec) const
 
void GetInverse (AGUI2Transform &a_rInverse) const
 
void SetScale (TFLOAT a_fScaleX, TFLOAT a_fScaleY)
 
void SetFromScale (TFLOAT a_fScaleX, TFLOAT a_fScaleY)
 
constexpr void Set (const Toshi::TVector2 &a_rcMatComp1, const Toshi::TVector2 &a_rcMatComp2, const Toshi::TVector2 &a_rcTranslation)
 
constexpr void SetIdentity ()
 
constexpr void SetZero ()
 
constexpr void SetTranslation (TFLOAT a_fX, TFLOAT a_fY)
 
constexpr void SetTranslation (const Toshi::TVector2 &a_rcTranslation)
 
constexpr const Toshi::TVector2 & GetTranslation () const
 

Static Public Member Functions

static void Multiply (AGUI2Transform &a_rOutTransform, const AGUI2Transform &a_rA, const AGUI2Transform &a_rB)
 

Public Attributes

Toshi::TVector2 m_aMatrixRows [2]
 
Toshi::TVector2 m_vecTranslation
 

Detailed Description

Definition at line 4 of file AGUI2Transform.h.

Member Enumeration Documentation

◆ TUninitialised

Enumerator
Uninitialised 

Definition at line 7 of file AGUI2Transform.h.

8 {
10 };

Constructor & Destructor Documentation

◆ AGUI2Transform() [1/2]

AGUI2Transform::AGUI2Transform ( )
inlineconstexpr

Definition at line 14 of file AGUI2Transform.h.

15 {
17 }
constexpr void SetIdentity()

◆ AGUI2Transform() [2/2]

AGUI2Transform::AGUI2Transform ( TUninitialised )
inlineconstexpr

Definition at line 19 of file AGUI2Transform.h.

19{}

◆ ~AGUI2Transform()

AGUI2Transform::~AGUI2Transform ( )
default

Member Function Documentation

◆ GetInverse()

void AGUI2Transform::GetInverse ( AGUI2Transform & a_rInverse) const

Definition at line 52 of file AGUI2Transform.cpp.

53{
54 TFLOAT fMultiplier = 1.0f / ( m_aMatrixRows[ 0 ].x * m_aMatrixRows[ 1 ].y - m_aMatrixRows[ 0 ].y * m_aMatrixRows[ 1 ].x );
55
56 // NOTE: this code seems to be returning incorrect inverse matrices but
57 // it's the way it works in Barnyard. In de Blob, however, it was rewritten
58 // to do math the correct way.
59 a_rInverse.m_aMatrixRows[ 0 ].x = fMultiplier * m_aMatrixRows[ 0 ].x;
60 a_rInverse.m_aMatrixRows[ 0 ].y = fMultiplier * m_aMatrixRows[ 1 ].x;
61 a_rInverse.m_aMatrixRows[ 1 ].x = fMultiplier * m_aMatrixRows[ 0 ].y;
62 a_rInverse.m_aMatrixRows[ 1 ].y = fMultiplier * m_aMatrixRows[ 1 ].y;
63
64 // Someone probably forgot to remove some extra code?
65 a_rInverse.m_vecTranslation = TVector2( 0.0f, 0.0f );
66 a_rInverse.m_vecTranslation.x = a_rInverse.m_aMatrixRows[ 1 ].x * m_vecTranslation.y + a_rInverse.m_aMatrixRows[ 0 ].x * m_vecTranslation.x + a_rInverse.m_vecTranslation.x;
67 a_rInverse.m_vecTranslation.y = a_rInverse.m_aMatrixRows[ 0 ].y * m_vecTranslation.x + a_rInverse.m_aMatrixRows[ 1 ].y * m_vecTranslation.y + a_rInverse.m_vecTranslation.y;
68 a_rInverse.m_vecTranslation.Negate();
69}
float TFLOAT
Definition Typedefs.h:4
Toshi::TVector2 m_vecTranslation
Toshi::TVector2 m_aMatrixRows[2]

◆ GetTranslation()

const Toshi::TVector2 & AGUI2Transform::GetTranslation ( ) const
inlineconstexpr

Definition at line 67 of file AGUI2Transform.h.

67{ return m_vecTranslation; }

◆ Multiply()

void AGUI2Transform::Multiply ( AGUI2Transform & a_rOutTransform,
const AGUI2Transform & a_rA,
const AGUI2Transform & a_rB )
static

Definition at line 85 of file AGUI2Transform.cpp.

86{
87 a_rOutTransform.m_aMatrixRows[ 0 ].x = a_rB.m_aMatrixRows[ 0 ].y * a_rA.m_aMatrixRows[ 1 ].x + a_rA.m_aMatrixRows[ 0 ].x * a_rB.m_aMatrixRows[ 0 ].x;
88 a_rOutTransform.m_aMatrixRows[ 0 ].y = a_rB.m_aMatrixRows[ 0 ].y * a_rA.m_aMatrixRows[ 1 ].y + a_rA.m_aMatrixRows[ 0 ].y * a_rB.m_aMatrixRows[ 0 ].x;
89 a_rOutTransform.m_aMatrixRows[ 1 ].x = a_rB.m_aMatrixRows[ 1 ].x * a_rA.m_aMatrixRows[ 0 ].x + a_rB.m_aMatrixRows[ 1 ].y * a_rA.m_aMatrixRows[ 1 ].x;
90 a_rOutTransform.m_aMatrixRows[ 1 ].y = a_rB.m_aMatrixRows[ 1 ].x * a_rA.m_aMatrixRows[ 0 ].y + a_rB.m_aMatrixRows[ 1 ].y * a_rA.m_aMatrixRows[ 1 ].y;
91 a_rOutTransform.m_vecTranslation.x = a_rB.m_vecTranslation.x * a_rA.m_aMatrixRows[ 0 ].x + a_rB.m_vecTranslation.y * a_rA.m_aMatrixRows[ 1 ].x + a_rA.m_vecTranslation.x;
92 a_rOutTransform.m_vecTranslation.y = a_rB.m_vecTranslation.x * a_rA.m_aMatrixRows[ 0 ].y + a_rB.m_vecTranslation.y * a_rA.m_aMatrixRows[ 1 ].y + a_rA.m_vecTranslation.y;
93}

◆ PreMultiply()

void AGUI2Transform::PreMultiply ( const AGUI2Transform & a_rTransform)

Definition at line 26 of file AGUI2Transform.cpp.

27{
28 TVector2 vecRot0 = m_aMatrixRows[ 0 ];
29 TVector2 vecRot1 = m_aMatrixRows[ 1 ];
30
31 m_aMatrixRows[ 0 ].x = a_rTransform.m_aMatrixRows[ 0 ].x * vecRot0.x + a_rTransform.m_aMatrixRows[ 0 ].y * vecRot1.x;
32 m_aMatrixRows[ 0 ].y = a_rTransform.m_aMatrixRows[ 0 ].x * vecRot0.y + a_rTransform.m_aMatrixRows[ 0 ].y * vecRot1.y;
33 m_aMatrixRows[ 1 ].x = a_rTransform.m_aMatrixRows[ 1 ].x * vecRot0.x + a_rTransform.m_aMatrixRows[ 1 ].y * vecRot1.x;
34 m_aMatrixRows[ 1 ].y = a_rTransform.m_aMatrixRows[ 1 ].x * vecRot0.y + a_rTransform.m_aMatrixRows[ 1 ].y * vecRot1.y;
35}
TFLOAT y
Definition TVector2.h:139
TFLOAT x
Definition TVector2.h:139

◆ Rotate()

void AGUI2Transform::Rotate ( TFLOAT a_fAngle)

Definition at line 12 of file AGUI2Transform.cpp.

13{
14 TFLOAT fSin, fCos;
15 TMath::SinCos( a_fAngle, fSin, fCos );
16
17 TVector2 vecRot0 = m_aMatrixRows[ 0 ];
18 TVector2 vecRot1 = m_aMatrixRows[ 1 ];
19
20 m_aMatrixRows[ 0 ].x = vecRot0.x * fCos + vecRot1.x * fSin;
21 m_aMatrixRows[ 0 ].y = vecRot0.y * fCos + vecRot1.y * fSin;
22 m_aMatrixRows[ 1 ].x = vecRot1.x * fCos - vecRot0.x * fSin;
23 m_aMatrixRows[ 1 ].y = vecRot1.y * fCos - vecRot0.y * fSin;
24}
TFORCEINLINE void SinCos(TFLOAT fVal, TFLOAT &a_rSin, TFLOAT &a_rCos)

◆ Scale()

void AGUI2Transform::Scale ( TFLOAT a_fScaleX,
TFLOAT a_fScaleY )

Definition at line 37 of file AGUI2Transform.cpp.

38{
39 AGUI2Transform transform;
40 transform.m_aMatrixRows[ 0 ] = { a_fScaleX, 0.0f };
41 transform.m_aMatrixRows[ 1 ] = { 0.0f, a_fScaleY };
42 transform.m_vecTranslation = { 0.0f, 0.0f };
43 PreMultiply( transform );
44}
void PreMultiply(const AGUI2Transform &a_rTransform)
constexpr AGUI2Transform()

◆ Set()

void AGUI2Transform::Set ( const Toshi::TVector2 & a_rcMatComp1,
const Toshi::TVector2 & a_rcMatComp2,
const Toshi::TVector2 & a_rcTranslation )
inlineconstexpr

Definition at line 35 of file AGUI2Transform.h.

36 {
37 m_aMatrixRows[ 0 ] = a_rcMatComp1;
38 m_aMatrixRows[ 1 ] = a_rcMatComp2;
39 m_vecTranslation = a_rcTranslation;
40 }

◆ SetFromScale()

void AGUI2Transform::SetFromScale ( TFLOAT a_fScaleX,
TFLOAT a_fScaleY )

Definition at line 79 of file AGUI2Transform.cpp.

80{
82 Scale( a_fScaleX, a_fScaleY );
83}
void Scale(TFLOAT a_fScaleX, TFLOAT a_fScaleY)

◆ SetIdentity()

void AGUI2Transform::SetIdentity ( )
inlineconstexpr

Definition at line 42 of file AGUI2Transform.h.

43 {
44 m_aMatrixRows[ 0 ] = Toshi::TVector2( 1.0f, 0.0f );
45 m_aMatrixRows[ 1 ] = Toshi::TVector2( 0.0f, 1.0f );
46 m_vecTranslation = Toshi::TVector2::VEC_ZERO;
47 }

◆ SetScale()

void AGUI2Transform::SetScale ( TFLOAT a_fScaleX,
TFLOAT a_fScaleY )

Definition at line 71 of file AGUI2Transform.cpp.

72{
73 TVector2 vecTranslation = m_vecTranslation;
75 Scale( a_fScaleX, a_fScaleY );
76 m_vecTranslation = vecTranslation;
77}

◆ SetTranslation() [1/2]

void AGUI2Transform::SetTranslation ( const Toshi::TVector2 & a_rcTranslation)
inlineconstexpr

Definition at line 62 of file AGUI2Transform.h.

63 {
64 m_vecTranslation = a_rcTranslation;
65 }

◆ SetTranslation() [2/2]

void AGUI2Transform::SetTranslation ( TFLOAT a_fX,
TFLOAT a_fY )
inlineconstexpr

Definition at line 56 of file AGUI2Transform.h.

57 {
58 m_vecTranslation.x = a_fX;
59 m_vecTranslation.y = a_fY;
60 }

◆ SetZero()

void AGUI2Transform::SetZero ( )
inlineconstexpr

Definition at line 49 of file AGUI2Transform.h.

50 {
51 m_aMatrixRows[ 0 ] = Toshi::TVector2::VEC_ZERO;
52 m_aMatrixRows[ 1 ] = Toshi::TVector2::VEC_ZERO;
53 m_vecTranslation = Toshi::TVector2::VEC_ZERO;
54 }

◆ Transform()

void AGUI2Transform::Transform ( Toshi::TVector2 & a_rOutVec,
const Toshi::TVector2 & a_rTransformVec ) const

Definition at line 46 of file AGUI2Transform.cpp.

47{
48 a_rOutVec.x = m_vecTranslation.x + m_aMatrixRows[ 0 ].x * a_rTransformVec.x + m_aMatrixRows[ 1 ].x * a_rTransformVec.y;
49 a_rOutVec.y = m_vecTranslation.y + m_aMatrixRows[ 0 ].y * a_rTransformVec.x + m_aMatrixRows[ 1 ].y * a_rTransformVec.y;
50}

Member Data Documentation

◆ m_aMatrixRows

Toshi::TVector2 AGUI2Transform::m_aMatrixRows[2]

Definition at line 73 of file AGUI2Transform.h.

◆ m_vecTranslation

Toshi::TVector2 AGUI2Transform::m_vecTranslation

Definition at line 74 of file AGUI2Transform.h.


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