Просмотр исходного кода

Fixed some gamepad input issues, fixed remote debugger in the IDE being overwhelmed by debug information upon crash

Ivan Safrin 11 лет назад
Родитель
Сommit
d40a6f7c1e

+ 1 - 0
Core/Contents/Include/PolyCocoaCore.h

@@ -89,6 +89,7 @@ namespace Polycode {
 		public:
 			GamepadDeviceEntry() {
 				numAxes = 0;
+                numButtons = 0;
 			}
 			vector<HIDGamepadAxis> axisElements;
 			vector<HIDGamepadButton> buttonElements;			

+ 11 - 5
Core/Contents/Source/PolyCocoaCore.mm

@@ -809,6 +809,9 @@ CFArrayRef elements;
 	GamepadDeviceEntry *entry = new GamepadDeviceEntry();
 	entry->device = device;
 	entry->input  = core->getInput();
+    entry->numButtons = 0;
+    entry->numAxes = 0;
+    
 	entry->deviceID = core->nextDeviceID++;
 	core->gamepads.push_back(entry);	
 	core->getInput()->addJoystick(entry->deviceID);
@@ -864,6 +867,13 @@ static void onDeviceRemoved(void * context, IOReturn result, void * sender, IOHI
 void CocoaCore::shutdownGamepad() {
 	if (hidManager != NULL) {
 		
+        
+        for (int i = 0; i < gamepads.size(); i++) {
+            IOHIDDeviceRegisterInputValueCallback(gamepads[i]->device, NULL, NULL);
+            delete gamepads[i];
+        }
+        
+        
 		IOHIDManagerRegisterDeviceMatchingCallback(hidManager, NULL, NULL);
 		IOHIDManagerRegisterDeviceRemovalCallback(hidManager, NULL, NULL);		
 		
@@ -871,11 +881,7 @@ void CocoaCore::shutdownGamepad() {
 		IOHIDManagerClose(hidManager, 0);
 		CFRelease(hidManager);
 		hidManager = NULL;
-		
-		for (int i = 0; i < gamepads.size(); i++) {
-			IOHIDDeviceRegisterInputValueCallback(gamepads[i]->device, NULL, NULL);		
-			delete gamepads[i];
-		}
+
 		
 	}
 }

+ 1 - 1
Core/Contents/Source/PolyCoreInput.cpp

@@ -63,7 +63,7 @@ namespace Polycode {
 	}
 	
 	JoystickInfo *CoreInput::getJoystickInfoByIndex(unsigned int index) {
-        if(index > joysticks.size()-1) {
+        if(index > joysticks.size()-1 || joysticks.size() == 0) {
             return NULL;
         }
 		return &joysticks[index];

+ 3 - 0
IDE/Contents/Include/PolycodeRemoteDebugger.h

@@ -53,6 +53,7 @@ class PolycodeRemoteDebugger : EventHandler {
 		void injectCode(String code);
 		
 		void handleEvent(Event *event);
+        void resetDebugger();
 			
 		bool isConnected();
 		
@@ -70,6 +71,8 @@ class PolycodeRemoteDebugger : EventHandler {
 	protected:
 		
 		bool hasErred;
+    
+        std::vector<RemoteBacktraceData> receivedBacktraceData;
 		
 		PolycodeProjectManager *projectManager;
 		

+ 3 - 0
IDE/Contents/Source/PolycodeIDEApp.cpp

@@ -476,6 +476,9 @@ void PolycodeIDEApp::doRunProject() {
 	printf("Running project...\n");
 	stopProject();
 
+    debugger->resetDebugger();
+    frame->console->clearBacktraces();
+    
 	frame->showConsole();
 
 	String outPath = PolycodeToolLauncher::generateTempPath(projectManager->getActiveProject()) + ".polyapp";

+ 18 - 2
IDE/Contents/Source/PolycodeRemoteDebugger.cpp

@@ -55,6 +55,11 @@ void PolycodeRemoteDebugger::Disconnect() {
 	debuggerClients.clear();
 }
 
+void PolycodeRemoteDebugger::resetDebugger() {
+    receivedBacktraceData.clear();
+    hasErred = false;
+}
+
 void PolycodeRemoteDebugger::handleEvent(Event *event) {
 	
 	if(event->getDispatcher() == server) {
@@ -81,16 +86,27 @@ void PolycodeRemoteDebugger::handleEvent(Event *event) {
 							
 							CoreServices::getInstance()->getCore()->makeApplicationMain();
 						}
-						//							hasErred = true;
+                        hasErred = true;
 					}
 						break;			
 					case EVENT_DEBUG_BACKTRACE_INFO:
 					{			
 						
-						RemoteBacktraceData *data = (RemoteBacktraceData*)serverEvent->data;			
+                        
+						RemoteBacktraceData *data = (RemoteBacktraceData*)serverEvent->data;
+                        
+                        for(int i=0;i <receivedBacktraceData.size(); i++) {
+                            if(receivedBacktraceData[i].lineNumber == data->lineNumber && String(receivedBacktraceData[i].fileName) == String(data->fileName)) {
+                                return;
+                            }
+                        }
+                        
+                        
 						PolycodeConsole::print("In file "+String(data->fileName)+" on line "+String::IntToString(data->lineNumber)+"\n");
 						
 						PolycodeConsole::addBacktrace(String(data->fileName), data->lineNumber, projectManager->getActiveProject());
+                        
+                        receivedBacktraceData.push_back(*data);
 						
 					}
 						break;