aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/core/game_object.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/titanic/core/game_object.cpp')
-rw-r--r--engines/titanic/core/game_object.cpp62
1 files changed, 34 insertions, 28 deletions
diff --git a/engines/titanic/core/game_object.cpp b/engines/titanic/core/game_object.cpp
index 0289e78823..7848734792 100644
--- a/engines/titanic/core/game_object.cpp
+++ b/engines/titanic/core/game_object.cpp
@@ -42,7 +42,7 @@ int CGameObject::_soundHandles[4];
void CGameObject::init() {
_credits = nullptr;
- _soundHandles[0] = _soundHandles[1] = 0;
+ _soundHandles[0] = _soundHandles[1] = -1;
_soundHandles[2] = _soundHandles[3] = -1;
}
@@ -438,7 +438,8 @@ bool CGameObject::isSoundActive(int handle) const {
return false;
}
-void CGameObject::playGlobalSound(const CString &resName, int mode, bool initialMute, bool repeated, int handleIndex) {
+void CGameObject::playGlobalSound(const CString &resName, int mode, bool initialMute, bool repeated,
+ int handleIndex, Audio::Mixer::SoundType soundType) {
if (handleIndex < 0 || handleIndex > 3)
return;
CGameManager *gameManager = getGameManager();
@@ -463,19 +464,20 @@ void CGameObject::playGlobalSound(const CString &resName, int mode, bool initial
CProximity prox;
prox._channelVolume = volume;
prox._repeated = repeated;
+ prox._soundType = soundType;
switch (handleIndex) {
case 0:
- prox._channel = 6;
+ prox._channelMode = 6;
break;
case 1:
- prox._channel = 7;
+ prox._channelMode = 7;
break;
case 2:
- prox._channel = 8;
+ prox._channelMode = 8;
break;
case 3:
- prox._channel = 9;
+ prox._channelMode = 9;
break;
default:
break;
@@ -519,7 +521,6 @@ void CGameObject::stopGlobalSound(bool transition, int handleIndex) {
sound.stopSound(_soundHandles[handleIndex]);
_soundHandles[handleIndex] = -1;
}
- warning("CGameObject::soundFn4");
}
void CGameObject::setGlobalSoundVolume(int mode, uint seconds, int handleIndex) {
@@ -870,15 +871,15 @@ CViewItem *CGameObject::parseView(const CString &viewString) {
return nullptr;
// Find the designated node within the room
- CNodeItem *node = static_cast<CNodeItem *>(room->findChildInstanceOf(CNodeItem::_type));
+ CNodeItem *node = dynamic_cast<CNodeItem *>(room->findChildInstanceOf(CNodeItem::_type));
while (node && node->getName() != nodeName)
- node = static_cast<CNodeItem *>(room->findNextInstanceOf(CNodeItem::_type, node));
+ node = dynamic_cast<CNodeItem *>(room->findNextInstanceOf(CNodeItem::_type, node));
if (!node)
return nullptr;
- CViewItem *view = static_cast<CViewItem *>(node->findChildInstanceOf(CViewItem::_type));
+ CViewItem *view = dynamic_cast<CViewItem *>(node->findChildInstanceOf(CViewItem::_type));
while (view && view->getName() != viewName)
- view = static_cast<CViewItem *>(node->findNextInstanceOf(CViewItem::_type, view));
+ view = dynamic_cast<CViewItem *>(node->findNextInstanceOf(CViewItem::_type, view));
if (!view)
return nullptr;
@@ -897,7 +898,12 @@ CString CGameObject::getViewFullName() const {
}
void CGameObject::sleep(uint milli) {
- g_vm->_events->sleep(milli);
+ // Use an empty event target so that standard scene drawing won't happen
+ Events &events = *g_vm->_events;
+ CEventTarget nullTarget;
+ events.addTarget(&nullTarget);
+ events.sleep(milli);
+ events.removeTarget();
}
Point CGameObject::getMousePos() const {
@@ -963,12 +969,12 @@ CGameObject *CGameObject::getNextMail(CGameObject *prior) {
}
CGameObject *CGameObject::findRoomObject(const CString &name) const {
- return static_cast<CGameObject *>(findRoom()->findByName(name));
+ return dynamic_cast<CGameObject *>(findRoom()->findByName(name));
}
CGameObject *CGameObject::findInRoom(const CString &name) {
CRoomItem *room = getRoom();
- return room ? static_cast<CGameObject *>(room->findByName(name)) : nullptr;
+ return room ? dynamic_cast<CGameObject *>(room->findByName(name)) : nullptr;
}
Found CGameObject::find(const CString &name, CGameObject **item, int findAreas) {
@@ -995,7 +1001,7 @@ Found CGameObject::find(const CString &name, CGameObject **item, int findAreas)
}
if (findAreas & FIND_GLOBAL) {
- go = static_cast<CGameObject *>(getRoot()->findByName(name));
+ go = dynamic_cast<CGameObject *>(getRoot()->findByName(name));
if (go) {
*item = go;
return FOUND_GLOBAL;
@@ -1025,12 +1031,12 @@ void CGameObject::moveToView(const CString &name) {
addUnder(view);
}
-void CGameObject::stateInc14() {
- getGameManager()->_gameState.inc14();
+void CGameObject::stateChangeSeason() {
+ getGameManager()->_gameState.changeSeason();
}
-int CGameObject::stateGet14() const {
- return getGameManager()->_gameState._field14;
+Season CGameObject::stateGetSeason() const {
+ return getGameManager()->_gameState._seasonNum;
}
void CGameObject::stateSet24() {
@@ -1160,8 +1166,8 @@ void CGameObject::mouseUnlockE4() {
CScreenManager::_screenManagerPtr->_mouseCursor->unlockE4();
}
-void CGameObject::mouseSaveState(int v1, int v2, int v3) {
- CScreenManager::_screenManagerPtr->_mouseCursor->saveState(v1, v2, v3);
+void CGameObject::mouseSetPosition(const Point &pt, double rate) {
+ CScreenManager::_screenManagerPtr->_mouseCursor->setPosition(pt, rate);
}
void CGameObject::lockInputHandler() {
@@ -1226,7 +1232,7 @@ void CGameObject::dragMove(const Point &pt) {
CGameObject *CGameObject::getDraggingObject() const {
CTreeItem *item = getGameManager()->_dragItem;
- return static_cast<CGameObject *>(item);
+ return dynamic_cast<CGameObject *>(item);
}
Point CGameObject::getControid() const {
@@ -1254,7 +1260,7 @@ CDontSaveFileItem *CGameObject::getDontSave() const {
}
CPetControl *CGameObject::getPetControl() const {
- return static_cast<CPetControl *>(getDontSaveChild(CPetControl::_type));
+ return dynamic_cast<CPetControl *>(getDontSaveChild(CPetControl::_type));
}
CMailMan *CGameObject::getMailMan() const {
@@ -1293,7 +1299,7 @@ CRoomItem *CGameObject::locateRoom(const CString &name) const {
CGameObject *CGameObject::getHiddenObject(const CString &name) const {
CRoomItem *room = getHiddenRoom();
- return room ? static_cast<CGameObject *>(findUnder(room, name)) : nullptr;
+ return room ? dynamic_cast<CGameObject *>(findUnder(room, name)) : nullptr;
}
CTreeItem *CGameObject::findUnder(CTreeItem *parent, const CString &name) const {
@@ -1505,7 +1511,7 @@ CTreeItem *CGameObject::petContainerRemove(CGameObject *obj) {
if (!obj->compareRoomNameTo("CarryParcel"))
return obj;
- CGameObject *item = static_cast<CGameObject *>(pet->getLastChild());
+ CGameObject *item = dynamic_cast<CGameObject *>(pet->getLastChild());
if (item)
item->detach();
@@ -1600,11 +1606,11 @@ void CGameObject::petUnlockInput() {
/*------------------------------------------------------------------------*/
CStarControl *CGameObject::getStarControl() const {
- CStarControl *starControl = static_cast<CStarControl *>(getDontSaveChild(CStarControl::_type));
+ CStarControl *starControl = dynamic_cast<CStarControl *>(getDontSaveChild(CStarControl::_type));
if (!starControl) {
CViewItem *view = getGameManager()->getView();
if (view)
- starControl = static_cast<CStarControl *>(view->findChildInstanceOf(CStarControl::_type));
+ starControl = dynamic_cast<CStarControl *>(view->findChildInstanceOf(CStarControl::_type));
}
return starControl;
@@ -1624,7 +1630,7 @@ bool CGameObject::starFn2() {
/*------------------------------------------------------------------------*/
void CGameObject::startTalking(const CString &npcName, uint id, CViewItem *view) {
- CTrueTalkNPC *npc = static_cast<CTrueTalkNPC *>(getRoot()->findByName(npcName));
+ CTrueTalkNPC *npc = dynamic_cast<CTrueTalkNPC *>(getRoot()->findByName(npcName));
startTalking(npc, id, view);
}