From cdc6bc421bef6ed0119819a92fba1b2b9283ce17 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Tue, 20 Dec 2011 09:44:00 +0100 Subject: DREAMWEB: Turn RectWithCallback into template Also moves checkCoords to DreamBase, adding a nasty cast to it. This is a temporary HACK, which allows moving functions that use checkCoords to DreamBase one at a time, instead of all at once (and at the same time as checkCoords). This can be undone once everything using checkCoords has been moved to DreamBase. --- engines/dreamweb/dreambase.h | 1 + engines/dreamweb/keypad.cpp | 2 +- engines/dreamweb/object.cpp | 6 +++--- engines/dreamweb/saveload.cpp | 8 ++++---- engines/dreamweb/structs.h | 3 ++- engines/dreamweb/stubs.cpp | 25 +++++++++++++------------ engines/dreamweb/stubs.h | 2 +- engines/dreamweb/use.cpp | 2 +- 8 files changed, 26 insertions(+), 23 deletions(-) (limited to 'engines') diff --git a/engines/dreamweb/dreambase.h b/engines/dreamweb/dreambase.h index 45560dbc35..f2a4b70209 100644 --- a/engines/dreamweb/dreambase.h +++ b/engines/dreamweb/dreambase.h @@ -457,6 +457,7 @@ public: void setAllChanges(); void restoreAll(); void redrawMainScrn(); + template void checkCoords(const RectWithCallback *rectWithCallbacks); // from use.cpp void placeFreeObject(uint8 index); diff --git a/engines/dreamweb/keypad.cpp b/engines/dreamweb/keypad.cpp index 43f6749cad..b3ed844079 100644 --- a/engines/dreamweb/keypad.cpp +++ b/engines/dreamweb/keypad.cpp @@ -93,7 +93,7 @@ void DreamBase::addToPressList() { } void DreamGenContext::enterCode(uint8 digit0, uint8 digit1, uint8 digit2, uint8 digit3) { - RectWithCallback keypadList[] = { + RectWithCallback keypadList[] = { { kKeypadx+9,kKeypadx+30,kKeypady+9,kKeypady+22,&DreamBase::buttonOne }, { kKeypadx+31,kKeypadx+52,kKeypady+9,kKeypady+22,&DreamBase::buttonTwo }, { kKeypadx+53,kKeypadx+74,kKeypady+9,kKeypady+22,&DreamBase::buttonThree }, diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 54979309f4..1c1ae5b4a0 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -170,7 +170,7 @@ void DreamGenContext::examineOb(bool examineAgain) { switch (data.byte(kInvopen)) { case 0: { - RectWithCallback examList[] = { + RectWithCallback examList[] = { { 273,320,157,198,&DreamGenContext::getBackFromOb }, { 260,300,0,44,&DreamGenContext::useObject }, { 210,254,0,44,&DreamGenContext::selectOpenOb }, @@ -184,7 +184,7 @@ void DreamGenContext::examineOb(bool examineAgain) { } case 1: { // Note: This table contains the non-constant _openChangeSize! - RectWithCallback invList1[] = { + RectWithCallback invList1[] = { { 273,320,157,198,&DreamGenContext::getBackFromOb }, { 255,294,0,24,&DreamGenContext::dropObject }, { kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamGenContext::incRyanPage }, @@ -197,7 +197,7 @@ void DreamGenContext::examineOb(bool examineAgain) { break; } default: { - RectWithCallback withList1[] = { + RectWithCallback withList1[] = { { 273,320,157,198,&DreamGenContext::getBackFromOb }, { kInventx+167,kInventx+167+(18*3),kInventy-18,kInventy-2,&DreamGenContext::incRyanPage }, { kInventx,kInventx+(5*kItempicsize), kInventy,kInventy+(2*kItempicsize),&DreamGenContext::selectOb }, diff --git a/engines/dreamweb/saveload.cpp b/engines/dreamweb/saveload.cpp index 5ca8ce88ec..ceaac99ae1 100644 --- a/engines/dreamweb/saveload.cpp +++ b/engines/dreamweb/saveload.cpp @@ -80,7 +80,7 @@ void DreamGenContext::doLoad(int savegameId) { vSync(); dumpPointer(); dumpTextLine(); - RectWithCallback loadlist[] = { + RectWithCallback loadlist[] = { { kOpsx+176,kOpsx+192,kOpsy+60,kOpsy+76,&DreamBase::getBackToOps }, { kOpsx+128,kOpsx+190,kOpsy+12,kOpsy+100,&DreamBase::actualLoad }, { kOpsx+2,kOpsx+92,kOpsy+4,kOpsy+81,&DreamBase::selectSlot }, @@ -176,7 +176,7 @@ void DreamGenContext::saveGame() { dumpPointer(); dumpTextLine(); - RectWithCallback savelist[] = { + RectWithCallback savelist[] = { { kOpsx+176,kOpsx+192,kOpsy+60,kOpsy+76,&DreamBase::getBackToOps }, { kOpsx+128,kOpsx+190,kOpsy+12,kOpsy+100,&DreamBase::actualSave }, { kOpsx+2,kOpsx+92,kOpsy+4,kOpsy+81,&DreamBase::selectSlot }, @@ -267,7 +267,7 @@ void DreamGenContext::doSaveLoad() { showMainOps(); workToScreenCPP(); - RectWithCallback opsList[] = { + RectWithCallback opsList[] = { { kOpsx+59,kOpsx+114,kOpsy+30,kOpsy+76,&DreamBase::getBackFromOps }, { kOpsx+10,kOpsx+77,kOpsy+10,kOpsy+59,&DreamBase::DOSReturn }, { kOpsx+128,kOpsx+190,kOpsy+16,kOpsy+100,&DreamGenContext::discOps }, @@ -367,7 +367,7 @@ void DreamGenContext::discOps() { workToScreenM(); data.byte(kGetback) = 0; - RectWithCallback discOpsList[] = { + RectWithCallback discOpsList[] = { { kOpsx+59,kOpsx+114,kOpsy+30,kOpsy+76,&DreamGenContext::loadGame }, { kOpsx+10,kOpsx+79,kOpsy+10,kOpsy+59,&DreamGenContext::saveGame }, { kOpsx+176,kOpsx+192,kOpsy+60,kOpsy+76,&DreamBase::getBackToOps }, diff --git a/engines/dreamweb/structs.h b/engines/dreamweb/structs.h index 313f3caf0b..320ed7e1a8 100644 --- a/engines/dreamweb/structs.h +++ b/engines/dreamweb/structs.h @@ -62,10 +62,11 @@ struct Sprite { class DreamGenContext; +template struct RectWithCallback { uint16 _xMin, _xMax; uint16 _yMin, _yMax; - void (DreamGenContext::*_callback)(); + void (T::*_callback)(); bool contains(uint16 x, uint16 y) const { return (x >= _xMin) && (x < _xMax) && (y >= _yMin) && (y < _yMax); diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp index c31edc2c65..eed12ceb95 100644 --- a/engines/dreamweb/stubs.cpp +++ b/engines/dreamweb/stubs.cpp @@ -1566,14 +1566,15 @@ void DreamBase::dumpPointer() { multiDump(data.word(kOldpointerx), data.word(kOldpointery), data.byte(kPointerxs), data.byte(kPointerys)); } -void DreamGenContext::checkCoords(const RectWithCallback *rectWithCallbacks) { +template +void DreamBase::checkCoords(const RectWithCallback *rectWithCallbacks) { if (data.byte(kNewlocation) != 0xff) return; - const RectWithCallback *r; + const RectWithCallback *r; for (r = rectWithCallbacks; r->_xMin != 0xffff; ++r) { if (r->contains(data.word(kMousex), data.word(kMousey))) { - (this->*(r->_callback))(); + (((T *)this)->*(r->_callback))(); return; } } @@ -1918,7 +1919,7 @@ void DreamGenContext::enterSymbol() { dumpPointer(); dumpTextLine(); dumpSymbol(); - RectWithCallback symbolList[] = { + RectWithCallback symbolList[] = { { kSymbolx+40,kSymbolx+64,kSymboly+2,kSymboly+16,&DreamBase::quitSymbol }, { kSymbolx,kSymbolx+52,kSymboly+20,kSymboly+50,&DreamBase::setTopLeft }, { kSymbolx+52,kSymbolx+104,kSymboly+20,kSymboly+50,&DreamBase::setTopRight }, @@ -1998,7 +1999,7 @@ void DreamGenContext::showCity() { void DreamGenContext::mainScreen() { data.byte(kInmaparea) = 0; if (data.byte(kWatchon) == 1) { - RectWithCallback mainList[] = { + RectWithCallback mainList[] = { { 44,70,32,46,&DreamGenContext::look }, { 0,50,0,180,&DreamGenContext::inventory }, { 226,244,10,26,&DreamGenContext::zoomOnOff }, @@ -2009,7 +2010,7 @@ void DreamGenContext::mainScreen() { }; checkCoords(mainList); } else { - RectWithCallback mainList2[] = { + RectWithCallback mainList2[] = { { 44,70,32,46,&DreamGenContext::look }, { 0,50,0,180,&DreamGenContext::inventory }, { 226+48,244+48,10,26,&DreamGenContext::zoomOnOff }, @@ -2476,7 +2477,7 @@ const uint8 *DreamBase::getTextInFile1(uint16 index) { } void DreamGenContext::checkFolderCoords() { - RectWithCallback folderList[] = { + RectWithCallback folderList[] = { { 280,320,160,200, &DreamBase::quitKey }, { 143,300,6,194, &DreamGenContext::nextFolder }, { 0,143,6,194, &DreamGenContext::lastFolder }, @@ -2633,7 +2634,7 @@ void DreamGenContext::useMenu() { dumpPointer(); dumpMenu(); dumpTextLine(); - RectWithCallback menuList[] = { + RectWithCallback menuList[] = { { kMenux+54,kMenux+68,kMenuy+72,kMenuy+88,&DreamBase::quitKey }, { 0,320,0,200,&DreamBase::blank }, { 0xFFFF,0,0,0,0 } @@ -3559,7 +3560,7 @@ void DreamGenContext::selectLocation() { if (data.byte(kGetback) == 1) break; - RectWithCallback destList[] = { + RectWithCallback destList[] = { { 238,258,4,44,&DreamGenContext::nextDest }, { 104,124,4,44,&DreamGenContext::lastDest }, { 280,308,4,44,&DreamGenContext::lookAtPlace }, @@ -3772,7 +3773,7 @@ void DreamGenContext::decide() { fadeScreenUp(); data.byte(kGetback) = 0; - RectWithCallback decideList[] = { + RectWithCallback decideList[] = { { kOpsx+69,kOpsx+124,kOpsy+30,kOpsy+76,&DreamGenContext::newGame }, { kOpsx+20,kOpsx+87,kOpsy+10,kOpsy+59,&DreamBase::DOSReturn }, { kOpsx+123,kOpsx+190,kOpsy+10,kOpsy+59,&DreamGenContext::loadOld }, @@ -3817,7 +3818,7 @@ void DreamGenContext::talk() { showPointer(); workToScreenCPP(); - RectWithCallback talkList[] = { + RectWithCallback talkList[] = { { 273,320,157,198,&DreamBase::getBack1 }, { 240,290,2,44,&DreamGenContext::moreTalk }, { 0,320,0,200,&DreamBase::blank }, @@ -3853,7 +3854,7 @@ void DreamGenContext::talk() { void DreamGenContext::hangOnPQ() { data.byte(kGetback) = 0; - RectWithCallback quitList[] = { + RectWithCallback quitList[] = { { 273,320,157,198,&DreamBase::getBack1 }, { 0,320,0,200,&DreamBase::blank }, { 0xFFFF,0,0,0,0 } diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h index 81949801b1..a3efebd2fe 100644 --- a/engines/dreamweb/stubs.h +++ b/engines/dreamweb/stubs.h @@ -96,7 +96,7 @@ } void walkAndExamine(); void obName(uint8 command, uint8 commandType); - void checkCoords(const RectWithCallback *rectWithCallbacks); + void getExPos(); void compare(); bool compare(uint8 index, uint8 flag, const char id[4]) { diff --git a/engines/dreamweb/use.cpp b/engines/dreamweb/use.cpp index 5cb1f6b92c..7765215827 100644 --- a/engines/dreamweb/use.cpp +++ b/engines/dreamweb/use.cpp @@ -1270,7 +1270,7 @@ void DreamGenContext::useDiary() { delPointer(); data.byte(kGetback) = 0; - RectWithCallback diaryList[] = { + RectWithCallback diaryList[] = { { kDiaryx+94,kDiaryx+110,kDiaryy+97,kDiaryy+113,&DreamBase::diaryKeyN }, { kDiaryx+151,kDiaryx+167,kDiaryy+71,kDiaryy+87,&DreamBase::diaryKeyP }, { kDiaryx+176,kDiaryx+192,kDiaryy+108,kDiaryy+124,&DreamBase::quitKey }, -- cgit v1.2.3