diff options
-rw-r--r-- | engines/titanic/core/game_object.cpp | 28 | ||||
-rw-r--r-- | engines/titanic/core/game_object.h | 27 | ||||
-rw-r--r-- | engines/titanic/core/mail_man.cpp | 24 | ||||
-rw-r--r-- | engines/titanic/core/mail_man.h | 18 | ||||
-rw-r--r-- | engines/titanic/pet_control/pet_drag_chev.cpp | 2 |
5 files changed, 78 insertions, 21 deletions
diff --git a/engines/titanic/core/game_object.cpp b/engines/titanic/core/game_object.cpp index 4a5dd9b065..466fb443da 100644 --- a/engines/titanic/core/game_object.cpp +++ b/engines/titanic/core/game_object.cpp @@ -61,8 +61,8 @@ CGameObject::CGameObject(): CNamedItem() { _field44 = 0xF0; _field48 = 0xF0; _field4C = 0xFF; - _field50 = 0; - _field54 = 0; + _isMail = false; + _id = 0; _field58 = 0; _visible = true; _field60 = 0; @@ -124,8 +124,8 @@ void CGameObject::load(SimpleFile *file) { _field4C = file->readNumber(); _fieldB8 = file->readNumber(); _visible = file->readNumber() != 0; - _field50 = file->readNumber(); - _field54 = file->readNumber(); + _isMail = file->readNumber(); + _id = file->readNumber(); _field58 = file->readNumber(); resourceKey.load(file); @@ -1008,19 +1008,19 @@ void CGameObject::setState1C(bool flag) { getGameManager()->_gameState._field1C = flag; } -void CGameObject::mailFn10(int v) { +void CGameObject::addMail(int mailId) { CMailMan *mailMan = getMailMan(); if (mailMan) { makeDirty(); - mailMan->fn10(this, v); + mailMan->addMail(this, mailId); } } -void CGameObject::mailFn11(int v) { +void CGameObject::setMailId(int mailId) { CMailMan *mailMan = getMailMan(); if (mailMan) { makeDirty(); - mailMan->fn11(this, v); + mailMan->setMailId(this, mailId); } } @@ -1033,4 +1033,16 @@ CGameObject *CGameObject::findMail(int id) const { return mailMan ? mailMan->findMail(id) : nullptr; } +void CGameObject::removeMail(int id, int v) { + CMailMan *mailMan = getMailMan(); + if (mailMan) + mailMan->removeMail(id, v); +} + +void CGameObject::resetMail() { + CMailMan *mailMan = getMailMan(); + if (mailMan) + mailMan->resetValue(); +} + } // End of namespace Titanic diff --git a/engines/titanic/core/game_object.h b/engines/titanic/core/game_object.h index 01f15ceb85..ad0d93948e 100644 --- a/engines/titanic/core/game_object.h +++ b/engines/titanic/core/game_object.h @@ -82,9 +82,6 @@ protected: int _field44; int _field48; int _field4C; - int _field50; - int _field54; - int _field58; CMovieClipList _clipList1; int _initialFrame; CMovieClipList _clipList2; @@ -382,8 +379,15 @@ protected: void setState1C(bool flag); - void mailFn10(int v); - void mailFn11(int v); + /** + * Adds an object to the mail list + */ + void addMail(int mailId); + + /** + * Sets the mail identifier for an object + */ + void setMailId(int mailId); /** * Returns true if a mail with a specified Id exists @@ -394,7 +398,20 @@ protected: * Returns a specified mail, if one exists */ CGameObject *findMail(int id) const; + + /** + * Remove an object from the mail list + */ + void removeMail(int id, int v); + + /** + * Resets the Mail Man value + */ + void resetMail(); public: + bool _isMail; + int _id; + int _field58; int _field60; CursorId _cursorId; bool _visible; diff --git a/engines/titanic/core/mail_man.cpp b/engines/titanic/core/mail_man.cpp index e96b697dff..8ac50e9767 100644 --- a/engines/titanic/core/mail_man.cpp +++ b/engines/titanic/core/mail_man.cpp @@ -47,21 +47,35 @@ CGameObject *CMailMan::getNextObject(CGameObject *prior) const { return static_cast<CGameObject *>(prior->getNextSibling()); } -void CMailMan::fn10(CGameObject *obj, int v) { - warning("TODO: CMailMan::fn10"); +void CMailMan::addMail(CGameObject *obj, int id) { + obj->detach(); + obj->addUnder(this); + setMailId(obj, id); } -void CMailMan::fn11(CGameObject *obj, int v) { - warning("TODO: CMailMan::fn11"); +void CMailMan::setMailId(CGameObject *obj, int id) { + obj->_id = id; + obj->_field58 = 0; + obj->_isMail = true; } CGameObject *CMailMan::findMail(int id) const { for (CGameObject *obj = getFirstObject(); obj; obj = getNextObject(obj)) { - if (_field50 && _field54 == id) + if (obj->_isMail && obj->_id == id) return obj; } return nullptr; } +void CMailMan::removeMail(int id, int v) { + for (CGameObject *obj = getFirstObject(); obj; obj = getNextObject(obj)) { + if (obj->_isMail && obj->_id == id) { + obj->_isMail = false; + obj->_field58 = v; + break; + } + } +} + } // End of namespace Titanic diff --git a/engines/titanic/core/mail_man.h b/engines/titanic/core/mail_man.h index 1a95729ff1..982aae4cc0 100644 --- a/engines/titanic/core/mail_man.h +++ b/engines/titanic/core/mail_man.h @@ -55,13 +55,27 @@ public: */ CGameObject *getNextObject(CGameObject *prior) const; - void fn10(CGameObject *obj, int v); - void fn11(CGameObject *obj, int v); + /** + * Add an object to the mail list + */ + void addMail(CGameObject *obj, int id); + + /** + * Sets the mail identifier for an object + */ + static void setMailId(CGameObject *obj, int id); /** * Scan the mail list for a specified item */ CGameObject *findMail(int id) const; + + /** + * Remove a mail item + */ + void removeMail(int id, int v); + + void resetValue() { _value = 0; } }; diff --git a/engines/titanic/pet_control/pet_drag_chev.cpp b/engines/titanic/pet_control/pet_drag_chev.cpp index 645804118d..3143cde0ea 100644 --- a/engines/titanic/pet_control/pet_drag_chev.cpp +++ b/engines/titanic/pet_control/pet_drag_chev.cpp @@ -56,7 +56,7 @@ bool CPetDragChev::MouseDragEndMsg(CMouseDragEndMsg *msg) { CSuccUBus *succubus = static_cast<CSuccUBus *>(msg->_dropTarget); if (succubus) { - CSetChevRoomBits chevMsg(_field54); + CSetChevRoomBits chevMsg(_id); chevMsg.execute(succubus); } else { CPetControl *petControl = getPetControl(); |