goals, constraints, specifications from <Input Var> or other <Var>
functions
OnStart()
update Controller
update <Input Var>
OnRunning()
update Controller
update <State Var>
check <Transition>
OnFinish()
update Controller
update <Output Var>
evaluate <Expression>
namespace utility {
enum class Type {
kEqual,
kLess, kGreater,
kLessOrEqual, kGreaterOrEqual,
kAnd, kOr,
};
} // namespace utility
class Condition
{
public:
virtual bool Triggered() = 0;
Type type_;
Var* left_var_, right_var_;
};
class ConditionEqual : public Condition {};
class ConditionLess : public Condition {};
class ConditionGreater : public Condition {};
class ConditionLessOrEqual : public Condition {};
class ConditionGreaterOrEqual : public Condition {};
class ConditionNested : public Condition
{
public:
// https://en.cppreference.com/w/cpp/language/abstract_class
virtual bool Triggered() override = 0;
protected:
std::vector<Condition*> conditions_;
};
class ConditionAnd : public ConditionNested {};
class ConditionOr : public ConditionNested {};