aboutsummaryrefslogtreecommitdiff
path: root/engines/pink
diff options
context:
space:
mode:
Diffstat (limited to 'engines/pink')
-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