1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | #include "Easer.h" //Sets 'position' to 'newPosition'. void Easer::SetPosition(float position) { this->Position = position; } //Resets 'position' to 0.0f. This is the same as calling SetPosition(0.0f); void Easer::Reset() { this->Position = 0.0f; } //Returns true if 'position' is at or beyond 1.0f. bool Easer::AtEnd() const { return (this->Position >= 1.0f); } //Returns the value at the current position. //(Note: Unless constrained, the actual result may actually drop below 0.0f or above 1.0f depending //on the easing function. This is intentional, and desirable for some effects) float Easer::Get() const { return this->plot(this->Position); } //Returns the value at the current position, scaled to the range of 'min' to 'max' instead of around (0.0f - 1.0f)-ish float Easer::GetInRange(const FloatRange &range) const { float value = this->plot(this->Position); return range.GetAt(value); } //Returns the value at 'pos'. float Easer::GetAt(float pos) const { return this->plot(pos); } //Returns the value at 'pos', scaled to the range of 'min' to 'max' instead of around (0.0f - 1.0f)-ish float Easer::GetInRangeAt(float pos, const FloatRange &range) const { float value = this->plot(pos); return range.Constrained(value); } //Moves the position of the ease by 'amount'. void Easer::Step(float amount) { this->Position += amount; } //Same as Step(). void Easer::operator+=(float amount) { this->Step(amount); } //Same as Step() with a negative amount. void Easer::operator-=(float amount) { this->Step(-amount); } //Same as SetPosition(). void Easer::operator=(float position) { this->SetPosition(position); } //Same as Get() float Easer::operator()() const { return this->Get(); } //Same as GetAt() float Easer::operator()(float value) const { return this->GetAt(value); } //Calls the virtual function 'plot' and processes the result depending on the EaseStyle. float Easer::plot(float position) const { //Binds 'position' from 0.0 to 1.0. //if(position > 1.0f) position = 1.0f; //if(position < 0.0f) position = 0.0f; float result; if(this->Style == EaseIn) { //Plots the position. result = this->EaseFunc(position); } else if(this->Style == EaseOut) { //Plots the position. result = DoEaseOut(this->EaseFunc, position); } else if(this->Style == EaseInOut) { //Plots the position. result = DoEaseInOut(this->EaseFunc, position); } else if(this->Style == EaseOutIn) { //Plots the position. result = DoEaseOutIn(this->EaseFunc, position); } //Constrains the result and returns. return this->Constaints.Constrained(result); } |
I2luY2x1ZGUgIkVhc2VyLmgiCgovL1NldHMgJ3Bvc2l0aW9uJyB0byAnbmV3UG9zaXRpb24nLgp2b2lkIEVhc2VyOjpTZXRQb3NpdGlvbihmbG9hdCBwb3NpdGlvbikKewogICAgdGhpcy0+UG9zaXRpb24gPSBwb3NpdGlvbjsKfQoKLy9SZXNldHMgJ3Bvc2l0aW9uJyB0byAwLjBmLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGNhbGxpbmcgU2V0UG9zaXRpb24oMC4wZik7CnZvaWQgRWFzZXI6OlJlc2V0KCkKewogICAgdGhpcy0+UG9zaXRpb24gPSAwLjBmOwp9CgovL1JldHVybnMgdHJ1ZSBpZiAncG9zaXRpb24nIGlzIGF0IG9yIGJleW9uZCAxLjBmLgpib29sIEVhc2VyOjpBdEVuZCgpIGNvbnN0CnsKICAgIHJldHVybiAodGhpcy0+UG9zaXRpb24gPj0gMS4wZik7Cn0KCi8vUmV0dXJucyB0aGUgdmFsdWUgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi8vKE5vdGU6IFVubGVzcyBjb25zdHJhaW5lZCwgdGhlIGFjdHVhbCByZXN1bHQgbWF5IGFjdHVhbGx5IGRyb3AgYmVsb3cgMC4wZiBvciBhYm92ZSAxLjBmIGRlcGVuZGluZwovL29uIHRoZSBlYXNpbmcgZnVuY3Rpb24uIFRoaXMgaXMgaW50ZW50aW9uYWwsIGFuZCBkZXNpcmFibGUgZm9yIHNvbWUgZWZmZWN0cykKZmxvYXQgRWFzZXI6OkdldCgpIGNvbnN0CnsKICAgIHJldHVybiB0aGlzLT5wbG90KHRoaXMtPlBvc2l0aW9uKTsKfQoKLy9SZXR1cm5zIHRoZSB2YWx1ZSBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiwgc2NhbGVkIHRvIHRoZSByYW5nZSBvZiAnbWluJyB0byAnbWF4JyBpbnN0ZWFkIG9mIGFyb3VuZCAoMC4wZiAtIDEuMGYpLWlzaApmbG9hdCBFYXNlcjo6R2V0SW5SYW5nZShjb25zdCBGbG9hdFJhbmdlICZyYW5nZSkgY29uc3QKewogICAgZmxvYXQgdmFsdWUgPSB0aGlzLT5wbG90KHRoaXMtPlBvc2l0aW9uKTsKICAgIHJldHVybiByYW5nZS5HZXRBdCh2YWx1ZSk7Cn0KCi8vUmV0dXJucyB0aGUgdmFsdWUgYXQgJ3BvcycuCmZsb2F0IEVhc2VyOjpHZXRBdChmbG9hdCBwb3MpIGNvbnN0CnsKICAgIHJldHVybiB0aGlzLT5wbG90KHBvcyk7Cn0KCi8vUmV0dXJucyB0aGUgdmFsdWUgYXQgJ3BvcycsIHNjYWxlZCB0byB0aGUgcmFuZ2Ugb2YgJ21pbicgdG8gJ21heCcgaW5zdGVhZCBvZiBhcm91bmQgKDAuMGYgLSAxLjBmKS1pc2gKZmxvYXQgRWFzZXI6OkdldEluUmFuZ2VBdChmbG9hdCBwb3MsIGNvbnN0IEZsb2F0UmFuZ2UgJnJhbmdlKSBjb25zdAp7CiAgICBmbG9hdCB2YWx1ZSA9IHRoaXMtPnBsb3QocG9zKTsKICAgIHJldHVybiByYW5nZS5Db25zdHJhaW5lZCh2YWx1ZSk7Cn0KICAgIAovL01vdmVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZWFzZSBieSAnYW1vdW50Jy4Kdm9pZCBFYXNlcjo6U3RlcChmbG9hdCBhbW91bnQpCnsKICAgIHRoaXMtPlBvc2l0aW9uICs9IGFtb3VudDsKfQoKLy9TYW1lIGFzIFN0ZXAoKS4Kdm9pZCBFYXNlcjo6b3BlcmF0b3IrPShmbG9hdCBhbW91bnQpCnsKICAgIHRoaXMtPlN0ZXAoYW1vdW50KTsKfQoKLy9TYW1lIGFzIFN0ZXAoKSB3aXRoIGEgbmVnYXRpdmUgYW1vdW50Lgp2b2lkIEVhc2VyOjpvcGVyYXRvci09KGZsb2F0IGFtb3VudCkKewogICAgdGhpcy0+U3RlcCgtYW1vdW50KTsKfQoKLy9TYW1lIGFzIFNldFBvc2l0aW9uKCkuCnZvaWQgRWFzZXI6Om9wZXJhdG9yPShmbG9hdCBwb3NpdGlvbikKewogICAgdGhpcy0+U2V0UG9zaXRpb24ocG9zaXRpb24pOwp9CgovL1NhbWUgYXMgR2V0KCkKZmxvYXQgRWFzZXI6Om9wZXJhdG9yKCkoKSBjb25zdAp7CiAgICByZXR1cm4gdGhpcy0+R2V0KCk7Cn0KCi8vU2FtZSBhcyBHZXRBdCgpCmZsb2F0IEVhc2VyOjpvcGVyYXRvcigpKGZsb2F0IHZhbHVlKSBjb25zdAp7CiAgICByZXR1cm4gdGhpcy0+R2V0QXQodmFsdWUpOwp9CgovL0NhbGxzIHRoZSB2aXJ0dWFsIGZ1bmN0aW9uICdwbG90JyBhbmQgcHJvY2Vzc2VzIHRoZSByZXN1bHQgZGVwZW5kaW5nIG9uIHRoZSBFYXNlU3R5bGUuCmZsb2F0IEVhc2VyOjpwbG90KGZsb2F0IHBvc2l0aW9uKSBjb25zdAp7CiAgICAvL0JpbmRzICdwb3NpdGlvbicgZnJvbSAwLjAgdG8gMS4wLgogICAgLy9pZihwb3NpdGlvbiA+IDEuMGYpIHBvc2l0aW9uID0gMS4wZjsKICAgIC8vaWYocG9zaXRpb24gPCAwLjBmKSBwb3NpdGlvbiA9IDAuMGY7CiAgICAKICAgIGZsb2F0IHJlc3VsdDsKICAgIAogICAgaWYodGhpcy0+U3R5bGUgPT0gRWFzZUluKQogICAgewogICAgICAgIC8vUGxvdHMgdGhlIHBvc2l0aW9uLgogICAgICAgIHJlc3VsdCA9IHRoaXMtPkVhc2VGdW5jKHBvc2l0aW9uKTsKICAgIH0KICAgIGVsc2UgaWYodGhpcy0+U3R5bGUgPT0gRWFzZU91dCkKICAgIHsKICAgICAgICAvL1Bsb3RzIHRoZSBwb3NpdGlvbi4KICAgICAgICByZXN1bHQgPSBEb0Vhc2VPdXQodGhpcy0+RWFzZUZ1bmMsIHBvc2l0aW9uKTsKICAgIH0KICAgIGVsc2UgaWYodGhpcy0+U3R5bGUgPT0gRWFzZUluT3V0KQogICAgewogICAgICAgIC8vUGxvdHMgdGhlIHBvc2l0aW9uLgogICAgICAgIHJlc3VsdCA9IERvRWFzZUluT3V0KHRoaXMtPkVhc2VGdW5jLCBwb3NpdGlvbik7CiAgICB9CiAgICBlbHNlIGlmKHRoaXMtPlN0eWxlID09IEVhc2VPdXRJbikKICAgIHsKICAgICAgICAvL1Bsb3RzIHRoZSBwb3NpdGlvbi4KICAgICAgICByZXN1bHQgPSBEb0Vhc2VPdXRJbih0aGlzLT5FYXNlRnVuYywgcG9zaXRpb24pOwogICAgfQogICAgCiAgICAvL0NvbnN0cmFpbnMgdGhlIHJlc3VsdCBhbmQgcmV0dXJucy4KICAgIHJldHVybiB0aGlzLT5Db25zdGFpbnRzLkNvbnN0cmFpbmVkKHJlc3VsdCk7Cn0=
Easer.cpp


