From 27a8da21ec1399a7289dd196ed1a904706288c4c Mon Sep 17 00:00:00 2001 From: David Rose Date: Tue, 11 Nov 2003 06:51:15 +0000 Subject: [PATCH] fix resume_until some more --- direct/src/interval/IntervalManager.py | 2 +- direct/src/interval/MetaInterval.py | 11 +++++--- direct/src/interval/cInterval.cxx | 35 ++++++++++++++++++-------- direct/src/interval/cInterval.h | 1 + 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/direct/src/interval/IntervalManager.py b/direct/src/interval/IntervalManager.py index de688f0b87..5ec2d1d0a0 100644 --- a/direct/src/interval/IntervalManager.py +++ b/direct/src/interval/IntervalManager.py @@ -124,7 +124,7 @@ class IntervalManager(CIntervalManager): def __storeInterval(self, interval, index): while index >= len(self.ivals): self.ivals.append(None) - assert(self.ivals[index] == None) + assert(self.ivals[index] == None or self.ivals[index] == interval) self.ivals[index] = interval def __repr__(self): diff --git a/direct/src/interval/MetaInterval.py b/direct/src/interval/MetaInterval.py index b4acfc3669..b7e6e69834 100644 --- a/direct/src/interval/MetaInterval.py +++ b/direct/src/interval/MetaInterval.py @@ -357,12 +357,17 @@ class MetaInterval(CMetaInterval): self.privPostEvent() return self.getT() - def resume(self, t0 = None): + def resume(self, startT = None): self.__updateIvals() - if t0 != None: - self.setT(t0) + if startT != None: + self.setT(startT) self.setupResume() self.__manager.addInterval(self) + + def resumeUntil(self, endT): + self.__updateIvals() + self.setupResumeUntil(endT) + self.__manager.addInterval(self) def finish(self): self.__updateIvals() diff --git a/direct/src/interval/cInterval.cxx b/direct/src/interval/cInterval.cxx index f9af175a66..c4e201abac 100644 --- a/direct/src/interval/cInterval.cxx +++ b/direct/src/interval/cInterval.cxx @@ -197,17 +197,7 @@ resume(double start_t) { //////////////////////////////////////////////////////////////////// void CInterval:: resume_until(double end_t) { - double duration = get_duration(); - - if (end_t < 0.0 || end_t >= duration) { - _end_t = duration; - _end_t_at_end = true; - } else { - _end_t = end_t; - _end_t_at_end = false; - } - - setup_resume(); + setup_resume_until(end_t); _manager->add_c_interval(this, false); } @@ -517,6 +507,29 @@ setup_resume() { _loop_count = 0; } +//////////////////////////////////////////////////////////////////// +// Function: CInterval::setup_resume_until +// Access: Published +// Description: Called to prepare the interval for restarting from +// the current point after a previous call to pause() +// (or a previous play-to-point-and-stop), to play until +// the indicated point and then stop. +//////////////////////////////////////////////////////////////////// +void CInterval:: +setup_resume_until(double end_t) { + double duration = get_duration(); + + if (end_t < 0.0 || end_t >= duration) { + _end_t = duration; + _end_t_at_end = true; + } else { + _end_t = end_t; + _end_t_at_end = false; + } + + setup_resume(); +} + //////////////////////////////////////////////////////////////////// // Function: CInterval::step_play // Access: Published diff --git a/direct/src/interval/cInterval.h b/direct/src/interval/cInterval.h index 1dafbf5eb6..90508e8945 100644 --- a/direct/src/interval/cInterval.h +++ b/direct/src/interval/cInterval.h @@ -119,6 +119,7 @@ PUBLISHED: void setup_play(double start_time, double end_time, double play_rate, bool do_loop); void setup_resume(); + void setup_resume_until(double end_t); bool step_play(); public: