aboutsummaryrefslogtreecommitdiff
path: root/engines/pink/objects/sequences
diff options
context:
space:
mode:
authorwhiterandrek2018-03-28 15:43:29 +0300
committerEugene Sandulenko2018-06-28 23:51:32 +0200
commit48d34128b25a70c78bdfbcc6f15f673b643e20b1 (patch)
tree17e3bbd680d4ffe03ee3700f5f41d643c95ae0f6 /engines/pink/objects/sequences
parentea5cb3a60e281a76dd68335b95ba6b591b71fc22 (diff)
downloadscummvm-rg350-48d34128b25a70c78bdfbcc6f15f673b643e20b1.tar.gz
scummvm-rg350-48d34128b25a70c78bdfbcc6f15f673b643e20b1.tar.bz2
scummvm-rg350-48d34128b25a70c78bdfbcc6f15f673b643e20b1.zip
PINK: implemented skipping to last subsequence
Diffstat (limited to 'engines/pink/objects/sequences')
-rw-r--r--engines/pink/objects/sequences/sequence.cpp18
-rw-r--r--engines/pink/objects/sequences/sequence.h3
-rw-r--r--engines/pink/objects/sequences/sequence_item.cpp4
-rw-r--r--engines/pink/objects/sequences/sequence_item.h2
-rw-r--r--engines/pink/objects/sequences/sequencer.cpp4
5 files changed, 29 insertions, 2 deletions
diff --git a/engines/pink/objects/sequences/sequence.cpp b/engines/pink/objects/sequences/sequence.cpp
index 0ef7803988..070147a310 100644
--- a/engines/pink/objects/sequences/sequence.cpp
+++ b/engines/pink/objects/sequences/sequence.cpp
@@ -115,6 +115,24 @@ void Sequence::restart() {
start(0);
}
+void Sequence::skipToLastSubSequence() {
+ if (_unk && _context->getNextItemIndex() < _items.size()){
+ int i = _items.size() - 1;
+ while(i >= 0 && !_items[i--]->isLeader());
+ assert(i >= 0);
+ _context->setNextItemIndex(i);
+ _context->clearActionsFromActorStates();
+ skipItemsTo(i);
+ start(0);
+ }
+}
+
+void Sequence::skipItemsTo(int index) {
+ for(int i = 0; i < index; ++i){
+ _items[i]->skip(this);
+ }
+}
+
void SequenceAudio::deserialize(Archive &archive) {
Sequence::deserialize(archive);
archive >> _sound;
diff --git a/engines/pink/objects/sequences/sequence.h b/engines/pink/objects/sequences/sequence.h
index 45d10e585a..1ca40799a8 100644
--- a/engines/pink/objects/sequences/sequence.h
+++ b/engines/pink/objects/sequences/sequence.h
@@ -49,6 +49,9 @@ public:
void update();
void restart();
+ void skipToLastSubSequence();
+ void skipItemsTo(int index);
+
public:
SequenceContext *_context;
Sequencer *_sequencer;
diff --git a/engines/pink/objects/sequences/sequence_item.cpp b/engines/pink/objects/sequences/sequence_item.cpp
index 3644261c0a..f7870d3f3b 100644
--- a/engines/pink/objects/sequences/sequence_item.cpp
+++ b/engines/pink/objects/sequences/sequence_item.cpp
@@ -107,4 +107,8 @@ void SequenceItemDefaultAction::toConsole() {
debug("\t\t\t\tSequenceItemDefaultAction: _actor=%s, _action=%s", _actor.c_str(), _action.c_str());
}
+void SequenceItemDefaultAction::skip(Sequence *sequence) {
+ execute(0, sequence, 1);
+}
+
} // End of namespace Pink \ No newline at end of file
diff --git a/engines/pink/objects/sequences/sequence_item.h b/engines/pink/objects/sequences/sequence_item.h
index 197280fb7f..f217eafd74 100644
--- a/engines/pink/objects/sequences/sequence_item.h
+++ b/engines/pink/objects/sequences/sequence_item.h
@@ -40,6 +40,7 @@ public:
virtual bool execute(int index, Sequence *sequence, bool unk2);
virtual bool isLeader();
+ virtual void skip(Sequence *sequence) {};
protected:
Common::String _actor;
@@ -65,6 +66,7 @@ private:
class SequenceItemDefaultAction : public SequenceItem {
public:
virtual bool execute(int index, Sequence *sequence, bool unk2);
+ virtual void skip(Sequence *sequence);
virtual void toConsole();
};
diff --git a/engines/pink/objects/sequences/sequencer.cpp b/engines/pink/objects/sequences/sequencer.cpp
index c08e7fee43..4e59f18746 100644
--- a/engines/pink/objects/sequences/sequencer.cpp
+++ b/engines/pink/objects/sequences/sequencer.cpp
@@ -78,7 +78,7 @@ void Sequencer::update() {
void Sequencer::removeContext(SequenceContext *context) {
delete _context;
- _context = 0;
+ _context = nullptr;
}
void Sequencer::skipSubSequence() {
@@ -91,7 +91,7 @@ void Sequencer::restartSequence() {
}
void Sequencer::skipToLastSubSequence() {
-
+ _context->getSequence()->skipToLastSubSequence();
}
} // End of namespace Pink \ No newline at end of file