diff options
| author | Comment <tim@gray.(none)> | 2012-12-10 19:30:27 +0000 |
|---|---|---|
| committer | Comment <tim@gray.(none)> | 2012-12-10 19:30:27 +0000 |
| commit | dba01ce870165fd8d8a5fea921cb31f7c4e8c25f (patch) | |
| tree | bc7f877edaeb2047eac9606c9bf869bbe9f7776a /vfg/src/Puppet.cpp | |
| parent | 0bb92ced351b7fbba6e2e7036eae92037d08facf (diff) | |
fixed race condition in asterisk driver
Diffstat (limited to 'vfg/src/Puppet.cpp')
| -rwxr-xr-x | vfg/src/Puppet.cpp | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/vfg/src/Puppet.cpp b/vfg/src/Puppet.cpp index 90ba137..9d9a11e 100755 --- a/vfg/src/Puppet.cpp +++ b/vfg/src/Puppet.cpp @@ -36,38 +36,45 @@ void Puppet::load(string filename) { void Puppet::draw(float x, float y, float scale) {
if (playlist.size()>0) {
- if (!clips[playlist[0]].getIsPlaying()) {
- playlist.erase(playlist.begin());
- if (playlist.size()>0) {
- clips[playlist[0]].play();
+ if (!clips[playlist[0].second].getIsPlaying()) { + if (ofGetElapsedTimeMillis()-playlist[0].first>clips[playlist[0].second].getDuration()) { + playlist.erase(playlist.begin()); + }
+ if (playlist.size()>0) { + if (playlist[0].first<ofGetElapsedTimeMillis())
+ clips[playlist[0].second].play();
}
}
}
if (playlist.size()==0) {
if (clips.find("base") != clips.end()) clips["base"].draw(x,y,scale);
}
- else {
- clips[playlist[0]].update();
- clips[playlist[0]].draw(x,y,scale);
+ else if (clips[playlist[0].second].getIsPlaying()){
+ clips[playlist[0].second].update();
+ clips[playlist[0].second].draw(x,y,scale);
}
}
-void Puppet::play(string clip){
+void Puppet::play(string clip,int time){
if (clips.find(clip) != clips.end()) {
- playlist.push_back(clip);
- if (playlist.size()==1) clips[playlist[0]].play();
+ playlist.push_back(make_pair(time,clip));
+ if (playlist.size()==1&&time<ofGetElapsedTimeMillis()) clips[playlist[0].second].play();
//printf("playing %s, %i, %s\n",playlist[0].c_str(),playlist.size(),clips[playlist[0]].getIsPlaying()?"true":"false");
}
} -void Puppet::playNow(string clip){ +void Puppet::playNow(string clip,int time){ if (playlist.size()>0) { - clips[playlist[0]].stop(); + clips[playlist[0].second].stop(); playlist.clear(); } play(clip); }
bool Puppet::isPlaying(){
- if (playlist.size()>0) return clips[playlist[0]].getIsPlaying();
+ if (playlist.size()>0) return clips[playlist[0].second].getIsPlaying();
else return false;
} + +void Puppet::clear(){ + playlist.clear(); +} |
