Fixation de l'étape temporelle de la simulation
This commit is contained in:
parent
ecc6a3d006
commit
4d3fc1851d
|
@ -34,6 +34,11 @@ namespace Constants {
|
|||
*/
|
||||
static constexpr bool DEBUG_MODE = false;
|
||||
|
||||
/**
|
||||
* Durée fixe d'une étape de simulation physique
|
||||
*/
|
||||
static constexpr float PHYSICS_TIME = 1.f / 60;
|
||||
|
||||
/**
|
||||
* Correction positionnelle : pourcentage de correction
|
||||
* et seuil de correction
|
||||
|
|
|
@ -16,9 +16,8 @@ class Object;
|
|||
struct EngineState {
|
||||
std::vector<Object*> objects;
|
||||
std::array<bool, sf::Keyboard::KeyCount> keys;
|
||||
float delta;
|
||||
|
||||
EngineState() : delta(0.f) {
|
||||
EngineState() {
|
||||
// aucune touche n'est enfoncée au démarrage
|
||||
keys.fill(false);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include "engine.hpp"
|
||||
#include "constants.hpp"
|
||||
#include <cmath>
|
||||
#include <queue>
|
||||
|
||||
|
@ -11,6 +12,8 @@ Engine::Engine() : window(
|
|||
}
|
||||
|
||||
void Engine::start() {
|
||||
float accumulator = 0;
|
||||
|
||||
// boucle d'événements sur la fenêtre
|
||||
while (window.isOpen()) {
|
||||
sf::Event event;
|
||||
|
@ -32,9 +35,16 @@ void Engine::start() {
|
|||
}
|
||||
}
|
||||
|
||||
state.delta = clock.restart().asSeconds();
|
||||
float frame = clock.restart().asSeconds();
|
||||
accumulator += frame;
|
||||
|
||||
// tant qu'il reste du temps à passer,
|
||||
// effectuer la simulation physique étape par étape
|
||||
while (accumulator >= Constants::PHYSICS_TIME) {
|
||||
accumulator -= Constants::PHYSICS_TIME;
|
||||
update();
|
||||
}
|
||||
|
||||
update();
|
||||
draw();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -80,11 +80,11 @@ void Object::update(EngineState& state) {
|
|||
}
|
||||
|
||||
// intégration de la vitesse dans la position
|
||||
position += velocity * state.delta;
|
||||
position += velocity * Constants::PHYSICS_TIME;
|
||||
|
||||
// intégration des forces appliquées sur l'objet dans la vitesse
|
||||
acceleration = getForces(state) / mass;
|
||||
velocity += acceleration * state.delta;
|
||||
velocity += acceleration * Constants::PHYSICS_TIME;
|
||||
}
|
||||
|
||||
bool Object::getCollisionInfo(Object& obj, sf::Vector2f& normal, float& depth) {
|
||||
|
|
Loading…
Reference in New Issue