diff options
| author | Tim Redfern <tim@getdrop.com> | 2017-08-31 10:08:40 +0100 |
|---|---|---|
| committer | Tim Redfern <tim@getdrop.com> | 2017-08-31 10:08:40 +0100 |
| commit | 742e27767fd4208afe99ac42f243b88eef0ed7b3 (patch) | |
| tree | 1ba8dc83dad0a0af943b6fe28a1682a74e614929 /gui/src/chainImage.cpp | |
| parent | b0d54aadaf9dfb3b2f14974f55b3a725619ea445 (diff) | |
bezier movement
Diffstat (limited to 'gui/src/chainImage.cpp')
| -rw-r--r-- | gui/src/chainImage.cpp | 63 |
1 files changed, 57 insertions, 6 deletions
diff --git a/gui/src/chainImage.cpp b/gui/src/chainImage.cpp index 643bb2e..032b54c 100644 --- a/gui/src/chainImage.cpp +++ b/gui/src/chainImage.cpp @@ -19,14 +19,43 @@ void chainImage::start(){ time=ofGetElapsedTimef(); setUseTexture(true); scale=linkScale; + + path.clear(); + + path.addVertex(linkPos); + //path.addVertex(linkPos+(link->linkPos*linkScale)); + + ofPoint destination=linkPos+(link->linkPos*linkScale); + ofPoint previous=linkPos+(link->linkPos*linkScale*(1.0f-BEZIER_IN)); + + path.bezierTo( + linkPos.x*(1.0f+BEZIER_OUT),linkPos.y*(1.0f+BEZIER_OUT), + previous.x,previous.y, + destination.x,destination.y); + + //totalframes=log(1.0f/256)/log(decayRatio); + //framecount=0; } bool chainImage::update(float decayRatio){ scale*=decayRatio; + //framecount++; + + //find n such that decayRatio^n=1/256 + //logarithm of x base b = log(x)/log(b) + + //log(decayRatio,decayRatio^n) + + //n = log(decayRatio,1/256) + + transition=-(scale-linkScale)/(linkScale-(linkScale*link->linkScale)); + //transition=min(1.0f,((float)framecount)/totalframes); + + if (scale>linkScale*link->linkScale) return false; else { transition = 1.0f; @@ -35,9 +64,13 @@ bool chainImage::update(float decayRatio){ } ofVec3f chainImage::getTransform(){ - ofVec3f _scaledTarget = link->linkPos * linkScale; + //ofVec3f _scaledTarget = link->linkPos * linkScale; - return linkPos + ( _scaledTarget * transition ); + //return linkPos + ( _scaledTarget * transition ); + + //ofPoint + + return path.getPointAtPercent(transition); } float chainImage::getScale(){ @@ -328,6 +361,24 @@ void chainImageSet::keyPressed(ofKeyEventArgs &keyargs){ case OF_KEY_RIGHT: selected->linkPos.x++; break; + case OF_KEY_BACKSPACE:{ + images.clear(); + /* + auto previous=selected; + previous--; + if (previous==images.end()){ + previous=images.end()--; + } + previous->link=selected->link; + printf("DELETED: %s \n",selected->filename.c_str()); + images.erase(selected); + selected=previous++; + if (selected==images.end()){ + selected=images.begin(); + } + break; + */ + } case 's': case 83: { //printf("Saving... keyargs modifiers:%i\n",keyargs.modifiers); @@ -455,13 +506,13 @@ bool chainImageSet::loadJson(std::string _filename){ } void chainImageSet::update(){ - float decay_factor=0.995; - if (images.size()){ - if (currentImage->update(decay_factor)){ //if returns true, switch images + + if (images.size()){ + if (currentImage->update(decayFactor)){ //if returns true, switch images currentImage=currentImage->link; currentImage->start(); ofLogNotice() << "Switched images"; - currentImage->update(decay_factor); + currentImage->update(decayFactor); } } } |
