#pragma once

#include "Transition.hpp"

/*
   Class: AtomicSequentialTransition

     Implements a sequential ordering transition using a queue to process the added child atomic transitions sequentially.

     *Inherits* from <Transition>.
*/
class AtomicSequentialTransition: public Transition {
  public:
    /*
       Constructor: AtomicSequentialTransition

         Initializes the object.
    */
    AtomicSequentialTransition();

    /*
       Destructor: ~AtomicSequentialTransition

         Releases all allocated resources.
    */
    ~AtomicSequentialTransition();


    /*
       Function: Update

         Updates the first atomic transition of the queue. If the atomic transition is completed, it is removed. *Inherited* from <Transition>.
    */
    void Update();

    /*
       Function: Complete

         Checks if the transition is completed, i.e. if all child transitions are completed. *Inherited* from <Transition>.

       Returns:

         A boolean value indicating if the transition is completed.
    */
    bool Complete();
};