aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/game/lemon_dispensor.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2016-08-22 21:52:29 -0400
committerPaul Gilbert2016-08-22 21:52:29 -0400
commitdf3e545976f401e4be999eb1c8fa9726b9dfcb38 (patch)
treeb2142a922f5ade01d95fdc5cb197d0dae29219f0 /engines/titanic/game/lemon_dispensor.cpp
parent2822fb5811dd4764a5d5dda5f77ce8f838b604e8 (diff)
downloadscummvm-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.cpp78
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