diff options
author | Paul Gilbert | 2016-04-01 13:40:20 -0400 |
---|---|---|
committer | Paul Gilbert | 2016-04-01 13:40:20 -0400 |
commit | 9affb67a3c83ead5ed4e3be2ea4d369a9c61d6f3 (patch) | |
tree | 2c84d70384b6891ae2f3016f38a2c1d87cf87fb2 /engines/titanic/pet_control | |
parent | 883e198eb3c5e54c2c3bc9b01f65f3420840873f (diff) | |
download | scummvm-rg350-9affb67a3c83ead5ed4e3be2ea4d369a9c61d6f3.tar.gz scummvm-rg350-9affb67a3c83ead5ed4e3be2ea4d369a9c61d6f3.tar.bz2 scummvm-rg350-9affb67a3c83ead5ed4e3be2ea4d369a9c61d6f3.zip |
TITANIC: Implement PET message handlers
Diffstat (limited to 'engines/titanic/pet_control')
-rw-r--r-- | engines/titanic/pet_control/pet_control.cpp | 186 | ||||
-rw-r--r-- | engines/titanic/pet_control/pet_control.h | 1 | ||||
-rw-r--r-- | engines/titanic/pet_control/pet_section.h | 18 |
3 files changed, 187 insertions, 18 deletions
diff --git a/engines/titanic/pet_control/pet_control.cpp b/engines/titanic/pet_control/pet_control.cpp index f316cff8e6..2faefb3b21 100644 --- a/engines/titanic/pet_control/pet_control.cpp +++ b/engines/titanic/pet_control/pet_control.cpp @@ -28,9 +28,10 @@ namespace Titanic { CPetControl::CPetControl() : CGameObject(), - _currentArea(PET_CONVERSATION), _fieldC0(0), _locked(0), _fieldC8(0), - _treeItem1(nullptr), _treeItem2(nullptr), _hiddenRoom(nullptr), - _drawBounds(20, 350, 620, 480) { + _currentArea(PET_CONVERSATION), _fieldC0(0), _locked(0), _fieldC8(0), + _treeItem1(nullptr), _treeItem2(nullptr), _hiddenRoom(nullptr), + _drawBounds(20, 350, 620, 480) { + _timers[0] = _timers[1] = nullptr; } void CPetControl::save(SimpleFile *file, int indent) const { @@ -383,30 +384,196 @@ bool CPetControl::handleMessage(CMouseButtonDownMsg &msg) { } makeDirty(); + return result; } bool CPetControl::handleMessage(CMouseDragStartMsg &msg) { - return true; + if (!containsPt(msg._mousePos) || getC0()) + return false; + + switch (_currentArea) { + case PET_INVENTORY: + return _inventory.handleMessage(msg); + break; + case PET_CONVERSATION: + return _conversations.handleMessage(msg); + break; + case PET_REMOTE: + return _remote.handleMessage(msg); + break; + case PET_ROOMS: + return _rooms.handleMessage(msg); + break; + case PET_SAVE: + return _saves.handleMessage(msg); + break; + case PET_5: + return _sub5.handleMessage(msg); + break; + case PET_6: + return _sub7.handleMessage(msg); + break; + default: + return false; + } } bool CPetControl::handleMessage(CMouseDragMoveMsg &msg) { - return true; + switch (_currentArea) { + case PET_INVENTORY: + return _inventory.handleMessage(msg); + break; + case PET_CONVERSATION: + return _conversations.handleMessage(msg); + break; + case PET_REMOTE: + return _remote.handleMessage(msg); + break; + case PET_ROOMS: + return _rooms.handleMessage(msg); + break; + case PET_SAVE: + return _saves.handleMessage(msg); + break; + case PET_5: + return _sub5.handleMessage(msg); + break; + case PET_6: + return _sub7.handleMessage(msg); + break; + default: + return false; + } } bool CPetControl::handleMessage(CMouseDragEndMsg &msg) { - return true; + switch (_currentArea) { + case PET_INVENTORY: + return _inventory.handleMessage(msg); + break; + case PET_CONVERSATION: + return _conversations.handleMessage(msg); + break; + case PET_REMOTE: + return _remote.handleMessage(msg); + break; + case PET_ROOMS: + return _rooms.handleMessage(msg); + break; + case PET_SAVE: + return _saves.handleMessage(msg); + break; + case PET_5: + return _sub5.handleMessage(msg); + break; + case PET_6: + return _sub7.handleMessage(msg); + break; + default: + return false; + } } bool CPetControl::handleMessage(CMouseButtonUpMsg &msg) { - return true; + if (!containsPt(msg._mousePos) || getC0()) + return false; + + bool result = false; + if (isUnlocked()) + result = _frame.handleMessage(msg); + + if (!result) { + switch (_currentArea) { + case PET_INVENTORY: + result = _inventory.handleMessage(msg); + break; + case PET_CONVERSATION: + result = _conversations.handleMessage(msg); + break; + case PET_REMOTE: + result = _remote.handleMessage(msg); + break; + case PET_ROOMS: + result = _rooms.handleMessage(msg); + break; + case PET_SAVE: + result = _saves.handleMessage(msg); + break; + case PET_5: + result = _sub5.handleMessage(msg); + break; + case PET_6: + result = _sub7.handleMessage(msg); + break; + default: + break; + } + } + + makeDirty(); + return result; } bool CPetControl::handleMessage(CMouseDoubleClickMsg &msg) { - return true; + if (!containsPt(msg._mousePos) || getC0()) + return false; + + switch (_currentArea) { + case PET_INVENTORY: + return _inventory.handleMessage(msg); + break; + case PET_CONVERSATION: + return _conversations.handleMessage(msg); + break; + case PET_REMOTE: + return _remote.handleMessage(msg); + break; + case PET_ROOMS: + return _rooms.handleMessage(msg); + break; + case PET_SAVE: + return _saves.handleMessage(msg); + break; + case PET_5: + return _sub5.handleMessage(msg); + break; + case PET_6: + return _sub7.handleMessage(msg); + break; + default: + return false; + } } bool CPetControl::handleMessage(CKeyCharMsg &msg) { - return true; + if (getC0()) + return false; + + switch (_currentArea) { + case PET_INVENTORY: + return _inventory.handleMessage(msg); + break; + case PET_CONVERSATION: + return _conversations.handleMessage(msg); + break; + case PET_REMOTE: + return _remote.handleMessage(msg); + break; + case PET_ROOMS: + return _rooms.handleMessage(msg); + break; + case PET_SAVE: + return _saves.handleMessage(msg); + break; + case PET_5: + return _sub5.handleMessage(msg); + break; + case PET_6: + return _sub7.handleMessage(msg); + break; + default: + return false; + } } bool CPetControl::handleMessage(CVirtualKeyCharMsg &msg) { @@ -471,6 +638,7 @@ bool CPetControl::handleMessage(CVirtualKeyCharMsg &msg) { } bool CPetControl::handleMessage(CTimerMsg &msg) { + warning("TODO: CPetControl::CTimerMsg"); return true; } diff --git a/engines/titanic/pet_control/pet_control.h b/engines/titanic/pet_control/pet_control.h index 26b358322b..285d4f0ba9 100644 --- a/engines/titanic/pet_control/pet_control.h +++ b/engines/titanic/pet_control/pet_control.h @@ -67,6 +67,7 @@ private: CString _string2; CRoomItem *_hiddenRoom; Rect _drawBounds; + void *_timers[2]; private: /** * Returns true if the control is in a valid state diff --git a/engines/titanic/pet_control/pet_section.h b/engines/titanic/pet_control/pet_section.h index 1355a54f22..352e22420a 100644 --- a/engines/titanic/pet_control/pet_section.h +++ b/engines/titanic/pet_control/pet_section.h @@ -76,17 +76,17 @@ public: virtual void proc5(int val) {} - virtual bool handleMessage(CMouseButtonDownMsg &msg) { return false; } - virtual int proc7() { return 0; } - virtual int proc8() { return 0; } - virtual int proc9() { return 0; } - virtual int proc10() { return 0; } - virtual int proc11() { return 0; } - virtual int proc12() { return 0; } - /** - * Handles special keypresses + * Following are handlers for the various messages that the PET can + * pass onto the currently active section/area */ + virtual bool handleMessage(CMouseButtonDownMsg &msg) { return false; } + virtual bool handleMessage(CMouseDragStartMsg &msg) { return false; } + virtual bool handleMessage(CMouseDragMoveMsg &msg) { return false; } + virtual bool handleMessage(CMouseDragEndMsg &msg) { return false; } + virtual bool handleMessage(CMouseButtonUpMsg &msg) { return false; } + virtual bool handleMessage(CMouseDoubleClickMsg &msg) { return false; } + virtual bool handleMessage(CKeyCharMsg &msg) { return false; } virtual bool handleMessage(CVirtualKeyCharMsg &msg) { return false; } virtual int proc14() { return 0; } |