Files
metaforce/Runtime/Input/CInputGenerator.cpp
T

45 lines
1.2 KiB
C++
Raw Normal View History

2015-08-27 14:11:31 -10:00
#include "CInputGenerator.hpp"
2015-08-28 15:30:47 -10:00
#include "../CArchitectureMessage.hpp"
#include "../CArchitectureQueue.hpp"
2015-08-27 14:11:31 -10:00
2016-03-04 13:04:53 -10:00
namespace urde
2015-08-27 14:11:31 -10:00
{
2015-08-28 15:30:47 -10:00
void CInputGenerator::Update(float dt, CArchitectureQueue& queue)
{
2016-02-20 22:34:42 -08:00
if (m_firstFrame)
{
m_firstFrame = false;
return;
}
2015-08-28 15:30:47 -10:00
/* Keyboard/Mouse first */
2016-02-19 22:45:36 -08:00
CFinalInput kbInput = getFinalInput(0, dt);
2015-08-28 15:30:47 -10:00
bool kbUsed = false;
2015-08-27 14:11:31 -10:00
2015-08-28 15:30:47 -10:00
/* Dolphin controllers next */
for (int i=0 ; i<4 ; ++i)
{
bool connected;
EStatusChange change = m_dolphinCb.getStatusChange(i, connected);
2015-11-20 15:16:07 -10:00
if (change != EStatusChange::NoChange)
queue.Push(MakeMsg::CreateControllerStatus(EArchMsgTarget::Game, i, connected));
2015-08-28 15:30:47 -10:00
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;
}
queue.Push(MakeMsg::CreateUserInput(EArchMsgTarget::Game, input));
2015-08-28 15:30:47 -10:00
}
}
/* Send straight keyboard input if no first controller present */
if (!kbUsed)
queue.Push(MakeMsg::CreateUserInput(EArchMsgTarget::Game, kbInput));
2015-08-28 15:30:47 -10:00
}
2015-08-27 14:11:31 -10:00
}