OpenBarnyard
 
Loading...
Searching...
No Matches
TInputInterface.h
Go to the documentation of this file.
1
11
12#pragma once
13#include "Toshi/TNodeList.h"
14#include "Toshi/TArray.h"
15
17
18class TInputDevice;
19
21 , public TSingleton<TInputInterface>
22{
23public:
25
26public:
35
37 {
38 public:
39 InputEvent( TInputDevice* a_pDevice, TINT a_iDoodad, EVENT_TYPE a_eEventType );
40 InputEvent( TInputDevice* a_pDevice, TINT a_iDoodad, EVENT_TYPE a_eEventType, TWCHAR* a_wszString );
41 InputEvent( TInputDevice* a_pDevice, TINT a_iDoodad, EVENT_TYPE a_eEventType, TINT a_iMagnitude1 );
42 InputEvent( TInputDevice* a_pDevice, TINT a_iDoodad, EVENT_TYPE a_eEventType, TINT a_iMagnitude1, TINT a_iMagnitude2 );
43 InputEvent( TInputDevice* a_pDevice, TINT a_iDoodad, EVENT_TYPE a_eEventType, TFLOAT a_fMagnitude1 );
44 InputEvent( TInputDevice* a_pDevice, TINT a_iDoodad, EVENT_TYPE a_eEventType, TFLOAT a_fMagnitude1, TFLOAT a_fMagnitude2 );
45
46 TBOOL StartRepeat( TFLOAT a_fFirstRepeatTime = 0.5f, TFLOAT a_fRepeatTime = 0.1f ) const;
47
48 TINT GetMagnitudeInt( TINT a_iAxis ) const;
49 TFLOAT GetMagnitudeFloat( TINT a_iAxis ) const;
50
51 TINT GetDoodad() const { return m_iDoodad; }
53 TInputDevice* GetSource() const { return m_pSource; }
54 TINT8 GetAxisCount() const { return m_iAxisCount; }
55
58
59 public:
60 TINT m_iDoodad; // 0x00
65 TWCHAR m_wszString[ 4 ]; // 0x10
66
67 union
68 {
70 TINT Ints[ 2 ];
71 } m_Magnitude; // 0x18 De blob 0x10 JPOG
72 };
73
75
76public:
79
80 virtual TBOOL Initialise() = 0;
81 virtual TBOOL Deinitialise() = 0;
82 virtual TBOOL AcquireAll();
83 virtual TBOOL UnacquireAll();
84 virtual TBOOL FlushAll();
85 virtual void SetExclusiveMode( TBOOL a_bIsExclusive );
86 virtual TBOOL GetExclusiveMode() const;
87 virtual TINT ProcessEvents( TFLOAT a_fDeltaTime );
88 virtual void StopAllRepeats();
89
90 void AddDevice( TInputDevice* device );
91 void RemoveDevice( TInputDevice* device );
92
93 void ReleaseAllDevices();
94
95 TInputDevice* GetDeviceByIndex( TClass* a_pClass, TUINT a_uiIndex );
96
97 EventEmitter& GetInputEventEmitter() { return m_InputEventEmitter; }
98
99 template <class C>
100 C* GetDeviceByIndex( TUINT a_uiIndex = 0 )
101 {
102 C* pDevice = TSTATICCAST( C, GetDeviceByIndex( &TGetClass( C ), a_uiIndex ) );
103 TASSERT( pDevice == TNULL || pDevice->GetClass()->IsA( &TGetClass( C ) ) );
104 return pDevice;
105 }
106
107private:
108 TBOOL m_bIsExclusiveMode; // 0x04
109 TNodeList<TInputDevice> m_DeviceList; // 0x08
110 EventEmitter m_InputEventEmitter; // 0x18
111 TGenericEmitter m_Emitter2; // 0x24
112};
113
114class TInputDevice : public TObject
115 , public TNodeList<TInputDevice>::TNode
116{
117public:
119
120public:
121 static constexpr TINT INPUT_DEVICE_MOUSE_BUTTONS = 3;
122 static constexpr TINT INPUT_DEVICE_MOUSE_WHEEL = 4;
123
125 using Doodad = TINT;
126
132
139
140public:
141 TInputDevice();
142 ~TInputDevice() = default;
143
144 virtual TBOOL Acquire() = 0;
145 virtual TBOOL Unacquire() = 0;
146 virtual void Release() = 0;
147 virtual void Update( TFLOAT deltaTime ) = 0;
148 virtual TBOOL Flush();
149 virtual TINT ProcessEvents( EventEmitter& emitter, TFLOAT deltaTime ) = 0;
150 virtual TINT GetButtonCount() const = 0;
151 virtual TINT GetAxisCount() const = 0;
152 virtual TBOOL GetDoodadProperties( Doodad a_iDoodad, DoodadProperties& a_rProperties ) const = 0;
153 virtual TBOOL StartRepeat( Doodad a_iDoodad, TFLOAT a_fFirstRepeatTime, TFLOAT a_fRepeatTime );
154 virtual void StopRepeat( Doodad a_iDoodad );
155 virtual void StopAllRepeats();
157 virtual const TCHAR* GetButtonFromDoodad( Doodad a_iDoodad ) const = 0;
158 virtual TBOOL IsDown( Doodad a_iDoodad ) const = 0;
159 virtual TINT GetAxisInt( Doodad a_iDoodad, TINT axis ) const = 0;
160 virtual TINT GetAxisInt2( Doodad a_iDoodad, TINT axis ) const { return GetAxisInt( a_iDoodad, axis ); }
161 virtual TFLOAT GetAxisFloat( Doodad a_iDoodad, TINT axis ) const = 0;
162 virtual TFLOAT GetAxisFloat2( Doodad a_iDoodad, TINT axis ) const { return GetAxisFloat( a_iDoodad, axis ); }
163 virtual TBOOL IsEnabled() const = 0;
164 virtual void ThrowRepeatEvent( EventEmitter& emitter, RepeatInfo* repeatInfo, TFLOAT deltaTime );
165
167 {
168 return m_bIsAcquired;
169 }
170
171 void SetAcquired( TBOOL a_bAcquired )
172 {
173 m_bIsAcquired = a_bAcquired;
174 }
175
180
181 void SetInputInterface( TInputInterface* a_pInterface )
182 {
183 m_pInputInterface = a_pInterface;
184 }
185
186protected:
187 TINT ProcessRepeats( EventEmitter& a_rEmitter, TFLOAT a_fDeltaTime );
188
189public:
191 {
192 return s_aDevices;
193 }
194
196 {
197 return s_uiDeviceCount;
198 }
199
200protected:
201 static constexpr TUINT MAX_DEVICE_COUNT = 14;
202
204 inline static TUINT s_uiDeviceCount;
205
206protected:
213};
214
#define TASSERT(X,...)
Definition Defines.h:138
#define TSTATICCAST(POINTERTYPE, VALUE)
Definition Defines.h:69
#define TOSHI_NAMESPACE_START
Definition Defines.h:47
#define TOSHI_NAMESPACE_END
Definition Defines.h:50
#define TGetClass(CLASS)
Definition TObject.h:13
wchar_t TWCHAR
Definition Typedefs.h:21
unsigned int TUINT
Definition Typedefs.h:8
char TCHAR
Definition Typedefs.h:20
float TFLOAT
Definition Typedefs.h:4
#define TNULL
Definition Typedefs.h:23
int TINT
Definition Typedefs.h:7
bool TBOOL
Definition Typedefs.h:6
int8_t TINT8
Definition Typedefs.h:16
TInputDevice * GetDeviceByIndex(TClass *a_pClass, TUINT a_uiIndex)
virtual TBOOL Initialise()=0
TDECLARE_CLASS(TInputInterface, TObject)
virtual TBOOL GetExclusiveMode() const
EventEmitter & GetInputEventEmitter()
TEmitter< TInputInterface, TInputInterface::InputEvent > EventEmitter
virtual TBOOL Deinitialise()=0
virtual TINT ProcessEvents(TFLOAT a_fDeltaTime)
C * GetDeviceByIndex(TUINT a_uiIndex=0)
virtual void SetExclusiveMode(TBOOL a_bIsExclusive)
void RemoveDevice(TInputDevice *device)
virtual TBOOL AcquireAll()
virtual TBOOL FlushAll()
void AddDevice(TInputDevice *device)
virtual TBOOL UnacquireAll()
virtual void StopAllRepeats()
union TInputInterface::InputEvent::@331074113164076150144143322340042066145372056013 m_Magnitude
TBOOL StartRepeat(TFLOAT a_fFirstRepeatTime=0.5f, TFLOAT a_fRepeatTime=0.1f) const
InputEvent(TInputDevice *a_pDevice, TINT a_iDoodad, EVENT_TYPE a_eEventType)
EVENT_TYPE GetEventType() const
TFLOAT GetMagnitudeFloat(TINT a_iAxis) const
TInputDevice * GetSource() const
TINT GetMagnitudeInt(TINT a_iAxis) const
static constexpr TINT INPUT_DEVICE_MOUSE_BUTTONS
static TInputDevice * s_aDevices[MAX_DEVICE_COUNT]
virtual TBOOL IsForceFeedbackDevice()
virtual const TCHAR * GetButtonFromDoodad(Doodad a_iDoodad) const =0
virtual TINT ProcessEvents(EventEmitter &emitter, TFLOAT deltaTime)=0
virtual TBOOL StartRepeat(Doodad a_iDoodad, TFLOAT a_fFirstRepeatTime, TFLOAT a_fRepeatTime)
virtual TINT GetAxisInt(Doodad a_iDoodad, TINT axis) const =0
TArray< void * > m_Array2
TDECLARE_CLASS(TInputDevice, TObject)
virtual TINT GetAxisInt2(Doodad a_iDoodad, TINT axis) const
virtual void StopAllRepeats()
TArray< RepeatInfo > m_Repeats
TINT ProcessRepeats(EventEmitter &a_rEmitter, TFLOAT a_fDeltaTime)
virtual TBOOL Unacquire()=0
virtual TBOOL IsEnabled() const =0
virtual TBOOL GetDoodadProperties(Doodad a_iDoodad, DoodadProperties &a_rProperties) const =0
static constexpr TINT INPUT_DEVICE_MOUSE_WHEEL
TBOOL IsAcquired() const
static TUINT s_uiDeviceCount
virtual void StopRepeat(Doodad a_iDoodad)
virtual TFLOAT GetAxisFloat(Doodad a_iDoodad, TINT axis) const =0
virtual TINT GetButtonCount() const =0
void SetAcquired(TBOOL a_bAcquired)
virtual TBOOL Flush()
TInputInterface * m_pInputInterface
TInputInterface::EventEmitter EventEmitter
virtual TBOOL Acquire()=0
virtual TFLOAT GetAxisFloat2(Doodad a_iDoodad, TINT axis) const
TInputInterface * GetInputInterface()
virtual TBOOL IsDown(Doodad a_iDoodad) const =0
static TInputDevice ** GetRegisteredDevices()
static TUINT GetNumRegisteredDevices()
~TInputDevice()=default
virtual TINT GetAxisCount() const =0
virtual void Update(TFLOAT deltaTime)=0
virtual void Release()=0
virtual void ThrowRepeatEvent(EventEmitter &emitter, RepeatInfo *repeatInfo, TFLOAT deltaTime)
static constexpr TUINT MAX_DEVICE_COUNT
void SetInputInterface(TInputInterface *a_pInterface)
Definition TClass.h:8
constexpr TNode()
Definition TNodeList.h:15
TSingleton(const TSingleton &)=delete