aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/pet_control
diff options
context:
space:
mode:
authorPaul Gilbert2016-04-01 13:40:20 -0400
committerPaul Gilbert2016-04-01 13:40:20 -0400
commit9affb67a3c83ead5ed4e3be2ea4d369a9c61d6f3 (patch)
tree2c84d70384b6891ae2f3016f38a2c1d87cf87fb2 /engines/titanic/pet_control
parent883e198eb3c5e54c2c3bc9b01f65f3420840873f (diff)
downloadscummvm-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.cpp186
-rw-r--r--engines/titanic/pet_control/pet_control.h1
-rw-r--r--engines/titanic/pet_control/pet_section.h18
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; }