Skip to content

Commit

Permalink
Add wiimote tas input.
Browse files Browse the repository at this point in the history
  • Loading branch information
RachelBryk committed Oct 3, 2014
1 parent 0d768bd commit 6b8823d
Show file tree
Hide file tree
Showing 11 changed files with 651 additions and 966 deletions.
2 changes: 1 addition & 1 deletion Source/Core/Core/HW/SI_DeviceDanceMat.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ bool CSIDevice_DanceMat::GetData(u32& _Hi, u32& _Low)
memset(&PadStatus, 0, sizeof(PadStatus));

Pad::GetStatus(ISIDevice::m_iDeviceNumber, &PadStatus);
Movie::CallInputManip(&PadStatus, ISIDevice::m_iDeviceNumber);
Movie::CallGCInputManip(&PadStatus, ISIDevice::m_iDeviceNumber);

u32 netValues[2];
if (NetPlay_GetInput(ISIDevice::m_iDeviceNumber, PadStatus, netValues))
Expand Down
2 changes: 1 addition & 1 deletion Source/Core/Core/HW/SI_DeviceGCController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ bool CSIDevice_GCController::GetData(u32& _Hi, u32& _Low)
memset(&PadStatus, 0, sizeof(PadStatus));

Pad::GetStatus(ISIDevice::m_iDeviceNumber, &PadStatus);
Movie::CallInputManip(&PadStatus, ISIDevice::m_iDeviceNumber);
Movie::CallGCInputManip(&PadStatus, ISIDevice::m_iDeviceNumber);

u32 netValues[2];
if (NetPlay_GetInput(ISIDevice::m_iDeviceNumber, PadStatus, netValues))
Expand Down
2 changes: 1 addition & 1 deletion Source/Core/Core/HW/SI_DeviceGCSteeringWheel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ bool CSIDevice_GCSteeringWheel::GetData(u32& _Hi, u32& _Low)
memset(&PadStatus, 0, sizeof(PadStatus));

Pad::GetStatus(ISIDevice::m_iDeviceNumber, &PadStatus);
Movie::CallInputManip(&PadStatus, ISIDevice::m_iDeviceNumber);
Movie::CallGCInputManip(&PadStatus, ISIDevice::m_iDeviceNumber);

u32 netValues[2];
if (NetPlay_GetInput(ISIDevice::m_iDeviceNumber, PadStatus, netValues))
Expand Down
14 changes: 8 additions & 6 deletions Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -517,18 +517,18 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)
{
if (x[i*2] < 1024 && y[i*2] < 768)
{
irdata[i].x1 = u8(x[i*2]);
irdata[i].x1 = static_cast<u8>(x[i*2]);
irdata[i].x1hi = x[i*2] >> 8;

irdata[i].y1 = u8(y[i*2]);
irdata[i].y1 = static_cast<u8>(y[i*2]);
irdata[i].y1hi = y[i*2] >> 8;
}
if (x[i*2+1] < 1024 && y[i*2+1] < 768)
{
irdata[i].x2 = u8(x[i*2+1]);
irdata[i].x2 = static_cast<u8>(x[i*2+1]);
irdata[i].x2hi = x[i*2+1] >> 8;

irdata[i].y2 = u8(y[i*2+1]);
irdata[i].y2 = static_cast<u8>(y[i*2+1]);
irdata[i].y2hi = y[i*2+1] >> 8;
}
}
Expand All @@ -542,10 +542,10 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)
for (unsigned int i = 0; i < 4; ++i)
if (x[i] < 1024 && y[i] < 768)
{
irdata[i].x = u8(x[i]);
irdata[i].x = static_cast<u8>(x[i]);
irdata[i].xhi = x[i] >> 8;

irdata[i].y = u8(y[i]);
irdata[i].y = static_cast<u8>(y[i]);
irdata[i].yhi = y[i] >> 8;

irdata[i].size = 10;
Expand Down Expand Up @@ -729,6 +729,8 @@ void Wiimote::Update()
}
}
}

Movie::CallWiiInputManip(data, rptf, m_index);
}
if (NetPlay::IsNetPlayRunning())
{
Expand Down
28 changes: 19 additions & 9 deletions Source/Core/Core/Movie.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,8 @@ static std::string tmpStateFilename = File::GetUserPath(D_STATESAVES_IDX) + "dtm

static std::string s_InputDisplay[8];

static ManipFunction mfunc = nullptr;
static GCManipFunction gcmfunc = nullptr;
static WiiManipFunction wiimfunc = nullptr;

static void EnsureTmpInputSize(size_t bound)
{
Expand Down Expand Up @@ -630,9 +631,9 @@ static void SetWiiInputDisplayString(int remoteID, u8* const data, const Wiimote

if (irData)
{
u16 x = irData[0] | ((irData[2] >> 4 & 0x3) << 8);
u16 y = irData[1] | ((irData[2] >> 2 & 0x3) << 8);
std::string ir = StringFromFormat(" IR:%d,%d", x, y);
u16 x = 1023 - (irData[0] | ((irData[2] >> 4 & 0x3) << 8));
u16 y = irData[1] | ((irData[2] >> 6 & 0x3) << 8);
std::string ir = StringFromFormat(" IR:%d,%d", x,y);
s_InputDisplay[controllerID].append(ir);
}

Expand Down Expand Up @@ -1245,15 +1246,24 @@ void SaveRecording(const std::string& filename)
Core::DisplayMessage(StringFromFormat("Failed to save %s", filename.c_str()), 2000);
}

void SetInputManip(ManipFunction func)
void SetGCInputManip(GCManipFunction func)
{
mfunc = func;
gcmfunc = func;
}
void SetWiiInputManip(WiiManipFunction func)
{
wiimfunc = func;
}

void CallInputManip(GCPadStatus* PadStatus, int controllerID)
void CallGCInputManip(GCPadStatus* PadStatus, int controllerID)
{
if (gcmfunc)
(*gcmfunc)(PadStatus, controllerID);
}
void CallWiiInputManip(u8* data, WiimoteEmu::ReportFeatures rptf, int controllerID)
{
if (mfunc)
(*mfunc)(PadStatus, controllerID);
if (wiimfunc)
(*wiimfunc)(data, rptf, controllerID);
}

void SetGraphicsConfig()
Expand Down
9 changes: 6 additions & 3 deletions Source/Core/Core/Movie.h
Original file line number Diff line number Diff line change
Expand Up @@ -176,8 +176,11 @@ void CheckWiimoteStatus(int wiimote, u8* data, const struct WiimoteEmu::ReportFe
std::string GetInputDisplay();

// Done this way to avoid mixing of core and gui code
typedef void(*ManipFunction)(GCPadStatus*, int);
typedef void(*GCManipFunction)(GCPadStatus*, int);
typedef void(*WiiManipFunction)(u8*, WiimoteEmu::ReportFeatures, int);

void SetInputManip(ManipFunction);
void CallInputManip(GCPadStatus* PadStatus, int controllerID);
void SetGCInputManip(GCManipFunction);
void SetWiiInputManip(WiiManipFunction);
void CallGCInputManip(GCPadStatus* PadStatus, int controllerID);
void CallWiiInputManip(u8* core, WiimoteEmu::ReportFeatures rptf, int controllerID);
}
21 changes: 13 additions & 8 deletions Source/Core/DolphinWX/Frame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -398,12 +398,11 @@ CFrame::CFrame(wxFrame* parent,
m_LogWindow->Hide();
m_LogWindow->Disable();

g_TASInputDlg[0] = new TASInputDlg(this);
g_TASInputDlg[1] = new TASInputDlg(this);
g_TASInputDlg[2] = new TASInputDlg(this);
g_TASInputDlg[3] = new TASInputDlg(this);
for (int i = 0; i < 8; ++i)
g_TASInputDlg[i] = new TASInputDlg(this);

Movie::SetInputManip(TASManipFunction);
Movie::SetGCInputManip(GCTASManipFunction);
Movie::SetWiiInputManip(WiiTASManipFunction);

State::SetOnAfterLoadCallback(OnAfterLoadCallback);
Core::SetOnStoppedCallback(OnStoppedCallback);
Expand Down Expand Up @@ -974,15 +973,21 @@ void OnStoppedCallback()
}
}

void TASManipFunction(GCPadStatus* PadStatus, int controllerID)
void GCTASManipFunction(GCPadStatus* PadStatus, int controllerID)
{
if (main_frame)
main_frame->g_TASInputDlg[controllerID]->GetValues(PadStatus, controllerID);
main_frame->g_TASInputDlg[controllerID]->GetValues(PadStatus);
}

void WiiTASManipFunction(u8* data, WiimoteEmu::ReportFeatures rptf, int controllerID)
{
if (main_frame)
main_frame->g_TASInputDlg[controllerID + 4]->GetValues(data, rptf);
}

bool TASInputHasFocus()
{
for (int i = 0; i < 4; i++)
for (int i = 0; i < 8; ++i)
{
if (main_frame->g_TASInputDlg[i]->TASHasFocus())
return true;
Expand Down
6 changes: 4 additions & 2 deletions Source/Core/DolphinWX/Frame.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include "Common/Event.h"
#include "DolphinWX/Globals.h"
#include "InputCommon/GCPadStatus.h"
#include "Core/HW/WiimoteEmu/WiimoteEmu.h"

#if defined(HAVE_X11) && HAVE_X11
#include "DolphinWX/X11Utils.h"
Expand Down Expand Up @@ -98,7 +99,7 @@ class CFrame : public CRenderFrame
CCodeWindow* g_pCodeWindow;
NetPlaySetupDiag* g_NetPlaySetupDiag;
wxCheatsWindow* g_CheatsWindow;
TASInputDlg* g_TASInputDlg[4];
TASInputDlg* g_TASInputDlg[8];

void InitBitmaps();
void DoPause();
Expand Down Expand Up @@ -346,6 +347,7 @@ void OnAfterLoadCallback();
void OnStoppedCallback();

// For TASInputDlg
void TASManipFunction(GCPadStatus* PadStatus, int controllerID);
void GCTASManipFunction(GCPadStatus* PadStatus, int controllerID);
void WiiTASManipFunction(u8* data, WiimoteEmu::ReportFeatures rptf, int controllerID);
bool TASInputHasFocus();
extern int g_saveSlot;
9 changes: 8 additions & 1 deletion Source/Core/DolphinWX/FrameTools.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -699,11 +699,18 @@ void CFrame::OnTASInput(wxCommandEvent& event)

for (int i = 0; i < 4; ++i)
{
if (SConfig::GetInstance().m_SIDevice[i] == SIDEVICE_GC_CONTROLLER || SConfig::GetInstance().m_SIDevice[i] == SIDEVICE_GC_TARUKONGA)
if (SConfig::GetInstance().m_SIDevice[i] != SIDEVICE_NONE && SConfig::GetInstance().m_SIDevice[i] != SIDEVICE_GC_GBA)
{
g_TASInputDlg[i]->CreateGCLayout();
g_TASInputDlg[i]->Show(true);
g_TASInputDlg[i]->SetTitle("TAS Input - Controller " + number[i]);
}
if (g_wiimote_sources[i] == WIIMOTE_SRC_EMU && !(Core::IsRunning() && !SConfig::GetInstance().m_LocalCoreStartupParameter.bWii))
{
g_TASInputDlg[i+4]->CreateWiiLayout();
g_TASInputDlg[i+4]->Show(true);
g_TASInputDlg[i+4]->SetTitle("TAS Input - Wiimote " + number[i]);
}
}
}

Expand Down

0 comments on commit 6b8823d

Please sign in to comment.