diff options
Diffstat (limited to 'engines/titanic/carry/arm.cpp')
-rw-r--r-- | engines/titanic/carry/arm.cpp | 68 |
1 files changed, 56 insertions, 12 deletions
diff --git a/engines/titanic/carry/arm.cpp b/engines/titanic/carry/arm.cpp index f2c7d5233f..0098c6f4c6 100644 --- a/engines/titanic/carry/arm.cpp +++ b/engines/titanic/carry/arm.cpp @@ -21,6 +21,7 @@ */ #include "titanic/carry/arm.h" +#include "titanic/messages/messages.h" namespace Titanic { @@ -35,19 +36,18 @@ BEGIN_MESSAGE_MAP(CArm, CCarry) END_MESSAGE_MAP() CArm::CArm() : CCarry(), _string6("Key"), - _field138(0), _field13C(0), _field140(0), _field144(0), - _field148(0), _field158(0), _armRect(220, 208, 409, 350), - _field16C(3), _field170(0) { + _field138(0), _field158(0), _field16C(3), _field170(0), + _armRect(220, 208, 409, 350) { } void CArm::save(SimpleFile *file, int indent) const { file->writeNumberLine(1, indent); file->writeQuotedLine(_string6, indent); file->writeNumberLine(_field138, indent); - file->writeNumberLine(_field13C, indent); - file->writeNumberLine(_field140, indent); - file->writeNumberLine(_field144, indent); - file->writeNumberLine(_field148, indent); + file->writeNumberLine(_hookedRect.left, indent); + file->writeNumberLine(_hookedRect.top, indent); + file->writeNumberLine(_hookedRect.right, indent); + file->writeNumberLine(_hookedRect.bottom, indent); file->writeQuotedLine(_string7, indent); file->writeNumberLine(_field158, indent); @@ -65,10 +65,10 @@ void CArm::load(SimpleFile *file) { file->readNumber(); _string6 = file->readString(); _field138 = file->readNumber(); - _field13C = file->readNumber(); - _field140 = file->readNumber(); - _field144 = file->readNumber(); - _field148 = file->readNumber(); + _hookedRect.left = file->readNumber(); + _hookedRect.top = file->readNumber(); + _hookedRect.right = file->readNumber(); + _hookedRect.bottom = file->readNumber(); _string7 = file->readString(); _field158 = file->readNumber(); @@ -107,14 +107,58 @@ bool CArm::TranslateObjectMsg(CTranslateObjectMsg *msg) { } bool CArm::UseWithOtherMsg(CUseWithOtherMsg *msg) { + if (_string6 != "None") { + CShowTextMsg textMsg("The arm is already holding something."); + textMsg.execute("PET"); + return false; + } else if (msg->_other->getName() == "GondolierLeftLever") { + CIsHookedOnMsg hookedMsg(_hookedRect, 0, getName()); + hookedMsg._rect.translate(_bounds.left, _bounds.top); + hookedMsg.execute("GondolierLeftLever"); + + if (hookedMsg._result) { + _string7 = "GondolierLeftLever"; + } else { + dropOnPet(); + } + } else if (msg->_other->getName() == "GondolierRightLever") { + CIsHookedOnMsg hookedMsg(_hookedRect, 0, getName()); + hookedMsg._rect.translate(_bounds.left, _bounds.top); + hookedMsg.execute("GondolierRightLever"); + + if (hookedMsg._result) { + _string7 = "GondolierRightLever"; + } else { + dropOnPet(); + } + } + return true; } bool CArm::MouseDragStartMsg(CMouseDragStartMsg *msg) { - return true; + if (!_fieldE0) { + CShowTextMsg textMsg("You can't get this."); + textMsg.execute("PET"); + } else if (checkStartDragging(msg)) { + _tempPos = msg->_mousePos - _bounds; + setPosition(msg->_mousePos - _tempPos); + + if (!_string7.empty()) { + CActMsg actMsg("Unhook"); + actMsg.execute(_string7); + _string7.clear(); + } + + loadFrame(_visibleFrame); + return true; + } + + return false; } bool CArm::MaitreDHappyMsg(CMaitreDHappyMsg *msg) { + // TODO return true; } |