/********************************************************************
 *  Nomes: Gabriel Capella                       Números USP: 8962078 
 *         João Herique Luciano                               8535957
 * 
 *  Tarefa:    RedCore - EP2 MAC0463
 *  Arquivo:   Paddle.h
 *  Descrição: Classe para auxiliar na criação da raquete.
 ********************************************************************/

#ifndef Paddle_h
#define Paddle_h

#include "cocos2d.h"

#define HALF 1
#define NORMAL 2
#define DOUBLE 3

class Paddle : public cocos2d::Node {
    public:
        /**
         * Inicia elementos quando a raquete é criada.
         * @return se foi possível criar a raquete ou não.
         */
        virtual bool init();

        /**
         * Duplica o tamanho da raquete.
         */
        void doubleSize();

        /**
         * Divide por dois o tamanho da raquete.
         */
        void halfSize();

        /**
         * Possibilita que esse nó escute eventos provenientes do
         * touch. 
         * 
         * @param width largura da tela
         */
        void listen(double width);

        /**
         * É um macro do cocos2d-x que define a função create do
         * do classe.
         * 
         * @param Classe para qual vai criar.
         */
        CREATE_FUNC(Paddle);
    private:
        /**
         * Desenho da raquete grande.
         */
        cocos2d::DrawNode* double_paddle;

        /**
         * Desenho da raquete normal.
         */
        cocos2d::DrawNode* normal_paddle;

        /**
         * Desenho da raquete pequena.
         */
        cocos2d::DrawNode* half_paddle;

        /**
         * Marca qual o tamanho atual da raquete.
         */
        int stade;

        /**
         * Move a raquete
         * 
         * @param px posicao para quall ela vai.
         * @param width largura em pixels da tela
         */
        void setPX (double px, double width);

        /**
         * Transforma uma raquete para seu tamanho norma.
         */
        void normalSize();

        /**
         * Inicia um timer para voltar a raquete para seu tamnho
         * norma.
         */
        void startNormalTimer();

};

#endif /* Paddle_h */
