FastLED 3.9.15
Loading...
Searching...
No Matches

◆ applyExact()

void fl::TimeWarp::applyExact ( fl::u32 timeNow)
private

Definition at line 52 of file time.cpp.hpp.

52 {
53 // Handle time going backwards - reset if this happens
54 if (timeNow < mLastRealTime) {
55 FL_WARN("TimeWarp::applyExact: time went backwards, resetting");
56 reset(timeNow);
57 return;
58 }
59
60 fl::u32 elapsedRealTime = timeNow - mLastRealTime;
61 mLastRealTime = timeNow;
62
63 // Calculate scaled time difference with bounds checking
64 float scaledTime = elapsedRealTime * mTimeScale;
65
66 // Check for overflow/underflow before casting to int32_t
67 // int32_t range is [-2147483648, 2147483647]
68 if (scaledTime > 2147483647.0f) {
69 scaledTime = 2147483647.0f;
70 } else if (scaledTime < -2147483648.0f) {
71 scaledTime = -2147483648.0f;
72 }
73
74 i32 diff = static_cast<i32>(scaledTime);
75 if (diff == 0) {
76 return;
77 }
78 if (diff >= 0) {
79 mRelativeTime += diff;
80 return;
81 }
82
83 // diff < 0
84 fl::u32 abs_diff = -diff;
85 if (abs_diff > mRelativeTime) {
86 // Protection against rollover.
87 mRelativeTime = 0;
88 mLastRealTime = timeNow;
89 return;
90 }
91 mLastRealTime = timeNow;
92 mRelativeTime -= abs_diff;
93}
void reset(fl::u32 realTimeNow) override
Definition time.cpp.hpp:46
float mTimeScale
Definition time.h:50
fl::u32 mLastRealTime
Definition time.h:47
fl::u32 mRelativeTime
Definition time.h:49
#define FL_WARN(X)
Definition log.h:276

References FL_WARN, mLastRealTime, mRelativeTime, mTimeScale, and reset().

Referenced by update().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: