ChangeFieldOnFinishTransition.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include <ChangeFieldOnFinishTransition.h>
  2. #include <MiLightStatus.h>
  3. ChangeFieldOnFinishTransition::Builder::Builder(
  4. size_t id,
  5. GroupStateField field,
  6. uint16_t arg,
  7. std::shared_ptr<Transition::Builder> delegate
  8. )
  9. : Transition::Builder(delegate->id, delegate->bulbId, delegate->callback, delegate->getMaxSteps())
  10. , delegate(delegate)
  11. , field(field)
  12. , arg(arg)
  13. { }
  14. std::shared_ptr<Transition> ChangeFieldOnFinishTransition::Builder::_build() const {
  15. delegate->setDurationRaw(this->getOrComputeDuration());
  16. delegate->setPeriod(this->getOrComputePeriod());
  17. return std::make_shared<ChangeFieldOnFinishTransition>(
  18. delegate->build(),
  19. field,
  20. arg,
  21. delegate->getPeriod()
  22. );
  23. }
  24. ChangeFieldOnFinishTransition::ChangeFieldOnFinishTransition(
  25. std::shared_ptr<Transition> delegate,
  26. GroupStateField field,
  27. uint16_t arg,
  28. size_t period
  29. ) : Transition(delegate->id, delegate->bulbId, period, delegate->callback)
  30. , delegate(delegate)
  31. , field(field)
  32. , arg(arg)
  33. , changeSent(false)
  34. { }
  35. bool ChangeFieldOnFinishTransition::isFinished() {
  36. return delegate->isFinished() && changeSent;
  37. }
  38. void ChangeFieldOnFinishTransition::step() {
  39. if (! delegate->isFinished()) {
  40. delegate->step();
  41. } else {
  42. callback(bulbId, field, arg);
  43. changeSent = true;
  44. }
  45. }
  46. void ChangeFieldOnFinishTransition::childSerialize(JsonObject& json) {
  47. json[F("type")] = F("change_on_finish");
  48. json[F("field")] = GroupStateFieldHelpers::getFieldName(field);
  49. json[F("value")] = arg;
  50. JsonObject child = json.createNestedObject(F("child"));
  51. delegate->childSerialize(child);
  52. }