[Scummvm-cvs-logs] SF.net SVN: scummvm:[45719] scummvm/trunk/engines/teenagent

megath at users.sourceforge.net megath at users.sourceforge.net
Sat Nov 7 10:40:11 CET 2009


Revision: 45719
          http://scummvm.svn.sourceforge.net/scummvm/?rev=45719&view=rev
Author:   megath
Date:     2009-11-07 09:40:11 +0000 (Sat, 07 Nov 2009)

Log Message:
-----------
added default delays for the messages

Modified Paths:
--------------
    scummvm/trunk/engines/teenagent/scene.cpp
    scummvm/trunk/engines/teenagent/scene.h

Modified: scummvm/trunk/engines/teenagent/scene.cpp
===================================================================
--- scummvm/trunk/engines/teenagent/scene.cpp	2009-11-07 09:19:49 UTC (rev 45718)
+++ scummvm/trunk/engines/teenagent/scene.cpp	2009-11-07 09:40:11 UTC (rev 45719)
@@ -299,6 +299,7 @@
 	case Common::EVENT_RBUTTONDOWN:
 		if (!message.empty()) {
 			message.clear();
+			message_timer = 0;
 			nextEvent();
 			return true;
 		}
@@ -309,6 +310,7 @@
 			if (intro) {
 				intro = false;
 				message.clear();
+				message_timer = 0;
 				events.clear();
 				sounds.clear();
 				current_event.clear();
@@ -323,6 +325,7 @@
 		
 			if (!message.empty()) {
 				message.clear();
+				message_timer = 0;
 				nextEvent();
 				return true;
 			}
@@ -342,6 +345,13 @@
 	do {
 		restart = false;
 		busy = processEventQueue();
+		if (!message.empty() && message_timer != 0) {
+			if (--message_timer == 0) {
+				message.clear();
+				nextEvent();
+				continue;
+			}
+		}
 
 		if (current_event.type == SceneEvent::kCreditsMessage) {
 			system->fillScreen(0);
@@ -549,6 +559,7 @@
 		case SceneEvent::kCreditsMessage:
 		case SceneEvent::kMessage: {
 				message = current_event.message;
+				message_timer = messageDuration(message);
 				Common::Point p(
 					(actor_animation_position.left + actor_animation_position.right) / 2, 
 					actor_animation_position.top 
@@ -677,16 +688,32 @@
 	return position;
 }
 
+uint Scene::messageDuration(const Common::String &str) {
+	uint words = 1;
+	for(uint i = 0; i < str.size(); ++i) {
+		if (str[i] == ' ' || str[i] == '\n')
+			++words;
+	}
+	words *= 7; //add text speed here
+	if (words < 15)
+		words = 15;
+
+	return words;
+}
+
+
 void Scene::displayMessage(const Common::String &str, byte color) {
 	//assert(!str.empty());
 	//debug(0, "displayMessage: %s", str.c_str());
 	message = str;
 	message_pos = messagePosition(str, position);
 	message_color = color;
+	message_timer = messageDuration(message);
 }
 
 void Scene::clear() {
 	message.clear();
+	message_timer = 0;
 	events.clear();
 	current_event.clear();
 	for(int i = 0; i < 4; ++i) {

Modified: scummvm/trunk/engines/teenagent/scene.h
===================================================================
--- scummvm/trunk/engines/teenagent/scene.h	2009-11-07 09:19:49 UTC (rev 45718)
+++ scummvm/trunk/engines/teenagent/scene.h	2009-11-07 09:40:11 UTC (rev 45719)
@@ -142,6 +142,7 @@
 	byte palette[768];
 	void setPalette(OSystem *system, const byte *palette, unsigned mul = 1);
 	static Common::Point messagePosition(const Common::String &str, Common::Point position);
+	static uint messageDuration(const Common::String &str);
 
 	bool processEventQueue();
 	inline bool nextEvent() {
@@ -170,6 +171,7 @@
 	Common::String message;
 	Common::Point message_pos;
 	byte message_color;
+	uint message_timer;
 
 	typedef Common::List<SceneEvent> EventList;
 	EventList events;


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