From eb16c51d5f07661ac563a6214b270c2758f0d698 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Fri, 1 Jan 2010 02:19:19 +0000 Subject: [PATCH] fix crash when switching to real wiimote with "connect real wiimote" already enabled. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4767 8ced0084-cf51-0410-be5f-012b33b47a6e --- .../Plugin_Wiimote/Src/wiimote_real.cpp | 35 +++++++++---------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/Source/Plugins/Plugin_Wiimote/Src/wiimote_real.cpp b/Source/Plugins/Plugin_Wiimote/Src/wiimote_real.cpp index 17a90b9418..ed49500edd 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/wiimote_real.cpp +++ b/Source/Plugins/Plugin_Wiimote/Src/wiimote_real.cpp @@ -271,7 +271,8 @@ void SendAcc(u8 _ReportID) void ClearEvents() { for (int i = 0; i < g_NumberOfWiiMotes; i++) - g_WiiMotes[i]->ClearEvents(); + if (g_WiimoteInUse[i]) + g_WiiMotes[i]->ClearEvents(); } // Flash lights, and if connecting, also rumble @@ -296,7 +297,7 @@ void FlashLights(bool Connect) } } -int Initialize() +int Initialize() // None of this code is intelligible, oh well... { // Return if already initialized if (g_RealWiiMoteInitialized) @@ -362,21 +363,14 @@ int Initialize() FlashLights(true); // Create Wiimote classes - int current_number = 0; - for (int i = 0; i < g_NumberOfWiiMotes; i++) { - - // Determine the number of the current WiiMote - for (; current_number < MAX_WIIMOTES; current_number++) - { - if (g_WiimoteInUse[current_number] == true) - continue; - if (WiiMoteEmu::WiiMapping[current_number].Source < 0) - break; - } - g_WiiMotes[current_number] = new CWiiMote(current_number, g_WiiMotesFromWiiUse[i]); - g_WiimoteInUse[current_number] = true; - switch (current_number) + for (int i = 0; i < g_NumberOfWiiMotes; i++) + { + // Why the fuck are there 2 values for "real wiimote"??? NOBODY KNOWS + if ((WiiMoteEmu::WiiMapping[i].Source == -1) || (WiiMoteEmu::WiiMapping[i].Source == 2)) { + g_WiimoteInUse[i] = true; + switch (i) + { case 0: wiiuse_set_leds(g_WiiMotesFromWiiUse[i], WIIMOTE_LED_1); break; @@ -387,11 +381,14 @@ int Initialize() wiiuse_set_leds(g_WiiMotesFromWiiUse[i], WIIMOTE_LED_3); break; case 3: - default: - wiiuse_set_leds(g_WiiMotesFromWiiUse[i], WIIMOTE_LED_NONE); + wiiuse_set_leds(g_WiiMotesFromWiiUse[i], WIIMOTE_LED_4); break; + default: + PanicAlert("Trying to create real wiimote %i WTF", i); + break; + } + g_WiiMotes[i] = new CWiiMote(i, g_WiiMotesFromWiiUse[i]); } - DEBUG_LOG(WIIMOTE, "Real WiiMote allocated as WiiMote #%i", current_number); } // Create a new thread and start listening for Wiimote data