3 #include "../animation.h"
9 #include <Strings/components/utils/math/math.h>
25 D2D1_COLOR_F evaluated_color;
30 float fade_duration = 1.0f;
32 int ticks_per_fade = 0;
34 bool swap_fade_direction =
false;
35 float elapsed_time = 0.0f;
38 bool animation_done =
false;
39 bool is_started =
false;
50 float GetIntermediaryColor(
float subcolor1,
float subcolor2)
52 float blend_amount = fabsf((subcolor1 - subcolor2) * elapsed_time);
54 if (subcolor1 < subcolor2)
56 return subcolor2 - blend_amount;
60 return subcolor2 + blend_amount;
75 if (local_ticks == ticks_per_fade)
77 swap_fade_direction = !swap_fade_direction;
81 elapsed_time = float(local_ticks) / float(ticks_per_fade);
83 if (swap_fade_direction)
85 evaluated_color.r = GetIntermediaryColor(color_1.r, color_2.r);
86 evaluated_color.g = GetIntermediaryColor(color_1.g, color_2.g);
87 evaluated_color.b = GetIntermediaryColor(color_1.b, color_2.b);
88 evaluated_color.a = GetIntermediaryColor(color_1.a, color_2.a);
92 evaluated_color.r = GetIntermediaryColor(color_2.r, color_1.r);
93 evaluated_color.g = GetIntermediaryColor(color_2.g, color_1.g);
94 evaluated_color.b = GetIntermediaryColor(color_2.b, color_1.b);
95 evaluated_color.a = GetIntermediaryColor(color_2.a, color_1.a);
104 elapsed_time = float(local_ticks) / float(ticks_per_fade);
106 evaluated_color.r = GetIntermediaryColor(color_1.r, color_2.r);
107 evaluated_color.g = GetIntermediaryColor(color_1.g, color_2.g);
108 evaluated_color.b = GetIntermediaryColor(color_1.b, color_2.b);
109 evaluated_color.a = GetIntermediaryColor(color_1.a, color_2.a);
111 if (evaluated_color.r == color_1.r && evaluated_color.g == color_1.g && evaluated_color.b == color_1.b && evaluated_color.a == color_1.a)
113 animation_done =
true;
133 void Initialize(D2D1_COLOR_F _c1, D2D1_COLOR_F _c2,
float fade_duration,
bool _loop)
137 ticks_per_fade = full_ticks_per_fade;
139 if (!BlamStrings::Utils::Math::FloatIsInteger(full_ticks_per_fade))
141 Blam::Logger::LogEvent(
"color transition animation was configured to use fade duration of " + std::to_string(fade_duration) +
142 ", which results in a tick per fade of " + std::to_string(full_ticks_per_fade) +
" - the animation will not be properly fixed to a per-second timestep and "
143 +
"this can cause unforeseen issues!",
WSV_WARNING);
151 evaluated_color = _c2;
173 return evaluated_color;