23{
24 Logger::Get().
Log(
"Initializing input class", __FILE__, __LINE__, Logger::LogLevel::Initialize);
25
26 HRESULT result;
27 int i;
28
29
30 for (i = 0; i < 256; i++)
31 {
32 m_keys[i] = false;
33 }
34
35
36 m_screenWidth = screenWidth;
37 m_screenHeight = screenHeight;
38
39
40 m_mouseX = 0;
41 m_mouseY = 0;
42
43
44 result = DirectInput8Create(hinstance, DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&m_directInput, NULL);
45 if (FAILED(result))
46 {
47 Logger::Get().
Log(
"Failed to create direct input interface", __FILE__, __LINE__, Logger::LogLevel::Error);
48 return false;
49 }
50
51
52 result = m_directInput->CreateDevice(GUID_SysKeyboard, &m_keyboard, NULL);
53 if (FAILED(result))
54 {
55 Logger::Get().
Log(
"Failed to create direct input interface for the keyboard", __FILE__, __LINE__, Logger::LogLevel::Error);
56 return false;
57 }
58
59
60 result = m_keyboard->SetDataFormat(&c_dfDIKeyboard);
61 if (FAILED(result))
62 {
63 Logger::Get().
Log(
"Failed to set data format for the keyboard", __FILE__, __LINE__, Logger::LogLevel::Error);
64 return false;
65 }
66
67
68 result = m_keyboard->SetCooperativeLevel(hwnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
69 if (FAILED(result))
70 {
71 Logger::Get().
Log(
"Failed to set cooperative level of the keyboard", __FILE__, __LINE__, Logger::LogLevel::Error);
72 return false;
73 }
74
75
76 result = m_keyboard->Acquire();
77 if (FAILED(result))
78 {
79 Logger::Get().
Log(
"Failed to acquire the keyboard", __FILE__, __LINE__, Logger::LogLevel::Error);
80 return false;
81 }
82
83
84 result = m_directInput->CreateDevice(GUID_SysMouse, &m_mouse, NULL);
85 if (FAILED(result))
86 {
87 Logger::Get().
Log(
"Failed to create direct input interface for the mouse", __FILE__, __LINE__, Logger::LogLevel::Error);
88 return false;
89 }
90
91
92 result = m_mouse->SetDataFormat(&c_dfDIMouse);
93 if (FAILED(result))
94 {
95 Logger::Get().
Log(
"Failed to set data format for the mouse", __FILE__, __LINE__, Logger::LogLevel::Error);
96 return false;
97 }
98
99
100 result = m_mouse->SetCooperativeLevel(hwnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
101 if (FAILED(result))
102 {
103 Logger::Get().
Log(
"Failed to set cooperative level of the mouse", __FILE__, __LINE__, Logger::LogLevel::Error);
104 return false;
105 }
106
107
108 result = m_mouse->Acquire();
109 if (FAILED(result))
110 {
111 Logger::Get().
Log(
"Failed to acquire the mouse", __FILE__, __LINE__, Logger::LogLevel::Error);
112 return false;
113 }
114
115 Logger::Get().
Log(
"Input class initialized", __FILE__, __LINE__, Logger::LogLevel::Initialize);
116
117 return true;
118}