esphome/esphome/components/light/light_effect.h
2021-08-05 11:28:39 +12:00

43 lines
943 B
C++

#pragma once
#include <utility>
#include "esphome/core/component.h"
namespace esphome {
namespace light {
class LightState;
class LightEffect {
public:
explicit LightEffect(std::string name) : name_(std::move(name)) {}
/// Initialize this LightEffect. Will be called once after creation.
virtual void start() {}
virtual void start_internal() { this->start(); }
/// Called when this effect is about to be removed
virtual void stop() {}
/// Apply this effect. Use the provided state for starting transitions, ...
virtual void apply() = 0;
const std::string &get_name() { return this->name_; }
/// Internal method called by the LightState when this light effect is registered in it.
virtual void init() {}
void init_internal(LightState *state) {
this->state_ = state;
this->init();
}
protected:
LightState *state_{nullptr};
std::string name_;
};
} // namespace light
} // namespace esphome