/*===========================================
            Plant and fireworks
              Martin Robinson
                tree object
===========================================*/

#pragma once
#ifndef fractal_deja
#define fractal_deja

#include <stack>

#include "turtle.hpp"
#include "lsys.hpp"

class fractal
{
    Tree _tree;             //lsystem
    turtle  _start,         //tortue de départ
           _turtle;         //tortue en iteration
    int _index,             //index dans le lsys
        _touche;            //index ou l'utilisateur à mis sa souris
    stack <turtle> _stack;  //pile pour la tortue
public:
    fractal(string lsys,int x, int y);      //constructeur
    void reset();                           //a initialiser avant chaque frame
    void next();                            //etape suivante pour la tortue
    bool end();                             //indicateur de fin de sequence. la tortue a fait tout l'arbre
    char get();                             //caractere du lsys ou la tortue se trouve
    turtle position();                      //etat de la tortue ou elle se trouve
    int x();                                //coordonné de la tortue
    int y();                                //coordonné de la tortue
    void grow();                            //iteration du lsys à la position de touche
    void parse();                           //la tortue décode le caractere courant (voir get) et l'interprete
    void print();                           //cout lsys
    int index();                            //index du lsys où la tortue se trouve
    void touch();                           //declaration de lutilisateur que la sourie se trouve sur l'index courant
    bool isTouch();                         //test si la touche est déclarer
    char getTouch();                        //le charactere ou la sourie se trouve
    void trimTouch();                       //decoupe l'arbre à la position touche
    void unTouch();                         //unset la postion touche
};


#endif
