From 127e2fdf55117777198926cc1a809ea9f71ea1c2 Mon Sep 17 00:00:00 2001 From: whiterandrek Date: Fri, 1 Jun 2018 22:34:09 +0300 Subject: PINK: add PDAButtonActor(Pokus) implementation Peril's pda actor is different --- engines/pink/objects/actors/pda_button_actor.cpp | 34 ++++++++++++++++++++---- engines/pink/objects/actors/pda_button_actor.h | 22 ++++++++++++--- 2 files changed, 47 insertions(+), 9 deletions(-) (limited to 'engines') diff --git a/engines/pink/objects/actors/pda_button_actor.cpp b/engines/pink/objects/actors/pda_button_actor.cpp index 65e3f7ba21..a54e04b8ca 100644 --- a/engines/pink/objects/actors/pda_button_actor.cpp +++ b/engines/pink/objects/actors/pda_button_actor.cpp @@ -20,23 +20,47 @@ * */ +#include "pink/constants.h" +#include "pink/cursor_mgr.h" +#include "pink/pink.h" +#include "pink/objects/pages/page.h" #include "pink/objects/actors/pda_button_actor.h" namespace Pink { void PDAButtonActor::deserialize(Archive &archive) { Actor::deserialize(archive); + _x = archive.readDWORD(); + _y = archive.readDWORD(); _hideOnStop = (bool) archive.readDWORD(); _opaque = (bool) archive.readDWORD(); - int comm = archive.readDWORD(); - assert(comm <= 4); - _command = (Command) comm; + int type = archive.readDWORD(); + assert(type != 0); + _command.type = (Command::CommandType) type; + _command.arg = archive.readString(); } void PDAButtonActor::toConsole() { - debug("PDAButtonActor: _name = %s, _x = %u _y = %u _hideOnStop = %u, _opaque = %u, _command = %u", - _name.c_str(), _x, _y, _hideOnStop, _opaque, (int) _command); + debug("PDAButtonActor: _name = %s, _x = %u _y = %u _hideOnStop = %u, _opaque = %u, _commandType = %u, _arg = %s", + _name.c_str(), _x, _y, _hideOnStop, _opaque, (int) _command.type, _command.arg.c_str()); +} + +void PDAButtonActor::onClick() { + if (isActive()) { + _page->getGame()->getPdaMgr().execute(_command); + } +} + +void PDAButtonActor::onMouseOver(Common::Point point, CursorMgr *mgr) { + if (_command.type == Command::Unk || !isActive()) + mgr->setCursor(kPDADefaultCursor, point, Common::String()); + else + mgr->setCursor(kPDAClickableFirstFrameCursor, point, Common::String()); +} + +bool PDAButtonActor::isActive() { + return _name != "Inactive"; } } // End of namespace Pink diff --git a/engines/pink/objects/actors/pda_button_actor.h b/engines/pink/objects/actors/pda_button_actor.h index 5e7d53b4b4..87db1c25c1 100644 --- a/engines/pink/objects/actors/pda_button_actor.h +++ b/engines/pink/objects/actors/pda_button_actor.h @@ -27,21 +27,35 @@ namespace Pink { +struct Command { + // commands in peril are different + /*enum PerilCommandType {Null, GoToPage, GoToPreviousPage, GoToDomain, GoToHelp, + NavigateToDomain, IncrementCountry, DecrementCountry, IncrementDomain, + DecrementDomain, Close, IncrementFrame, DecrementFrame};*/ + enum CommandType {Null = 0, GoToPage = 1, Close = 2, Unk = 3}; + + CommandType type; + Common::String arg; +}; + class PDAButtonActor : public Actor { public: - enum Command {Null = 0, GoToPage = 1, Close = 2, Unk = 4}; - void deserialize(Archive &archive) override; void toConsole() override; + void onClick(); + void onMouseOver(Common::Point point, CursorMgr *mgr); + private: + bool isActive(); + + Command _command; + int _x; int _y; bool _hideOnStop; bool _opaque; - - Command _command; }; } // End of namespace Pink -- cgit v1.2.3