SuperSpaceInvaderTurboApoca.../lib_headers/mingl/transition/transition.h
2021-12-13 09:08:31 +01:00

129 lines
3.7 KiB
C++

/**
*
* @file transition.h
* @author Alexandre Sollier
* @date Janvier 2020
* @version 1.0
* @brief Definition d'une transition
*
**/
#ifndef TRANSITION_H
#define TRANSITION_H
#include "transition_contract.h"
/**
* @namespace nsTransition
* @brief Espace de nom pour le moteur de transition et ses composants
*/
namespace nsTransition
{
/**
* @class Transition
* @brief Une classe représentant un TransitionContract en cours de lecture
*/
class Transition : public TransitionContract
{
public:
/**
* @brief TransitionMode : Liste de tout les modes de fin de la Transition
*/
enum TransitionFinishModes {
FINISH_START, /**< Ce mode de fin met les valeurs de la cible a celles de départ */
FINISH_CURRENT, /**< Ce mode de fin ne touche pas aux valeurs actuelles de la cible */
FINISH_DESTINATION, /**< Ce mode de fin met les valeurs de la cible a celles d'arrivé */
};
/**
* @brief Constructeur pour la classe Transition
* @param[in] contract : Contrat utilisé pour initialiser cette Transition
* @fn Transition(const TransitionContract& contract);
*/
Transition(const TransitionContract& contract);
/**
* @brief Retourne le temps écoulé pour cette Transition
* @return Une référence const vers m_elapsed
* @fn const SystemDuration_t& getElapsed() const;
*/
const SystemDuration_t& getElapsed() const;
/**
* @brief Définit un nouveau temps écoulé pour cette Transition,
* puis met a jour les valeurs de la cible
* @param[in] elapsed : Nouveau temps écoulé
* @fn void setElapsed(const SystemDuration_t& elapsed);
*/
void setElapsed(const SystemDuration_t& elapsed);
/**
* @brief Rajoute une durée au temps écoulé actuel
* @param[in] addedTime : Durée a rajouter
* @fn void addToElapsed(const SystemDuration_t& addedTime);
*/
void addToElapsed(const SystemDuration_t& addedTime);
/**
* @brief Indique si cette Transition est en train de se jouer a l'envers
* @return Une référence const vers m_reverse
* @fn const bool& isReversed() const;
*/
const bool& isReversed() const;
/**
* @brief Marque cette Transition comme terminée, en utilisant le mode spécifié
* @param[in] finishMode : Mode utilisé pour finir cette Transition (Valeurs d'arrivé par défaut)
* @fn void finish();
*/
void finish(const TransitionFinishModes& finishMode = TransitionFinishModes::FINISH_DESTINATION);
/**
* @brief Indique si cette Transition est marquée comme terminée
* @return Une référence const vers m_finished
* @fn const bool& isFinished() const;
*/
const bool& isFinished() const;
private:
/**
* @brief m_startTime : Stocke le temps du début de cette Transition
*/
SystemTimePoint_t m_startTime;
/**
* @brief m_elapsed : Stocke le temps écoulé
*/
SystemDuration_t m_elapsed;
/**
* @brief m_reverse : Flag set si cette Transition se joue a l'envers
* i.e. se jouant des valeurs d'arrivé vers celles de départ
*/
bool m_reverse;
/**
* @brief m_finished : Flag set si cette Transition doit être considérée terminée
* Le moteur de transition utilisé doit enlever une telle Transition de sa liste
*/
bool m_finished;
/**
* @brief Calcule et définit les nouvelles valeurs a la cible,
* basé sur le temps écoulé, la durée de la transition et le temps de départ
* @fn void updateValues();
*/
void updateValues();
/**
* @brief Appelé quand cette Transition s'est terminée
* @fn void handleEndlife();
*/
void handleEndlife();
}; // class Transition
} // namespace nsTransition
#endif // TRANSITION_H