aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/pet_control
diff options
context:
space:
mode:
authorPaul Gilbert2016-06-26 15:02:55 -0400
committerPaul Gilbert2016-07-15 19:25:11 -0400
commitad873455cf29622e52c15ac48e608d385a744be2 (patch)
tree6d4208782007309e0f98a031e1c8da0bbab3d7b2 /engines/titanic/pet_control
parent6f063c4703e5705edbba7ad39ef9c0656b74bc75 (diff)
downloadscummvm-rg350-ad873455cf29622e52c15ac48e608d385a744be2.tar.gz
scummvm-rg350-ad873455cf29622e52c15ac48e608d385a744be2.tar.bz2
scummvm-rg350-ad873455cf29622e52c15ac48e608d385a744be2.zip
TITANIC: Adding PET Control bot methods
Diffstat (limited to 'engines/titanic/pet_control')
-rw-r--r--engines/titanic/pet_control/pet_control.cpp46
-rw-r--r--engines/titanic/pet_control/pet_control.h18
2 files changed, 57 insertions, 7 deletions
diff --git a/engines/titanic/pet_control/pet_control.cpp b/engines/titanic/pet_control/pet_control.cpp
index e526a03b58..7d35eb31f2 100644
--- a/engines/titanic/pet_control/pet_control.cpp
+++ b/engines/titanic/pet_control/pet_control.cpp
@@ -569,9 +569,9 @@ void CPetControl::summonBot(const CString &name, int val) {
}
void CPetControl::onSummonBot(const CString &name, int val) {
- CGameObject *bot = findObject(name, getHiddenRoom());
+ CGameObject *bot = findBot(name, getHiddenRoom());
if (!bot) {
- bot = findObject(name, getRoot());
+ bot = findBot(name, getRoot());
}
if (bot) {
@@ -582,6 +582,46 @@ void CPetControl::onSummonBot(const CString &name, int val) {
}
}
+bool CPetControl::dismissBot(const CString &name) {
+ CGameManager *gameManager = getGameManager();
+ if (!gameManager)
+ return false;
+ CViewItem *view = gameManager->getView();
+ if (!view)
+ return false;
+
+ bool result = false;
+ CDismissBotMsg dismissMsg;
+ for (CTreeItem *treeItem = view->getFirstChild(); treeItem;
+ treeItem = treeItem->scan(view)) {
+ if (!treeItem->getName().compareToIgnoreCase(name))
+ dismissMsg.execute(treeItem);
+ else
+ result = true;
+ }
+
+ return result;
+}
+
+bool CPetControl::isDoorOrBellbotPresent() const {
+ CGameManager *gameManager = getGameManager();
+ if (!gameManager)
+ return false;
+ CViewItem *view = gameManager->getView();
+ if (!view)
+ return false;
+
+ for (CTreeItem *treeItem = view->getFirstChild(); treeItem;
+ treeItem = treeItem->scan(view)) {
+ CString name = treeItem->getName();
+ if (static_cast<CGameObject *>(treeItem) &&
+ (name.contains("Doorbot") || name.contains("BellBot")))
+ return true;
+ }
+
+ return false;
+}
+
void CPetControl::startPetTimer(uint timerIndex, uint firstDuration, uint duration, CPetSection *target) {
stopPetTimer(timerIndex);
_timers[timerIndex]._id = addTimer(timerIndex, firstDuration, duration);
@@ -600,7 +640,7 @@ void CPetControl::setTimer44(int id, int val) {
getGameManager()->setTimer44(id, val);
}
-CGameObject *CPetControl::findObject(const CString &name, CTreeItem *root) {
+CGameObject *CPetControl::findBot(const CString &name, CTreeItem *root) {
for (CTreeItem *item = root; item; item = item->scan(root)) {
if (!item->getName().compareToIgnoreCase(name)) {
CGameObject *obj = static_cast<CGameObject *>(item);
diff --git a/engines/titanic/pet_control/pet_control.h b/engines/titanic/pet_control/pet_control.h
index 6b40c15a6d..07a4ffa680 100644
--- a/engines/titanic/pet_control/pet_control.h
+++ b/engines/titanic/pet_control/pet_control.h
@@ -98,12 +98,12 @@ private:
*/
bool isBotInView(const CString &name) const;
- void setTimer44(int id, int val);
-
/**
- * Find an object under a given root
+ * Find a bot under a given root
*/
- CGameObject *findObject(const CString &name, CTreeItem *root);
+ CGameObject *findBot(const CString &name, CTreeItem *root);
+
+ void setTimer44(int id, int val);
protected:
bool MouseButtonDownMsg(CMouseButtonDownMsg *msg);
bool MouseDragStartMsg(CMouseDragStartMsg *msg);
@@ -302,6 +302,16 @@ public:
void onSummonBot(const CString &name, int val);
/**
+ * Dismiss an NPC
+ */
+ bool dismissBot(const CString &name);
+
+ /**
+ * Returns true if Doorbot or Bellbot present
+ */
+ bool isDoorOrBellbotPresent() const;
+
+ /**
* Start a timer for a Pet Area
*/
void startPetTimer(uint timerIndex, uint firstDuration, uint duration, CPetSection *target);