#pragma once #include #include #include #include /** * PatternInfo structure containing all information needed for a pattern */ struct PatternInfo { String name; uint8_t type; String description; std::function updater; std::function initializer; bool requiresColor2; bool supportsDirection; // Default constructor for std::map compatibility PatternInfo() : type(0), requiresColor2(false), supportsDirection(false) {} // Parameterized constructor PatternInfo(const String& n, uint8_t t, const String& desc, std::function initFunc, std::function updateFunc = nullptr, bool needsColor2 = false, bool supportsDir = true) : name(n), type(t), description(desc), updater(updateFunc), initializer(initFunc), requiresColor2(needsColor2), supportsDirection(supportsDir) {} }; /** * PatternRegistry class for centralized pattern management */ class PatternRegistry { public: using PatternMap = std::map; using PatternTypeMap = std::map; PatternRegistry(); ~PatternRegistry() = default; // Pattern registration void registerPattern(const PatternInfo& pattern); void registerPattern(const String& name, uint8_t type, const String& description, std::function initializer, std::function updater = nullptr, bool requiresColor2 = false, bool supportsDirection = true); // Pattern lookup const PatternInfo* getPattern(const String& name) const; const PatternInfo* getPattern(uint8_t type) const; String getPatternName(uint8_t type) const; uint8_t getPatternType(const String& name) const; // Pattern enumeration std::vector getAllPatternNames() const; std::vector getAllPatterns() const; const PatternMap& getPatternMap() const { return patternMap_; } // Pattern validation bool isValidPattern(const String& name) const; bool isValidPattern(uint8_t type) const; // Pattern execution void executePattern(const String& name) const; void executePattern(uint8_t type) const; void initializePattern(const String& name) const; void initializePattern(uint8_t type) const; private: PatternMap patternMap_; PatternTypeMap typeToNameMap_; void updateTypeMap(); };