FastLED 3.9.15
Loading...
Searching...
No Matches
time.cpp
Go to the documentation of this file.
1#include "time.h"
2
3#include "fl/namespace.h"
4
5#include "fl/dbg.h"
6#include "fl/warn.h"
7
8#define DBG FASTLED_DBG
9
10namespace fl {
11
12TimeWarp::TimeWarp(uint32_t realTimeNow, float initialTimeScale)
13 : mLastRealTime(realTimeNow), mStartTime(realTimeNow),
14 mTimeScale(initialTimeScale) {}
15
17
19
20float TimeWarp::scale() const { return mTimeScale; }
21
22void TimeWarp::pause(uint32_t now) {
23 if (mPauseTime) {
24 FASTLED_WARN("TimeWarp::pause: already paused");
25 return;
26 }
27 mPauseTime = now;
28}
29void TimeWarp::resume(uint32_t now) {
30 if (mLastRealTime == 0) {
31 reset(now);
32 return;
33 }
34 uint32_t diff = now - mPauseTime;
35 mStartTime += diff;
36 mLastRealTime += diff;
37 mPauseTime = 0;
38}
39
40uint32_t TimeWarp::update(uint32_t timeNow) {
41
42 // DBG("TimeWarp::update: timeNow: " << timeNow << " mLastRealTime: " <<
43 // mLastRealTime
44 //<< " mRelativeTime: " << mRelativeTime << " mTimeScale: " << mTimeScale);
45
46 if (mLastRealTime > timeNow) {
47 DBG("TimeWarp::applyExact: mLastRealTime > timeNow: "
48 << mLastRealTime << " > " << timeNow);
49 }
50
51 applyExact(timeNow);
52 return time();
53}
54
55uint32_t TimeWarp::time() const { return mRelativeTime; }
56
57void TimeWarp::reset(uint32_t realTimeNow) {
58 mLastRealTime = realTimeNow;
59 mStartTime = realTimeNow;
60 mRelativeTime = 0;
61}
62
63void TimeWarp::applyExact(uint32_t timeNow) {
64 uint32_t elapsedRealTime = timeNow - mLastRealTime;
65 mLastRealTime = timeNow;
66 int32_t diff = static_cast<int32_t>(elapsedRealTime * mTimeScale);
67 if (diff == 0) {
68 return;
69 }
70 if (diff >= 0) {
71 mRelativeTime += diff;
72 return;
73 }
74
75 // diff < 0
76 uint32_t abs_diff = -diff;
77 if (abs_diff > mRelativeTime) {
78 // Protection against rollover.
79 mRelativeTime = 0;
80 mLastRealTime = timeNow;
81 return;
82 }
83 mLastRealTime = timeNow;
84 mRelativeTime -= abs_diff;
85}
86
88
89} // namespace fl
UISlider speed("Speed", 1.0f, -20.0f, 20.0f, 0.01f)
TimeWarp timeScale(0, 1.0f)
float scale() const
Definition time.cpp:20
float mTimeScale
Definition time.h:50
uint32_t time() const override
Definition time.cpp:55
void setSpeed(float speedScale)
Definition time.cpp:18
uint32_t mLastRealTime
Definition time.h:47
uint32_t update(uint32_t timeNow) override
Definition time.cpp:40
void reset(uint32_t realTimeNow) override
Definition time.cpp:57
void pause(uint32_t now)
Definition time.cpp:22
uint32_t mRelativeTime
Definition time.h:49
TimeWarp(uint32_t realTimeNow=0, float initialTimeScale=1.0f)
Definition time.cpp:12
void setScale(float speed) FASTLED_DEPRECATED("Use setSpeed(...) instead.")
Definition time.cpp:87
uint32_t mPauseTime
Definition time.h:51
uint32_t mStartTime
Definition time.h:48
void resume(uint32_t now)
Definition time.cpp:29
void applyExact(uint32_t timeNow)
Definition time.cpp:63
Implements the FastLED namespace macros.
Implements a simple red square effect for 2D LED grids.
Definition crgb.h:16
#define DBG
Definition time.cpp:8
#define FASTLED_WARN
Definition warn.h:7