summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2021-03-13 07:25:23 -0500
committerStar Rauchenberger <fefferburbia@gmail.com>2021-03-13 15:34:50 -0500
commit142e00794097dfb78c4b758a2d39d26fae070092 (patch)
tree72ca6327cf5d1658573ab112b397f2f28992062a /src
parent3c505f6f7fa5d4fab7c2a2864a45c8f5d0b4d329 (diff)
downloadtanetane-142e00794097dfb78c4b758a2d39d26fae070092.tar.gz
tanetane-142e00794097dfb78c4b758a2d39d26fae070092.tar.bz2
tanetane-142e00794097dfb78c4b758a2d39d26fae070092.zip
Created Interpolation abstraction
This simplifies EffectSystem quite a bit, and will be useful in other classes.
Diffstat (limited to 'src')
-rw-r--r--src/effect_system.cpp44
-rw-r--r--src/effect_system.h39
-rw-r--r--src/interpolation.cpp19
-rw-r--r--src/interpolation.h26
4 files changed, 64 insertions, 64 deletions
diff --git a/src/effect_system.cpp b/src/effect_system.cpp index 4dff13c..9b24d3e 100644 --- a/src/effect_system.cpp +++ b/src/effect_system.cpp
@@ -4,23 +4,9 @@
4void EffectSystem::tick(double dt) { 4void EffectSystem::tick(double dt) {
5 if (game_.isGameplayPaused()) return; 5 if (game_.isGameplayPaused()) return;
6 6
7 if (screenFade_ != screenFadeDest_) { 7 screenFade_.tick(dt);
8 screenFadeThus_ += dt; 8 mapFade_.tick(dt);
9 if (screenFadeThus_ >= screenFadeLength_) { 9 circleEffect_.tick(dt);
10 screenFadeThus_ = screenFadeLength_;
11 }
12
13 screenFade_ = (screenFadeDest_ - screenFadeStart_) / screenFadeLength_ * screenFadeThus_ + screenFadeStart_;
14 }
15
16 if (mapFade_ != mapFadeDest_) {
17 mapFadeThus_ += dt;
18 if (mapFadeThus_ >= mapFadeLength_) {
19 mapFadeThus_ = mapFadeLength_;
20 }
21
22 mapFade_ = (mapFadeDest_ - mapFadeStart_) / mapFadeLength_ * mapFadeThus_ + mapFadeStart_;
23 }
24 10
25 if (cameraShaking_) { 11 if (cameraShaking_) {
26 cameraShakeTimer_.accumulate(dt); 12 cameraShakeTimer_.accumulate(dt);
@@ -37,29 +23,14 @@ void EffectSystem::tick(double dt) {
37 cameraShakeOffset_.y() = 0; 23 cameraShakeOffset_.y() = 0;
38 } 24 }
39 } 25 }
40
41 if (circleEffect_ != circleEffectDest_) {
42 circleEffectThus_ += dt;
43 if (circleEffectThus_ >= circleEffectLength_) {
44 circleEffectThus_ = circleEffectLength_;
45 }
46
47 circleEffect_ = (circleEffectDest_ - circleEffectStart_) / circleEffectLength_ * circleEffectThus_ + circleEffectStart_;
48 }
49} 26}
50 27
51void EffectSystem::fadeScreen(int length, double amount) { 28void EffectSystem::fadeScreen(int length, double amount) {
52 screenFadeStart_ = screenFade_; 29 screenFade_.start(length, amount);
53 screenFadeDest_ = amount;
54 screenFadeLength_ = length;
55 screenFadeThus_ = 0;
56} 30}
57 31
58void EffectSystem::fadeMap(int length, double amount) { 32void EffectSystem::fadeMap(int length, double amount) {
59 mapFadeStart_ = mapFade_; 33 mapFade_.start(length, amount);
60 mapFadeDest_ = amount;
61 mapFadeLength_ = length;
62 mapFadeThus_ = 0;
63} 34}
64 35
65void EffectSystem::shakeCamera(int period) { 36void EffectSystem::shakeCamera(int period) {
@@ -75,8 +46,5 @@ void EffectSystem::stopShakingCamera() {
75} 46}
76 47
77void EffectSystem::circleTransition(int length, double amount) { 48void EffectSystem::circleTransition(int length, double amount) {
78 circleEffectStart_ = circleEffect_; 49 circleEffect_.start(length, amount);
79 circleEffectDest_ = amount;
80 circleEffectLength_ = length;
81 circleEffectThus_ = 0;
82} 50}
diff --git a/src/effect_system.h b/src/effect_system.h index 904e6cb..b2b4669 100644 --- a/src/effect_system.h +++ b/src/effect_system.h
@@ -1,6 +1,7 @@
1#ifndef EFFECT_SYSTEM_H_0B497B39 1#ifndef EFFECT_SYSTEM_H_0B497B39
2#define EFFECT_SYSTEM_H_0B497B39 2#define EFFECT_SYSTEM_H_0B497B39
3 3
4#include "interpolation.h"
4#include "system.h" 5#include "system.h"
5#include "timer.h" 6#include "timer.h"
6#include "vector.h" 7#include "vector.h"
@@ -41,54 +42,40 @@ public:
41 42
42 /* Information */ 43 /* Information */
43 44
44 bool isScreenFaded() const { return screenFade_ > 0.0; } 45 bool isScreenFaded() const { return screenFade_.getProgress() > 0.0; }
45 46
46 double getScreenFadeProgress() const { return screenFade_; } 47 double getScreenFadeProgress() const { return screenFade_.getProgress(); }
47 48
48 bool isScreenFadeComplete() const { return screenFade_ == screenFadeDest_; } 49 bool isScreenFadeComplete() const { return screenFade_.isComplete(); }
49 50
50 bool isMapFaded() const { return mapFade_ > 0.0; } 51 bool isMapFaded() const { return mapFade_.getProgress() > 0.0; }
51 52
52 double getMapFadeProgress() const { return mapFade_; } 53 double getMapFadeProgress() const { return mapFade_.getProgress(); }
53 54
54 bool isMapFadeComplete() const { return mapFade_ == mapFadeDest_; } 55 bool isMapFadeComplete() const { return mapFade_.isComplete(); }
55 56
56 const vec2i& getCameraShakeOffset() const { return cameraShakeOffset_; } 57 const vec2i& getCameraShakeOffset() const { return cameraShakeOffset_; }
57 58
58 bool isCameraShaking() const { return cameraShaking_; } 59 bool isCameraShaking() const { return cameraShaking_; }
59 60
60 bool isCircleTransitionActive() const { return circleEffect_ > 0.0; } 61 bool isCircleTransitionActive() const { return circleEffect_.getProgress() > 0.0; }
61 62
62 double getCircleTransitionProgress() const { return circleEffect_; } 63 double getCircleTransitionProgress() const { return circleEffect_.getProgress(); }
63 64
64 bool isCircleTransitionComplete() const { return circleEffect_ == circleEffectDest_; } 65 bool isCircleTransitionComplete() const { return circleEffect_.isComplete(); }
65 66
66private: 67private:
67 68
68 Game& game_; 69 Game& game_;
69 70
70 double screenFade_ = 0.0; 71 Interpolation screenFade_;
71 double screenFadeDest_ = 0.0; 72 Interpolation mapFade_;
72 double screenFadeStart_ = 0.0; 73 Interpolation circleEffect_;
73 double screenFadeLength_ = 0;
74 double screenFadeThus_ = 0;
75
76 double mapFade_ = 0.0;
77 double mapFadeDest_ = 0.0;
78 double mapFadeStart_ = 0.0;
79 double mapFadeLength_ = 0.0;
80 double mapFadeThus_ = 0.0;
81 74
82 bool cameraShaking_ = false; 75 bool cameraShaking_ = false;
83 vec2i cameraShakeOffset_ { 0, 0 }; 76 vec2i cameraShakeOffset_ { 0, 0 };
84 bool cameraShakeOn_ = false; 77 bool cameraShakeOn_ = false;
85 Timer cameraShakeTimer_ { 0 }; 78 Timer cameraShakeTimer_ { 0 };
86
87 double circleEffect_ = 0.0;
88 double circleEffectDest_ = 0.0;
89 double circleEffectStart_ = 0.0;
90 double circleEffectLength_ = 0.0;
91 double circleEffectThus_ = 0.0;
92}; 79};
93 80
94#endif /* end of include guard: EFFECT_SYSTEM_H_0B497B39 */ 81#endif /* end of include guard: EFFECT_SYSTEM_H_0B497B39 */
diff --git a/src/interpolation.cpp b/src/interpolation.cpp new file mode 100644 index 0000000..3c9bcf8 --- /dev/null +++ b/src/interpolation.cpp
@@ -0,0 +1,19 @@
1#include "interpolation.h"
2
3void Interpolation::start(int length, double amount) {
4 start_ = progress_;
5 dest_ = amount;
6 length_ = length;
7 thus_ = 0;
8}
9
10void Interpolation::tick(double dt) {
11 if (progress_ != dest_) {
12 thus_ += dt;
13 if (thus_ >= length_) {
14 thus_ = length_;
15 }
16
17 progress_ = (dest_ - start_) / length_ * thus_ + start_;
18 }
19}
diff --git a/src/interpolation.h b/src/interpolation.h new file mode 100644 index 0000000..d89602d --- /dev/null +++ b/src/interpolation.h
@@ -0,0 +1,26 @@
1#ifndef INTERPOLATION_H_861230A8
2#define INTERPOLATION_H_861230A8
3
4class Interpolation {
5public:
6
7 void start(int length, double amount);
8
9 void tick(double dt);
10
11 // Info
12
13 double getProgress() const { return progress_; }
14
15 bool isComplete() const { return progress_ == dest_; }
16
17private:
18
19 double progress_ = 0.0;
20 double dest_ = 0.0;
21 double start_ = 0.0;
22 double length_ = 0.0;
23 double thus_ = 0.0;
24};
25
26#endif /* end of include guard: INTERPOLATION_H_861230A8 */