diff options
author | Paul Gilbert | 2016-08-26 07:47:31 -0400 |
---|---|---|
committer | Paul Gilbert | 2016-08-26 07:47:31 -0400 |
commit | 41ee7dd3717e8ff5451314fe62468ae64e8879c3 (patch) | |
tree | a4ccef80ac473336728b371e0e321e97213b7242 /engines/titanic/game/nose_holder.cpp | |
parent | e40caf40a17e50d9cab698eb9b806302e106f179 (diff) | |
download | scummvm-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.cpp | 79 |
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 |