MCPcopy Create free account
hub / github.com/ddnet/ddnet / SnapInput

Method SnapInput

src/game/client/components/controls.cpp:183–335  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

181}
182
183int CControls::SnapInput(int *pData)
184{
185 // update player state
186 if(GameClient()->m_Chat.IsActive())
187 m_aInputData[g_Config.m_ClDummy].m_PlayerFlags = PLAYERFLAG_CHATTING;
188 else if(GameClient()->m_Menus.IsActive())
189 m_aInputData[g_Config.m_ClDummy].m_PlayerFlags = PLAYERFLAG_IN_MENU;
190 else
191 m_aInputData[g_Config.m_ClDummy].m_PlayerFlags = PLAYERFLAG_PLAYING;
192
193 if(GameClient()->m_Scoreboard.IsActive())
194 m_aInputData[g_Config.m_ClDummy].m_PlayerFlags |= PLAYERFLAG_SCOREBOARD;
195
196 if(Client()->ServerCapAnyPlayerFlag() && GameClient()->m_Controls.m_aShowHookColl[g_Config.m_ClDummy])
197 m_aInputData[g_Config.m_ClDummy].m_PlayerFlags |= PLAYERFLAG_AIM;
198
199 if(Client()->ServerCapAnyPlayerFlag() && GameClient()->m_Camera.CamType() == CCamera::CAMTYPE_SPEC)
200 m_aInputData[g_Config.m_ClDummy].m_PlayerFlags |= PLAYERFLAG_SPEC_CAM;
201
202 switch(m_aMouseInputType[g_Config.m_ClDummy])
203 {
204 case CControls::EMouseInputType::AUTOMATED:
205 m_aInputData[g_Config.m_ClDummy].m_PlayerFlags |= PLAYERFLAG_INPUT_ABSOLUTE;
206 break;
207 case CControls::EMouseInputType::ABSOLUTE:
208 m_aInputData[g_Config.m_ClDummy].m_PlayerFlags |= PLAYERFLAG_INPUT_ABSOLUTE | PLAYERFLAG_INPUT_MANUAL;
209 break;
210 case CControls::EMouseInputType::RELATIVE:
211 m_aInputData[g_Config.m_ClDummy].m_PlayerFlags |= PLAYERFLAG_INPUT_MANUAL;
212 break;
213 }
214
215 bool Send = m_aLastData[g_Config.m_ClDummy].m_PlayerFlags != m_aInputData[g_Config.m_ClDummy].m_PlayerFlags;
216
217 m_aLastData[g_Config.m_ClDummy].m_PlayerFlags = m_aInputData[g_Config.m_ClDummy].m_PlayerFlags;
218
219 // we freeze the input if chat or menu is activated
220 if(!(m_aInputData[g_Config.m_ClDummy].m_PlayerFlags & PLAYERFLAG_PLAYING))
221 {
222 if(!GameClient()->m_GameInfo.m_BugDDRaceInput)
223 ResetInput(g_Config.m_ClDummy);
224
225 mem_copy(pData, &m_aInputData[g_Config.m_ClDummy], sizeof(m_aInputData[0]));
226
227 // set the target anyway though so that we can keep seeing our surroundings,
228 // even if chat or menu are activated
229 m_aInputData[g_Config.m_ClDummy].m_TargetX = (int)m_aMousePos[g_Config.m_ClDummy].x;
230 m_aInputData[g_Config.m_ClDummy].m_TargetY = (int)m_aMousePos[g_Config.m_ClDummy].y;
231
232 // send once a second just to be sure
233 Send = Send || time_get() > m_LastSendTime + time_freq();
234 }
235 else
236 {
237 m_aInputData[g_Config.m_ClDummy].m_TargetX = (int)m_aMousePos[g_Config.m_ClDummy].x;
238 m_aInputData[g_Config.m_ClDummy].m_TargetY = (int)m_aMousePos[g_Config.m_ClDummy].y;
239
240 if(g_Config.m_ClSubTickAiming && m_aMousePosOnAction[g_Config.m_ClDummy] != vec2(0.0f, 0.0f))

Callers 1

OnSnapInputMethod · 0.80

Calls 9

mem_copyFunction · 0.85
time_getFunction · 0.85
time_freqFunction · 0.85
mem_zeroFunction · 0.85
CamTypeMethod · 0.80
ClientFunction · 0.50
IsActiveMethod · 0.45
LocalTimeMethod · 0.45

Tested by

no test coverage detected