summaryrefslogtreecommitdiff
path: root/vfg/src/Puppet.cpp
diff options
context:
space:
mode:
authorComment <tim@gray.(none)>2012-12-10 19:30:27 +0000
committerComment <tim@gray.(none)>2012-12-10 19:30:27 +0000
commitdba01ce870165fd8d8a5fea921cb31f7c4e8c25f (patch)
treebc7f877edaeb2047eac9606c9bf869bbe9f7776a /vfg/src/Puppet.cpp
parent0bb92ced351b7fbba6e2e7036eae92037d08facf (diff)
fixed race condition in asterisk driver
Diffstat (limited to 'vfg/src/Puppet.cpp')
-rwxr-xr-xvfg/src/Puppet.cpp33
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();
+}