[Scummvm-cvs-logs] SF.net SVN: scummvm:[55601] scummvm/trunk/engines/parallaction/dialogue.cpp

peres001 at users.sourceforge.net peres001 at users.sourceforge.net
Sat Jan 29 08:20:26 CET 2011


Revision: 55601
          http://scummvm.svn.sourceforge.net/scummvm/?rev=55601&view=rev
Author:   peres001
Date:     2011-01-29 07:20:26 +0000 (Sat, 29 Jan 2011)

Log Message:
-----------
PARALLACTION: encapsulate dialogue state changes to aid debugging.

Modified Paths:
--------------
    scummvm/trunk/engines/parallaction/dialogue.cpp

Modified: scummvm/trunk/engines/parallaction/dialogue.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/dialogue.cpp	2011-01-28 20:52:52 UTC (rev 55600)
+++ scummvm/trunk/engines/parallaction/dialogue.cpp	2011-01-29 07:20:26 UTC (rev 55601)
@@ -53,15 +53,7 @@
 
 
 class DialogueManager {
-
-	enum {
-		RUN_QUESTION,
-		RUN_ANSWER,
-		NEXT_QUESTION,
-		NEXT_ANSWER,
-		DIALOGUE_OVER
-	} _state;
-
+	
 	Parallaction	*_vm;
 	Dialogue		*_dialogue;
 
@@ -105,6 +97,17 @@
 	CommandList *_cmdList;
 
 protected:
+	enum DialogueState {
+		DIALOGUE_START,
+		RUN_QUESTION,
+		RUN_ANSWER,
+		NEXT_QUESTION,
+		NEXT_ANSWER,
+		DIALOGUE_OVER
+	} _state;
+	
+	void transitionToState(DialogueState newState);
+	
 	bool displayQuestion();
 	bool displayAnswers();
 	bool testAnswerFlags(Answer *a);
@@ -134,7 +137,8 @@
 void DialogueManager::start() {
 	assert(_dialogue);
 	_q = _dialogue->_questions[0];
-	_state = displayQuestion() ? RUN_QUESTION : NEXT_ANSWER;
+	_state = DIALOGUE_START;
+	transitionToState(displayQuestion() ? RUN_QUESTION : NEXT_ANSWER);
 }
 
 
@@ -145,7 +149,23 @@
 	_z.reset();
 }
 
+void DialogueManager::transitionToState(DialogueState newState) {
+	static const char *dialogueStates[] = {
+		"start",
+		"runquestion",
+		"runanswer",
+		"nextquestion",
+		"nextanswer",
+		"over"
+	};
+	
+	if (_state != newState) {
+		debugC(3, kDebugDialogue, "DialogueManager moved to state '%s'", dialogueStates[newState]);
+	}
 
+	_state = newState;
+}
+											
 bool DialogueManager::testAnswerFlags(Answer *a) {
 	uint32 flags = _vm->getLocationFlags();
 	if (a->_yesFlags & kFlagsGlobal)
@@ -233,21 +253,17 @@
 }
 
 void DialogueManager::runQuestion() {
-	debugC(9, kDebugDialogue, "runQuestion\n");
-
 	if (_mouseButtons == kMouseLeftUp) {
 		_vm->_gfx->freeDialogueObjects();
-		_state = NEXT_ANSWER;
+		transitionToState(NEXT_ANSWER);
 	}
 
 }
 
 
 void DialogueManager::nextAnswer() {
-	debugC(9, kDebugDialogue, "nextAnswer\n");
-
 	if (_q->_answers[0] == NULL) {
-		_state = DIALOGUE_OVER;
+		transitionToState(DIALOGUE_OVER);
 		return;
 	}
 
@@ -255,35 +271,31 @@
 		addVisibleAnswers(_q);
 		if (_numVisAnswers) {
 			_answerId = _visAnswers[0]._index;
-			_state = NEXT_QUESTION;
+			transitionToState(NEXT_QUESTION);
 		} else {
-			_state = DIALOGUE_OVER;
+			transitionToState(DIALOGUE_OVER);
 		}
 		return;
 	}
 
-	_state = displayAnswers() ? RUN_ANSWER : DIALOGUE_OVER;
+	transitionToState(displayAnswers() ? RUN_ANSWER : DIALOGUE_OVER);
 }
 
 void DialogueManager::runAnswer() {
-	debugC(9, kDebugDialogue, "runAnswer\n");
-
 	_answerId = selectAnswer();
 	if (_answerId != -1) {
 		_cmdList = &_q->_answers[_answerId]->_commands;
 		_vm->_gfx->freeDialogueObjects();
-		_state = NEXT_QUESTION;
+		transitionToState(NEXT_QUESTION);
 	}
 }
 
 void DialogueManager::nextQuestion() {
-	debugC(9, kDebugDialogue, "nextQuestion\n");
-
 	_q = _dialogue->findQuestion(_q->_answers[_answerId]->_followingName);
 	if (_q == 0) {
-		_state = DIALOGUE_OVER;
+		transitionToState(DIALOGUE_OVER);
 	} else {
-		_state = displayQuestion() ? RUN_QUESTION : NEXT_ANSWER;
+		transitionToState(displayQuestion() ? RUN_QUESTION : NEXT_ANSWER);
 	}
 }
 
@@ -508,7 +520,7 @@
 	if (_input->_inputMode != Input::kInputModeDialogue) {
 		return;
 	}
-
+	
 	_dialogueMan->run();
 
 	if (_dialogueMan->isOver()) {


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list