| 181 | } |
| 182 | |
| 183 | int 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)) |
no test coverage detected