diff --git a/engines/mm/mm1/views_enh/character_info.cpp b/engines/mm/mm1/views_enh/character_info.cpp index 0a40bab66f2..6c2bbc1dbc0 100644 --- a/engines/mm/mm1/views_enh/character_info.cpp +++ b/engines/mm/mm1/views_enh/character_info.cpp @@ -62,7 +62,7 @@ const CharacterInfo::IconPos CharacterInfo::ICONS[CHAR_ICONS_COUNT] = { CharacterInfo::CharacterInfo() : - ScrollView("CharacterInfo"), _statInfo("ScrollText") { + PartyView("CharacterInfo"), _statInfo("ScrollText") { _bounds = Common::Rect(0, 0, 320, 146); _statInfo.setReduced(true); @@ -82,28 +82,16 @@ CharacterInfo::CharacterInfo() : bool CharacterInfo::msgFocus(const FocusMessage &msg) { _viewIcon.load("view.icn"); - MetaEngine::setKeybindingMode(KeybindingMode::KBMODE_PARTY_MENUS); - - // Turn on highlight for selected character - if (!g_globals->_currCharacter) - g_globals->_currCharacter = &g_globals->_party[0]; - g_events->send(GameMessage("CHAR_HIGHLIGHT", (int)true)); - _cursorCell = 0; showCursor(true); delayFrames(CURSOR_BLINK_FRAMES); - return ScrollView::msgFocus(msg); + return PartyView::msgFocus(msg); } bool CharacterInfo::msgUnfocus(const UnfocusMessage &msg) { _viewIcon.clear(); - - // Turn off highlight for selected character - g_events->send(GameMessage("CHAR_HIGHLIGHT", (int)false)); - - MetaEngine::setKeybindingMode(KeybindingMode::KBMODE_MENUS); - return ScrollView::msgUnfocus(msg); + return PartyView::msgUnfocus(msg); } bool CharacterInfo::msgKeypress(const KeypressMessage &msg) { @@ -156,17 +144,8 @@ bool CharacterInfo::msgAction(const ActionMessage &msg) { if (msg._action == KEYBIND_ESCAPE) { close(); return true; - } else if (msg._action >= KEYBIND_VIEW_PARTY1 && - msg._action <= KEYBIND_VIEW_PARTY6) { - uint charNum = msg._action - KEYBIND_VIEW_PARTY1; - if (charNum < g_globals->_party.size()) { - g_globals->_currCharacter = &g_globals->_party[ - msg._action - KEYBIND_VIEW_PARTY1]; - g_events->findView("GameParty")->draw(); - redraw(); - } - - return true; + } else { + return PartyView::msgAction(msg); } return false; diff --git a/engines/mm/mm1/views_enh/character_info.h b/engines/mm/mm1/views_enh/character_info.h index 876af592b47..7e01ab8899d 100644 --- a/engines/mm/mm1/views_enh/character_info.h +++ b/engines/mm/mm1/views_enh/character_info.h @@ -22,7 +22,7 @@ #ifndef MM1_VIEWS_ENH_CHARACTER_INFO_H #define MM1_VIEWS_ENH_CHARACTER_INFO_H -#include "mm/mm1/views_enh/scroll_view.h" +#include "mm/mm1/views_enh/party_view.h" #include "mm/mm1/views_enh/scroll_popup.h" #include "mm/shared/xeen/sprites.h" @@ -32,7 +32,7 @@ namespace ViewsEnh { #define CHAR_ICONS_COUNT 22 -class CharacterInfo : public ScrollView { +class CharacterInfo : public PartyView { struct IconPos { int _frame; int _x; int _y; }; diff --git a/engines/mm/mm1/views_enh/party_view.cpp b/engines/mm/mm1/views_enh/party_view.cpp index 83a89e59a17..c93e6f6b2f4 100644 --- a/engines/mm/mm1/views_enh/party_view.cpp +++ b/engines/mm/mm1/views_enh/party_view.cpp @@ -34,14 +34,14 @@ bool PartyView::msgFocus(const FocusMessage &msg) { if (!g_globals->_currCharacter) g_globals->_currCharacter = &g_globals->_party[0]; - g_events->send(GameMessage("CHAR_HIGHLIGHT", (int)true)); + g_events->send("GameParty", GameMessage("CHAR_HIGHLIGHT", (int)true)); MetaEngine::setKeybindingMode(KeybindingMode::KBMODE_PARTY_MENUS); return true; } bool PartyView::msgUnfocus(const UnfocusMessage &msg) { // Turn off highlight for selected character - g_events->send(GameMessage("CHAR_HIGHLIGHT", (int)false)); + g_events->send("GameParty", GameMessage("CHAR_HIGHLIGHT", (int)false)); MetaEngine::setKeybindingMode(KeybindingMode::KBMODE_MENUS); return true; @@ -51,6 +51,22 @@ bool PartyView::msgMouseDown(const MouseDownMessage &msg) { return send("GameParty", msg); } +bool PartyView::msgGame(const GameMessage &msg) { + if (msg._name == "UPDATE") { + draw(); + return true; + } + + return true; +} + +bool PartyView::msgAction(const ActionMessage &msg) { + if (msg._action >= KEYBIND_VIEW_PARTY1 && + msg._action <= KEYBIND_VIEW_PARTY6) + return send("GameParty", msg); + return false; +} + } // namespace ViewsEnh } // namespace MM1 } // namespace MM diff --git a/engines/mm/mm1/views_enh/party_view.h b/engines/mm/mm1/views_enh/party_view.h index b92bfd54ee3..487a425a7e1 100644 --- a/engines/mm/mm1/views_enh/party_view.h +++ b/engines/mm/mm1/views_enh/party_view.h @@ -38,6 +38,8 @@ public: bool msgFocus(const FocusMessage &msg) override; bool msgUnfocus(const UnfocusMessage &msg) override; bool msgMouseDown(const MouseDownMessage &msg) override; + bool msgGame(const GameMessage &msg) override; + bool msgAction(const ActionMessage &msg) override; }; } // namespace ViewsEnh diff --git a/engines/mm/mm1/views_enh/spells/cast_spell.cpp b/engines/mm/mm1/views_enh/spells/cast_spell.cpp index ead695e0658..4b3f02bec57 100644 --- a/engines/mm/mm1/views_enh/spells/cast_spell.cpp +++ b/engines/mm/mm1/views_enh/spells/cast_spell.cpp @@ -91,9 +91,9 @@ bool CastSpell::msgKeypress(const KeypressMessage &msg) { // Select a new spell addView("Spellbook"); return true; + } else { + return PartyView::msgKeypress(msg); } - - return false; } bool CastSpell::msgAction(const ActionMessage &msg) { @@ -101,17 +101,8 @@ bool CastSpell::msgAction(const ActionMessage &msg) { close(); return true; - } else if (msg._action >= KEYBIND_VIEW_PARTY1 && - msg._action <= KEYBIND_VIEW_PARTY6) { - uint charNum = msg._action - KEYBIND_VIEW_PARTY1; - if (charNum < g_globals->_party.size()) { - g_globals->_currCharacter = &g_globals->_party[ - msg._action - KEYBIND_VIEW_PARTY1]; - updateSelectedSpell(); - g_events->send(GameMessage("CHAR_HIGHLIGHT", (int)true)); - redraw(); - return true; - } + } else { + return PartyView::msgAction(msg); } return false;