OpenBarnyard
 
Loading...
Searching...
No Matches
TInputDeviceKeyboard.cpp
Go to the documentation of this file.
1#include "ToshiPCH.h"
3
4//-----------------------------------------------------------------------------
5// Enables memory debugging.
6// Note: Should be the last include!
7//-----------------------------------------------------------------------------
9
11
13
14// $Barnyard: FUNCTION 006c4f70
18
19// $Barnyard: FUNCTION 006c5680
23
30
31static VirtualButtonDefinition s_aVirtualButtons[] = {
35
39
43};
44
45// $Barnyard: FUNCTION 006c56b0
47{
49 TINT iNumThrownEvents = 1;
50
51 for ( TUINT i = 0; i < TARRAYSIZE( s_aVirtualButtons ); i++ )
52 {
53 // Check if this virtual button was pressed
54 if ( !WasDown( s_aVirtualButtons[ i ].iAlias1 ) &&
55 !WasDown( s_aVirtualButtons[ i ].iAlias2 ) )
56 {
57 if ( IsDown( s_aVirtualButtons[ i ].iAlias1 ) ||
58 IsDown( s_aVirtualButtons[ i ].iAlias2 ) )
59 {
60 a_rEmitter.Throw( TInputInterface::InputEvent( this, s_aVirtualButtons[ i ].iThrowDoodad, TInputInterface::EVENT_TYPE_GONE_DOWN ) );
61 iNumThrownEvents++;
62 }
63 }
64
65 // Check if this virtual button was released
66 if ( WasDown( s_aVirtualButtons[ i ].iAlias1 ) &&
67 WasDown( s_aVirtualButtons[ i ].iAlias2 ) )
68 {
69 if ( !IsDown( s_aVirtualButtons[ i ].iAlias1 ) ||
70 !IsDown( s_aVirtualButtons[ i ].iAlias2 ) )
71 {
72 a_rEmitter.Throw( TInputInterface::InputEvent( this, s_aVirtualButtons[ i ].iThrowDoodad, TInputInterface::EVENT_TYPE_GONE_UP ) );
73 iNumThrownEvents++;
74 }
75 }
76 }
77
78 return iNumThrownEvents;
79}
80
81// $Barnyard: FUNCTION 006c5090
83{
84#define CASE( KEY ) \
85 case KEY: return STRINGIFY( KEY )
86
87 switch ( a_iDoodad )
88 {
93 CASE( KEY_1 );
94 CASE( KEY_2 );
95 CASE( KEY_3 );
96 CASE( KEY_4 );
97 CASE( KEY_5 );
98 CASE( KEY_6 );
99 CASE( KEY_7 );
100 CASE( KEY_8 );
101 CASE( KEY_9 );
102 CASE( KEY_0 );
103 CASE( KEY_MINUS );
104 CASE( KEY_EQUALS );
105 CASE( KEY_BACK );
106 CASE( KEY_TAB );
107 CASE( KEY_Q );
108 CASE( KEY_W );
109 CASE( KEY_E );
110 CASE( KEY_R );
111 CASE( KEY_T );
112 CASE( KEY_Y );
113 CASE( KEY_U );
114 CASE( KEY_I );
115 CASE( KEY_O );
116 CASE( KEY_P );
119 CASE( KEY_RETURN );
121 CASE( KEY_A );
122 CASE( KEY_S );
123 CASE( KEY_D );
124 CASE( KEY_F );
125 CASE( KEY_G );
126 CASE( KEY_H );
127 CASE( KEY_J );
128 CASE( KEY_K );
129 CASE( KEY_L );
132 CASE( KEY_GRAVE );
133 CASE( KEY_LSHIFT );
135 CASE( KEY_Z );
136 CASE( KEY_X );
137 CASE( KEY_C );
138 CASE( KEY_V );
139 CASE( KEY_B );
140 CASE( KEY_N );
141 CASE( KEY_M );
142 CASE( KEY_COMMA );
143 CASE( KEY_PERIOD );
144 CASE( KEY_SLASH );
145 CASE( KEY_RSHIFT );
147 CASE( KEY_LMENU );
148 CASE( KEY_SPACE );
149 CASE( KEY_CAPITAL );
150 CASE( KEY_F1 );
151 CASE( KEY_F2 );
152 CASE( KEY_F3 );
153 CASE( KEY_F4 );
154 CASE( KEY_F5 );
155 CASE( KEY_F6 );
156 CASE( KEY_F7 );
157 CASE( KEY_F8 );
158 CASE( KEY_F9 );
159 CASE( KEY_F10 );
160 CASE( KEY_NUMLOCK );
161 CASE( KEY_SCROLL );
162 CASE( KEY_NUMPAD7 );
163 CASE( KEY_NUMPAD8 );
164 CASE( KEY_NUMPAD9 );
166 CASE( KEY_NUMPAD4 );
167 CASE( KEY_NUMPAD5 );
168 CASE( KEY_NUMPAD6 );
169 CASE( KEY_ADD );
170 CASE( KEY_NUMPAD1 );
171 CASE( KEY_NUMPAD2 );
172 CASE( KEY_NUMPAD3 );
173 CASE( KEY_NUMPAD0 );
174 CASE( KEY_DECIMAL );
175 CASE( KEY_F11 );
176 CASE( KEY_F12 );
177 CASE( KEY_F13 );
178 CASE( KEY_F14 );
179 CASE( KEY_F15 );
180 CASE( KEY_KANA );
181 CASE( KEY_CONVERT );
183 CASE( KEY_YEN );
186 CASE( KEY_AT );
187 CASE( KEY_COLON );
189 CASE( KEY_KANJI );
190 CASE( KEY_STOP );
191 CASE( KEY_AX );
196 CASE( KEY_DIVIDE );
197 CASE( KEY_SYSRQ );
198 CASE( KEY_RMENU );
199 CASE( KEY_HOME );
200 CASE( KEY_UP );
201 CASE( KEY_PRIOR );
202 CASE( KEY_LEFT );
203 CASE( KEY_RIGHT );
204 CASE( KEY_END );
205 CASE( KEY_DOWN );
206 CASE( KEY_NEXT );
207 CASE( KEY_INSERT );
208 CASE( KEY_DELETE );
209 CASE( KEY_LWIN );
210 CASE( KEY_APPS );
211 CASE( KEY_RWIN );
212 default: return "UNKNOWN";
213 }
214
215#undef CASE
216}
217
218void TInputDeviceKeyboard::SetVirtStickDoodads( TINT a_iMapID, Doodad a_iDoodad1, Doodad a_iDoodad2, Doodad a_iDoodad3, Doodad a_iDoodad4 )
219{
220 TASSERT( a_iMapID >= 0 && a_iMapID < VIRTSTK_DIRECTIONAL_MAPS );
221 m_aVirtStickDoodads[ a_iMapID ].iDoodad1 = a_iDoodad1;
222 m_aVirtStickDoodads[ a_iMapID ].iDoodad2 = a_iDoodad2;
223 m_aVirtStickDoodads[ a_iMapID ].iDoodad3 = a_iDoodad3;
224 m_aVirtStickDoodads[ a_iMapID ].iDoodad4 = a_iDoodad4;
225}
226
227void TInputDeviceKeyboard::GetVirtStickDoodads( TINT a_iMapID, Doodad& a_rDoodad1, Doodad& a_rDoodad2, Doodad& a_rDoodad3, Doodad& a_rDoodad4 )
228{
229 TASSERT( a_iMapID >= 0 && a_iMapID < VIRTSTK_DIRECTIONAL_MAPS );
230 a_rDoodad1 = m_aVirtStickDoodads[ a_iMapID ].iDoodad1;
231 a_rDoodad2 = m_aVirtStickDoodads[ a_iMapID ].iDoodad2;
232 a_rDoodad3 = m_aVirtStickDoodads[ a_iMapID ].iDoodad3;
233 a_rDoodad4 = m_aVirtStickDoodads[ a_iMapID ].iDoodad4;
234}
235
236// $Barnyard: FUNCTION 006c4ff0
238{
239 m_aMags[ 2 ] = m_aMags[ 0 ];
240 m_aMags[ 3 ] = m_aMags[ 1 ];
241 m_aMags[ 1 ] = 0;
242 m_aMags[ 0 ] = 0;
243
244 for ( TINT i = 0; i < VIRTSTK_DIRECTIONAL_MAPS; i++ )
245 {
246 if ( m_aVirtStickDoodads[ i ].iDoodad2 > 0 && IsDown( m_aVirtStickDoodads[ i ].iDoodad2 ) )
247 m_aMags[ 1 ] = -1.0f;
248
249 if ( m_aVirtStickDoodads[ i ].iDoodad1 > 0 && IsDown( m_aVirtStickDoodads[ i ].iDoodad1 ) )
250 m_aMags[ 1 ] = 1.0f;
251
252 if ( m_aVirtStickDoodads[ i ].iDoodad3 > 0 && IsDown( m_aVirtStickDoodads[ i ].iDoodad3 ) )
253 m_aMags[ 0 ] = -1.0f;
254
255 if ( m_aVirtStickDoodads[ i ].iDoodad4 > 0 && IsDown( m_aVirtStickDoodads[ i ].iDoodad4 ) )
256 m_aMags[ 0 ] = 1.0f;
257 }
258}
259
260// $Barnyard: FUNCTION 006c4fc0
262{
263 if ( ( a_iDoodad >= DOODAD_START ) && ( a_iDoodad < DOODAD_END ) )
264 {
265 doodadProps.m_iUnk = 0;
266 doodadProps.m_bFlag = TFALSE;
267 return TTRUE;
268 }
269
270 return TFALSE;
271}
272
#define CASE(KEY)
Keyboard input device for the Toshi engine.
#define TASSERT(X,...)
Definition Defines.h:138
#define TOSHI_NAMESPACE_START
Definition Defines.h:47
#define TARRAYSIZE(ARRAY)
Definition Defines.h:70
#define TOSHI_NAMESPACE_END
Definition Defines.h:50
#define TDEFINE_CLASS_NORUNTIME(...)
Definition TObject.h:138
unsigned int TUINT
Definition Typedefs.h:8
char TCHAR
Definition Typedefs.h:20
float TFLOAT
Definition Typedefs.h:4
int TINT
Definition Typedefs.h:7
#define TFALSE
Definition Typedefs.h:24
#define TTRUE
Definition Typedefs.h:25
bool TBOOL
Definition Typedefs.h:6
static constexpr TUINT VIRTSTK_DIRECTIONAL_MAPS
virtual TBOOL GetDoodadProperties(Doodad a_iDoodad, DoodadProperties &doodadProps) const override
VirtStickDoodad m_aVirtStickDoodads[VIRTSTK_DIRECTIONAL_MAPS]
virtual const TCHAR * GetButtonFromDoodad(Doodad a_iDoodad) const override
void GetVirtStickDoodads(TINT a_iMapID, Doodad &a_rDoodad1, Doodad &a_rDoodad2, Doodad &a_rDoodad3, Doodad &a_rDoodad4)
virtual TINT ProcessVirtualButtons(EventEmitter &a_rEmitter, TFLOAT flt)
void SetVirtStickDoodads(TINT a_iMapID, Doodad a_iDoodad1, Doodad a_iDoodad2, Doodad a_iDoodad3, Doodad a_iDoodad4)
virtual TBOOL WasDown(Doodad a_iDoodad) const =0
TInputInterface::EventEmitter EventEmitter
virtual TBOOL IsDown(Doodad a_iDoodad) const =0
void Throw(Data *pData)
Definition TEvent.h:56