aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/pet_control/pet_control.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/titanic/pet_control/pet_control.cpp')
-rw-r--r--engines/titanic/pet_control/pet_control.cpp39
1 files changed, 27 insertions, 12 deletions
diff --git a/engines/titanic/pet_control/pet_control.cpp b/engines/titanic/pet_control/pet_control.cpp
index 4cdab24f6d..415d1e9821 100644
--- a/engines/titanic/pet_control/pet_control.cpp
+++ b/engines/titanic/pet_control/pet_control.cpp
@@ -27,6 +27,7 @@
#include "titanic/messages/pet_messages.h"
#include "titanic/game_manager.h"
#include "titanic/game_state.h"
+#include "titanic/titanic.h"
namespace Titanic {
@@ -37,6 +38,7 @@ BEGIN_MESSAGE_MAP(CPetControl, CGameObject)
ON_MESSAGE(MouseDragEndMsg)
ON_MESSAGE(MouseButtonUpMsg)
ON_MESSAGE(MouseDoubleClickMsg)
+ ON_MESSAGE(MouseWheelMsg)
ON_MESSAGE(KeyCharMsg)
ON_MESSAGE(VirtualKeyCharMsg)
ON_MESSAGE(TimerMsg)
@@ -154,7 +156,7 @@ void CPetControl::postLoad() {
if (!_remoteTargetName.empty() && root)
_remoteTarget = dynamic_cast<CGameObject *>(root->findByName(_remoteTargetName));
- setArea(_currentArea);
+ setArea(_currentArea, true);
loaded();
}
@@ -184,7 +186,9 @@ void CPetControl::resetRemoteTarget() {
}
void CPetControl::setActiveNPC(CTrueTalkNPC *npc) {
- if (_activeNPC == npc) {
+ if (_activeNPC != npc) {
+ _activeNPC = npc;
+
if (_activeNPC) {
_activeNPCName = npc->getName();
_conversations.displayNPCName(npc);
@@ -207,8 +211,8 @@ void CPetControl::resetActiveNPC() {
_activeNPCName = "";
}
-PetArea CPetControl::setArea(PetArea newArea) {
- if (newArea == _currentArea || !isAreaActive())
+PetArea CPetControl::setArea(PetArea newArea, bool forceChange) {
+ if ((!forceChange && newArea == _currentArea) || !isAreaActive())
return _currentArea;
// Signal the currently active area that it's being left
@@ -315,6 +319,13 @@ bool CPetControl::MouseDoubleClickMsg(CMouseDoubleClickMsg *msg) {
return _sections[_currentArea]->MouseDoubleClickMsg(msg);
}
+bool CPetControl::MouseWheelMsg(CMouseWheelMsg *msg) {
+ if (!containsPt(msg->_mousePos) || isInputLocked())
+ return false;
+
+ return _sections[_currentArea]->MouseWheelMsg(msg);
+}
+
bool CPetControl::KeyCharMsg(CKeyCharMsg *msg) {
if (isInputLocked())
return false;
@@ -377,7 +388,7 @@ bool CPetControl::checkDragEnd(CGameObject *item) const {
}
void CPetControl::displayMessage(StringId stringId, int param) const {
- CString msg = CString::format(_strings[stringId].c_str(), param);
+ CString msg = CString::format(g_vm->_strings[stringId].c_str(), param);
_sections[_currentArea]->displayMessage(msg);
}
@@ -388,7 +399,7 @@ void CPetControl::displayMessage(const CString &str, int param) const {
void CPetControl::addTranslation(StringId id1, StringId id2) {
setArea(PET_TRANSLATION);
- _translation.addTranslation(_strings[id1], _strings[id2]);
+ _translation.addTranslation(g_vm->_strings[id1], g_vm->_strings[id2]);
}
void CPetControl::clearTranslation() {
@@ -461,7 +472,7 @@ void CPetControl::moveToHiddenRoom(CTreeItem *item) {
CRoomItem *room = getHiddenRoom();
if (room) {
item->detach();
- room->addUnder(item);
+ item->addUnder(room);
}
}
@@ -594,6 +605,7 @@ void CPetControl::onSummonBot(const CString &name, int val) {
COnSummonBotMsg summonMsg(val);
summonMsg.execute(bot);
+ makeDirty();
}
}
@@ -609,10 +621,13 @@ bool CPetControl::dismissBot(const CString &name) {
CDismissBotMsg dismissMsg;
for (CTreeItem *treeItem = view->getFirstChild(); treeItem;
treeItem = treeItem->scan(view)) {
- if (!treeItem->getName().compareToIgnoreCase(name))
- dismissMsg.execute(treeItem);
- else
- result = true;
+ CGameObject *obj = dynamic_cast<CGameObject *>(treeItem);
+ if (obj) {
+ if (!obj->getName().compareToIgnoreCase(name))
+ result = true;
+ else
+ dismissMsg.execute(treeItem);
+ }
}
return result;
@@ -686,7 +701,7 @@ void CPetControl::resetDials0() {
int CPetControl::getMailDest(const CRoomFlags &roomFlags) const {
if (!roomFlags.isSuccUBusRoomFlags())
- return roomFlags.getPassengerClassNum();
+ return (int)roomFlags.getPassengerClassNum();
return roomFlags.getSuccUBusNum(roomFlags.getSuccUBusRoomName());
}