[Scummvm-cvs-logs] CVS: scummvm/saga interface.cpp,1.57,1.58 interface.h,1.25,1.26

Eugene Sandulenko sev at users.sourceforge.net
Mon Jan 10 14:52:02 CET 2005


Update of /cvsroot/scummvm/scummvm/saga
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14800

Modified Files:
	interface.cpp interface.h 
Log Message:
Untested converse. Drawing isn't possible due to lack of needed information
in ITE_interface structure.


Index: interface.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/interface.cpp,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -d -r1.57 -r1.58
--- interface.cpp	10 Jan 2005 07:42:43 -0000	1.57
+++ interface.cpp	10 Jan 2005 22:51:01 -0000	1.58
@@ -791,4 +791,141 @@
 void Interface::drawVerb(int verb, int state) {
 }
 
+// Converse stuff
+void Interface::converseClear(void) {
+	for (int i = 0; i < CONVERSE_MAX_TEXTS; i++) {
+		if (_converseText[i].text)
+			free(_converseText[i].text);
+		_converseText[i].text = NULL;
+		_converseText[i].stringNum = -1;
+		_converseText[i].replyId = 0;
+		_converseText[i].replyFlags = 0;
+		_converseText[i].replyBit = 0;
+	}
+
+	_converseTextCount = 0;
+	_converseStrCount = 0;
+	_converseStartPos = 0;
+	_converseEndPos = 0;
+	_conversePos = -1;
+}
+
+bool Interface::converseAddText(const char *text, int replyId, byte replyFlags, int replyBit) {
+	int count = 0;         // count how many pieces of text per string
+	char temp[128];
+
+	assert(strlen(text) < 128);
+
+	strncpy(temp, text, 128);
+
+	while (1) {
+		int i;
+		int len = strlen(temp);
+
+		for (i = len; i >= 0; i--) {
+			byte c = temp[i];
+
+			if ((c == ' ' || c == '\0')
+				&& _vm->_font->getStringWidth(SMALL_FONT_ID, temp, i, 0) 
+					<= CONVERSE_MAX_TEXT_WIDTH)
+				break;
+		}
+		if (i < 0) 
+			return true;
+
+		if (_converseTextCount == CONVERSE_MAX_TEXTS)
+			return true;
+
+		_converseText[_converseTextCount].text = (char *)malloc(i + 1);
+		strncpy(_converseText[_converseTextCount].text, temp, i);
+
+		_converseText[_converseTextCount].text[i] = 0;
+		_converseText[_converseTextCount].textNum = count;
+		_converseText[_converseTextCount].stringNum =  _converseStrCount;
+		_converseText[_converseTextCount].replyId =  replyId;
+		_converseText[_converseTextCount].replyFlags =  replyFlags;
+		_converseText[_converseTextCount].replyBit =  replyBit;
+
+		_converseTextCount++;
+		count++;
+
+		if (len == i) 
+			break;
+
+		strncpy(temp, &temp[i + 1], len - i);
+	}
+
+	_converseStrCount++;
+
+	return false;
+}
+
+enum converseColors {
+	kColorBrightWhite = 0x2,
+	kColorDarkGrey = 0xa,
+	kColorGrey = 0xb,
+	kColorGreen = 0xba,
+	kColorBlack = 0xf,
+	kColorBlue = 0x93
+};
+
+void Interface::converseDisplayText(int pos) {
+	int end;
+
+	if (pos >= _converseTextCount)
+		pos = _converseTextCount - 1;
+	if (pos < 0)
+		pos = 0;
+
+	_converseStartPos = pos;
+
+	end = _converseTextCount - CONVERSE_TEXT_LINES;
+
+	if (end < 0)
+		end = 0;
+
+	_converseEndPos = end;
+
+	converseDisplayTextLine(kColorBrightWhite, false, true);
+}
+
+
+void Interface::converseSetTextLines(int row, int textcolor, bool btnDown) {
+	_conversePos = row + _converseStartPos;
+	if (_conversePos >= _converseTextCount)
+		_conversePos = -1;
+
+	converseDisplayTextLine(textcolor, btnDown, false);
+}
+
+void Interface::converseDisplayTextLine(int textcolor, bool btnDown, bool rebuild) {
+}
+
+void Interface::converseChangePos(int chg) {
+	if ((chg < 0 && _converseStartPos + chg >= 0) ||
+		(chg > 0 && _converseStartPos  < _converseEndPos)) {
+		_converseStartPos += chg;
+		converseDisplayTextLine(kColorBlue, false, true);
+	}
+}
+
+void Interface::converseSetPos(void) {
+	Converse *ct;
+	int selection = 1; // = keyStroke - '1'; // FIXME
+
+	if (selection >= _converseTextCount)
+		return;
+
+	// FIXME: wait until Andrew defines proper color
+	converseSetTextLines(selection, kColorBrightWhite, false);
+
+	ct = &_converseText[_conversePos];
+	// FIXME: TODO: finish dialog thread
+
+	// FIXME: TODO: Puzzle
+
+	_conversePos = -1;
+}
+
+
 } // End of namespace Saga

Index: interface.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/interface.h,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -d -r1.25 -r1.26
--- interface.h	9 Jan 2005 23:41:21 -0000	1.25
+++ interface.h	10 Jan 2005 22:51:01 -0000	1.26
@@ -101,6 +101,12 @@
 #define IHNM_INVENTORY_XSPACING 0
 #define IHNM_INVENTORY_YSPACING 0
 
+// Converse-specific stuff
+#define CONVERSE_MAX_TEXTS      64
+#define CONVERSE_MAX_TEXT_WIDTH (256 - 60)
+#define CONVERSE_TEXT_HEIGHT	10
+#define CONVERSE_TEXT_LINES     4
+
 enum PANEL_MODES {
 	kPanelNull,
 	kPanelMain,
@@ -201,6 +207,15 @@
 	int s_verb;
 };
 
+struct Converse {
+	char *text;
+	int stringNum;
+	int textNum;
+	int replyId;
+	int replyFlags;
+	int replyBit;
+};
+
 class Interface {
 public:
 	Interface(SagaEngine *vm);
@@ -237,6 +252,18 @@
 	int handlePlayfieldClick(SURFACE *ds, const Point& imousePt);
 	void drawVerb(int verb, int state);
 
+public:
+	void converseClear(void);
+	bool converseAddText(const char *text, int replyId, byte replyFlags, int replyBit);
+	void converseDisplayText(int pos);
+	void converseSetTextLines(int row, int textcolor, bool btnDown);
+	void converseChangePos(int chg);
+	void converseSetPos(void);
+
+private:
+	void converseDisplayTextLine(int textcolor, bool btnUp, bool rebuild);
+
+
 private:
 	SagaEngine *_vm;
 
@@ -261,6 +288,13 @@
 	uint16 *_inventory;
 	int _inventorySize;
 	byte _inventoryCount;
+
+	Converse _converseText[CONVERSE_MAX_TEXTS];
+	int _converseTextCount;
+	int _converseStrCount;
+	int _converseStartPos;
+	int _converseEndPos;
+	int _conversePos;
 };
 
 } // End of namespace Saga





More information about the Scummvm-git-logs mailing list