Exemple #1
0
void updatePlayer(Input *input)
{
    /* On rajoute un timer au cas où notre héros mourrait
    Si le timer vaut 0, c'est que tout va bien, sinon, on le décrémente jusqu'à 0, et là,
    on réinitialise.
    C'est pour ça qu'on ne gère le joueur que si ce timer vaut 0. */
    if(player.timerMort == 0)
    {
        if(!player.touch) // S'il n'est pas touché
        {
            /* On gère le timer de l'invincibilité */
            if(player.invincibleTimer > 0) player.invincibleTimer--;

            /* On réinitialise notre vecteur de déplacement latéral (X), pour éviter que le perso
            ne fonce de plus en plus */
            player.dirX = player.dirY = player.isAttacking = 0;

            attackManagement(input, &player);

            if(player.state < ATTACK_HORIZONTAL && input->puched < 3) playerDir(input, &player);

            /* Si on n'appuie sur rien, on charge l'animation marquant l'inactivité (Idle), je n'ai pas regarder encore si je pouvais l'optimiser */
            playerIdle(input, &player);

            resetInput(input);
        }
        /* Sinon si il est touché */
        else if(player.touch)
            entityTouch();

        /* On rajoute notre fonction de détection des collisions qui va mettre à
        jour les coordonnées de notre héros. */
        mapCollision(&player);

        /* On gère le scrolling */
        centerScrollingOnPlayer();
    }



    /*Gestion de la mort. Si timerMort est différent de 0, c'est qu'il faut réinitialiser le joueur.
    On ignore alors ce qui précède et on joue cette boucle (un wait en fait) jusqu'à ce que
    timerMort == 1. A ce moment-là, on le décrémente encore -> il vaut 0 et on réinitialise
    le jeu avec notre bonne vieille fonction d'initialisation */
    if(player.timerMort > 0)
    {
        player.timerMort--;
        if(player.timerMort == 0)
        {
            changeLevel();
            initializePlayer(0);
        }
    }

}
Exemple #2
0
void updatePlayer(GameObject *player, Game *game)
{

   //On rajoute un timer au cas où notre héros mourrait lamentablement en tombant dans un trou...
   //Si le timer vaut 0, c'est que tout va bien, sinon, on le décrémente jusqu'à 0, et là,
   //on réinitialise.
   //C'est pour ça qu'on ne gère le joueur que si ce timer vaut 0.
  if (player->timerMort == 0)
  {

    //On réinitialise notre vecteur de déplacement latéral (X), pour éviter que le perso
    //ne fonce de plus en plus vite pour atteindre la vitesse de la lumière ! ;)
    //Essayez de le désactiver pour voir !
    player->dirX = 0;

    // La gravité fait toujours tomber le perso : on incrémente donc le vecteur Y
    player->dirY += GRAVITY_SPEED;

    //Mais on le limite pour ne pas que le joueur se mette à tomber trop vite quand même
    if (player->dirY >= MAX_FALL_SPEED)
    {
        player->dirY = MAX_FALL_SPEED;
    }

    //Voilà, au lieu de changer directement les coordonnées du joueur, on passe par un vecteur
    //qui sera utilisé par la fonction mapCollision(), qui regardera si on peut ou pas déplacer
    //le joueur selon ce vecteur et changera les coordonnées du player en fonction.
     if (game->input->left == 1)
    {
        player->dirX -= PLAYER_SPEED;
        player->direction = LEFT;

        //On teste le sens pour l'animation : si le joueur allait dans le sens contraire
        //précédemment, il faut recharger le spritesheet pour l'animation.
        if(player->etat != WALK_LEFT && player->onGround ==1)
        {
            player->etat = WALK_LEFT;
            changeAnimation(player, "data/graphics/walkleft.png");
        }
    }

    else if (game->input->right == 1)
    {
        player->dirX += PLAYER_SPEED;
        player->direction = RIGHT;

        if(player->etat != WALK_RIGHT && player->onGround == 1)
        {
            player->etat =  WALK_RIGHT;
            changeAnimation(player, "data/graphics/walkright.png");

        }

    }
    else if(game->input->right == 0 && game->input->left ==0 && player->onGround == 1)
    {
        if(player->etat!=IDLE)
        {
            player->etat = IDLE;
            changeAnimation(player, "data/graphics/idle.png");
        }

    }

    //Et voici la fonction de saut très simple :
    //Si on appuie sur la touche saut (C par défaut) et qu'on est sur le sol, alors on attribue une valeur
    //négative au vecteur Y
    //parce que sauter veut dire se rapprocher du haut de l'écran et donc de y=0.
    if (game->input->jump == 1 && player->onGround)
    {
        player->dirY = -JUMP_HEIGHT;
        player->onGround = 0;
        playSoundFx(JUMPSOUND, game);

    }

    if(player->onGround ==0)
    {
       if(player->direction == RIGHT && player->etat != JUMP_RIGHT)
       {
            player->etat = JUMP_RIGHT;
            changeAnimation(player, "data/graphics/jumpright.png");


       }
       else if(player->direction == LEFT && player->etat != JUMP_LEFT)
       {
            player->etat = JUMP_LEFT;
            changeAnimation(player, "data/graphics/jumpleft.png");

       }

    }



    //On rajoute notre fonction de détection des collisions qui va mettre à jour les coordonnées
    //de notre super lapin, puis on centre le scrolling comme avant.
    mapCollision(player,game->map,game);
    centerScrollingOnPlayer(player, game->map);

  }

    //Gestion de la mort quand le héros tombe dans un trou :
    //Si timerMort est différent de 0, c'est qu'il faut réinitialiser le joueur.
    //On ignore alors ce qui précède et on joue cette boucle (un wait en fait) jusqu'à ce que
    // timerMort == 1. A ce moment-là, on le décrémente encore -> il vaut 0 et on réinitialise
    //le jeu avec notre bonne vieille fonction d'initialisation ;) !
    if (player->timerMort > 0)
    {
        player->timerMort--;



    }

  }