Browse Source

Fixed core update pause causing the IDE to not update when debugger connects

Ivan Safrin 13 years ago
parent
commit
ca117d36ba

+ 1 - 1
Core/Contents/Include/PolyCoreServices.h

@@ -64,7 +64,7 @@ namespace Polycode {
 			*/			
 			Renderer *getRenderer();
 			
-			void Update(int elapsed);
+			void Update(int elapsed, bool updateRenderer);
 			
 			void setCore(Core *core);
 			

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

@@ -538,7 +538,11 @@ bool CocoaCore::Update() {
 	
 	if(!paused) {	
 		renderer->BeginRender();
-		updateCore();
+	}
+	
+	updateCore();
+		
+	if(!paused) {		
 		renderer->EndRender();
 		[context flushBuffer];
 	}

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

@@ -187,7 +187,7 @@ namespace Polycode {
 		if(elapsed > 1000)
 			elapsed = 1000;
 			
-		services->Update(elapsed);
+		services->Update(elapsed, !paused);
 		
 		if(frameTicks-lastFPSTicks >= 1000) {
 			fps = frames;

+ 7 - 2
Core/Contents/Source/PolyCoreServices.cpp

@@ -205,16 +205,19 @@ Renderer *CoreServices::getRenderer() {
 	return renderer;
 }
 
-void CoreServices::Update(int elapsed) {
+void CoreServices::Update(int elapsed, bool updateRenderer) {
 	
 	for(int i=0; i < updateModules.size(); i++) {
 		updateModules[i]->Update(elapsed);
 	}
 
 	timerManager->Update();
+	
 	tweenManager->Update();
-	materialManager->Update(elapsed);
+	
+	if(updateRenderer) {
 		
+	materialManager->Update(elapsed);	
 	if(drawScreensFirst) {
 		if(renderer->doClearBuffer)
 			renderer->clearScreen();	
@@ -232,6 +235,8 @@ void CoreServices::Update(int elapsed) {
 			renderer->clearScreen();		
 		sceneManager->Update();
 		screenManager->Update();	
+	}
+	
 	}	
 }
 

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

@@ -93,6 +93,9 @@ public:
 	
 	void refreshProject();	
 	
+	bool needsRedraw;
+	bool lastConnected;
+	
 	const static int EVENT_SHOW_MENU = 1;
 	
 	Core *core;	

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

@@ -160,7 +160,8 @@ PolycodeIDEApp::PolycodeIDEApp(PolycodeView *view) : EventDispatcher() {
 #endif
 	core->setVideoMode(1100, 700, false, true, 0, 0);
 
-
+	needsRedraw = false;
+	lastConnected = false;
 }
 
 void PolycodeIDEApp::renameFile() {
@@ -679,12 +680,17 @@ bool PolycodeIDEApp::Update() {
 		runProject();
 	}
 
+	if(lastConnected != debugger->isConnected()) {
+		needsRedraw = true;
+		lastConnected = debugger->isConnected();
+	}
+
 	if(debugger->isConnected()) {
 			frame->stopButton->visible = true;
 			frame->stopButton->enabled = true;			
 			
 			frame->playButton->visible = false;
-			frame->playButton->enabled = false;			
+			frame->playButton->enabled = false;						
 			
 	} else {
 			frame->stopButton->visible = false;
@@ -693,6 +699,7 @@ bool PolycodeIDEApp::Update() {
 			frame->playButton->visible = true;
 			frame->playButton->enabled = true;				
 	}
+	
 
 	if(projectManager->getProjectCount() == 1) {
 		projectManager->setActiveProject(projectManager->getProjectByIndex(0));
@@ -708,6 +715,16 @@ bool PolycodeIDEApp::Update() {
 		frame->mainSizer->enabled = false;		
 	}
 
-	return core->Update();
+	// ugly hack to update the screen when debugger connects
+	bool oldPaused = core->paused;
+	if(needsRedraw) {
+		core->paused = false;
+	}
+	bool retStat = core->Update();
+	if(oldPaused == true && needsRedraw) {
+		core->paused = true;
+		needsRedraw = false;
+	}
+	return retStat;
 }
 

+ 1 - 1
IDE/Contents/Source/PolycodeRemoteDebugger.cpp

@@ -127,7 +127,7 @@ void PolycodeRemoteDebugger::handleEvent(Event *event) {
 				newClient->client = serverEvent->client;
 				newClient->client->addEventListener(this, ServerClientEvent::EVENT_CLIENT_DATA);
 				PolycodeConsole::print("Remote debugger client connected...\n");printf("CLIENT CONNECTED\n");		
-				debuggerClients.push_back(newClient);		
+				debuggerClients.push_back(newClient);				
 			}
 			break;
 		}