aboutsummaryrefslogtreecommitdiff
path: root/engines/pink/objects/actors
diff options
context:
space:
mode:
Diffstat (limited to 'engines/pink/objects/actors')
-rw-r--r--engines/pink/objects/actors/actor.cpp12
-rw-r--r--engines/pink/objects/actors/actor.h6
-rw-r--r--engines/pink/objects/actors/lead_actor.cpp91
-rw-r--r--engines/pink/objects/actors/lead_actor.h9
-rw-r--r--engines/pink/objects/actors/supporting_actor.cpp17
-rw-r--r--engines/pink/objects/actors/supporting_actor.h5
6 files changed, 135 insertions, 5 deletions
diff --git a/engines/pink/objects/actors/actor.cpp b/engines/pink/objects/actors/actor.cpp
index c6ea1dcb1c..2bd6af4f82 100644
--- a/engines/pink/objects/actors/actor.cpp
+++ b/engines/pink/objects/actors/actor.cpp
@@ -20,10 +20,12 @@
*
*/
+#include <engines/pink/constants.h>
#include "actor.h"
#include "engines/pink/objects/pages/game_page.h"
#include "lead_actor.h"
#include "engines/pink/objects/actions/action.h"
+#include "pink/cursor_mgr.h"
namespace Pink {
@@ -122,4 +124,14 @@ bool Actor::initPallete(Director *director) {
return false;
}
+void Actor::onMouseOver(Common::Point point, CursorMgr *mgr) {
+ mgr->setCursor(kDefaultCursor, point);
+}
+
+Actor::~Actor() {
+ for (int i = 0; i < _actions.size(); ++i) {
+ delete _actions[i];
+ }
+}
+
} // End of namespace Pink
diff --git a/engines/pink/objects/actors/actor.h b/engines/pink/objects/actors/actor.h
index 1d6fdf4bd4..270ac99914 100644
--- a/engines/pink/objects/actors/actor.h
+++ b/engines/pink/objects/actors/actor.h
@@ -24,6 +24,7 @@
#define PINK_ACTOR_H
#include <common/array.h>
+#include <common/rect.h>
#include "engines/pink/objects/object.h"
namespace Pink {
@@ -32,6 +33,7 @@ class GamePage;
class Action;
class Sequencer;
class Director;
+class CursorMgr;
class Actor : public NamedObject {
public:
@@ -39,6 +41,7 @@ public:
: _page(nullptr), _action(nullptr),
_isActionEnded(1)
{};
+ ~Actor();
virtual void deserialize(Archive &archive);
virtual void toConsole();
@@ -61,6 +64,9 @@ public:
virtual void update() {};
+ virtual void onMouseOver(Common::Point point, CursorMgr *mgr);
+
+ virtual bool isClickable() { return 0;}
protected:
GamePage *_page;
Action *_action;
diff --git a/engines/pink/objects/actors/lead_actor.cpp b/engines/pink/objects/actors/lead_actor.cpp
index be7dfbe879..e26b50a42c 100644
--- a/engines/pink/objects/actors/lead_actor.cpp
+++ b/engines/pink/objects/actors/lead_actor.cpp
@@ -29,13 +29,13 @@
#include "engines/pink/archive.h"
#include "engines/pink/objects/pages/game_page.h"
#include "engines/pink/pink.h"
+#include "supporting_actor.h"
namespace Pink {
void LeadActor::deserialize(Archive &archive) {
_state = kReady;
Actor::deserialize(archive);
- _state = kReady;
_cursorMgr = static_cast<CursorMgr*>(archive.readObject());
_walkMgr = static_cast<WalkMgr*>(archive.readObject());
_sequencer = static_cast<Sequencer*>(archive.readObject());
@@ -70,18 +70,36 @@ LeadActor::State LeadActor::getState() const {
void LeadActor::update() {
switch (_state) {
+ case kReady:
+
+ _sequencer->update();
+ //fall-through intended
+ case kMoving:
+
+ _cursorMgr->update();
+ break;
+ case kInDialog1:
+ case kInDialog2:
+ _sequencer->update();
+ break;
+
+ case kInventory:
+ case kPDA:
+ break;
+
case kPlayingVideo:
_sequencer->update();
if (!_sequencer->_context){
_state = kUnk_Loading;
_page->getGame()->changeScene(_page);
}
- default:
+ break;
+ case kUnk_Loading:
break;
}
}
-void LeadActor::OnKeyboardButtonClick(Common::KeyCode code) {
+void LeadActor::onKeyboardButtonClick(Common::KeyCode code) {
switch(_state) {
case kMoving:
switch (code){
@@ -116,6 +134,73 @@ void LeadActor::OnKeyboardButtonClick(Common::KeyCode code) {
}
}
+void LeadActor::start(bool isHandler) {
+ if (isHandler && _state != kPlayingVideo){
+ _state = kReady;
+ }
+ updateCursor({0,0});
+}
+
+void LeadActor::onMouseMove(Common::Point point) {
+ if (_state != kPDA)
+ updateCursor(point);
+ else error("pda is not supported");
+}
+
+void LeadActor::updateCursor(Common::Point point) {
+ switch (_state) {
+ case kReady:
+ case kMoving: {
+ Director *director = _page->getGame()->getDirector();
+ Actor *actor = director->getActorByPoint(point);
+ if (actor)
+ actor->onMouseOver(point, _cursorMgr);
+ else _cursorMgr->setCursor(kDefaultCursor, point);
+ break;
+ }
+ case kInDialog1:
+ case kInDialog2:
+ case kPlayingVideo:
+ _cursorMgr->setCursor(kNotClickableCursor, point);
+ break;
+ case kPDA:
+ case kInventory:
+ _cursorMgr->setCursor(kDefaultCursor, point);
+ break;
+ default:
+ break;
+ }
+}
+
+void LeadActor::onLeftButtonClick(Common::Point point) {
+ switch (_state) {
+ case kReady:
+ case kMoving: {
+ Actor *actor = _page->getGame()->getDirector()->getActorByPoint(point);
+ if (this == actor){
+ // inventory is not implemented
+ return;
+ }
+
+ if (actor->isClickable() &&
+ ((SupportingActor*) actor)->isLeftClickHandlers())
+
+
+
+
+ break;
+ }
+ case kPDA:
+
+ break;
+ case kInventory:
+
+ break;
+ default:
+ break;
+ }
+}
+
void ParlSqPink::toConsole() {
debug("ParlSqPink: _name = %s", _name.c_str());
for (int 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 4e17bf285a..3a64893991 100644
--- a/engines/pink/objects/actors/lead_actor.h
+++ b/engines/pink/objects/actors/lead_actor.h
@@ -24,6 +24,7 @@
#define PINK_LEAD_ACTOR_H
#include <common/keyboard.h>
+#include <common/rect.h>
#include "actor.h"
namespace Pink {
@@ -58,8 +59,14 @@ public:
void start(bool isHandler);
void update();
- void OnKeyboardButtonClick(Common::KeyCode code);
+ void onKeyboardButtonClick(Common::KeyCode code);
+ void onLeftButtonClick(Common::Point point);
+ void onMouseMove(Common::Point point);
+
private:
+ void updateCursor(Common::Point point);
+
+
State _state;
CursorMgr *_cursorMgr;
WalkMgr *_walkMgr;
diff --git a/engines/pink/objects/actors/supporting_actor.cpp b/engines/pink/objects/actors/supporting_actor.cpp
index 2cffbf16ce..a7e1b79954 100644
--- a/engines/pink/objects/actors/supporting_actor.cpp
+++ b/engines/pink/objects/actors/supporting_actor.cpp
@@ -23,7 +23,8 @@
#include "supporting_actor.h"
#include <engines/pink/archive.h>
#include <engines/pink/objects/actions/action.h>
-#include <common/debug.h>
+#include <engines/pink/constants.h>
+#include "pink/cursor_mgr.h"
namespace Pink {
@@ -42,4 +43,18 @@ void SupportingActor::toConsole() {
_handlerMgr.toConsole();
}
+void SupportingActor::onMouseOver(Common::Point point, CursorMgr *mgr) {
+ if (isLeftClickHandlers()){
+ if (!_cursor.empty()){
+ mgr->setCursor(_cursor, point);
+ }
+ else mgr->setCursor(kClickableFirstFrameCursor, point);
+ }
+ else Actor::onMouseOver(point, mgr);
+}
+
+bool SupportingActor::isLeftClickHandlers() {
+ return _handlerMgr.isLeftClickHandler(this);
+}
+
} // End of namespace Pink \ No newline at end of file
diff --git a/engines/pink/objects/actors/supporting_actor.h b/engines/pink/objects/actors/supporting_actor.h
index a9dd69a495..bfee083dbd 100644
--- a/engines/pink/objects/actors/supporting_actor.h
+++ b/engines/pink/objects/actors/supporting_actor.h
@@ -33,6 +33,11 @@ public:
virtual void deserialize(Archive &archive);
virtual void toConsole();
+ virtual void onMouseOver(Common::Point point, CursorMgr *mgr);
+
+ virtual bool isClickable() { return 1; }
+ bool isLeftClickHandlers();
+
private:
HandlerMgr _handlerMgr;
Common::String _location;