#pragma once #include "esphome/core/automation.h" namespace esphome { namespace script { class Script : public Trigger<> { public: void execute() { bool prev = this->in_stack_; this->in_stack_ = true; this->trigger(); this->in_stack_ = prev; } bool script_is_running() { return this->in_stack_ || this->is_running(); } protected: bool in_stack_{false}; }; template class ScriptExecuteAction : public Action { public: ScriptExecuteAction(Script *script) : script_(script) {} void play(Ts... x) override { this->script_->trigger(); } protected: Script *script_; }; template class ScriptStopAction : public Action { public: ScriptStopAction(Script *script) : script_(script) {} void play(Ts... x) override { this->script_->stop(); } protected: Script *script_; }; template class IsRunningCondition : public Condition { public: explicit IsRunningCondition(Script *parent) : parent_(parent) {} bool check(Ts... x) override { return this->parent_->script_is_running(); } protected: Script *parent_; }; } // namespace script } // namespace esphome