[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
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/sound fmopl.h,1.14,1.15 fmopl.cpp,1.25,1.26
- Next message: [Scummvm-cvs-logs] CVS: scummvm/scumm scumm.h,1.525,1.526 util.cpp,2.2,2.3 util.h,2.2,2.3
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
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
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/sound fmopl.h,1.14,1.15 fmopl.cpp,1.25,1.26
- Next message: [Scummvm-cvs-logs] CVS: scummvm/scumm scumm.h,1.525,1.526 util.cpp,2.2,2.3 util.h,2.2,2.3
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Scummvm-git-logs
mailing list