Dessin des vecteurs accélération et vitesse pour les tests
This commit is contained in:
		
							parent
							
								
									f740cd6441
								
							
						
					
					
						commit
						50210b669e
					
				| 
						 | 
					@ -8,19 +8,28 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class PhysicsObject : public Object {
 | 
					class PhysicsObject : public Object {
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
    sf::Vector2f velocity;
 | 
					 | 
				
			||||||
    float mass;
 | 
					    float mass;
 | 
				
			||||||
 | 
					    sf::Vector2f acceleration;
 | 
				
			||||||
 | 
					    sf::VertexArray accelLine;
 | 
				
			||||||
 | 
					    sf::Vector2f velocity;
 | 
				
			||||||
 | 
					    sf::VertexArray velLine;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Calcule les forces appliquées à l'objet
 | 
					     * Calcule les forces appliquées à l'objet
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    virtual sf::Vector2f getForces(State state);
 | 
					    virtual sf::Vector2f getForces(State state);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static constexpr float GRAVITY = 275;
 | 
					    static constexpr float GRAVITY = 20;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    PhysicsObject(float x, float y) :
 | 
					    PhysicsObject(float x, float y) :
 | 
				
			||||||
        Object(x, y), mass(1) {}
 | 
					        Object(x, y), mass(1), accelLine(sf::LinesStrip, 2),
 | 
				
			||||||
 | 
					        velLine(sf::LinesStrip, 2) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Dessine l'objet dans la fenêtre donnée
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    virtual void draw(sf::RenderWindow& window);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Met à jour la physique de l'objet juste avant le dessin d'une frame
 | 
					     * Met à jour la physique de l'objet juste avant le dessin d'une frame
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,8 @@
 | 
				
			||||||
#include "ball.hpp"
 | 
					#include "ball.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Ball::draw(sf::RenderWindow& window) {
 | 
					void Ball::draw(sf::RenderWindow& window) {
 | 
				
			||||||
 | 
					    PhysicsObject::draw(window);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// chargement de la texture de test
 | 
						// chargement de la texture de test
 | 
				
			||||||
	if (!texture.loadFromFile("./res/ball.png")) {
 | 
						if (!texture.loadFromFile("./res/ball.png")) {
 | 
				
			||||||
    	// erreur
 | 
					    	// erreur
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,9 +1,27 @@
 | 
				
			||||||
#include "physics_object.hpp"
 | 
					#include "physics_object.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void PhysicsObject::draw(sf::RenderWindow& window) {
 | 
				
			||||||
 | 
					    velLine[0].position = position;
 | 
				
			||||||
 | 
					    velLine[0].color = sf::Color::Green;
 | 
				
			||||||
 | 
					    velLine[1].position = position + velocity * 1.f;
 | 
				
			||||||
 | 
					    velLine[1].color = sf::Color::Green;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    accelLine[0].position = position;
 | 
				
			||||||
 | 
					    accelLine[0].color = sf::Color::Red;
 | 
				
			||||||
 | 
					    accelLine[1].position = position + acceleration * 1.f;
 | 
				
			||||||
 | 
					    accelLine[1].color = sf::Color::Red;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    window.draw(velLine);
 | 
				
			||||||
 | 
					    window.draw(accelLine);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void PhysicsObject::update(State state) {
 | 
					void PhysicsObject::update(State state) {
 | 
				
			||||||
    sf::Vector2f acceleration = getForces(state) / mass;
 | 
					    // intégration de la vitesse dans la position
 | 
				
			||||||
    velocity += acceleration * state.delta;
 | 
					 | 
				
			||||||
    position += velocity * state.delta;
 | 
					    position += velocity * state.delta;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // intégration des forces appliquées sur l'objet dans la vitesse
 | 
				
			||||||
 | 
					    acceleration = getForces(state) / mass;
 | 
				
			||||||
 | 
					    velocity += acceleration * state.delta;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sf::Vector2f PhysicsObject::getVelocity() {
 | 
					sf::Vector2f PhysicsObject::getVelocity() {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue