diff options
author | Paul Gilbert | 2016-08-22 21:52:29 -0400 |
---|---|---|
committer | Paul Gilbert | 2016-08-22 21:52:29 -0400 |
commit | df3e545976f401e4be999eb1c8fa9726b9dfcb38 (patch) | |
tree | b2142a922f5ade01d95fdc5cb197d0dae29219f0 /engines/titanic/game/lemon_dispensor.cpp | |
parent | 2822fb5811dd4764a5d5dda5f77ce8f838b604e8 (diff) | |
download | scummvm-rg350-df3e545976f401e4be999eb1c8fa9726b9dfcb38.tar.gz scummvm-rg350-df3e545976f401e4be999eb1c8fa9726b9dfcb38.tar.bz2 scummvm-rg350-df3e545976f401e4be999eb1c8fa9726b9dfcb38.zip |
TITANIC: Implemented more game classes
Diffstat (limited to 'engines/titanic/game/lemon_dispensor.cpp')
-rw-r--r-- | engines/titanic/game/lemon_dispensor.cpp | 78 |
1 files changed, 70 insertions, 8 deletions
diff --git a/engines/titanic/game/lemon_dispensor.cpp b/engines/titanic/game/lemon_dispensor.cpp index 8e1674cb2d..31a04cbeca 100644 --- a/engines/titanic/game/lemon_dispensor.cpp +++ b/engines/titanic/game/lemon_dispensor.cpp @@ -24,22 +24,36 @@ namespace Titanic { -int CLemonDispensor::_v1; +BEGIN_MESSAGE_MAP(CLemonDispensor, CBackground) + ON_MESSAGE(FrameMsg) + ON_MESSAGE(ChangeSeasonMsg) + ON_MESSAGE(LeaveViewMsg) +END_MESSAGE_MAP() + +bool CLemonDispensor::_isSummer; int CLemonDispensor::_v2; int CLemonDispensor::_v3; +CGameObject *CLemonDispensor::_draggingObject; CLemonDispensor::CLemonDispensor() : CBackground(), - _fieldE0(0), _fieldE4(9), _fieldE8(15), _fieldEC(0) { + _fieldE0(0), _origPt(Point(9, 15)), _fieldEC(0) { +} + +void CLemonDispensor::init() { + _isSummer = false; + _v2 = 0; + _v3 = 0; + _draggingObject = nullptr; } void CLemonDispensor::save(SimpleFile *file, int indent) { file->writeNumberLine(1, indent); - file->writeNumberLine(_v1, indent); + file->writeNumberLine(_isSummer, indent); file->writeNumberLine(_v2, indent); file->writeNumberLine(_v3, indent); file->writeNumberLine(_fieldE0, indent); - file->writeNumberLine(_fieldE4, indent); - file->writeNumberLine(_fieldE8, indent); + file->writeNumberLine(_origPt.x, indent); + file->writeNumberLine(_origPt.y, indent); file->writeNumberLine(_fieldEC, indent); CBackground::save(file, indent); @@ -47,15 +61,63 @@ void CLemonDispensor::save(SimpleFile *file, int indent) { void CLemonDispensor::load(SimpleFile *file) { file->readNumber(); - _v1 = file->readNumber(); + _isSummer = file->readNumber(); _v2 = file->readNumber(); _v3 = file->readNumber(); _fieldE0 = file->readNumber(); - _fieldE4 = file->readNumber(); - _fieldE8 = file->readNumber(); + _origPt.x = file->readNumber(); + _origPt.y = file->readNumber(); _fieldEC = file->readNumber(); CBackground::load(file); } +bool CLemonDispensor::FrameMsg(CFrameMsg *msg) { + if (_v2 || !_isSummer) + return true; + + if (!_draggingObject) { + CGameObject *obj = getDraggingObject(); + if (obj && getView() == findView()) { + if (obj->isEquals("Perch")) { + petDisplayMessage(1, "This stick is too short to reach the branches."); + return true; + } + + if (obj->isEquals("LongStick")) + _draggingObject = obj; + } + } + + if (_draggingObject) { + Point pt(_origPt.x + _draggingObject->_bounds.left, + _origPt.y + _draggingObject->_bounds.top); + bool flag = checkPoint(pt, true); + + if (_fieldEC == 0) { + if (flag && ++_v3 > 10) { + CLemonFallsFromTreeMsg lemonMsg(pt); + lemonMsg.execute("Lemon"); + _v2 = 1; + } + } else if (_fieldEC == 1 && !flag) { + _fieldEC = 0; + } + } + + return true; +} + +bool CLemonDispensor::ChangeSeasonMsg(CChangeSeasonMsg *msg) { + _isSummer = msg->_season == "Summer"; + return true; +} + +bool CLemonDispensor::LeaveViewMsg(CLeaveViewMsg *msg) { + _draggingObject = nullptr; + _v3 = 0; + _fieldEC = 0; + return true; +} + } // End of namespace Titanic |