metaforce/Runtime/Input/CInputGenerator.cpp

44 lines
1.2 KiB
C++
Raw Normal View History

#include "Runtime/Input/CInputGenerator.hpp"
#include "Runtime/CArchitectureMessage.hpp"
#include "Runtime/CArchitectureQueue.hpp"
2015-08-27 17:11:31 -07:00
2021-04-10 01:42:06 -07:00
namespace metaforce {
2015-08-27 17:11:31 -07:00
2018-12-07 21:30:43 -08:00
void CInputGenerator::Update(float dt, CArchitectureQueue& queue) {
if (m_firstFrame) {
m_firstFrame = false;
return;
}
2016-02-20 22:34:42 -08:00
2018-12-07 21:30:43 -08:00
/* Keyboard/Mouse first */
CFinalInput kbInput = getFinalInput(0, dt);
bool kbUsed = false;
2015-08-28 18:30:47 -07:00
2018-12-07 21:30:43 -08:00
/* Dolphin controllers next */
for (int i = 0; i < 4; ++i) {
bool connected;
EStatusChange change = m_dolphinCb.getStatusChange(i, connected);
if (change != EStatusChange::NoChange)
queue.Push(MakeMsg::CreateControllerStatus(EArchMsgTarget::Game, i, connected));
if (connected) {
CFinalInput input = m_dolphinCb.getFinalInput(i, dt, m_leftDiv, m_rightDiv);
if (i == 0) /* Merge KB input with first controller */
{
input |= kbInput;
kbUsed = true;
}
m_lastUpdate = input;
2018-12-07 21:30:43 -08:00
queue.Push(MakeMsg::CreateUserInput(EArchMsgTarget::Game, input));
2015-08-28 18:30:47 -07:00
}
2018-12-07 21:30:43 -08:00
}
2015-08-27 17:11:31 -07:00
2018-12-07 21:30:43 -08:00
/* Send straight keyboard input if no first controller present */
if (!kbUsed) {
m_lastUpdate = kbInput;
2018-12-07 21:30:43 -08:00
queue.Push(MakeMsg::CreateUserInput(EArchMsgTarget::Game, kbInput));
}
2015-08-28 18:30:47 -07:00
}
2015-08-27 17:11:31 -07:00
2021-04-10 01:42:06 -07:00
} // namespace metaforce