diff options
Diffstat (limited to 'engines/titanic')
-rw-r--r-- | engines/titanic/pet_control/pet_control.cpp | 5 | ||||
-rw-r--r-- | engines/titanic/pet_control/pet_control.h | 5 | ||||
-rw-r--r-- | engines/titanic/pet_control/pet_glyphs.cpp | 14 | ||||
-rw-r--r-- | engines/titanic/pet_control/pet_glyphs.h | 14 | ||||
-rw-r--r-- | engines/titanic/pet_control/pet_rooms.cpp | 71 | ||||
-rw-r--r-- | engines/titanic/pet_control/pet_rooms.h | 18 | ||||
-rw-r--r-- | engines/titanic/pet_control/pet_rooms_glyphs.cpp | 3 | ||||
-rw-r--r-- | engines/titanic/pet_control/pet_rooms_glyphs.h | 6 | ||||
-rw-r--r-- | engines/titanic/pet_control/pet_section.h | 2 | ||||
-rw-r--r-- | engines/titanic/pet_control/pet_sound.cpp | 1 |
10 files changed, 120 insertions, 19 deletions
diff --git a/engines/titanic/pet_control/pet_control.cpp b/engines/titanic/pet_control/pet_control.cpp index 145543fb07..98887f60d2 100644 --- a/engines/titanic/pet_control/pet_control.cpp +++ b/engines/titanic/pet_control/pet_control.cpp @@ -431,4 +431,9 @@ void CPetControl::playSound(int soundNum) { } } +CString CPetControl::getRoomName() const { + CRoomItem *room = getRoom(); + return room ? room->getName() : CString(); +} + } // End of namespace Titanic diff --git a/engines/titanic/pet_control/pet_control.h b/engines/titanic/pet_control/pet_control.h index baad471b8d..78cfb61864 100644 --- a/engines/titanic/pet_control/pet_control.h +++ b/engines/titanic/pet_control/pet_control.h @@ -245,6 +245,11 @@ public: * Play a sound */ void playSound(int soundNum); + + /** + * Get the room name + */ + CString getRoomName() const; }; } // End of namespace Titanic diff --git a/engines/titanic/pet_control/pet_glyphs.cpp b/engines/titanic/pet_control/pet_glyphs.cpp index 8ed8fcf47c..8f8d8ba331 100644 --- a/engines/titanic/pet_control/pet_glyphs.cpp +++ b/engines/titanic/pet_control/pet_glyphs.cpp @@ -307,7 +307,7 @@ bool CPetGlyphs::MouseButtonDownMsg(const Point &pt) { CPetGlyph *glyph = getGlyph(index); if (glyph) { if (_highlightIndex == index) { - glyph->proc28(glyphRect); + glyph->MouseButtonDownMsg(glyphRect); glyph->proc14(); } else { changeHighlight(index); @@ -426,4 +426,16 @@ void CPetGlyphs::endDragging() { _dragGlyph = nullptr; } +bool CPetGlyphs::highlighted14() { + if (_highlightIndex != -1) { + CPetGlyph *pet = getGlyph(_highlightIndex); + if (pet) { + pet->proc14(); + return true; + } + } + + return false; +} + } // End of namespace Titanic diff --git a/engines/titanic/pet_control/pet_glyphs.h b/engines/titanic/pet_control/pet_glyphs.h index 9216a42c74..cefcd5cae9 100644 --- a/engines/titanic/pet_control/pet_glyphs.h +++ b/engines/titanic/pet_control/pet_glyphs.h @@ -172,7 +172,12 @@ public: virtual void highlightCurrent(const Point &pt) {} virtual void proc27(const Point &pt, bool flag) {} - virtual void proc28(const Point &pt) {} + + /** + * Handles mouse button down messages + */ + virtual void MouseButtonDownMsg(const Point &pt) {} + virtual int proc29(const Point &pt) { return 0; } /** @@ -384,6 +389,13 @@ public: * Called when a dragging operation ends */ void endDragging(); + + /** + * Reset the highlight + */ + void resetHighlight() { changeHighlight(-1); } + + bool highlighted14(); }; } // End of namespace Titanic diff --git a/engines/titanic/pet_control/pet_rooms.cpp b/engines/titanic/pet_control/pet_rooms.cpp index 9a55af2ba9..60ce398eb4 100644 --- a/engines/titanic/pet_control/pet_rooms.cpp +++ b/engines/titanic/pet_control/pet_rooms.cpp @@ -41,43 +41,71 @@ bool CPetRooms::setup(CPetControl *petControl) { } bool CPetRooms::reset() { + if (_petControl) { + _plinth.reset("PetChevPlinth", _petControl, MODE_UNSELECTED); + _glyphs.reset(); + + uint col = getColor(0); + _text.setColor(col); + _text.setColor(0, col); + } + return true; } void CPetRooms::draw(CScreenManager *screenManager) { - + _petControl->drawSquares(screenManager, 6); + _plinth.draw(screenManager); + _glyphItem.drawAt(screenManager, getGlyphPos()); + _text.draw(screenManager); } bool CPetRooms::MouseButtonDownMsg(CMouseButtonDownMsg *msg) { + if (_glyphs.MouseButtonDownMsg(msg->_mousePos)) + return true; + + if (!_glyphItem.contains(getGlyphPos(), msg->_mousePos)) + return false; + + _glyphItem.MouseButtonDownMsg(msg->_mousePos); return true; } bool CPetRooms::MouseDragStartMsg(CMouseDragStartMsg *msg) { + if (_glyphs.MouseDragStartMsg(msg)) + return true; + + if (!_glyphItem.contains(getGlyphPos(), msg->_mousePos)) + return false; + + _glyphItem.proc29(msg->_mousePos); return true; } bool CPetRooms::MouseButtonUpMsg(CMouseButtonUpMsg *msg) { - return true; + return false; } bool CPetRooms::MouseDoubleClickMsg(CMouseDoubleClickMsg *msg) { - return true; + return !_glyphs.MouseButtonDownMsg(msg->_mousePos); } bool CPetRooms::VirtualKeyCharMsg(CVirtualKeyCharMsg *msg) { - return true; + return _glyphs.VirtualKeyCharMsg(msg->_keyState.keycode); } -int CPetRooms::proc14() { - return 0; +bool CPetRooms::proc14(void *v1) { + warning("TODO: proc14"); + return false; } void CPetRooms::displayMessage(const CString &msg) { - + _glyphs.resetHighlight(); + CPetSection::displayMessage(msg); } bool CPetRooms::isValid(CPetControl *petControl) { - return true; + return setupControl(petControl); } void CPetRooms::load(SimpleFile *file, int param) { @@ -102,15 +130,16 @@ void CPetRooms::load(SimpleFile *file, int param) { } void CPetRooms::postLoad() { - + reset(); } void CPetRooms::save(SimpleFile *file, int indent) const { - + warning("TODO: CPetRooms::save"); } void CPetRooms::enter(PetArea oldArea) { - + if (!_glyphs.highlighted14()) + _text.setText(""); } void CPetRooms::enterRoom(CRoomItem *room) { @@ -137,7 +166,7 @@ bool CPetRooms::setupControl(CPetControl *petControl) { Rect rect2(0, 0, 81, 81); rect2.moveTo(374, 494); - _element.setBounds(rect2); + _plinth.setBounds(rect2); _chevLeftOnDim = petControl->getHiddenObject("3PetChevLeftOnDim"); _chevLeftOffDim = petControl->getHiddenObject("3PetChevLeftOffDim"); @@ -152,6 +181,24 @@ bool CPetRooms::setupControl(CPetControl *petControl) { _glyphs.setFlags(GFLAG_16); _glyphItem.setup(petControl, &_glyphs); _glyphItem.set38(1); + return true; +} + +void CPetRooms::resetHighlight() { + _glyphItem.set34(fn1()); + _glyphs.resetHighlight(); + _glyphItem.proc14(); + areaChanged(PET_ROOMS); +} + +int CPetRooms::fn1() { + warning("TODO: CPetRooms::fn1"); + return 0; +} + +void CPetRooms::areaChanged(PetArea area) { + if (_petControl && _petControl->_currentArea == area) + _petControl->makeDirty(); } } // End of namespace Titanic diff --git a/engines/titanic/pet_control/pet_rooms.h b/engines/titanic/pet_control/pet_rooms.h index 0974fee026..4c153d7fad 100644 --- a/engines/titanic/pet_control/pet_rooms.h +++ b/engines/titanic/pet_control/pet_rooms.h @@ -41,7 +41,7 @@ private: CGameObject *_chevLeftOffLit; CGameObject *_chevRightOnLit; CGameObject *_chevRightOffLit; - CPetGfxElement _element; + CPetGfxElement _plinth; CPetText _text; int _field1C0; int _field1C4; @@ -54,6 +54,20 @@ private: * Setup the control */ bool setupControl(CPetControl *petControl); + + /** + * Returns the glyth position + */ + Point getGlyphPos() const { return Point(509, 388); } + + /** + * Reset the highlight + */ + void resetHighlight(); + + int fn1(); + + void areaChanged(PetArea area); public: CPetRooms(); @@ -82,7 +96,7 @@ public: virtual bool MouseDoubleClickMsg(CMouseDoubleClickMsg *msg); virtual bool VirtualKeyCharMsg(CVirtualKeyCharMsg *msg); - virtual int proc14(); + virtual bool proc14(void *v1); /** * Display a message diff --git a/engines/titanic/pet_control/pet_rooms_glyphs.cpp b/engines/titanic/pet_control/pet_rooms_glyphs.cpp index 6c032e7daf..d127c412f9 100644 --- a/engines/titanic/pet_control/pet_rooms_glyphs.cpp +++ b/engines/titanic/pet_control/pet_rooms_glyphs.cpp @@ -64,9 +64,10 @@ void CPetRoomsGlyph::drawAt(CScreenManager *screenManager, const Point &pt) { warning("TODO: CPetRoomsGlyph::drawAt"); } -void CPetRoomsGlyph::proc28(const Point &pt) { +void CPetRoomsGlyph::MouseButtonDownMsg(const Point &pt) { } + int CPetRoomsGlyph::proc29(const Point &pt) { return 0; } diff --git a/engines/titanic/pet_control/pet_rooms_glyphs.h b/engines/titanic/pet_control/pet_rooms_glyphs.h index 80c3d36ad8..2832438fc9 100644 --- a/engines/titanic/pet_control/pet_rooms_glyphs.h +++ b/engines/titanic/pet_control/pet_rooms_glyphs.h @@ -62,7 +62,11 @@ public: */ virtual void draw2(CScreenManager *screenManager) {} - virtual void proc28(const Point &pt); + /** + * Handles mouse button down messages + */ + virtual void MouseButtonDownMsg(const Point &pt); + virtual int proc29(const Point &pt); virtual void proc32(); virtual int proc33(); diff --git a/engines/titanic/pet_control/pet_section.h b/engines/titanic/pet_control/pet_section.h index 0911fd44f1..720e5323cf 100644 --- a/engines/titanic/pet_control/pet_section.h +++ b/engines/titanic/pet_control/pet_section.h @@ -90,7 +90,7 @@ public: virtual bool KeyCharMsg(CKeyCharMsg *msg) { return false; } virtual bool VirtualKeyCharMsg(CVirtualKeyCharMsg *msg) { return false; } - virtual int proc14() { return 0; } + virtual bool proc14(void *v1) { return false; } /** * Returns item a drag-drop operation has dropped on, if any diff --git a/engines/titanic/pet_control/pet_sound.cpp b/engines/titanic/pet_control/pet_sound.cpp index 736b966974..72e991aa3d 100644 --- a/engines/titanic/pet_control/pet_sound.cpp +++ b/engines/titanic/pet_control/pet_sound.cpp @@ -272,6 +272,7 @@ bool CPetSound::MouseButtonUpMsg(const Point &pt) { double offset = slider->getOffsetPixels(); sliderChanged(offset, sliderNum); + return true; } void CPetSound::getTooltip(CPetText *text) { |