Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add wiimote tas input. #1213

Merged
merged 1 commit into from
Oct 8, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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
26 changes: 18 additions & 8 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 @@ -631,8 +632,8 @@ 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 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 @@ -23,6 +23,7 @@

#include "Common/CommonTypes.h"
#include "Common/Event.h"
#include "Core/HW/WiimoteEmu/WiimoteEmu.h"
#include "DolphinWX/Globals.h"
#include "InputCommon/GCPadStatus.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