Skip to content
Snippets Groups Projects
MoteurPhysique.java 4.33 KiB
/* ========================================================== */
/*                  Bibliotheque MoteurDeJeu                  */
/* --------------------------------------------               */
/* Bibliotheque pour aider la création de jeu video comme :   */
/* - Jeux de role                                             */
/* - Jeux de plateforme                                       */
/* - Jeux de combat                                           */
/* - Jeux de course                                           */
/* - Ancien jeu d'arcade (Pac-Man, Space Invider, Snake, ...) */
/* ========================================================== */

package physique;

import java.io.IOException;
import java.util.ArrayList;

import controle.Controle;

//permet de g�rer la physique

/**
 *
 * @author Pierre-Frederic Villard
 */
public class MoteurPhysique {

	// la liste des objets dans le monde

    /**
     *
     */
	public Monde monde;

        
        public boolean gravity=true;
        
        public float gravityValue=-0.04f;

    /**
     * Construit un moteur par defaut
     * @throws IOException
     */
	public MoteurPhysique() throws IOException {
		monde = new Monde();
	}

	// met a jour le monde

    /**
     *
     */
	public void update() {
		// mise a jour des objets
		for (Objet o : monde.objets) {
			o.update();
			o.collision=false;
		}

		// mise a jour des monstres
		for (ObjetMonstre monstre : monde.monstres) {
			monstre.evolue();
		}

		// gestion du controleur
		if (monde.c.gauche)
			{
			if (monde.balle.ovx==0)
			{
				monde.balle.sprites.changeEtape("course");
			}
			monde.balle.ax = -0.1;
			if (monde.balle.vx<-2)
					monde.balle.vx=-2;
			
			}
			
		else if (monde.c.droite)
		{
			if (monde.balle.ovx==0)
			{
				monde.balle.sprites.changeEtape("course");
			}
			monde.balle.ax = 0.1;
			if (monde.balle.vx>2)
					monde.balle.vx=2;
			
			}
		else
		{
			if ((monde.balle.vx<0.2)&&(monde.balle.vx>-0.2))
			{
				monde.balle.vx=0;
				monde.balle.ax=0;
				monde.balle.sprites.changeEtape("fixe");
			}
			else
			if (monde.balle.vx>0) monde.balle.ax = -0.1;
			else
			if (monde.balle.vx<0) monde.balle.ax = +0.1;
		}
		
                
		//gestion des sauts
                if (gravity)
                {        
                    if ((monde.c.haut)&&(!monde.c.enAir))
                    {
                            monde.balle.sprites.changeEtape("saut");
                            monde.balle.vy=3;
                            monde.balle.ay=gravityValue;
                            monde.c.enAir=true;
                    }
                }
                else
                {
                    monde.balle.ay = 0;
                    monde.balle.vy = 0;
                    if (monde.c.haut)
                    {
                        monde.balle.vy = 1;
                    }
                    if (monde.c.bas)
                    {
                        monde.balle.vy = -1;
                    }                                      
                }
		monde.balle.collision=false;

		// mise a jour de la balle
		monde.balle.update();

		// test de collision pour chaque mur
		for (Objet obj : monde.objets) {

			if (Collision.collision(monde.balle, obj)) {
				//m.balle.collision = true;
				//obj.collision=true;			
				
				//si collision vient de la gauche ou droite
				if (Collision.collisionGauche(monde.balle,obj)
						|| (Collision.collisionDroite(monde.balle,obj)))
				{	monde.balle.px = monde.balle.px - monde.balle.vx;
					monde.balle.vx-=monde.balle.ax;
					monde.balle.vx = -monde.balle.vx;
				}
				
				//si collision vient du haut
				if (Collision.collisionHaut(monde.balle,obj))
				{
					monde.balle.py = monde.balle.py - monde.balle.vy;
					monde.balle.vy=-1;
					if (monde.c.enAir)
						{
						monde.c.enAir=false;
						if (monde.balle.vx==0)
							{
							monde.balle.sprites.changeEtape("fixe");
							}
						else
							monde.balle.sprites.changeEtape("course");
						}
					
				}

				//si collision vient du Bas
				if (Collision.collisionBas(monde.balle,obj))
				{
                                   
					monde.balle.py = monde.balle.py - monde.balle.vy;
					monde.balle.vy=-monde.balle.vy;;
				}
			} 
		}
	}

}