diff options
author | Paul Gilbert | 2016-04-14 20:02:52 -0400 |
---|---|---|
committer | Paul Gilbert | 2016-07-10 16:11:07 -0400 |
commit | f77a8a63cde7b40dd6fb4dfc23f11cc654c7e9a5 (patch) | |
tree | a6eeca5e8990c29b635e3190dbf416e8ddbaf76e | |
parent | 1babcc10cfce1458ac07c8e1027c321962cf8f09 (diff) | |
download | scummvm-rg350-f77a8a63cde7b40dd6fb4dfc23f11cc654c7e9a5.tar.gz scummvm-rg350-f77a8a63cde7b40dd6fb4dfc23f11cc654c7e9a5.tar.bz2 scummvm-rg350-f77a8a63cde7b40dd6fb4dfc23f11cc654c7e9a5.zip |
TITANIC: Implemented CGameObject::find
-rw-r--r-- | engines/titanic/core/game_object.cpp | 58 | ||||
-rw-r--r-- | engines/titanic/core/game_object.h | 23 | ||||
-rw-r--r-- | engines/titanic/core/mail_man.cpp (renamed from engines/titanic/game/mail_man.cpp) | 13 | ||||
-rw-r--r-- | engines/titanic/core/mail_man.h (renamed from engines/titanic/game/mail_man.h) | 11 | ||||
-rw-r--r-- | engines/titanic/core/saveable_object.cpp | 6 | ||||
-rw-r--r-- | engines/titanic/core/tree_item.cpp | 5 | ||||
-rw-r--r-- | engines/titanic/core/tree_item.h | 6 | ||||
-rw-r--r-- | engines/titanic/module.mk | 2 |
8 files changed, 119 insertions, 5 deletions
diff --git a/engines/titanic/core/game_object.cpp b/engines/titanic/core/game_object.cpp index 0a541bfb4d..ba8ab42c68 100644 --- a/engines/titanic/core/game_object.cpp +++ b/engines/titanic/core/game_object.cpp @@ -21,7 +21,9 @@ */ #include "titanic/core/game_object.h" +#include "titanic/core/mail_man.h" #include "titanic/core/resource_key.h" +#include "titanic/core/room_item.h" #include "titanic/pet_control/pet_control.h" #include "titanic/support/files_manager.h" #include "titanic/support/screen_manager.h" @@ -568,4 +570,60 @@ void CGameObject::petDisplayMsg(const CString &msg) const { pet->displayMessage(msg); } +CGameObject *CGameObject::getMailManFirstObject() const { + CMailMan *mailMan = getMailMan(); + return mailMan ? mailMan->getFirstObject() : nullptr; +} + +CGameObject *CGameObject::getMailManNextObject(CGameObject *prior) const { + CMailMan *mailMan = getMailMan(); + return mailMan ? mailMan->getNextObject(prior) : nullptr; +} + +CGameObject *CGameObject::findRoomObject(const CString &name) const { + return static_cast<CGameObject *>(findRoom()->findByName(name)); +} + +Found CGameObject::find(const CString &name, CGameObject **item, int findAreas) { + CGameObject *go; + *item = nullptr; + + // Scan under PET if flagged + if (findAreas & FIND_PET) { + for (go = getPetControl()->getFirstObject(); go; go = getPetControl()->getNextObject(go)) { + if (go->getName() == name) { + *item = go; + return FOUND_PET; + } + } + } + + if (findAreas & FIND_MAILMAN) { + for (go = getMailManFirstObject(); go; go = getMailManNextObject(go)) { + if (go->getName() == name) { + *item = go; + return FOUND_MAILMAN; + } + } + } + + if (findAreas & FIND_GLOBAL) { + go = static_cast<CGameObject *>(getRoot()->findByName(name)); + if (go) { + *item = go; + return FOUND_GLOBAL; + } + } + + if (findAreas & FIND_ROOM) { + go = findRoomObject(name); + if (go) { + *item = go; + return FOUND_ROOM; + } + } + + return FOUND_NONE; +} + } // End of namespace Titanic diff --git a/engines/titanic/core/game_object.h b/engines/titanic/core/game_object.h index 09a00e30bb..86687309e7 100644 --- a/engines/titanic/core/game_object.h +++ b/engines/titanic/core/game_object.h @@ -32,6 +32,9 @@ namespace Titanic { +enum Find { FIND_GLOBAL = 1, FIND_ROOM = 2, FIND_PET = 4, FIND_MAILMAN = 8 }; +enum Found { FOUND_NONE = 0, FOUND_GLOBAL = 1, FOUND_ROOM = 2, FOUND_PET = 3, FOUND_MAILMAN = 4 }; + class CVideoSurface; class CMouseDragStartMsg; class OSMovie; @@ -165,6 +168,26 @@ protected: * Display a message in the PET */ void petDisplayMsg(const CString &msg) const; + + /** + * Gets the first object under the system MailMan + */ + CGameObject *getMailManFirstObject() const; + + /** + * Gets the next object under the system MailMan + */ + CGameObject *getMailManNextObject(CGameObject *prior) const; + + /** + * Finds an object by name within the object's room + */ + CGameObject *findRoomObject(const CString &name) const; + + /** + * Finds an item in various system areas + */ + Found find(const CString &name, CGameObject **item, int findAreas); public: int _field60; CursorId _cursorId; diff --git a/engines/titanic/game/mail_man.cpp b/engines/titanic/core/mail_man.cpp index 9096fc55d1..cb959245b5 100644 --- a/engines/titanic/game/mail_man.cpp +++ b/engines/titanic/core/mail_man.cpp @@ -20,7 +20,7 @@ * */ -#include "titanic/game/mail_man.h" +#include "titanic/core/mail_man.h" namespace Titanic { @@ -36,4 +36,15 @@ void CMailMan::load(SimpleFile *file) { CGameObject::load(file); } +CGameObject *CMailMan::getFirstObject() const { + return static_cast<CGameObject *>(getFirstChild()); +} + +CGameObject *CMailMan::getNextObject(CGameObject *prior) const { + if (!prior || prior->getParent() != this) + return nullptr; + + return static_cast<CGameObject *>(prior->getNextSibling()); +} + } // End of namespace Titanic diff --git a/engines/titanic/game/mail_man.h b/engines/titanic/core/mail_man.h index a75d75a865..d1c84e2264 100644 --- a/engines/titanic/game/mail_man.h +++ b/engines/titanic/core/mail_man.h @@ -43,6 +43,17 @@ public: * Load the data for the class from file */ virtual void load(SimpleFile *file); + + /** + * Get the first game object stored in the PET + */ + CGameObject *getFirstObject() const; + + /** + * Get the next game object stored in the PET following + * the passed game object + */ + CGameObject *getNextObject(CGameObject *prior) const; }; } // End of namespace Titanic diff --git a/engines/titanic/core/saveable_object.cpp b/engines/titanic/core/saveable_object.cpp index 2eacbba4a0..4a57959b57 100644 --- a/engines/titanic/core/saveable_object.cpp +++ b/engines/titanic/core/saveable_object.cpp @@ -68,6 +68,7 @@ #include "titanic/core/game_object_desc_item.h" #include "titanic/core/link_item.h" #include "titanic/core/list.h" +#include "titanic/core/mail_man.h" #include "titanic/core/message_target.h" #include "titanic/core/movie_clip.h" #include "titanic/core/multi_drop_target.h" @@ -156,7 +157,6 @@ #include "titanic/game/light_switch.h" #include "titanic/game/little_lift_button.h" #include "titanic/game/long_stick_dispenser.h" -#include "titanic/game/mail_man.h" #include "titanic/game/missiveomat.h" #include "titanic/game/missiveomat_button.h" #include "titanic/game/movie_tester.h" @@ -475,6 +475,7 @@ DEFFN(CGameObject) DEFFN(CGameObjectDescItem) DEFFN(CLinkItem) DEFFN(ListItem) +DEFFN(CMailMan) DEFFN(CMessageTarget) DEFFN(CMovieClip) DEFFN(CMultiDropTarget) @@ -565,7 +566,6 @@ DEFFN(CLight) DEFFN(CLightSwitch) DEFFN(CLittleLiftButton) DEFFN(CLongStickDispenser) -DEFFN(CMailMan) DEFFN(CMissiveOMat) DEFFN(CMissiveOMatButton) DEFFN(CMovieTester) @@ -1061,6 +1061,7 @@ void CSaveableObject::initClassList() { ADDFN(CLinkItem, CNamedItem); ADDFN(ListItem, CSaveableObject); ADDFN(CMessageTarget, CSaveableObject); + ADDFN(CMailMan, CGameObject); ADDFN(CMovieClip, ListItem); ADDFN(CMultiDropTarget, CDropTarget); ADDFN(CNamedItem, CTreeItem); @@ -1151,7 +1152,6 @@ void CSaveableObject::initClassList() { ADDFN(CLightSwitch, CBackground); ADDFN(CLittleLiftButton, CBackground); ADDFN(CLongStickDispenser, CGameObject); - ADDFN(CMailMan, CGameObject); ADDFN(CMissiveOMat, CGameObject); ADDFN(CMissiveOMatButton, CEditControl); ADDFN(CMovieTester, CGameObject); diff --git a/engines/titanic/core/tree_item.cpp b/engines/titanic/core/tree_item.cpp index d86e9b2f58..03bf0e764e 100644 --- a/engines/titanic/core/tree_item.cpp +++ b/engines/titanic/core/tree_item.cpp @@ -26,6 +26,7 @@ #include "titanic/core/game_object.h" #include "titanic/core/game_object_desc_item.h" #include "titanic/core/link_item.h" +#include "titanic/core/mail_man.h" #include "titanic/core/named_item.h" #include "titanic/core/node_item.h" #include "titanic/core/project_item.h" @@ -275,6 +276,10 @@ CPetControl *CTreeItem::getPetControl() const { return dynamic_cast<CPetControl *>(getDontSaveChild(CPetControl::_type)); } +CMailMan *CTreeItem::getMailMan() const { + return dynamic_cast<CMailMan *>(getDontSaveChild(CMailMan::_type)); +} + CTreeItem *CTreeItem::getDontSaveChild(ClassDef *classDef) const { CProjectItem *root = getRoot(); if (!root) diff --git a/engines/titanic/core/tree_item.h b/engines/titanic/core/tree_item.h index c44825f566..2f4ebc39f1 100644 --- a/engines/titanic/core/tree_item.h +++ b/engines/titanic/core/tree_item.h @@ -29,6 +29,7 @@ namespace Titanic { class CGameManager; class CDontSaveFileItem; +class CMailMan; class CMessage; class CMusicRoom; class CNamedItem; @@ -249,6 +250,11 @@ public: CPetControl *getPetControl() const; /** + * Returns the MailMan + */ + CMailMan *getMailMan() const; + + /** * Returns a child of the Dont Save area of the project of the given class */ CTreeItem *getDontSaveChild(ClassDef *classDef) const; diff --git a/engines/titanic/module.mk b/engines/titanic/module.mk index be9a46784c..8f3126b052 100644 --- a/engines/titanic/module.mk +++ b/engines/titanic/module.mk @@ -60,6 +60,7 @@ MODULE_OBJS := \ core/game_object_desc_item.o \ core/link_item.o \ core/list.o \ + core/mail_man.o \ core/message_target.o \ core/movie_clip.o \ core/multi_drop_target.o \ @@ -150,7 +151,6 @@ MODULE_OBJS := \ game/light_switch.o \ game/little_lift_button.o \ game/long_stick_dispenser.o \ - game/mail_man.o \ game/missiveomat.o \ game/missiveomat_button.o \ game/movie_tester.o \ |