完善V1.4踢乒乓球版本
This commit is contained in:
1 parent
d14fe6c37b
commit
72455a5e76
1864 files changed
+19294
-218
No files matched your search
@@ -0,0 +1,108 @@
|
||||
|
||||
#include "fl/time_alpha.h"
|
||||
#include "fl/warn.h"
|
||||
#include "math_macros.h"
|
||||
|
||||
namespace fl {
|
||||
|
||||
u8 time_alpha8(u32 now, u32 start, u32 end) {
|
||||
if (now < start) {
|
||||
return 0;
|
||||
}
|
||||
if (now > end) {
|
||||
return 255;
|
||||
}
|
||||
u32 elapsed = now - start;
|
||||
u32 total = end - start;
|
||||
u32 out = (elapsed * 255) / total;
|
||||
if (out > 255) {
|
||||
out = 255;
|
||||
}
|
||||
return static_cast<u8>(out);
|
||||
}
|
||||
|
||||
u16 time_alpha16(u32 now, u32 start, u32 end) {
|
||||
if (now < start) {
|
||||
return 0;
|
||||
}
|
||||
if (now > end) {
|
||||
return 65535;
|
||||
}
|
||||
u32 elapsed = now - start;
|
||||
u32 total = end - start;
|
||||
u32 out = (elapsed * 65535) / total;
|
||||
if (out > 65535) {
|
||||
out = 65535;
|
||||
}
|
||||
return static_cast<u16>(out);
|
||||
}
|
||||
|
||||
TimeRamp::TimeRamp(u32 risingTime, u32 latchMs, u32 fallingTime)
|
||||
: mLatchMs(latchMs), mRisingTime(risingTime), mFallingTime(fallingTime) {}
|
||||
|
||||
void TimeRamp::trigger(u32 now) {
|
||||
mStart = now;
|
||||
// mLastValue = 0;
|
||||
|
||||
mFinishedRisingTime = mStart + mRisingTime;
|
||||
mFinishedPlateauTime = mFinishedRisingTime + mLatchMs;
|
||||
mFinishedFallingTime = mFinishedPlateauTime + mFallingTime;
|
||||
}
|
||||
|
||||
void TimeRamp::trigger(u32 now, u32 risingTime, u32 latchMs,
|
||||
u32 fallingTime) {
|
||||
mRisingTime = risingTime;
|
||||
mLatchMs = latchMs;
|
||||
mFallingTime = fallingTime;
|
||||
trigger(now);
|
||||
}
|
||||
|
||||
bool TimeRamp::isActive(u32 now) const {
|
||||
|
||||
bool not_started = (mFinishedRisingTime == 0) &&
|
||||
(mFinishedPlateauTime == 0) &&
|
||||
(mFinishedFallingTime == 0);
|
||||
if (not_started) {
|
||||
// if we have not started, we are not active
|
||||
return false;
|
||||
}
|
||||
|
||||
if (now < mStart) {
|
||||
// if the time is before the start, we are not active
|
||||
return false;
|
||||
}
|
||||
|
||||
if (now > mFinishedFallingTime) {
|
||||
// if the time is after the finished rising, we are not active
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
u8 TimeRamp::update8(u32 now) {
|
||||
if (!isActive(now)) {
|
||||
return 0;
|
||||
}
|
||||
// u32 elapsed = now - mStart;
|
||||
u8 out = 0;
|
||||
if (now < mFinishedRisingTime) {
|
||||
out = time_alpha8(now, mStart, mFinishedRisingTime);
|
||||
} else if (now < mFinishedPlateauTime) {
|
||||
// plateau
|
||||
out = 255;
|
||||
} else if (now < mFinishedFallingTime) {
|
||||
// ramp down
|
||||
u8 alpha =
|
||||
time_alpha8(now, mFinishedPlateauTime, mFinishedFallingTime);
|
||||
out = 255 - alpha;
|
||||
} else {
|
||||
// finished
|
||||
out = 0;
|
||||
}
|
||||
|
||||
mLastValue = out;
|
||||
return out;
|
||||
}
|
||||
|
||||
} // namespace fl
|
||||
Reference in new issue
Block a user