64 lines
1.3 KiB
C++
64 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include "effects/Common.h"
|
|
#include "effects/AlexaSwipe.h"
|
|
#include "effects/RandomTwoColorInterpolation.h"
|
|
|
|
#pragma pack(push, 1)
|
|
struct EffectSwipeAndChangeConfig
|
|
{
|
|
EffectAlexaSwipeConfig swipeCfg;
|
|
EffectRandomTwoColorInterpolationConfig changeCfg;
|
|
};
|
|
#pragma pack(pop)
|
|
|
|
template <typename TLedStrip>
|
|
class EffectSwipeAndChange
|
|
{
|
|
public:
|
|
EffectSwipeAndChange(const EffectSwipeAndChangeConfig &cfg, TLedStrip &ledStrip)
|
|
: effect1_(cfg.swipeCfg, ledStrip),
|
|
effect2_(cfg.changeCfg, ledStrip),
|
|
effectRunning_(0)
|
|
{
|
|
}
|
|
|
|
int operator()()
|
|
{
|
|
if (!effect1_.finished())
|
|
{
|
|
return effect1_();
|
|
}
|
|
else
|
|
{
|
|
if (effectRunning_ == 0)
|
|
effect2_.begin();
|
|
effectRunning_ = 1;
|
|
return effect2_();
|
|
}
|
|
}
|
|
|
|
private:
|
|
EffectAlexaSwipe<TLedStrip> effect1_;
|
|
EffectRandomTwoColorInterpolation<TLedStrip> effect2_;
|
|
int effectRunning_;
|
|
};
|
|
|
|
// Traits
|
|
template <>
|
|
struct EffectIdToConfig<EffectId::SWIPE_AND_CHANGE>
|
|
{
|
|
using type = EffectSwipeAndChangeConfig;
|
|
};
|
|
|
|
template <>
|
|
struct EffectConfigToId<EffectSwipeAndChangeConfig>
|
|
{
|
|
static constexpr auto id = EffectId::SWIPE_AND_CHANGE;
|
|
};
|
|
|
|
template <typename TLedStrip>
|
|
struct EffectIdToClass<EffectId::SWIPE_AND_CHANGE, TLedStrip>
|
|
{
|
|
using type = EffectSwipeAndChange<TLedStrip>;
|
|
}; |