aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/game/nose_holder.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2016-08-26 07:47:31 -0400
committerPaul Gilbert2016-08-26 07:47:31 -0400
commit41ee7dd3717e8ff5451314fe62468ae64e8879c3 (patch)
treea4ccef80ac473336728b371e0e321e97213b7242 /engines/titanic/game/nose_holder.cpp
parente40caf40a17e50d9cab698eb9b806302e106f179 (diff)
downloadscummvm-rg350-41ee7dd3717e8ff5451314fe62468ae64e8879c3.tar.gz
scummvm-rg350-41ee7dd3717e8ff5451314fe62468ae64e8879c3.tar.bz2
scummvm-rg350-41ee7dd3717e8ff5451314fe62468ae64e8879c3.zip
TITANIC: Implemented more game classes
Diffstat (limited to 'engines/titanic/game/nose_holder.cpp')
-rw-r--r--engines/titanic/game/nose_holder.cpp79
1 files changed, 78 insertions, 1 deletions
diff --git a/engines/titanic/game/nose_holder.cpp b/engines/titanic/game/nose_holder.cpp
index cd9433ee9c..ac6c10dafd 100644
--- a/engines/titanic/game/nose_holder.cpp
+++ b/engines/titanic/game/nose_holder.cpp
@@ -24,7 +24,16 @@
namespace Titanic {
-CNoseHolder::CNoseHolder() : CDropTarget(), _field118(0), _field11C(0) {
+BEGIN_MESSAGE_MAP(CNoseHolder, CDropTarget)
+ ON_MESSAGE(ActMsg)
+ ON_MESSAGE(FrameMsg)
+ ON_MESSAGE(LeaveViewMsg)
+ ON_MESSAGE(MovieEndMsg)
+ ON_MESSAGE(EnterViewMsg)
+END_MESSAGE_MAP()
+
+CNoseHolder::CNoseHolder() : CDropTarget(), _dragObject(nullptr),
+ _field11C(0) {
}
void CNoseHolder::save(SimpleFile *file, int indent) {
@@ -41,4 +50,72 @@ void CNoseHolder::load(SimpleFile *file) {
CDropTarget::load(file);
}
+bool CNoseHolder::ActMsg(CActMsg *msg) {
+ if (msg->_action == "Sneeze" && !_itemName.empty() && _fieldF4) {
+ CProximity prox;
+ prox._positioningMode = POSMODE_VECTOR;
+ playSound("z#35.wav", prox);
+
+ if (getView() == findView()) {
+ setVisible(true);
+ playMovie(1, 13, MOVIE_NOTIFY_OBJECT);
+ }
+ }
+
+ return true;
+}
+
+bool CNoseHolder::FrameMsg(CFrameMsg *msg) {
+ if (!_dragObject) {
+ CGameObject *dragObj = getDraggingObject();
+ if (!dragObj)
+ return false;
+
+ if (!dragObj->isEquals("Feathers") || getView() != findView())
+ return false;
+
+ _dragObject = dragObj;
+ }
+
+ if (_dragObject) {
+ if (!checkPoint(Point(_dragObject->_bounds.left,
+ _dragObject->_bounds.top))) {
+ _field11C = false;
+ } else if (!_field11C) {
+ CActMsg actMsg("Sneeze");
+ actMsg.execute(this);
+ _field11C = true;
+ }
+ }
+
+ return true;
+}
+
+bool CNoseHolder::LeaveViewMsg(CLeaveViewMsg *msg) {
+ _field11C = false;
+ _dragObject = nullptr;
+ if (_fieldF4) {
+ loadFrame(_dropFrame);
+ setVisible(false);
+ }
+
+ return true;
+}
+
+bool CNoseHolder::MovieEndMsg(CMovieEndMsg *msg) {
+ if (_fieldF4) {
+ loadFrame(_dropFrame);
+ setVisible(false);
+ }
+
+ return true;
+}
+
+bool CNoseHolder::EnterViewMsg(CEnterViewMsg *msg) {
+ if (_fieldF4)
+ setVisible(false);
+
+ return CDropTarget::EnterViewMsg(msg);
+}
+
} // End of namespace Titanic