aboutsummaryrefslogtreecommitdiff
path: root/engines/pink/objects/actors
diff options
context:
space:
mode:
authorwhiterandrek2018-06-13 08:45:30 +0300
committerEugene Sandulenko2018-06-28 23:51:32 +0200
commit60d423cabb407c9859f68e34cdc4c5056a414ccd (patch)
tree6417dbab3cf60417bcad2f477fcc48e0bb253e2e /engines/pink/objects/actors
parented250751467542f0b8ef63b5e8077a48838ec9a2 (diff)
downloadscummvm-rg350-60d423cabb407c9859f68e34cdc4c5056a414ccd.tar.gz
scummvm-rg350-60d423cabb407c9859f68e34cdc4c5056a414ccd.tar.bz2
scummvm-rg350-60d423cabb407c9859f68e34cdc4c5056a414ccd.zip
PINK: implement AudioInfoManager
Diffstat (limited to 'engines/pink/objects/actors')
-rw-r--r--engines/pink/objects/actors/actor.cpp5
-rw-r--r--engines/pink/objects/actors/actor.h2
-rw-r--r--engines/pink/objects/actors/audio_info_pda_button.cpp50
-rw-r--r--engines/pink/objects/actors/audio_info_pda_button.h20
-rw-r--r--engines/pink/objects/actors/lead_actor.cpp47
-rw-r--r--engines/pink/objects/actors/lead_actor.h9
-rw-r--r--engines/pink/objects/actors/supporting_actor.cpp4
-rw-r--r--engines/pink/objects/actors/supporting_actor.h1
8 files changed, 110 insertions, 28 deletions
diff --git a/engines/pink/objects/actors/actor.cpp b/engines/pink/objects/actors/actor.cpp
index 8954d6c594..42c9e2d992 100644
--- a/engines/pink/objects/actors/actor.cpp
+++ b/engines/pink/objects/actors/actor.cpp
@@ -138,4 +138,9 @@ InventoryMgr *Actor::getInventoryMgr() const {
return _page->getModule()->getInventoryMgr();
}
+const Common::String &Actor::getPDALink() const {
+ static const Common::String empty;
+ return empty;
+}
+
} // End of namespace Pink
diff --git a/engines/pink/objects/actors/actor.h b/engines/pink/objects/actors/actor.h
index 9d00f6a364..7927c1bfb5 100644
--- a/engines/pink/objects/actors/actor.h
+++ b/engines/pink/objects/actors/actor.h
@@ -78,6 +78,8 @@ public:
InventoryMgr *getInventoryMgr() const;
+ virtual const Common::String &getPDALink() const;
+
virtual const Common::String &getLocation() const;
void setAction(const Common::String &name) { setAction(findAction(name)); }
diff --git a/engines/pink/objects/actors/audio_info_pda_button.cpp b/engines/pink/objects/actors/audio_info_pda_button.cpp
new file mode 100644
index 0000000000..a5505de0f6
--- /dev/null
+++ b/engines/pink/objects/actors/audio_info_pda_button.cpp
@@ -0,0 +1,50 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "pink/objects/actors/audio_info_pda_button.h"
+#include "pink/objects/actors/lead_actor.h"
+#include "pink/objects/pages/page.h"
+
+namespace Pink {
+
+void AudioInfoPDAButton::toConsole() {
+ debug("AudioInfoPDAButton: _name = %s", _name.c_str());
+ for (uint i = 0; i < _actions.size(); ++i) {
+ _actions[i]->toConsole();
+ }
+}
+
+void AudioInfoPDAButton::onMouseOver(Common::Point point, CursorMgr *mgr) {
+ mgr->setCursor(kClickableFirstFrameCursor, point, Common::String());
+}
+
+void AudioInfoPDAButton::onHover(Common::Point point, const Common::String &itemName, CursorMgr *cursorMgr) {
+ onMouseOver(point, cursorMgr);
+}
+
+bool AudioInfoPDAButton::onLeftClickMessage() {
+ AudioInfoMgr *audioInfoMgr = _page->getLeadActor()->getAudioInfoMgr();
+ audioInfoMgr->onLeftClick();
+ return true;
+}
+
+} // End of namespace Pink
diff --git a/engines/pink/objects/actors/audio_info_pda_button.h b/engines/pink/objects/actors/audio_info_pda_button.h
index f54edd66ee..4631bafd39 100644
--- a/engines/pink/objects/actors/audio_info_pda_button.h
+++ b/engines/pink/objects/actors/audio_info_pda_button.h
@@ -34,20 +34,12 @@ namespace Pink {
class AudioInfoPDAButton : public Actor {
public:
- void toConsole() override {
- debug("AudioInfoPDAButton: _name = %s", _name.c_str());
- for (uint i = 0; i < _actions.size(); ++i) {
- _actions[i]->toConsole();
- }
- }
-
- void onMouseOver(Common::Point point, CursorMgr *mgr) override {
- mgr->setCursor(kClickableFirstFrameCursor, point, Common::String());
- }
-
- void onHover(Common::Point point, const Common::String &itemName, CursorMgr *cursorMgr) override {
- onMouseOver(point, cursorMgr);
- }
+ void toConsole();
+
+ void onMouseOver(Common::Point point, CursorMgr *mgr);
+ void onHover(Common::Point point, const Common::String &itemName, CursorMgr *cursorMgr) override;
+
+ bool onLeftClickMessage() override;
};
} // End of namespace Pink
diff --git a/engines/pink/objects/actors/lead_actor.cpp b/engines/pink/objects/actors/lead_actor.cpp
index 33b5bd5970..1db74d2599 100644
--- a/engines/pink/objects/actors/lead_actor.cpp
+++ b/engines/pink/objects/actors/lead_actor.cpp
@@ -36,7 +36,7 @@ namespace Pink {
LeadActor::LeadActor()
: _state(kReady), _nextState(kReady), _isHaveItem(false),
_recipient(nullptr), _cursorMgr(nullptr), _walkMgr(nullptr),
- _sequencer(nullptr) {}
+ _sequencer(nullptr), _audioInfoMgr(this) {}
void LeadActor::deserialize(Archive &archive) {
_state = kReady;
@@ -156,7 +156,7 @@ void LeadActor::update() {
void LeadActor::loadPDA(const Common::String &pageName) {
if (_state != kPDA) {
if (_state == kMoving)
- setReadyAfterWalk();
+ setNextStateReady();
if (_state != kInventory)
_page->pause(true);
@@ -177,7 +177,7 @@ void LeadActor::onKeyboardButtonClick(Common::KeyCode code) {
case kMoving:
switch (code) {
case Common::KEYCODE_ESCAPE:
- setReadyAfterWalk();
+ setNextStateReady();
// Fall Through intended
case Common::KEYCODE_SPACE:
_walkMgr->skip();
@@ -215,17 +215,21 @@ void LeadActor::onLeftButtonClick(const Common::Point point) {
Actor *clickedActor = getActorByPoint(point);
if (this == clickedActor) {
+ _audioInfoMgr.stop();
onClick();
- return;
}
+ else if (isInteractingWith(clickedActor)) {
+ _recipient = clickedActor;
+ if (!startWalk()) {
+ _audioInfoMgr.stop();
+ if (_isHaveItem)
+ sendUseClickMessage(clickedActor);
+ else
+ sendLeftClickMessage(clickedActor);
+ }
+ } else
+ clickedActor->onLeftClickMessage();
- _recipient = clickedActor;
- if (isInteractingWith(clickedActor) && !startWalk()) {
- if (_isHaveItem)
- sendUseClickMessage(clickedActor);
- else
- sendLeftClickMessage(clickedActor);
- }
break;
}
case kPDA:
@@ -239,6 +243,19 @@ void LeadActor::onLeftButtonClick(const Common::Point point) {
}
}
+void LeadActor::onRightButtonClick(const Common::Point point) {
+ if (_state == kReady || _state == kMoving) {
+ Actor *clickedActor = getActorByPoint(point);
+ if (isInteractingWith(clickedActor)) {
+ _audioInfoMgr.start(clickedActor);
+ }
+
+ if (_state == kMoving)
+ setNextStateReady();
+ }
+}
+
+
void LeadActor::onMouseMove(Common::Point point) {
if (_state != kPDA)
updateCursor(point);
@@ -259,7 +276,7 @@ void LeadActor::onClick() {
kUnk_Loading : kReady;
} else {
if (_state == kMoving)
- setReadyAfterWalk();
+ setNextStateReady();
startInventory(0);
}
}
@@ -396,11 +413,15 @@ bool LeadActor::startWalk() {
return false;
}
-void LeadActor::setReadyAfterWalk() {
+void LeadActor::setNextStateReady() {
_recipient = nullptr;
_nextState = kReady;
}
+Actor *LeadActor::findActor(const Common::String &name) {
+ return _page->findActor(name);
+}
+
void ParlSqPink::toConsole() {
debug("ParlSqPink: _name = %s", _name.c_str());
for (uint i = 0; i < _actions.size(); ++i) {
diff --git a/engines/pink/objects/actors/lead_actor.h b/engines/pink/objects/actors/lead_actor.h
index 43ad2ee05a..3e585a62b3 100644
--- a/engines/pink/objects/actors/lead_actor.h
+++ b/engines/pink/objects/actors/lead_actor.h
@@ -27,6 +27,7 @@
#include "common/keyboard.h"
#include "pink/objects/actors/actor.h"
+#include "pink/audio_info_mgr.h"
namespace Pink {
@@ -88,8 +89,12 @@ public:
State getState() const { return _state; }
+ AudioInfoMgr *getAudioInfoMgr() { return &_audioInfoMgr; }
+
Actor *getActorByPoint(const Common::Point point);
+ Actor *findActor(const Common::String &name);
+
protected:
void forceUpdateCursor();
@@ -103,7 +108,7 @@ protected:
void startInventory(bool paused);
bool startWalk();
- void setReadyAfterWalk();
+ void setNextStateReady();
Actor *_recipient;
@@ -111,6 +116,8 @@ protected:
WalkMgr *_walkMgr;
Sequencer *_sequencer;
+ AudioInfoMgr _audioInfoMgr;
+
State _state;
State _nextState;
State _stateCopy;
diff --git a/engines/pink/objects/actors/supporting_actor.cpp b/engines/pink/objects/actors/supporting_actor.cpp
index ea2a49e9a5..826226712b 100644
--- a/engines/pink/objects/actors/supporting_actor.cpp
+++ b/engines/pink/objects/actors/supporting_actor.cpp
@@ -88,4 +88,8 @@ const Common::String &SupportingActor::getLocation() const {
return _location;
}
+const Common::String &SupportingActor::getPDALink() const {
+ return _pdaLink;
+}
+
} // End of namespace Pink
diff --git a/engines/pink/objects/actors/supporting_actor.h b/engines/pink/objects/actors/supporting_actor.h
index 1d200d2945..7f53a3e9c0 100644
--- a/engines/pink/objects/actors/supporting_actor.h
+++ b/engines/pink/objects/actors/supporting_actor.h
@@ -47,6 +47,7 @@ public:
bool onLeftClickMessage() override;
bool onUseClickMessage(InventoryItem *item, InventoryMgr *mgr) override;
+ const Common::String &getPDALink() const override;
const Common::String &getLocation() const override;
private: