mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2025-03-01 10:33:28 +00:00
Added the possibility to set effect arguments over json
Former-commit-id: 4bc2920c04853e549c712ec70492371b14d20877
This commit is contained in:
@@ -14,6 +14,7 @@ SET(EffectEngineQT_HEADERS
|
||||
)
|
||||
|
||||
SET(EffectEngineHEADERS
|
||||
${CURRENT_HEADER_DIR}/EffectDefinition.h
|
||||
)
|
||||
|
||||
SET(EffectEngineSOURCES
|
||||
|
@@ -49,9 +49,9 @@ private:
|
||||
|
||||
const int _timeout;
|
||||
|
||||
const std::string & _script;
|
||||
const std::string _script;
|
||||
|
||||
const Json::Value & _args;
|
||||
const Json::Value _args;
|
||||
|
||||
int64_t _endTime;
|
||||
|
||||
|
@@ -25,7 +25,7 @@ EffectEngine::EffectEngine(Hyperion * hyperion, const Json::Value & jsonEffectCo
|
||||
for (const std::string & name : effectNames)
|
||||
{
|
||||
const Json::Value & info = jsonEffectConfig[name];
|
||||
_availableEffects[name] = {info["script"].asString(), info["args"]};
|
||||
_availableEffects.push_back({name, info["script"].asString(), info["args"]});
|
||||
}
|
||||
|
||||
// initialize the python interpreter
|
||||
@@ -43,22 +43,33 @@ EffectEngine::~EffectEngine()
|
||||
Py_Finalize();
|
||||
}
|
||||
|
||||
std::list<std::string> EffectEngine::getEffects() const
|
||||
const std::list<EffectDefinition> &EffectEngine::getEffects() const
|
||||
{
|
||||
std::list<std::string> effectNames;
|
||||
foreach (auto entry, _availableEffects) {
|
||||
effectNames.push_back(entry.first);
|
||||
}
|
||||
return effectNames;
|
||||
return _availableEffects;
|
||||
}
|
||||
|
||||
int EffectEngine::runEffect(const std::string &effectName, int priority, int timeout)
|
||||
{
|
||||
return runEffect(effectName, Json::Value(Json::nullValue), priority, timeout);
|
||||
}
|
||||
|
||||
int EffectEngine::runEffect(const std::string &effectName, const Json::Value &args, int priority, int timeout)
|
||||
{
|
||||
std::cout << "run effect " << effectName << " on channel " << priority << std::endl;
|
||||
|
||||
if (_availableEffects.find(effectName) == _availableEffects.end())
|
||||
const EffectDefinition * effectDefinition = nullptr;
|
||||
for (const EffectDefinition & e : _availableEffects)
|
||||
{
|
||||
if (e.name == effectName)
|
||||
{
|
||||
effectDefinition = &e;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (effectDefinition == nullptr)
|
||||
{
|
||||
// no such effect
|
||||
std::cerr << "effect " << effectName << " not found" << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -66,8 +77,7 @@ int EffectEngine::runEffect(const std::string &effectName, int priority, int tim
|
||||
channelCleared(priority);
|
||||
|
||||
// create the effect
|
||||
const EffectDefinition & effectDefinition = _availableEffects[effectName];
|
||||
Effect * effect = new Effect(priority, timeout, effectDefinition.script, effectDefinition.args);
|
||||
Effect * effect = new Effect(priority, timeout, effectDefinition->script, args.isNull() ? effectDefinition->args : args);
|
||||
connect(effect, SIGNAL(setColors(int,std::vector<ColorRgb>,int)), _hyperion, SLOT(setColors(int,std::vector<ColorRgb>,int)), Qt::QueuedConnection);
|
||||
connect(effect, SIGNAL(effectFinished(Effect*)), this, SLOT(effectFinished(Effect*)));
|
||||
_activeEffects.push_back(effect);
|
||||
|
Reference in New Issue
Block a user